Merge "Treat langtags in SVG switch case-insensitively"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 15 Nov 2017 10:17:32 +0000 (10:17 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 15 Nov 2017 10:17:32 +0000 (10:17 +0000)
2885 files changed:
.mailmap
.phpcs.xml [new file with mode: 0644]
.stylelintrc.json
COPYING
CREDITS
Gruntfile.js
INSTALL
RELEASE-NOTES-1.30
RELEASE-NOTES-1.31
UPGRADE
api.php
autoload.php
composer.json
docs/hooks.txt
docs/skin.txt
docs/uidesign/mediawiki.diff.html
includes/Block.php
includes/CategoryFinder.php
includes/CategoryViewer.php
includes/CommentStore.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Feed.php
includes/FeedUtils.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/Html.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/Message.php
includes/MovePage.php
includes/NoLocalSettings.php
includes/OutputPage.php
includes/PreConfigSetup.php [deleted file]
includes/Preferences.php
includes/Revision.php
includes/RevisionList.php
includes/ServiceWiring.php
includes/Setup.php
includes/SiteConfiguration.php
includes/Title.php
includes/WatchedItem.php [deleted file]
includes/WatchedItemQueryService.php [deleted file]
includes/WatchedItemQueryServiceExtension.php [deleted file]
includes/WatchedItemStore.php [deleted file]
includes/WebStart.php
includes/actions/HistoryAction.php
includes/actions/RawAction.php
includes/api/ApiBase.php
includes/api/ApiComparePages.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatRaw.php
includes/api/ApiHelp.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllDeletedRevisions.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllRevisions.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryUsers.php
includes/api/ApiStashEdit.php
includes/api/i18n/cs.json
includes/api/i18n/es.json
includes/api/i18n/gl.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/nb.json
includes/api/i18n/ru.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/auth/CheckBlocksSecondaryAuthenticationProvider.php
includes/auth/LocalPasswordPrimaryAuthenticationProvider.php
includes/changes/ChangesListBooleanFilterGroup.php
includes/changes/ChangesListFilterGroup.php
includes/changes/ChangesListStringOptionsFilterGroup.php
includes/changes/RecentChange.php
includes/changetags/ChangeTagsRevisionList.php
includes/collation/IcuCollation.php
includes/composer/ComposerVendorHtaccessCreator.php [new file with mode: 0644]
includes/content/TextContent.php
includes/db/MWLBFactory.php
includes/deferred/DataUpdate.php
includes/deferred/DeferredUpdates.php
includes/deferred/HTMLCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/deferred/MergeableUpdate.php
includes/deferred/TransactionRoundDefiningUpdate.php [new file with mode: 0644]
includes/diff/DifferenceEngine.php
includes/editpage/TextConflictHelper.php [new file with mode: 0644]
includes/editpage/TextboxBuilder.php [new file with mode: 0644]
includes/exception/MWException.php
includes/exception/MWExceptionRenderer.php
includes/externalstore/ExternalStore.php
includes/externalstore/ExternalStoreFactory.php [new file with mode: 0644]
includes/filerepo/LocalRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/htmlform/fields/HTMLSelectAndOtherField.php
includes/htmlform/fields/HTMLSelectOrOtherField.php
includes/htmlform/fields/HTMLTextAreaField.php
includes/http/PhpHttpRequest.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/MssqlInstaller.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlInstaller.php
includes/installer/OracleInstaller.php
includes/installer/OracleUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/i18n/ar.json
includes/installer/i18n/ast.json
includes/installer/i18n/es.json
includes/installer/i18n/eu.json
includes/installer/i18n/hu.json
includes/installer/i18n/ia.json
includes/installer/i18n/id.json
includes/installer/i18n/ja.json
includes/installer/i18n/tokipona.json [deleted file]
includes/installer/i18n/zh-hant.json
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/jobqueue/jobs/HTMLCacheUpdateJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/HashRing.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/http/HttpAcceptNegotiator.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMssql.php
includes/libs/rdbms/database/DatabaseMysql.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/xmp/XMP.php
includes/logging/BlockLogFormatter.php
includes/logging/ContentModelLogFormatter.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogEntry.php
includes/logging/LogFormatter.php
includes/logging/LogPager.php
includes/logging/MergeLogFormatter.php
includes/logging/MoveLogFormatter.php
includes/logging/PatrolLogFormatter.php
includes/logging/ProtectLogFormatter.php
includes/objectcache/ObjectCache.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/PageArchive.php
includes/page/WikiFilePage.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/profiler/ProfilerFunctions.php [deleted file]
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/revisiondelete/RevDelArchiveList.php
includes/revisiondelete/RevDelArchivedFileList.php
includes/revisiondelete/RevDelFileList.php
includes/revisiondelete/RevDelRevisionList.php
includes/shell/Command.php
includes/shell/CommandFactory.php [new file with mode: 0644]
includes/shell/Result.php
includes/shell/Shell.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialMyLanguage.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialWatchlist.php
includes/specials/forms/PreferencesForm.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/MergeHistoryPager.php
includes/specials/pagers/NewPagesPager.php
includes/tidy/Balancer.php
includes/upload/UploadStash.php
includes/user/BotPassword.php
includes/user/PasswordReset.php
includes/user/User.php
includes/user/UserArray.php
includes/utils/ExecutableFinder.php [new file with mode: 0644]
includes/watcheditem/WatchedItem.php [new file with mode: 0644]
includes/watcheditem/WatchedItemQueryService.php [new file with mode: 0644]
includes/watcheditem/WatchedItemQueryServiceExtension.php [new file with mode: 0644]
includes/watcheditem/WatchedItemStore.php [new file with mode: 0644]
includes/watcheditem/WatchedItemStoreInterface.php [new file with mode: 0644]
includes/widget/NamespaceInputWidget.php
includes/widget/UsersMultiselectWidget.php
includes/widget/search/FullSearchResultWidget.php
includes/widget/search/InterwikiSearchResultSetWidget.php
jsduck.json
languages/Language.php
languages/LanguageConverter.php
languages/data/Names.php
languages/i18n/af.json
languages/i18n/ais.json
languages/i18n/ang.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de-ch.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/ga.json
languages/i18n/gl.json
languages/i18n/gom-latn.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/krl.json
languages/i18n/ku-latn.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/li.json
languages/i18n/lki.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/map-bms.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/mzn.json
languages/i18n/nan.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/or.json
languages/i18n/pcd.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sat.json
languages/i18n/sd.json
languages/i18n/shn.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/tay.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tokipona.json [deleted file]
languages/i18n/tr.json
languages/i18n/tyv.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKsh.php
languages/messages/MessagesMwl.php
languages/messages/MessagesRu.php
languages/messages/MessagesUr.php
maintenance/Maintenance.php
maintenance/checkComposerLockUpToDate.php
maintenance/checkImages.php
maintenance/checkSyntax.php [deleted file]
maintenance/checkUsernames.php
maintenance/cleanupBlocks.php
maintenance/cleanupEmptyCategories.php
maintenance/cleanupInvalidDbKeys.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupUploadStash.php
maintenance/compareParserCache.php
maintenance/convertUserOptions.php
maintenance/copyFileBackend.php
maintenance/copyJobQueue.php
maintenance/deleteSelfExternals.php
maintenance/dev/installphp.sh
maintenance/doMaintenance.php
maintenance/dumpCategoriesAsRdf.php
maintenance/eraseArchivedFile.php
maintenance/findMissingFiles.php
maintenance/findOrphanedFiles.php
maintenance/fixDefaultJsonContentPages.php
maintenance/fixUserRegistration.php
maintenance/initUserPreference.php
maintenance/invalidateUserSessions.php
maintenance/jsduck/categories.json
maintenance/language/transstat.php
maintenance/makeTestEdits.php
maintenance/manageJobs.php
maintenance/mergeMessageFileList.php
maintenance/migrateComments.php
maintenance/migrateFileRepoLayout.php
maintenance/migrateUserGroup.php
maintenance/mssql/archives/patch-site_stats-pk.sql [new file with mode: 0644]
maintenance/mssql/tables.sql
maintenance/oracle/archives/patch-site_stats-pk.sql [new file with mode: 0644]
maintenance/oracle/tables.sql
maintenance/populateBacklinkNamespace.php
maintenance/populateContentModel.php
maintenance/populateFilearchiveSha1.php
maintenance/populateImageSha1.php
maintenance/populateIpChanges.php
maintenance/populateLogSearch.php
maintenance/populateLogUsertext.php
maintenance/populatePPSortKey.php
maintenance/populateParentId.php
maintenance/populateRecentChangesSource.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/postgres/archives/patch-add-3d.sql [deleted file]
maintenance/postgres/archives/patch-site_stats-pk.sql [new file with mode: 0644]
maintenance/postgres/tables.sql
maintenance/purgeChangedFiles.php
maintenance/purgeChangedPages.php
maintenance/purgeList.php
maintenance/purgeModuleDeps.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/recountCategories.php
maintenance/refreshFileHeaders.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/removeInvalidEmails.php
maintenance/resetUserTokens.php
maintenance/runJobs.php
maintenance/storage/testCompression.php
maintenance/syncFileBackend.php
maintenance/update.php
maintenance/updateRestrictions.php
maintenance/userOptions.inc [deleted file]
maintenance/userOptions.php
maintenance/wrapOldPasswords.php
package.json
phpcs.xml [deleted file]
resources/Resources.php
resources/lib/jquery/jquery.appear.js [deleted file]
resources/lib/jquery/jquery.js
resources/lib/jquery/jquery3.js [deleted file]
resources/lib/oojs-ui/i18n/ais.json
resources/lib/oojs-ui/i18n/ia.json
resources/lib/oojs-ui/i18n/id.json
resources/lib/oojs-ui/i18n/ka.json
resources/lib/oojs-ui/i18n/skr-arab.json
resources/lib/oojs-ui/i18n/ur.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-core-apex.css
resources/lib/oojs-ui/oojs-ui-core-wikimediaui.css
resources/lib/oojs-ui/oojs-ui-core.js
resources/lib/oojs-ui/oojs-ui-core.js.map
resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
resources/lib/oojs-ui/oojs-ui-toolbars-wikimediaui.css
resources/lib/oojs-ui/oojs-ui-toolbars.js
resources/lib/oojs-ui/oojs-ui-toolbars.js.map
resources/lib/oojs-ui/oojs-ui-widgets-apex.css
resources/lib/oojs-ui/oojs-ui-widgets-wikimediaui.css
resources/lib/oojs-ui/oojs-ui-widgets.js
resources/lib/oojs-ui/oojs-ui-widgets.js.map
resources/lib/oojs-ui/oojs-ui-wikimediaui.js
resources/lib/oojs-ui/oojs-ui-windows-apex.css
resources/lib/oojs-ui/oojs-ui-windows-wikimediaui.css
resources/lib/oojs-ui/oojs-ui-windows.js
resources/lib/oojs-ui/themes/apex/icons-alerts.json
resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
resources/lib/oojs-ui/themes/apex/icons-interactions.json
resources/lib/oojs-ui/themes/apex/icons-layout.json
resources/lib/oojs-ui/themes/apex/images/icons/add.png
resources/lib/oojs-ui/themes/apex/images/icons/add.svg
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg
resources/lib/oojs-ui/themes/apex/images/icons/alert.png
resources/lib/oojs-ui/themes/apex/images/icons/alert.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-center.png
resources/lib/oojs-ui/themes/apex/images/icons/align-center.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png
resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png
resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.svg
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/article-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/article-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/article-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/article-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/bell.png
resources/lib/oojs-ui/themes/apex/images/icons/bell.svg
resources/lib/oojs-ui/themes/apex/images/icons/bellOn-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/bellOn-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/bellOn-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/bellOn-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/block.png
resources/lib/oojs-ui/themes/apex/images/icons/block.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-b.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-f.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-l.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-n.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-v.svg
resources/lib/oojs-ui/themes/apex/images/icons/bright-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/bright-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/bright.png
resources/lib/oojs-ui/themes/apex/images/icons/bright.svg
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/cancel.png
resources/lib/oojs-ui/themes/apex/images/icons/cancel.svg
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/apex/images/icons/check.png
resources/lib/oojs-ui/themes/apex/images/icons/check.svg
resources/lib/oojs-ui/themes/apex/images/icons/clear.png
resources/lib/oojs-ui/themes/apex/images/icons/clear.svg
resources/lib/oojs-ui/themes/apex/images/icons/clip.png
resources/lib/oojs-ui/themes/apex/images/icons/clip.svg
resources/lib/oojs-ui/themes/apex/images/icons/clock.png
resources/lib/oojs-ui/themes/apex/images/icons/clock.svg
resources/lib/oojs-ui/themes/apex/images/icons/close.png
resources/lib/oojs-ui/themes/apex/images/icons/close.svg
resources/lib/oojs-ui/themes/apex/images/icons/code.png
resources/lib/oojs-ui/themes/apex/images/icons/code.svg
resources/lib/oojs-ui/themes/apex/images/icons/collapse.png
resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg
resources/lib/oojs-ui/themes/apex/images/icons/comment.png
resources/lib/oojs-ui/themes/apex/images/icons/comment.svg
resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png
resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg
resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png
resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.svg
resources/lib/oojs-ui/themes/apex/images/icons/draggable.png
resources/lib/oojs-ui/themes/apex/images/icons/draggable.svg
resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png
resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.svg
resources/lib/oojs-ui/themes/apex/images/icons/expand.png
resources/lib/oojs-ui/themes/apex/images/icons/expand.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/eye-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/eye-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/eye.png
resources/lib/oojs-ui/themes/apex/images/icons/eye.svg
resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed.png
resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed.svg
resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/fullScreen.png
resources/lib/oojs-ui/themes/apex/images/icons/fullScreen.svg
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/halfBright-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/halfBright-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/halfBright.png
resources/lib/oojs-ui/themes/apex/images/icons/halfBright.svg
resources/lib/oojs-ui/themes/apex/images/icons/halfStar-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/halfStar-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/halfStar-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/halfStar-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/heart.png
resources/lib/oojs-ui/themes/apex/images/icons/heart.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/history.png
resources/lib/oojs-ui/themes/apex/images/icons/history.svg
resources/lib/oojs-ui/themes/apex/images/icons/image.png
resources/lib/oojs-ui/themes/apex/images/icons/image.svg
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/info.png
resources/lib/oojs-ui/themes/apex/images/icons/info.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-e.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-i.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-k.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/link.png
resources/lib/oojs-ui/themes/apex/images/icons/link.svg
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/lock.png
resources/lib/oojs-ui/themes/apex/images/icons/lock.svg
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/markup.png
resources/lib/oojs-ui/themes/apex/images/icons/markup.svg
resources/lib/oojs-ui/themes/apex/images/icons/menu.png
resources/lib/oojs-ui/themes/apex/images/icons/menu.svg
resources/lib/oojs-ui/themes/apex/images/icons/message-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/message-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/message-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/message-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/moon-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/moon-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/moon.png
resources/lib/oojs-ui/themes/apex/images/icons/moon.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-end-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/move-end-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-end-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/move-end-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/move.png
resources/lib/oojs-ui/themes/apex/images/icons/move.svg
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/notBright-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/notBright-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/notBright.png
resources/lib/oojs-ui/themes/apex/images/icons/notBright.svg
resources/lib/oojs-ui/themes/apex/images/icons/notice.png
resources/lib/oojs-ui/themes/apex/images/icons/notice.svg
resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/play-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/play-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/play-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/play-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/pushPin.png
resources/lib/oojs-ui/themes/apex/images/icons/pushPin.svg
resources/lib/oojs-ui/themes/apex/images/icons/puzzle.png
resources/lib/oojs-ui/themes/apex/images/icons/puzzle.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/apex/images/icons/settings.png
resources/lib/oojs-ui/themes/apex/images/icons/settings.svg
resources/lib/oojs-ui/themes/apex/images/icons/signature-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/signature-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/signature-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/signature-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/star.png
resources/lib/oojs-ui/themes/apex/images/icons/star.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/subtract.png
resources/lib/oojs-ui/themes/apex/images/icons/subtract.svg
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png
resources/lib/oojs-ui/themes/apex/images/icons/table-caption.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png
resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.svg
resources/lib/oojs-ui/themes/apex/images/icons/table.png
resources/lib/oojs-ui/themes/apex/images/icons/table.svg
resources/lib/oojs-ui/themes/apex/images/icons/tag.png
resources/lib/oojs-ui/themes/apex/images/icons/tag.svg
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-style.png
resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg
resources/lib/oojs-ui/themes/apex/images/icons/trash.png
resources/lib/oojs-ui/themes/apex/images/icons/trash.svg
resources/lib/oojs-ui/themes/apex/images/icons/tray.png
resources/lib/oojs-ui/themes/apex/images/icons/tray.svg
resources/lib/oojs-ui/themes/apex/images/icons/unBlock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unBlock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unBlock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unBlock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/unClip.png
resources/lib/oojs-ui/themes/apex/images/icons/unClip.svg
resources/lib/oojs-ui/themes/apex/images/icons/unFlag-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unFlag-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unFlag-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unFlag-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/unStar.png
resources/lib/oojs-ui/themes/apex/images/icons/unStar.svg
resources/lib/oojs-ui/themes/apex/images/icons/unTrash-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unTrash-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unTrash-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unTrash-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png
resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.svg
resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/userAvatar.png
resources/lib/oojs-ui/themes/apex/images/icons/userAvatar.svg
resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png
resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.svg
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator-invert.svg
resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator.png
resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator.svg
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png
resources/lib/oojs-ui/themes/apex/images/icons/wikiText.svg
resources/lib/oojs-ui/themes/apex/images/icons/window.png
resources/lib/oojs-ui/themes/apex/images/icons/window.svg
resources/lib/oojs-ui/themes/apex/images/indicators/alert.png
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/apex/images/indicators/clear.png
resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg
resources/lib/oojs-ui/themes/apex/images/indicators/required.png
resources/lib/oojs-ui/themes/apex/images/indicators/required.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/apex/images/textures/transparency.png
resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg
resources/lib/oojs-ui/themes/wikimediaui/icons-alerts.json
resources/lib/oojs-ui/themes/wikimediaui/icons-editing-advanced.json
resources/lib/oojs-ui/themes/wikimediaui/icons-interactions.json
resources/lib/oojs-ui/themes/wikimediaui/icons-layout.json
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/add.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-warning.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-warning.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/block.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/check.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/close.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/code.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/history.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/info.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/move.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/star.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.png [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.svg [deleted file]
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/table.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-warning.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-warning.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-destructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-destructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-constructive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-constructive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-progressive.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-progressive.svg
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window.png
resources/lib/oojs-ui/themes/wikimediaui/images/icons/window.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl-invert.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl-invert.svg
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/wikimediaui/images/textures/transparency.png
resources/lib/oojs-ui/themes/wikimediaui/images/textures/transparency.svg
resources/src/jquery/images/sort_both.svg
resources/src/jquery/images/sort_down.svg
resources/src/jquery/images/sort_up.svg
resources/src/jquery/jquery.autoEllipsis.js [deleted file]
resources/src/jquery/jquery.badge.css [deleted file]
resources/src/jquery/jquery.badge.js [deleted file]
resources/src/jquery/jquery.placeholder.js [deleted file]
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/images/close.svg
resources/src/mediawiki.action/images/nextredirect-ltr.svg
resources/src/mediawiki.action/images/nextredirect-rtl.svg
resources/src/mediawiki.action/images/redirect-ltr.svg
resources/src/mediawiki.action/images/redirect-rtl.svg
resources/src/mediawiki.action/mediawiki.action.edit.styles.less
resources/src/mediawiki.action/mediawiki.action.history.css
resources/src/mediawiki.action/mediawiki.action.history.styles.css
resources/src/mediawiki.action/mediawiki.action.view.redirect.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/images/magnify-clip-ltr.svg
resources/src/mediawiki.legacy/images/magnify-clip-rtl.svg
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ChangesListViewModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueryItemModel.js
resources/src/mediawiki.rcfilters/images/clip.svg
resources/src/mediawiki.rcfilters/images/pushPin.svg
resources/src/mediawiki.rcfilters/images/unClip.svg
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.mixins.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.highlightCircles.seenunseen.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ItemMenuOptionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.LiveUpdateButtonWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.MenuSelectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RcTopSectionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.TagItemWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.WatchlistTopSectionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.variables.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuOptionWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RcTopSectionWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.TagItemWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ViewSwitchWidget.js
resources/src/mediawiki.skinning/content.externallinks.css
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.skinning/interface.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css
resources/src/mediawiki.special/mediawiki.special.comparepages.styles.less
resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js
resources/src/mediawiki.special/mediawiki.special.preferences.styles.css
resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js
resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js
resources/src/mediawiki.toolbar/images/ru/LICENSE
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/forms.less
resources/src/mediawiki.ui/components/images/checkbox-checked.svg
resources/src/mediawiki.ui/components/images/checked.png [deleted file]
resources/src/mediawiki.ui/components/images/checked.svg [deleted file]
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki.ui/components/radio.less
resources/src/mediawiki.widgets/images/page-disambiguation-ltr.svg
resources/src/mediawiki.widgets/images/page-disambiguation-rtl.svg
resources/src/mediawiki.widgets/images/page-existing-ltr.svg
resources/src/mediawiki.widgets/images/page-existing-rtl.svg
resources/src/mediawiki.widgets/images/page-not-found-he-yi.svg
resources/src/mediawiki.widgets/images/page-not-found-ltr.svg
resources/src/mediawiki.widgets/images/page-not-found-rtl.svg
resources/src/mediawiki.widgets/images/page-redirect-ltr.svg
resources/src/mediawiki.widgets/images/page-redirect-rtl.svg
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.styles.less
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
resources/src/mediawiki/api.js
resources/src/mediawiki/htmlform/images/question.png
resources/src/mediawiki/htmlform/images/question.svg
resources/src/mediawiki/images/arrow-collapsed-ltr.png
resources/src/mediawiki/images/arrow-collapsed-ltr.svg
resources/src/mediawiki/images/arrow-collapsed-rtl.png
resources/src/mediawiki/images/arrow-collapsed-rtl.svg
resources/src/mediawiki/images/arrow-expanded.png
resources/src/mediawiki/images/arrow-expanded.svg
resources/src/mediawiki/images/arrow-sort-ascending.png
resources/src/mediawiki/images/arrow-sort-ascending.svg
resources/src/mediawiki/images/arrow-sort-descending.png
resources/src/mediawiki/images/arrow-sort-descending.svg
resources/src/mediawiki/images/feed-icon.svg
resources/src/mediawiki/images/help.svg
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png [deleted file]
resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png [deleted file]
resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png [deleted file]
resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-forward-ltr.png [deleted file]
resources/src/mediawiki/images/pager-arrow-forward-ltr.svg [deleted file]
resources/src/mediawiki/images/pager-arrow-forward-rtl.png [deleted file]
resources/src/mediawiki/images/pager-arrow-forward-rtl.svg [deleted file]
resources/src/mediawiki/mediawiki.debug.less
resources/src/mediawiki/mediawiki.diff.styles.css
resources/src/mediawiki/mediawiki.editfont.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.notification.css
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.visibleTimeout.js [new file with mode: 0644]
resources/src/mediawiki/page/watch.js
resources/src/startup.js
tests/common/TestsAutoLoader.php
tests/parser/TidySupport.php
tests/parser/parserTests.txt
tests/phan/config.php
tests/phpunit/autoload.ide.php
tests/phpunit/data/db/sqlite/tables-1.19.sql [new file with mode: 0644]
tests/phpunit/data/db/sqlite/tables-1.20.sql [new file with mode: 0644]
tests/phpunit/data/db/sqlite/tables-1.21.sql [new file with mode: 0644]
tests/phpunit/data/db/sqlite/tables-1.22.sql [new file with mode: 0644]
tests/phpunit/data/db/sqlite/tables-1.23.sql [new file with mode: 0644]
tests/phpunit/data/media/README
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/CommentStoreTest.php
tests/phpunit/includes/HooksTest.php
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/RevisionContentHandlerDbTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionDbTestBase.php [new file with mode: 0644]
tests/phpunit/includes/RevisionNoContentHandlerDbTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionStorageTest.php [deleted file]
tests/phpunit/includes/RevisionStorageTestContentHandlerUseDB.php [deleted file]
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/RevisionTestModifyableContent.php [new file with mode: 0644]
tests/phpunit/includes/RevisionTestModifyableContentHandler.php [new file with mode: 0644]
tests/phpunit/includes/WatchedItemIntegrationTest.php [deleted file]
tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php [deleted file]
tests/phpunit/includes/WatchedItemStoreIntegrationTest.php [deleted file]
tests/phpunit/includes/WatchedItemStoreUnitTest.php [deleted file]
tests/phpunit/includes/WatchedItemUnitTest.php [deleted file]
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/ApiParseTest.php
tests/phpunit/includes/auth/LocalPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/deferred/CdnCacheUpdateTest.php
tests/phpunit/includes/deferred/DeferredUpdatesTest.php
tests/phpunit/includes/deferred/MWCallableUpdateTest.php [new file with mode: 0644]
tests/phpunit/includes/deferred/TransactionRoundDefiningUpdateTest.php [new file with mode: 0644]
tests/phpunit/includes/externalstore/ExternalStoreFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/externalstore/ExternalStoreForTesting.php [new file with mode: 0644]
tests/phpunit/includes/externalstore/ExternalStoreTest.php
tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
tests/phpunit/includes/page/ArticleTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderSkinModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/shell/CommandFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/shell/CommandTest.php
tests/phpunit/includes/skins/SkinFactoryTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/includes/specials/SpecialMyLanguageTest.php
tests/phpunit/includes/specials/SpecialPageTestBase.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/includes/watcheditem/WatchedItemIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php [new file with mode: 0644]
tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php [new file with mode: 0644]
tests/phpunit/includes/watcheditem/WatchedItemUnitTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageCodeTest.php
tests/phpunit/languages/LanguageConverterTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/classes/LanguagePlTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/mocks/MockChangesListFilterGroup.php
tests/phpunit/mocks/content/DummyContentForTesting.php
tests/phpunit/mocks/content/DummyContentHandlerForTesting.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js [deleted file]
tests/qunit/suites/resources/mediawiki.rcfilters/UriProcessor.test.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.visibleTimeout.test.js [new file with mode: 0644]
tests/selenium/pageobjects/preferences.page.js

index 5a76fb9..c4f8604 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -413,8 +413,9 @@ Sumit Asthana <asthana.sumit23@gmail.com>
 TerraCodes <terracodes@tools.wmflabs.org>
 Thalia Chan <thalia@cantorion.org>
 Thalia Chan <thalia@cantorion.org> <thalia.e.chan@googlemail.com>
-Thiemo Mättig <thiemo.maettig@wikimedia.de>
-Thiemo Mättig <thiemo.maettig@wikimedia.de> <mr.heat@gmx.de>
+Thiemo Kreuz <thiemo.kreuz@wikimedia.de>
+Thiemo Kreuz <thiemo.kreuz@wikimedia.de> <thiemo.maettig@wikimedia.de>
+Thiemo Kreuz <thiemo.kreuz@wikimedia.de> <mr.heat@gmx.de>
 This, that and the other <at.light@live.com.au>
 tholam <t.lam@lamsinfosystem.com>
 Thomas Bleher <ThomasBleher@gmx.de> <tbleher@users.mediawiki.org>
diff --git a/.phpcs.xml b/.phpcs.xml
new file mode 100644 (file)
index 0000000..3170381
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+<ruleset name="MediaWiki">
+       <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+               <exclude name="Generic.ControlStructures.InlineControlStructure" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingReturn" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.ParamNameNoMatch" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.ExtraParamComment" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
+               <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentStart" />
+               <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentEnd" />
+               <exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
+               <exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
+               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.SingleSpaceBeforeSingleLineComment" />
+               <exclude name="MediaWiki.Usage.DbrQueryUsage.DbrQueryFound" />
+               <exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
+               <exclude name="MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals" />
+               <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
+               <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+               <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
+               <exclude name="MediaWiki.VariableAnalysis.ForbiddenGlobalVariables.ForbiddenGlobal$wgTitle" />
+               <exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE" />
+               <exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE_TALK" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.SpacingDocStar" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.SpacingDocTag" />
+       </rule>
+       <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
+               <properties>
+                       <!--
+                       includes/compat/normal/UtfNormalUtil.php
+                       * codepointToUtf8
+                       * escapeSingleString
+                       * hexSequenceToUtf8
+                       * utf8ToCodepoint
+                       * utf8ToHexSequence
+                       includes/GlobalFunctions.php
+                       * mimeTypeMatch
+                       maintenance/benchmarks/bench_strtr_str_replace.php
+                       * bfNormalizeTitleStrReplace
+                       * bfNormalizeTitleStrTr
+                       maintenance/cdb.php
+                       * cdbShowHelp
+                       maintenance/language/transstat.php
+                       * showUsage
+                       maintenance/mcc.php
+                       * mccGetHelp
+                       * mccShowUsage
+                       maintenance/storage/moveToExternal.php
+                       * moveToExternal
+                       maintenance/storage/resolveStubs.php
+                       * resolveStub
+                       * resolveStubs
+                       profileinfo.php
+                       * compare_point
+                       * getEscapedProfileUrl
+                       tests/phpunit/includes/HooksTest.php
+                       * NothingFunction
+                       * NothingFunctionData
+                       tests/qunit/data/styleTest.css.php
+                       * cssfilter
+                       -->
+                       <property name="ignoreList" type="array" value="bfNormalizeTitleStrReplace,bfNormalizeTitleStrTr,cdbShowHelp,codepointToUtf8,compare_point,cssfilter,escapeSingleString,getEscapedProfileUrl,hexSequenceToUtf8,mccGetHelp,mccShowUsage,mimeTypeMatch,moveToExternal,NothingFunction,NothingFunctionData,resolveStub,resolveStubs,showUsage,utf8ToCodepoint,utf8ToHexSequence" />
+               </properties>
+       </rule>
+       <rule ref="MediaWiki.NamingConventions.ValidGlobalName">
+               <properties>
+                       <property name="ignoreList" type="array" value="$IP,$messageMemc,$parserMemc" />
+               </properties>
+       </rule>
+       <rule ref="Generic.Files.LineLength">
+               <exclude-pattern>*/languages/messages/Messages*.php</exclude-pattern>
+       </rule>
+       <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+               <exclude-pattern>*/includes/StubObject.php</exclude-pattern>
+       </rule>
+       <file>.</file>
+       <arg name="encoding" value="UTF-8"/>
+       <arg name="extensions" value="php,php5,inc,sample"/>
+       <exclude-pattern type="relative">^extensions/</exclude-pattern>
+       <exclude-pattern type="relative">^skins/</exclude-pattern>
+       <exclude-pattern>AdminSettings\.php</exclude-pattern>
+       <exclude-pattern>LocalSettings\.php</exclude-pattern>
+       <exclude-pattern>StartProfiler\.php</exclude-pattern>
+</ruleset>
index 27e289d..60c8f36 100644 (file)
@@ -3,6 +3,6 @@
        "rules": {
                "no-descending-specificity": null,
 
-               "selector-no-id": null
+               "selector-max-id": null
        }
 }
diff --git a/COPYING b/COPYING
index 1cdc9d4..8cecc2e 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -6,7 +6,7 @@ MediaWiki is licensed under the terms of the GNU General Public License,
 version 2 or later. Derivative works and later versions of the code must be
 free software licensed under the same or a compatible license. This includes
 "extensions" that use MediaWiki functions or variables; see
-http://www.gnu.org/licenses/gpl-faq.html#GPLAndPlugins for details.
+https://www.gnu.org/licenses/gpl-faq.html#GPLAndPlugins for details.
 
 For the full text of version 2 of the license, see
 https://www.gnu.org/licenses/gpl-2.0.html or '''GNU General Public License'''
@@ -36,7 +36,7 @@ CC licenses:
 * resources/assets/licenses/cc-by.png
 
 These icons are trademarked, and used subject to the CC trademark license,
-available at http://creativecommons.org/policies#trademark
+available at https://creativecommons.org/policies#trademark
 
 == GNU GENERAL PUBLIC LICENSE ==
 
diff --git a/CREDITS b/CREDITS
index c38c3fc..6ab4ad3 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -625,7 +625,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * The Discoverer
 * The Evil IP address
 * theopolisme
-* Thiemo Mättig
+* Thiemo Kreuz
 * This, that and the other
 * tholam
 * Thomas Arrow
index dbbfcb8..d1ef72f 100644 (file)
@@ -62,9 +62,6 @@ module.exports = function ( grunt ) {
                        installer: 'includes/installer/i18n/'
                },
                stylelint: {
-                       options: {
-                               syntax: 'less'
-                       },
                        src: '{resources/src,mw-config}/**/*.{css,less}'
                },
                watch: {
diff --git a/INSTALL b/INSTALL
index 13c9c62..1a59f0b 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -82,8 +82,8 @@ help (please provide enough information to work with, and preferably be aware of
 what you're doing!) and keep track of major changes to the software, including
 performance improvements and security patches.
 
-http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce (low traffic)
+https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce (low traffic)
 
-http://lists.wikimedia.org/mailman/listinfo/mediawiki-l (site admin support)
+https://lists.wikimedia.org/mailman/listinfo/mediawiki-l (site admin support)
 
-http://lists.wikimedia.org/mailman/listinfo/wikitech-l (development)
+https://lists.wikimedia.org/mailman/listinfo/wikitech-l (development)
index bec7b86..1449dab 100644 (file)
@@ -80,12 +80,19 @@ section).
 === External library changes in 1.30 ===
 
 ==== Upgraded external libraries ====
-* mediawiki/mediawiki-codesniffer updated to 0.8.1.
-* wikimedia/composer-merge-plugin updated to 1.4.1.
+* Updated justinrainbow/json-schema from v3.0 to v5.2.
+* Updated mediawiki/mediawiki-codesniffer from v0.7.2 to v0.12.0.
+* Updated wikimedia/composer-merge-plugin from v1.4.0 to v1.4.1.
+* Updated wikimedia/relpath from v1.0.3 to v2.0.0.
+* Updated OOjs from v2.0.0 to v2.1.0.
+* Updated OOUI from v0.21.1 to v0.23.0.
+* Updated QUnit from v1.23.1 to v2.4.0.
+* Updated phpunit/phpunit from v4.8.35 to v4.8.36.
 
 ==== New external libraries ====
 * The class \TestingAccessWrapper has been moved to the external library
   wikimedia/testing-access-wrapper and renamed \Wikimedia\TestingAccessWrapper.
+* Purtle, a fast, lightweight RDF generator.
 
 ==== Removed and replaced external libraries ====
 * …
@@ -124,6 +131,7 @@ changes to languages because of Phabricator reports.
 * Added: kbp (Kabɩyɛ / Kabiyè)
 * Added: skr (Saraiki, سرائیکی)
 * Added: tay (Tayal / Atayal)
+* Removed: tokipona (Toki Pona)
 
 ==== Pig Latin added ====
 * (T45547) Added Pig Latin, a made-up English variant (en-x-piglatin),
@@ -240,6 +248,9 @@ changes to languages because of Phabricator reports.
 * (T138166) SpecialEmailUser::getTarget() now requires a second argument, the sending
   user object. Using the method without the second argument is deprecated.
 * (T67297) Browsers that don't support Unicode will have their edits rejected.
+* (T178450) The module 'jquery.badge' is deprecated and will be removed in a future
+  release. For notifying the user of an event, the Notifications ("Echo") system
+  should be used instead.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index 3fd1fc8..18dfc42 100644 (file)
@@ -6,10 +6,23 @@ MediaWiki 1.31 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.31 ===
+* $wgEnableAPI and $wgEnableWriteAPI are now deprecated and will be removed in
+  a future version. The API is now considered to be stable, secure and
+  essential.
+* $wgUsejQueryThree was removed, as it is now the default. This was documented as a
+  temporary variable during the migration period, deprecated since 1.29.
+* $wgLogoHD has been updated to support svg images and uses $wgLogo where
+  possible for fallback images such as png.
+* (T44246) $wgFilterLogTypes will no longer ignore 'patrol' when user does
+  not have the right to mark things patrolled.
 * …
 
 === New features in 1.31 ===
-* …
+* Wikimedia\Rdbms\IDatabase->select() and similar methods now support
+  joins with parentheses for grouping.
+* As a first pass in standardizing dialog boxes across the MediaWiki product,
+Html class now provides helper methods for messageBox, successBox, errorBox and
+warningBox generation.
 
 === External library changes in 1.31 ===
 
@@ -20,9 +33,18 @@ production.
 * …
 
 ==== Removed and replaced external libraries ====
+* (T17845) The deprecated 'jquery.badge' module was removed.
+* The deprecated 'jquery.autoEllipsis' module was removed. Use the CSS
+  text-overflow property instead.
+* The deprecated 'jquery.placeholder' module was removed.
+* The deprecated 'jquery.appear' module was removed. Use the
+  'mediawiki.viewport' module instead.
+* The deprecated 'mediawiki.widgets.CategorySelector' module alias was removed.
+  Use the 'mediawiki.widgets.CategoryMultiselectWidget' module directly instead.
 * …
 
 === Bug fixes in 1.31 ===
+* (T90902) Non-breaking space in header ID breaks anchor
 * …
 
 === Action API changes in 1.31 ===
@@ -36,12 +58,47 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Phabricator reports.
 
-* 
+* (T180052) Mirandese (mwl) now supports gendered NS_USER/NS_USER_TALK namespaces.
 
 === Other changes in 1.31 ===
 * MessageBlobStore::insertMessageBlob() (deprecated in 1.27) was removed.
 * The global function wfBCP47 was renamed to LanguageCode::bcp47.
 * The global function wfBCP47 is now deprecated.
+* The global function wfCountDown() is now deprecated in favor of
+  Maintenance::countDown()
+* The OutputPage class constructor now requires a context parameter,
+  (instantiating without context was deprecated in 1.18)
+* mw.page (deprecated in 1.30) was removed.
+* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
+  related WikiPage::PURGE_* constants, deprecated in 1.29, were removed.
+* The Article::selectFields(), Article::onArticleCreate(),
+  Article::onArticleDelete(), and Article::onArticleEdit() methods, deprecated
+  in 1.24, were removed.
+* Installer::locateExecutable() and Installer::locateExecutableInDefaultPaths()
+  were removed, use ExecutableFinder::findInDefaultPaths() instead.
+* Several methods for returning lists of fields to select from the database
+  have been deprecated in favor of similar methods that also return the tables
+  to select from and the join conditions for those tables.
+  * Block::selectFields() → Block::getQueryInfo()
+  * RecentChange::selectFields() → RecentChange::getQueryInfo()
+  * ArchivedFile::selectFields() → ArchivedFile::getQueryInfo()
+  * LocalFile::selectFields() → LocalFile::getQueryInfo()
+  * LocalFile::getCacheFields() with a prefix no longer works
+  * LocalFile::getLazyCacheFields() with a prefix no longer works
+  * OldLocalFile::selectFields() → OldLocalFile::getQueryInfo()
+  * RecentChange::selectFields() → RecentChange::getQueryInfo()
+  * Revision::userJoinCond() → Revision::getQueryInfo( [ 'user' ] )
+  * Revision::selectUserFields() → Revision::getQueryInfo( [ 'user' ] )
+  * Revision::pageJoinCond() → Revision::getQueryInfo( [ 'page' ] )
+  * Revision::selectPageFields() → Revision::getQueryInfo( [ 'page' ] )
+  * Revision::selectTextFields() → Revision::getQueryInfo( [ 'text' ] )
+  * Revision::selectFields() → Revision::getQueryInfo()
+  * Revision::selectArchiveFields() → Revision::getArchiveQueryInfo()
+  * User::selectFields() → User::getQueryInfo()
+  * WikiPage::selectFields() → WikiPage::getQueryInfo()
+  * Due to significant refactoring, method ContribsPager::getUserCond() that had
+    no access restriction has been removed.
+  * Revision::setUserIdAndName() was deprecated.
 
 == Compatibility ==
 MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for
diff --git a/UPGRADE b/UPGRADE
index 0e6ad9b..8fb187d 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -3,7 +3,7 @@ specific problems, check
 
 * the documentation at https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents
 * the mediawiki-l mailing list archive at
-  http://lists.wikimedia.org/pipermail/mediawiki-l/
+  https://lists.wikimedia.org/pipermail/mediawiki-l/
 * the bug tracker at https://phabricator.wikimedia.org/
 
 for information and workarounds to common issues.
@@ -36,7 +36,7 @@ your operating system documentation for information on making copies of files.
 
 Download the files for the new version of the software. These are available
 as a compressed "tar" archive from the Wikimedia Download Service
-(http://download.wikimedia.org/mediawiki).
+(https://releases.wikimedia.org/mediawiki/).
 
 You can also obtain the new files directly from our Git source code
 repository.
diff --git a/api.php b/api.php
index a6ce3b2..d9a69db 100644 (file)
--- a/api.php
+++ b/api.php
@@ -44,6 +44,17 @@ if ( !$wgRequest->checkUrlExtension() ) {
        return;
 }
 
+// Pathinfo can be used for stupid things. We don't support it for api.php at
+// all, so error out if it's present.
+if ( isset( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != '' ) {
+       $correctUrl = wfAppendQuery( wfScript( 'api' ), $wgRequest->getQueryValues() );
+       $correctUrl = wfExpandUrl( $correctUrl, PROTO_CANONICAL );
+       header( "Location: $correctUrl", true, 301 );
+       echo 'This endpoint does not support "path info", i.e. extra text between "api.php"'
+               . 'and the "?". Remove any such text and try again.';
+       die( 1 );
+}
+
 // Verify that the API has not been disabled
 if ( !$wgEnableAPI ) {
        header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
index 0a2ecf0..a826f7a 100644 (file)
@@ -255,7 +255,6 @@ $wgAutoloadLocalClasses = [
        'CheckLanguageCLI' => __DIR__ . '/maintenance/language/checkLanguage.inc',
        'CheckLess' => __DIR__ . '/maintenance/checkLess.php',
        'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php',
-       'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php',
        'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php',
        'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
        'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
@@ -285,6 +284,7 @@ $wgAutoloadLocalClasses = [
        'ComposerJson' => __DIR__ . '/includes/libs/composer/ComposerJson.php',
        'ComposerLock' => __DIR__ . '/includes/libs/composer/ComposerLock.php',
        'ComposerPackageModifier' => __DIR__ . '/includes/composer/ComposerPackageModifier.php',
+       'ComposerVendorHtaccessCreator' => __DIR__ . '/includes/composer/ComposerVendorHtaccessCreator.php',
        'ComposerVersionNormalizer' => __DIR__ . '/includes/composer/ComposerVersionNormalizer.php',
        'CompressOld' => __DIR__ . '/maintenance/storage/compressOld.php',
        'ConcatenatedGzipHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
@@ -442,6 +442,7 @@ $wgAutoloadLocalClasses = [
        'EventRelayerGroup' => __DIR__ . '/includes/EventRelayerGroup.php',
        'EventRelayerKafka' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerKafka.php',
        'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerNull.php',
+       'ExecutableFinder' => __DIR__ . '/includes/utils/ExecutableFinder.php',
        'Exif' => __DIR__ . '/includes/media/Exif.php',
        'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
        'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php',
@@ -454,6 +455,7 @@ $wgAutoloadLocalClasses = [
        'ExtensionRegistry' => __DIR__ . '/includes/registration/ExtensionRegistry.php',
        'ExternalStore' => __DIR__ . '/includes/externalstore/ExternalStore.php',
        'ExternalStoreDB' => __DIR__ . '/includes/externalstore/ExternalStoreDB.php',
+       'ExternalStoreFactory' => __DIR__ . '/includes/externalstore/ExternalStoreFactory.php',
        'ExternalStoreHttp' => __DIR__ . '/includes/externalstore/ExternalStoreHttp.php',
        'ExternalStoreMedium' => __DIR__ . '/includes/externalstore/ExternalStoreMedium.php',
        'ExternalStoreMwstore' => __DIR__ . '/includes/externalstore/ExternalStoreMwstore.php',
@@ -876,6 +878,8 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Auth\\UsernameAuthenticationRequest' => __DIR__ . '/includes/auth/UsernameAuthenticationRequest.php',
        'MediaWiki\\Diff\\ComplexityException' => __DIR__ . '/includes/diff/ComplexityException.php',
        'MediaWiki\\Diff\\WordAccumulator' => __DIR__ . '/includes/diff/WordAccumulator.php',
+       'MediaWiki\\EditPage\\TextConflictHelper' => __DIR__ . '/includes/editpage/TextConflictHelper.php',
+       'MediaWiki\\EditPage\\TextboxBuilder' => __DIR__ . '/includes/editpage/TextboxBuilder.php',
        'MediaWiki\\Edit\\PreparedEdit' => __DIR__ . '/includes/edit/PreparedEdit.php',
        'MediaWiki\\HeaderCallback' => __DIR__ . '/includes/HeaderCallback.php',
        'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
@@ -931,6 +935,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Session\\UserInfo' => __DIR__ . '/includes/session/UserInfo.php',
        'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
        'MediaWiki\\Shell\\Command' => __DIR__ . '/includes/shell/Command.php',
+       'MediaWiki\\Shell\\CommandFactory' => __DIR__ . '/includes/shell/CommandFactory.php',
        'MediaWiki\\Shell\\Result' => __DIR__ . '/includes/shell/Result.php',
        'MediaWiki\\Shell\\Shell' => __DIR__ . '/includes/shell/Shell.php',
        'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
@@ -1498,6 +1503,7 @@ $wgAutoloadLocalClasses = [
        'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
        'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php',
        'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
+       'TransactionRoundDefiningUpdate' => __DIR__ . '/includes/deferred/TransactionRoundDefiningUpdate.php',
        'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
@@ -1564,7 +1570,7 @@ $wgAutoloadLocalClasses = [
        'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
        'UserNamePrefixSearch' => __DIR__ . '/includes/user/UserNamePrefixSearch.php',
        'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php',
-       'UserOptions' => __DIR__ . '/maintenance/userOptions.inc',
+       'UserOptionsMaintenance' => __DIR__ . '/maintenance/userOptions.php',
        'UserPasswordPolicy' => __DIR__ . '/includes/password/UserPasswordPolicy.php',
        'UserRightsProxy' => __DIR__ . '/includes/user/UserRightsProxy.php',
        'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
@@ -1587,10 +1593,11 @@ $wgAutoloadLocalClasses = [
        'WantedQueryPage' => __DIR__ . '/includes/specialpage/WantedQueryPage.php',
        'WantedTemplatesPage' => __DIR__ . '/includes/specials/SpecialWantedtemplates.php',
        'WatchAction' => __DIR__ . '/includes/actions/WatchAction.php',
-       'WatchedItem' => __DIR__ . '/includes/WatchedItem.php',
-       'WatchedItemQueryService' => __DIR__ . '/includes/WatchedItemQueryService.php',
-       'WatchedItemQueryServiceExtension' => __DIR__ . '/includes/WatchedItemQueryServiceExtension.php',
-       'WatchedItemStore' => __DIR__ . '/includes/WatchedItemStore.php',
+       'WatchedItem' => __DIR__ . '/includes/watcheditem/WatchedItem.php',
+       'WatchedItemQueryService' => __DIR__ . '/includes/watcheditem/WatchedItemQueryService.php',
+       'WatchedItemQueryServiceExtension' => __DIR__ . '/includes/watcheditem/WatchedItemQueryServiceExtension.php',
+       'WatchedItemStore' => __DIR__ . '/includes/watcheditem/WatchedItemStore.php',
+       'WatchedItemStoreInterface' => __DIR__ . '/includes/watcheditem/WatchedItemStoreInterface.php',
        'WatchlistCleanup' => __DIR__ . '/maintenance/cleanupWatchlist.php',
        'WebInstaller' => __DIR__ . '/includes/installer/WebInstaller.php',
        'WebInstallerComplete' => __DIR__ . '/includes/installer/WebInstallerComplete.php',
@@ -1706,5 +1713,8 @@ $wgAutoloadLocalClasses = [
        'ZhConverter' => __DIR__ . '/languages/classes/LanguageZh.php',
        'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
        'ZipDirectoryReaderError' => __DIR__ . '/includes/utils/ZipDirectoryReaderError.php',
+       'concatenatedgziphistoryblob' => __DIR__ . '/includes/HistoryBlob.php',
+       'historyblobcurstub' => __DIR__ . '/includes/HistoryBlob.php',
+       'historyblobstub' => __DIR__ . '/includes/HistoryBlob.php',
        'profile_point' => __DIR__ . '/profileinfo.php',
 ];
index 1de39e4..a5501d0 100644 (file)
@@ -25,7 +25,7 @@
                "ext-xml": "*",
                "liuggio/statsd-php-client": "1.0.18",
                "mediawiki/at-ease": "1.1.0",
-               "oojs/oojs-ui": "0.23.3",
+               "oojs/oojs-ui": "0.24.2",
                "oyejorge/less.php": "1.7.0.14",
                "php": ">=5.5.9",
                "psr/log": "1.0.2",
                "jakub-onderka/php-parallel-lint": "0.9.2",
                "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
                "justinrainbow/json-schema": "~5.2",
-               "mediawiki/mediawiki-codesniffer": "13.0.0",
+               "mediawiki/mediawiki-codesniffer": "14.1.0",
                "monolog/monolog": "~1.22.1",
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
-               "phpunit/phpunit": "4.8.35",
-               "psy/psysh": "0.8.5",
+               "phpunit/phpunit": "4.8.36",
+               "psy/psysh": "0.8.11",
                "wikimedia/avro": "1.7.7",
                "wikimedia/testing-access-wrapper": "~1.0",
                "wmde/hamcrest-html-matchers": "^0.1.0"
@@ -79,7 +79,8 @@
        },
        "autoload": {
                "psr-0": {
-                       "ComposerHookHandler": "includes/composer"
+                       "ComposerHookHandler": "includes/composer",
+                       "ComposerVendorHtaccessCreator": "includes/composer"
                },
                "files": [
                        "includes/compat/Timestamp.php"
@@ -97,6 +98,8 @@
                "fix": "phpcbf",
                "pre-install-cmd": "ComposerHookHandler::onPreInstall",
                "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+               "post-install-cmd": "ComposerVendorHtaccessCreator::onEvent",
+               "post-update-cmd": "ComposerVendorHtaccessCreator::onEvent",
                "test": [
                        "composer lint",
                        "composer phpcs"
index a19e9fc..6c1597f 100644 (file)
@@ -689,6 +689,8 @@ $destTitle: destination title (object)
 'ArticlePageDataBefore': Before loading data of an article from the database.
 &$wikiPage: WikiPage (object) that data will be loaded
 &$fields: fields (array) to load from the database
+&$tables: tables (array) to load from the database
+&$joinConds: join conditions (array) to load from the database
 
 'ArticlePrepareTextForEdit': Called when preparing text to be saved.
 $wikiPage: the WikiPage being saved
@@ -2940,6 +2942,7 @@ $result: The SearchResult object
 $terms: String of the search terms entered
 $specialSearch: The SpecialSearch object
 &$query: Array of query string parameters for the link representing the search result.
+&$attributes: Array of title link attributes, can be modified by extension.
 
 'SidebarBeforeOutput': Allows to edit sidebar just before it is output by skins.
 Warning: This hook is run on each display. You should consider to use
index a3c8c33..0b4e0bd 100644 (file)
@@ -26,7 +26,7 @@ supporting them became too heavy to bear. Those were:
 
 * Nostalgia: A skin which looks like Wikipedia did in its first year (2001).
   This skin is now used for the old Wikipedia snapshot at
-  http://nostalgia.wikipedia.org/
+  https://nostalgia.wikipedia.org/
 
 * Chick: A lightweight Monobook skin with no sidebar. The sidebar links were
   given at the bottom of the page instead.
index 0372595..cd13dba 100644 (file)
        <tr><td class="diff-deletedline"><del class="diffchange">Deleted line + diffchange</del></td></tr>
 </table>
 
+<p>Here an example for the diff output when a whole paragraph was moved:</p>
+
+<table class="diff diff-contentalign-left">
+       <colgroup><col class="diff-marker">
+               <col class="diff-content">
+               <col class="diff-marker">
+               <col class="diff-content">
+       </colgroup><tbody>
+<tr>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+</tr>
+<tr>
+       <td class="diff-marker"><a class="mw-diff-movedpara-left" href="#movedpara_3_1_rhs">⚫</a></td>
+       <td class="diff-deletedline"><div><a name="movedpara_1_1_lhs"></a>Lorem ipsum alias non veritatis porro quidem harum ut et at ab sit atque soluta deleniti architecto ut pariatur? Non consequat. Aut minus occaecat quas lorem impedit, earum praesentium enim reprehenderit, anim consequat. Et maiores consequatur incidunt, nostrud non consectetur, ut eiusmod mollit anim eum vitae qui obcaecati molestiae nostrud dolore hic aperiam commodo nihil omnis aliquam irure expedita minima ut fugiat, error odi.</div></td>
+       <td colspan="2" class="diff-empty">&nbsp;</td>
+</tr>
+<tr>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+</tr>
+<tr>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"><div>Lorem ipsum sunt ducimus, quos aut quia a nulla molestiae doloremque dolorem inventore vel officia temporibus at ut iste totam officiis impedit, quaerat voluptate fugiat esse est sit, assumenda quis quaerat provident, laborum molestiae esse, quam qui cillum velit, mollit veniam, consequuntur esse, dolorem do amet, maiores ad dolores dolor duis aut amet, adipisicing est.</div></td>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"><div>Lorem ipsum sunt ducimus, quos aut quia a nulla molestiae doloremque dolorem inventore vel officia temporibus at ut iste totam officiis impedit, quaerat voluptate fugiat esse est sit, assumenda quis quaerat provident, laborum molestiae esse, quam qui cillum velit, mollit veniam, consequuntur esse, dolorem do amet, maiores ad dolores dolor duis aut amet, adipisicing est.</div></td>
+</tr>
+<tr>
+       <td colspan="2" class="diff-empty">&nbsp;</td>
+       <td class="diff-marker">+</td>
+       <td class="diff-addedline"></td>
+</tr>
+<tr>
+       <td colspan="2" class="diff-empty">&nbsp;</td>
+       <td class="diff-marker"><a class="mw-diff-movedpara-right" href="#movedpara_1_1_lhs">⚫</a></td>
+       <td class="diff-addedline"><div><a name="movedpara_3_1_rhs"></a>Lorem ipsum alias non veritatis porro quidem harum ut et at ab sit atque soluta deleniti architecto ut pariatur? Non consequat. Aut minus occaecat quas lorem impedit, earum praesentium enim reprehenderit, anim consequat. Et maiores consequatur incidunt, nostrud non consectetur, ut eiusmod mollit anim eum vitae qui obcaecati molestiae nostrud dolore hic aperiam commodo nihil omnis aliquam irure expedita minima ut fugiat, error odi.</div></td>
+</tr>
+<tr>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+       <td class="diff-marker">&nbsp;</td>
+       <td class="diff-context"></td>
+</tr>
+</tbody></table>
+
 </body>
 </html>
index 5a4c43e..d1e78bb 100644 (file)
@@ -183,11 +183,14 @@ class Block {
         */
        public static function newFromID( $id ) {
                $dbr = wfGetDB( DB_REPLICA );
+               $blockQuery = self::getQueryInfo();
                $res = $dbr->selectRow(
-                       'ipblocks',
-                       self::selectFields(),
+                       $blockQuery['tables'],
+                       $blockQuery['fields'],
                        [ 'ipb_id' => $id ],
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $blockQuery['joins']
                );
                if ( $res ) {
                        return self::newFromRow( $res );
@@ -199,11 +202,11 @@ class Block {
        /**
         * Return the list of ipblocks fields that should be selected to create
         * a new block.
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        public static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'ipb_id',
                        'ipb_address',
@@ -222,6 +225,39 @@ class Block {
                ] + CommentStore::newKey( 'ipb_reason' )->getFields();
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new block object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo() {
+               $commentQuery = CommentStore::newKey( 'ipb_reason' )->getJoin();
+               return [
+                       'tables' => [ 'ipblocks' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'ipb_id',
+                               'ipb_address',
+                               'ipb_by',
+                               'ipb_by_text',
+                               'ipb_timestamp',
+                               'ipb_auto',
+                               'ipb_anon_only',
+                               'ipb_create_account',
+                               'ipb_enable_autoblock',
+                               'ipb_expiry',
+                               'ipb_deleted',
+                               'ipb_block_email',
+                               'ipb_allow_usertalk',
+                               'ipb_parent_block_id',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+       }
+
        /**
         * Check if two blocks are effectively equal.  Doesn't check irrelevant things like
         * the blocking user or the block timestamp, only things which affect the blocked user
@@ -295,7 +331,10 @@ class Block {
                        }
                }
 
-               $res = $db->select( 'ipblocks', self::selectFields(), $conds, __METHOD__ );
+               $blockQuery = self::getQueryInfo();
+               $res = $db->select(
+                       $blockQuery['tables'], $blockQuery['fields'], $conds, __METHOD__, [], $blockQuery['joins']
+               );
 
                # This result could contain a block on the user, a block on the IP, and a russian-doll
                # set of rangeblocks.  We want to choose the most specific one, so keep a leader board.
@@ -422,7 +461,7 @@ class Block {
                $db = wfGetDB( DB_REPLICA );
                $this->mExpiry = $db->decodeExpiry( $row->ipb_expiry );
                $this->mReason = CommentStore::newKey( 'ipb_reason' )
-                       // Legacy because $row probably came from self::selectFields()
+                       // Legacy because $row may have come from self::selectFields()
                        ->getCommentLegacy( $db, $row )->text;
 
                $this->isHardblock( !$row->ipb_anon_only );
@@ -709,7 +748,7 @@ class Block {
                // than getting the msg raw and explode()'ing it.
                $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
                $lines = $cache->getWithSetCallback(
-                       $cache->makeKey( 'ipb', 'autoblock', 'whitelist' ),
+                       $cache->makeKey( 'ip-autoblock', 'whitelist' ),
                        $cache::TTL_DAY,
                        function ( $curValue, &$ttl, array &$setOpts ) {
                                $setOpts += Database::getCacheSetOptions( wfGetDB( DB_REPLICA ) );
@@ -1187,14 +1226,14 @@ class Block {
                if ( !$isAnon ) {
                        $conds = [ $conds, 'ipb_anon_only' => 0 ];
                }
-               $selectFields = array_merge(
-                       [ 'ipb_range_start', 'ipb_range_end' ],
-                       self::selectFields()
-               );
-               $rows = $db->select( 'ipblocks',
-                       $selectFields,
+               $blockQuery = self::getQueryInfo();
+               $rows = $db->select(
+                       $blockQuery['tables'],
+                       array_merge( [ 'ipb_range_start', 'ipb_range_end' ], $blockQuery['fields'] ),
                        $conds,
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $blockQuery['joins']
                );
 
                $blocks = [];
index 89bf5c7..2a70f5f 100644 (file)
@@ -190,7 +190,7 @@ class CategoryFinder {
                $layer = [];
                $res = $this->dbr->select(
                        /* FROM   */ 'categorylinks',
-                       /* SELECT */ '*',
+                       /* SELECT */ [ 'cl_to', 'cl_from' ],
                        /* WHERE  */ [ 'cl_from' => $this->next ],
                        __METHOD__ . '-1'
                );
index 9d692d7..f36c758 100644 (file)
@@ -629,7 +629,7 @@ class CategoryViewer extends ContextSource {
         * @return string HTML
         */
        private function pagingLinks( $first, $last, $type = '' ) {
-               $prevLink = $this->msg( 'prev-page' )->text();
+               $prevLink = $this->msg( 'prev-page' )->escaped();
 
                $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $first != '' ) {
@@ -638,13 +638,13 @@ class CategoryViewer extends ContextSource {
                        unset( $prevQuery["{$type}from"] );
                        $prevLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type ),
-                               $prevLink,
+                               new HtmlArmor( $prevLink ),
                                [],
                                $prevQuery
                        );
                }
 
-               $nextLink = $this->msg( 'next-page' )->text();
+               $nextLink = $this->msg( 'next-page' )->escaped();
 
                if ( $last != '' ) {
                        $lastQuery = $this->query;
@@ -652,7 +652,7 @@ class CategoryViewer extends ContextSource {
                        unset( $lastQuery["{$type}until"] );
                        $nextLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type ),
-                               $nextLink,
+                               new HtmlArmor( $nextLink ),
                                [],
                                $lastQuery
                        );
index b8a31e6..0d679d3 100644 (file)
@@ -29,10 +29,24 @@ use Wikimedia\Rdbms\IDatabase;
  */
 class CommentStore {
 
-       /** Maximum length of a comment. Longer comments will be truncated. */
+       /**
+        * Maximum length of a comment in UTF-8 characters. Longer comments will be truncated.
+        * @note This must be at least 255 and not greater than floor( MAX_COMMENT_LENGTH / 4 ).
+        */
+       const COMMENT_CHARACTER_LIMIT = 1000;
+
+       /**
+        * Maximum length of a comment in bytes. Longer comments will be truncated.
+        * @note This value is determined by the size of the underlying database field,
+        *  currently BLOB in MySQL/MariaDB.
+        */
        const MAX_COMMENT_LENGTH = 65535;
 
-       /** Maximum length of serialized data. Longer data will result in an exception. */
+       /**
+        * Maximum length of serialized data in bytes. Longer data will result in an exception.
+        * @note This value is determined by the size of the underlying database field,
+        *  currently BLOB in MySQL/MariaDB.
+        */
        const MAX_DATA_LENGTH = 65535;
 
        /**
@@ -371,6 +385,15 @@ class CommentStore {
 
                # Truncate comment in a Unicode-sensitive manner
                $comment->text = $this->lang->truncate( $comment->text, self::MAX_COMMENT_LENGTH );
+               if ( mb_strlen( $comment->text, 'UTF-8' ) > self::COMMENT_CHARACTER_LIMIT ) {
+                       $ellipsis = wfMessage( 'ellipsis' )->inLanguage( $this->lang )->escaped();
+                       if ( mb_strlen( $ellipsis ) >= self::COMMENT_CHARACTER_LIMIT ) {
+                               // WTF?
+                               $ellipsis = '...';
+                       }
+                       $maxLength = self::COMMENT_CHARACTER_LIMIT - mb_strlen( $ellipsis, 'UTF-8' );
+                       $comment->text = mb_substr( $comment->text, 0, $maxLength, 'UTF-8' ) . $ellipsis;
+               }
 
                if ( $this->stage > MIGRATION_OLD && !$comment->id ) {
                        $dbData = $comment->data;
index 780976a..3cd7ef1 100644 (file)
@@ -290,6 +290,17 @@ $wgLogo = false;
  * ];
  * @endcode
  *
+ * SVG is also supported but when enabled, it
+ * disables 1.5x and 2x as svg will already
+ * be optimised for screen resolution.
+ *
+ * @par Example:
+ * @code
+ * $wgLogoHD = [
+ *     "svg" => "path/to/svg_version.svg",
+ * ];
+ * @endcode
+ *
  * @since 1.25
  */
 $wgLogoHD = false;
@@ -3696,16 +3707,6 @@ $wgResourceLoaderMinifierMaxLineLength = 1000;
  */
 $wgIncludeLegacyJavaScript = false;
 
-/**
- * Use jQuery 3 (with jQuery Migrate) instead of jQuery 1.
- *
- * This is a temporary feature flag for the MediaWiki 1.29 development cycle while
- * instabilities with jQuery 3 are being addressed. See T124742.
- *
- * @deprecated since 1.29
- */
-$wgUsejQueryThree = true;
-
 /**
  * Whether or not to assign configuration variables to the global window object.
  *
@@ -5784,7 +5785,7 @@ $wgPasswordAttemptThrottle = [
 ];
 
 /**
- * @var Array Map of (grant => right => boolean)
+ * @var array Map of (grant => right => boolean)
  * Users authorize consumers (like Apps) to act on their behalf but only with
  * a subset of the user's normal account rights (signed off on by the user).
  * The possible rights to grant to a consumer are bundled into groups called
@@ -5886,7 +5887,7 @@ $wgGrantPermissions['createaccount']['createaccount'] = true;
 $wgGrantPermissions['privateinfo']['viewmyprivateinfo'] = true;
 
 /**
- * @var Array Map of grants to their UI grouping
+ * @var array Map of grants to their UI grouping
  * @since 1.27
  */
 $wgGrantPermissionGroups = [
@@ -6350,7 +6351,9 @@ $wgStatsdMetricPrefix = 'MediaWiki';
  * Rates are sampling probabilities (e.g. 0.1 means 1 in 10 events are sampled).
  * @since 1.28
  */
-$wgStatsdSamplingRates = [];
+$wgStatsdSamplingRates = [
+       'wanobjectcache:*' => 0.001
+];
 
 /**
  * InfoAction retrieves a list of transclusion links (both to and from).
@@ -6803,6 +6806,10 @@ $wgRCWatchCategoryMembership = false;
 /**
  * Use RC Patrolling to check for vandalism (from recent changes and watchlists)
  * New pages and new files are included.
+ *
+ * @note If you disable all patrolling features, you probably also want to
+ *  remove 'patrol' from $wgFilterLogTypes so a show/hide link isn't shown on
+ *  Special:Log.
  */
 $wgUseRCPatrol = true;
 
@@ -6834,12 +6841,20 @@ $wgStructuredChangeFiltersLiveUpdatePollingRate = 3;
 
 /**
  * Use new page patrolling to check new pages on Special:Newpages
+ *
+ * @note If you disable all patrolling features, you probably also want to
+ *  remove 'patrol' from $wgFilterLogTypes so a show/hide link isn't shown on
+ *  Special:Log.
  */
 $wgUseNPPatrol = true;
 
 /**
  * Use file patrolling to check new files on Special:Newfiles
  *
+ * @note If you disable all patrolling features, you probably also want to
+ *  remove 'patrol' from $wgFilterLogTypes so a show/hide link isn't shown on
+ *  Special:Log.
+ *
  * @since 1.27
  */
 $wgUseFilePatrol = true;
@@ -7953,6 +7968,8 @@ $wgExemptFromUserRobotsControl = null;
  * machine-readable data via api.php
  *
  * See https://www.mediawiki.org/wiki/API
+ *
+ * @deprecated since 1.31
  */
 $wgEnableAPI = true;
 
@@ -7960,6 +7977,8 @@ $wgEnableAPI = true;
  * Allow the API to be used to perform write operations
  * (page edits, rollback, etc.) when an authorised user
  * accesses it
+ *
+ * @deprecated since 1.31
  */
 $wgEnableWriteAPI = true;
 
index 3fc12ce..ff224c5 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\EditPage\TextboxBuilder;
+use MediaWiki\EditPage\TextConflictHelper;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
@@ -446,6 +448,18 @@ class EditPage {
         */
        private $unicodeCheck;
 
+       /**
+        * Factory function to create an edit conflict helper
+        *
+        * @var callable
+        */
+       private $editConflictHelperFactory;
+
+       /**
+        * @var TextConflictHelper|null
+        */
+       private $editConflictHelper;
+
        /**
         * @param Article $article
         */
@@ -459,6 +473,7 @@ class EditPage {
 
                $handler = ContentHandler::getForModelID( $this->contentModel );
                $this->contentFormat = $handler->getDefaultFormat();
+               $this->editConflictHelperFactory = [ $this, 'newTextConflictHelper' ];
        }
 
        /**
@@ -1534,8 +1549,7 @@ class EditPage {
                        return;
                }
 
-               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
-               $stats->increment( 'edit.failures.conflict.resolved' );
+               $this->getEditConflictHelper()->incrementResolvedStats();
        }
 
        /**
@@ -2394,6 +2408,7 @@ class EditPage {
 
                $out->addModules( 'mediawiki.action.edit' );
                $out->addModuleStyles( 'mediawiki.action.edit.styles' );
+               $out->addModuleStyles( 'mediawiki.editfont.styles' );
 
                $user = $this->context->getUser();
                if ( $user->getOption( 'showtoolbar' ) ) {
@@ -2818,6 +2833,20 @@ class EditPage {
                }
 
                $out->addHTML( $this->editFormTextBeforeContent );
+               if ( $this->isConflict ) {
+                       // In an edit conflict, we turn textbox2 into the user's text,
+                       // and textbox1 into the stored version
+                       $this->textbox2 = $this->textbox1;
+
+                       $content = $this->getCurrentContent();
+                       $this->textbox1 = $this->toEditText( $content );
+
+                       $editConflictHelper = $this->getEditConflictHelper();
+                       $editConflictHelper->setTextboxes( $this->textbox2, $this->textbox1 );
+                       $editConflictHelper->setContentModel( $this->contentModel );
+                       $editConflictHelper->setContentFormat( $this->contentFormat );
+                       $out->addHTML( $editConflictHelper->getEditFormHtmlBeforeContent() );
+               }
 
                if ( !$this->mTitle->isCssJsSubpage() && $showToolbar && $user->getOption( 'showtoolbar' ) ) {
                        $out->addHTML( self::getEditToolbar( $this->mTitle ) );
@@ -2832,12 +2861,8 @@ class EditPage {
                        // and fallback to the raw wpTextbox1 since editconflicts can't be
                        // resolved between page source edits and custom ui edits using the
                        // custom edit ui.
-                       $this->textbox2 = $this->textbox1;
-
-                       $content = $this->getCurrentContent();
-                       $this->textbox1 = $this->toEditText( $content );
-
                        $this->showTextbox1();
+                       $out->addHTML( $editConflictHelper->getEditFormHtmlAfterContent() );
                } else {
                        $this->showContentForm();
                }
@@ -3166,7 +3191,7 @@ class EditPage {
         */
        function getSummaryInputOOUI( $summary = "", $labelText = null, $inputAttrs = null ) {
                wfDeprecated( __METHOD__, '1.30' );
-               $this->getSummaryInputWidget( $summary, $labelText, $inputAttrs );
+               return $this->getSummaryInputWidget( $summary, $labelText, $inputAttrs );
        }
 
        /**
@@ -3263,7 +3288,7 @@ class EditPage {
 
        protected function showFormBeforeText() {
                $out = $this->context->getOutput();
-               $out->addHTML( Html::hidden( 'wpSection', htmlspecialchars( $this->section ) ) );
+               $out->addHTML( Html::hidden( 'wpSection', $this->section ) );
                $out->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) );
                $out->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) );
                $out->addHTML( Html::hidden( 'editRevId', $this->editRevId ) );
@@ -3361,11 +3386,17 @@ class EditPage {
        }
 
        protected function showTextbox( $text, $name, $customAttribs = [] ) {
-               $wikitext = $this->addNewLineAtEnd( $text );
-
-               $attribs = $this->buildTextboxAttribs( $name, $customAttribs, $this->context->getUser() );
+               $builder = new TextboxBuilder();
+               $attribs = $builder->buildTextboxAttribs(
+                       $name,
+                       $customAttribs,
+                       $this->context->getUser(),
+                       $this->mTitle
+               );
 
-               $this->context->getOutput()->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
+               $this->context->getOutput()->addHTML(
+                       Html::textarea( $name, $builder->addNewLineAtEnd( $text ), $attribs )
+               );
        }
 
        protected function displayPreviewArea( $previewOutput, $isOnTop = false ) {
@@ -3687,34 +3718,12 @@ class EditPage {
                if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$out ] ) ) {
                        $this->incrementConflictStats();
 
-                       $out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
-
-                       $content1 = $this->toEditContent( $this->textbox1 );
-                       $content2 = $this->toEditContent( $this->textbox2 );
-
-                       $handler = ContentHandler::getForModelID( $this->contentModel );
-                       $de = $handler->createDifferenceEngine( $this->context );
-                       $de->setContent( $content2, $content1 );
-                       $de->showDiff(
-                               $this->context->msg( 'yourtext' )->parse(),
-                               $this->context->msg( 'storedversion' )->text()
-                       );
-
-                       $out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
-                       $this->showTextbox2();
+                       $this->getEditConflictHelper()->showEditFormTextAfterFooters();
                }
        }
 
        protected function incrementConflictStats() {
-               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
-               $stats->increment( 'edit.failures.conflict' );
-               // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
-               if (
-                       $this->mTitle->getNamespace() >= NS_MAIN &&
-                       $this->mTitle->getNamespace() <= NS_CATEGORY_TALK
-               ) {
-                       $stats->increment( 'edit.failures.conflict.byNamespaceId.' . $this->mTitle->getNamespace() );
-               }
+               $this->getEditConflictHelper()->incrementConflictStats();
        }
 
        /**
@@ -4639,9 +4648,8 @@ class EditPage {
         * @since 1.29
         */
        protected function addExplainConflictHeader( OutputPage $out ) {
-               $out->wrapWikiMsg(
-                       "<div class='mw-explainconflict'>\n$1\n</div>",
-                       [ 'explainconflict', $this->context->msg( $this->getSubmitButtonLabel() )->text() ]
+               $out->addHTML(
+                       $this->getEditConflictHelper()->getExplainHeader()
                );
        }
 
@@ -4653,37 +4661,9 @@ class EditPage {
         * @since 1.29
         */
        protected function buildTextboxAttribs( $name, array $customAttribs, User $user ) {
-               $attribs = $customAttribs + [
-                               'accesskey' => ',',
-                               'id' => $name,
-                               'cols' => 80,
-                               'rows' => 25,
-                               // Avoid PHP notices when appending preferences
-                               // (appending allows customAttribs['style'] to still work).
-                               'style' => ''
-                       ];
-
-               // The following classes can be used here:
-               // * mw-editfont-monospace
-               // * mw-editfont-sans-serif
-               // * mw-editfont-serif
-               $class = 'mw-editfont-' . $user->getOption( 'editfont' );
-
-               if ( isset( $attribs['class'] ) ) {
-                       if ( is_string( $attribs['class'] ) ) {
-                               $attribs['class'] .= ' ' . $class;
-                       } elseif ( is_array( $attribs['class'] ) ) {
-                               $attribs['class'][] = $class;
-                       }
-               } else {
-                       $attribs['class'] = $class;
-               }
-
-               $pageLang = $this->mTitle->getPageLanguage();
-               $attribs['lang'] = $pageLang->getHtmlCode();
-               $attribs['dir'] = $pageLang->getDir();
-
-               return $attribs;
+               return ( new TextboxBuilder() )->buildTextboxAttribs(
+                       $name, $customAttribs, $user, $this->mTitle
+               );
        }
 
        /**
@@ -4692,15 +4672,7 @@ class EditPage {
         * @since 1.29
         */
        protected function addNewLineAtEnd( $wikitext ) {
-               if ( strval( $wikitext ) !== '' ) {
-                       // Ensure there's a newline at the end, otherwise adding lines
-                       // is awkward.
-                       // But don't add a newline if the text is empty, or Firefox in XHTML
-                       // mode will show an extra newline. A bit annoying.
-                       $wikitext .= "\n";
-                       return $wikitext;
-               }
-               return $wikitext;
+               return ( new TextboxBuilder() )->addNewLineAtEnd( $wikitext );
        }
 
        /**
@@ -4725,4 +4697,42 @@ class EditPage {
                // Meanwhile, real browsers get real anchors
                return $wgParser->guessSectionNameFromWikiText( $text );
        }
+
+       /**
+        * Set a factory function to create an EditConflictHelper
+        *
+        * @param callable $factory Factory function
+        * @since 1.31
+        */
+       public function setEditConflictHelperFactory( callable $factory ) {
+               $this->editConflictHelperFactory = $factory;
+               $this->editConflictHelper = null;
+       }
+
+       /**
+        * @return TextConflictHelper
+        */
+       private function getEditConflictHelper() {
+               if ( !$this->editConflictHelper ) {
+                       $this->editConflictHelper = call_user_func(
+                               $this->editConflictHelperFactory,
+                               $this->getSubmitButtonLabel()
+                       );
+               }
+
+               return $this->editConflictHelper;
+       }
+
+       /**
+        * @param string $submitButtonLabel
+        * @return TextConflictHelper
+        */
+       private function newTextConflictHelper( $submitButtonLabel ) {
+               return new TextConflictHelper(
+                       $this->getTitle(),
+                       $this->getContext()->getOutput(),
+                       MediaWikiServices::getInstance()->getStatsdDataFactory(),
+                       $submitButtonLabel
+               );
+       }
 }
index bc7747f..fd223e6 100644 (file)
@@ -230,6 +230,12 @@ abstract class ChannelFeed extends FeedItem {
                $wgOut->disable();
                $mimetype = $this->contentType();
                header( "Content-type: $mimetype; charset=UTF-8" );
+
+               // Set a sane filename
+               $exts = MimeMagic::singleton()->getExtensionsForType( $mimetype );
+               $ext = $exts ? strtok( $exts, ' ' ) : 'xml';
+               header( "Content-Disposition: inline; filename=\"feed.{$ext}\"" );
+
                if ( $wgVaryOnXFP ) {
                        $wgOut->addVaryHeader( 'X-Forwarded-Proto' );
                }
index 0def6a0..6c343ab 100644 (file)
@@ -89,9 +89,7 @@ class FeedUtils {
                        $timestamp,
                        $row->rc_deleted & Revision::DELETED_COMMENT
                                ? wfMessage( 'rev-deleted-comment' )->escaped()
-                               : CommentStore::newKey( 'rc_comment' )
-                                       // Legacy from RecentChange::selectFields() via ChangesListSpecialPage::doMainQuery()
-                                       ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text,
+                               : CommentStore::newKey( 'rc_comment' )->getComment( $row )->text,
                        $actiontext
                );
        }
@@ -236,18 +234,18 @@ class FeedUtils {
         */
        public static function applyDiffStyle( $text ) {
                $styles = [
-                       'diff'             => 'background-color: white; color:black;',
-                       'diff-otitle'      => 'background-color: white; color:black; text-align: center;',
-                       'diff-ntitle'      => 'background-color: white; color:black; text-align: center;',
-                       'diff-addedline'   => 'color:black; font-size: 88%; border-style: solid; '
+                       'diff'             => 'background-color: #fff; color: #222;',
+                       'diff-otitle'      => 'background-color: #fff; color: #222; text-align: center;',
+                       'diff-ntitle'      => 'background-color: #fff; color: #222; text-align: center;',
+                       'diff-addedline'   => 'color: #222; font-size: 88%; border-style: solid; '
                                . 'border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; '
                                . 'vertical-align: top; white-space: pre-wrap;',
-                       'diff-deletedline' => 'color:black; font-size: 88%; border-style: solid; '
+                       'diff-deletedline' => 'color: #222; font-size: 88%; border-style: solid; '
                                . 'border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; '
                                . 'vertical-align: top; white-space: pre-wrap;',
-                       'diff-context'     => 'background-color: #f9f9f9; color: #333333; font-size: 88%; '
+                       'diff-context'     => 'background-color: #f8f9fa; color: #222; font-size: 88%; '
                                . 'border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; '
-                               . 'border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;',
+                               . 'border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;',
                        'diffchange'       => 'font-weight: bold; text-decoration: none;',
                ];
 
index 3c600ed..8095fd7 100644 (file)
@@ -23,6 +23,8 @@
  * @file
  */
 
+use MediaWiki\Shell\Shell;
+
 class GitInfo {
 
        /**
@@ -221,13 +223,19 @@ class GitInfo {
                                is_executable( $wgGitBin ) &&
                                $this->getHead() !== false
                        ) {
-                               $environment = [ "GIT_DIR" => $this->basedir ];
-                               $cmd = wfEscapeShellArg( $wgGitBin ) .
-                                       " show -s --format=format:%ct HEAD";
-                               $retc = false;
-                               $commitDate = wfShellExec( $cmd, $retc, $environment );
-                               if ( $retc === 0 ) {
-                                       $date = (int)$commitDate;
+                               $cmd = [
+                                       $wgGitBin,
+                                       'show',
+                                       '-s',
+                                       '--format=format:%ct',
+                                       'HEAD',
+                               ];
+                               $result = Shell::command( $cmd )
+                                       ->environment( [ 'GIT_DIR' => $this->basedir ] )
+                                       ->execute();
+
+                               if ( $result->getExitCode() === 0 ) {
+                                       $date = (int)$result->getStdout();
                                }
                        }
                        $this->cache['headCommitDate'] = $date;
index 069e1be..404d115 100644 (file)
@@ -2259,6 +2259,7 @@ function wfEscapeShellArg( /*...*/ ) {
  * @deprecated since 1.30 use MediaWiki\Shell::isDisabled()
  */
 function wfShellExecDisabled() {
+       wfDeprecated( __FUNCTION__, '1.30' );
        return Shell::isDisabled() ? 'disabled' : false;
 }
 
@@ -2683,6 +2684,7 @@ function wfRelativePath( $path, $from ) {
 function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
        $lowercase = true, $engine = 'auto'
 ) {
+       wfDeprecated( __FUNCTION__, '1.27' );
        return Wikimedia\base_convert( $input, $sourceBase, $destBase, $pad, $lowercase, $engine );
 }
 
@@ -3046,6 +3048,8 @@ function wfWaitForSlaves(
  * Count down from $seconds to zero on the terminal, with a one-second pause
  * between showing each number. For use in command-line scripts.
  *
+ * @deprecated since 1.31, use Maintenance::countDown()
+ *
  * @codeCoverageIgnore
  * @param int $seconds
  */
@@ -3228,6 +3232,7 @@ function wfGetParserCacheStorage() {
  * @deprecated since 1.25 - use Hooks::run
  */
 function wfRunHooks( $event, array $args = [], $deprecatedVersion = null ) {
+       wfDeprecated( __METHOD__, '1.25' );
        return Hooks::run( $event, $args, $deprecatedVersion );
 }
 
@@ -3482,3 +3487,37 @@ function wfArrayPlus2d( array $baseArray, array $newValues ) {
 
        return $baseArray;
 }
+
+/**
+ * Get system resource usage of current request context.
+ * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
+ * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
+ *
+ * @since 1.24
+ * @return array|bool Resource usage data or false if no data available.
+ */
+function wfGetRusage() {
+       if ( !function_exists( 'getrusage' ) ) {
+               return false;
+       } elseif ( defined( 'HHVM_VERSION' ) && PHP_OS === 'Linux' ) {
+               return getrusage( 2 /* RUSAGE_THREAD */ );
+       } else {
+               return getrusage( 0 /* RUSAGE_SELF */ );
+       }
+}
+
+/**
+ * Begin profiling of a function
+ * @param string $functionname Name of the function we will profile
+ * @deprecated since 1.25
+ */
+function wfProfileIn( $functionname ) {
+}
+
+/**
+ * Stop profiling of a function
+ * @param string $functionname Name of the function we have profiled
+ * @deprecated since 1.25
+ */
+function wfProfileOut( $functionname = 'missing' ) {
+}
index 51bd7a9..14d22ec 100644 (file)
@@ -699,3 +699,16 @@ class DiffHistoryBlob implements HistoryBlob {
        }
 
 }
+
+// @codingStandardsIgnoreStart
+if ( false ) {
+       // Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the
+       // class name coerced to lowercase. We can improve efficiency by adding
+       // autoload entries for the lowercase variants of these classes (T166759).
+       // The code below is never executed, but it is picked up by the AutoloadGenerator
+       // parser, which scans for class_alias() calls.
+       class_alias( 'ConcatenatedGzipHistoryBlob', 'concatenatedgziphistoryblob' );
+       class_alias( 'HistoryBlobCurStub', 'historyblobcurstub' );
+       class_alias( 'HistoryBlobStub', 'historyblobstub' );
+}
+// @codingStandardsIgnoreEnd
index 8fe4dbe..524fdcd 100644 (file)
@@ -544,28 +544,7 @@ class Html {
                        if ( in_array( $key, self::$boolAttribs ) ) {
                                $ret .= " $key=\"\"";
                        } else {
-                               // Apparently we need to entity-encode \n, \r, \t, although the
-                               // spec doesn't mention that.  Since we're doing strtr() anyway,
-                               // we may as well not call htmlspecialchars().
-                               // @todo FIXME: Verify that we actually need to
-                               // escape \n\r\t here, and explain why, exactly.
-                               // We could call Sanitizer::encodeAttribute() for this, but we
-                               // don't because we're stubborn and like our marginal savings on
-                               // byte size from not having to encode unnecessary quotes.
-                               // The only difference between this transform and the one by
-                               // Sanitizer::encodeAttribute() is ' is not encoded.
-                               $map = [
-                                       '&' => '&amp;',
-                                       '"' => '&quot;',
-                                       '>' => '&gt;',
-                                       // '<' allegedly allowed per spec
-                                       // but breaks some tools if not escaped.
-                                       "<" => '&lt;',
-                                       "\n" => '&#10;',
-                                       "\r" => '&#13;',
-                                       "\t" => '&#9;'
-                               ];
-                               $ret .= " $key=$quote" . strtr( $value, $map ) . $quote;
+                               $ret .= " $key=$quote" . Sanitizer::encodeAttribute( $value ) . $quote;
                        }
                }
                return $ret;
@@ -696,6 +675,52 @@ class Html {
                return self::input( $name, $value, 'checkbox', $attribs );
        }
 
+       /**
+        * Return the HTML for a message box.
+        * @since 1.31
+        * @param string $html of contents of box
+        * @param string $className corresponding to box
+        * @param string $heading (optional)
+        * @return string of HTML representing a box.
+        */
+       public static function messageBox( $html, $className, $heading = '' ) {
+               if ( $heading ) {
+                       $html = self::element( 'h2', [], $heading ) . $html;
+               }
+               return self::rawElement( 'div', [ 'class' => $className ], $html );
+       }
+
+       /**
+        * Return a warning box.
+        * @since 1.31
+        * @param string $html of contents of box
+        * @return string of HTML representing a warning box.
+        */
+       public static function warningBox( $html ) {
+               return self::messageBox( $html, 'warningbox' );
+       }
+
+       /**
+        * Return an error box.
+        * @since 1.31
+        * @param string $html of contents of error box
+        * @param string $heading (optional)
+        * @return string of HTML representing an error box.
+        */
+       public static function errorBox( $html, $heading = '' ) {
+               return self::messageBox( $html, 'errorbox', $heading );
+       }
+
+       /**
+        * Return a success box.
+        * @since 1.31
+        * @param string $html of contents of box
+        * @return string of HTML representing a success box.
+        */
+       public static function successBox( $html ) {
+               return self::messageBox( $html, 'successbox' );
+       }
+
        /**
         * Convenience function to produce a radio button (input element with type=radio)
         *
index 43de4ba..9e3bc10 100644 (file)
@@ -367,7 +367,7 @@ class MediaWiki {
                        }
                        throw new HttpError( 500, $message );
                }
-               $output->setSquidMaxage( 1200 );
+               $output->setCdnMaxage( 1200 );
                $output->redirect( $targetUrl, '301' );
                return true;
        }
index 84fc959..19b71f1 100644 (file)
@@ -10,6 +10,7 @@ use GenderCache;
 use GlobalVarConfig;
 use Hooks;
 use IBufferingStatsdDataFactory;
+use MediaWiki\Shell\CommandFactory;
 use Wikimedia\Rdbms\LBFactory;
 use LinkCache;
 use Wikimedia\Rdbms\LoadBalancer;
@@ -30,7 +31,7 @@ use SearchEngineConfig;
 use SearchEngineFactory;
 use SiteLookup;
 use SiteStore;
-use WatchedItemStore;
+use WatchedItemStoreInterface;
 use WatchedItemQueryService;
 use SkinFactory;
 use TitleFormatter;
@@ -512,7 +513,7 @@ class MediaWikiServices extends ServiceContainer {
 
        /**
         * @since 1.28
-        * @return WatchedItemStore
+        * @return WatchedItemStoreInterface
         */
        public function getWatchedItemStore() {
                return $this->getService( 'WatchedItemStore' );
@@ -681,6 +682,22 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'ReadOnlyMode' );
        }
 
+       /**
+        * @since 1.30
+        * @return CommandFactory
+        */
+       public function getShellCommandFactory() {
+               return $this->getService( 'ShellCommandFactory' );
+       }
+
+       /**
+        * @since 1.31
+        * @return \ExternalStoreFactory
+        */
+       public function getExternalStoreFactory() {
+               return $this->getService( 'ExternalStoreFactory' );
+       }
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
index 0240fa7..3b2f3cc 100644 (file)
@@ -1123,11 +1123,29 @@ class Message implements MessageSpecifier, Serializable {
         * @return string
         */
        protected function replaceParameters( $message, $type = 'before', $format ) {
+               // A temporary marker for $1 parameters that is only valid
+               // in non-attribute contexts. However if the entire message is escaped
+               // then we don't want to use it because it will be mangled in all contexts
+               // and its unnessary as ->escaped() messages aren't html.
+               $marker = $format === self::FORMAT_ESCAPED ? '$' : '$\'"';
                $replacementKeys = [];
                foreach ( $this->parameters as $n => $param ) {
                        list( $paramType, $value ) = $this->extractParam( $param, $format );
-                       if ( $type === $paramType ) {
-                               $replacementKeys['$' . ( $n + 1 )] = $value;
+                       if ( $type === 'before' ) {
+                               if ( $paramType === 'before' ) {
+                                       $replacementKeys['$' . ( $n + 1 )] = $value;
+                               } else /* $paramType === 'after' */ {
+                                       // To protect against XSS from replacing parameters
+                                       // inside html attributes, we convert $1 to $'"1.
+                                       // In the event that one of the parameters ends up
+                                       // in an attribute, either the ' or the " will be
+                                       // escaped, breaking the replacement and avoiding XSS.
+                                       $replacementKeys['$' . ( $n + 1 )] = $marker . ( $n + 1 );
+                               }
+                       } else {
+                               if ( $paramType === 'after' ) {
+                                       $replacementKeys[$marker . ( $n + 1 )] = $value;
+                               }
                        }
                }
                $message = strtr( $message, $replacementKeys );
@@ -1167,11 +1185,17 @@ class Message implements MessageSpecifier, Serializable {
                        } elseif ( isset( $param['list'] ) ) {
                                return $this->formatListParam( $param['list'], $param['type'], $format );
                        } else {
-                               $warning = 'Invalid parameter for message "' . $this->getKey() . '": ' .
-                                       htmlspecialchars( serialize( $param ) );
-                               trigger_error( $warning, E_USER_WARNING );
-                               $e = new Exception;
-                               wfDebugLog( 'Bug58676', $warning . "\n" . $e->getTraceAsString() );
+                               if ( !is_scalar( $param ) ) {
+                                       $param = serialize( $param );
+                               }
+                               \MediaWiki\Logger\LoggerFactory::getInstance( 'Bug58676' )->warning(
+                                       'Invalid parameter for message "{msgkey}": {param}',
+                                       [
+                                               'exception' => new Exception,
+                                               'msgkey' => $this->getKey(),
+                                               'param' => htmlspecialchars( $param ),
+                                       ]
+                               );
 
                                return [ 'before', '[INVALID]' ];
                        }
index 2f8255b..fe82465 100644 (file)
@@ -310,7 +310,7 @@ class MovePage {
                        # Protect the redirect title as the title used to be...
                        $res = $dbw->select(
                                'page_restrictions',
-                               '*',
+                               [ 'pr_type', 'pr_level', 'pr_cascade', 'pr_user', 'pr_expiry' ],
                                [ 'pr_page' => $pageid ],
                                __METHOD__,
                                'FOR UPDATE'
index 50950ef..b8bfd6a 100644 (file)
@@ -50,6 +50,7 @@ $templateParser = new TemplateParser();
 
 # Render error page if no LocalSettings file can be found
 try {
+       global $wgVersion;
        echo $templateParser->processTemplate(
                'NoLocalSettings',
                [
index 20b2c3c..4635f99 100644 (file)
@@ -314,15 +314,10 @@ class OutputPage extends ContextSource {
         * Constructor for OutputPage. This should not be called directly.
         * Instead a new RequestContext should be created and it will implicitly create
         * a OutputPage tied to that context.
-        * @param IContextSource|null $context
+        * @param IContextSource $context
         */
-       function __construct( IContextSource $context = null ) {
-               if ( $context === null ) {
-                       # Extensions should use `new RequestContext` instead of `new OutputPage` now.
-                       wfDeprecated( __METHOD__, '1.18' );
-               } else {
-                       $this->setContext( $context );
-               }
+       function __construct( IContextSource $context ) {
+               $this->setContext( $context );
        }
 
        /**
@@ -1981,6 +1976,7 @@ class OutputPage extends ContextSource {
         * @deprecated since 1.27 Use setCdnMaxage() instead
         */
        public function setSquidMaxage( $maxage ) {
+               wfDeprecated( __METHOD__, '1.27' );
                $this->setCdnMaxage( $maxage );
        }
 
@@ -4026,6 +4022,13 @@ class OutputPage extends ContextSource {
                        return;
                }
 
+               if ( isset( $logo['svg'] ) ) {
+                       // No media queries required if we only have a 1x and svg variant
+                       // because all preload-capable browsers support SVGs
+                       $this->addLinkHeader( '<' . $logo['svg'] . '>;rel=preload;as=image' );
+                       return;
+               }
+
                foreach ( $logo as $dppx => $src ) {
                        // Keys are in this format: "1.5x"
                        $dppx = substr( $dppx, 0, -1 );
diff --git a/includes/PreConfigSetup.php b/includes/PreConfigSetup.php
deleted file mode 100644 (file)
index bda7886..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * File-scope setup actions, loaded before LocalSettings.php, shared by
- * WebStart.php and doMaintenance.php
- *
- * 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
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       // Not an entry point
-       exit( 1 );
-}
-
-// Grab profiling functions
-require_once "$IP/includes/profiler/ProfilerFunctions.php";
-
-// Start the autoloader, so that extensions can derive classes from core files
-require_once "$IP/includes/AutoLoader.php";
-
-// Load up some global defines.
-require_once "$IP/includes/Defines.php";
-
-// Start the profiler
-$wgProfiler = [];
-if ( file_exists( "$IP/StartProfiler.php" ) ) {
-       require "$IP/StartProfiler.php";
-}
-
-// Load default settings
-require_once "$IP/includes/DefaultSettings.php";
-
-// Load global functions
-require_once "$IP/includes/GlobalFunctions.php";
-
-// Load composer's autoloader if present
-if ( is_readable( "$IP/vendor/autoload.php" ) ) {
-       require_once "$IP/vendor/autoload.php";
-}
index ba90121..738f8ee 100644 (file)
@@ -82,6 +82,11 @@ class Preferences {
                        return self::$defaultPreferences;
                }
 
+               OutputPage::setupOOUI(
+                       strtolower( $context->getSkin()->getSkinName() ),
+                       $context->getLanguage()->getDir()
+               );
+
                $defaultPreferences = [];
 
                self::profilePreferences( $user, $context, $defaultPreferences );
@@ -320,14 +325,17 @@ class Preferences {
                if ( $canEditPrivateInfo && $authManager->allowsAuthenticationDataChange(
                        new PasswordAuthenticationRequest(), false )->isGood()
                ) {
-                       $link = $linkRenderer->makeLink( SpecialPage::getTitleFor( 'ChangePassword' ),
-                               $context->msg( 'prefs-resetpass' )->text(), [],
-                               [ 'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText() ] );
+                       $link = new OOUI\ButtonWidget( [
+                               'href' => SpecialPage::getTitleFor( 'ChangePassword' )->getLinkURL( [
+                                       'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText()
+                               ] ),
+                               'label' => $context->msg( 'prefs-resetpass' )->text(),
+                       ] );
 
                        $defaultPreferences['password'] = [
                                'type' => 'info',
                                'raw' => true,
-                               'default' => $link,
+                               'default' => (string)$link,
                                'label-message' => 'yourpassword',
                                'section' => 'personal/info',
                        ];
@@ -471,16 +479,15 @@ class Preferences {
 
                                $emailAddress = $user->getEmail() ? htmlspecialchars( $user->getEmail() ) : '';
                                if ( $canEditPrivateInfo && $authManager->allowsPropertyChange( 'emailaddress' ) ) {
-                                       $link = $linkRenderer->makeLink(
-                                               SpecialPage::getTitleFor( 'ChangeEmail' ),
-                                               $context->msg( $user->getEmail() ? 'prefs-changeemail' : 'prefs-setemail' )->text(),
-                                               [],
-                                               [ 'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText() ] );
-
-                                       $emailAddress .= $emailAddress == '' ? $link : (
-                                               $context->msg( 'word-separator' )->escaped()
-                                               . $context->msg( 'parentheses' )->rawParams( $link )->escaped()
-                                       );
+                                       $link = new OOUI\ButtonWidget( [
+                                               'href' => SpecialPage::getTitleFor( 'ChangeEmail' )->getLinkURL( [
+                                                       'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText()
+                                               ] ),
+                                               'label' =>
+                                                       $context->msg( $user->getEmail() ? 'prefs-changeemail' : 'prefs-setemail' )->text(),
+                                       ] );
+
+                                       $emailAddress .= $emailAddress == '' ? $link : ( '<br />' . $link );
                                }
 
                                $defaultPreferences['emailaddress'] = [
@@ -515,10 +522,10 @@ class Preferences {
                                        } else {
                                                $disableEmailPrefs = true;
                                                $emailauthenticated = $context->msg( 'emailnotauthenticated' )->parse() . '<br />' .
-                                                       $linkRenderer->makeKnownLink(
-                                                               SpecialPage::getTitleFor( 'Confirmemail' ),
-                                                               $context->msg( 'emailconfirmlink' )->text()
-                                                       ) . '<br />';
+                                                       new OOUI\ButtonWidget( [
+                                                               'href' => SpecialPage::getTitleFor( 'Confirmemail' )->getLinkURL(),
+                                                               'label' => $context->msg( 'emailconfirmlink' )->text(),
+                                                       ] );
                                                $emailauthenticationclass = "mw-email-not-authenticated";
                                        }
                                } else {
@@ -755,6 +762,7 @@ class Preferences {
                        'default' => $tzSetting,
                        'size' => 20,
                        'section' => 'rendering/timeoffset',
+                       'id' => 'wpTimeCorrection',
                ];
        }
 
@@ -997,7 +1005,7 @@ class Preferences {
 
                # # Watchlist #####################################
                if ( $user->isAllowed( 'editmywatchlist' ) ) {
-                       $editWatchlistLinks = [];
+                       $editWatchlistLinks = '';
                        $editWatchlistModes = [
                                'edit' => [ 'EditWatchlist', false ],
                                'raw' => [ 'EditWatchlist', 'raw' ],
@@ -1006,16 +1014,19 @@ class Preferences {
                        $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                        foreach ( $editWatchlistModes as $editWatchlistMode => $mode ) {
                                // Messages: prefs-editwatchlist-edit, prefs-editwatchlist-raw, prefs-editwatchlist-clear
-                               $editWatchlistLinks[] = $linkRenderer->makeKnownLink(
-                                       SpecialPage::getTitleFor( $mode[0], $mode[1] ),
-                                       new HtmlArmor( $context->msg( "prefs-editwatchlist-{$editWatchlistMode}" )->parse() )
-                               );
+                               $editWatchlistLinks .=
+                                       new OOUI\ButtonWidget( [
+                                               'href' => SpecialPage::getTitleFor( $mode[0], $mode[1] )->getLinkURL(),
+                                               'label' => new OOUI\HtmlSnippet(
+                                                       $context->msg( "prefs-editwatchlist-{$editWatchlistMode}" )->parse()
+                                               ),
+                                       ] );
                        }
 
                        $defaultPreferences['editwatchlist'] = [
                                'type' => 'info',
                                'raw' => true,
-                               'default' => $context->getLanguage()->pipeList( $editWatchlistLinks ),
+                               'default' => $editWatchlistLinks,
                                'label-message' => 'prefs-editwatchlist-label',
                                'section' => 'watchlist/editwatchlist',
                        ];
@@ -1138,6 +1149,12 @@ class Preferences {
                                'default' => $user->getTokenFromOption( 'watchlisttoken' ),
                                'help-message' => 'prefs-help-watchlist-token2',
                        ];
+                       $defaultPreferences['watchlisttoken-info2'] = [
+                               'type' => 'info',
+                               'section' => 'watchlist/tokenwatchlist',
+                               'raw' => true,
+                               'default' => $context->msg( 'prefs-help-watchlist-token2' )->parse(),
+                       ];
                }
        }
 
@@ -1350,7 +1367,7 @@ class Preferences {
         * @param IContextSource $context
         * @param string $formClass
         * @param array $remove Array of items to remove
-        * @return PreferencesForm|HtmlForm
+        * @return PreferencesForm|HTMLForm
         */
        static function getFormObject(
                $user,
@@ -1358,6 +1375,9 @@ class Preferences {
                $formClass = 'PreferencesForm',
                array $remove = []
        ) {
+               // We use ButtonWidgets in some of the getPreferences() functions
+               $context->getOutput()->enableOOUI();
+
                $formDescriptor = self::getPreferences( $user, $context );
                if ( count( $remove ) ) {
                        $removeKeys = array_flip( $remove );
index bcfbe63..25c89c2 100644 (file)
@@ -193,7 +193,7 @@ class Revision implements IDBAccessObject {
                        'page'       => isset( $row->ar_page_id ) ? $row->ar_page_id : null,
                        'id'         => isset( $row->ar_rev_id ) ? $row->ar_rev_id : null,
                        'comment'    => CommentStore::newKey( 'ar_comment' )
-                               // Legacy because $row probably came from self::selectArchiveFields()
+                               // Legacy because $row may have come from self::selectArchiveFields()
                                ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row, true )->text,
                        'user'       => $row->ar_user,
                        'user_text'  => $row->ar_user_text,
@@ -403,22 +403,18 @@ class Revision implements IDBAccessObject {
         * @return stdClass
         */
        private static function fetchFromConds( $db, $conditions, $flags = 0 ) {
-               $fields = array_merge(
-                       self::selectFields(),
-                       self::selectPageFields(),
-                       self::selectUserFields()
-               );
+               $revQuery = self::getQueryInfo( [ 'page', 'user' ] );
                $options = [];
                if ( ( $flags & self::READ_LOCKING ) == self::READ_LOCKING ) {
                        $options[] = 'FOR UPDATE';
                }
                return $db->selectRow(
-                       [ 'revision', 'page', 'user' ],
-                       $fields,
+                       $revQuery['tables'],
+                       $revQuery['fields'],
                        $conditions,
                        __METHOD__,
                        $options,
-                       [ 'page' => self::pageJoinCond(), 'user' => self::userJoinCond() ]
+                       $revQuery['joins']
                );
        }
 
@@ -426,9 +422,11 @@ class Revision implements IDBAccessObject {
         * Return the value of a select() JOIN conds array for the user table.
         * This will get user table rows for logged-in users.
         * @since 1.19
+        * @deprecated since 1.31, use self::getQueryInfo( [ 'user' ] ) instead.
         * @return array
         */
        public static function userJoinCond() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ];
        }
 
@@ -436,22 +434,25 @@ class Revision implements IDBAccessObject {
         * Return the value of a select() page conds array for the page table.
         * This will assure that the revision(s) are not orphaned from live pages.
         * @since 1.19
+        * @deprecated since 1.31, use self::getQueryInfo( [ 'page' ] ) instead.
         * @return array
         */
        public static function pageJoinCond() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [ 'INNER JOIN', [ 'page_id = rev_page' ] ];
        }
 
        /**
         * Return the list of revision fields that should be selected to create
         * a new revision.
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        public static function selectFields() {
                global $wgContentHandlerUseDB;
 
+               wfDeprecated( __METHOD__, '1.31' );
+
                $fields = [
                        'rev_id',
                        'rev_page',
@@ -479,12 +480,14 @@ class Revision implements IDBAccessObject {
        /**
         * Return the list of revision fields that should be selected to create
         * a new revision from an archive row.
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getArchiveQueryInfo() instead.
         * @return array
         */
        public static function selectArchiveFields() {
                global $wgContentHandlerUseDB;
+
+               wfDeprecated( __METHOD__, '1.31' );
+
                $fields = [
                        'ar_id',
                        'ar_page_id',
@@ -513,9 +516,11 @@ class Revision implements IDBAccessObject {
        /**
         * Return the list of text fields that should be selected to read the
         * revision text
+        * @deprecated since 1.31, use self::getQueryInfo( [ 'text' ] ) instead.
         * @return array
         */
        public static function selectTextFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'old_text',
                        'old_flags'
@@ -524,9 +529,11 @@ class Revision implements IDBAccessObject {
 
        /**
         * Return the list of page fields that should be selected from page table
+        * @deprecated since 1.31, use self::getQueryInfo( [ 'page' ] ) instead.
         * @return array
         */
        public static function selectPageFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'page_namespace',
                        'page_title',
@@ -539,12 +546,128 @@ class Revision implements IDBAccessObject {
 
        /**
         * Return the list of user fields that should be selected from user table
+        * @deprecated since 1.31, use self::getQueryInfo( [ 'user' ] ) instead.
         * @return array
         */
        public static function selectUserFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [ 'user_name' ];
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new revision object.
+        * @since 1.31
+        * @param array $options Any combination of the following strings
+        *  - 'page': Join with the page table, and select fields to identify the page
+        *  - 'user': Join with the user table, and select the user name
+        *  - 'text': Join with the text table, and select fields to load page text
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo( $options = [] ) {
+               global $wgContentHandlerUseDB;
+
+               $commentQuery = CommentStore::newKey( 'rev_comment' )->getJoin();
+               $ret = [
+                       'tables' => [ 'revision' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'rev_id',
+                               'rev_page',
+                               'rev_text_id',
+                               'rev_timestamp',
+                               'rev_user_text',
+                               'rev_user',
+                               'rev_minor_edit',
+                               'rev_deleted',
+                               'rev_len',
+                               'rev_parent_id',
+                               'rev_sha1',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+
+               if ( $wgContentHandlerUseDB ) {
+                       $ret['fields'][] = 'rev_content_format';
+                       $ret['fields'][] = 'rev_content_model';
+               }
+
+               if ( in_array( 'page', $options, true ) ) {
+                       $ret['tables'][] = 'page';
+                       $ret['fields'] = array_merge( $ret['fields'], [
+                               'page_namespace',
+                               'page_title',
+                               'page_id',
+                               'page_latest',
+                               'page_is_redirect',
+                               'page_len',
+                       ] );
+                       $ret['joins']['page'] = [ 'INNER JOIN', [ 'page_id = rev_page' ] ];
+               }
+
+               if ( in_array( 'user', $options, true ) ) {
+                       $ret['tables'][] = 'user';
+                       $ret['fields'] = array_merge( $ret['fields'], [
+                               'user_name',
+                       ] );
+                       $ret['joins']['user'] = [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ];
+               }
+
+               if ( in_array( 'text', $options, true ) ) {
+                       $ret['tables'][] = 'text';
+                       $ret['fields'] = array_merge( $ret['fields'], [
+                               'old_text',
+                               'old_flags'
+                       ] );
+                       $ret['joins']['text'] = [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ];
+               }
+
+               return $ret;
+       }
+
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new archived revision object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getArchiveQueryInfo() {
+               global $wgContentHandlerUseDB;
+
+               $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin();
+               $ret = [
+                       'tables' => [ 'archive' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'ar_id',
+                               'ar_page_id',
+                               'ar_rev_id',
+                               'ar_text',
+                               'ar_text_id',
+                               'ar_timestamp',
+                               'ar_user_text',
+                               'ar_user',
+                               'ar_minor_edit',
+                               'ar_deleted',
+                               'ar_len',
+                               'ar_parent_id',
+                               'ar_sha1',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+
+               if ( $wgContentHandlerUseDB ) {
+                       $ret['fields'][] = 'ar_content_format';
+                       $ret['fields'][] = 'ar_content_model';
+               }
+
+               return $ret;
+       }
+
        /**
         * Do a batched query to get the parent revision lengths
         * @param IDatabase $db
@@ -571,168 +694,184 @@ class Revision implements IDBAccessObject {
         * @throws MWException
         * @access private
         */
-       function __construct( $row ) {
+       public function __construct( $row ) {
                if ( is_object( $row ) ) {
-                       $this->mId = intval( $row->rev_id );
-                       $this->mPage = intval( $row->rev_page );
-                       $this->mTextId = intval( $row->rev_text_id );
-                       $this->mComment = CommentStore::newKey( 'rev_comment' )
-                               // Legacy because $row probably came from self::selectFields()
-                               ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row, true )->text;
-                       $this->mUser = intval( $row->rev_user );
-                       $this->mMinorEdit = intval( $row->rev_minor_edit );
-                       $this->mTimestamp = $row->rev_timestamp;
-                       $this->mDeleted = intval( $row->rev_deleted );
-
-                       if ( !isset( $row->rev_parent_id ) ) {
-                               $this->mParentId = null;
-                       } else {
-                               $this->mParentId = intval( $row->rev_parent_id );
-                       }
-
-                       if ( !isset( $row->rev_len ) ) {
-                               $this->mSize = null;
-                       } else {
-                               $this->mSize = intval( $row->rev_len );
-                       }
-
-                       if ( !isset( $row->rev_sha1 ) ) {
-                               $this->mSha1 = null;
-                       } else {
-                               $this->mSha1 = $row->rev_sha1;
-                       }
+                       $this->constructFromDbRowObject( $row );
+               } elseif ( is_array( $row ) ) {
+                       $this->constructFromRowArray( $row );
+               } else {
+                       throw new MWException( 'Revision constructor passed invalid row format.' );
+               }
+               $this->mUnpatrolled = null;
+       }
 
-                       if ( isset( $row->page_latest ) ) {
-                               $this->mCurrent = ( $row->rev_id == $row->page_latest );
-                               $this->mTitle = Title::newFromRow( $row );
-                       } else {
-                               $this->mCurrent = false;
-                               $this->mTitle = null;
-                       }
+       /**
+        * @param object $row
+        */
+       private function constructFromDbRowObject( $row ) {
+               $this->mId = intval( $row->rev_id );
+               $this->mPage = intval( $row->rev_page );
+               $this->mTextId = intval( $row->rev_text_id );
+               $this->mComment = CommentStore::newKey( 'rev_comment' )
+                       // Legacy because $row may have come from self::selectFields()
+                       ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row, true )->text;
+               $this->mUser = intval( $row->rev_user );
+               $this->mMinorEdit = intval( $row->rev_minor_edit );
+               $this->mTimestamp = $row->rev_timestamp;
+               $this->mDeleted = intval( $row->rev_deleted );
+
+               if ( !isset( $row->rev_parent_id ) ) {
+                       $this->mParentId = null;
+               } else {
+                       $this->mParentId = intval( $row->rev_parent_id );
+               }
 
-                       if ( !isset( $row->rev_content_model ) ) {
-                               $this->mContentModel = null; # determine on demand if needed
-                       } else {
-                               $this->mContentModel = strval( $row->rev_content_model );
-                       }
+               if ( !isset( $row->rev_len ) ) {
+                       $this->mSize = null;
+               } else {
+                       $this->mSize = intval( $row->rev_len );
+               }
 
-                       if ( !isset( $row->rev_content_format ) ) {
-                               $this->mContentFormat = null; # determine on demand if needed
-                       } else {
-                               $this->mContentFormat = strval( $row->rev_content_format );
-                       }
+               if ( !isset( $row->rev_sha1 ) ) {
+                       $this->mSha1 = null;
+               } else {
+                       $this->mSha1 = $row->rev_sha1;
+               }
 
-                       // Lazy extraction...
-                       $this->mText = null;
-                       if ( isset( $row->old_text ) ) {
-                               $this->mTextRow = $row;
-                       } else {
-                               // 'text' table row entry will be lazy-loaded
-                               $this->mTextRow = null;
-                       }
+               if ( isset( $row->page_latest ) ) {
+                       $this->mCurrent = ( $row->rev_id == $row->page_latest );
+                       $this->mTitle = Title::newFromRow( $row );
+               } else {
+                       $this->mCurrent = false;
+                       $this->mTitle = null;
+               }
 
-                       // Use user_name for users and rev_user_text for IPs...
-                       $this->mUserText = null; // lazy load if left null
-                       if ( $this->mUser == 0 ) {
-                               $this->mUserText = $row->rev_user_text; // IP user
-                       } elseif ( isset( $row->user_name ) ) {
-                               $this->mUserText = $row->user_name; // logged-in user
-                       }
-                       $this->mOrigUserText = $row->rev_user_text;
-               } elseif ( is_array( $row ) ) {
-                       // Build a new revision to be saved...
-                       global $wgUser; // ugh
-
-                       # if we have a content object, use it to set the model and type
-                       if ( !empty( $row['content'] ) ) {
-                               // @todo when is that set? test with external store setup! check out insertOn() [dk]
-                               if ( !empty( $row['text_id'] ) ) {
-                                       throw new MWException( "Text already stored in external store (id {$row['text_id']}), " .
-                                               "can't serialize content object" );
-                               }
+               if ( !isset( $row->rev_content_model ) ) {
+                       $this->mContentModel = null; # determine on demand if needed
+               } else {
+                       $this->mContentModel = strval( $row->rev_content_model );
+               }
 
-                               $row['content_model'] = $row['content']->getModel();
-                               # note: mContentFormat is initializes later accordingly
-                               # note: content is serialized later in this method!
-                               # also set text to null?
-                       }
+               if ( !isset( $row->rev_content_format ) ) {
+                       $this->mContentFormat = null; # determine on demand if needed
+               } else {
+                       $this->mContentFormat = strval( $row->rev_content_format );
+               }
 
-                       $this->mId = isset( $row['id'] ) ? intval( $row['id'] ) : null;
-                       $this->mPage = isset( $row['page'] ) ? intval( $row['page'] ) : null;
-                       $this->mTextId = isset( $row['text_id'] ) ? intval( $row['text_id'] ) : null;
-                       $this->mUserText = isset( $row['user_text'] )
-                               ? strval( $row['user_text'] ) : $wgUser->getName();
-                       $this->mUser = isset( $row['user'] ) ? intval( $row['user'] ) : $wgUser->getId();
-                       $this->mMinorEdit = isset( $row['minor_edit'] ) ? intval( $row['minor_edit'] ) : 0;
-                       $this->mTimestamp = isset( $row['timestamp'] )
-                               ? strval( $row['timestamp'] ) : wfTimestampNow();
-                       $this->mDeleted = isset( $row['deleted'] ) ? intval( $row['deleted'] ) : 0;
-                       $this->mSize = isset( $row['len'] ) ? intval( $row['len'] ) : null;
-                       $this->mParentId = isset( $row['parent_id'] ) ? intval( $row['parent_id'] ) : null;
-                       $this->mSha1 = isset( $row['sha1'] ) ? strval( $row['sha1'] ) : null;
-
-                       $this->mContentModel = isset( $row['content_model'] )
-                               ? strval( $row['content_model'] ) : null;
-                       $this->mContentFormat = isset( $row['content_format'] )
-                               ? strval( $row['content_format'] ) : null;
-
-                       // Enforce spacing trimming on supplied text
-                       $this->mComment = isset( $row['comment'] ) ? trim( strval( $row['comment'] ) ) : null;
-                       $this->mText = isset( $row['text'] ) ? rtrim( strval( $row['text'] ) ) : null;
+               // Lazy extraction...
+               $this->mText = null;
+               if ( isset( $row->old_text ) ) {
+                       $this->mTextRow = $row;
+               } else {
+                       // 'text' table row entry will be lazy-loaded
                        $this->mTextRow = null;
+               }
 
-                       $this->mTitle = isset( $row['title'] ) ? $row['title'] : null;
-
-                       // if we have a Content object, override mText and mContentModel
-                       if ( !empty( $row['content'] ) ) {
-                               if ( !( $row['content'] instanceof Content ) ) {
-                                       throw new MWException( '`content` field must contain a Content object.' );
-                               }
-
-                               $handler = $this->getContentHandler();
-                               $this->mContent = $row['content'];
+               // Use user_name for users and rev_user_text for IPs...
+               $this->mUserText = null; // lazy load if left null
+               if ( $this->mUser == 0 ) {
+                       $this->mUserText = $row->rev_user_text; // IP user
+               } elseif ( isset( $row->user_name ) ) {
+                       $this->mUserText = $row->user_name; // logged-in user
+               }
+               $this->mOrigUserText = $row->rev_user_text;
+       }
 
-                               $this->mContentModel = $this->mContent->getModel();
-                               $this->mContentHandler = null;
+       /**
+        * @param array $row
+        *
+        * @throws MWException
+        */
+       private function constructFromRowArray( array $row ) {
+               // Build a new revision to be saved...
+               global $wgUser; // ugh
 
-                               $this->mText = $handler->serializeContent( $row['content'], $this->getContentFormat() );
-                       } elseif ( $this->mText !== null ) {
-                               $handler = $this->getContentHandler();
-                               $this->mContent = $handler->unserializeContent( $this->mText );
+               # if we have a content object, use it to set the model and type
+               if ( !empty( $row['content'] ) ) {
+                       if ( !( $row['content'] instanceof Content ) ) {
+                               throw new MWException( '`content` field must contain a Content object.' );
                        }
 
-                       // If we have a Title object, make sure it is consistent with mPage.
-                       if ( $this->mTitle && $this->mTitle->exists() ) {
-                               if ( $this->mPage === null ) {
-                                       // if the page ID wasn't known, set it now
-                                       $this->mPage = $this->mTitle->getArticleID();
-                               } elseif ( $this->mTitle->getArticleID() !== $this->mPage ) {
-                                       // Got different page IDs. This may be legit (e.g. during undeletion),
-                                       // but it seems worth mentioning it in the log.
-                                       wfDebug( "Page ID " . $this->mPage . " mismatches the ID " .
-                                               $this->mTitle->getArticleID() . " provided by the Title object." );
-                               }
+                       // @todo when is that set? test with external store setup! check out insertOn() [dk]
+                       if ( !empty( $row['text_id'] ) ) {
+                               throw new MWException( "Text already stored in external store (id {$row['text_id']}), " .
+                                       "can't serialize content object" );
                        }
 
-                       $this->mCurrent = false;
+                       $row['content_model'] = $row['content']->getModel();
+                       # note: mContentFormat is initializes later accordingly
+                       # note: content is serialized later in this method!
+                       # also set text to null?
+               }
+
+               $this->mId = isset( $row['id'] ) ? intval( $row['id'] ) : null;
+               $this->mPage = isset( $row['page'] ) ? intval( $row['page'] ) : null;
+               $this->mTextId = isset( $row['text_id'] ) ? intval( $row['text_id'] ) : null;
+               $this->mUserText = isset( $row['user_text'] )
+                       ? strval( $row['user_text'] ) : $wgUser->getName();
+               $this->mUser = isset( $row['user'] ) ? intval( $row['user'] ) : $wgUser->getId();
+               $this->mMinorEdit = isset( $row['minor_edit'] ) ? intval( $row['minor_edit'] ) : 0;
+               $this->mTimestamp = isset( $row['timestamp'] )
+                       ? strval( $row['timestamp'] ) : wfTimestampNow();
+               $this->mDeleted = isset( $row['deleted'] ) ? intval( $row['deleted'] ) : 0;
+               $this->mSize = isset( $row['len'] ) ? intval( $row['len'] ) : null;
+               $this->mParentId = isset( $row['parent_id'] ) ? intval( $row['parent_id'] ) : null;
+               $this->mSha1 = isset( $row['sha1'] ) ? strval( $row['sha1'] ) : null;
+
+               $this->mContentModel = isset( $row['content_model'] )
+                       ? strval( $row['content_model'] ) : null;
+               $this->mContentFormat = isset( $row['content_format'] )
+                       ? strval( $row['content_format'] ) : null;
+
+               // Enforce spacing trimming on supplied text
+               $this->mComment = isset( $row['comment'] ) ? trim( strval( $row['comment'] ) ) : null;
+               $this->mText = isset( $row['text'] ) ? rtrim( strval( $row['text'] ) ) : null;
+               $this->mTextRow = null;
+
+               $this->mTitle = isset( $row['title'] ) ? $row['title'] : null;
+
+               // if we have a Content object, override mText and mContentModel
+               if ( !empty( $row['content'] ) ) {
+                       $handler = $this->getContentHandler();
+                       $this->mContent = $row['content'];
 
-                       // If we still have no length, see it we have the text to figure it out
-                       if ( !$this->mSize && $this->mContent !== null ) {
-                               $this->mSize = $this->mContent->getSize();
-                       }
+                       $this->mContentModel = $this->mContent->getModel();
+                       $this->mContentHandler = null;
 
-                       // Same for sha1
-                       if ( $this->mSha1 === null ) {
-                               $this->mSha1 = $this->mText === null ? null : self::base36Sha1( $this->mText );
+                       $this->mText = $handler->serializeContent( $row['content'], $this->getContentFormat() );
+               } elseif ( $this->mText !== null ) {
+                       $handler = $this->getContentHandler();
+                       $this->mContent = $handler->unserializeContent( $this->mText );
+               }
+
+               // If we have a Title object, make sure it is consistent with mPage.
+               if ( $this->mTitle && $this->mTitle->exists() ) {
+                       if ( $this->mPage === null ) {
+                               // if the page ID wasn't known, set it now
+                               $this->mPage = $this->mTitle->getArticleID();
+                       } elseif ( $this->mTitle->getArticleID() !== $this->mPage ) {
+                               // Got different page IDs. This may be legit (e.g. during undeletion),
+                               // but it seems worth mentioning it in the log.
+                               wfDebug( "Page ID " . $this->mPage . " mismatches the ID " .
+                                       $this->mTitle->getArticleID() . " provided by the Title object." );
                        }
+               }
 
-                       // force lazy init
-                       $this->getContentModel();
-                       $this->getContentFormat();
-               } else {
-                       throw new MWException( 'Revision constructor passed invalid row format.' );
+               $this->mCurrent = false;
+
+               // If we still have no length, see it we have the text to figure it out
+               if ( !$this->mSize && $this->mContent !== null ) {
+                       $this->mSize = $this->mContent->getSize();
                }
-               $this->mUnpatrolled = null;
+
+               // Same for sha1
+               if ( $this->mSha1 === null ) {
+                       $this->mSha1 = $this->mText === null ? null : self::base36Sha1( $this->mText );
+               }
+
+               // force lazy init
+               $this->getContentModel();
+               $this->getContentFormat();
        }
 
        /**
@@ -762,6 +901,7 @@ class Revision implements IDBAccessObject {
         * This should only be used for proposed revisions that turn out to be null edits
         *
         * @since 1.28
+        * @deprecated since 1.31, please reuse old Revision object
         * @param int $id User ID
         * @param string $name User name
         */
@@ -821,11 +961,21 @@ class Revision implements IDBAccessObject {
                // rev_id is defined as NOT NULL, but this revision may not yet have been inserted.
                if ( $this->mId !== null ) {
                        $dbr = wfGetLB( $this->mWiki )->getConnectionRef( DB_REPLICA, [], $this->mWiki );
+                       // @todo: Title::getSelectFields(), or Title::getQueryInfo(), or something like that
                        $row = $dbr->selectRow(
-                               [ 'page', 'revision' ],
-                               self::selectPageFields(),
-                               [ 'page_id=rev_page', 'rev_id' => $this->mId ],
-                               __METHOD__
+                               [ 'revision', 'page' ],
+                               [
+                                       'page_namespace',
+                                       'page_title',
+                                       'page_id',
+                                       'page_latest',
+                                       'page_is_redirect',
+                                       'page_len',
+                               ],
+                               [ 'rev_id' => $this->mId ],
+                               __METHOD__,
+                               [],
+                               [ 'page' => [ 'JOIN', 'page_id=rev_page' ] ]
                        );
                        if ( $row ) {
                                // @TODO: better foreign title handling
index b0bc60a..fa454e0 100644 (file)
@@ -296,15 +296,14 @@ class RevisionList extends RevisionListBase {
                if ( $this->ids !== null ) {
                        $conds['rev_id'] = array_map( 'intval', $this->ids );
                }
+               $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] );
                return $db->select(
-                       [ 'revision', 'page', 'user' ],
-                       array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       $revQuery['tables'],
+                       $revQuery['fields'],
                        $conds,
                        __METHOD__,
                        [ 'ORDER BY' => 'rev_id DESC' ],
-                       [
-                               'page' => Revision::pageJoinCond(),
-                               'user' => Revision::userJoinCond() ]
+                       $revQuery['joins']
                );
        }
 
index d048007..ae88d37 100644 (file)
@@ -41,6 +41,7 @@ use MediaWiki\Interwiki\ClassicInterwikiLookup;
 use MediaWiki\Linker\LinkRendererFactory;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\CommandFactory;
 
 return [
        'DBLoadBalancerFactory' => function ( MediaWikiServices $services ) {
@@ -428,6 +429,32 @@ return [
                );
        },
 
+       'ShellCommandFactory' => function ( MediaWikiServices $services ) {
+               $config = $services->getMainConfig();
+
+               $limits = [
+                       'time' => $config->get( 'MaxShellTime' ),
+                       'walltime' => $config->get( 'MaxShellWallClockTime' ),
+                       'memory' => $config->get( 'MaxShellMemory' ),
+                       'filesize' => $config->get( 'MaxShellFileSize' ),
+               ];
+               $cgroup = $config->get( 'ShellCgroup' );
+
+               $factory = new CommandFactory( $limits, $cgroup );
+               $factory->setLogger( LoggerFactory::getInstance( 'exec' ) );
+               $factory->logStderr();
+
+               return $factory;
+       },
+
+       'ExternalStoreFactory' => function ( MediaWikiServices $services ) {
+               $config = $services->getMainConfig();
+
+               return new ExternalStoreFactory(
+                       $config->get( 'ExternalStores' )
+               );
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index 68e3d96..4c281b1 100644 (file)
@@ -33,6 +33,82 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        exit( 1 );
 }
 
+/**
+ * Pre-config setup: Before loading LocalSettings.php
+ */
+
+// Get profiler configuraton
+$wgProfiler = [];
+if ( file_exists( "$IP/StartProfiler.php" ) ) {
+       require "$IP/StartProfiler.php";
+}
+
+// Start the autoloader, so that extensions can derive classes from core files
+require_once "$IP/includes/AutoLoader.php";
+
+// Load up some global defines
+require_once "$IP/includes/Defines.php";
+
+// Load default settings
+require_once "$IP/includes/DefaultSettings.php";
+
+// Load global functions
+require_once "$IP/includes/GlobalFunctions.php";
+
+// Load composer's autoloader if present
+if ( is_readable( "$IP/vendor/autoload.php" ) ) {
+       require_once "$IP/vendor/autoload.php";
+}
+
+// Assert that composer dependencies were successfully loaded
+// Purposely no leading \ due to it breaking HHVM RepoAuthorative mode
+// PHP works fine with both versions
+// See https://github.com/facebook/hhvm/issues/5833
+if ( !interface_exists( 'Psr\Log\LoggerInterface' ) ) {
+       $message = (
+               'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
+               "library</a> to be present. This library is not embedded directly in MediaWiki's " .
+               "git repository and must be installed separately by the end user.\n\n" .
+               'Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
+               '#Fetch_external_libraries">mediawiki.org</a> for help on installing ' .
+               'the required components.'
+       );
+       echo $message;
+       trigger_error( $message, E_USER_ERROR );
+       die( 1 );
+}
+
+// Install a header callback
+MediaWiki\HeaderCallback::register();
+
+/**
+ * Load LocalSettings.php
+ */
+
+if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
+       call_user_func( MW_CONFIG_CALLBACK );
+} else {
+       if ( !defined( 'MW_CONFIG_FILE' ) ) {
+               define( 'MW_CONFIG_FILE', "$IP/LocalSettings.php" );
+       }
+       require_once MW_CONFIG_FILE;
+}
+
+/**
+ * Customization point after all loading (constants, functions, classes,
+ * DefaultSettings, LocalSettings). Specifically, this is before usage of
+ * settings, before instantiation of Profiler (and other singletons), and
+ * before any setup functions or hooks run.
+ */
+
+if ( defined( 'MW_SETUP_CALLBACK' ) ) {
+       call_user_func( MW_SETUP_CALLBACK );
+}
+
+/**
+ * Main setup
+ */
+
 $fname = 'Setup.php';
 $ps_setup = Profiler::instance()->scopedProfileIn( $fname );
 
@@ -284,7 +360,7 @@ unset( $repo ); // no global pollution; destroy reference
 
 // Convert this deprecated setting to modern system
 if ( $wgExperimentalHtmlIds ) {
-       $wgFragmentMode = [ 'html5-legacy', 'legacy' ];
+       $wgFragmentMode = [ 'html5-legacy', 'html5' ];
 }
 
 $rcMaxAgeDays = $wgRCMaxAge / ( 3600 * 24 );
index 7a01a65..2d1d961 100644 (file)
@@ -556,7 +556,7 @@ class SiteConfiguration {
                                ]
                        );
                        // ulimit5.sh breaks this call
-                       $data = trim( wfShellExec( $cmd, $retVal, [], [ 'memory' => 0 ] ) );
+                       $data = trim( wfShellExec( $cmd, $retVal, [], [ 'memory' => 0, 'filesize' => 0 ] ) );
                        if ( $retVal != 0 || !strlen( $data ) ) {
                                throw new MWException( "Failed to run getConfiguration.php." );
                        }
index 3da6ab9..829be44 100644 (file)
@@ -776,6 +776,7 @@ class Title implements LinkTarget {
         * @return string Escaped string
         */
        static function escapeFragmentForURL( $fragment ) {
+               wfDeprecated( __METHOD__, '1.30' );
                # Note that we don't urlencode the fragment.  urlencoded Unicode
                # fragments appear not to work in IE (at least up to 7) or in at least
                # one version of Opera 9.x.  The W3C validator, for one, doesn't seem
@@ -3627,19 +3628,20 @@ class Title implements LinkTarget {
                $blNamespace = "{$prefix}_namespace";
                $blTitle = "{$prefix}_title";
 
+               $pageQuery = WikiPage::getQueryInfo();
                $res = $db->select(
-                       [ $table, 'page' ],
+                       [ $table, 'nestpage' => $pageQuery['tables'] ],
                        array_merge(
                                [ $blNamespace, $blTitle ],
-                               WikiPage::selectFields()
+                               $pageQuery['fields']
                        ),
                        [ "{$prefix}_from" => $id ],
                        __METHOD__,
                        $options,
-                       [ 'page' => [
+                       [ 'nestpage' => [
                                'LEFT JOIN',
                                [ "page_namespace=$blNamespace", "page_title=$blTitle" ]
-                       ] ]
+                       ] ] + $pageQuery['joins']
                );
 
                $retVal = [];
@@ -4192,13 +4194,15 @@ class Title implements LinkTarget {
                $pageId = $this->getArticleID( $flags );
                if ( $pageId ) {
                        $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA );
-                       $row = $db->selectRow( 'revision', Revision::selectFields(),
+                       $revQuery = Revision::getQueryInfo();
+                       $row = $db->selectRow( $revQuery['tables'], $revQuery['fields'],
                                [ 'rev_page' => $pageId ],
                                __METHOD__,
                                [
                                        'ORDER BY' => 'rev_timestamp ASC, rev_id ASC',
-                                       'IGNORE INDEX' => 'rev_timestamp', // See T159319
-                               ]
+                                       'IGNORE INDEX' => [ 'revision' => 'rev_timestamp' ], // See T159319
+                               ],
+                               $revQuery['joins']
                        );
                        if ( $row ) {
                                return new Revision( $row );
@@ -4618,9 +4622,11 @@ class Title implements LinkTarget {
         * on the number of links. Typically called on create and delete.
         */
        public function touchLinks() {
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'pagelinks' ) );
+               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'pagelinks', 'page-touch' ) );
                if ( $this->getNamespace() == NS_CATEGORY ) {
-                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'categorylinks' ) );
+                       DeferredUpdates::addUpdate(
+                               new HTMLCacheUpdate( $this, 'categorylinks', 'category-touch' )
+                       );
                }
        }
 
diff --git a/includes/WatchedItem.php b/includes/WatchedItem.php
deleted file mode 100644 (file)
index bfd1d61..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-/**
- * 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 Watchlist
- */
-use MediaWiki\MediaWikiServices;
-use MediaWiki\Linker\LinkTarget;
-
-/**
- * Representation of a pair of user and title for watchlist entries.
- *
- * @author Tim Starling
- * @author Addshore
- *
- * @ingroup Watchlist
- */
-class WatchedItem {
-
-       /**
-        * @deprecated since 1.27, see User::IGNORE_USER_RIGHTS
-        */
-       const IGNORE_USER_RIGHTS = User::IGNORE_USER_RIGHTS;
-
-       /**
-        * @deprecated since 1.27, see User::CHECK_USER_RIGHTS
-        */
-       const CHECK_USER_RIGHTS = User::CHECK_USER_RIGHTS;
-
-       /**
-        * @deprecated Internal class use only
-        */
-       const DEPRECATED_USAGE_TIMESTAMP = -100;
-
-       /**
-        * @var bool
-        * @deprecated Internal class use only
-        */
-       public $checkRights = User::CHECK_USER_RIGHTS;
-
-       /**
-        * @var Title
-        * @deprecated Internal class use only
-        */
-       private $title;
-
-       /**
-        * @var LinkTarget
-        */
-       private $linkTarget;
-
-       /**
-        * @var User
-        */
-       private $user;
-
-       /**
-        * @var null|string the value of the wl_notificationtimestamp field
-        */
-       private $notificationTimestamp;
-
-       /**
-        * @param User $user
-        * @param LinkTarget $linkTarget
-        * @param null|string $notificationTimestamp the value of the wl_notificationtimestamp field
-        * @param bool|null $checkRights DO NOT USE - used internally for backward compatibility
-        */
-       public function __construct(
-               User $user,
-               LinkTarget $linkTarget,
-               $notificationTimestamp,
-               $checkRights = null
-       ) {
-               $this->user = $user;
-               $this->linkTarget = $linkTarget;
-               $this->notificationTimestamp = $notificationTimestamp;
-               if ( $checkRights !== null ) {
-                       $this->checkRights = $checkRights;
-               }
-       }
-
-       /**
-        * @return User
-        */
-       public function getUser() {
-               return $this->user;
-       }
-
-       /**
-        * @return LinkTarget
-        */
-       public function getLinkTarget() {
-               return $this->linkTarget;
-       }
-
-       /**
-        * Get the notification timestamp of this entry.
-        *
-        * @return bool|null|string
-        */
-       public function getNotificationTimestamp() {
-               // Back compat for objects constructed using self::fromUserTitle
-               if ( $this->notificationTimestamp === self::DEPRECATED_USAGE_TIMESTAMP ) {
-                       // wfDeprecated( __METHOD__, '1.27' );
-                       if ( $this->checkRights && !$this->user->isAllowed( 'viewmywatchlist' ) ) {
-                               return false;
-                       }
-                       $item = MediaWikiServices::getInstance()->getWatchedItemStore()
-                               ->loadWatchedItem( $this->user, $this->linkTarget );
-                       if ( $item ) {
-                               $this->notificationTimestamp = $item->getNotificationTimestamp();
-                       } else {
-                               $this->notificationTimestamp = false;
-                       }
-               }
-               return $this->notificationTimestamp;
-       }
-
-       /**
-        * Back compat pre 1.27 with the WatchedItemStore introduction
-        * @todo remove in 1.28/9
-        * -------------------------------------------------
-        */
-
-       /**
-        * @return Title
-        * @deprecated Internal class use only
-        */
-       public function getTitle() {
-               if ( !$this->title ) {
-                       $this->title = Title::newFromLinkTarget( $this->linkTarget );
-               }
-               return $this->title;
-       }
-
-       /**
-        * @deprecated since 1.27 Use the constructor, WatchedItemStore::getWatchedItem()
-        *             or WatchedItemStore::loadWatchedItem()
-        */
-       public static function fromUserTitle( $user, $title, $checkRights = User::CHECK_USER_RIGHTS ) {
-               wfDeprecated( __METHOD__, '1.27' );
-               return new self( $user, $title, self::DEPRECATED_USAGE_TIMESTAMP, (bool)$checkRights );
-       }
-
-       /**
-        * @deprecated since 1.27 Use User::addWatch()
-        * @return bool
-        */
-       public function addWatch() {
-               wfDeprecated( __METHOD__, '1.27' );
-               $this->user->addWatch( $this->getTitle(), $this->checkRights );
-               return true;
-       }
-
-       /**
-        * @deprecated since 1.27 Use User::removeWatch()
-        * @return bool
-        */
-       public function removeWatch() {
-               wfDeprecated( __METHOD__, '1.27' );
-               if ( $this->checkRights && !$this->user->isAllowed( 'editmywatchlist' ) ) {
-                       return false;
-               }
-               $this->user->removeWatch( $this->getTitle(), $this->checkRights );
-               return true;
-       }
-
-       /**
-        * @deprecated since 1.27 Use User::isWatched()
-        * @return bool
-        */
-       public function isWatched() {
-               wfDeprecated( __METHOD__, '1.27' );
-               return $this->user->isWatched( $this->getTitle(), $this->checkRights );
-       }
-
-       /**
-        * @deprecated since 1.27 Use WatchedItemStore::duplicateAllAssociatedEntries()
-        */
-       public static function duplicateEntries( Title $oldTitle, Title $newTitle ) {
-               wfDeprecated( __METHOD__, '1.27' );
-               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-               $store->duplicateAllAssociatedEntries( $oldTitle, $newTitle );
-       }
-
-}
diff --git a/includes/WatchedItemQueryService.php b/includes/WatchedItemQueryService.php
deleted file mode 100644 (file)
index d0f45be..0000000
+++ /dev/null
@@ -1,684 +0,0 @@
-<?php
-
-use Wikimedia\Rdbms\IDatabase;
-use MediaWiki\Linker\LinkTarget;
-use Wikimedia\Assert\Assert;
-use Wikimedia\Rdbms\LoadBalancer;
-
-/**
- * Class performing complex database queries related to WatchedItems.
- *
- * @since 1.28
- *
- * @file
- * @ingroup Watchlist
- *
- * @license GNU GPL v2+
- */
-class WatchedItemQueryService {
-
-       const DIR_OLDER = 'older';
-       const DIR_NEWER = 'newer';
-
-       const INCLUDE_FLAGS = 'flags';
-       const INCLUDE_USER = 'user';
-       const INCLUDE_USER_ID = 'userid';
-       const INCLUDE_COMMENT = 'comment';
-       const INCLUDE_PATROL_INFO = 'patrol';
-       const INCLUDE_SIZES = 'sizes';
-       const INCLUDE_LOG_INFO = 'loginfo';
-
-       // FILTER_* constants are part of public API (are used in ApiQueryWatchlist and
-       // ApiQueryWatchlistRaw classes) and should not be changed.
-       // Changing values of those constants will result in a breaking change in the API
-       const FILTER_MINOR = 'minor';
-       const FILTER_NOT_MINOR = '!minor';
-       const FILTER_BOT = 'bot';
-       const FILTER_NOT_BOT = '!bot';
-       const FILTER_ANON = 'anon';
-       const FILTER_NOT_ANON = '!anon';
-       const FILTER_PATROLLED = 'patrolled';
-       const FILTER_NOT_PATROLLED = '!patrolled';
-       const FILTER_UNREAD = 'unread';
-       const FILTER_NOT_UNREAD = '!unread';
-       const FILTER_CHANGED = 'changed';
-       const FILTER_NOT_CHANGED = '!changed';
-
-       const SORT_ASC = 'ASC';
-       const SORT_DESC = 'DESC';
-
-       /**
-        * @var LoadBalancer
-        */
-       private $loadBalancer;
-
-       /** @var WatchedItemQueryServiceExtension[]|null */
-       private $extensions = null;
-
-       /**
-        * @var CommentStore|null */
-       private $commentStore = null;
-
-       public function __construct( LoadBalancer $loadBalancer ) {
-               $this->loadBalancer = $loadBalancer;
-       }
-
-       /**
-        * @return WatchedItemQueryServiceExtension[]
-        */
-       private function getExtensions() {
-               if ( $this->extensions === null ) {
-                       $this->extensions = [];
-                       Hooks::run( 'WatchedItemQueryServiceExtensions', [ &$this->extensions, $this ] );
-               }
-               return $this->extensions;
-       }
-
-       /**
-        * @return IDatabase
-        * @throws MWException
-        */
-       private function getConnection() {
-               return $this->loadBalancer->getConnectionRef( DB_REPLICA, [ 'watchlist' ] );
-       }
-
-       private function getCommentStore() {
-               if ( !$this->commentStore ) {
-                       $this->commentStore = new CommentStore( 'rc_comment' );
-               }
-               return $this->commentStore;
-       }
-
-       /**
-        * @param User $user
-        * @param array $options Allowed keys:
-        *        'includeFields'       => string[] RecentChange fields to be included in the result,
-        *                                 self::INCLUDE_* constants should be used
-        *        'filters'             => string[] optional filters to narrow down resulted items
-        *        'namespaceIds'        => int[] optional namespace IDs to filter by
-        *                                 (defaults to all namespaces)
-        *        'allRevisions'        => bool return multiple revisions of the same page if true,
-        *                                 only the most recent if false (default)
-        *        'rcTypes'             => int[] which types of RecentChanges to include
-        *                                 (defaults to all types), allowed values: RC_EDIT, RC_NEW,
-        *                                 RC_LOG, RC_EXTERNAL, RC_CATEGORIZE
-        *        'onlyByUser'          => string only list changes by a specified user
-        *        'notByUser'           => string do not incluide changes by a specified user
-        *        'dir'                 => string in which direction to enumerate, accepted values:
-        *                                 - DIR_OLDER list newest first
-        *                                 - DIR_NEWER list oldest first
-        *        'start'               => string (format accepted by wfTimestamp) requires 'dir' option,
-        *                                 timestamp to start enumerating from
-        *        'end'                 => string (format accepted by wfTimestamp) requires 'dir' option,
-        *                                 timestamp to end enumerating
-        *        'watchlistOwner'      => User user whose watchlist items should be listed if different
-        *                                 than the one specified with $user param,
-        *                                 requires 'watchlistOwnerToken' option
-        *        'watchlistOwnerToken' => string a watchlist token used to access another user's
-        *                                 watchlist, used with 'watchlistOwnerToken' option
-        *        'limit'               => int maximum numbers of items to return
-        *        'usedInGenerator'     => bool include only RecentChange id field required by the
-        *                                 generator ('rc_cur_id' or 'rc_this_oldid') if true, or all
-        *                                 id fields ('rc_cur_id', 'rc_this_oldid', 'rc_last_oldid')
-        *                                 if false (default)
-        * @param array|null &$startFrom Continuation value: [ string $rcTimestamp, int $rcId ]
-        * @return array of pairs ( WatchedItem $watchedItem, string[] $recentChangeInfo ),
-        *         where $recentChangeInfo contains the following keys:
-        *         - 'rc_id',
-        *         - 'rc_namespace',
-        *         - 'rc_title',
-        *         - 'rc_timestamp',
-        *         - 'rc_type',
-        *         - 'rc_deleted',
-        *         Additional keys could be added by specifying the 'includeFields' option
-        */
-       public function getWatchedItemsWithRecentChangeInfo(
-               User $user, array $options = [], &$startFrom = null
-       ) {
-               $options += [
-                       'includeFields' => [],
-                       'namespaceIds' => [],
-                       'filters' => [],
-                       'allRevisions' => false,
-                       'usedInGenerator' => false
-               ];
-
-               Assert::parameter(
-                       !isset( $options['rcTypes'] )
-                               || !array_diff( $options['rcTypes'], [ RC_EDIT, RC_NEW, RC_LOG, RC_EXTERNAL, RC_CATEGORIZE ] ),
-                       '$options[\'rcTypes\']',
-                       'must be an array containing only: RC_EDIT, RC_NEW, RC_LOG, RC_EXTERNAL and/or RC_CATEGORIZE'
-               );
-               Assert::parameter(
-                       !isset( $options['dir'] ) || in_array( $options['dir'], [ self::DIR_OLDER, self::DIR_NEWER ] ),
-                       '$options[\'dir\']',
-                       'must be DIR_OLDER or DIR_NEWER'
-               );
-               Assert::parameter(
-                       !isset( $options['start'] ) && !isset( $options['end'] ) && $startFrom === null
-                               || isset( $options['dir'] ),
-                       '$options[\'dir\']',
-                       'must be provided when providing the "start" or "end" options or the $startFrom parameter'
-               );
-               Assert::parameter(
-                       !isset( $options['startFrom'] ),
-                       '$options[\'startFrom\']',
-                       'must not be provided, use $startFrom instead'
-               );
-               Assert::parameter(
-                       !isset( $startFrom ) || ( is_array( $startFrom ) && count( $startFrom ) === 2 ),
-                       '$startFrom',
-                       'must be a two-element array'
-               );
-               if ( array_key_exists( 'watchlistOwner', $options ) ) {
-                       Assert::parameterType(
-                               User::class,
-                               $options['watchlistOwner'],
-                               '$options[\'watchlistOwner\']'
-                       );
-                       Assert::parameter(
-                               isset( $options['watchlistOwnerToken'] ),
-                               '$options[\'watchlistOwnerToken\']',
-                               'must be provided when providing watchlistOwner option'
-                       );
-               }
-
-               $db = $this->getConnection();
-
-               $tables = $this->getWatchedItemsWithRCInfoQueryTables( $options );
-               $fields = $this->getWatchedItemsWithRCInfoQueryFields( $options );
-               $conds = $this->getWatchedItemsWithRCInfoQueryConds( $db, $user, $options );
-               $dbOptions = $this->getWatchedItemsWithRCInfoQueryDbOptions( $options );
-               $joinConds = $this->getWatchedItemsWithRCInfoQueryJoinConds( $options );
-
-               if ( $startFrom !== null ) {
-                       $conds[] = $this->getStartFromConds( $db, $options, $startFrom );
-               }
-
-               foreach ( $this->getExtensions() as $extension ) {
-                       $extension->modifyWatchedItemsWithRCInfoQuery(
-                               $user, $options, $db,
-                               $tables,
-                               $fields,
-                               $conds,
-                               $dbOptions,
-                               $joinConds
-                       );
-               }
-
-               $res = $db->select(
-                       $tables,
-                       $fields,
-                       $conds,
-                       __METHOD__,
-                       $dbOptions,
-                       $joinConds
-               );
-
-               $limit = isset( $dbOptions['LIMIT'] ) ? $dbOptions['LIMIT'] : INF;
-               $items = [];
-               $startFrom = null;
-               foreach ( $res as $row ) {
-                       if ( --$limit <= 0 ) {
-                               $startFrom = [ $row->rc_timestamp, $row->rc_id ];
-                               break;
-                       }
-
-                       $items[] = [
-                               new WatchedItem(
-                                       $user,
-                                       new TitleValue( (int)$row->rc_namespace, $row->rc_title ),
-                                       $row->wl_notificationtimestamp
-                               ),
-                               $this->getRecentChangeFieldsFromRow( $row )
-                       ];
-               }
-
-               foreach ( $this->getExtensions() as $extension ) {
-                       $extension->modifyWatchedItemsWithRCInfo( $user, $options, $db, $items, $res, $startFrom );
-               }
-
-               return $items;
-       }
-
-       /**
-        * For simple listing of user's watchlist items, see WatchedItemStore::getWatchedItemsForUser
-        *
-        * @param User $user
-        * @param array $options Allowed keys:
-        *        'sort'         => string optional sorting by namespace ID and title
-        *                          one of the self::SORT_* constants
-        *        'namespaceIds' => int[] optional namespace IDs to filter by (defaults to all namespaces)
-        *        'limit'        => int maximum number of items to return
-        *        'filter'       => string optional filter, one of the self::FILTER_* contants
-        *        'from'         => LinkTarget requires 'sort' key, only return items starting from
-        *                          those related to the link target
-        *        'until'        => LinkTarget requires 'sort' key, only return items until
-        *                          those related to the link target
-        *        'startFrom'    => LinkTarget requires 'sort' key, only return items starting from
-        *                          those related to the link target, allows to skip some link targets
-        *                          specified using the form option
-        * @return WatchedItem[]
-        */
-       public function getWatchedItemsForUser( User $user, array $options = [] ) {
-               if ( $user->isAnon() ) {
-                       // TODO: should this just return an empty array or rather complain loud at this point
-                       // as e.g. ApiBase::getWatchlistUser does?
-                       return [];
-               }
-
-               $options += [ 'namespaceIds' => [] ];
-
-               Assert::parameter(
-                       !isset( $options['sort'] ) || in_array( $options['sort'], [ self::SORT_ASC, self::SORT_DESC ] ),
-                       '$options[\'sort\']',
-                       'must be SORT_ASC or SORT_DESC'
-               );
-               Assert::parameter(
-                       !isset( $options['filter'] ) || in_array(
-                               $options['filter'], [ self::FILTER_CHANGED, self::FILTER_NOT_CHANGED ]
-                       ),
-                       '$options[\'filter\']',
-                       'must be FILTER_CHANGED or FILTER_NOT_CHANGED'
-               );
-               Assert::parameter(
-                       !isset( $options['from'] ) && !isset( $options['until'] ) && !isset( $options['startFrom'] )
-                       || isset( $options['sort'] ),
-                       '$options[\'sort\']',
-                       'must be provided if any of "from", "until", "startFrom" options is provided'
-               );
-
-               $db = $this->getConnection();
-
-               $conds = $this->getWatchedItemsForUserQueryConds( $db, $user, $options );
-               $dbOptions = $this->getWatchedItemsForUserQueryDbOptions( $options );
-
-               $res = $db->select(
-                       'watchlist',
-                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                       $conds,
-                       __METHOD__,
-                       $dbOptions
-               );
-
-               $watchedItems = [];
-               foreach ( $res as $row ) {
-                       // todo these could all be cached at some point?
-                       $watchedItems[] = new WatchedItem(
-                               $user,
-                               new TitleValue( (int)$row->wl_namespace, $row->wl_title ),
-                               $row->wl_notificationtimestamp
-                       );
-               }
-
-               return $watchedItems;
-       }
-
-       private function getRecentChangeFieldsFromRow( stdClass $row ) {
-               // This can be simplified to single array_filter call filtering by key value,
-               // once we stop supporting PHP 5.5
-               $allFields = get_object_vars( $row );
-               $rcKeys = array_filter(
-                       array_keys( $allFields ),
-                       function ( $key ) {
-                               return substr( $key, 0, 3 ) === 'rc_';
-                       }
-               );
-               return array_intersect_key( $allFields, array_flip( $rcKeys ) );
-       }
-
-       private function getWatchedItemsWithRCInfoQueryTables( array $options ) {
-               $tables = [ 'recentchanges', 'watchlist' ];
-               if ( !$options['allRevisions'] ) {
-                       $tables[] = 'page';
-               }
-               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
-                       $tables += $this->getCommentStore()->getJoin()['tables'];
-               }
-               return $tables;
-       }
-
-       private function getWatchedItemsWithRCInfoQueryFields( array $options ) {
-               $fields = [
-                       'rc_id',
-                       'rc_namespace',
-                       'rc_title',
-                       'rc_timestamp',
-                       'rc_type',
-                       'rc_deleted',
-                       'wl_notificationtimestamp'
-               ];
-
-               $rcIdFields = [
-                       'rc_cur_id',
-                       'rc_this_oldid',
-                       'rc_last_oldid',
-               ];
-               if ( $options['usedInGenerator'] ) {
-                       if ( $options['allRevisions'] ) {
-                               $rcIdFields = [ 'rc_this_oldid' ];
-                       } else {
-                               $rcIdFields = [ 'rc_cur_id' ];
-                       }
-               }
-               $fields = array_merge( $fields, $rcIdFields );
-
-               if ( in_array( self::INCLUDE_FLAGS, $options['includeFields'] ) ) {
-                       $fields = array_merge( $fields, [ 'rc_type', 'rc_minor', 'rc_bot' ] );
-               }
-               if ( in_array( self::INCLUDE_USER, $options['includeFields'] ) ) {
-                       $fields[] = 'rc_user_text';
-               }
-               if ( in_array( self::INCLUDE_USER_ID, $options['includeFields'] ) ) {
-                       $fields[] = 'rc_user';
-               }
-               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
-                       $fields += $this->getCommentStore()->getJoin()['fields'];
-               }
-               if ( in_array( self::INCLUDE_PATROL_INFO, $options['includeFields'] ) ) {
-                       $fields = array_merge( $fields, [ 'rc_patrolled', 'rc_log_type' ] );
-               }
-               if ( in_array( self::INCLUDE_SIZES, $options['includeFields'] ) ) {
-                       $fields = array_merge( $fields, [ 'rc_old_len', 'rc_new_len' ] );
-               }
-               if ( in_array( self::INCLUDE_LOG_INFO, $options['includeFields'] ) ) {
-                       $fields = array_merge( $fields, [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ] );
-               }
-
-               return $fields;
-       }
-
-       private function getWatchedItemsWithRCInfoQueryConds(
-               IDatabase $db,
-               User $user,
-               array $options
-       ) {
-               $watchlistOwnerId = $this->getWatchlistOwnerId( $user, $options );
-               $conds = [ 'wl_user' => $watchlistOwnerId ];
-
-               if ( !$options['allRevisions'] ) {
-                       $conds[] = $db->makeList(
-                               [ 'rc_this_oldid=page_latest', 'rc_type=' . RC_LOG ],
-                               LIST_OR
-                       );
-               }
-
-               if ( $options['namespaceIds'] ) {
-                       $conds['wl_namespace'] = array_map( 'intval', $options['namespaceIds'] );
-               }
-
-               if ( array_key_exists( 'rcTypes', $options ) ) {
-                       $conds['rc_type'] = array_map( 'intval', $options['rcTypes'] );
-               }
-
-               $conds = array_merge(
-                       $conds,
-                       $this->getWatchedItemsWithRCInfoQueryFilterConds( $user, $options )
-               );
-
-               $conds = array_merge( $conds, $this->getStartEndConds( $db, $options ) );
-
-               if ( !isset( $options['start'] ) && !isset( $options['end'] ) ) {
-                       if ( $db->getType() === 'mysql' ) {
-                               // This is an index optimization for mysql
-                               $conds[] = 'rc_timestamp > ' . $db->addQuotes( '' );
-                       }
-               }
-
-               $conds = array_merge( $conds, $this->getUserRelatedConds( $db, $user, $options ) );
-
-               $deletedPageLogCond = $this->getExtraDeletedPageLogEntryRelatedCond( $db, $user );
-               if ( $deletedPageLogCond ) {
-                       $conds[] = $deletedPageLogCond;
-               }
-
-               return $conds;
-       }
-
-       private function getWatchlistOwnerId( User $user, array $options ) {
-               if ( array_key_exists( 'watchlistOwner', $options ) ) {
-                       /** @var User $watchlistOwner */
-                       $watchlistOwner = $options['watchlistOwner'];
-                       $ownersToken = $watchlistOwner->getOption( 'watchlisttoken' );
-                       $token = $options['watchlistOwnerToken'];
-                       if ( $ownersToken == '' || !hash_equals( $ownersToken, $token ) ) {
-                               throw ApiUsageException::newWithMessage( null, 'apierror-bad-watchlist-token', 'bad_wltoken' );
-                       }
-                       return $watchlistOwner->getId();
-               }
-               return $user->getId();
-       }
-
-       private function getWatchedItemsWithRCInfoQueryFilterConds( User $user, array $options ) {
-               $conds = [];
-
-               if ( in_array( self::FILTER_MINOR, $options['filters'] ) ) {
-                       $conds[] = 'rc_minor != 0';
-               } elseif ( in_array( self::FILTER_NOT_MINOR, $options['filters'] ) ) {
-                       $conds[] = 'rc_minor = 0';
-               }
-
-               if ( in_array( self::FILTER_BOT, $options['filters'] ) ) {
-                       $conds[] = 'rc_bot != 0';
-               } elseif ( in_array( self::FILTER_NOT_BOT, $options['filters'] ) ) {
-                       $conds[] = 'rc_bot = 0';
-               }
-
-               if ( in_array( self::FILTER_ANON, $options['filters'] ) ) {
-                       $conds[] = 'rc_user = 0';
-               } elseif ( in_array( self::FILTER_NOT_ANON, $options['filters'] ) ) {
-                       $conds[] = 'rc_user != 0';
-               }
-
-               if ( $user->useRCPatrol() || $user->useNPPatrol() ) {
-                       // TODO: not sure if this should simply ignore patrolled filters if user does not have the patrol
-                       // right, or maybe rather fail loud at this point, same as e.g. ApiQueryWatchlist does?
-                       if ( in_array( self::FILTER_PATROLLED, $options['filters'] ) ) {
-                               $conds[] = 'rc_patrolled != 0';
-                       } elseif ( in_array( self::FILTER_NOT_PATROLLED, $options['filters'] ) ) {
-                               $conds[] = 'rc_patrolled = 0';
-                       }
-               }
-
-               if ( in_array( self::FILTER_UNREAD, $options['filters'] ) ) {
-                       $conds[] = 'rc_timestamp >= wl_notificationtimestamp';
-               } elseif ( in_array( self::FILTER_NOT_UNREAD, $options['filters'] ) ) {
-                       // TODO: should this be changed to use Database::makeList?
-                       $conds[] = 'wl_notificationtimestamp IS NULL OR rc_timestamp < wl_notificationtimestamp';
-               }
-
-               return $conds;
-       }
-
-       private function getStartEndConds( IDatabase $db, array $options ) {
-               if ( !isset( $options['start'] ) && !isset( $options['end'] ) ) {
-                       return [];
-               }
-
-               $conds = [];
-
-               if ( isset( $options['start'] ) ) {
-                       $after = $options['dir'] === self::DIR_OLDER ? '<=' : '>=';
-                       $conds[] = 'rc_timestamp ' . $after . ' ' .
-                               $db->addQuotes( $db->timestamp( $options['start'] ) );
-               }
-               if ( isset( $options['end'] ) ) {
-                       $before = $options['dir'] === self::DIR_OLDER ? '>=' : '<=';
-                       $conds[] = 'rc_timestamp ' . $before . ' ' .
-                               $db->addQuotes( $db->timestamp( $options['end'] ) );
-               }
-
-               return $conds;
-       }
-
-       private function getUserRelatedConds( IDatabase $db, User $user, array $options ) {
-               if ( !array_key_exists( 'onlyByUser', $options ) && !array_key_exists( 'notByUser', $options ) ) {
-                       return [];
-               }
-
-               $conds = [];
-
-               if ( array_key_exists( 'onlyByUser', $options ) ) {
-                       $conds['rc_user_text'] = $options['onlyByUser'];
-               } elseif ( array_key_exists( 'notByUser', $options ) ) {
-                       $conds[] = 'rc_user_text != ' . $db->addQuotes( $options['notByUser'] );
-               }
-
-               // Avoid brute force searches (T19342)
-               $bitmask = 0;
-               if ( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $bitmask = Revision::DELETED_USER;
-               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
-                       $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
-               }
-               if ( $bitmask ) {
-                       $conds[] = $db->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask";
-               }
-
-               return $conds;
-       }
-
-       private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, User $user ) {
-               // LogPage::DELETED_ACTION hides the affected page, too. So hide those
-               // entirely from the watchlist, or someone could guess the title.
-               $bitmask = 0;
-               if ( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $bitmask = LogPage::DELETED_ACTION;
-               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
-                       $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
-               }
-               if ( $bitmask ) {
-                       return $db->makeList( [
-                               'rc_type != ' . RC_LOG,
-                               $db->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask",
-                       ], LIST_OR );
-               }
-               return '';
-       }
-
-       private function getStartFromConds( IDatabase $db, array $options, array $startFrom ) {
-               $op = $options['dir'] === self::DIR_OLDER ? '<' : '>';
-               list( $rcTimestamp, $rcId ) = $startFrom;
-               $rcTimestamp = $db->addQuotes( $db->timestamp( $rcTimestamp ) );
-               $rcId = (int)$rcId;
-               return $db->makeList(
-                       [
-                               "rc_timestamp $op $rcTimestamp",
-                               $db->makeList(
-                                       [
-                                               "rc_timestamp = $rcTimestamp",
-                                               "rc_id $op= $rcId"
-                                       ],
-                                       LIST_AND
-                               )
-                       ],
-                       LIST_OR
-               );
-       }
-
-       private function getWatchedItemsForUserQueryConds( IDatabase $db, User $user, array $options ) {
-               $conds = [ 'wl_user' => $user->getId() ];
-               if ( $options['namespaceIds'] ) {
-                       $conds['wl_namespace'] = array_map( 'intval', $options['namespaceIds'] );
-               }
-               if ( isset( $options['filter'] ) ) {
-                       $filter = $options['filter'];
-                       if ( $filter === self::FILTER_CHANGED ) {
-                               $conds[] = 'wl_notificationtimestamp IS NOT NULL';
-                       } else {
-                               $conds[] = 'wl_notificationtimestamp IS NULL';
-                       }
-               }
-
-               if ( isset( $options['from'] ) ) {
-                       $op = $options['sort'] === self::SORT_ASC ? '>' : '<';
-                       $conds[] = $this->getFromUntilTargetConds( $db, $options['from'], $op );
-               }
-               if ( isset( $options['until'] ) ) {
-                       $op = $options['sort'] === self::SORT_ASC ? '<' : '>';
-                       $conds[] = $this->getFromUntilTargetConds( $db, $options['until'], $op );
-               }
-               if ( isset( $options['startFrom'] ) ) {
-                       $op = $options['sort'] === self::SORT_ASC ? '>' : '<';
-                       $conds[] = $this->getFromUntilTargetConds( $db, $options['startFrom'], $op );
-               }
-
-               return $conds;
-       }
-
-       /**
-        * Creates a query condition part for getting only items before or after the given link target
-        * (while ordering using $sort mode)
-        *
-        * @param IDatabase $db
-        * @param LinkTarget $target
-        * @param string $op comparison operator to use in the conditions
-        * @return string
-        */
-       private function getFromUntilTargetConds( IDatabase $db, LinkTarget $target, $op ) {
-               return $db->makeList(
-                       [
-                               "wl_namespace $op " . $target->getNamespace(),
-                               $db->makeList(
-                                       [
-                                               'wl_namespace = ' . $target->getNamespace(),
-                                               "wl_title $op= " . $db->addQuotes( $target->getDBkey() )
-                                       ],
-                                       LIST_AND
-                               )
-                       ],
-                       LIST_OR
-               );
-       }
-
-       private function getWatchedItemsWithRCInfoQueryDbOptions( array $options ) {
-               $dbOptions = [];
-
-               if ( array_key_exists( 'dir', $options ) ) {
-                       $sort = $options['dir'] === self::DIR_OLDER ? ' DESC' : '';
-                       $dbOptions['ORDER BY'] = [ 'rc_timestamp' . $sort, 'rc_id' . $sort ];
-               }
-
-               if ( array_key_exists( 'limit', $options ) ) {
-                       $dbOptions['LIMIT'] = (int)$options['limit'] + 1;
-               }
-
-               return $dbOptions;
-       }
-
-       private function getWatchedItemsForUserQueryDbOptions( array $options ) {
-               $dbOptions = [];
-               if ( array_key_exists( 'sort', $options ) ) {
-                       $dbOptions['ORDER BY'] = [
-                               "wl_namespace {$options['sort']}",
-                               "wl_title {$options['sort']}"
-                       ];
-                       if ( count( $options['namespaceIds'] ) === 1 ) {
-                               $dbOptions['ORDER BY'] = "wl_title {$options['sort']}";
-                       }
-               }
-               if ( array_key_exists( 'limit', $options ) ) {
-                       $dbOptions['LIMIT'] = (int)$options['limit'];
-               }
-               return $dbOptions;
-       }
-
-       private function getWatchedItemsWithRCInfoQueryJoinConds( array $options ) {
-               $joinConds = [
-                       'watchlist' => [ 'INNER JOIN',
-                               [
-                                       'wl_namespace=rc_namespace',
-                                       'wl_title=rc_title'
-                               ]
-                       ]
-               ];
-               if ( !$options['allRevisions'] ) {
-                       $joinConds['page'] = [ 'LEFT JOIN', 'rc_cur_id=page_id' ];
-               }
-               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
-                       $joinConds += $this->getCommentStore()->getJoin()['joins'];
-               }
-               return $joinConds;
-       }
-
-}
diff --git a/includes/WatchedItemQueryServiceExtension.php b/includes/WatchedItemQueryServiceExtension.php
deleted file mode 100644 (file)
index 93d5033..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\IDatabase;
-
-/**
- * Extension mechanism for WatchedItemQueryService
- *
- * @since 1.29
- *
- * @file
- * @ingroup Watchlist
- *
- * @license GNU GPL v2+
- */
-interface WatchedItemQueryServiceExtension {
-
-       /**
-        * Modify the WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
-        * query before it's made.
-        *
-        * @warning Any joins added *must* join on a unique key of the target table
-        *  unless you really know what you're doing.
-        * @param User $user
-        * @param array $options Options from
-        *  WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
-        * @param IDatabase $db Database connection being used for the query
-        * @param array &$tables Tables for Database::select()
-        * @param array &$fields Fields for Database::select()
-        * @param array &$conds Conditions for Database::select()
-        * @param array &$dbOptions Options for Database::select()
-        * @param array &$joinConds Join conditions for Database::select()
-        */
-       public function modifyWatchedItemsWithRCInfoQuery( User $user, array $options, IDatabase $db,
-               array &$tables, array &$fields, array &$conds, array &$dbOptions, array &$joinConds
-       );
-
-       /**
-        * Modify the results from WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
-        * before they're returned.
-        *
-        * @param User $user
-        * @param array $options Options from
-        *  WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
-        * @param IDatabase $db Database connection being used for the query
-        * @param array &$items array of pairs ( WatchedItem $watchedItem, string[] $recentChangeInfo ).
-        *  May be truncated if necessary, in which case $startFrom must be updated.
-        * @param ResultWrapper|bool $res Database query result
-        * @param array|null &$startFrom Continuation value. If you truncate $items, set this to
-        *  [ $recentChangeInfo['rc_timestamp'], $recentChangeInfo['rc_id'] ] from the first item
-        *  removed.
-        */
-       public function modifyWatchedItemsWithRCInfo( User $user, array $options, IDatabase $db,
-               array &$items, $res, &$startFrom
-       );
-
-}
diff --git a/includes/WatchedItemStore.php b/includes/WatchedItemStore.php
deleted file mode 100644 (file)
index 60d8b76..0000000
+++ /dev/null
@@ -1,986 +0,0 @@
-<?php
-
-use Wikimedia\Rdbms\IDatabase;
-use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
-use MediaWiki\Linker\LinkTarget;
-use MediaWiki\MediaWikiServices;
-use Wikimedia\Assert\Assert;
-use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\LoadBalancer;
-use Wikimedia\Rdbms\DBUnexpectedError;
-
-/**
- * Storage layer class for WatchedItems.
- * Database interaction.
- *
- * Uses database because this uses User::isAnon
- *
- * @group Database
- *
- * @author Addshore
- * @since 1.27
- */
-class WatchedItemStore implements StatsdAwareInterface {
-
-       const SORT_DESC = 'DESC';
-       const SORT_ASC = 'ASC';
-
-       /**
-        * @var LoadBalancer
-        */
-       private $loadBalancer;
-
-       /**
-        * @var ReadOnlyMode
-        */
-       private $readOnlyMode;
-
-       /**
-        * @var HashBagOStuff
-        */
-       private $cache;
-
-       /**
-        * @var array[] Looks like $cacheIndex[Namespace ID][Target DB Key][User Id] => 'key'
-        * The index is needed so that on mass changes all relevant items can be un-cached.
-        * For example: Clearing a users watchlist of all items or updating notification timestamps
-        *              for all users watching a single target.
-        */
-       private $cacheIndex = [];
-
-       /**
-        * @var callable|null
-        */
-       private $deferredUpdatesAddCallableUpdateCallback;
-
-       /**
-        * @var callable|null
-        */
-       private $revisionGetTimestampFromIdCallback;
-
-       /**
-        * @var StatsdDataFactoryInterface
-        */
-       private $stats;
-
-       /**
-        * @param LoadBalancer $loadBalancer
-        * @param HashBagOStuff $cache
-        * @param ReadOnlyMode $readOnlyMode
-        */
-       public function __construct(
-               LoadBalancer $loadBalancer,
-               HashBagOStuff $cache,
-               ReadOnlyMode $readOnlyMode
-       ) {
-               $this->loadBalancer = $loadBalancer;
-               $this->cache = $cache;
-               $this->readOnlyMode = $readOnlyMode;
-               $this->stats = new NullStatsdDataFactory();
-               $this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
-               $this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
-       }
-
-       public function setStatsdDataFactory( StatsdDataFactoryInterface $stats ) {
-               $this->stats = $stats;
-       }
-
-       /**
-        * Overrides the DeferredUpdates::addCallableUpdate callback
-        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
-        *
-        * @param callable $callback
-        *
-        * @see DeferredUpdates::addCallableUpdate for callback signiture
-        *
-        * @return ScopedCallback to reset the overridden value
-        * @throws MWException
-        */
-       public function overrideDeferredUpdatesAddCallableUpdateCallback( callable $callback ) {
-               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
-                       throw new MWException(
-                               'Cannot override DeferredUpdates::addCallableUpdate callback in operation.'
-                       );
-               }
-               $previousValue = $this->deferredUpdatesAddCallableUpdateCallback;
-               $this->deferredUpdatesAddCallableUpdateCallback = $callback;
-               return new ScopedCallback( function () use ( $previousValue ) {
-                       $this->deferredUpdatesAddCallableUpdateCallback = $previousValue;
-               } );
-       }
-
-       /**
-        * Overrides the Revision::getTimestampFromId callback
-        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
-        *
-        * @param callable $callback
-        * @see Revision::getTimestampFromId for callback signiture
-        *
-        * @return ScopedCallback to reset the overridden value
-        * @throws MWException
-        */
-       public function overrideRevisionGetTimestampFromIdCallback( callable $callback ) {
-               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
-                       throw new MWException(
-                               'Cannot override Revision::getTimestampFromId callback in operation.'
-                       );
-               }
-               $previousValue = $this->revisionGetTimestampFromIdCallback;
-               $this->revisionGetTimestampFromIdCallback = $callback;
-               return new ScopedCallback( function () use ( $previousValue ) {
-                       $this->revisionGetTimestampFromIdCallback = $previousValue;
-               } );
-       }
-
-       private function getCacheKey( User $user, LinkTarget $target ) {
-               return $this->cache->makeKey(
-                       (string)$target->getNamespace(),
-                       $target->getDBkey(),
-                       (string)$user->getId()
-               );
-       }
-
-       private function cache( WatchedItem $item ) {
-               $user = $item->getUser();
-               $target = $item->getLinkTarget();
-               $key = $this->getCacheKey( $user, $target );
-               $this->cache->set( $key, $item );
-               $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] = $key;
-               $this->stats->increment( 'WatchedItemStore.cache' );
-       }
-
-       private function uncache( User $user, LinkTarget $target ) {
-               $this->cache->delete( $this->getCacheKey( $user, $target ) );
-               unset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] );
-               $this->stats->increment( 'WatchedItemStore.uncache' );
-       }
-
-       private function uncacheLinkTarget( LinkTarget $target ) {
-               $this->stats->increment( 'WatchedItemStore.uncacheLinkTarget' );
-               if ( !isset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] ) ) {
-                       return;
-               }
-               foreach ( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] as $key ) {
-                       $this->stats->increment( 'WatchedItemStore.uncacheLinkTarget.items' );
-                       $this->cache->delete( $key );
-               }
-       }
-
-       private function uncacheUser( User $user ) {
-               $this->stats->increment( 'WatchedItemStore.uncacheUser' );
-               foreach ( $this->cacheIndex as $ns => $dbKeyArray ) {
-                       foreach ( $dbKeyArray as $dbKey => $userArray ) {
-                               if ( isset( $userArray[$user->getId()] ) ) {
-                                       $this->stats->increment( 'WatchedItemStore.uncacheUser.items' );
-                                       $this->cache->delete( $userArray[$user->getId()] );
-                               }
-                       }
-               }
-       }
-
-       /**
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return WatchedItem|false
-        */
-       private function getCached( User $user, LinkTarget $target ) {
-               return $this->cache->get( $this->getCacheKey( $user, $target ) );
-       }
-
-       /**
-        * Return an array of conditions to select or update the appropriate database
-        * row.
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return array
-        */
-       private function dbCond( User $user, LinkTarget $target ) {
-               return [
-                       'wl_user' => $user->getId(),
-                       'wl_namespace' => $target->getNamespace(),
-                       'wl_title' => $target->getDBkey(),
-               ];
-       }
-
-       /**
-        * @param int $dbIndex DB_MASTER or DB_REPLICA
-        *
-        * @return IDatabase
-        * @throws MWException
-        */
-       private function getConnectionRef( $dbIndex ) {
-               return $this->loadBalancer->getConnectionRef( $dbIndex, [ 'watchlist' ] );
-       }
-
-       /**
-        * Count the number of individual items that are watched by the user.
-        * If a subject and corresponding talk page are watched this will return 2.
-        *
-        * @param User $user
-        *
-        * @return int
-        */
-       public function countWatchedItems( User $user ) {
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-               $return = (int)$dbr->selectField(
-                       'watchlist',
-                       'COUNT(*)',
-                       [
-                               'wl_user' => $user->getId()
-                       ],
-                       __METHOD__
-               );
-
-               return $return;
-       }
-
-       /**
-        * @param LinkTarget $target
-        *
-        * @return int
-        */
-       public function countWatchers( LinkTarget $target ) {
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-               $return = (int)$dbr->selectField(
-                       'watchlist',
-                       'COUNT(*)',
-                       [
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                       ],
-                       __METHOD__
-               );
-
-               return $return;
-       }
-
-       /**
-        * Number of page watchers who also visited a "recent" edit
-        *
-        * @param LinkTarget $target
-        * @param mixed $threshold timestamp accepted by wfTimestamp
-        *
-        * @return int
-        * @throws DBUnexpectedError
-        * @throws MWException
-        */
-       public function countVisitingWatchers( LinkTarget $target, $threshold ) {
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-               $visitingWatchers = (int)$dbr->selectField(
-                       'watchlist',
-                       'COUNT(*)',
-                       [
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                               'wl_notificationtimestamp >= ' .
-                               $dbr->addQuotes( $dbr->timestamp( $threshold ) ) .
-                               ' OR wl_notificationtimestamp IS NULL'
-                       ],
-                       __METHOD__
-               );
-
-               return $visitingWatchers;
-       }
-
-       /**
-        * @param LinkTarget[] $targets
-        * @param array $options Allowed keys:
-        *        'minimumWatchers' => int
-        *
-        * @return array multi dimensional like $return[$namespaceId][$titleString] = int $watchers
-        *         All targets will be present in the result. 0 either means no watchers or the number
-        *         of watchers was below the minimumWatchers option if passed.
-        */
-       public function countWatchersMultiple( array $targets, array $options = [] ) {
-               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
-
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-
-               if ( array_key_exists( 'minimumWatchers', $options ) ) {
-                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$options['minimumWatchers'];
-               }
-
-               $lb = new LinkBatch( $targets );
-               $res = $dbr->select(
-                       'watchlist',
-                       [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
-                       [ $lb->constructSet( 'wl', $dbr ) ],
-                       __METHOD__,
-                       $dbOptions
-               );
-
-               $watchCounts = [];
-               foreach ( $targets as $linkTarget ) {
-                       $watchCounts[$linkTarget->getNamespace()][$linkTarget->getDBkey()] = 0;
-               }
-
-               foreach ( $res as $row ) {
-                       $watchCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
-               }
-
-               return $watchCounts;
-       }
-
-       /**
-        * Number of watchers of each page who have visited recent edits to that page
-        *
-        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget $target, mixed $threshold),
-        *        $threshold is:
-        *        - a timestamp of the recent edit if $target exists (format accepted by wfTimestamp)
-        *        - null if $target doesn't exist
-        * @param int|null $minimumWatchers
-        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $watchers,
-        *         where $watchers is an int:
-        *         - if the page exists, number of users watching who have visited the page recently
-        *         - if the page doesn't exist, number of users that have the page on their watchlist
-        *         - 0 means there are no visiting watchers or their number is below the minimumWatchers
-        *         option (if passed).
-        */
-       public function countVisitingWatchersMultiple(
-               array $targetsWithVisitThresholds,
-               $minimumWatchers = null
-       ) {
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-
-               $conds = $this->getVisitingWatchersCondition( $dbr, $targetsWithVisitThresholds );
-
-               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
-               if ( $minimumWatchers !== null ) {
-                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$minimumWatchers;
-               }
-               $res = $dbr->select(
-                       'watchlist',
-                       [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
-                       $conds,
-                       __METHOD__,
-                       $dbOptions
-               );
-
-               $watcherCounts = [];
-               foreach ( $targetsWithVisitThresholds as list( $target ) ) {
-                       /* @var LinkTarget $target */
-                       $watcherCounts[$target->getNamespace()][$target->getDBkey()] = 0;
-               }
-
-               foreach ( $res as $row ) {
-                       $watcherCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
-               }
-
-               return $watcherCounts;
-       }
-
-       /**
-        * Generates condition for the query used in a batch count visiting watchers.
-        *
-        * @param IDatabase $db
-        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget, last visit threshold)
-        * @return string
-        */
-       private function getVisitingWatchersCondition(
-               IDatabase $db,
-               array $targetsWithVisitThresholds
-       ) {
-               $missingTargets = [];
-               $namespaceConds = [];
-               foreach ( $targetsWithVisitThresholds as list( $target, $threshold ) ) {
-                       if ( $threshold === null ) {
-                               $missingTargets[] = $target;
-                               continue;
-                       }
-                       /* @var LinkTarget $target */
-                       $namespaceConds[$target->getNamespace()][] = $db->makeList( [
-                               'wl_title = ' . $db->addQuotes( $target->getDBkey() ),
-                               $db->makeList( [
-                                       'wl_notificationtimestamp >= ' . $db->addQuotes( $db->timestamp( $threshold ) ),
-                                       'wl_notificationtimestamp IS NULL'
-                               ], LIST_OR )
-                       ], LIST_AND );
-               }
-
-               $conds = [];
-               foreach ( $namespaceConds as $namespace => $pageConds ) {
-                       $conds[] = $db->makeList( [
-                               'wl_namespace = ' . $namespace,
-                               '(' . $db->makeList( $pageConds, LIST_OR ) . ')'
-                       ], LIST_AND );
-               }
-
-               if ( $missingTargets ) {
-                       $lb = new LinkBatch( $missingTargets );
-                       $conds[] = $lb->constructSet( 'wl', $db );
-               }
-
-               return $db->makeList( $conds, LIST_OR );
-       }
-
-       /**
-        * Get an item (may be cached)
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return WatchedItem|false
-        */
-       public function getWatchedItem( User $user, LinkTarget $target ) {
-               if ( $user->isAnon() ) {
-                       return false;
-               }
-
-               $cached = $this->getCached( $user, $target );
-               if ( $cached ) {
-                       $this->stats->increment( 'WatchedItemStore.getWatchedItem.cached' );
-                       return $cached;
-               }
-               $this->stats->increment( 'WatchedItemStore.getWatchedItem.load' );
-               return $this->loadWatchedItem( $user, $target );
-       }
-
-       /**
-        * Loads an item from the db
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return WatchedItem|false
-        */
-       public function loadWatchedItem( User $user, LinkTarget $target ) {
-               // Only loggedin user can have a watchlist
-               if ( $user->isAnon() ) {
-                       return false;
-               }
-
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-               $row = $dbr->selectRow(
-                       'watchlist',
-                       'wl_notificationtimestamp',
-                       $this->dbCond( $user, $target ),
-                       __METHOD__
-               );
-
-               if ( !$row ) {
-                       return false;
-               }
-
-               $item = new WatchedItem(
-                       $user,
-                       $target,
-                       wfTimestampOrNull( TS_MW, $row->wl_notificationtimestamp )
-               );
-               $this->cache( $item );
-
-               return $item;
-       }
-
-       /**
-        * @param User $user
-        * @param array $options Allowed keys:
-        *        'forWrite' => bool defaults to false
-        *        'sort' => string optional sorting by namespace ID and title
-        *                     one of the self::SORT_* constants
-        *
-        * @return WatchedItem[]
-        */
-       public function getWatchedItemsForUser( User $user, array $options = [] ) {
-               $options += [ 'forWrite' => false ];
-
-               $dbOptions = [];
-               if ( array_key_exists( 'sort', $options ) ) {
-                       Assert::parameter(
-                               ( in_array( $options['sort'], [ self::SORT_ASC, self::SORT_DESC ] ) ),
-                               '$options[\'sort\']',
-                               'must be SORT_ASC or SORT_DESC'
-                       );
-                       $dbOptions['ORDER BY'] = [
-                               "wl_namespace {$options['sort']}",
-                               "wl_title {$options['sort']}"
-                       ];
-               }
-               $db = $this->getConnectionRef( $options['forWrite'] ? DB_MASTER : DB_REPLICA );
-
-               $res = $db->select(
-                       'watchlist',
-                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                       [ 'wl_user' => $user->getId() ],
-                       __METHOD__,
-                       $dbOptions
-               );
-
-               $watchedItems = [];
-               foreach ( $res as $row ) {
-                       // @todo: Should we add these to the process cache?
-                       $watchedItems[] = new WatchedItem(
-                               $user,
-                               new TitleValue( (int)$row->wl_namespace, $row->wl_title ),
-                               $row->wl_notificationtimestamp
-                       );
-               }
-
-               return $watchedItems;
-       }
-
-       /**
-        * Must be called separately for Subject & Talk namespaces
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return bool
-        */
-       public function isWatched( User $user, LinkTarget $target ) {
-               return (bool)$this->getWatchedItem( $user, $target );
-       }
-
-       /**
-        * @param User $user
-        * @param LinkTarget[] $targets
-        *
-        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $timestamp,
-        *         where $timestamp is:
-        *         - string|null value of wl_notificationtimestamp,
-        *         - false if $target is not watched by $user.
-        */
-       public function getNotificationTimestampsBatch( User $user, array $targets ) {
-               $timestamps = [];
-               foreach ( $targets as $target ) {
-                       $timestamps[$target->getNamespace()][$target->getDBkey()] = false;
-               }
-
-               if ( $user->isAnon() ) {
-                       return $timestamps;
-               }
-
-               $targetsToLoad = [];
-               foreach ( $targets as $target ) {
-                       $cachedItem = $this->getCached( $user, $target );
-                       if ( $cachedItem ) {
-                               $timestamps[$target->getNamespace()][$target->getDBkey()] =
-                                       $cachedItem->getNotificationTimestamp();
-                       } else {
-                               $targetsToLoad[] = $target;
-                       }
-               }
-
-               if ( !$targetsToLoad ) {
-                       return $timestamps;
-               }
-
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-
-               $lb = new LinkBatch( $targetsToLoad );
-               $res = $dbr->select(
-                       'watchlist',
-                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                       [
-                               $lb->constructSet( 'wl', $dbr ),
-                               'wl_user' => $user->getId(),
-                       ],
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $timestamps[$row->wl_namespace][$row->wl_title] =
-                               wfTimestampOrNull( TS_MW, $row->wl_notificationtimestamp );
-               }
-
-               return $timestamps;
-       }
-
-       /**
-        * Must be called separately for Subject & Talk namespaces
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        */
-       public function addWatch( User $user, LinkTarget $target ) {
-               $this->addWatchBatchForUser( $user, [ $target ] );
-       }
-
-       /**
-        * @param User $user
-        * @param LinkTarget[] $targets
-        *
-        * @return bool success
-        */
-       public function addWatchBatchForUser( User $user, array $targets ) {
-               if ( $this->readOnlyMode->isReadOnly() ) {
-                       return false;
-               }
-               // Only loggedin user can have a watchlist
-               if ( $user->isAnon() ) {
-                       return false;
-               }
-
-               if ( !$targets ) {
-                       return true;
-               }
-
-               $rows = [];
-               $items = [];
-               foreach ( $targets as $target ) {
-                       $rows[] = [
-                               'wl_user' => $user->getId(),
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                               'wl_notificationtimestamp' => null,
-                       ];
-                       $items[] = new WatchedItem(
-                               $user,
-                               $target,
-                               null
-                       );
-                       $this->uncache( $user, $target );
-               }
-
-               $dbw = $this->getConnectionRef( DB_MASTER );
-               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
-                       // Use INSERT IGNORE to avoid overwriting the notification timestamp
-                       // if there's already an entry for this page
-                       $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
-               }
-               // Update process cache to ensure skin doesn't claim that the current
-               // page is unwatched in the response of action=watch itself (T28292).
-               // This would otherwise be re-queried from a slave by isWatched().
-               foreach ( $items as $item ) {
-                       $this->cache( $item );
-               }
-
-               return true;
-       }
-
-       /**
-        * Removes the an entry for the User watching the LinkTarget
-        * Must be called separately for Subject & Talk namespaces
-        *
-        * @param User $user
-        * @param LinkTarget $target
-        *
-        * @return bool success
-        * @throws DBUnexpectedError
-        * @throws MWException
-        */
-       public function removeWatch( User $user, LinkTarget $target ) {
-               // Only logged in user can have a watchlist
-               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
-                       return false;
-               }
-
-               $this->uncache( $user, $target );
-
-               $dbw = $this->getConnectionRef( DB_MASTER );
-               $dbw->delete( 'watchlist',
-                       [
-                               'wl_user' => $user->getId(),
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                       ], __METHOD__
-               );
-               $success = (bool)$dbw->affectedRows();
-
-               return $success;
-       }
-
-       /**
-        * @param User $user The user to set the timestamp for
-        * @param string|null $timestamp Set the update timestamp to this value
-        * @param LinkTarget[] $targets List of targets to update. Default to all targets
-        *
-        * @return bool success
-        */
-       public function setNotificationTimestampsForUser( User $user, $timestamp, array $targets = [] ) {
-               // Only loggedin user can have a watchlist
-               if ( $user->isAnon() ) {
-                       return false;
-               }
-
-               $dbw = $this->getConnectionRef( DB_MASTER );
-
-               $conds = [ 'wl_user' => $user->getId() ];
-               if ( $targets ) {
-                       $batch = new LinkBatch( $targets );
-                       $conds[] = $batch->constructSet( 'wl', $dbw );
-               }
-
-               if ( $timestamp !== null ) {
-                       $timestamp = $dbw->timestamp( $timestamp );
-               }
-
-               $success = $dbw->update(
-                       'watchlist',
-                       [ 'wl_notificationtimestamp' => $timestamp ],
-                       $conds,
-                       __METHOD__
-               );
-
-               $this->uncacheUser( $user );
-
-               return $success;
-       }
-
-       /**
-        * @param User $editor The editor that triggered the update. Their notification
-        *  timestamp will not be updated(they have already seen it)
-        * @param LinkTarget $target The target to update timestamps for
-        * @param string $timestamp Set the update timestamp to this value
-        *
-        * @return int[] Array of user IDs the timestamp has been updated for
-        */
-       public function updateNotificationTimestamp( User $editor, LinkTarget $target, $timestamp ) {
-               $dbw = $this->getConnectionRef( DB_MASTER );
-               $uids = $dbw->selectFieldValues(
-                       'watchlist',
-                       'wl_user',
-                       [
-                               'wl_user != ' . intval( $editor->getId() ),
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                               'wl_notificationtimestamp IS NULL',
-                       ],
-                       __METHOD__
-               );
-
-               $watchers = array_map( 'intval', $uids );
-               if ( $watchers ) {
-                       // Update wl_notificationtimestamp for all watching users except the editor
-                       $fname = __METHOD__;
-                       DeferredUpdates::addCallableUpdate(
-                               function () use ( $timestamp, $watchers, $target, $fname ) {
-                                       global $wgUpdateRowsPerQuery;
-
-                                       $dbw = $this->getConnectionRef( DB_MASTER );
-                                       $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
-                                       $ticket = $factory->getEmptyTransactionTicket( __METHOD__ );
-
-                                       $watchersChunks = array_chunk( $watchers, $wgUpdateRowsPerQuery );
-                                       foreach ( $watchersChunks as $watchersChunk ) {
-                                               $dbw->update( 'watchlist',
-                                                       [ /* SET */
-                                                               'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
-                                                       ], [ /* WHERE - TODO Use wl_id T130067 */
-                                                               'wl_user' => $watchersChunk,
-                                                               'wl_namespace' => $target->getNamespace(),
-                                                               'wl_title' => $target->getDBkey(),
-                                                       ], $fname
-                                               );
-                                               if ( count( $watchersChunks ) > 1 ) {
-                                                       $factory->commitAndWaitForReplication(
-                                                               __METHOD__, $ticket, [ 'domain' => $dbw->getDomainID() ]
-                                                       );
-                                               }
-                                       }
-                                       $this->uncacheLinkTarget( $target );
-                               },
-                               DeferredUpdates::POSTSEND,
-                               $dbw
-                       );
-               }
-
-               return $watchers;
-       }
-
-       /**
-        * Reset the notification timestamp of this entry
-        *
-        * @param User $user
-        * @param Title $title
-        * @param string $force Whether to force the write query to be executed even if the
-        *    page is not watched or the notification timestamp is already NULL.
-        *    'force' in order to force
-        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
-        *
-        * @return bool success
-        */
-       public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 ) {
-               // Only loggedin user can have a watchlist
-               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
-                       return false;
-               }
-
-               $item = null;
-               if ( $force != 'force' ) {
-                       $item = $this->loadWatchedItem( $user, $title );
-                       if ( !$item || $item->getNotificationTimestamp() === null ) {
-                               return false;
-                       }
-               }
-
-               // If the page is watched by the user (or may be watched), update the timestamp
-               $job = new ActivityUpdateJob(
-                       $title,
-                       [
-                               'type'      => 'updateWatchlistNotification',
-                               'userid'    => $user->getId(),
-                               'notifTime' => $this->getNotificationTimestamp( $user, $title, $item, $force, $oldid ),
-                               'curTime'   => time()
-                       ]
-               );
-
-               // Try to run this post-send
-               // Calls DeferredUpdates::addCallableUpdate in normal operation
-               call_user_func(
-                       $this->deferredUpdatesAddCallableUpdateCallback,
-                       function () use ( $job ) {
-                               $job->run();
-                       }
-               );
-
-               $this->uncache( $user, $title );
-
-               return true;
-       }
-
-       private function getNotificationTimestamp( User $user, Title $title, $item, $force, $oldid ) {
-               if ( !$oldid ) {
-                       // No oldid given, assuming latest revision; clear the timestamp.
-                       return null;
-               }
-
-               if ( !$title->getNextRevisionID( $oldid ) ) {
-                       // Oldid given and is the latest revision for this title; clear the timestamp.
-                       return null;
-               }
-
-               if ( $item === null ) {
-                       $item = $this->loadWatchedItem( $user, $title );
-               }
-
-               if ( !$item ) {
-                       // This can only happen if $force is enabled.
-                       return null;
-               }
-
-               // Oldid given and isn't the latest; update the timestamp.
-               // This will result in no further notification emails being sent!
-               // Calls Revision::getTimestampFromId in normal operation
-               $notificationTimestamp = call_user_func(
-                       $this->revisionGetTimestampFromIdCallback,
-                       $title,
-                       $oldid
-               );
-
-               // We need to go one second to the future because of various strict comparisons
-               // throughout the codebase
-               $ts = new MWTimestamp( $notificationTimestamp );
-               $ts->timestamp->add( new DateInterval( 'PT1S' ) );
-               $notificationTimestamp = $ts->getTimestamp( TS_MW );
-
-               if ( $notificationTimestamp < $item->getNotificationTimestamp() ) {
-                       if ( $force != 'force' ) {
-                               return false;
-                       } else {
-                               // This is a little silly…
-                               return $item->getNotificationTimestamp();
-                       }
-               }
-
-               return $notificationTimestamp;
-       }
-
-       /**
-        * @param User $user
-        * @param int $unreadLimit
-        *
-        * @return int|bool The number of unread notifications
-        *                  true if greater than or equal to $unreadLimit
-        */
-       public function countUnreadNotifications( User $user, $unreadLimit = null ) {
-               $queryOptions = [];
-               if ( $unreadLimit !== null ) {
-                       $unreadLimit = (int)$unreadLimit;
-                       $queryOptions['LIMIT'] = $unreadLimit;
-               }
-
-               $dbr = $this->getConnectionRef( DB_REPLICA );
-               $rowCount = $dbr->selectRowCount(
-                       'watchlist',
-                       '1',
-                       [
-                               'wl_user' => $user->getId(),
-                               'wl_notificationtimestamp IS NOT NULL',
-                       ],
-                       __METHOD__,
-                       $queryOptions
-               );
-
-               if ( !isset( $unreadLimit ) ) {
-                       return $rowCount;
-               }
-
-               if ( $rowCount >= $unreadLimit ) {
-                       return true;
-               }
-
-               return $rowCount;
-       }
-
-       /**
-        * Check if the given title already is watched by the user, and if so
-        * add a watch for the new title.
-        *
-        * To be used for page renames and such.
-        *
-        * @param LinkTarget $oldTarget
-        * @param LinkTarget $newTarget
-        */
-       public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget ) {
-               $oldTarget = Title::newFromLinkTarget( $oldTarget );
-               $newTarget = Title::newFromLinkTarget( $newTarget );
-
-               $this->duplicateEntry( $oldTarget->getSubjectPage(), $newTarget->getSubjectPage() );
-               $this->duplicateEntry( $oldTarget->getTalkPage(), $newTarget->getTalkPage() );
-       }
-
-       /**
-        * Check if the given title already is watched by the user, and if so
-        * add a watch for the new title.
-        *
-        * To be used for page renames and such.
-        * This must be called separately for Subject and Talk pages
-        *
-        * @param LinkTarget $oldTarget
-        * @param LinkTarget $newTarget
-        */
-       public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget ) {
-               $dbw = $this->getConnectionRef( DB_MASTER );
-
-               $result = $dbw->select(
-                       'watchlist',
-                       [ 'wl_user', 'wl_notificationtimestamp' ],
-                       [
-                               'wl_namespace' => $oldTarget->getNamespace(),
-                               'wl_title' => $oldTarget->getDBkey(),
-                       ],
-                       __METHOD__,
-                       [ 'FOR UPDATE' ]
-               );
-
-               $newNamespace = $newTarget->getNamespace();
-               $newDBkey = $newTarget->getDBkey();
-
-               # Construct array to replace into the watchlist
-               $values = [];
-               foreach ( $result as $row ) {
-                       $values[] = [
-                               'wl_user' => $row->wl_user,
-                               'wl_namespace' => $newNamespace,
-                               'wl_title' => $newDBkey,
-                               'wl_notificationtimestamp' => $row->wl_notificationtimestamp,
-                       ];
-               }
-
-               if ( !empty( $values ) ) {
-                       # Perform replace
-                       # Note that multi-row replace is very efficient for MySQL but may be inefficient for
-                       # some other DBMSes, mostly due to poor simulation by us
-                       $dbw->replace(
-                               'watchlist',
-                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
-                               $values,
-                               __METHOD__
-                       );
-               }
-       }
-
-}
index 8a58e6f..e4d93f9 100644 (file)
@@ -59,56 +59,39 @@ if ( $IP === false ) {
        $IP = realpath( '.' ) ?: dirname( __DIR__ );
 }
 
-require_once "$IP/includes/PreConfigSetup.php";
-
-# Assert that composer dependencies were successfully loaded
-# Purposely no leading \ due to it breaking HHVM RepoAuthorative mode
-# PHP works fine with both versions
-# See https://github.com/facebook/hhvm/issues/5833
-if ( !interface_exists( 'Psr\Log\LoggerInterface' ) ) {
-       $message = (
-               'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
-               "library</a> to be present. This library is not embedded directly in MediaWiki's " .
-               "git repository and must be installed separately by the end user.\n\n" .
-               'Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
-               '#Fetch_external_libraries">mediawiki.org</a> for help on installing ' .
-               'the required components.'
-       );
-       echo $message;
-       trigger_error( $message, E_USER_ERROR );
-       die( 1 );
-}
-
-# Install a header callback
-MediaWiki\HeaderCallback::register();
-
-if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
-       # Use a callback function to configure MediaWiki
-       call_user_func( MW_CONFIG_CALLBACK );
-} else {
+// If no LocalSettings file exists, try to display an error page
+// (use a callback because it depends on TemplateParser)
+if ( !defined( 'MW_CONFIG_CALLBACK' ) ) {
        if ( !defined( 'MW_CONFIG_FILE' ) ) {
                define( 'MW_CONFIG_FILE', "$IP/LocalSettings.php" );
        }
-
-       # LocalSettings.php is the per site customization file. If it does not exist
-       # the wiki installer needs to be launched or the generated file uploaded to
-       # the root wiki directory. Give a hint, if it is not readable by the server.
        if ( !is_readable( MW_CONFIG_FILE ) ) {
-               require_once "$IP/includes/NoLocalSettings.php";
-               die();
+               function wfWebStartNoLocalSettings() {
+                       # LocalSettings.php is the per-site customization file. If it does not exist
+                       # the wiki installer needs to be launched or the generated file uploaded to
+                       # the root wiki directory. Give a hint, if it is not readable by the server.
+                       global $IP;
+                       require_once "$IP/includes/NoLocalSettings.php";
+                       die();
+               }
+               define( 'MW_CONFIG_CALLBACK', 'wfWebStartNoLocalSettings' );
        }
-
-       # Include site settings. $IP may be changed (hopefully before the AutoLoader is invoked)
-       require_once MW_CONFIG_FILE;
 }
 
-# Initialise output buffering
-# Check that there is no previous output or previously set up buffers, because
-# that would cause us to potentially mix gzip and non-gzip output, creating a
-# big mess.
-if ( ob_get_level() == 0 ) {
-       require_once "$IP/includes/OutputHandler.php";
-       ob_start( 'wfOutputHandler' );
+// Custom setup for WebStart entry point
+if ( !defined( 'MW_SETUP_CALLBACK' ) ) {
+       function wfWebStartSetup() {
+               # Initialise output buffering
+               # Check that there is no previous output or previously set up buffers, because
+               # that would cause us to potentially mix gzip and non-gzip output, creating a
+               # big mess.
+               global $IP;
+               if ( ob_get_level() == 0 ) {
+                       require_once "$IP/includes/OutputHandler.php";
+                       ob_start( 'wfOutputHandler' );
+               }
+       }
+       define( 'MW_SETUP_CALLBACK', 'wfWebStartSetup' );
 }
 
 require_once "$IP/includes/Setup.php";
index fe84852..a9e3d6a 100644 (file)
@@ -258,12 +258,18 @@ class HistoryAction extends FormlessAction {
 
                $page_id = $this->page->getId();
 
-               return $dbr->select( 'revision',
-                       Revision::selectFields(),
+               $revQuery = Revision::getQueryInfo();
+               return $dbr->select(
+                       $revQuery['tables'],
+                       $revQuery['fields'],
                        array_merge( [ 'rev_page' => $page_id ], $offsets ),
                        __METHOD__,
-                       [ 'ORDER BY' => "rev_timestamp $dirs",
-                               'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit ]
+                       [
+                               'ORDER BY' => "rev_timestamp $dirs",
+                               'USE INDEX' => [ 'revision' => 'page_timestamp' ],
+                               'LIMIT' => $limit
+                       ],
+                       $revQuery['joins']
                );
        }
 
@@ -385,6 +391,9 @@ class HistoryPager extends ReverseChronologicalPager {
        /** @var bool Whether to show the tag editing UI */
        protected $showTagEditUI;
 
+       /** @var string */
+       private $tagFilter;
+
        /**
         * @param HistoryAction $historyPage
         * @param string $year
@@ -415,14 +424,15 @@ class HistoryPager extends ReverseChronologicalPager {
        }
 
        function getQueryInfo() {
+               $revQuery = Revision::getQueryInfo( [ 'user' ] );
                $queryInfo = [
-                       'tables' => [ 'revision', 'user' ],
-                       'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       'tables' => $revQuery['tables'],
+                       'fields' => $revQuery['fields'],
                        'conds' => array_merge(
                                [ 'rev_page' => $this->getWikiPage()->getId() ],
                                $this->conds ),
                        'options' => [ 'USE INDEX' => [ 'revision' => 'page_timestamp' ] ],
-                       'join_conds' => [ 'user' => Revision::userJoinCond() ],
+                       'join_conds' => $revQuery['joins'],
                ];
                ChangeTags::modifyDisplayQuery(
                        $queryInfo['tables'],
index d8c8bc3..be10ae4 100644 (file)
@@ -236,7 +236,13 @@ class RawAction extends FormlessAction {
                        }
                }
 
-               $allowedCTypes = [ 'text/x-wiki', 'text/javascript', 'text/css', 'application/x-zope-edit' ];
+               $allowedCTypes = [
+                       'text/x-wiki',
+                       'text/javascript',
+                       'text/css',
+                       'application/x-zope-edit',
+                       'application/json'
+               ];
                if ( $ctype == '' || !in_array( $ctype, $allowedCTypes ) ) {
                        $ctype = 'text/x-wiki';
                }
index 80aeff5..bf2b977 100644 (file)
@@ -1069,10 +1069,10 @@ abstract class ApiBase extends ContextSource {
                        } else {
                                $type = 'NULL'; // allow everything
                        }
+               }
 
-                       if ( $type == 'password' || !empty( $paramSettings[self::PARAM_SENSITIVE] ) ) {
-                               $this->getMain()->markParamsSensitive( $encParamName );
-                       }
+               if ( $type == 'password' || !empty( $paramSettings[self::PARAM_SENSITIVE] ) ) {
+                       $this->getMain()->markParamsSensitive( $encParamName );
                }
 
                if ( $type == 'boolean' ) {
index 953bc10..eb67bab 100644 (file)
@@ -175,14 +175,17 @@ class ApiComparePages extends ApiBase {
                                $rev = Revision::newFromId( $revId );
                                if ( !$rev ) {
                                        // Titles of deleted revisions aren't secret, per T51088
+                                       $arQuery = Revision::getArchiveQueryInfo();
                                        $row = $this->getDB()->selectRow(
-                                               'archive',
+                                               $arQuery['tables'],
                                                array_merge(
-                                                       Revision::selectArchiveFields(),
+                                                       $arQuery['fields'],
                                                        [ 'ar_namespace', 'ar_title' ]
                                                ),
                                                [ 'ar_rev_id' => $revId ],
-                                               __METHOD__
+                                               __METHOD__,
+                                               [],
+                                               $arQuery['joins']
                                        );
                                        if ( $row ) {
                                                $rev = Revision::newFromArchiveRow( $row );
@@ -285,14 +288,17 @@ class ApiComparePages extends ApiBase {
                        $rev = Revision::newFromId( $revId );
                        if ( !$rev && $this->getUser()->isAllowedAny( 'deletedtext', 'undelete' ) ) {
                                // Try the 'archive' table
+                               $arQuery = Revision::getArchiveQueryInfo();
                                $row = $this->getDB()->selectRow(
-                                       'archive',
+                                       $arQuery['tables'],
                                        array_merge(
-                                               Revision::selectArchiveFields(),
+                                               $arQuery['fields'],
                                                [ 'ar_namespace', 'ar_title' ]
                                        ),
                                        [ 'ar_rev_id' => $revId ],
-                                       __METHOD__
+                                       __METHOD__,
+                                       [],
+                                       $arQuery['joins']
                                );
                                if ( $row ) {
                                        $rev = Revision::newFromArchiveRow( $row );
index 06eaa19..c5f2fcf 100644 (file)
@@ -64,6 +64,26 @@ abstract class ApiFormatBase extends ApiBase {
         */
        abstract public function getMimeType();
 
+       /**
+        * Return a filename for this module's output.
+        * @note If $this->getIsWrappedHtml() || $this->getIsHtml(), you'll very
+        *  likely want to fall back to this class's version.
+        * @since 1.27
+        * @return string Generally this should be "api-result.$ext", and must be
+        *  encoded for inclusion in a Content-Disposition header's filename parameter.
+        */
+       public function getFilename() {
+               if ( $this->getIsWrappedHtml() ) {
+                       return 'api-result-wrapped.json';
+               } elseif ( $this->getIsHtml() ) {
+                       return 'api-result.html';
+               } else {
+                       $exts = MimeMagic::singleton()->getExtensionsForType( $this->getMimeType() );
+                       $ext = $exts ? strtok( $exts, ' ' ) : strtolower( $this->mFormat );
+                       return "api-result.$ext";
+               }
+       }
+
        /**
         * Get the internal format name
         * @return string
@@ -192,6 +212,13 @@ abstract class ApiFormatBase extends ApiBase {
                if ( $apiFrameOptions ) {
                        $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
                }
+
+               // Set a Content-Disposition header so something downloading an API
+               // response uses a halfway-sensible filename (T128209).
+               $filename = $this->getFilename();
+               $this->getMain()->getRequest()->response()->header(
+                       "Content-Disposition: inline; filename=\"{$filename}\""
+               );
        }
 
        /**
index 228b47e..ebaeb2c 100644 (file)
@@ -60,6 +60,17 @@ class ApiFormatRaw extends ApiFormatBase {
                return $data['mime'];
        }
 
+       public function getFilename() {
+               $data = $this->getResult()->getResultData();
+               if ( isset( $data['error'] ) ) {
+                       return $this->errorFallback->getFilename();
+               } elseif ( !isset( $data['filename'] ) || $this->getIsWrappedHtml() || $this->getIsHtml() ) {
+                       return parent::getFilename();
+               } else {
+                       return $data['filename'];
+               }
+       }
+
        public function initPrinter( $unused = false ) {
                $data = $this->getResult()->getResultData();
                if ( isset( $data['error'] ) || isset( $data['errors'] ) ) {
index 318555a..ea4f724 100644 (file)
@@ -62,6 +62,7 @@ class ApiHelp extends ApiBase {
                if ( $params['wrap'] ) {
                        $data = [
                                'mime' => 'text/html',
+                               'filename' => 'api-help.html',
                                'help' => $html,
                        ];
                        ApiResult::setSubelementsList( $data, 'help' );
@@ -70,6 +71,7 @@ class ApiHelp extends ApiBase {
                        $result->reset();
                        $result->addValue( null, 'text', $html, ApiResult::NO_SIZE_CHECK );
                        $result->addValue( null, 'mime', 'text/html', ApiResult::NO_SIZE_CHECK );
+                       $result->addValue( null, 'filename', 'api-help.html', ApiResult::NO_SIZE_CHECK );
                }
        }
 
index aa7e25e..9636789 100644 (file)
@@ -134,7 +134,7 @@ class ApiLogin extends ApiBase {
                                $session = $status->getValue();
                                $authRes = 'Success';
                                $loginType = 'BotPassword';
-                       } elseif ( !$botLoginData[2] ) {
+                       } elseif ( !$botLoginData[2] || $status->hasMessage( 'login-throttled' ) ) {
                                $authRes = 'Failed';
                                $message = $status->getMessage();
                                LoggerFactory::getInstance( 'authentication' )->info(
index aea441b..edc1a3e 100644 (file)
@@ -125,7 +125,6 @@ class ApiMain extends ApiBase {
                'none' => 'ApiFormatNone',
        ];
 
-       // @codingStandardsIgnoreStart String contenation on "msg" not allowed to break long line
        /**
         * List of user roles that are specifically relevant to the API.
         * [ 'right' => [ 'msg'    => 'Some message with a $1',
@@ -142,7 +141,6 @@ class ApiMain extends ApiBase {
                        'params' => [ ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 ]
                ]
        ];
-       // @codingStandardsIgnoreEnd
 
        /**
         * @var ApiFormatBase
index 7cbd353..15b94fb 100644 (file)
@@ -329,6 +329,8 @@ class ApiParse extends ApiBase {
                        $context->setOutput( $outputPage );
 
                        if ( $skin ) {
+                               // Based on OutputPage::headElement()
+                               $skin->setupSkinUserCss( $outputPage );
                                // Based on OutputPage::output()
                                foreach ( $skin->getDefaultModules() as $group ) {
                                        $outputPage->addModules( $group );
index 35f93e0..4b8ce7f 100644 (file)
@@ -93,6 +93,7 @@ class ApiPurge extends ApiBase {
                                                $updates = $content->getSecondaryDataUpdates(
                                                        $title, null, $forceRecursiveLinkUpdate, $p_result );
                                                foreach ( $updates as $update ) {
+                                                       $update->setCause( 'api-purge', $this->getUser()->getName() );
                                                        DeferredUpdates::addUpdate( $update, DeferredUpdates::PRESEND );
                                                }
 
index 44a46b8..31bcc7a 100644 (file)
@@ -459,6 +459,7 @@ class ApiQuery extends ApiBase {
                        // Raw formatter will handle this
                        $result->addValue( null, 'text', $sink, ApiResult::NO_SIZE_CHECK );
                        $result->addValue( null, 'mime', 'text/xml', ApiResult::NO_SIZE_CHECK );
+                       $result->addValue( null, 'filename', 'export.xml', ApiResult::NO_SIZE_CHECK );
                } else {
                        $result->addValue( 'query', 'export', $sink, ApiResult::NO_SIZE_CHECK );
                        $result->addValue( 'query', ApiResult::META_BC_SUBELEMENTS, [ 'export' ] );
index b22bb1f..765b5c7 100644 (file)
@@ -103,13 +103,16 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
-               $this->addTables( 'archive' );
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
-                       $this->addFields( Revision::selectArchiveFields() );
+                       $arQuery = Revision::getArchiveQueryInfo();
+                       $this->addTables( $arQuery['tables'] );
+                       $this->addJoinConds( $arQuery['joins'] );
+                       $this->addFields( $arQuery['fields'] );
                        $this->addFields( [ 'ar_title', 'ar_namespace' ] );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addTables( 'archive' );
                        $this->addFields( [ 'ar_title', 'ar_namespace' ] );
                        if ( $optimizeGenerateTitles ) {
                                $this->addOption( 'DISTINCT' );
index 250bee6..6f497b1 100644 (file)
@@ -90,10 +90,12 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                $userId = !is_null( $params['user'] ) ? User::idFromName( $params['user'] ) : null;
 
                // Table and return fields
-               $this->addTables( 'image' );
-
                $prop = array_flip( $params['prop'] );
-               $this->addFields( LocalFile::selectFields() );
+
+               $fileQuery = LocalFile::getQueryInfo();
+               $this->addTables( $fileQuery['tables'] );
+               $this->addFields( $fileQuery['fields'] );
+               $this->addJoinConds( $fileQuery['joins'] );
 
                $ascendingOrder = true;
                if ( $params['dir'] == 'descending' || $params['dir'] == 'older' ) {
index 8f7d6eb..c8db6a1 100644 (file)
@@ -63,20 +63,20 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
-               $this->addTables( 'revision' );
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
-                       $this->addTables( 'page' );
-                       $this->addJoinConds(
-                               [ 'page' => [ 'INNER JOIN', [ 'rev_page = page_id' ] ] ]
+                       $revQuery = Revision::getQueryInfo(
+                               $this->fetchContent ? [ 'page', 'text' ] : [ 'page' ]
                        );
-                       $this->addFields( Revision::selectFields() );
-                       $this->addFields( Revision::selectPageFields() );
+                       $this->addTables( $revQuery['tables'] );
+                       $this->addFields( $revQuery['fields'] );
+                       $this->addJoinConds( $revQuery['joins'] );
 
                        // Review this depeneding on the outcome of T113901
                        $this->addOption( 'STRAIGHT_JOIN' );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addTables( 'revision' );
                        $this->addFields( [ 'rev_timestamp', 'rev_id' ] );
                        if ( $params['generatetitles'] ) {
                                $this->addFields( [ 'rev_page' ] );
@@ -105,15 +105,6 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
                        $this->addFields( 'ts_tags' );
                }
 
-               if ( $this->fetchContent ) {
-                       $this->addTables( 'text' );
-                       $this->addJoinConds(
-                               [ 'text' => [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ] ]
-                       );
-                       $this->addFields( 'old_id' );
-                       $this->addFields( Revision::selectTextFields() );
-               }
-
                if ( $params['user'] !== null ) {
                        $id = User::idFromName( $params['user'] );
                        if ( $id ) {
index c4428d5..f728dc5 100644 (file)
@@ -69,7 +69,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
                $this->addTables( 'categorylinks' );
                $this->addWhereFld( 'cl_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
-               if ( !is_null( $params['categories'] ) ) {
+               if ( $params['categories'] ) {
                        $cats = [];
                        foreach ( $params['categories'] as $cat ) {
                                $title = Title::newFromText( $cat );
@@ -79,6 +79,10 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                        $cats[] = $title->getDBkey();
                                }
                        }
+                       if ( !$cats ) {
+                               // No titles so no results
+                               return;
+                       }
                        $this->addWhereFld( 'cl_to', $cats );
                }
 
index 8e4752e..3339fec 100644 (file)
@@ -60,13 +60,16 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
 
                $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
 
-               $this->addTables( 'archive' );
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
-                       $this->addFields( Revision::selectArchiveFields() );
+                       $arQuery = Revision::getArchiveQueryInfo();
+                       $this->addTables( $arQuery['tables'] );
+                       $this->addFields( $arQuery['fields'] );
+                       $this->addJoinConds( $arQuery['joins'] );
                        $this->addFields( [ 'ar_title', 'ar_namespace' ] );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addTables( 'archive' );
                        $this->addFields( [ 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ] );
                }
 
index 212b613..838fc2b 100644 (file)
@@ -60,25 +60,10 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $fld_bitdepth = isset( $prop['bitdepth'] );
                $fld_archivename = isset( $prop['archivename'] );
 
-               $this->addTables( 'filearchive' );
-
-               $this->addFields( ArchivedFile::selectFields() );
-               $this->addFields( [ 'fa_id', 'fa_name', 'fa_timestamp', 'fa_deleted' ] );
-               $this->addFieldsIf( 'fa_sha1', $fld_sha1 );
-               $this->addFieldsIf( [ 'fa_user', 'fa_user_text' ], $fld_user );
-               $this->addFieldsIf( [ 'fa_height', 'fa_width', 'fa_size' ], $fld_dimensions || $fld_size );
-               $this->addFieldsIf( [ 'fa_major_mime', 'fa_minor_mime' ], $fld_mime );
-               $this->addFieldsIf( 'fa_media_type', $fld_mediatype );
-               $this->addFieldsIf( 'fa_metadata', $fld_metadata );
-               $this->addFieldsIf( 'fa_bits', $fld_bitdepth );
-               $this->addFieldsIf( 'fa_archive_name', $fld_archivename );
-
-               if ( $fld_description ) {
-                       $commentQuery = $commentStore->getJoin();
-                       $this->addTables( $commentQuery['tables'] );
-                       $this->addFields( $commentQuery['fields'] );
-                       $this->addJoinConds( $commentQuery['joins'] );
-               }
+               $fileQuery = ArchivedFile::getQueryInfo();
+               $this->addTables( $fileQuery['tables'] );
+               $this->addFields( $fileQuery['fields'] );
+               $this->addJoinConds( $fileQuery['joins'] );
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
index 0086c58..01a54de 100644 (file)
@@ -85,7 +85,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
-               if ( !is_null( $params['images'] ) ) {
+               if ( $params['images'] ) {
                        $images = [];
                        foreach ( $params['images'] as $img ) {
                                $title = Title::newFromText( $img );
@@ -95,6 +95,10 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                                        $images[] = $title->getDBkey();
                                }
                        }
+                       if ( !$images ) {
+                               // No titles so no results
+                               return;
+                       }
                        $this->addWhereFld( 'il_to', $images );
                }
 
index 4b34091..508bdf3 100644 (file)
@@ -87,22 +87,34 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
 
                $this->addTables( $this->table );
                $this->addWhereFld( $this->prefix . '_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
-               $this->addWhereFld( $this->prefix . '_namespace', $params['namespace'] );
 
-               if ( !is_null( $params[$this->titlesParam] ) ) {
+               $multiNS = true;
+               $multiTitle = true;
+               if ( $params[$this->titlesParam] ) {
+                       // Filter the titles in PHP so our ORDER BY bug avoidance below works right.
+                       $filterNS = $params['namespace'] ? array_flip( $params['namespace'] ) : false;
+
                        $lb = new LinkBatch;
                        foreach ( $params[$this->titlesParam] as $t ) {
                                $title = Title::newFromText( $t );
                                if ( !$title ) {
                                        $this->addWarning( [ 'apiwarn-invalidtitle', wfEscapeWikiText( $t ) ] );
-                               } else {
+                               } elseif ( !$filterNS || isset( $filterNS[$title->getNamespace()] ) ) {
                                        $lb->addObj( $title );
                                }
                        }
                        $cond = $lb->constructSet( $this->prefix, $this->getDB() );
                        if ( $cond ) {
                                $this->addWhere( $cond );
+                               $multiNS = count( $lb->data ) !== 1;
+                               $multiTitle = count( call_user_func_array( 'array_merge', $lb->data ) ) !== 1;
+                       } else {
+                               // No titles so no results
+                               return;
                        }
+               } elseif ( $params['namespace'] ) {
+                       $this->addWhereFld( $this->prefix . '_namespace', $params['namespace'] );
+                       $multiNS = count( $params['namespace'] ) !== 1;
                }
 
                if ( !is_null( $params['continue'] ) ) {
@@ -131,12 +143,15 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                if ( count( $this->getPageSet()->getGoodTitles() ) != 1 ) {
                        $order[] = $this->prefix . '_from' . $sort;
                }
-               if ( count( $params['namespace'] ) != 1 ) {
+               if ( $multiNS ) {
                        $order[] = $this->prefix . '_namespace' . $sort;
                }
-
-               $order[] = $this->prefix . '_title' . $sort;
-               $this->addOption( 'ORDER BY', $order );
+               if ( $multiTitle ) {
+                       $order[] = $this->prefix . '_title' . $sort;
+               }
+               if ( $order ) {
+                       $this->addOption( 'ORDER BY', $order );
+               }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
                $res = $this->select( __METHOD__ );
index 2dfa42a..a04b7c5 100644 (file)
@@ -129,20 +129,31 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                }
 
                $db = $this->getDB();
-               $this->addTables( [ 'revision', 'page' ] );
-               $this->addJoinConds(
-                       [ 'page' => [ 'INNER JOIN', [ 'page_id = rev_page' ] ] ]
-               );
 
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
                        $this->token = $params['token'];
-                       $this->addFields( Revision::selectFields() );
+                       $opts = [];
                        if ( $this->token !== null || $pageCount > 0 ) {
-                               $this->addFields( Revision::selectPageFields() );
+                               $opts[] = 'page';
                        }
+                       if ( $this->fetchContent ) {
+                               $opts[] = 'text';
+                       }
+                       if ( $this->fld_user ) {
+                               $opts[] = 'user';
+                       }
+                       $revQuery = Revision::getQueryInfo( $opts );
+                       $this->addTables( $revQuery['tables'] );
+                       $this->addFields( $revQuery['fields'] );
+                       $this->addJoinConds( $revQuery['joins'] );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       // Always join 'page' so orphaned revisions are filtered out
+                       $this->addTables( [ 'revision', 'page' ] );
+                       $this->addJoinConds(
+                               [ 'page' => [ 'INNER JOIN', [ 'page_id = rev_page' ] ] ]
+                       );
                        $this->addFields( [ 'rev_id', 'rev_timestamp', 'rev_page' ] );
                }
 
@@ -162,7 +173,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        $this->addWhereFld( 'ct_tag', $params['tag'] );
                }
 
-               if ( $this->fetchContent ) {
+               if ( $resultPageSet === null && $this->fetchContent ) {
                        // For each page we will request, the user must have read rights for that page
                        $user = $this->getUser();
                        $status = Status::newGood();
@@ -178,20 +189,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        if ( !$status->isGood() ) {
                                $this->dieStatus( $status );
                        }
-
-                       $this->addTables( 'text' );
-                       $this->addJoinConds(
-                               [ 'text' => [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ] ]
-                       );
-                       $this->addFields( 'old_id' );
-                       $this->addFields( Revision::selectTextFields() );
-               }
-
-               // add user name, if needed
-               if ( $this->fld_user ) {
-                       $this->addTables( 'user' );
-                       $this->addJoinConds( [ 'user' => Revision::userJoinCond() ] );
-                       $this->addFields( Revision::selectUserFields() );
                }
 
                if ( $enumRevMode ) {
index fbf1f9e..8fc99bb 100644 (file)
@@ -144,8 +144,10 @@ class ApiQueryUsers extends ApiQueryBase {
                $result = $this->getResult();
 
                if ( count( $parameters ) ) {
-                       $this->addTables( 'user' );
-                       $this->addFields( User::selectFields() );
+                       $userQuery = User::getQueryInfo();
+                       $this->addTables( $userQuery['tables'] );
+                       $this->addFields( $userQuery['fields'] );
+                       $this->addJoinConds( $userQuery['joins'] );
                        if ( $useNames ) {
                                $this->addWhereFld( 'user_name', $goodNames );
                        } else {
index 8a9de06..4bd6a3f 100644 (file)
@@ -209,8 +209,10 @@ class ApiStashEdit extends ApiBase {
                        Hooks::run( 'ParserOutputStashForEdit',
                                [ $page, $content, $editInfo->output, $summary, $user ] );
 
+                       $titleStr = (string)$title;
                        if ( $alreadyCached ) {
-                               $logger->debug( "Already cached parser output for key '$key' ('$title')." );
+                               $logger->debug( "Already cached parser output for key '{cachekey}' ('{title}').",
+                                       [ 'cachekey' => $key, 'title' => $titleStr ] );
                                return self::ERROR_NONE;
                        }
 
@@ -224,14 +226,17 @@ class ApiStashEdit extends ApiBase {
                        if ( $stashInfo ) {
                                $ok = $cache->set( $key, $stashInfo, $ttl );
                                if ( $ok ) {
-                                       $logger->debug( "Cached parser output for key '$key' ('$title')." );
+                                       $logger->debug( "Cached parser output for key '{cachekey}' ('{title}').",
+                                               [ 'cachekey' => $key, 'title' => $titleStr ] );
                                        return self::ERROR_NONE;
                                } else {
-                                       $logger->error( "Failed to cache parser output for key '$key' ('$title')." );
+                                       $logger->error( "Failed to cache parser output for key '{cachekey}' ('{title}').",
+                                               [ 'cachekey' => $key, 'title' => $titleStr ] );
                                        return self::ERROR_CACHE;
                                }
                        } else {
-                               $logger->info( "Uncacheable parser output for key '$key' ('$title') [$code]." );
+                               $logger->info( "Uncacheable parser output for key '{cachekey}' ('{title}') [{code}].",
+                                       [ 'cachekey' => $key, 'title' => $titleStr, 'code' => $code ] );
                                return self::ERROR_UNCACHEABLE;
                        }
                }
index fcb4af4..ea42e24 100644 (file)
        "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2",
        "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.",
        "api-help-open-in-apisandbox": "<small>[otevřít v pískovišti]</small>",
+       "apierror-mustbeloggedin": "Abyste mohli $1, musíte být přihlášeni.",
        "apierror-nosuchsection-what": "$2 neobsahuje sekci $1.",
        "apierror-sectionsnotsupported-what": "$1 nepodporuje sekce.",
        "apierror-timeout": "Server neodpověděl v očekávaném čase.",
index 3bf9ccb..06cd64f 100644 (file)
@@ -35,7 +35,7 @@
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> Todas las funciones mostradas en esta página deberían estar funcionando, pero la API aún está en desarrollo activo, y puede cambiar en cualquier momento. Suscribase a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] para aviso de actualizaciones.\n\n<strong>Erroneous requests:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para más información ver [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Qué acción se realizará.",
        "apihelp-main-param-format": "El formato de la salida.",
-       "apihelp-main-param-maxlag": "El retraso máximo puede utilizarse cuando MediaWiki se instala en un clúster replicado de base de datos. Para guardar las acciones que causan más retardo de replicación de sitio, este parámetro puede hacer que el cliente espere hasta que el retardo de replicación sea menor que el valor especificado. En caso de retraso excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retraso</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
+       "apihelp-main-param-maxlag": "El retardo máximo puede utilizarse cuando MediaWiki se instala en una agrupación replicada de bases de datos. Para guardar las acciones que causan más retardo de replicación de sitio, este parámetro puede hacer que el cliente espere hasta que el retardo de replicación sea menor que el valor especificado. En caso de un retardo excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retardo</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
        "apihelp-main-param-smaxage": "Establece la cabecera HTTP <code>s-maxage</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
        "apihelp-main-param-maxage": "Establece la cabecera HTTP <code>max-age</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
        "apihelp-main-param-assert": "Comprobar que el usuario haya iniciado sesión si el valor es <kbd>user</kbd> o si tiene el permiso de bot si es <kbd>bot</kbd>.",
index 8e978b2..aa21cd7 100644 (file)
                        "Amire80",
                        "Macofe",
                        "Hamilton Abreu",
-                       "Umherirrender"
+                       "Umherirrender",
+                       "Fitoschido"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Erros e avisos]].\n\n<strong>Test:</strong> Para facilitar as probas das peticións da API, consulte [[Special:ApiSandbox]].",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionando, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Erros e avisos]].\n\n<strong>Test:</strong> Para facilitar as probas das peticións da API, consulte [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Que acción se realizará.",
        "apihelp-main-param-format": "O formato de saída.",
        "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
index e637be3..4e102cf 100644 (file)
        "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
        "apihelp-parse-param-title": "文字列が属するページのページ名。これを省略する場合、必ず <var>$1contentmodel</var> を指定しなければなりません。また、その場合 [[API]] がページ名として使用されます。",
        "apihelp-parse-param-text": "構文解析する文字列。コンテンツ・モデルを制御するためには<var>$1title</var> または <var>$1contentmodel</var> を使用してください。",
-       "apihelp-parse-param-summary": "æ§\8bæ\96\87解æ\9e\90ã\81®ã\81\9fã\82\81ã\81®要約",
+       "apihelp-parse-param-summary": "æ§\8bæ\96\87解æ\9e\90ã\81\99ã\82\8b要約",
        "apihelp-parse-param-page": "このページの内容を構文解析します。<var>$1text</var> および <var>$1title</var> とは同時に使用できません。",
        "apihelp-parse-param-pageid": "このページの内容を構文解析する。<var>$1page</var> をオーバーライドします。",
        "apihelp-parse-param-redirects": "もし <var>$1page</var> や <var>$1pageid</var> に転送ページが指定された場合、それを解決する。",
index df5a1ec..a2dc344 100644 (file)
        "apihelp-import-param-xml": "업로드한 XML 파일.",
        "apihelp-linkaccount-summary": "서드파티 제공자의 계정을 현재 사용자와 연결합니다.",
        "apihelp-login-summary": "로그인한 다음 인증 쿠키를 가져옵니다.",
+       "apihelp-login-extended-description": "이 동작은 [[Special:BotPasswords|특수:BotPasswords]]와 함께 사용해야만 합니다. 주 계정 로그인을 위해 사용하는 것은 권장되지 않으며 경고 없이 실패할 수 있습니다. 주 계정에 안전하게 로그인하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 사용하십시오.",
        "apihelp-login-param-name": "사용자 이름.",
        "apihelp-login-param-password": "비밀번호.",
        "apihelp-login-param-domain": "도메인 (선택).",
        "apihelp-opensearch-param-limit": "반환할 결과의 최대 수",
        "apihelp-opensearch-param-namespace": "검색할 이름공간.",
        "apihelp-opensearch-param-suggest": "<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>이 거짓인 경우 아무 것도 하지 않습니다.",
+       "apihelp-opensearch-param-redirects": "넘겨주기 관리 방법:\n;return:넘겨주기 자체를 반환합니다.\n;resolve:대상 문서를 반환합니다. $1제한 미만의 결과를 반환할 수 있습니다.\n역사적인 이유로 기본값은 $1format=json의 경우 \"return\"이며, 그 밖의 포맷의 경우 \"resolve\"입니다.",
        "apihelp-opensearch-param-format": "출력 포맷.",
+       "apihelp-opensearch-param-warningsaserror": "<kbd>format=json</kbd>을 사용 시 경고가 발생할 경우, 이를 무시하지 않고 API 오류를 반환합니다.",
        "apihelp-opensearch-example-te": "<kbd>Te</kbd>로 시작하는 문서를 찾기.",
        "apihelp-options-summary": "현재 사용자의 환경 설정을 변경합니다.",
-       "apihelp-options-param-reset": "사이트 기본으로 설정 초기화",
-       "apihelp-options-example-reset": "모든 설정 초기화",
+       "apihelp-options-extended-description": "핵심 확장 기능 기능이나 설치된 확장 기능 중 하나에 등록된 옵션 또는 <code>userjs-</code>(사용자 스크립트에 의해 사용됨)로 시작하는 키를 가진 옵션만 설정할 수 있습니다.",
+       "apihelp-options-param-reset": "사이트 기본값으로 환경 설정을 초기화합니다.",
+       "apihelp-options-param-resetkinds": "<var>$1reset</var> 옵션을 설정할 때 초기화할 옵션의 유형 목록입니다.",
+       "apihelp-options-param-optionname": "<var>$1optionvalue</var>에 의해 지정된 값으로 설정할 옵션의 이름입니다.",
+       "apihelp-options-param-optionvalue": "<var>$1optionname</var>에 의해 지정된 옵션의 값입니다.",
+       "apihelp-options-example-reset": "모든 환경 설정을 초기화합니다.",
+       "apihelp-options-example-change": "<kbd>skin</kbd>과 <kbd>hideminor</kbd> 환경 설정을 변경합니다.",
+       "apihelp-options-example-complex": "모든 환경 설정을 초기화하고 <kbd>skin</kbd>과 <kbd>nickname</kbd>을 설정합니다.",
        "apihelp-paraminfo-summary": "API 모듈의 정보를 가져옵니다.",
        "apihelp-paraminfo-param-helpformat": "도움말 문자열 포맷.",
        "apihelp-parse-summary": "내용의 구문을 분석하고 파서 출력을 반환합니다.",
        "api-help-param-multi-separate": "<kbd>|</kbd> 또는 [[Special:ApiHelp/main#main/datatypes|대안]]으로 값을 구분합니다.",
        "api-help-param-multi-max": "값들의 최대 수는 {{PLURAL:$1|$1}}입니다. (봇의 경우 {{PLURAL:$2|$2}})",
        "api-help-param-multi-max-simple": "값의 최대 수는 {{PLURAL:$1|$1}}입니다.",
+       "api-help-param-multi-all": "모든 값을 지정하려면, <kbd>$1</kbd>를 사용하십시오.",
        "api-help-param-default": "기본값: $1",
        "api-help-param-default-empty": "기본값: <span class=\"apihelp-empty\">(비어 있음)</span>",
        "api-help-param-token": "\"$1\" 토큰은 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]에서 가져옵니다",
index 1c8877c..2e89ea3 100644 (file)
        "apihelp-options-example-complex": "Tilbakestill alle innstillinger, og sett så <kbd>skin</kbd> og <kbd>nickname</kbd>.",
        "apihelp-paraminfo-summary": "Hent informasjon om API-moduler.",
        "apihelp-paraminfo-param-helpformat": "Format for hjelpestrenger.",
+       "apihelp-parse-param-prop": "Hvilke informasjonsdeler som skal hentes:",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Gir HTML-versjonen av kategoriene.",
+       "apihelp-parse-paramvalue-prop-headitems": "Gir elementer som skal puttes i <code>&lt;head&gt;</code>-taggen til siden.",
+       "apihelp-patrol-summary": "Patruljer en side eller revisjon.",
        "apihelp-query+allfileusages-paramvalue-prop-title": "Legger til filens tittel.",
        "apihelp-query+allfileusages-param-limit": "Hvor mange elementer som skal returneres totalt.",
        "apihelp-query+allfileusages-param-dir": "Retningen det skal listes opp i.",
index 1bb7095..e60ce87 100644 (file)
@@ -26,7 +26,8 @@
                        "Ivan-r",
                        "Redredsonia",
                        "Alexey zakharenkov",
-                       "Facenapalm"
+                       "Facenapalm",
+                       "Jack who built the house"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
@@ -42,9 +43,9 @@
        "apihelp-main-param-curtimestamp": "Включить в результат временную метку.",
        "apihelp-main-param-responselanginfo": "Включить языки, использованные для <var>uselang</var> и <var>errorlang</var>, в результат.",
        "apihelp-main-param-origin": "При обращении к API с использованием кросс-доменного AJAX-запроса (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI-запроса (не тела POST).\n\nДля аутентифицированных запросов он должен точно соответствовать одному из источников в заголовке <code>Origin</code>, так что он должен быть задан наподобие <kbd>https://ru.wikipedia.org</kbd> или <kbd>https://meta.wikimedia.org</kbd>. Если параметр не соответствует заголовку <code>Origin</code>, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку <code>Origin</code>, и источник находится в белом списке, будут установлены заголовки <code>Access-Control-Allow-Origin</code> и <code>Access-Control-Allow-Credentials</code>.\n\nДля неаутентифицированных запросов укажите значение <kbd>*</kbd>. В результате заголовок <code>Access-Control-Allow-Origin</code> будет установлен, но <code>Access-Control-Allow-Credentials</code> примет значение <code>false</code> и все пользовательские данные будут ограничены.",
-       "apihelp-main-param-uselang": "Язык, используемый для перевода сообщений. Запрос «<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>» с «<kbd>siprop=languages</kbd>» возвращает список кодов языков; укажите «<kbd>user</kbd>», чтобы использовать текущие языковые настройки участника, или «<kbd>content</kbd>» для использования основного языка этой вики.",
+       "apihelp-main-param-uselang": "Язык, используемый для перевода сообщений. Запрос <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> с <kbd>siprop=languages</kbd> возвращает список кодов языков; укажите <kbd>user</kbd>, чтобы использовать текущие языковые настройки участника, или <kbd>content</kbd> для использования основного языка этой вики.",
        "apihelp-main-param-errorformat": "Формат, используемый для вывода текста предупреждений и ошибок.\n; plaintext: Вики-текст с удалёнными HTML-тегами и замещёнными мнемониками.\n; wikitext: Нераспарсенный вики-текст.\n; html: HTML.\n; raw: Ключ сообщения и параметры.\n; none: Без текстового вывода, только коды ошибок.\n; bc: Формат, используемый до MediaWiki 1.29. <var>errorlang</var> и <var>errorsuselocal</var> игнорируются.",
-       "apihelp-main-param-errorlang": "Язык, используемый для вывода предупреждений и сообщений об ошибках. Запрос «<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>» с «<kbd>siprop=languages</kbd>» возвращает список кодов языков; укажите «<kbd>content</kbd>» для использования основного языка этой вики, или «<kbd>uselang</kbd>» для использования того же значения, что и в параметре «<var>uselang</var>».",
+       "apihelp-main-param-errorlang": "Язык, используемый для вывода предупреждений и сообщений об ошибках. Запрос <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> с <kbd>siprop=languages</kbd> возвращает список кодов языков; укажите <kbd>content</kbd> для использования основного языка этой вики, или <kbd>uselang</kbd> для использования того же значения, что и в параметре <var>uselang</var>.",
        "apihelp-main-param-errorsuselocal": "Если задан, тексты ошибок будут использовать локально модифицированные сообщения из пространства имён {{ns:MediaWiki}}.",
        "apihelp-block-summary": "Блокировка участника.",
        "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать. Нельзя использовать вместе с <var>$1userid</var>",
index 2fcd915..ca0b0a8 100644 (file)
@@ -12,7 +12,8 @@
                        "Andriykopanytsia",
                        "Максим Підліснюк",
                        "AS",
-                       "Umherirrender"
+                       "Umherirrender",
+                       "Choomaq"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документація]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].",
        "apihelp-tokens-summary": "Отримати жетони для дій пов'язаних зі зміною даних.",
        "apihelp-tokens-extended-description": "Цей модуль застарів на користь [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Які типи жетонів запитати.",
-       "apihelp-tokens-example-edit": "Отримати жетон редагування (за замовчуванням).",
-       "apihelp-tokens-example-emailmove": "Отримати жетон електронної пошти та жетон перейменування.",
+       "apihelp-tokens-example-edit": "Отримати токен редагування (за замовчуванням).",
+       "apihelp-tokens-example-emailmove": "Отримати токен електронної пошти та токен перейменування.",
        "apihelp-unblock-summary": "Розблокувати користувача.",
        "apihelp-unblock-param-id": "Ідентифікатор блоку чи розблокування (отриманий через <kbd>list=blocks</kbd>). Не може бути використано разом із <var>$1user</var> або <var>$1userid</var>.",
        "apihelp-unblock-param-user": "Ім'я користувача, IP-адреса чи IP-діапазон до розблокування. Не може бути використано разом із <var>$1id</var> або <var>$1userid</var>.",
index 5daadb1..d09c651 100644 (file)
@@ -22,7 +22,8 @@
                        "損齋",
                        "Myy730",
                        "D41D8CD98F",
-                       "Umherirrender"
+                       "Umherirrender",
+                       "NeverBehave"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|文档]]\n* [[mw:Special:MyLanguage/API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:Special:MyLanguage/API:Errors_and_warnings|API:错误与警告]]。\n\n<strong>测试中:</strong>测试API请求的易用性,请参见[[Special:ApiSandbox]]。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
        "apihelp-move-param-tags": "要在移动日志,以及在目标页面的空修订版本中应用到实体的更改标签。",
        "apihelp-move-example-move": "移动<kbd>Badtitle</kbd>到<kbd>Goodtitle</kbd>,不保留重定向。",
-       "apihelp-opensearch-summary": "使用OpenSearch协议搜索wiki。",
+       "apihelp-opensearch-summary": "使用开放搜索协议搜索wiki。",
        "apihelp-opensearch-param-search": "搜索字符串。",
        "apihelp-opensearch-param-limit": "要返回的结果最大数。",
        "apihelp-opensearch-param-namespace": "搜索的名字空间。",
        "apiwarn-notfile": "“$1”不是文件。",
        "apiwarn-nothumb-noimagehandler": "不能创建缩略图,因为$1没有关联的图片处理器。",
        "apiwarn-parse-nocontentmodel": "<var>title</var>或<var>contentmodel</var>未提供,假设$1。",
-       "apiwarn-parse-revidwithouttext": "<var>revid</var>在没有<var>text</var>的情况下被使用,并且请求了已解析页面的属性。您是想用<var>oldid</var>而不是<var>revid</var>么?",
+       "apiwarn-parse-revidwithouttext": "<var>revid</var>在没有<var>text</var>的情况下被使用,并且请求了已解析的页面属性。您是想用<var>oldid</var>而不是<var>revid</var>么?",
        "apiwarn-parse-titlewithouttext": "<var>title</var>在没有<var>text</var>的情况下被使用,并且请求了已解析页面的属性。您是想用<var>page</var>而不是<var>title</var>么?",
        "apiwarn-redirectsandrevids": "重定向解决方案不能与<var>revids</var>参数一起使用。任何<var>revids</var>所指向的重定向都未被解决。",
        "apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。",
index ecdf37d..ea5f2dd 100644 (file)
@@ -13,7 +13,8 @@
                        "烈羽",
                        "Corainn",
                        "A2093064",
-                       "Wwycheuk"
+                       "Wwycheuk",
+                       "Wbxshiori"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|說明文件]]\n* [[mw:Special:MyLanguage/API:FAQ|常見問題]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 郵遞清單]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 報告錯誤及請求功能]\n</div>\n<strong>狀態資訊:</strong>本頁所展示的所有功能都應正常運作,但API仍在開發,會隨時變化。請訂閱[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 郵遞清單]以便獲得更新通知。\n\n<strong>錯誤的請求:</strong>當API收到錯誤的請求,會發出以「MediaWiki-API-Error」為鍵的HTTP標頭欄位,隨後標頭欄位的值,以及傳回的錯誤碼會設為相同值。詳細資訊請參閱[[mw:Special:MyLanguage/API:Errors_and_warnings|API: 錯誤與警告]]。\n\n<strong>測試:</strong>要簡化API請求的測試過程,請見[[Special:ApiSandbox]]。",
        "apihelp-protect-param-protections": "保護層級清單,格式為 <kbd>action=level</kbd> (例如 <kbd>edit=sysop</kbd>)。<kbd>all</kbd> 層級代表所有人都可以進行行動,亦即無限制。\n\n<strong>注意:</strong>未列入清單項目的限制皆會移除。",
        "apihelp-protect-param-expiry": "期限時間戳記,若只設定一個時間戳記,該時間戳記將會套用至所有的保護層級。 使用 <kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd> 或 <kbd>never</kbd> 來設定保護層級期限為永遠。",
        "apihelp-protect-param-reason": "(解除)保護的原因。",
+       "apihelp-protect-param-tags": "修改標籤以套用於保護日誌裡的項目。",
+       "apihelp-protect-param-cascade": "啟用連鎖保護(也就是保護包含於此頁面的頁面)。如果所有提供的保護等級不支援連鎖,就將其忽略。",
+       "apihelp-protect-param-watch": "如果被設定,就將被(解除)保護的頁面加至目前使用者的監視列表。",
+       "apihelp-protect-param-watchlist": "無條件地將該頁面加入至或移除自目前使用者的監視列表、使用偏好設定或不更改監視。",
+       "apihelp-protect-example-protect": "保護一個頁面。",
+       "apihelp-purge-summary": "為指定標題清除快取。",
+       "apihelp-purge-example-generator": "重新整理主要命名空間的前10個頁面。",
        "apihelp-query-summary": "擷取來自及有關MediaWiki的數據。",
        "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
        "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
        "apierror-permissiondenied": "您沒有權限$1。",
        "apierror-reauthenticate": "於本工作階段還未核對身分,請重新核對。",
        "apierror-timeout": "伺服器未有在預計的時間內回應。",
+       "api-feed-error-title": "錯誤($1)",
        "api-credits-header": "製作群",
        "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
 }
index f7a7ec1..7488fba 100644 (file)
@@ -77,9 +77,19 @@ class CheckBlocksSecondaryAuthenticationProvider extends AbstractSecondaryAuthen
        public function testUserForCreation( $user, $autocreate, array $options = [] ) {
                $block = $user->isBlockedFromCreateAccount();
                if ( $block ) {
+                       if ( $block->mReason ) {
+                               $reason = $block->mReason;
+                       } else {
+                               $msg = \Message::newFromKey( 'blockednoreason' );
+                               if ( !\RequestContext::getMain()->getUser()->isSafeToLoad() ) {
+                                       $msg->inContentLanguage();
+                               }
+                               $reason = $msg->text();
+                       }
+
                        $errorParams = [
                                $block->getTarget(),
-                               $block->mReason ?: \Message::newFromKey( 'blockednoreason' )->text(),
+                               $reason,
                                $block->getByName()
                        ];
 
index 7f93c12..86a6aae 100644 (file)
@@ -96,7 +96,10 @@ class LocalPasswordPrimaryAuthenticationProvider
                        __METHOD__
                );
                if ( !$row ) {
-                       return AuthenticationResponse::newAbstain();
+                       // Do not reveal whether its bad username or
+                       // bad password to prevent username enumeration
+                       // on private wikis. (T134100)
+                       return $this->failResponse( $req );
                }
 
                $oldRow = clone $row;
index 0622211..7bab97b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * If the group is active, any unchecked filters will
  * translate to hide parameters in the URL.  E.g. if 'Human (not bot)' is checked,
@@ -61,7 +63,27 @@ class ChangesListBooleanFilterGroup extends ChangesListFilterGroup {
        /**
         * @inheritDoc
         */
-       public function isPerGroupRequestParameter() {
-               return false;
+       public function modifyQuery( IDatabase $dbr, ChangesListSpecialPage $specialPage,
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds,
+               FormOptions $opts, $isStructuredFiltersEnabled
+       ) {
+               /** @var ChangesListBooleanFilter $filter */
+               foreach ( $this->getFilters() as $filter ) {
+                       if ( $filter->isActive( $opts, $isStructuredFiltersEnabled ) ) {
+                               $filter->modifyQuery( $dbr, $specialPage, $tables, $fields, $conds,
+                                       $query_options, $join_conds );
+                       }
+               }
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function addOptions( FormOptions $opts, $allowDefaults, $isStructuredFiltersEnabled ) {
+               /** @var ChangesListBooleanFilter $filter */
+               foreach ( $this->getFilters() as $filter ) {
+                       $defaultValue = $allowDefaults ? $filter->getDefault( $isStructuredFiltersEnabled ) : false;
+                       $opts->add( $filter->getName(), $defaultValue );
+               }
        }
 }
index e9140da..48c6e84 100644 (file)
@@ -27,6 +27,8 @@
 // What to call it.  FilterStructure?  That would also let me make
 // setUnidirectionalConflict protected.
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Represents a filter group (used on ChangesListSpecialPage and descendants)
  *
@@ -326,14 +328,6 @@ abstract class ChangesListFilterGroup {
                return isset( $this->filters[$name] ) ? $this->filters[$name] : null;
        }
 
-       /**
-        * Check whether the URL parameter is for the group, or for individual filters.
-        * Defaults can also be defined on the group if and only if this is true.
-        *
-        * @return bool True if and only if the URL parameter is per-group
-        */
-       abstract public function isPerGroupRequestParameter();
-
        /**
         * Gets the JS data in the format required by the front-end of the structured UI
         *
@@ -449,4 +443,34 @@ abstract class ChangesListFilterGroup {
                        }
                ) );
        }
+
+       /**
+        * Modifies the query to include the filter group.
+        *
+        * The modification is only done if the filter group is in effect.  This means that
+        * one or more valid and allowed filters were selected.
+        *
+        * @param IDatabase $dbr Database, for addQuotes, makeList, and similar
+        * @param ChangesListSpecialPage $specialPage Current special page
+        * @param array &$tables Array of tables; see IDatabase::select $table
+        * @param array &$fields Array of fields; see IDatabase::select $vars
+        * @param array &$conds Array of conditions; see IDatabase::select $conds
+        * @param array &$query_options Array of query options; see IDatabase::select $options
+        * @param array &$join_conds Array of join conditions; see IDatabase::select $join_conds
+        * @param FormOptions $opts Wrapper for the current request options and their defaults
+        * @param bool $isStructuredFiltersEnabled True if the Structured UI is currently enabled
+        */
+       abstract public function modifyQuery( IDatabase $dbr, ChangesListSpecialPage $specialPage,
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds,
+               FormOptions $opts, $isStructuredFiltersEnabled );
+
+       /**
+        * All the options represented by this filter group to $opts
+        *
+        * @param FormOptions $opts
+        * @param bool $allowDefaults
+        * @param bool $isStructuredFiltersEnabled
+        */
+       abstract public function addOptions( FormOptions $opts, $allowDefaults,
+               $isStructuredFiltersEnabled );
 }
index 59efd82..775fd76 100644 (file)
@@ -35,7 +35,6 @@ use Wikimedia\Rdbms\IDatabase;
  *
  * @since 1.29
  */
-
 class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        /**
         * Type marker, used by JavaScript
@@ -128,13 +127,6 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
                }
        }
 
-       /**
-        * @inheritDoc
-        */
-       public function isPerGroupRequestParameter() {
-               return true;
-       }
-
        /**
         * Sets default of filter group.
         *
@@ -170,23 +162,17 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * Modifies the query to include the filter group.
-        *
-        * The modification is only done if the filter group is in effect.  This means that
-        * one or more valid and allowed filters were selected.
-        *
-        * @param IDatabase $dbr Database, for addQuotes, makeList, and similar
-        * @param ChangesListSpecialPage $specialPage Current special page
-        * @param array &$tables Array of tables; see IDatabase::select $table
-        * @param array &$fields Array of fields; see IDatabase::select $vars
-        * @param array &$conds Array of conditions; see IDatabase::select $conds
-        * @param array &$query_options Array of query options; see IDatabase::select $options
-        * @param array &$join_conds Array of join conditions; see IDatabase::select $join_conds
-        * @param string $value URL parameter value
+        * @inheritDoc
         */
        public function modifyQuery( IDatabase $dbr, ChangesListSpecialPage $specialPage,
-               &$tables, &$fields, &$conds, &$query_options, &$join_conds, $value
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds,
+               FormOptions $opts, $isStructuredFiltersEnabled
        ) {
+               if ( !$this->isActive( $isStructuredFiltersEnabled ) ) {
+                       return;
+               }
+
+               $value = $opts[ $this->getName() ];
                $allowedFilterNames = [];
                foreach ( $this->filters as $filter ) {
                        $allowedFilterNames[] = $filter->getName();
@@ -242,4 +228,22 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
 
                return $output;
        }
+
+       /**
+        * @inheritDoc
+        */
+       public function addOptions( FormOptions $opts, $allowDefaults, $isStructuredFiltersEnabled ) {
+               $opts->add( $this->getName(), $allowDefaults ? $this->getDefault() : '' );
+       }
+
+       /**
+        * Check if this filter group is currently active
+        *
+        * @param bool $isStructuredUI Is structured filters UI current enabled
+        * @return bool
+        */
+       private function isActive( $isStructuredUI ) {
+               // STRING_OPTIONS filter groups are exclusively active on Structured UI
+               return $isStructuredUI;
+       }
 }
index fd789a6..a471865 100644 (file)
@@ -192,7 +192,10 @@ class RecentChange {
                $dbType = DB_REPLICA
        ) {
                $db = wfGetDB( $dbType );
-               $row = $db->selectRow( 'recentchanges', self::selectFields(), $conds, $fname );
+               $rcQuery = self::getQueryInfo();
+               $row = $db->selectRow(
+                       $rcQuery['tables'], $rcQuery['fields'], $conds, $fname, [], $rcQuery['joins']
+               );
                if ( $row !== false ) {
                        return self::newFromRow( $row );
                } else {
@@ -203,11 +206,11 @@ class RecentChange {
        /**
         * Return the list of recentchanges fields that should be selected to create
         * a new recentchanges object.
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        public static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'rc_id',
                        'rc_timestamp',
@@ -235,6 +238,48 @@ class RecentChange {
                ] + CommentStore::newKey( 'rc_comment' )->getFields();
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new recentchanges object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo() {
+               $commentQuery = CommentStore::newKey( 'rc_comment' )->getJoin();
+               return [
+                       'tables' => [ 'recentchanges' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'rc_id',
+                               'rc_timestamp',
+                               'rc_user',
+                               'rc_user_text',
+                               'rc_namespace',
+                               'rc_title',
+                               'rc_minor',
+                               'rc_bot',
+                               'rc_new',
+                               'rc_cur_id',
+                               'rc_this_oldid',
+                               'rc_last_oldid',
+                               'rc_type',
+                               'rc_source',
+                               'rc_patrolled',
+                               'rc_ip',
+                               'rc_old_len',
+                               'rc_new_len',
+                               'rc_deleted',
+                               'rc_logid',
+                               'rc_log_type',
+                               'rc_log_action',
+                               'rc_params',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+       }
+
        # Accessors
 
        /**
@@ -951,7 +996,7 @@ class RecentChange {
                }
 
                $comment = CommentStore::newKey( 'rc_comment' )
-                       // Legacy because $row probably came from self::selectFields()
+                       // Legacy because $row may have come from self::selectFields()
                        ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row, true )->text;
                $this->mAttribs['rc_comment'] = &$comment;
                $this->mAttribs['rc_comment_text'] = &$comment;
index 91193b0..61259b4 100644 (file)
@@ -36,18 +36,16 @@ class ChangeTagsRevisionList extends ChangeTagsList {
         */
        public function doQuery( $db ) {
                $ids = array_map( 'intval', $this->ids );
+               $revQuery = Revision::getQueryInfo( [ 'user' ] );
                $queryInfo = [
-                       'tables' => [ 'revision', 'user' ],
-                       'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       'tables' => $revQuery['tables'],
+                       'fields' => $revQuery['fields'],
                        'conds' => [
                                'rev_page' => $this->title->getArticleID(),
                                'rev_id' => $ids,
                        ],
                        'options' => [ 'ORDER BY' => 'rev_id DESC' ],
-                       'join_conds' => [
-                               'page' => Revision::pageJoinCond(),
-                               'user' => Revision::userJoinCond(),
-                       ],
+                       'join_conds' => $revQuery['joins'],
                ];
                ChangeTags::modifyDisplayQuery(
                        $queryInfo['tables'],
index efda596..23f02de 100644 (file)
@@ -551,6 +551,8 @@ class IcuCollation extends Collation {
                $versionPrefix = substr( $icuVersion, 0, 3 );
                // Source: http://site.icu-project.org/download
                $map = [
+                       '59.' => '9.0',
+                       '58.' => '9.0',
                        '57.' => '8.0',
                        '56.' => '8.0',
                        '55.' => '7.0',
diff --git a/includes/composer/ComposerVendorHtaccessCreator.php b/includes/composer/ComposerVendorHtaccessCreator.php
new file mode 100644 (file)
index 0000000..1e5efdf
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (C) 2017 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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.
+ *
+ */
+
+/**
+ * Creates a .htaccess in the vendor/ directory
+ * to prevent web access.
+ *
+ * This class runs *outside* of the normal MediaWiki
+ * environment and cannot depend upon any MediaWiki
+ * code.
+ */
+class ComposerVendorHtaccessCreator {
+
+       /**
+        * Handle post-install-cmd and post-update-cmd hooks
+        */
+       public static function onEvent() {
+               $fname = dirname( dirname( __DIR__ ) ) . "/vendor/.htaccess";
+               if ( file_exists( $fname ) ) {
+                       // Already exists
+                       return;
+               }
+
+               file_put_contents( $fname, "Deny from all\n" );
+       }
+}
index 5f585bc..e5a9f90 100644 (file)
  */
 class TextContent extends AbstractContent {
 
+       /**
+        * @var string
+        */
+       protected $mText;
+
        /**
         * @param string $text
         * @param string $model_id
index 5196ac2..aa1918d 100644 (file)
@@ -142,16 +142,18 @@ abstract class MWLBFactory {
                        }
                }
 
+               $services = MediaWikiServices::getInstance();
+
                // Use APC/memcached style caching, but avoids loops with CACHE_DB (T141804)
-               $sCache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
+               $sCache = $services->getLocalServerObjectCache();
                if ( $sCache->getQoS( $sCache::ATTR_EMULATION ) > $sCache::QOS_EMULATION_SQL ) {
                        $lbConf['srvCache'] = $sCache;
                }
-               $cCache = ObjectCache::getLocalClusterInstance();
-               if ( $cCache->getQoS( $cCache::ATTR_EMULATION ) > $cCache::QOS_EMULATION_SQL ) {
-                       $lbConf['memStash'] = $cCache;
+               $mStash = $services->getMainObjectStash();
+               if ( $mStash->getQoS( $mStash::ATTR_EMULATION ) > $mStash::QOS_EMULATION_SQL ) {
+                       $lbConf['memStash'] = $mStash;
                }
-               $wCache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               $wCache = $services->getMainWANObjectCache();
                if ( $wCache->getQoS( $wCache::ATTR_EMULATION ) > $wCache::QOS_EMULATION_SQL ) {
                        $lbConf['wanCache'] = $wCache;
                }
index d2d8bd7..ed9a746 100644 (file)
 abstract class DataUpdate implements DeferrableUpdate {
        /** @var mixed Result from LBFactory::getEmptyTransactionTicket() */
        protected $ticket;
+       /** @var string Short update cause action description */
+       protected $causeAction = 'unknown';
+       /** @var string Short update cause user description */
+       protected $causeAgent = 'unknown';
 
        public function __construct() {
                // noop
@@ -41,6 +45,29 @@ abstract class DataUpdate implements DeferrableUpdate {
                $this->ticket = $ticket;
        }
 
+       /**
+        * @param string $action Action type
+        * @param string $user User name
+        */
+       public function setCause( $action, $user ) {
+               $this->causeAction = $action;
+               $this->causeAgent = $user;
+       }
+
+       /**
+        * @return string
+        */
+       public function getCauseAction() {
+               return $this->causeAction;
+       }
+
+       /**
+        * @return string
+        */
+       public function getCauseAgent() {
+               return $this->causeAgent;
+       }
+
        /**
         * Convenience method, calls doUpdate() on every DataUpdate in the array.
         *
index e8e250b..3c4833c 100644 (file)
@@ -250,6 +250,8 @@ class DeferredUpdates {
                                // Run only the job enqueue logic to complete the update later
                                $spec = $update->getAsJobSpecification();
                                JobQueueGroup::singleton( $spec['wiki'] )->push( $spec['job'] );
+                       } elseif ( $update instanceof TransactionRoundDefiningUpdate ) {
+                               $update->doUpdate();
                        } else {
                                // Run the bulk of the update now
                                $fnameTrxOwner = get_class( $update ) . '::doUpdate';
index db3790f..29846bf 100644 (file)
@@ -26,7 +26,7 @@
  *
  * @ingroup Cache
  */
-class HTMLCacheUpdate implements DeferrableUpdate {
+class HTMLCacheUpdate extends DataUpdate {
        /** @var Title */
        public $mTitle;
 
@@ -36,14 +36,24 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        /**
         * @param Title $titleTo
         * @param string $table
+        * @param string $causeAction Triggering action
+        * @param string $causeAgent Triggering user
         */
-       function __construct( Title $titleTo, $table ) {
+       function __construct(
+               Title $titleTo, $table, $causeAction = 'unknown', $causeAgent = 'unknown'
+       ) {
                $this->mTitle = $titleTo;
                $this->mTable = $table;
+               $this->causeAction = $causeAction;
+               $this->causeAgent = $causeAgent;
        }
 
        public function doUpdate() {
-               $job = HTMLCacheUpdateJob::newForBacklinks( $this->mTitle, $this->mTable );
+               $job = HTMLCacheUpdateJob::newForBacklinks(
+                       $this->mTitle,
+                       $this->mTable,
+                       [ 'causeAction' => $this->getCauseAction(), 'causeAgent' => $this->getCauseAgent() ]
+               );
 
                JobQueueGroup::singleton()->lazyPush( $job );
        }
index dfe89ba..8913642 100644 (file)
@@ -306,10 +306,13 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
         * using the job queue.
         */
        protected function queueRecursiveJobs() {
-               self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
+               $action = $this->getCauseAction();
+               $agent = $this->getCauseAgent();
+
+               self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks', $action, $agent );
                if ( $this->mTitle->getNamespace() == NS_FILE ) {
                        // Process imagelinks in case the title is or was a redirect
-                       self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
+                       self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks', $action, $agent );
                }
 
                $bc = $this->mTitle->getBacklinkCache();
@@ -320,7 +323,13 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                // Which ever runs first generally no-ops the other one.
                $jobs = [];
                foreach ( $bc->getCascadeProtectedLinks() as $title ) {
-                       $jobs[] = RefreshLinksJob::newPrioritized( $title, [] );
+                       $jobs[] = RefreshLinksJob::newPrioritized(
+                               $title,
+                               [
+                                       'causeAction' => $action,
+                                       'causeAgent' => $agent
+                               ]
+                       );
                }
                JobQueueGroup::singleton()->push( $jobs );
        }
@@ -330,8 +339,12 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
         *
         * @param Title $title Title to do job for
         * @param string $table Table to use (e.g. 'templatelinks')
+        * @param string $action Triggering action
+        * @param string $userName Triggering user name
         */
-       public static function queueRecursiveJobsForTable( Title $title, $table ) {
+       public static function queueRecursiveJobsForTable(
+               Title $title, $table, $action = 'unknown', $userName = 'unknown'
+       ) {
                if ( $title->getBacklinkCache()->hasLinks( $table ) ) {
                        $job = new RefreshLinksJob(
                                $title,
@@ -340,7 +353,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                                        'recursive' => true,
                                ] + Job::newRootJobParams( // "overall" refresh links job info
                                        "refreshlinks:{$table}:{$title->getPrefixedText()}"
-                               )
+                               ) + [ 'causeAction' => $action, 'causeAgent' => $userName ]
                        );
 
                        JobQueueGroup::singleton()->push( $job );
@@ -1042,7 +1055,9 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                                        $inv = [ $inv ];
                                }
                                foreach ( $inv as $table ) {
-                                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, $table ) );
+                                       DeferredUpdates::addUpdate(
+                                               new HTMLCacheUpdate( $this->mTitle, $table, 'page-props' )
+                                       );
                                }
                        }
                }
@@ -1156,6 +1171,8 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                                        'useRecursiveLinksUpdate' => $this->mRecursive,
                                        'triggeringUser' => $userInfo,
                                        'triggeringRevisionId' => $triggeringRevisionId,
+                                       'causeAction' => $this->getCauseAction(),
+                                       'causeAgent' => $this->getCauseAgent()
                                ],
                                [ 'removeDuplicates' => true ],
                                $this->getTitle()
index 70760ce..8eeef13 100644 (file)
@@ -6,7 +6,7 @@
  *
  * @since 1.27
  */
-interface MergeableUpdate {
+interface MergeableUpdate extends DeferrableUpdate {
        /**
         * Merge this update with $update
         *
diff --git a/includes/deferred/TransactionRoundDefiningUpdate.php b/includes/deferred/TransactionRoundDefiningUpdate.php
new file mode 100644 (file)
index 0000000..65baec5
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Deferrable update for closure/callback updates that need LBFactory and Database
+ * to be outside any active transaction round.
+ *
+ * @since 1.31
+ */
+class TransactionRoundDefiningUpdate implements DeferrableUpdate, DeferrableCallback {
+       /** @var callable|null */
+       private $callback;
+       /** @var string */
+       private $fname;
+
+       /**
+        * @param callable $callback
+        * @param string $fname Calling method
+        */
+       public function __construct( callable $callback, $fname = 'unknown' ) {
+               $this->callback = $callback;
+               $this->fname = $fname;
+       }
+
+       public function doUpdate() {
+               call_user_func( $this->callback );
+       }
+
+       public function getOrigin() {
+               return $this->fname;
+       }
+}
index a9d6ad6..813ee08 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup DifferenceEngine
  */
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
 
 /** @deprecated use class constant instead */
 define( 'MW_DIFF_VERSION', '1.11a' );
@@ -181,13 +182,15 @@ class DifferenceEngine extends ContextSource {
        public function deletedLink( $id ) {
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $dbr = wfGetDB( DB_REPLICA );
-                       $row = $dbr->selectRow( 'archive',
-                               array_merge(
-                                       Revision::selectArchiveFields(),
-                                       [ 'ar_namespace', 'ar_title' ]
-                               ),
+                       $arQuery = Revision::getArchiveQueryInfo();
+                       $row = $dbr->selectRow(
+                               $arQuery['tables'],
+                               array_merge( $arQuery['fields'], [ 'ar_namespace', 'ar_title' ] ),
                                [ 'ar_rev_id' => $id ],
-                               __METHOD__ );
+                               __METHOD__,
+                               [],
+                               $arQuery['joins']
+                       );
                        if ( $row ) {
                                $rev = Revision::newFromArchiveRow( $row );
                                $title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
@@ -604,14 +607,15 @@ class DifferenceEngine extends ContextSource {
                $out->addHTML( "<hr class='diff-hr' id='mw-oldid' />
                <h2 class='diff-currentversion-title'>{$revHeader}</h2>\n" );
                # Page content may be handled by a hooked call instead...
-               # @codingStandardsIgnoreStart Ignoring long lines.
                if ( Hooks::run( 'ArticleContentOnDiff', [ $this, $out ] ) ) {
                        $this->loadNewText();
                        $out->setRevisionId( $this->mNewid );
                        $out->setRevisionTimestamp( $this->mNewRev->getTimestamp() );
                        $out->setArticleFlag( true );
 
-                       if ( !Hooks::run( 'ArticleContentViewCustom', [ $this->mNewContent, $this->mNewPage, $out ] ) ) {
+                       if ( !Hooks::run( 'ArticleContentViewCustom',
+                               [ $this->mNewContent, $this->mNewPage, $out ] )
+                       ) {
                                // Handled by extension
                        } else {
                                // Normal page
@@ -630,13 +634,14 @@ class DifferenceEngine extends ContextSource {
                                # WikiPage::getParserOutput() should not return false, but just in case
                                if ( $parserOutput ) {
                                        // Allow extensions to change parser output here
-                                       if ( Hooks::run( 'DifferenceEngineRenderRevisionAddParserOutput', [ $this, $out, $parserOutput, $wikiPage ] ) ) {
+                                       if ( Hooks::run( 'DifferenceEngineRenderRevisionAddParserOutput',
+                                               [ $this, $out, $parserOutput, $wikiPage ] )
+                                       ) {
                                                $out->addParserOutput( $parserOutput );
                                        }
                                }
                        }
                }
-               # @codingStandardsIgnoreEnd
 
                // Allow extensions to optionally not show the final patrolled link
                if ( Hooks::run( 'DifferenceEngineRenderRevisionShowFinalPatrolLink' ) ) {
@@ -897,6 +902,7 @@ class DifferenceEngine extends ContextSource {
         * @param string $otext Old text, must be already segmented
         * @param string $ntext New text, must be already segmented
         * @return bool|string
+        * @throws Exception
         */
        protected function textDiff( $otext, $ntext ) {
                global $wgExternalDiffEngine, $wgContLang;
@@ -922,7 +928,7 @@ class DifferenceEngine extends ContextSource {
                        $wikidiff2Version = phpversion( 'wikidiff2' );
                        if (
                                $wikidiff2Version !== false &&
-                               version_compare( $wikidiff2Version, '0.3', '>=' )
+                               version_compare( $wikidiff2Version, '1.5.0', '>=' )
                        ) {
                                $text = wikidiff2_do_diff(
                                        $otext,
@@ -966,8 +972,16 @@ class DifferenceEngine extends ContextSource {
                        fwrite( $tempFile2, $ntext );
                        fclose( $tempFile1 );
                        fclose( $tempFile2 );
-                       $cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 );
-                       $difftext = wfShellExec( $cmd );
+                       $cmd = [ $wgExternalDiffEngine, $tempName1, $tempName2 ];
+                       $result = Shell::command( $cmd )
+                               ->execute();
+                       $exitCode = $result->getExitCode();
+                       if ( $exitCode !== 0 ) {
+                               throw new Exception( "External diff command returned code {$exitCode}. Stderr: "
+                                       . wfEscapeWikiText( $result->getStderr() )
+                               );
+                       }
+                       $difftext = $result->getStdout();
                        $difftext .= $this->debug( "external $wgExternalDiffEngine" );
                        unlink( $tempName1 );
                        unlink( $tempName2 );
@@ -981,6 +995,7 @@ class DifferenceEngine extends ContextSource {
                $diffs = new Diff( $ota, $nta );
                $formatter = new TableDiffFormatter();
                $difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) );
+               $difftext .= $this->debug( 'native PHP' );
 
                return $difftext;
        }
diff --git a/includes/editpage/TextConflictHelper.php b/includes/editpage/TextConflictHelper.php
new file mode 100644 (file)
index 0000000..b1eaa4b
--- /dev/null
@@ -0,0 +1,221 @@
+<?php
+/**
+ * Helper for displaying edit conflicts to users
+ *
+ * Copyright (C) 2017 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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
+ */
+
+namespace MediaWiki\EditPage;
+
+use Content;
+use ContentHandler;
+use Html;
+use IBufferingStatsdDataFactory;
+use OutputPage;
+use Title;
+
+/**
+ * Helper for displaying edit conflicts in text content
+ * models to users
+ *
+ * @since 1.31
+ */
+class TextConflictHelper {
+
+       /**
+        * @var Title
+        */
+       protected $title;
+
+       /**
+        * @var null|string
+        */
+       public $contentModel = null;
+
+       /**
+        * @var null|string
+        */
+       public $contentFormat = null;
+
+       /**
+        * @var OutputPage
+        */
+       protected $out;
+
+       /**
+        * @var IBufferingStatsdDataFactory
+        */
+       protected $stats;
+
+       /**
+        * @var string Message key for submit button's label
+        */
+       protected $submitLabel;
+
+       /**
+        * @var string
+        */
+       protected $yourtext = '';
+
+       /**
+        * @var string
+        */
+       protected $storedversion = '';
+
+       /**
+        * @param Title $title
+        * @param OutputPage $out
+        * @param IBufferingStatsdDataFactory $stats
+        * @param string $submitLabel
+        */
+       public function __construct( Title $title, OutputPage $out, IBufferingStatsdDataFactory $stats,
+               $submitLabel
+       ) {
+               $this->title = $title;
+               $this->out = $out;
+               $this->stats = $stats;
+               $this->submitLabel = $submitLabel;
+               $this->contentModel = $title->getContentModel();
+               $this->contentFormat = ContentHandler::getForModelID( $this->contentModel )->getDefaultFormat();
+       }
+
+       /**
+        * @param string $yourtext
+        * @param string $storedversion
+        */
+       public function setTextboxes( $yourtext, $storedversion ) {
+               $this->yourtext = $yourtext;
+               $this->storedversion = $storedversion;
+       }
+
+       /**
+        * @param string $contentModel
+        */
+       public function setContentModel( $contentModel ) {
+               $this->contentModel = $contentModel;
+       }
+
+       /**
+        * @param string $contentFormat
+        */
+       public function setContentFormat( $contentFormat ) {
+               $this->contentFormat = $contentFormat;
+       }
+
+       /**
+        * Record a user encountering an edit conflict
+        */
+       public function incrementConflictStats() {
+               $this->stats->increment( 'edit.failures.conflict' );
+               // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
+               if (
+                       $this->title->getNamespace() >= NS_MAIN &&
+                       $this->title->getNamespace() <= NS_CATEGORY_TALK
+               ) {
+                       $this->stats->increment(
+                               'edit.failures.conflict.byNamespaceId.' . $this->title->getNamespace()
+                       );
+               }
+       }
+
+       /**
+        * Record when a user has resolved an edit conflict
+        */
+       public function incrementResolvedStats() {
+               $this->stats->increment( 'edit.failures.conflict.resolved' );
+       }
+
+       /**
+        * @return string HTML
+        */
+       public function getExplainHeader() {
+               return Html::rawElement(
+                       'div',
+                       [ 'class' => 'mw-explainconflict' ],
+                       $this->out->msg( 'explainconflict', $this->out->msg( $this->submitLabel )->text() )->parse()
+               );
+       }
+
+       /**
+        * Content to go in the edit form before textbox1
+        *
+        * @see EditPage::$editFormTextBeforeContent
+        * @return string HTML
+        */
+       public function getEditFormHtmlBeforeContent() {
+               return '';
+       }
+
+       /**
+        * Content to go in the edit form after textbox1
+        *
+        * @see EditPage::$editFormTextAfterContent
+        * @return string HTML
+        */
+       public function getEditFormHtmlAfterContent() {
+               return '';
+       }
+
+       /**
+        * Content to go in the edit form after the footers
+        * (templates on this page, hidden categories, limit report)
+        */
+       public function showEditFormTextAfterFooters() {
+               $this->out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+
+               $yourContent = $this->toEditContent( $this->yourtext );
+               $storedContent = $this->toEditContent( $this->storedversion );
+               $handler = ContentHandler::getForModelID( $this->contentModel );
+               $diffEngine = $handler->createDifferenceEngine( $this->out );
+
+               $diffEngine->setContent( $yourContent, $storedContent );
+               $diffEngine->showDiff(
+                       $this->out->msg( 'yourtext' )->parse(),
+                       $this->out->msg( 'storedversion' )->text()
+               );
+
+               $this->out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+
+               $builder = new TextboxBuilder();
+               $attribs = $builder->buildTextboxAttribs(
+                       'wpTextbox2',
+                       [ 'tabindex' => 6, 'readonly' ],
+                       $this->out->getUser(),
+                       $this->title
+               );
+
+               $this->out->addHTML(
+                       Html::textarea( 'wpTextbox2', $builder->addNewLineAtEnd( $this->yourtext ), $attribs )
+               );
+       }
+
+       /**
+        * @param string $text
+        * @return Content
+        */
+       public function toEditContent( $text ) {
+               return ContentHandler::makeContent(
+                       $text,
+                       $this->title,
+                       $this->contentModel,
+                       $this->contentFormat
+               );
+       }
+}
diff --git a/includes/editpage/TextboxBuilder.php b/includes/editpage/TextboxBuilder.php
new file mode 100644 (file)
index 0000000..a6ae9bc
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Helps EditPage build textboxes
+ *
+ * (C) Copyright 2017 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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
+ */
+
+namespace MediaWiki\EditPage;
+
+use Title;
+use User;
+
+/**
+ * Helps EditPage build textboxes
+ *
+ * @since 1.31
+ */
+class TextboxBuilder {
+
+       /**
+        * @param string $wikitext
+        * @return string
+        */
+       public function addNewLineAtEnd( $wikitext ) {
+               if ( strval( $wikitext ) !== '' ) {
+                       // Ensure there's a newline at the end, otherwise adding lines
+                       // is awkward.
+                       // But don't add a newline if the text is empty, or Firefox in XHTML
+                       // mode will show an extra newline. A bit annoying.
+                       $wikitext .= "\n";
+                       return $wikitext;
+               }
+               return $wikitext;
+       }
+
+       /**
+        * @param string $name
+        * @param mixed[] $customAttribs
+        * @param User $user
+        * @param Title $title
+        * @return mixed[]
+        */
+       public function buildTextboxAttribs( $name, array $customAttribs, User $user, Title $title ) {
+               $attribs = $customAttribs + [
+                               'accesskey' => ',',
+                               'id' => $name,
+                               'cols' => 80,
+                               'rows' => 25,
+                               // Avoid PHP notices when appending preferences
+                               // (appending allows customAttribs['style'] to still work).
+                               'style' => ''
+                       ];
+
+               // The following classes can be used here:
+               // * mw-editfont-monospace
+               // * mw-editfont-sans-serif
+               // * mw-editfont-serif
+               $class = 'mw-editfont-' . $user->getOption( 'editfont' );
+
+               if ( isset( $attribs['class'] ) ) {
+                       if ( is_string( $attribs['class'] ) ) {
+                               $attribs['class'] .= ' ' . $class;
+                       } elseif ( is_array( $attribs['class'] ) ) {
+                               $attribs['class'][] = $class;
+                       }
+               } else {
+                       $attribs['class'] = $class;
+               }
+
+               $pageLang = $title->getPageLanguage();
+               $attribs['lang'] = $pageLang->getHtmlCode();
+               $attribs['dir'] = $pageLang->getDir();
+
+               return $attribs;
+       }
+
+}
index 8c1f8dc..6d95919 100644 (file)
@@ -102,15 +102,17 @@ class MWException extends Exception {
                } else {
                        $logId = WebRequest::getRequestId();
                        $type = static::class;
-                       return "<div class=\"errorbox\">" .
-                       '[' . $logId . '] ' .
-                       gmdate( 'Y-m-d H:i:s' ) . ": " .
-                       $this->msg( "internalerror-fatal-exception",
-                               "Fatal exception of type $1",
-                               $type,
-                               $logId,
-                               MWExceptionHandler::getURL( $this )
-                       ) . "</div>\n" .
+                       return Html::errorBox(
+                       htmlspecialchars(
+                               '[' . $logId . '] ' .
+                               gmdate( 'Y-m-d H:i:s' ) . ": " .
+                               $this->msg( "internalerror-fatal-exception",
+                                       "Fatal exception of type $1",
+                                       $type,
+                                       $logId,
+                                       MWExceptionHandler::getURL( $this )
+                               )
+                       ) ) .
                        "<!-- Set \$wgShowExceptionDetails = true; " .
                        "at the bottom of LocalSettings.php to show detailed " .
                        "debugging information. -->";
index bb5e4f4..dbb984d 100644 (file)
@@ -169,14 +169,15 @@ class MWExceptionRenderer {
                } else {
                        $logId = WebRequest::getRequestId();
                        $html = "<div class=\"errorbox mw-content-ltr\">" .
-                               '[' . $logId . '] ' .
-                               gmdate( 'Y-m-d H:i:s' ) . ": " .
-                               self::msg( "internalerror-fatal-exception",
-                                       "Fatal exception of type $1",
-                                       get_class( $e ),
-                                       $logId,
-                                       MWExceptionHandler::getURL()
-                               ) . "</div>\n" .
+                               htmlspecialchars(
+                                       '[' . $logId . '] ' .
+                                       gmdate( 'Y-m-d H:i:s' ) . ": " .
+                                       self::msg( "internalerror-fatal-exception",
+                                               "Fatal exception of type $1",
+                                               get_class( $e ),
+                                               $logId,
+                                               MWExceptionHandler::getURL()
+                               ) ) . "</div>\n" .
                                "<!-- " . wordwrap( self::getShowBacktraceError( $e ), 50 ) . " -->";
                }
 
index 1563baf..3beab29 100644 (file)
@@ -3,6 +3,8 @@
  * @defgroup ExternalStorage ExternalStorage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Interface for data storage in external repositories.
  *
@@ -52,16 +54,9 @@ class ExternalStore {
         * @return ExternalStoreMedium|bool The store class or false on error
         */
        public static function getStoreObject( $proto, array $params = [] ) {
-               global $wgExternalStores;
-
-               if ( !$wgExternalStores || !in_array( $proto, $wgExternalStores ) ) {
-                       return false; // protocol not enabled
-               }
-
-               $class = 'ExternalStore' . ucfirst( $proto );
-
-               // Any custom modules should be added to $wgAutoLoadClasses for on-demand loading
-               return class_exists( $class ) ? new $class( $params ) : false;
+               return MediaWikiServices::getInstance()
+                       ->getExternalStoreFactory()
+                       ->getStoreObject( $proto, $params );
        }
 
        /**
diff --git a/includes/externalstore/ExternalStoreFactory.php b/includes/externalstore/ExternalStoreFactory.php
new file mode 100644 (file)
index 0000000..940fb2e
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @defgroup ExternalStorage ExternalStorage
+ */
+
+/**
+ * @ingroup ExternalStorage
+ */
+class ExternalStoreFactory {
+
+       /**
+        * @var array
+        */
+       private $externalStores;
+
+       /**
+        * @param array $externalStores See $wgExternalStores
+        */
+       public function __construct( array $externalStores ) {
+               $this->externalStores = array_map( 'strtolower', $externalStores );
+       }
+
+       /**
+        * Get an external store object of the given type, with the given parameters
+        *
+        * @param string $proto Type of external storage, should be a value in $wgExternalStores
+        * @param array $params Associative array of ExternalStoreMedium parameters
+        * @return ExternalStoreMedium|bool The store class or false on error
+        */
+       public function getStoreObject( $proto, array $params = [] ) {
+               if ( !$this->externalStores || !in_array( strtolower( $proto ), $this->externalStores ) ) {
+                       // Protocol not enabled
+                       return false;
+               }
+
+               $class = 'ExternalStore' . ucfirst( $proto );
+
+               // Any custom modules should be added to $wgAutoLoadClasses for on-demand loading
+               return class_exists( $class ) ? new $class( $params ) : false;
+       }
+
+}
index ed00793..f5b83ae 100644 (file)
@@ -310,8 +310,9 @@ class LocalRepo extends FileRepo {
                }
 
                if ( count( $imgNames ) ) {
-                       $res = $dbr->select( 'image',
-                               LocalFile::selectFields(), [ 'img_name' => $imgNames ], __METHOD__ );
+                       $fileQuery = LocalFile::getQueryInfo();
+                       $res = $dbr->select( $fileQuery['tables'], $fileQuery['fields'], [ 'img_name' => $imgNames ],
+                               __METHOD__, [], $fileQuery['joins'] );
                        $applyMatchingFiles( $res, $searchSet, $finalFiles );
                }
 
@@ -330,8 +331,10 @@ class LocalRepo extends FileRepo {
                }
 
                if ( count( $oiConds ) ) {
-                       $res = $dbr->select( 'oldimage',
-                               OldLocalFile::selectFields(), $dbr->makeList( $oiConds, LIST_OR ), __METHOD__ );
+                       $fileQuery = OldLocalFile::getQueryInfo();
+                       $res = $dbr->select( $fileQuery['tables'], $fileQuery['fields'],
+                               $dbr->makeList( $oiConds, LIST_OR ),
+                               __METHOD__, [], $fileQuery['joins'] );
                        $applyMatchingFiles( $res, $searchSet, $finalFiles );
                }
 
@@ -372,12 +375,14 @@ class LocalRepo extends FileRepo {
         */
        function findBySha1( $hash ) {
                $dbr = $this->getReplicaDB();
+               $fileQuery = LocalFile::getQueryInfo();
                $res = $dbr->select(
-                       'image',
-                       LocalFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        [ 'img_sha1' => $hash ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'img_name' ]
+                       [ 'ORDER BY' => 'img_name' ],
+                       $fileQuery['joins']
                );
 
                $result = [];
@@ -404,12 +409,14 @@ class LocalRepo extends FileRepo {
                }
 
                $dbr = $this->getReplicaDB();
+               $fileQuery = LocalFile::getQueryInfo();
                $res = $dbr->select(
-                       'image',
-                       LocalFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        [ 'img_sha1' => $hashes ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'img_name' ]
+                       [ 'ORDER BY' => 'img_name' ],
+                       $fileQuery['joins']
                );
 
                $result = [];
@@ -434,12 +441,14 @@ class LocalRepo extends FileRepo {
 
                // Query database
                $dbr = $this->getReplicaDB();
+               $fileQuery = LocalFile::getQueryInfo();
                $res = $dbr->select(
-                       'image',
-                       LocalFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        'img_name ' . $dbr->buildLike( $prefix, $dbr->anyString() ),
                        __METHOD__,
-                       $selectOptions
+                       $selectOptions,
+                       $fileQuery['joins']
                );
 
                // Build file objects
index 758fb4b..7f48659 100644 (file)
@@ -178,12 +178,14 @@ class ArchivedFile {
                if ( !$this->title || $this->title->getNamespace() == NS_FILE ) {
                        $this->dataLoaded = true; // set it here, to have also true on miss
                        $dbr = wfGetDB( DB_REPLICA );
+                       $fileQuery = self::getQueryInfo();
                        $row = $dbr->selectRow(
-                               'filearchive',
-                               self::selectFields(),
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
                                $conds,
                                __METHOD__,
-                               [ 'ORDER BY' => 'fa_timestamp DESC' ]
+                               [ 'ORDER BY' => 'fa_timestamp DESC' ],
+                               $fileQuery['joins']
                        );
                        if ( !$row ) {
                                // this revision does not exist?
@@ -215,11 +217,11 @@ class ArchivedFile {
 
        /**
         * Fields in the filearchive table
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'fa_id',
                        'fa_name',
@@ -243,6 +245,44 @@ class ArchivedFile {
                ] + CommentStore::newKey( 'fa_description' )->getFields();
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new archivedfile object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo() {
+               $commentQuery = CommentStore::newKey( 'fa_description' )->getJoin();
+               return [
+                       'tables' => [ 'filearchive' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'fa_id',
+                               'fa_name',
+                               'fa_archive_name',
+                               'fa_storage_key',
+                               'fa_storage_group',
+                               'fa_size',
+                               'fa_bits',
+                               'fa_width',
+                               'fa_height',
+                               'fa_metadata',
+                               'fa_media_type',
+                               'fa_major_mime',
+                               'fa_minor_mime',
+                               'fa_user',
+                               'fa_user_text',
+                               'fa_timestamp',
+                               'fa_deleted',
+                               'fa_deleted_timestamp', /* Used by LocalFileRestoreBatch */
+                               'fa_sha1',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+       }
+
        /**
         * Load ArchivedFile object fields from a DB row.
         *
@@ -263,7 +303,7 @@ class ArchivedFile {
                $this->mime = "$row->fa_major_mime/$row->fa_minor_mime";
                $this->media_type = $row->fa_media_type;
                $this->description = CommentStore::newKey( 'fa_description' )
-                       // Legacy because $row probably came from self::selectFields()
+                       // Legacy because $row may have come from self::selectFields()
                        ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text;
                $this->user = $row->fa_user;
                $this->user_text = $row->fa_user_text;
index dd12ab5..827f4ca 100644 (file)
@@ -1464,7 +1464,9 @@ abstract class File implements IDBAccessObject {
                // Purge cache of all pages using this file
                $title = $this->getTitle();
                if ( $title ) {
-                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'imagelinks' ) );
+                       DeferredUpdates::addUpdate(
+                               new HTMLCacheUpdate( $title, 'imagelinks', 'file-purge' )
+                       );
                }
        }
 
index 410a794..bb12515 100644 (file)
@@ -183,7 +183,10 @@ class LocalFile extends File {
                        $conds['img_timestamp'] = $dbr->timestamp( $timestamp );
                }
 
-               $row = $dbr->selectRow( 'image', self::selectFields(), $conds, __METHOD__ );
+               $fileQuery = self::getQueryInfo();
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'], $fileQuery['fields'], $conds, __METHOD__, [], $fileQuery['joins']
+               );
                if ( $row ) {
                        return self::newFromRow( $row, $repo );
                } else {
@@ -193,11 +196,11 @@ class LocalFile extends File {
 
        /**
         * Fields in the image table
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'img_name',
                        'img_size',
@@ -215,6 +218,51 @@ class LocalFile extends File {
                ] + CommentStore::newKey( 'img_description' )->getFields();
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new localfile object.
+        * @since 1.31
+        * @param string[] $options
+        *   - omit-lazy: Omit fields that are lazily cached.
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo( array $options = [] ) {
+               $commentQuery = CommentStore::newKey( 'img_description' )->getJoin();
+               $ret = [
+                       'tables' => [ 'image' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'img_name',
+                               'img_size',
+                               'img_width',
+                               'img_height',
+                               'img_metadata',
+                               'img_bits',
+                               'img_media_type',
+                               'img_major_mime',
+                               'img_minor_mime',
+                               'img_user',
+                               'img_user_text',
+                               'img_timestamp',
+                               'img_sha1',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+
+               if ( in_array( 'omit-nonlazy', $options, true ) ) {
+                       // Internal use only for getting only the lazy fields
+                       $ret['fields'] = [];
+               }
+               if ( !in_array( 'omit-lazy', $options, true ) ) {
+                       // Note: Keep this in sync with self::getLazyCacheFields()
+                       $ret['fields'][] = 'img_metadata';
+               }
+
+               return $ret;
+       }
+
        /**
         * Do not call this except from inside a repo class.
         * @param Title $title
@@ -341,51 +389,43 @@ class LocalFile extends File {
        }
 
        /**
-        * @param string $prefix
+        * Returns the list of object properties that are included as-is in the cache.
+        * @param string $prefix Must be the empty string
         * @return array
+        * @since 1.31 No longer accepts a non-empty $prefix
         */
-       function getCacheFields( $prefix = 'img_' ) {
-               static $fields = [ 'size', 'width', 'height', 'bits', 'media_type',
-                       'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
-                       'user_text' ];
-               static $results = [];
-
-               if ( $prefix == '' ) {
-                       return array_merge( $fields, [ 'description' ] );
-               }
-               if ( !isset( $results[$prefix] ) ) {
-                       $prefixedFields = [];
-                       foreach ( $fields as $field ) {
-                               $prefixedFields[] = $prefix . $field;
-                       }
-                       $prefixedFields += CommentStore::newKey( "{$prefix}description" )->getFields();
-                       $results[$prefix] = $prefixedFields;
+       protected function getCacheFields( $prefix = 'img_' ) {
+               if ( $prefix !== '' ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ' with a non-empty prefix is no longer supported.'
+                       );
                }
 
-               return $results[$prefix];
+               // See self::getQueryInfo() for the fetching of the data from the DB,
+               // self::loadFromRow() for the loading of the object from the DB row,
+               // and self::loadFromCache() for the caching, and self::setProps() for
+               // populating the object from an array of data.
+               return [ 'size', 'width', 'height', 'bits', 'media_type',
+                       'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
+                       'user_text', 'description' ];
        }
 
        /**
-        * @param string $prefix
+        * Returns the list of object properties that are included as-is in the
+        * cache, only when they're not too big, and are lazily loaded by self::loadExtraFromDB().
+        * @param string $prefix Must be the empty string
         * @return array
+        * @since 1.31 No longer accepts a non-empty $prefix
         */
-       function getLazyCacheFields( $prefix = 'img_' ) {
-               static $fields = [ 'metadata' ];
-               static $results = [];
-
-               if ( $prefix == '' ) {
-                       return $fields;
-               }
-
-               if ( !isset( $results[$prefix] ) ) {
-                       $prefixedFields = [];
-                       foreach ( $fields as $field ) {
-                               $prefixedFields[] = $prefix . $field;
-                       }
-                       $results[$prefix] = $prefixedFields;
+       protected function getLazyCacheFields( $prefix = 'img_' ) {
+               if ( $prefix !== '' ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ' with a non-empty prefix is no longer supported.'
+                       );
                }
 
-               return $results[$prefix];
+               // Keep this in sync with the omit-lazy option in self::getQueryInfo().
+               return [ 'metadata' ];
        }
 
        /**
@@ -403,8 +443,15 @@ class LocalFile extends File {
                        ? $this->repo->getMasterDB()
                        : $this->repo->getReplicaDB();
 
-               $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ),
-                       [ 'img_name' => $this->getName() ], $fname );
+               $fileQuery = static::getQueryInfo();
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
+                       [ 'img_name' => $this->getName() ],
+                       $fname,
+                       [],
+                       $fileQuery['joins']
+               );
 
                if ( $row ) {
                        $this->loadFromRow( $row );
@@ -423,9 +470,9 @@ class LocalFile extends File {
                # Unconditionally set loaded=true, we don't want the accessors constantly rechecking
                $this->extraDataLoaded = true;
 
-               $fieldMap = $this->loadFieldsWithTimestamp( $this->repo->getReplicaDB(), $fname );
+               $fieldMap = $this->loadExtraFieldsWithTimestamp( $this->repo->getReplicaDB(), $fname );
                if ( !$fieldMap ) {
-                       $fieldMap = $this->loadFieldsWithTimestamp( $this->repo->getMasterDB(), $fname );
+                       $fieldMap = $this->loadExtraFieldsWithTimestamp( $this->repo->getMasterDB(), $fname );
                }
 
                if ( $fieldMap ) {
@@ -442,26 +489,46 @@ class LocalFile extends File {
         * @param string $fname
         * @return array|bool
         */
-       private function loadFieldsWithTimestamp( $dbr, $fname ) {
+       private function loadExtraFieldsWithTimestamp( $dbr, $fname ) {
                $fieldMap = false;
 
-               $row = $dbr->selectRow( 'image', $this->getLazyCacheFields( 'img_' ), [
+               $fileQuery = self::getQueryInfo( [ 'omit-nonlazy' ] );
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
+                       [
                                'img_name' => $this->getName(),
-                               'img_timestamp' => $dbr->timestamp( $this->getTimestamp() )
-                       ], $fname );
+                               'img_timestamp' => $dbr->timestamp( $this->getTimestamp() ),
+                       ],
+                       $fname,
+                       [],
+                       $fileQuery['joins']
+               );
                if ( $row ) {
                        $fieldMap = $this->unprefixRow( $row, 'img_' );
                } else {
                        # File may have been uploaded over in the meantime; check the old versions
-                       $row = $dbr->selectRow( 'oldimage', $this->getLazyCacheFields( 'oi_' ), [
+                       $fileQuery = OldLocalFile::getQueryInfo( [ 'omit-nonlazy' ] );
+                       $row = $dbr->selectRow(
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
+                               [
                                        'oi_name' => $this->getName(),
-                                       'oi_timestamp' => $dbr->timestamp( $this->getTimestamp() )
-                               ], $fname );
+                                       'oi_timestamp' => $dbr->timestamp( $this->getTimestamp() ),
+                               ],
+                               $fname,
+                               [],
+                               $fileQuery['joins']
+                       );
                        if ( $row ) {
                                $fieldMap = $this->unprefixRow( $row, 'oi_' );
                        }
                }
 
+               if ( isset( $fieldMap['metadata'] ) ) {
+                       $fieldMap['metadata'] = $this->repo->getReplicaDB()->decodeBlob( $fieldMap['metadata'] );
+               }
+
                return $fieldMap;
        }
 
@@ -499,6 +566,9 @@ class LocalFile extends File {
        function decodeRow( $row, $prefix = 'img_' ) {
                $decoded = $this->unprefixRow( $row, $prefix );
 
+               $decoded['description'] = CommentStore::newKey( 'description' )
+                       ->getComment( (object)$decoded )->text;
+
                $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] );
 
                $decoded['metadata'] = $this->repo->getReplicaDB()->decodeBlob( $decoded['metadata'] );
@@ -536,10 +606,6 @@ class LocalFile extends File {
                $this->dataLoaded = true;
                $this->extraDataLoaded = true;
 
-               $this->description = CommentStore::newKey( "{$prefix}description" )
-                       // $row is probably using getFields() from self::getCacheFields()
-                       ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text;
-
                $array = $this->decodeRow( $row, $prefix );
 
                foreach ( $array as $name => $value ) {
@@ -1069,9 +1135,12 @@ class LocalFile extends File {
         */
        function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
                $dbr = $this->repo->getReplicaDB();
-               $tables = [ 'oldimage' ];
-               $fields = OldLocalFile::selectFields();
-               $conds = $opts = $join_conds = [];
+               $oldFileQuery = OldLocalFile::getQueryInfo();
+
+               $tables = $oldFileQuery['tables'];
+               $fields = $oldFileQuery['fields'];
+               $join_conds = $oldFileQuery['joins'];
+               $conds = $opts = [];
                $eq = $inc ? '=' : '';
                $conds[] = "oi_name = " . $dbr->addQuotes( $this->title->getDBkey() );
 
@@ -1127,13 +1196,16 @@ class LocalFile extends File {
                $dbr = $this->repo->getReplicaDB();
 
                if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
-                       $this->historyRes = $dbr->select( 'image',
-                               self::selectFields() + [
+                       $fileQuery = self::getQueryInfo();
+                       $this->historyRes = $dbr->select( $fileQuery['tables'],
+                               $fileQuery['fields'] + [
                                        'oi_archive_name' => $dbr->addQuotes( '' ),
                                        'oi_deleted' => 0,
                                ],
                                [ 'img_name' => $this->title->getDBkey() ],
-                               $fname
+                               $fname,
+                               [],
+                               $fileQuery['joins']
                        );
 
                        if ( 0 == $dbr->numRows( $this->historyRes ) ) {
@@ -1142,12 +1214,14 @@ class LocalFile extends File {
                                return false;
                        }
                } elseif ( $this->historyLine == 1 ) {
+                       $fileQuery = OldLocalFile::getQueryInfo();
                        $this->historyRes = $dbr->select(
-                               'oldimage',
-                               OldLocalFile::selectFields(),
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
                                [ 'oi_name' => $this->title->getDBkey() ],
                                $fname,
-                               [ 'ORDER BY' => 'oi_timestamp DESC' ]
+                               [ 'ORDER BY' => 'oi_timestamp DESC' ],
+                               $fileQuery['joins']
                        );
                }
                $this->historyLine++;
@@ -1646,7 +1720,12 @@ class LocalFile extends File {
                                                );
                                        } else {
                                                # Update backlink pages pointing to this title if created
-                                               LinksUpdate::queueRecursiveJobsForTable( $this->getTitle(), 'imagelinks' );
+                                               LinksUpdate::queueRecursiveJobsForTable(
+                                                       $this->getTitle(),
+                                                       'imagelinks',
+                                                       'upload-image',
+                                                       $user->getName()
+                                               );
                                        }
 
                                        $this->prerenderThumbnails();
@@ -1661,7 +1740,9 @@ class LocalFile extends File {
                }
 
                # Invalidate cache for all pages using this file
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $this->getTitle(), 'imagelinks', 'file-upload' )
+               );
 
                return Status::newGood();
        }
@@ -2413,22 +2494,23 @@ class LocalFileDeleteBatch {
                }
 
                if ( count( $oldRels ) ) {
+                       $fileQuery = OldLocalFile::getQueryInfo();
                        $res = $dbw->select(
-                               'oldimage',
-                               OldLocalFile::selectFields(),
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
                                [
                                        'oi_name' => $this->file->getName(),
                                        'oi_archive_name' => array_keys( $oldRels )
                                ],
                                __METHOD__,
-                               [ 'FOR UPDATE' ]
+                               [ 'FOR UPDATE' ],
+                               $fileQuery['joins']
                        );
                        $rowsInsert = [];
                        if ( $res->numRows() ) {
                                $reason = $commentStoreFaReason->createComment( $dbw, $this->reason );
                                foreach ( $res as $row ) {
-                                       // Legacy from OldLocalFile::selectFields() just above
-                                       $comment = $commentStoreOiDesc->getCommentLegacy( $dbw, $row );
+                                       $comment = $commentStoreOiDesc->getComment( $row );
                                        $rowsInsert[] = [
                                                // Deletion-specific fields
                                                'fa_storage_group' => 'deleted',
@@ -2463,7 +2545,7 @@ class LocalFileDeleteBatch {
        }
 
        function doDBDeletes() {
-               global $wgUpdateCompatibleMetadata;
+               global $wgCommentTableSchemaMigrationStage;
 
                $dbw = $this->file->repo->getMasterDB();
                list( $oldRels, $deleteCurrent ) = $this->getOldRels();
@@ -2478,7 +2560,7 @@ class LocalFileDeleteBatch {
 
                if ( $deleteCurrent ) {
                        $dbw->delete( 'image', [ 'img_name' => $this->file->getName() ], __METHOD__ );
-                       if ( $wgUpdateCompatibleMetadata > MIGRATION_OLD ) {
+                       if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
                                $dbw->delete(
                                        'image_comment_temp', [ 'imgcomment_name' => $this->file->getName() ], __METHOD__
                                );
@@ -2675,12 +2757,14 @@ class LocalFileRestoreBatch {
                        $conditions['fa_id'] = $this->ids;
                }
 
+               $arFileQuery = ArchivedFile::getQueryInfo();
                $result = $dbw->select(
-                       'filearchive',
-                       ArchivedFile::selectFields(),
+                       $arFileQuery['tables'],
+                       $arFileQuery['fields'],
                        $conditions,
                        __METHOD__,
-                       [ 'ORDER BY' => 'fa_timestamp DESC' ]
+                       [ 'ORDER BY' => 'fa_timestamp DESC' ],
+                       $arFileQuery['joins']
                );
 
                $idsPresent = [];
@@ -2740,8 +2824,7 @@ class LocalFileRestoreBatch {
                                ];
                        }
 
-                       // Legacy from ArchivedFile::selectFields() just above
-                       $comment = $commentStoreFaDesc->getCommentLegacy( $dbw, $row );
+                       $comment = $commentStoreFaDesc->getComment( $row );
                        if ( $first && !$exists ) {
                                // This revision will be published as the new current version
                                $destRel = $this->file->getRel();
index ee172e1..69e6896 100644 (file)
@@ -93,7 +93,10 @@ class OldLocalFile extends LocalFile {
                        $conds['oi_timestamp'] = $dbr->timestamp( $timestamp );
                }
 
-               $row = $dbr->selectRow( 'oldimage', self::selectFields(), $conds, __METHOD__ );
+               $fileQuery = self::getQueryInfo();
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'], $fileQuery['fields'], $conds, __METHOD__, [], $fileQuery['joins']
+               );
                if ( $row ) {
                        return self::newFromRow( $row, $repo );
                } else {
@@ -103,11 +106,11 @@ class OldLocalFile extends LocalFile {
 
        /**
         * Fields in the oldimage table
-        * @todo Deprecate this in favor of a method that returns tables and joins
-        *  as well, and use CommentStore::getJoin().
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'oi_name',
                        'oi_archive_name',
@@ -127,6 +130,52 @@ class OldLocalFile extends LocalFile {
                ] + CommentStore::newKey( 'oi_description' )->getFields();
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new oldlocalfile object.
+        * @since 1.31
+        * @param string[] $options
+        *   - omit-lazy: Omit fields that are lazily cached.
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo( array $options = [] ) {
+               $commentQuery = CommentStore::newKey( 'oi_description' )->getJoin();
+               $ret = [
+                       'tables' => [ 'oldimage' ] + $commentQuery['tables'],
+                       'fields' => [
+                               'oi_name',
+                               'oi_archive_name',
+                               'oi_size',
+                               'oi_width',
+                               'oi_height',
+                               'oi_bits',
+                               'oi_media_type',
+                               'oi_major_mime',
+                               'oi_minor_mime',
+                               'oi_user',
+                               'oi_user_text',
+                               'oi_timestamp',
+                               'oi_deleted',
+                               'oi_sha1',
+                       ] + $commentQuery['fields'],
+                       'joins' => $commentQuery['joins'],
+               ];
+
+               if ( in_array( 'omit-nonlazy', $options, true ) ) {
+                       // Internal use only for getting only the lazy fields
+                       $ret['fields'] = [];
+               }
+               if ( !in_array( 'omit-lazy', $options, true ) ) {
+                       // Note: Keep this in sync with self::getLazyCacheFields()
+                       $ret['fields'][] = 'oi_metadata';
+               }
+
+               return $ret;
+       }
+
        /**
         * @param Title $title
         * @param FileRepo $repo
@@ -188,8 +237,15 @@ class OldLocalFile extends LocalFile {
                } else {
                        $conds['oi_timestamp'] = $dbr->timestamp( $this->requestedTime );
                }
-               $row = $dbr->selectRow( 'oldimage', $this->getCacheFields( 'oi_' ),
-                       $conds, __METHOD__, [ 'ORDER BY' => 'oi_timestamp DESC' ] );
+               $fileQuery = static::getQueryInfo();
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
+                       $conds,
+                       __METHOD__,
+                       [ 'ORDER BY' => 'oi_timestamp DESC' ],
+                       $fileQuery['joins']
+               );
                if ( $row ) {
                        $this->loadFromRow( $row, 'oi_' );
                } else {
@@ -209,14 +265,27 @@ class OldLocalFile extends LocalFile {
                } else {
                        $conds['oi_timestamp'] = $dbr->timestamp( $this->requestedTime );
                }
+               $fileQuery = static::getQueryInfo( [ 'omit-nonlazy' ] );
                // In theory the file could have just been renamed/deleted...oh well
-               $row = $dbr->selectRow( 'oldimage', $this->getLazyCacheFields( 'oi_' ),
-                       $conds, __METHOD__, [ 'ORDER BY' => 'oi_timestamp DESC' ] );
+               $row = $dbr->selectRow(
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
+                       $conds,
+                       __METHOD__,
+                       [ 'ORDER BY' => 'oi_timestamp DESC' ],
+                       $fileQuery['joins']
+               );
 
                if ( !$row ) { // fallback to master
                        $dbr = $this->repo->getMasterDB();
-                       $row = $dbr->selectRow( 'oldimage', $this->getLazyCacheFields( 'oi_' ),
-                               $conds, __METHOD__, [ 'ORDER BY' => 'oi_timestamp DESC' ] );
+                       $row = $dbr->selectRow(
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
+                               $conds,
+                               __METHOD__,
+                               [ 'ORDER BY' => 'oi_timestamp DESC' ],
+                               $fileQuery['joins']
+                       );
                }
 
                if ( $row ) {
@@ -228,11 +297,8 @@ class OldLocalFile extends LocalFile {
                }
        }
 
-       /**
-        * @param string $prefix
-        * @return array
-        */
-       function getCacheFields( $prefix = 'img_' ) {
+       /** @inheritDoc */
+       protected function getCacheFields( $prefix = 'img_' ) {
                $fields = parent::getCacheFields( $prefix );
                $fields[] = $prefix . 'archive_name';
                $fields[] = $prefix . 'deleted';
index 910a053..cdb8f5b 100644 (file)
@@ -126,7 +126,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
        }
 
        public function getInputWidget( $params ) {
-               return new Mediawiki\Widget\SelectWithInputWidget( $params );
+               return new MediaWiki\Widget\SelectWithInputWidget( $params );
        }
 
        /**
index f6c0b07..fb133f2 100644 (file)
@@ -136,7 +136,7 @@ class HTMLSelectOrOtherField extends HTMLTextField {
        }
 
        public function getInputWidget( $params ) {
-               return new Mediawiki\Widget\SelectWithInputWidget( $params );
+               return new MediaWiki\Widget\SelectWithInputWidget( $params );
        }
 
        /**
index 480c5bb..e6963d5 100644 (file)
@@ -92,10 +92,9 @@ class HTMLTextAreaField extends HTMLFormField {
                        $this->getAttributes( $allowedParams )
                );
 
-               return new OOUI\TextInputWidget( [
+               return new OOUI\MultilineTextInputWidget( [
                        'id' => $this->mID,
                        'name' => $this->mName,
-                       'multiline' => true,
                        'value' => $value,
                        'rows' => $this->getRows(),
                ] + $attribs );
index 0c5d162..0636314 100644 (file)
@@ -47,13 +47,11 @@ class PhpHttpRequest extends MWHttpRequest {
                if ( $this->caInfo ) {
                        $certLocations = [ 'manual' => $this->caInfo ];
                } elseif ( version_compare( PHP_VERSION, '5.6.0', '<' ) ) {
-                       // @codingStandardsIgnoreStart Generic.Files.LineLength
                        // Default locations, based on
                        // https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/
                        // PHP 5.5 and older doesn't have any defaults, so we try to guess ourselves.
                        // PHP 5.6+ gets the CA location from OpenSSL as long as it is not set manually,
                        // so we should leave capath/cafile empty there.
-                       // @codingStandardsIgnoreEnd
                        $certLocations = array_filter( [
                                getenv( 'SSL_CERT_DIR' ),
                                getenv( 'SSL_CERT_PATH' ),
index 6c56b3d..62acebf 100644 (file)
@@ -41,6 +41,16 @@ abstract class DatabaseInstaller {
         */
        public $parent;
 
+       /**
+        * @var string Set by subclasses
+        */
+       public static $minimumVersion;
+
+       /**
+        * @var string Set by subclasses
+        */
+       protected static $notMiniumumVerisonMessage;
+
        /**
         * The database connection.
         *
@@ -62,6 +72,23 @@ abstract class DatabaseInstaller {
         */
        protected $globalNames = [];
 
+       /**
+        * Whether the provided version meets the necessary requirements for this type
+        *
+        * @param string $serverVersion Output of Database::getServerVersion()
+        * @return Status
+        * @since 1.30
+        */
+       public static function meetsMinimumRequirement( $serverVersion ) {
+               if ( version_compare( $serverVersion, static::$minimumVersion ) < 0 ) {
+                       return Status::newFatal(
+                               static::$notMiniumumVerisonMessage, static::$minimumVersion, $serverVersion
+                       );
+               }
+
+               return Status::newGood();
+       }
+
        /**
         * Return the internal name, e.g. 'mysql', or 'sqlite'.
         */
@@ -697,7 +724,7 @@ abstract class DatabaseInstaller {
                }
                $this->db->selectDB( $this->getVar( 'wgDBname' ) );
 
-               if ( $this->db->selectRow( 'interwiki', '*', [], __METHOD__ ) ) {
+               if ( $this->db->selectRow( 'interwiki', '1', [], __METHOD__ ) ) {
                        $status->warning( 'config-install-interwiki-exists' );
 
                        return $status;
index a317822..54ff712 100644 (file)
@@ -340,12 +340,22 @@ abstract class DatabaseUpdater {
         *
         * @param string $tableName The table name
         * @param string $fieldName The field to be modified
-        * @param string $sqlPath The path to the SQL change path
+        * @param string $sqlPath The path to the SQL patch
         */
        public function modifyExtensionField( $tableName, $fieldName, $sqlPath ) {
                $this->extensionUpdates[] = [ 'modifyField', $tableName, $fieldName, $sqlPath, true ];
        }
 
+       /**
+        * @since 1.31
+        *
+        * @param string $tableName The table name
+        * @param string $sqlPath The path to the SQL patch
+        */
+       public function modifyExtensionTable( $tableName, $sqlPath ) {
+               $this->extensionUpdates[] = [ 'modifyTable', $tableName, $sqlPath, true ];
+       }
+
        /**
         *
         * @since 1.20
index 52be321..e99ea7c 100644 (file)
@@ -546,6 +546,17 @@ abstract class Installer {
                return $this->compiledDBs;
        }
 
+       /**
+        * Get the DatabaseInstaller class name for this type
+        *
+        * @param string $type database type ($wgDBtype)
+        * @return string Class name
+        * @since 1.30
+        */
+       public static function getDBInstallerClass( $type ) {
+               return ucfirst( $type ) . 'Installer';
+       }
+
        /**
         * Get an instance of DatabaseInstaller for the specified DB type.
         *
@@ -561,7 +572,7 @@ abstract class Installer {
                $type = strtolower( $type );
 
                if ( !isset( $this->dbInstallers[$type] ) ) {
-                       $class = ucfirst( $type ) . 'Installer';
+                       $class = self::getDBInstallerClass( $type );
                        $this->dbInstallers[$type] = new $class( $this );
                }
 
@@ -882,10 +893,13 @@ abstract class Installer {
         * @return bool
         */
        protected function envCheckDiff3() {
-               $names = [ "gdiff3", "diff3", "diff3.exe" ];
-               $versionInfo = [ '$1 --version 2>&1', 'GNU diffutils' ];
+               $names = [ "gdiff3", "diff3" ];
+               if ( wfIsWindows() ) {
+                       $names[] = 'diff3.exe';
+               }
+               $versionInfo = [ '--version', 'GNU diffutils' ];
 
-               $diff3 = self::locateExecutableInDefaultPaths( $names, $versionInfo );
+               $diff3 = ExecutableFinder::findInDefaultPaths( $names, $versionInfo );
 
                if ( $diff3 ) {
                        $this->setVar( 'wgDiff3', $diff3 );
@@ -902,9 +916,9 @@ abstract class Installer {
         * @return bool
         */
        protected function envCheckGraphics() {
-               $names = [ wfIsWindows() ? 'convert.exe' : 'convert' ];
-               $versionInfo = [ '$1 -version', 'ImageMagick' ];
-               $convert = self::locateExecutableInDefaultPaths( $names, $versionInfo );
+               $names = wfIsWindows() ? 'convert.exe' : 'convert';
+               $versionInfo = [ '-version', 'ImageMagick' ];
+               $convert = ExecutableFinder::findInDefaultPaths( $names, $versionInfo );
 
                $this->setVar( 'wgImageMagickConvertCommand', '' );
                if ( $convert ) {
@@ -928,10 +942,10 @@ abstract class Installer {
         * @return bool
         */
        protected function envCheckGit() {
-               $names = [ wfIsWindows() ? 'git.exe' : 'git' ];
-               $versionInfo = [ '$1 --version', 'git version' ];
+               $names = wfIsWindows() ? 'git.exe' : 'git';
+               $versionInfo = [ '--version', 'git version' ];
 
-               $git = self::locateExecutableInDefaultPaths( $names, $versionInfo );
+               $git = ExecutableFinder::findInDefaultPaths( $names, $versionInfo );
 
                if ( $git ) {
                        $this->setVar( 'wgGitBin', $git );
@@ -1180,88 +1194,6 @@ abstract class Installer {
                $this->setVar( 'IP', $IP );
        }
 
-       /**
-        * Get an array of likely places we can find executables. Check a bunch
-        * of known Unix-like defaults, as well as the PATH environment variable
-        * (which should maybe make it work for Windows?)
-        *
-        * @return array
-        */
-       protected static function getPossibleBinPaths() {
-               return array_merge(
-                       [ '/usr/bin', '/usr/local/bin', '/opt/csw/bin',
-                               '/usr/gnu/bin', '/usr/sfw/bin', '/sw/bin', '/opt/local/bin' ],
-                       explode( PATH_SEPARATOR, getenv( 'PATH' ) )
-               );
-       }
-
-       /**
-        * Search a path for any of the given executable names. Returns the
-        * executable name if found. Also checks the version string returned
-        * by each executable.
-        *
-        * Used only by environment checks.
-        *
-        * @param string $path Path to search
-        * @param array $names Array of executable names
-        * @param array|bool $versionInfo False or array with two members:
-        *   0 => Command to run for version check, with $1 for the full executable name
-        *   1 => String to compare the output with
-        *
-        * If $versionInfo is not false, only executables with a version
-        * matching $versionInfo[1] will be returned.
-        * @return bool|string
-        */
-       public static function locateExecutable( $path, $names, $versionInfo = false ) {
-               if ( !is_array( $names ) ) {
-                       $names = [ $names ];
-               }
-
-               foreach ( $names as $name ) {
-                       $command = $path . DIRECTORY_SEPARATOR . $name;
-
-                       MediaWiki\suppressWarnings();
-                       $file_exists = is_executable( $command );
-                       MediaWiki\restoreWarnings();
-
-                       if ( $file_exists ) {
-                               if ( !$versionInfo ) {
-                                       return $command;
-                               }
-
-                               $file = str_replace( '$1', wfEscapeShellArg( $command ), $versionInfo[0] );
-                               if ( strstr( wfShellExec( $file ), $versionInfo[1] ) !== false ) {
-                                       return $command;
-                               }
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Same as locateExecutable(), but checks in getPossibleBinPaths() by default
-        * @see locateExecutable()
-        * @param array $names Array of possible names.
-        * @param array|bool $versionInfo Default: false or array with two members:
-        *   0 => Command to run for version check, with $1 for the full executable name
-        *   1 => String to compare the output with
-        *
-        * If $versionInfo is not false, only executables with a version
-        * matching $versionInfo[1] will be returned.
-        * @return bool|string
-        */
-       public static function locateExecutableInDefaultPaths( $names, $versionInfo = false ) {
-               foreach ( self::getPossibleBinPaths() as $path ) {
-                       $exe = self::locateExecutable( $path, $names, $versionInfo );
-                       if ( $exe !== false ) {
-                               return $exe;
-                       }
-               }
-
-               return false;
-       }
-
        /**
         * Checks if scripts located in the given directory can be executed via the given URL.
         *
index d01f954..e462220 100644 (file)
@@ -51,7 +51,8 @@ class MssqlInstaller extends DatabaseInstaller {
 
        // SQL Server 2005 RTM
        // @todo Are SQL Express version numbers different?)
-       public $minimumVersion = '9.00.1399';
+       public static $minimumVersion = '9.00.1399';
+       protected static $notMiniumumVerisonMessage = 'config-mssql-old';
 
        // These are schema-level privs
        // Note: the web user will be created will full permissions if possible, this permission
@@ -191,12 +192,7 @@ class MssqlInstaller extends DatabaseInstaller {
                $conn = $status->value;
 
                // Check version
-               $version = $conn->getServerVersion();
-               if ( version_compare( $version, $this->minimumVersion ) < 0 ) {
-                       return Status::newFatal( 'config-mssql-old', $this->minimumVersion, $version );
-               }
-
-               return $status;
+               return static::meetsMinimumRequirement( $conn->getServerVersion() );
        }
 
        /**
index a2aa8c0..411d2c8 100644 (file)
@@ -104,6 +104,7 @@ class MssqlUpdater extends DatabaseUpdater {
 
                        // 1.30
                        [ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
+                       [ 'addIndex', 'site_stats', 'PRIMARY', 'patch-site_stats-pk.sql' ],
                ];
        }
 
index c5dd4dc..ab5701a 100644 (file)
@@ -51,7 +51,8 @@ class MysqlInstaller extends DatabaseInstaller {
 
        public $supportedEngines = [ 'InnoDB', 'MyISAM' ];
 
-       public $minimumVersion = '5.5.8';
+       public static $minimumVersion = '5.5.8';
+       protected static $notMiniumumVerisonMessage = 'config-mysql-old';
 
        public $webUserPrivs = [
                'DELETE',
@@ -133,12 +134,7 @@ class MysqlInstaller extends DatabaseInstaller {
                $conn = $status->value;
 
                // Check version
-               $version = $conn->getServerVersion();
-               if ( version_compare( $version, $this->minimumVersion ) < 0 ) {
-                       return Status::newFatal( 'config-mysql-old', $this->minimumVersion, $version );
-               }
-
-               return $status;
+               return static::meetsMinimumRequirement( $conn->getServerVersion() );
        }
 
        /**
index 14683d6..05f078f 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\DBConnectionError;
 
 /**
@@ -45,7 +46,8 @@ class OracleInstaller extends DatabaseInstaller {
                '_InstallUser' => 'SYSTEM',
        ];
 
-       public $minimumVersion = '9.0.1'; // 9iR1
+       public static $minimumVersion = '9.0.1'; // 9iR1
+       protected static $notMiniumumVerisonMessage = 'config-oracle-old';
 
        protected $connError = null;
 
@@ -152,15 +154,12 @@ class OracleInstaller extends DatabaseInstaller {
                }
 
                /**
-                * @var $conn Database
+                * @var Database $conn
                 */
                $conn = $status->value;
 
                // Check version
-               $version = $conn->getServerVersion();
-               if ( version_compare( $version, $this->minimumVersion ) < 0 ) {
-                       return Status::newFatal( 'config-oracle-old', $this->minimumVersion, $version );
-               }
+               $status->merge( static::meetsMinimumRequirement( $conn->getServerVersion() ) );
 
                return $status;
        }
index 00b9661..040b54a 100644 (file)
@@ -125,6 +125,7 @@ class OracleUpdater extends DatabaseUpdater {
 
                        // 1.30
                        [ 'doAutoIncrementTriggers' ],
+                       [ 'addIndex', 'site_stats', 'PRIMARY', 'patch-site_stats-pk.sql' ],
 
                        // KEEP THIS AT THE BOTTOM!!
                        [ 'doRebuildDuplicateFunction' ],
index 2265ae3..cb1b47e 100644 (file)
@@ -46,7 +46,8 @@ class PostgresInstaller extends DatabaseInstaller {
                '_InstallUser' => 'postgres',
        ];
 
-       public $minimumVersion = '8.3';
+       public static $minimumVersion = '8.3';
+       protected static $notMiniumumVerisonMessage = 'config-postgres-old';
        public $maxRoleSearchDepth = 5;
 
        protected $pgConns = [];
@@ -124,8 +125,9 @@ class PostgresInstaller extends DatabaseInstaller {
 
                // Check version
                $version = $conn->getServerVersion();
-               if ( version_compare( $version, $this->minimumVersion ) < 0 ) {
-                       return Status::newFatal( 'config-postgres-old', $this->minimumVersion, $version );
+               $status = static::meetsMinimumRequirement( $conn->getServerVersion() );
+               if ( !$status->isOK() ) {
+                       return $status;
                }
 
                $this->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) );
index 07aeb13..91f569f 100644 (file)
@@ -454,7 +454,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addPgIndex', 'user_groups', 'user_groups_expiry', '( ug_expiry )' ],
 
                        // 1.30
-                       [ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
+                       [ 'addPgEnumValue', 'media_type', '3D' ],
                        [ 'setDefault', 'revision', 'rev_comment', '' ],
                        [ 'changeNullableField', 'revision', 'rev_comment', 'NOT NULL', true ],
                        [ 'setDefault', 'archive', 'ar_comment', '' ],
@@ -481,6 +481,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'changeNullableField', 'protected_titles', 'pt_reason', 'NOT NULL', true ],
                        [ 'addPgField', 'protected_titles', 'pt_reason_id', 'INTEGER NOT NULL DEFAULT 0' ],
                        [ 'addTable', 'comment', 'patch-comment-table.sql' ],
+                       [ 'addIndex', 'site_stats', 'site_stats_pkey', 'patch-site_stats-pk.sql' ],
                ];
        }
 
@@ -838,6 +839,46 @@ END;
                }
        }
 
+       /**
+        * Add a value to an existing PostgreSQL enum type
+        * @since 1.31
+        * @param string $type Type name. Must be in the core schema.
+        * @param string $value Value to add.
+        */
+       public function addPgEnumValue( $type, $value ) {
+               $row = $this->db->selectRow(
+                       [
+                               't' => 'pg_catalog.pg_type',
+                               'n' => 'pg_catalog.pg_namespace',
+                               'e' => 'pg_catalog.pg_enum',
+                       ],
+                       [ 't.typname', 't.typtype', 'e.enumlabel' ],
+                       [
+                               't.typname' => $type,
+                               'n.nspname' => $this->db->getCoreSchema(),
+                       ],
+                       __METHOD__,
+                       [],
+                       [
+                               'n' => [ 'JOIN', 't.typnamespace = n.oid' ],
+                               'e' => [ 'LEFT JOIN', [ 'e.enumtypid = t.oid', 'e.enumlabel' => $value ] ],
+                       ]
+               );
+
+               if ( !$row ) {
+                       $this->output( "...Type $type does not exist, skipping modify enum.\n" );
+               } elseif ( $row->typtype !== 'e' ) {
+                       $this->output( "...Type $type does not seem to be an enum, skipping modify enum.\n" );
+               } elseif ( $row->enumlabel === $value ) {
+                       $this->output( "...Enum type $type already contains value '$value'.\n" );
+               } else {
+                       $this->output( "...Adding value '$value' to enum type $type.\n" );
+                       $etype = $this->db->addIdentifierQuotes( $type );
+                       $evalue = $this->db->addQuotes( $value );
+                       $this->db->query( "ALTER TYPE $etype ADD VALUE $evalue" );
+               }
+       }
+
        protected function dropFkey( $table, $field ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {
index d60d801..d5909f4 100644 (file)
@@ -33,7 +33,8 @@ use Wikimedia\Rdbms\DBConnectionError;
  */
 class SqliteInstaller extends DatabaseInstaller {
 
-       public $minimumVersion = '3.3.7';
+       public static $minimumVersion = '3.3.7';
+       protected static $notMiniumumVerisonMessage = 'config-outdated-sqlite';
 
        /**
         * @var DatabaseSqlite
@@ -58,12 +59,9 @@ class SqliteInstaller extends DatabaseInstaller {
         * @return Status
         */
        public function checkPrerequisites() {
-               $result = Status::newGood();
                // Bail out if SQLite is too old
                $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
-               if ( version_compare( $db->getServerVersion(), $this->minimumVersion, '<' ) ) {
-                       $result->fatal( 'config-outdated-sqlite', $db->getServerVersion(), $this->minimumVersion );
-               }
+               $result = static::meetsMinimumRequirement( $db->getServerVersion() );
                // Check for FTS3 full-text search module
                if ( DatabaseSqlite::getFulltextSearchModule() != 'FTS3' ) {
                        $result->warning( 'config-no-fts3' );
index 69d1fcf..b50247b 100644 (file)
        "config-help-tooltip": "اضغط للتوسيع",
        "config-nofile": "لا يمكن العثور على الملف \"$1\". هل حُذف؟",
        "config-extension-link": "هل كنت تعلم أن الويكي الخاصة بك تدعم [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions الامتدادات]؟\n\nيمكنك تصفح [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category الامتدادات حسب التصنيف] أو [https://www.mediawiki.org/wiki/Extension_Matrix مصفوفة الامتدادت] لترى القائمة الكاملة للامتدادات.",
+       "config-screenshot": "لقطة شاشة",
        "mainpagetext": "<strong>تم تثبيت ميدياويكي بنجاح.</strong>",
        "mainpagedocfooter": "استشر [https://meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.\n\n== البداية ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings قائمة إعدادات الضبط]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ أسئلة متكررة حول ميدياويكي]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]"
 }
index 1b2831f..7db3e08 100644 (file)
@@ -44,7 +44,7 @@
        "config-help-restart": "¿Quier llimpiar tolos datos guardaos qu'escribió y reaniciar el procesu d'instalación?",
        "config-restart": "Sí, reanicialu",
        "config-welcome": "=== Comprobaciones del entornu ===\nAgora van facese unes comprobaciones básiques para ver si l'entornu ye afayadizu pa la instalación de MediaWiki.\nAlcuérdese d'incluir esta información si necesita encontu pa completar la instalación.",
-       "config-copyright": "=== Drechos d'autor y condiciones d'usu ===\n\n$1\n\nEsti programa ye software llibre; pue redistribuilu y/o camudalu baxo les condiciones de la llicencia pública xeneral GNU tal como la publica la Free Software Foundation; versión 2 o (como prefiera) cualquier versión posterior.\n\nEsti programa distribúise cola esperanza de que pueda ser útil, pero '''ensin garantía denguna'''; nin siquiera la garantía implícita de '''comercialidá''' o '''adautación a un fin determináu'''.\nVea la Llicencia pública xeneral GNU pa más detalles.\n\nHabría de tener recibío <doclink href=Copying>una copia de la llicencia pública xeneral GNU</doclink> xunto con esti programa; sinón, escriba a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lléala en llinia].",
+       "config-copyright": "=== Drechos d'autor y condiciones d'usu ===\n\n$1\n\nEsti programa ye software llibre; puedes redistribuilu y/o camudalu baxo les condiciones de la llicencia pública xeneral GNU tal como la publica la Free Software Foundation; versión 2 o (como prefieras) cualquier versión posterior.\n\nEsti programa distribúese cola esperanza de que pueda ser útil, pero <strong>ensin garantía denguna</strong>; nin siquiera la garantía implícita de <strong>comercialidá</strong> o \n<strong>adautación a un fin determináu</strong>.\nVer la Llicencia pública xeneral GNU pa más detalles.\n\nHabríes de tener recibío <doclink href=Copying>una copia de la llicencia pública xeneral GNU</doclink> xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lléila en llinia].",
        "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuariu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía del alministrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Entrugues frecuentes]\n----\n* <doclink href=Readme>Lléame</doclink>\n* <doclink href=ReleaseNotes>Notes de llanzamientu</doclink>\n* <doclink href=Copying>Copia</doclink>\n* <doclink href=UpgradeDoc>Anovamientu</doclink>",
        "config-env-good": "Comprobóse l'entornu.\nPue instalar MediaWiki.",
        "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
index 1db63a2..7d7e47b 100644 (file)
@@ -81,7 +81,7 @@
        "config-env-hhvm": "HHVM $1 está instalado.",
        "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.",
        "config-unicode-pure-php-warning": "<strong>Advertencia:</strong> la [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Se utilizará la implementación más lenta en PHP puro.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
-       "config-unicode-update-warning": "<strong>Warning:</strong> la versión instalada del contenedor de normalización Unicode usa una versión antigua de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
+       "config-unicode-update-warning": "<strong>Atención:</strong> la versión instalada del contenedor de normalización de Unicode utiliza una versión anticuada de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberías [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations modernizarla] si te interesa utilizar Unicode.",
        "config-no-db": "No se encontró un controlador adecuado para la base de datos. Necesitas instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|Se admite el siguiente gestor de bases de datos|Se admiten los siguientes gestores de bases de datos}}: $1.\n\nSi compilaste PHP por tu cuenta, debes reconfigurarlo activando un cliente de base de datos, por ejemplo, mediante <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete de Debian o Ubuntu, también debes instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Advertencia:</strong> tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.",
        "config-no-fts3": "<strong>Advertencia:</strong> SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
        "config-using-uri": "Utilizando la URL del servidor \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "<strong>Advertencia:</strong> tu directorio predeterminado para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
        "config-no-cli-uploads-check": "<strong>Advertencia:</strong> tu directorio predeterminado para cargas (<code>$1</code>) no está comprobado contra la vulnerabilidad\n de ejecución arbitraria de \"scripts\" durante la instalación por línea de comandos.",
-       "config-brokenlibxml": "El sistema tiene una combinación de versiones de PHP y de libxml2 que es poco confiable y puede provocar corrupción oculta en los datos de MediaWiki y otras aplicaciones web.\nActualiza a libxml2 2.7.3 o posterior ([https://bugs.php.net/bug.php?id=45996 bug reportado con PHP]).\nInstalación abortada.",
+       "config-brokenlibxml": "El sistema utiliza una combinación de versiones de PHP y de libxml2 que es poco fiable y puede provocar daños ocultos en los datos de MediaWiki y otras aplicaciones web.\nActualiza a libxml2 2.7.3 o posterior ([https://bugs.php.net/bug.php?id=45996 defecto informado a PHP]).\nSe interrumpió la instalación.",
        "config-suhosin-max-value-length": "Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes.\nEl componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.\nSi es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.",
        "config-using-32bit": "<strong>Atención:</strong> parece que el sistema funciona con enteros de 32 bits. Esto está [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit desaconsejado].",
        "config-db-type": "Tipo de base de datos:",
        "config-mysql-engine": "Motor de almacenamiento:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
-       "config-mysql-myisam-dep": "<strong>Advertencia:</strong> has seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para usarse con MediaWiki, porque:\n* apenas soporta concurrencia debido al bloqueo de tablas\n* es más propenso a la corrupción que otros motores\n* el código MediaWiki no siempre controla MyISAM como debiera\n\nSi tu instalación de MySQL soporta InnoDB, es muy recomendable que lo elijas en su lugar.\nSi tu instalación de MySQL no soporta InnoDB, quizás es el momento de una actualización.",
+       "config-mysql-myisam-dep": "<strong>Atención:</strong> has seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para usarse con MediaWiki, porque:\n* apenas admite la concurrencia debido al bloqueo de tablas\n* es más propenso a daños que otros motores\n* el código MediaWiki no siempre controla MyISAM como debería\n\nSi tu instalación de MySQL admite InnoDB, es muy recomendable que lo elijas en su lugar.\nSi tu instalación de MySQL no admite InnoDB, quizás es el momento de una modernización.",
        "config-mysql-only-myisam-dep": "<strong>Advertencia:</strong> solo se ha encontrado el motor de almacenamiento MyISAM para MySQL en esta máquina, y no se recomienda su uso con MediaWiki, porque:\n* apenas admite la concurrencia debido al bloqueo de tablas\n* es más propenso a daños que otros motores\n* el código de MediaWiki no siempre controla MyISAM como debería\n\nTu instalación de MySQL no admite InnoDB; quizás es el momento de una actualización.",
        "config-mysql-engine-help": "<strong>InnoDB</strong> es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n<strong>MyISAM</strong> puede ser más rápido en instalaciones con usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
        "config-mysql-charset": "Conjunto de caracteres de la base de datos:",
        "config-admin-password-confirm": "Repite la contraseña:",
        "config-admin-help": "Escribe aquí el nombre de usuario que desees, como por ejemplo \"Pedro Bloggs\".\nEste es el nombre que usarás para entrar al wiki.",
        "config-admin-name-blank": "Escribe un nombre de usuario de administrador.",
-       "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un nombre de usuario diferente.",
+       "config-admin-name-invalid": "El nombre de usuario especificado, «<nowiki>$1</nowiki>», no es válido.\nEspecifica un nombre de usuario diferente.",
        "config-admin-password-blank": "Escribe una contraseña para la cuenta de administrador.",
        "config-admin-password-mismatch": "Las dos contraseñas que ingresaste no coinciden.",
        "config-admin-email": "Dirección de correo electrónico:",
        "config-upload-help": "La subida de archivos potencialmente expone tu servidor a riesgos de seguridad.\nPara obtener más información, consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security sección de seguridad] en el manual.\n\nPara activar la subida de archivos, cambia el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.\nLuego, activa esta opción.",
        "config-upload-deleted": "Directorio para los archivos eliminados:",
        "config-upload-deleted-help": "Elige un directorio en el que guardar los archivos eliminados.\nLo ideal es una carpeta no accesible desde la red.",
-       "config-logo": "URL del logo :",
+       "config-logo": "URL del logotipo:",
        "config-logo-help": "La apariencia predeterminada de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.\nCarga una imagen de tamaño adecuado y escribe la dirección URL aquí.\n\nPuedes usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si tu logotipo es relativo a esas rutas.\n\nSi no deseas un logotipo, deja esta casilla en blanco.",
-       "config-instantcommons": "Habilitar Instant Commons",
+       "config-instantcommons": "Activar Instant Commons",
        "config-instantcommons-help": "[https://www.mediawiki.org/wiki/InstantCommons Instant Commons] es una característica que permite que los wikis puedan utilizar imágenes, sonidos y otros archivos multimedia que se encuentran en el sitio [https://commons.wikimedia.org/ Wikimedia Commons].\nPara ello, MediaWiki requiere acceso a Internet.\n\nPara obtener más información sobre esta función, incluidas las instrucciones sobre cómo configurarlo para otras wikis distintas de Wikimedia Commons, consulta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos el manual].",
        "config-cc-error": "El selector de licencia de Creative Commons no dio resultado.\nEscribe el nombre de la licencia manualmente.",
        "config-cc-again": "Elegir otra vez...",
        "config-pg-no-create-privs": "La cuenta especificada para la instalación no tiene suficientes privilegios para crear una cuenta.",
        "config-pg-not-in-role": "La cuenta especificada para el usuario web ya existe.\nLa cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.\n\nMediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifica otro nombre de cuenta web, o haz clic en \"atrás\" y especifica un usuario de instalación con los privilegios convenientes.",
        "config-install-user": "Creando el usuario de la base de datos",
-       "config-install-user-alreadyexists": "El usuario \"$1\" ya existe",
-       "config-install-user-create-failed": "La creación del usuario \"$1\" falló:  $2",
-       "config-install-user-grant-failed": "La concesión de permisos al usuario \"$1\" falló: $2",
+       "config-install-user-alreadyexists": "La cuenta de usuario «$1» ya existe",
+       "config-install-user-create-failed": "Falló la creación de la cuenta de usuario «$1»: $2",
+       "config-install-user-grant-failed": "Falló la concesión de permisos a la cuenta de usuario «$1»: $2",
        "config-install-user-missing": "El usuario especificado \"$1\" no existe.",
        "config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nHaz clic en la casilla \"Crear cuenta\" debajo si quieres crearlo.",
        "config-install-tables": "Creando tablas",
        "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
        "config-help": "ayuda",
        "config-help-tooltip": "haz clic para ampliar",
-       "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
+       "config-nofile": "No se pudo encontrar el archivo «$1». Quizá se eliminó.",
        "config-extension-link": "¿Sabías que tu wiki admite [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [https://www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
        "config-skins-screenshots": "$1 (capturas de pantalla: $2)",
+       "config-skins-screenshot": "$1 ($2)",
        "config-screenshot": "captura de pantalla",
        "mainpagetext": "<strong>MediaWiki se ha instalado.</strong>",
        "mainpagedocfooter": "Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents guía] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki a tu idioma]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprende a combatir el spam en tu wiki]"
index 0591cbb..0925091 100644 (file)
        "config-localsettings-upgrade": "<code>LocalSettings.php</code> fitxategi bat detektatu da.\nInstalazioa eguneratzeko, mesedez, sar ezazu <code>$wgUpgradeKey</code> balioa beheko koadroan.\n<code>LocalSettings.php</code> fitxategian aurkituko duzu.",
        "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> fitxategi bat detektatu da.\nInstalazioa eguneratzeko, exekuta ezazu <code>update.php</code>, mesedez",
        "config-localsettings-key": "Eguneratze-gakoa:",
+       "config-localsettings-badkey": "Sartu duzun eguneratze-gakoa ez da zuzena.",
+       "config-upgrade-key-missing": "Detektatu egin da dagoeneko MediaWiki instalatu dagoela.\n\nInstalazio hau gaurkotzeko, jarri hurrengo lerroa behekoaldean <code> LocalSettings.php </code>\n\n$1",
+       "config-localsettings-incomplete": "Existitzen den <code>LocalSettings.php</code> bukatu gabe dagoela ematen du.\n$1 aldagaia ez dago finkatuta.\nMesedez, aldatu <code>LocalSettings.php</code>, aldagaia aldatzeko eta gero klikatu {{int:Config-continue}}\".",
+       "config-localsettings-connection-error": "Arazo bat sortu da datu-basearekin konektatzen <code>LocalSettings.php</code>-ean zehaztutako ezarpenak erabilita. Mesedez konpondu ezarpen hauek eta berriro saiatu.\n\n$1",
        "config-session-error": "Saio hasierako errorea: $1",
+       "config-session-expired": "Saioren informazio galdu egin dela ematen du.\nSaioak konfiguratutak daude $1 -eko iraupenerako.\nHau handitu ahal duzu <code>code>session.gc_maxlifetime</code> jartzen  php.ini -n.\n\nBerrabiatu instalazio prozesua.",
+       "config-no-session": "Saioren informazio galdu egin da!\nEgiaztatu zure php.ini eta ziurtatu <code>session.save_path</code> egoki zaion direktorioan kokatu dagoela.",
        "config-your-language": "Zure hizkuntza:",
        "config-your-language-help": "Aukeratu instalazio prozesuan erabiliko den hizkuntza",
        "config-wiki-language": "Wiki hizkuntza:",
+       "config-wiki-language-help": "Aukeratu nagusiki wikia zein hizkuntzan idatzita egongo da.",
        "config-back": "← Atzera",
        "config-continue": "Jarraitu →",
        "config-page-language": "Hizkuntza",
        "config-page-copying": "Kopiatzea",
        "config-page-upgradedoc": "Eguneratu",
        "config-page-existingwiki": "Existitzen den wikia",
+       "config-help-restart": "Ezabatu nahi duzu gorde duzun  informazio guztia eta berrebiarazi instalazio prozesua?",
        "config-restart": "Bai, berriz hasi",
+       "config-welcome": "=== Ingurumen-egiaztapenak ===\n\nOinarrizko kontrola burutzen ari da, ikusteko ia ingurumena aproposa da MediaWikia instalatzeko.\nLaguntza behar izanez gero instalazio prozesua amaitzeko ez ahaztu sartzea informazio hau .",
+       "config-copyright": "=== Copyright eta terminoak ===\n\n$1\n\nPrograma hau software librea da; birbana eta / edo alda dezakezu GNU Lizentzia Publiko Orokorraren baldintzapean, Free Software Foundation-ek argitaratutakoaren arabera; Lizentziaren 2. bertsioa edo (nahiago baduzu) bertsio berriago bat.\n\nPrograma hau baliagarria izango delakoan elkarbantzen da, baina <strong> bermerik gabe </ strong>; <strong> merkaturatze </ strong> edo <strong>  helburu jakin baterako gaitasuna</ strong> berme inplizitua ere izan gabe.\nIkus GNU Lizentzia Publiko Orokorra xehetasun gehiagorako.\n\n<Doclink href = Kopiatzea> izan beharko zenuke GNU Lizentzia Publiko Orokorraren kopia </ doclink> programa honekin batera; bestela, idatzi Free Software Foundation-en, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, AEB, edo [http://www.gnu.org/copyleft/gpl.html irakurri ezazu online]. .",
        "config-sidebar": "* [https://www.mediawiki.org MediaWiki nagusia]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Erabiltzaileentzako Gida]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratzaileentzako Gida]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MEG]\n----\n* <doclink href=Readme>Irakur nazazu</doclink>\n* <doclink href=ReleaseNotes>Oharren argitalpena</doclink>\n* <doclink href=Copying>Kopiaketa</doclink>\n* <doclink href=UpgradeDoc>Eguneratzea</doclink>",
+       "config-env-good": "Ingurumena egiaztatu egin da. \nMediaWiki instalatu ahal duzu.",
+       "config-env-bad": "Ingurumena egiaztatu egin da.\nEzin duzu MediaWiki-a instalatu.",
        "config-env-php": "PHP $1 instalatuta dago.",
        "config-env-hhvm": "HHVM $1 instalatuta dago.",
+       "config-unicode-using-intl": "[http://pecl.php.net/intl intl PECL extension] erabiltzen Unicode-ren normalizaziorako.",
+       "config-unicode-pure-php-warning": "<strong>Oharra:</strong> [http://pecl.php.net/intl intl PECL extension] ez dago prest Unicode-ren normalizazioa jasatzeko,PHP hutsaren ezarpena motelara itzultzen.\n\nTrafiko handiko gune bat exekutatzen baduzu, apur bat irakurri beharko zenuke [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]-ri buruz.",
+       "config-unicode-update-warning": "<strong>Oharra:</strong> Unicode-ren normalizazioaren bilgarriaren bertsio instalatua [http://site.icu-project.org/ ICU proiektuaren] liburutegia bertsio zaharrago bat erabiltzen du.\n[Https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] behar duzu Unicode erabiltzeagatik kezkatuta bazaude.",
+       "config-no-db": "Ezin izan da aurkitu datu-basearen driver egoki bat! Instalatu behar duzu PHP-ko datu-basearen driver bat. Hurrengo datu {{PLURAL:$2|basea|baseak}} onartzen {{PLURAL:$2|da|dira}}:$1\n\n\nPHP-k zuk konpilatu baduzu, berkonfiguratu datu-basearen bezeroarekin gaituta, adibidez, <code>./configure --with-mysqli</code>. erabiliz.\nDebian edo Ubuntu pakete batetik PHPa instalatu baduzu, orduan instalatu behar duzu ere bai hurrengo adibide bezalako bat <code>php5-mysql</code>",
+       "config-outdated-sqlite": "<strong>Warning:</strong> SQLite $1 daukazu, hau da, gutxieneko bertsioa $2 baino atzeratutagoa da. SQLite ez dago erabilgarri.",
+       "config-no-fts3": "<strong>Warning:</strong> SQLite konpilatu egin da  [//sqlite.org/fts3.html FTS3 module] barik, \nbilaketa funtzioak ez dira erabilgarri izango \"backend\" honetan.",
+       "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 edo berriagoa behar da.\nZure PHP bitarra PCRE $2 rekin lotzen da.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Informazio gehiago].",
+       "config-pcre-no-utf8": "<strong>Fatal:</strong> PHREko PCRE modulua PCRE_UTF8 ko laguntza gabe bildu da.\nMediaWiki-k UTF-8 euskarria behar du behar bezala funtziona dezan.",
+       "config-memory-raised": "PHP-ko <code>memory_limit</code> $1 da, $2-ra igota.",
+       "config-memory-bad": "<strong>Warning:</strong> PHPko <code>memory_limit</code> $1 da.\nZiurrenik hau oso baxua da.\nInstalazioa huts egin dezake!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalatuta dago",
        "config-apc": "[http://www.php.net/apc APC] instalatuta dago",
        "config-apcu": "[http://www.php.net/apcu APCu] instalatuta dago",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago",
+       "config-no-cache-apcu": "<strong>Warning:</strong> Ezin izan da [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] edo [http://www.iis.net/download/WinCacheForPhp WinCache] aurkitu.\nObjektu katxea ez dago aktibatuta.",
+       "config-mod-security": "<strong>Warning:</strong> Zure web zerbitzariak [http://modsecurity.org/mod_security] / mod_security2 aktibatu du. Honen konfigurazio komun asko sortu ahal dituzte arazoak MediaWikin  eta beste software batzuetan, hautazko edukia argitaratzeko aukera ematen dutenei erabiltzaileei.\nAhal izanez gero, desgaitu egin beharko litzateke. Bestela, kontsultatu [http://modsecurity.org/documentation/ mod_security documentation] edo jarri harremanetan zure ostalariarekin ausazko akatsak aurkitzen badituzu.",
        "config-diff3-bad": "GNU diff3 ez da aurkitu.",
+       "config-git": "Git bertsio-kontrol software aurkitu da: <code>$1</code>",
+       "config-git-bad": "Git bertsio-kontrol software ez da aurkitu.",
+       "config-imagemagick": "ImageMagick aurkitu da: <code>$1</code>.\nIrudi koadro txikiak gaitu egingo dira igoerak gaitzen badituzu.",
+       "config-gd": "Liburutegiko GD grafiko integratua aurkitu da.\nIrudi koadro txikiak gaitu egingo dira igoerak gaitzen badituzu.",
+       "config-no-scaling": "Ezin izan da GD liburutegia edo ImageMagick aurkitu.\nIrudiaren miniatura desgaitu egingo da.",
+       "config-no-uri": "<strong>Errore:</strong> Ezin izan da zehaztu URI. Instalazio geldiarazi egin da.",
+       "config-no-cli-uri": "<strong>Oharra</strong>. Ez da zehaztu <code>--scriptpath</code>, erabiltzen estandar <code>$1</code> .",
        "config-using-server": "\"<nowiki>$1</nowiki>\" zerbitzari-izena erabiltzen.",
        "config-using-uri": "\"<nowiki>$1$2</nowiki>\" zerbitzariaren URLa erabiltzen.",
+       "config-brokenlibxml": "Zure sistemak dauka PHP-ko eta libxml2-ko konbinazio akastun bat eta eragin ahal du korrupzioa datarekin MediaWikin eta beste web aplikazioetan.\nAktualizatu libxml2 2.7.3-era edo berrietara ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]).\nInstalazioa geldiarazi egin da.",
        "config-db-type": "Datu-base mota:",
        "config-db-host": "Datu-basearen zerbitzaria:",
+       "config-db-host-help": "Zure datu-basearen zerbitzaria beste zerbitzari batean badago, sartu ostalariaren izena edo IP helbidea hemen.\n\nPartekatutako web-ostatua erabiltzen ari bazara, zure ostalaritza-hornitzaileak dokumentazio-ostalariaren izen egokia eman beharko lizuke.\n\nWindows zerbitzari batean instalatzen bazara eta MySQL erabiliz, \"localhost\" agian ez du zerbitzariaren izenerako funtzionatuko. Ez badago, saiatu \"127.0.0.1\" tokiko IP helbideetarako.\n\nPostgreSQL erabiltzen ari bazara, utzi eremu hau hutsik Unix socket bidez konektatzeko.",
        "config-db-host-oracle": "Datu-baseko TNS:",
        "config-db-wiki-settings": "Wiki hau identifikatu",
        "config-db-name": "Datu-base izena:",
+       "config-db-name-help": "Aukeratu zure Wikia identifikatzen duen izena.\nEzin dira espazioak eabili.\n\nErabiltzen ari bazara web hosting partekatua, hostin-eko hornitzaileak emango dizu datu-basearen izen espezifikoa edo kontrol panel baten bitzrtez zure datu-basea sortzea utziko dizu.",
        "config-db-name-oracle": "Datu-baseko eskema:",
+       "config-db-account-oracle-warn": "Hiru euskarri onartzen dira Oracle datu-basearen euskarri gisa instalatzeko:\n\nInstalazio-prozesuaren zati gisa datu-basearen kontua sortu nahi baduzu, hornitu kontu bat SYSDBA rol datu-baseko kontu gisa instalatzeko eta webgunerako sarbide konturako nahi dituzun kredentzialak zehazteko; bestela, web-sarbideen kontua eskuz sortu eta hornitu kontu hori bakarrik (eskemaren objektuak sortzeko baimenak behar baditu) edo bi kontu ezberdin, bi pribilegio sortu eta sarbide mugatua eskaintzen dutenak.\n\nBeharrezko baimenak dituen kontu bat sortzeko gidoia instalazio honen \"mantentze/orakulu/\" direktorioan aurki daiteke. Kontuan izan kontu mugatu bat erabiliz kontu lehenetsiarekin mantentze-gaitasun guztiak desgaituko dituela.",
+       "config-db-install-account": "Instalazio prozesuan erabili erabiltzaile kontua.",
        "config-db-username": "Datu-base lankide izena:",
        "config-db-password": "Datu-base pasahitza:",
+       "config-db-install-username": "Sartu erabiliko duzun erabiltzaile izena datu-basearikn konektzatzeko instalazio prozesuaren bitartean.\nHau ez da MediaWikiaren erabiltzaile izanea; hau da datu-basearen erabiltzaile izena da.",
+       "config-db-install-password": "Sartu erabiliko den pasahitza datu-basea konektatzeko instalazio prozesuan zehar.\n\nHau ez da MediaWikiaren pasahitza; hau da zure datu-basearen pasahitza.",
+       "config-db-install-help": "Sartu instalazio prozesuan zehar datu-basearekin konektatzeko erabiliko den erabiltzaile izena eta pasahitza.",
+       "config-db-account-lock": "Operazio arruntentan erabili erabiltzaile izena eta pasahitza berdina",
+       "config-db-wiki-account": "Operazio arruntentaten erabili erabiltzaile kontua.",
+       "config-db-wiki-help": "Operazio arruntetan erabiliko den erabiltzaile izena eta pasahitza sartu.\n\nKontua ez bada existitzen, eta instalazio kontua pribilegio nahikoak baditu, erabiltzaile kontu hau sortuko da wikia erabiltzeko behar diren pribilegio minimoekin.",
+       "config-db-prefix": "Datu-basearen taularen aurrizkiak:",
+       "config-db-prefix-help": "Datu-base bat elkarbanatu behar baduzu hainbat wiki orrien artean, edota MediaWiki eta best web aplikazio batekin, taula guztiei aurrizki bat gehitzea aukeratu ahal dezakezu, gatazkak ez sortzeko.\nEz erabili zuriunerik.\n\nAtal hau normalean utsik uzten da.",
+       "config-mysql-old": "MySQL $1 edo berriagoa behar da. Zuk $2 badaukazu.",
        "config-db-port": "Datu-basearen ataka:",
        "config-db-schema": "MediaWikirako eskema:",
+       "config-db-schema-help": "Patroi hau normalean egokia da. Bakarrik aldatu beharrezkoa bada.",
+       "config-pg-test-error": "Ezin da datu-basearekin konektatu <strong>$1</strong>: $2",
+       "config-sqlite-dir": "SQLite -eko informazioaren direktorioa:",
+       "config-oracle-def-ts": "Taula-toki lehenetsia:",
+       "config-oracle-temp-ts": "Aldi baterako taula:",
        "config-type-mysql": "MySQL (edo bateragarria)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki-k onartzen du hurrengo datu-base sistemak:\n\n$1\n\nListan ez baduzu ikusten erabili nahi duzun sistema, jarraitu goiko argibideak aktibatzeko.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] MediaWikiren lehenengoko helburua da eta primeran babesturik dago. MediaWikik ere [{{int:version-db-mariadb-url}} MariaDB]-rekin egiten du lan baita [{{int:version-db-percona-url}} Percona Server]-kin, MySQL-rekin balio dutenak. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] iturburu irekiko datu basea sistema famatua da MySQL-rako alternatiba bezala. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] oso ondo onartzen duen datu-basearen sistema arina da.\n ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] enpresa komertzial baten datu-basea da. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] Windows-entzako enpresa komertzial baten datu-basea da.  ([http://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "MySQL hobespenak",
        "config-header-postgres": "PostgreSQL hobespenak",
        "config-header-sqlite": "SQLite hobespenak",
        "config-header-oracle": "Oracle hobespenak",
        "config-header-mssql": "Microsoft SQL Server-en ezarpenak",
        "config-invalid-db-type": "Datu-base mota baliogabea.",
+       "config-missing-db-name": "\"{{int:config-db-name}}\"-rentzako balioa sartu behar duzu.",
+       "config-missing-db-host": "\"{{int:config-db-host}}\"-rentzako balioa sartu behar duzu.",
+       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\"-rentzako balioa sartu behar duzu.",
+       "config-invalid-db-server-oracle": "\"$1\" TNS datu basea baliogabea.\nErabili \"TNS izena\" edo \"Konektagarritasun erraza\" katea ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
+       "config-invalid-db-name": "Datu-basearen izen okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z), zenbakiak (09), behe-gidoiak (_) eta gidoiak (-)",
+       "config-invalid-db-prefix": "Datu-basearen aurrizki okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z) behe-gidoiak (_) eta gidoiak (-)",
+       "config-connection-error": "$1\n\nHost-a, erabiltzaile izena eta pasahitza egiaztatu eta saiatu berriro.",
+       "config-invalid-schema": "MediaWikiko eskema okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z) behe-gidoiak (_).",
+       "config-db-sys-create-oracle": "Instalatzaileak bakarrik jasaten du SYSBDA kontu bat erabiltzaile kontu berri bat sortzeko.",
        "config-db-sys-user-exists-oracle": "$1 erabiltzaile kontua dagoeneko existitzen da. SYSDBA kontu berri bat sortzeko erabili daiteke soilik!",
+       "config-postgres-old": "PostgreSQL $1 edo berriagoa behar da. Zuk $2 badaukazu.",
+       "config-mssql-old": "Microsoft SQL Server $1 edo berriagoa behar da. Zuk $2 badaukazu.",
+       "config-sqlite-name-help": "Aukeratu zure wikia identifikatzen duen izen bat.\nEz erabili zuriunerik edo gidoirik.\nHau erabiliko da SQLite datuen artxiborako.",
+       "config-sqlite-mkdir-error": "Arazo bat sortu da datuen direktorioa sortzerakoan \"$1\".\nLokalizazio egiaztatu eta berriro saiatu.",
+       "config-sqlite-dir-unwritable": "Ezin izan da \"$1\" direktoriora idatzi.\nAldatu baimenak web-serbidoreak idatzi ahal izateko, eta berriro saiatu.",
+       "config-sqlite-connection-error": "$1.\n\nDatu direktorioa eta datu-basea egiaztatu eta berriro saiatu.",
        "config-sqlite-readonly": "Ezin da idatzi <code>$1</code> fitxategian.",
+       "config-sqlite-cant-create-db": "Ezin izan da <code>$1</code> datu-basearen artxiboa sortu.",
+       "config-sqlite-fts3-downgrade": "PHPn FTS3 laguntza falta da, taulen gradua jeisten.",
+       "config-can-upgrade": "Datu base honetan MediaWiki taulak daude.\nMediaWiki $1ra graduz igotzeko, <strong>Jarraitu</strong> klikatu.",
+       "config-upgrade-done-no-regenerate": "Eguneratze prozesua amaitu egin da.\n\nHasi ahal zara [ $1 wikia arabiltzen]",
        "config-regenerate": "Birsortu LocalSettings.php →",
+       "config-show-table-status": "<code>SHOW TABLE STATUS</code> kontsulta huts egin du!",
+       "config-db-web-account": "Datu-basearen kontua web sarbiderako.",
+       "config-db-web-help": "Aukeratu erabiliko den erabiltzaile izena eta pasahitza web serbidorea eta datu-basearen serbidorea konektatzeko, wikiren operazio normalaren bitartean.",
+       "config-db-web-account-same": "Instalazioan erabili duzun kontu berdina erabili.",
+       "config-db-web-create": "Kontua sortu oraindik ez bada existitzen.",
+       "config-db-web-no-create-privs": "Zehaztu duzun kontuak ez dauka pribilegio nahikoak kontu bat sortzeko.\nZehaztu duzun kontua existitu behar da.",
+       "config-mysql-engine": "Biltegiratze motorea:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Oharra:</strong> MyISAM MySQL biltegiratze-motor gisa aukeratu duzu, MediaWikirekin erabiltzeko gomendagarria ez dena honengatik:\n*taula blokeoak direla-eta gauza gutxi onartu ohi du\n*beste motore batzuek baino ustelkeria gehiago izateko aukerak ditu\n*MediaWiki-ren kode baseak ez du beti kudeatzen MyISAM behar bezala\n\nZure MySQL instalazioa InnoDB onartzen badu, hori aukeratzeko gomendatzen da.\nZure MySQL instalazioa InnoDB ez badu onartzen, baliteke bertsioa berritzeko ordua izatea.",
+       "config-mysql-only-myisam-dep": "<strong> Oharra: </strong> MyISAM makinaren MySQL biltegiratze motarako bakarra da, eta hau ez da MediaWiki-rekin erabiltzeko gomendatzen, honengatik:\n* maiztasunez taula blokeoek konkurrentzia ez dute onartzen \n* Beste motore batzuek baino ustelkeria gehiago izaten dute\n* MediaWiki-ren kodekak ez du beti kudeatzen MyISAM behar bezala\n\nZure MySQL instalazioak ez du InnoDB onartzen, agian bertsio berritzeko ordua da.",
        "config-mysql-binary": "Bitarra",
        "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Autentifikazio mota:",
+       "config-mssql-sqlauth": "SQL Serbidorearen Autentifikazioa",
+       "config-mssql-windowsauth": "Windows-eko Autentifikazioa.",
        "config-site-name": "Wikiaren izena:",
+       "config-site-name-help": "Hau nabigatzailearen tituluaren lerroan agertuko da eta pare bat leku gehiagotan.",
+       "config-site-name-blank": "Aukeratu webgunearen izena.",
        "config-project-namespace": "Proiektuaren izen-tartea:",
        "config-ns-generic": "Proiektua",
+       "config-ns-site-name": "Wiki izenaren berdina: $1",
        "config-ns-other": "Bestelakoa (zehaztu)",
        "config-ns-other-default": "MyWiki",
+       "config-project-namespace-help": "Wikipedia-ren adibidea jarraitzen, wiki askok beren orrien politika mantentzen dute beren edukien orrialdeetatik bereizita, '' 'proiektuaren izen-eremuan' ''.\nOrrialde honetako izenburu guztiek aurrizki jakin batekin hasten dira, hemen zehaztu ahal direnak.\nNormalean, aurrizkia wikiaren izenetik dator, baina ezin du \"#\" edo \":\" puntuazio-karaktereak eduki.",
        "config-admin-box": "Administratzaile kontua",
        "config-admin-name": "Zure erabiltzaile-izena:",
        "config-admin-password": "Pasahitza:",
        "config-admin-password-confirm": "Pasahitza berriz:",
+       "config-admin-help": "Sartu zure gustokoen erabiltzaile izena hemen, adibidez \"Joe Bloggs\".\nHau da erabiliko duzun izena wikian sartzeko.",
+       "config-admin-name-blank": "Sartu administratzaile kontua.",
+       "config-admin-name-invalid": "<nowiki>$1</nowiki> erabiltzaile izena baliogabea da.\nZehaztu erabiltzaile izen desberdin bat.",
+       "config-admin-password-blank": "Sartu pasahitza administratzaile kontuarentzako.",
        "config-admin-password-mismatch": "Sartutako bi pasahitzak ez datoz bat.",
        "config-admin-email": "E-posta helbidea:",
+       "config-admin-email-help": "Sartu email bat baimena emateko mezuak jasotzeko, pasahitza aldatzeko and orrien aldaketeei buruz berri edukitzeko.\nHutsik utzi ahal duzu.",
+       "config-admin-error-password": "Barne-arazoa administratzailearen pasahitza sortzerakoan.\"<nowiki>$1</nowiki>\". <pre>$2</pre>",
        "config-admin-error-bademail": "Helbide elektroniko okerra idatzi duzu.",
+       "config-pingback": "Elkarbanatu informazioa instalazio prozesuari buruz MediaWiki-ko sustatzaileekin.",
+       "config-almost-done": "Ia amaitu duzu!\nFalta den konfigurazioa saltatu ahal duzu eta zuzenean wikia instalatu.",
        "config-optional-continue": "Galdera gehiago egin.",
        "config-optional-skip": "Aspertuta nago, wikia instalatu bakarrik.",
+       "config-profile": "Erabiltzailearen profilaren eskubideak:",
        "config-profile-wiki": "Wikia ireki",
        "config-profile-no-anon": "Kontua sortzea beharrezkoa da",
        "config-profile-fishbowl": "Baimendutako editoreak bakarrik",
        "config-profile-private": "Wiki pribatua",
        "config-license": "Copyright eta lizentzia:",
+       "config-license-none": "Ez jarri lizentzia orriaren baimenik",
+       "config-license-cc-by-sa": "Creative Commons-eko esleipen-lizentzia",
        "config-license-cc-by": "Creative Commons Aitorpena",
        "config-license-cc-0": "Creative Commons Zero (Jabari Publikoa)",
+       "config-license-gfdl": "\nGNU Free Documentation License 1.3 edo berriagoa",
        "config-license-pd": "Domeinu Askea",
        "config-license-cc-choose": "Aukeratu Creative Commons lizentzia pertsonalizatua",
        "config-email-settings": "E-posta hobespenak",
+       "config-enable-email": "Aktibatu irteerako emaila.",
+       "config-email-user": "Aktibatu erabiltzaileen arteko emaila.",
+       "config-email-user-help": "Baimena eman erabiltzaileei beraien artean emailak bidaltzeko, lehentasunetan aukera aktibatuta badaukate.",
+       "config-email-usertalk": "Aktibatu erabiltzaileen eztabaida orrien jakinarazpena",
+       "config-email-usertalk-help": "Erabiltzailei baimena eman jakinarazpenak jasotzeko eztabaidan orrietako aldaketei buruz, aukera hau aktibatu badaukate.",
+       "config-email-watchlist": "Jarraipen listaren jakinarazpenak aktibatu.",
+       "config-email-watchlist-help": "Baimena eman erabiltzaileei jakinarazpenak jasotzeko haiek ikusitako orriei buruz, lehenespenetan aktibatu badaukate.",
+       "config-email-auth": "Aktibatu emailaren autentifikazioa.",
+       "config-email-auth-help": "Aukera hau aktibatuta badago, erabiltzaileak konfirmatu behar du bere emaila, sortzerakoen edota aldetzerakoan bidali zaion linka erabiltzen.\n\nBakarrik kautotaku emailak gai izango dira beste erabiltzaileen emailak jasotzeko edota jakinarazpen emailak aldatzeko.\n\nAukera hau hautatzea <strong>gomendagarria</strong> da Wiki publikoentzat, emaileen erramintien abusua dela eta.",
        "config-email-sender": "Itzuli helbide elektronikoa:",
        "config-upload-settings": "Irudi eta fitxategi igoerak",
        "config-upload-enable": "Fitxategi igoera gaitu",
+       "config-upload-help": "Fitxategiak kargatzeak zure zerbitzaria segurtasun arriskuei eragin diezaioke.\nInformazio gehiagorako, irakurri [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security security section] eskuliburuan.\n\nFitxategiak igotzea aktibatzeko, aldatu <code> images </ code> subdirektorio modua MediaWiki-ren erroko direktorioaren azpian, web zerbitzariak honela idatz dezake.\nOndoren, gaitu aukera hau.",
        "config-upload-deleted": "Ezabatutako artxiboentzako direktorioa:",
+       "config-upload-deleted-help": "Aukeratu fitxategi bat ezabatutako artxiboak gordetzeko.\nGomendagarria da hau webgunetik ez egotea eskuragarri.",
        "config-logo": "Logo URL:",
        "config-instantcommons": "Instant Commons gaitu",
+       "config-cc-error": "Creative Commons lizentziaren aukeratzaileak ez du emaitzarik eman.\nEskuz sartu lizentzia.",
        "config-cc-again": "Berriz aukeratu...",
+       "config-cc-not-chosen": "Aukeratu ze Creative Common lizentzi nahi duzu eta sakatu \"proceed\"",
        "config-advanced-settings": "Konfigurazio aurreratua",
+       "config-cache-options": "Objektu cachearen ezarpenak:",
+       "config-cache-help": "Objektuen katxea erabiltzen da MediaWikiko abiadura hobetzeko, sarritan erabiltzen diren datuak gordetzen.\nOso gomendagarria da, webgune handientzako eta ertainentzako, webgune txikiek ere ikusiko dituzte onurak.",
+       "config-cache-none": "Desaktibatu Katxina (ez dira funtzionaltasunak ezabatu, baina wiki orrialde handietan abiaduran eragina izan ahal du)",
+       "config-cache-accel": "PHP objetuen katxea (APC, APCu, XCache edo WinCache)",
+       "config-cache-memcached": "Memcached erabili (konfigurazio eta instalazio gehiago behar du)",
+       "config-memcached-servers": "Memcached serbidoreak:",
+       "config-memcached-help": "Memcached-ekin erabiltzeko IP helbideen lista.\nLerro bakoitzen bat bakarrik jarri behar da eta zehaztu ze ataka erabiliko den. Adibidez:\n127.0.0.1:11211\n192.168.1.25:1234",
+       "config-memcache-needservers": "Memcached aukeratu duzu zure katxe mota bezala baina ez duzu zehaztu inolako serbidorerik.",
+       "config-memcache-badip": "Sartu duzu Memcached-eko baliogabeko IP  bat: $1",
+       "config-memcache-noport": "Ez duzu zehaztu portu bat Memcached serbidorerako: $1\nEz badakizu portua, estandarra 11211 da.",
+       "config-memcache-badport": "Memcached-eko ataka zenbakiak $1 eta $2 artean egon behar dira.",
        "config-extensions": "Luzapenak",
+       "config-extensions-help": "Goian zerrendatutako luzapenak zure <code> ./ extensions </ code> direktorioan detektatu dira.\n\nBeharbada konfigurazio gehaigo behar dute, baina orain gaitu ditzakezu.",
        "config-skins": "Itxurak",
+       "config-skins-help": "Goian aipatutako itxurak zure <code>./skins</code> direktorioan aurkitu dira. Bat gutxienez aktibatu behar duzu, eta estandarra aukeratu.",
+       "config-skins-use-as-default": "Erabili ikusizko estilo hau lehenezpen gisa.",
+       "config-skins-missing": "Ez dira itxurarik aurkitu, MediaWiki-ak oinarrizko itxura bat erabiliko du, zuk itxura egokiak instalatu arte.",
+       "config-skins-must-enable-some": "Gutxienez aukeratu behar duzu ikusizko estilo bat aktibatzeko.",
+       "config-skins-must-enable-default": "Lehenetsia bezala aukeratu duzun ikusizko estilo aktibatuta egon behar da.",
+       "config-install-alreadydone": "<strong>Oharra:</strong>Badirudi MediaWikia instalatu daukazula eta berriz instalatzen saiatzen ari zarela.\n\nMesedez, hurrengo orrian jarraitu",
        "config-install-step-done": "egina",
        "config-install-step-failed": "Huts egin du",
        "config-install-extensions": "Luzapenak barne",
        "config-install-database": "Datu-basea konfiguratu",
        "config-install-schema": "Eskema sortu",
+       "config-install-pg-schema-not-exist": "PostgreSQL eskema ez da existitzen.",
+       "config-install-pg-schema-failed": "Tauleen sorrerak huts egin du.\nEgiaztatu \"$1\" erabiltzaileak \"$2\" eskeman idatzi ahal duela.",
+       "config-install-pg-commit": "Aldaketak egiten",
+       "config-install-pg-plpgsql": "PL/pgSQL hizkuntza bilatzen.",
+       "config-pg-no-plpgsql": "$1 datu-basean instalatu behar duzu PL/pgSQL hizkuntza.",
+       "config-pg-no-create-privs": "Zehaztu duzun kontua instalazio prozesurako ez dauka pribilegio nahikoak kontu bat sortzeko.",
+       "config-pg-not-in-role": "Zehaztu duzun kontua web erabiltzailerako dagoeneko existitzen da.\nInstalatzeko zehaztutako kontua ez da super erabiltzailea eta ez da web erabiltzailearen rolaren kide bat,hori dela eta ez da gai web erabiltzailearen objetuak erabiltzeko.\n\nMediaWiki-k, gaur egun, taulak web erabiltzailearenak izatea eskatzen du. Mesedez, zehaztu beste web kontuen izen bat, edo egin klik \"atzera\" botoian eta zehaztu instalazio egokia duen kontu bat.",
        "config-install-user": "Datubase erabiltzailea sortzen",
        "config-install-user-alreadyexists": "\"$1\" erabiltzailea badago.",
        "config-install-user-create-failed": "$1 erabiltzailea sortzerakoan huts egin du: $2",
        "config-install-user-grant-failed": "$1ri baimena emateak huts egin du: $2",
+       "config-install-user-missing": "Saru duzun erabiltzaile izena \"$1\" ez da existitzen.",
+       "config-install-user-missing-create": "Espezifikatu duzun erabiltzaile izena \"$1\" ez da existitzen.\n\nMesedez klikatu \"kontu bat sortu\" laukia, bat sortu nahi baduzu.",
        "config-install-tables": "Taulak sortzen",
+       "config-install-tables-exist": "<strong>Oharra:</strong> Badirudi MediaWkiko- taulak dagoeneko existitzen direla. Sorrera saltatzen.",
+       "config-install-tables-failed": "<strong>Errore:</strong> Taulen sorrerak huts egin du hurrengo erroreakin: $1",
+       "config-install-interwiki": "MediaWiki taula estandarrari datuak sartzen.",
        "config-install-interwiki-list": "Ezin izan da <code>interwiki.list</code> fitxategia irakurri.",
+       "config-install-interwiki-exists": "<strong>Oharra:</strong> Interwikiko taula badirudi sarrerak dituela. \nTaula estandarra saltatzen.",
        "config-install-stats": "Estatistikak hasten",
        "config-install-keys": "Gako sekretuak sortzen",
+       "config-install-updates": "Saihestu egikaratzen behar ez diren aktualizazioak",
+       "config-install-updates-failed": "<strong>Errore</strong> Sartzea eguneratze-gakoak taulen barruan huts egin du hurrengo errorearekin: $1",
        "config-install-sysop": "Administratzaile kontua sortzen",
+       "config-install-subscribe-fail": "Ezin izan da mediawiki-announce -ra harpidetu: $1",
+       "config-install-subscribe-notpossible": "cURL ez dago instalatuta eta <code> allow_url_fopen </ code> ez dago erabilgarri.",
+       "config-install-mainpage": "Sortzen orri nagusia eduki estandarrarekin",
+       "config-install-mainpage-exists": "Orri nagusia dagoeneko existitzen da, hurrengora saltatzen",
+       "config-install-extension-tables": "Taulak sortzen aktibatutako luzapenentzako.",
+       "config-install-mainpage-failed": "Orri nagusia ezin izan da txertatu: $1",
+       "config-install-done": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak sortu egin du <code>LocalSettings.php</code>\nZure konfigurazio guztia dauka.\n\nDeskargatu egin behar duzu eta jarri <code>$4</code> -ean . Deskarga automakikoki hasiko da.\n\nEz badizu deskargatzeko aukerarik eman, edo kantzelatu egin baduzu, hurrengo linkean klikatu berrabiatzeko:\n\n$3\n\n<strong>Oharra:</strong> Instalazio prozesuatik ateratzen bazara konfigurazio artxikoa deskargatu barik, gero ez da egongo eskuragarri.\n\nBehin hori eginda, <strong>[$2 enter your wiki]</strong> ahal duzu.",
+       "config-install-done-path": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak sortu egin du <code>LocalSettings.php</code>\nZure konfigurazio guztia dauka.\n\nDeskargatu egin behar duzu eta jarri <code>$4</code> -ean . Deskarga automakikoki hasiko da.\n\nEz badizu deskargatzeko aukerarik eman, edo kantzalatu egin baduzu, hurrengo linkean klikatu berrabiatzeko:\n\n$3\n\n<strong>Oharra:</strong> Instalazio prozesuatik ateratzen bazara konfigurazio artxikoa deskargatu barik, gero ez da egongo eskuragarri.\n\nBehin hori eginda, <strong>[$2 enter your wiki]</strong> ahal duzu.",
        "config-download-localsettings": "Jaitsi <code>LocalSettings.php</code>",
        "config-help": "Laguntza",
        "config-help-tooltip": "sakatu zabaltzeko",
        "config-nofile": "Ezin da \"$1\" fitxategia aurkitu. Ezabatua izan da?",
+       "config-extension-link": "Ba al zenekien wikiak [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] onartzen dituela?\n\nArakatu [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] edo [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] ikusi ahal izateko luzapenen zerrenda.",
+       "config-skins-screenshots": "$1 (Pantaila-irudia: $2)",
+       "config-screenshot": "Pantaila-irudia",
        "mainpagetext": "<strong>MediaWiki instalatu da.</strong>",
        "mainpagedocfooter": "Ikus [https://meta.wikimedia.org/wiki/Help:Contents Erabiltzaile Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.\n\n== Nola hasi ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Konfigurazio balioen zerrenda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ (Maiz egindako galderak)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]"
 }
index fb278f6..da7ff87 100644 (file)
@@ -11,7 +11,8 @@
                        "Macofe",
                        "Máté",
                        "Seb35",
-                       "Urbalazs"
+                       "Urbalazs",
+                       "MeskoBalazs"
                ]
        },
        "config-desc": "A MediaWiki telepítője",
        "config-install-subscribe-fail": "Nem sikerült feliratkozni a mediawiki-announce levelezőlistára: $1",
        "config-install-subscribe-notpossible": "A cURL nincs telepítve és az <code>allow_url_fopen</code> nem érhető el.",
        "config-install-mainpage": "Kezdőlap létrehozása az alapértelmezett tartalommal",
+       "config-install-mainpage-exists": "A főoldal már létezik, kihagyás",
        "config-install-extension-tables": "Táblák létrehozása az engedélyezett kiterjesztésekhez",
        "config-install-mainpage-failed": "Nemsikerült létrehozni a kezdőlapot: $1",
        "config-install-done": "<strong>Gratulálunk!</strong>\nA MediaWiki telepítése sikeresen befejeződött.\n\nA telepítő elkészítette a <code>LocalSettings.php</code> fájlt, amely tartalmazza az összes beállítást.\n\nEzt le kell tölteni, majd elhelyezni a wiki telepítési könyvtárába (az a könyvtár, ahol az index.php is található).\n\nA letöltés automatikusan elindul. Ha mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted:\n\n$3\n\n<strong>Megjegyzés:</strong> Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.\n\nHa végeztél a fájl elhelyezésével, <strong>[$2 beléphetsz a wikibe]</strong>.",
+       "config-install-done-path": "<strong>Gratulálunk!</strong>\nA MediaWiki telepítése sikeresen befejeződött.\n\nA telepítő elkészítette a <code>LocalSettings.php</code> fájlt, amely tartalmazza az összes beállítást.\n\nEzt le kell tölteni, majd elhelyezni ide: <code>$4</code>. A letöltés automatikusan el kell elinduljon.\n\nHa mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted:\n\n$3\n\n<strong>Megjegyzés:</strong> Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.\n\nHa végeztél a fájl elhelyezésével, <strong>[$2 beléphetsz a wikibe]</strong>.",
        "config-download-localsettings": "<code>LocalSettings.php</code> letöltése",
        "config-help": "segítség",
        "config-help-tooltip": "kattints a kibontáshoz",
        "config-nofile": "\"$1\" fájl nem található. Törölve lett?",
        "config-extension-link": "Tudtad, hogy a wikid támogat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions kiterjesztéseket]?\n\nBöngészhetsz [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category kiterjesztéseket kategóriánként] vagy válogathatsz a [https://www.mediawiki.org/wiki/Extension_Matrix kiterjesztésmátrixból] az összes kiterjesztés áttekintéséhez.",
+       "config-skins-screenshots": "$1 (képernyőképek: $2)",
+       "config-screenshot": "képernyőkép",
        "mainpagetext": "<strong>A MediaWiki telepítése sikeresen befejeződött.</strong>",
        "mainpagedocfooter": "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [https://meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.\n\n== Alapok (angol nyelven) ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Beállítások listája]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki GyIK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources A MediaWiki fordítása a saját nyelvedre]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tudd meg többet, hogyan küzdhetsz a kéretlen levelek ellen a wikiden]"
 }
index 13e7a6b..e1625fb 100644 (file)
@@ -79,6 +79,7 @@
        "config-no-cli-uploads-check": "'''Attention:''' Le directorio predefinite pro files incargate (<code>$1</code>) non es verificate contra le vulnerabilitate\nal execution arbitrari de scripts durante le installation de CLI.",
        "config-brokenlibxml": "Vostre systema ha un combination de versiones de PHP e libxml2 que es defectuose e pote causar corruption celate de datos in MediaWiki e altere applicationes web.\nActualisa a libxml2 2.7.3 o plus recente ([https://bugs.php.net/bug.php?id=45996 problema reportate presso PHP]).\nInstallation abortate.",
        "config-suhosin-max-value-length": "Suhosin es installate e limita parametro <code>length</code> de GET a $1 bytes.\nLe componente ResourceLoader de MediaWiki va contornar iste limite, ma isto prejudicara le rendimento.\nSi possibile, tu deberea mitter <code>suhosin.get.max_value_length</code> a 1024 o superior in <code>php.ini</code>, e mitter <code>$wgResourceLoaderMaxQueryLength</code> al mesme valor in <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Attention:</strong> tu systema pare operar con integres de 32 bits. Isto [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit non es recommendate].",
        "config-db-type": "Typo de base de datos:",
        "config-db-host": "Servitor de base de datos:",
        "config-db-host-help": "Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor.\n\nSi tu usa un servitor web usate in commun, tu providitor deberea dar te le correcte nomine de servitor in su documentation.\n\nSi tu face le installation in un servitor Windows e usa MySQL, le nomine \"localhost\" possibilemente non functiona como nomine de servitor. In tal caso, essaya \"127.0.0.1\", i.e. le adresse IP local.\n\nSi tu usa PostgreSQL, lassa iste campo vacue pro connecter via un \"socket\" de Unix.",
        "config-help-tooltip": "clicca pro displicar",
        "config-nofile": "Le file \"$1\" non poteva esser trovate. Ha illo essite delite?",
        "config-extension-link": "Sapeva tu que tu wiki supporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nTu pote explorar le [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensiones per category] o le [https://www.mediawiki.org/wiki/Extension_Matrix matrice de extensiones] pro vider le lista complete de extensiones.",
+       "config-skins-screenshots": "$1 (capturas de schermo: $2)",
+       "config-screenshot": "captura de schermo",
        "mainpagetext": "<strong>MediaWiki ha essite installate.</strong>",
        "mainpagedocfooter": "Consulta le [https://meta.wikimedia.org/wiki/Help:Contents Guida del usator] pro information sur le uso del software wiki.\n\n== Pro initiar ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de configurationes]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ a proposito de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducer MediaWiki in tu lingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Como combatter le spam in tu wiki]"
 }
index 3717258..9c4f7d7 100644 (file)
@@ -14,7 +14,8 @@
                        "WongKentir",
                        "Macofe",
                        "Rachmat.Wahidi",
-                       "Gombang"
+                       "Gombang",
+                       "Rachmat04"
                ]
        },
        "config-desc": "Penginstal untuk MediaWiki",
@@ -61,8 +62,8 @@
        "config-env-php": "PHP $1 diinstal.",
        "config-env-hhvm": "HHVM $1 telah dipasang.",
        "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
-       "config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
-       "config-unicode-update-warning": "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Peringatan:</strong> [http://pecl.php.net/intl intl Ekstensi PECL] tidak tersedia untuk menangani normalisasi Unicode, dikembalikan untuk melambatkan implementasi PHP asli.\nApabila Anda menjalankan situs dengan lalu-lintas tinggi, Anda harus membaca [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
+       "config-unicode-update-warning": "<strong>Peringatan:</strong> Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations meningkatkan versinya] jika ingin menggunakan Unicode.",
        "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\n{{PLURAL:$2|Jenis|Jenis}} basis data yang didukung: $1.\n\nJika Anda mengompilasi PHP sendiri, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysqli</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal seperti paket <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Peringatan:</strong> Anda menggunakan SQLite $1, yang lebih rendah dari versi minimum yang diperlukan $2. SQLite akan tidak tersedia.",
        "config-no-fts3": "'''Peringatan''': SQLite dikompilasi tanpa [//sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] adalah target utama MediaWiki dan memiliki dukungan terbaik. MediaWiki juga berjalan dengan [{{int:version-db-mariadb-url}} MariaDB] dan [{{int:version-db-percona-url}} Server Percona], yang kompatibel dengan MySQL. ([http://www.php.net/manual/en/mysql.installation.php Cara mengompilasi PHP dengan dukungan MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL. Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi. ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] adalah sistem basis data sumber terbuka populer sebagai alternatif MySQL.([http://www.php.net/manual/en/pgsql.installation.php Bagaimana mengompilasikan PHP dengan dukungan PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] adalah basis data komersial untuk perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
        "config-dbsupport-mssql": "[{{int:version-db-mssql-url}} Microsoft SQL Server] adalah database perusahaan komersial untuk Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Bagaimana cara mengkompilasi PHP dengan dukungan SQLSRV])",
        "config-cache-options": "Pengaturan untuk penyinggahan objek:",
        "config-cache-help": "Penyinggahan objek digunakan untuk meningkatkan kecepatan MediaWiki dengan menyinggahkan data yang sering digunakan.\nSitus berukuran sedang hingga besar sangat dianjurkan untuk mengaktifkan fitur ini, dan situs kecil juga akan merasakan manfaatnya.",
        "config-cache-none": "Tidak ada penyinggahan (tidak ada fungsi yang dibuang, tetapi kecepatan dapat terpengaruh pada situs wiki yang besar)",
-       "config-cache-accel": "Penyinggahan objek PHP (APC, XCache atau WinCache)",
+       "config-cache-accel": "Penyinggahan objek PHP (APC, APCu, XCache atau WinCache)",
        "config-cache-memcached": "Gunakan Memcached (memerlukan setup dan konfigurasi tambahan)",
        "config-memcached-servers": "Server Memcached:",
        "config-memcached-help": "Daftar alamat IP yang digunakan untuk Memcached.\nHarus dispesifikasikan per baris berikut porta yang akan digunakan. Contoh:\n 127.0.0.1:11211\n 192.168.1.25:1234",
        "config-nofile": "Berkas \"$1\" tidak dapat ditemukan. Mungkin sudah dihapus?",
        "config-extension-link": "Tahukah Anda bahwa wiki Anda mendukung [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions ekstensi]?\n\nAnda dapat menjelajahi [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category ekstensi menurut kategori] atau [https://www.mediawiki.org/wiki/Extension_Matrix Ekstensi Matriks] untuk melihat daftar lengkap ekstensi.",
        "mainpagetext": "<strong>MediaWiki telah terpasang dengan sukses.</strong>",
-       "mainpagedocfooter": "Silakan baca [https://www.mediawiki.org/wiki/Help:Contents Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai penggunaan ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]\n* [https://www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]"
+       "mainpagedocfooter": "Konsultasikan [https://www.mediawiki.org/wiki/Help:Contents Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Daftar pengaturan konfigurasi]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Pelokalan MediaWiki untuk bahasa Anda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Belajar bagaimana menghadapi spam di wiki lokal]"
 }
index ef286e3..3f22662 100644 (file)
        "config-mssql-sqlauth": "SQL Server 認証",
        "config-mssql-windowsauth": "Windows 認証",
        "config-site-name": "ウィキ名:",
-       "config-site-name-help": "この事象はブラウザーのタイトルバーと他のさまざまな場所に現れる。",
+       "config-site-name-help": "この欄に入力したウィキ名は、ブラウザーのタイトルバーなど様々な場所で利用されます。",
        "config-site-name-blank": "サイト名を入力してください。",
        "config-project-namespace": "プロジェクト名前空間:",
        "config-ns-generic": "プロジェクト",
        "config-ns-site-name": "ウィキ名と同じ: $1",
        "config-ns-other": "その他 (指定してください)",
        "config-ns-other-default": "マイウィキ",
-       "config-project-namespace-help": "ã\82¦ã\82£ã\82­ã\83\9aã\83\87ã\82£ã\82¢ã\81®ä¾\8bã\81«å¾\93ã\81\84ã\80\81å¤\9aã\81\8fã\81®ã\82¦ã\82£ã\82­ã\81¯ã\80\81ã\82³ã\83³ã\83\86ã\83³ã\83\84ã\81®ã\83\9aã\83¼ã\82¸ã\81¨ã\81¯å\88\86é\9b¢ã\81\97ã\81\9fã\83\9dã\83ªã\82·ã\83¼ã\83\9aã\83¼ã\82¸ã\82\92'''ã\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88ã\81®å\90\8då\89\8d空é\96\93'''ã\81«æ\8c\81ã\81£ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nã\81\93ã\81®å\90\8då\89\8d空é\96\93å\86\85ã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\83\9aã\83¼ã\82¸å\90\8dã\81¯ã\81\99ã\81¹ã\81¦ç\89¹å®\9aã\81®æ\8e¥é ­è¾\9eã\81§å§\8bã\81¾ã\82\8aã\81¾ã\81\99ã\80\82ã\81\9dã\82\8cã\82\92ã\81\93ã\81\93ã\81§æ\8c\87å®\9aできます。\n通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
+       "config-project-namespace-help": "ã\82¦ã\82£ã\82­ã\83\9aã\83\87ã\82£ã\82¢ã\81®ä¾\8bã\81«å¾\93ã\81\84ã\80\81å¤\9aã\81\8fã\81®ã\82¦ã\82£ã\82­ã\81§ã\81¯ã\82³ã\83³ã\83\86ã\83³ã\83\84ã\81®ã\83\9aã\83¼ã\82¸ã\81¨ã\81¯å\88\86é\9b¢ã\81\97ã\81\9fã\83\9dã\83ªã\82·ã\83¼ã\83\9aã\83¼ã\82¸ã\82\92'''ã\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88å\90\8då\89\8d空é\96\93'''ã\81«æ\8c\81ã\81£ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nã\81\93ã\81®å\90\8då\89\8d空é\96\93å\86\85ã\81®ã\83\9aã\83¼ã\82¸å\90\8dã\81¯ã\81\99ã\81¹ã\81¦ç\89¹å®\9aã\81®æ\8e¥é ­è¾\9eã\81§å§\8bã\81¾ã\82\8aã\80\81ã\81\93ã\81®æ¬\84ã\81§ã\81¯ã\81\9dã\81®æ\8c\87å®\9aã\81\8cできます。\n通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
        "config-ns-invalid": "指定した名前空間「<nowiki>$1</nowiki>」は無効です。\n別のプロジェクト名前空間を指定してください。",
        "config-ns-conflict": "指定された名前空間「\"<nowiki>$1</nowiki>\" 」は、MediaWikiのデフォルト名前空間と衝突しています。\n他のプロジェクト名前空間を指定してください。",
        "config-admin-box": "管理アカウント",
        "config-admin-name": "利用者名:",
        "config-admin-password": "パスワード:",
        "config-admin-password-confirm": "パスワードの再入力:",
-       "config-admin-help": "希望するユーザー名をここに入力してください (例:「Joe Bloggs」)。\nこの名前でこのウィキにログインすることになります。",
-       "config-admin-name-blank": "管理者のユーザー名を入力してください。",
-       "config-admin-name-invalid": "指定したユーザー名「<nowiki>$1</nowiki>」は無効です。\n別のユーザー名を指定してください。",
+       "config-admin-help": "希望する利用者名をここに入力してください (例:「Joe Bloggs」)。\nこの名前でこのウィキにログインすることになります。",
+       "config-admin-name-blank": "管理者の利用者名を入力してください。",
+       "config-admin-name-invalid": "指定した利用者名「<nowiki>$1</nowiki>」は無効です。\n別の利用者名を指定してください。",
        "config-admin-password-blank": "管理者アカウントのパスワードを入力してください。",
        "config-admin-password-mismatch": "入力された2つのパスワードが一致しません。",
        "config-admin-email": "メールアドレス:",
        "config-subscribe-help": "これは、リリースの告知 (重要なセキュリティに関する案内を含む) に使用される、流量が少ないメーリングリストです。\nこのメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。",
        "config-subscribe-noemail": "メールアドレスなしでリリースアナウンスのメーリングリストを購読しようとしています。\nメーリングリストを購読する場合にはメールアドレスを入力してください。",
        "config-pingback": "このインストールに関するデータをMediaWikiの開発者と共有する。",
-       "config-pingback-help": "もしこのオプションを選択すると、メディアウィキは定期的にhttps://www.mediawiki.orgとメディアウィキのインスタンスに関する基本データを呼び出します。このデータは例えばシステムのタイプ、PHPのバージョンと選択したデータベースのバックエンドなどを含んでいます。メディアウィキ財団はメディアウィキ開発者とこの情報を共有し、将来の開発の方向付けに役立たせます。ご使用のシステムに送るデータは次のとおりです。\n<pre>$1</pre>",
+       "config-pingback-help": "もし下記のオプションを有効にした場合、MediaWiki は定期的にこの MediaWiki インスタンスに関する基本データとともに https://www.mediawiki.org を呼び出します。このデータは例えばシステムのタイプ、PHPのバージョンと選択したデータベースのバックエンドなどを含んでいます。ウィキメディア財団は MediaWiki 開発者とこの情報を共有し、将来の開発に役立たせます。ご使用のシステムに送るデータは次のとおりです。\n<pre>$1</pre>",
        "config-almost-done": "これでほぼ終わりました!\n残りの設定を飛ばして、ウィキを今すぐインストールできます。",
        "config-optional-continue": "私にもっと質問してください。",
        "config-optional-skip": "もう飽きてしまったので、とにかくウィキをインストールしてください。",
        "config-insecure-keys": "<strong>警告:</strong> インストール中に生成されたセキュアキー ($1) は完璧に安全ではありません。手動で変更することを検討してください。",
        "config-install-updates": "不要な更新を実行するのを防ぐ",
        "config-install-updates-failed": "<strong>エラー:</strong> 更新キーをテーブルに挿入する際に失敗しました。以下のエラーが起こっています: $1",
-       "config-install-sysop": "管ç\90\86è\80\85ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®ä½\9cæ\88\90",
+       "config-install-sysop": "管理者アカウントの作成",
        "config-install-subscribe-fail": "mediawiki-announce を購読できませんでした: $1",
        "config-install-subscribe-notpossible": "cURL がインストールされていないため、<code>allow_url_fopen</code> を利用できません。",
        "config-install-mainpage": "メインページを既定の内容で作成",
+       "config-install-mainpage-exists": "メインページはすでに存在するためスキップします",
        "config-install-extension-tables": "有効にした拡張機能のためのテーブルを作成しています",
        "config-install-mainpage-failed": "メインページを挿入できませんでした: $1",
        "config-install-done": "<strong>おめでとうございます!</strong>\nMediaWikiのインストールに成功しました。\n\n<code>LocalSettings.php</code>ファイルが生成されました。\nこのファイルはすべての設定を含んでいます。\n\nこれをダウンロードして、ウィキをインストールした基準ディレクトリ (index.phpと同じディレクトリ) に設置する必要があります。ダウンロードは自動的に開始されるはずです。\n\nダウンロードが開始されていない場合、またはダウンロードをキャンセルした場合は、下記のリンクをクリックしてダウンロードを再開できます:\n\n$3\n\n<strong>注意:</strong> この生成された設定ファイルをダウンロードせずにインストールを終了すると、このファイルは利用できなくなります。\n\n上記の作業が完了すると、<strong>[$2 ウィキに入る]</strong>ことができます。",
        "config-help-tooltip": "クリックで展開",
        "config-nofile": "ファイル「$1」が見つかりませんでした。削除された可能性があります。",
        "config-extension-link": "あなたのウィキは[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 拡張機能]をサポートしていることをご存知ですか?\n\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category カテゴリ別で拡張機能を見る]か[https://www.mediawiki.org/wiki/Extension_Matrix 拡張機能のマトリックス]で拡張機能すべてのリストをご覧になれます。",
+       "config-skins-screenshots": "$1 (スクリーンショット: $2)",
+       "config-screenshot": "スクリーンショット",
        "mainpagetext": "<strong>MediaWiki はインストール済みです。</strong>",
        "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam あなたのウィキでスパムと戦う方法を学ぶ]"
 }
diff --git a/includes/installer/i18n/tokipona.json b/includes/installer/i18n/tokipona.json
deleted file mode 100644 (file)
index 348380f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Robin0van0der0vliet"
-               ]
-       },
-       "config-page-language": "toki"
-}
index ab365ec..96f0ef1 100644 (file)
@@ -19,7 +19,8 @@
                        "Suchichi02",
                        "Winstonyin",
                        "Wehwei",
-                       "Wwycheuk"
+                       "Wwycheuk",
+                       "蘭斯特"
                ]
        },
        "config-desc": "MediaWiki 安裝程式",
        "config-help-tooltip": "點選以展開",
        "config-nofile": "查無檔案 \"$1\",是否已被刪除?",
        "config-extension-link": "您是否了解您的 Wiki 支援 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 擴充套件]?\n\n\n您可以瀏覽 [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 擴充套件分類] 或 [https://www.mediawiki.org/wiki/Extension_Matrix 擴充套件資料表] 以取得相關的資訊。",
+       "config-skins-screenshots": "$1 (螢幕截圖: $2)",
+       "config-screenshot": "螢幕截圖",
        "mainpagetext": "<strong>已安裝 MediaWiki。</strong>",
        "mainpagedocfooter": "有關使用wiki的訊息,請參閱[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 使用者指南]。\n\n== 新手入門 ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 系統設定]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki常見問題]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki郵寄清單]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 將MediaWiki翻譯至您的語言]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上防禦破壞]"
 }
index db881d5..fa7d605 100644 (file)
@@ -119,6 +119,7 @@ class JobRunner implements LoggerAwareInterface {
                        $response['reached'] = 'none-possible';
                        return $response;
                }
+
                // Bail out if DB is in read-only mode
                if ( wfReadOnly() ) {
                        $response['reached'] = 'read-only';
@@ -126,6 +127,9 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               if ( $lbFactory->hasTransactionRound() ) {
+                       throw new LogicException( __METHOD__ . ' called with an active transaction round.' );
+               }
                // Bail out if there is too much DB lag.
                // This check should not block as we want to try other wiki queues.
                list( , $maxLag ) = $lbFactory->getMainLB( wfWikiID() )->getMaxLag();
@@ -134,9 +138,6 @@ class JobRunner implements LoggerAwareInterface {
                        return $response;
                }
 
-               // Flush any pending DB writes for sanity
-               $lbFactory->commitAll( __METHOD__ );
-
                // Catch huge single updates that lead to replica DB lag
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
@@ -170,7 +171,6 @@ class JobRunner implements LoggerAwareInterface {
                        } else {
                                $job = $group->pop( $type ); // job from a single queue
                        }
-                       $lbFactory->commitMasterChanges( __METHOD__ ); // flush any JobQueueDB writes
 
                        if ( $job ) { // found a job
                                ++$jobsPopped;
@@ -193,7 +193,6 @@ class JobRunner implements LoggerAwareInterface {
                                $info = $this->executeJob( $job, $lbFactory, $stats, $popTime );
                                if ( $info['status'] !== false || !$job->allowRetries() ) {
                                        $group->ack( $job ); // succeeded or job cannot be retried
-                                       $lbFactory->commitMasterChanges( __METHOD__ ); // flush any JobQueueDB writes
                                }
 
                                // Back off of certain jobs for a while (for throttling and for errors)
index 3907fc6..55c1367 100644 (file)
@@ -115,16 +115,18 @@ class CategoryMembershipChangeJob extends Job {
                // Find revisions to this page made around and after this revision which lack category
                // notifications in recent changes. This lets jobs pick up were the last one left off.
                $encCutoff = $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) );
+               $revQuery = Revision::getQueryInfo();
                $res = $dbr->select(
-                       'revision',
-                       Revision::selectFields(),
+                       $revQuery['tables'],
+                       $revQuery['fields'],
                        [
                                'rev_page' => $page->getId(),
                                "rev_timestamp > $encCutoff" .
                                        " OR (rev_timestamp = $encCutoff AND rev_id > $lastRevId)"
                        ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'rev_timestamp ASC, rev_id ASC' ]
+                       [ 'ORDER BY' => 'rev_timestamp ASC, rev_id ASC' ],
+                       $revQuery['joins']
                );
 
                // Apply all category updates in revision timestamp order
index e8edab5..34028df 100644 (file)
@@ -47,14 +47,16 @@ class HTMLCacheUpdateJob extends Job {
                        // Multiple pages per job make matches unlikely
                        !( isset( $params['pages'] ) && count( $params['pages'] ) != 1 )
                );
+               $this->params += [ 'causeAction' => 'unknown', 'causeAgent' => 'unknown' ];
        }
 
        /**
         * @param Title $title Title to purge backlink pages from
         * @param string $table Backlink table name
+        * @param array $params Additional job parameters
         * @return HTMLCacheUpdateJob
         */
-       public static function newForBacklinks( Title $title, $table ) {
+       public static function newForBacklinks( Title $title, $table, $params = [] ) {
                return new self(
                        $title,
                        [
@@ -62,7 +64,7 @@ class HTMLCacheUpdateJob extends Job {
                                'recursive' => true
                        ] + Job::newRootJobParams( // "overall" refresh links job info
                                "htmlCacheUpdate:{$table}:{$title->getPrefixedText()}"
-                       )
+                       ) + $params
                );
        }
 
@@ -75,6 +77,11 @@ class HTMLCacheUpdateJob extends Job {
 
                // Job to purge all (or a range of) backlink pages for a page
                if ( !empty( $this->params['recursive'] ) ) {
+                       // Carry over information for de-duplication
+                       $extraParams = $this->getRootJobParams();
+                       // Carry over cause information for logging
+                       $extraParams['causeAction'] = $this->params['causeAction'];
+                       $extraParams['causeAgent'] = $this->params['causeAgent'];
                        // Convert this into no more than $wgUpdateRowsPerJob HTMLCacheUpdateJob per-title
                        // jobs and possibly a recursive HTMLCacheUpdateJob job for the rest of the backlinks
                        $jobs = BacklinkJobUtils::partitionBacklinkJob(
@@ -82,7 +89,7 @@ class HTMLCacheUpdateJob extends Job {
                                $wgUpdateRowsPerJob,
                                $wgUpdateRowsPerQuery, // jobs-per-title
                                // Carry over information for de-duplication
-                               [ 'params' => $this->getRootJobParams() ]
+                               [ 'params' => $extraParams ]
                        );
                        JobQueueGroup::singleton()->push( $jobs );
                // Job to purge pages for a set of titles
@@ -169,6 +176,20 @@ class HTMLCacheUpdateJob extends Job {
                }
        }
 
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               if ( is_array( $info['params'] ) ) {
+                       // For per-pages jobs, the job title is that of the template that changed
+                       // (or similar), so remove that since it ruins duplicate detection
+                       if ( isset( $info['params']['pages'] ) ) {
+                               unset( $info['namespace'] );
+                               unset( $info['title'] );
+                       }
+               }
+
+               return $info;
+       }
+
        public function workItemCount() {
                if ( !empty( $this->params['recursive'] ) ) {
                        return 0; // nothing actually purged
index 6f349d4..a92ae96 100644 (file)
@@ -85,14 +85,17 @@ class RecentChangesUpdateJob extends Job {
                $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                $ticket = $factory->getEmptyTransactionTicket( __METHOD__ );
                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
+               $rcQuery = RecentChange::getQueryInfo();
                do {
                        $rcIds = [];
                        $rows = [];
-                       $res = $dbw->select( 'recentchanges',
-                               RecentChange::selectFields(),
+                       $res = $dbw->select(
+                               $rcQuery['tables'],
+                               $rcQuery['fields'],
                                [ 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ],
                                __METHOD__,
-                               [ 'LIMIT' => $wgUpdateRowsPerQuery ]
+                               [ 'LIMIT' => $wgUpdateRowsPerQuery ],
+                               $rcQuery['joins']
                        );
                        foreach ( $res as $row ) {
                                $rcIds[] = $row->rc_id;
index 424fcec..8854c65 100644 (file)
@@ -53,6 +53,7 @@ class RefreshLinksJob extends Job {
                        // Multiple pages per job make matches unlikely
                        !( isset( $params['pages'] ) && count( $params['pages'] ) != 1 )
                );
+               $this->params += [ 'causeAction' => 'unknown', 'causeAgent' => 'unknown' ];
        }
 
        /**
@@ -102,6 +103,9 @@ class RefreshLinksJob extends Job {
                        // Carry over information for de-duplication
                        $extraParams = $this->getRootJobParams();
                        $extraParams['triggeredRecursive'] = true;
+                       // Carry over cause information for logging
+                       $extraParams['causeAction'] = $this->params['causeAction'];
+                       $extraParams['causeAgent'] = $this->params['causeAgent'];
                        // Convert this into no more than $wgUpdateRowsPerJob RefreshLinks per-title
                        // jobs and possibly a recursive RefreshLinks job for the rest of the backlinks
                        $jobs = BacklinkJobUtils::partitionBacklinkJob(
@@ -254,6 +258,8 @@ class RefreshLinksJob extends Job {
                $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
 
                foreach ( $updates as $update ) {
+                       // Carry over cause in case so the update can do extra logging
+                       $update->setCause( $this->params['causeAction'], $this->params['causeAgent'] );
                        // FIXME: This code probably shouldn't be here?
                        // Needed by things like Echo notifications which need
                        // to know which user caused the links update
@@ -288,10 +294,12 @@ class RefreshLinksJob extends Job {
 
        public function getDeduplicationInfo() {
                $info = parent::getDeduplicationInfo();
+               unset( $info['causeAction'] );
+               unset( $info['causeAgent'] );
                if ( is_array( $info['params'] ) ) {
                        // For per-pages jobs, the job title is that of the template that changed
                        // (or similar), so remove that since it ruins duplicate detection
-                       if ( isset( $info['pages'] ) ) {
+                       if ( isset( $info['params']['pages'] ) ) {
                                unset( $info['namespace'] );
                                unset( $info['title'] );
                        }
index f61c139..21558f7 100644 (file)
  * @since 1.22
  */
 class HashRing {
-       /** @var Array (location => weight) */
+       /** @var array (location => weight) */
        protected $sourceMap = [];
-       /** @var Array (location => (start, end)) */
+       /** @var array (location => (start, end)) */
        protected $ring = [];
 
        /** @var HashRing|null */
        protected $liveRing;
-       /** @var Array (location => UNIX timestamp) */
+       /** @var array (location => UNIX timestamp) */
        protected $ejectionExpiries = [];
        /** @var int UNIX timestamp */
        protected $ejectionNextExpiry = INF;
index 4212ff5..f50d26b 100644 (file)
@@ -714,7 +714,8 @@ class SwiftFileBackend extends FileBackendStore {
 
                /** @noinspection PhpUnusedLocalVariableInspection */
                $ps = $this->scopedProfileSection( __METHOD__ . "-{$this->name}" );
-               $this->logger->error( __METHOD__ . ": $path was not stored with SHA-1 metadata." );
+               $this->logger->error( __METHOD__ . ": {path} was not stored with SHA-1 metadata.",
+                       [ 'path' => $path ] );
 
                $objHdrs['x-object-meta-sha1base36'] = false;
 
@@ -754,7 +755,8 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                }
 
-               $this->logger->error( __METHOD__ . ": unable to set SHA-1 metadata for $path" );
+               $this->logger->error( __METHOD__ . ': unable to set SHA-1 metadata for {path}',
+                       [ 'path' => $path ] );
 
                return $objHdrs; // failed
        }
@@ -1360,7 +1362,8 @@ class SwiftFileBackend extends FileBackendStore {
 
                if ( $rcode != 204 && $rcode !== 202 ) {
                        $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logger->error( __METHOD__ . ': unexpected rcode value (' . $rcode . ')' );
+                       $this->logger->error( __METHOD__ . ': unexpected rcode value ({rcode})',
+                               [ 'rcode' => $rcode ] );
                }
 
                return $status;
@@ -1771,10 +1774,18 @@ class SwiftFileBackend extends FileBackendStore {
                if ( $code == 401 ) { // possibly a stale token
                        $this->srvCache->delete( $this->getCredsCacheKey( $this->swiftUser ) );
                }
-               $this->logger->error(
-                       "HTTP $code ($desc) in '{$func}' (given '" . FormatJson::encode( $params ) . "')" .
-                       ( $err ? ": $err" : "" )
-               );
+               $msg = "HTTP {code} ({desc}) in '{func}' (given '{params}')";
+               $msgParams = [
+                       'code'   => $code,
+                       'desc'   => $desc,
+                       'func'   => $func,
+                       'req_params' => FormatJson::encode( $params ),
+               ];
+               if ( $err ) {
+                       $msg .= ': {err}';
+                       $msgParams['err'] = $err;
+               }
+               $this->logger->error( $msg, $msgParams );
        }
 }
 
index 5f8d9a6..84c1182 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+namespace Wikimedia\Http;
+
 /**
  * Utility for negotiating a value from a set of supported values using a preference list.
  * This is intended for use with HTTP headers like Accept, Accept-Language, Accept-Encoding, etc.
  *
  * @license GPL-2.0+
  * @author Daniel Kinzler
- * @author Thiemo Mättig
+ * @author Thiemo Kreuz
  */
-
-namespace Wikimedia\Http;
-
 class HttpAcceptNegotiator {
 
        /**
index 8a23db5..d6cb340 100644 (file)
@@ -732,7 +732,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * @since 1.27
         * @param string $keyspace
         * @param array $args
-        * @return string
+        * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         */
        public function makeKeyInternal( $keyspace, $args ) {
                $key = $keyspace;
@@ -747,8 +747,8 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a global cache key.
         *
         * @since 1.27
-        * @param string $keys,... Key component
-        * @return string
+        * @param string $keys,... Key component (starting with a key collection name)
+        * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         */
        public function makeGlobalKey() {
                return $this->makeKeyInternal( 'global', func_get_args() );
@@ -758,8 +758,8 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a cache key, scoped to this instance's keyspace.
         *
         * @since 1.27
-        * @param string $keys,... Key component
-        * @return string
+        * @param string $keys,... Key component (starting with a key collection name)
+        * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         */
        public function makeKey() {
                return $this->makeKeyInternal( $this->keyspace, func_get_args() );
index 1f757a4..73e4a9a 100644 (file)
@@ -19,6 +19,7 @@
  * @ingroup Cache
  */
 
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
@@ -88,6 +89,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        protected $purgeRelayer;
        /** @var LoggerInterface */
        protected $logger;
+       /** @var StatsdDataFactoryInterface */
+       protected $stats;
 
        /** @var int ERR_* constant for the "last error" registry */
        protected $lastRelayError = self::ERR_NONE;
@@ -177,6 +180,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *   - channels : Map of (action => channel string). Actions include "purge".
         *   - relayers : Map of (action => EventRelayer object). Actions include "purge".
         *   - logger   : LoggerInterface object
+        *   - stats    : LoggerInterface object
         */
        public function __construct( array $params ) {
                $this->cache = $params['cache'];
@@ -187,6 +191,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        ? $params['relayers']['purge']
                        : new EventRelayerNull( [] );
                $this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() );
+               $this->stats = isset( $params['stats'] ) ? $params['stats'] : new NullStatsdDataFactory();
        }
 
        public function setLogger( LoggerInterface $logger ) {
@@ -239,7 +244,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * Consider using getWithSetCallback() instead of get() and set() cycles.
         * That method has cache slam avoiding features for hot/expensive keys.
         *
-        * @param string $key Cache key
+        * @param string $key Cache key made from makeKey() or makeGlobalKey()
         * @param mixed &$curTTL Approximate TTL left on the key if present/tombstoned [returned]
         * @param array $checkKeys List of "check" keys
         * @param float &$asOf UNIX timestamp of cached value; null on failure [returned]
@@ -260,7 +265,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         * @see WANObjectCache::get()
         *
-        * @param array $keys List of cache keys
+        * @param array $keys List of cache keys made from makeKey() or makeGlobalKey()
         * @param array &$curTTLs Map of (key => approximate TTL left) for existing keys [returned]
         * @param array $checkKeys List of check keys to apply to all $keys. May also apply "check"
         *  keys to specific cache keys only by using cache keys as keys in the $checkKeys array.
@@ -442,7 +447,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
                // Do not cache potentially uncommitted data as it might get rolled back
                if ( !empty( $opts['pending'] ) ) {
-                       $this->logger->info( "Rejected set() for $key due to pending writes." );
+                       $this->logger->info( 'Rejected set() for {cachekey} due to pending writes.',
+                               [ 'cachekey' => $key ] );
 
                        return true; // no-op the write for being unsafe
                }
@@ -456,16 +462,19 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                                $wrapExtra[self::FLD_FLAGS] = self::FLG_STALE; // mark as stale
                        // Case B: any long-running transaction; ignore this set()
                        } elseif ( $age > self::MAX_READ_LAG ) {
-                               $this->logger->info( "Rejected set() for $key due to snapshot lag." );
+                               $this->logger->info( 'Rejected set() for {cachekey} due to snapshot lag.',
+                                       [ 'cachekey' => $key ] );
 
                                return true; // no-op the write for being unsafe
                        // Case C: high replication lag; lower TTL instead of ignoring all set()s
                        } elseif ( $lag === false || $lag > self::MAX_READ_LAG ) {
                                $ttl = $ttl ? min( $ttl, self::TTL_LAGGED ) : self::TTL_LAGGED;
-                               $this->logger->warning( "Lowered set() TTL for $key due to replication lag." );
+                               $this->logger->warning( 'Lowered set() TTL for {cachekey} due to replication lag.',
+                                       [ 'cachekey' => $key ] );
                        // Case D: medium length request with medium replication lag; ignore this set()
                        } else {
-                               $this->logger->info( "Rejected set() for $key due to high read lag." );
+                               $this->logger->info( 'Rejected set() for {cachekey} due to high read lag.',
+                                       [ 'cachekey' => $key ] );
 
                                return true; // no-op the write for being unsafe
                        }
@@ -686,8 +695,11 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * having to inspect a "current time left" variable (e.g. $curTTL, $curTTLs), a cache
         * regeneration will automatically be triggered using the callback.
         *
-        * The simplest way to avoid stampedes for hot keys is to use
-        * the 'lockTSE' option in $opts. If cache purges are needed, also:
+        * The $ttl argument and "hotTTR" option (in $opts) use time-dependant randomization
+        * to avoid stampedes. Keys that are slow to regenerate and either heavily used
+        * or subject to explicit (unpredictable) purges, may need additional mechanisms.
+        * The simplest way to avoid stampedes for such keys is to use 'lockTSE' (in $opts).
+        * If explicit purges are needed, also:
         *   - a) Pass $key into $checkKeys
         *   - b) Use touchCheckKey( $key ) instead of delete( $key )
         *
@@ -796,7 +808,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @see WANObjectCache::get()
         * @see WANObjectCache::set()
         *
-        * @param string $key Cache key
+        * @param string $key Cache key made from makeKey() or makeGlobalKey()
         * @param int $ttl Seconds to live for key updates. Special values are:
         *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         *   - WANObjectCache::TTL_UNCACHEABLE: Do not cache at all
@@ -839,11 +851,13 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *      This is useful if the source of a key is suspected of having possibly changed
         *      recently, and the caller wants any such changes to be reflected.
         *      Default: WANObjectCache::MIN_TIMESTAMP_NONE.
-        *   - hotTTR: Expected time-till-refresh for keys that average ~1 hit/second.
-        *      This should be greater than "ageNew". Keys with higher hit rates will regenerate
-        *      more often. This is useful when a popular key is changed but the cache purge was
-        *      delayed or lost. Seldom used keys are rarely affected by this setting, unless an
-        *      extremely low "hotTTR" value is passed in.
+        *   - hotTTR: Expected time-till-refresh (TTR) for keys that average ~1 hit/second (1 Hz).
+        *      Keys with a hit rate higher than 1Hz will refresh sooner than this TTR and vise versa.
+        *      Such refreshes won't happen until keys are "ageNew" seconds old. The TTR is useful at
+        *      reducing the impact of missed cache purges, since the effect of a heavily referenced
+        *      key being stale is worse than that of a rarely referenced key. Unlike simply lowering
+        *      $ttl, seldomly used keys are largely unaffected by this option, which makes it possible
+        *      to have a high hit rate for the "long-tail" of less-used keys.
         *      Default: WANObjectCache::HOT_TTR.
         *   - lowTTL: Consider pre-emptive updates when the current TTL (seconds) of the key is less
         *      than this. It becomes more likely over time, becoming certain once the key is expired.
@@ -946,6 +960,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                $minTime = isset( $opts['minAsOf'] ) ? $opts['minAsOf'] : self::MIN_TIMESTAMP_NONE;
                $versioned = isset( $opts['version'] );
 
+               // Get a collection name to describe this class of key
+               $kClass = $this->determineKeyClass( $key );
+
                // Get the current key value
                $curTTL = null;
                $cValue = $this->get( $key, $curTTL, $checkKeys, $asOf ); // current value
@@ -959,11 +976,17 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        && !$this->worthRefreshExpiring( $curTTL, $lowTTL )
                        && !$this->worthRefreshPopular( $asOf, $ageNew, $popWindow, $preCallbackTime )
                ) {
+                       $this->stats->increment( "wanobjectcache.$kClass.hit.good" );
+
                        return $value;
                }
 
                // A deleted key with a negative TTL left must be tombstoned
                $isTombstone = ( $curTTL !== null && $value === false );
+               if ( $isTombstone && $lockTSE <= 0 ) {
+                       // Use the INTERIM value for tombstoned keys to reduce regeneration load
+                       $lockTSE = 1;
+               }
                // Assume a key is hot if requested soon after invalidation
                $isHot = ( $curTTL !== null && $curTTL <= 0 && abs( $curTTL ) <= $lockTSE );
                // Use the mutex if there is no value and a busy fallback is given
@@ -981,21 +1004,23 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                                // Lock acquired; this thread should update the key
                                $lockAcquired = true;
                        } elseif ( $value !== false && $this->isValid( $value, $versioned, $asOf, $minTime ) ) {
+                               $this->stats->increment( "wanobjectcache.$kClass.hit.stale" );
                                // If it cannot be acquired; then the stale value can be used
                                return $value;
                        } else {
                                // Use the INTERIM value for tombstoned keys to reduce regeneration load.
                                // For hot keys, either another thread has the lock or the lock failed;
                                // use the INTERIM value from the last thread that regenerated it.
-                               $wrapped = $this->cache->get( self::INTERIM_KEY_PREFIX . $key );
-                               list( $value ) = $this->unwrap( $wrapped, microtime( true ) );
-                               if ( $value !== false && $this->isValid( $value, $versioned, $asOf, $minTime ) ) {
-                                       $asOf = $wrapped[self::FLD_TIME];
+                               $value = $this->getInterimValue( $key, $versioned, $minTime, $asOf );
+                               if ( $value !== false ) {
+                                       $this->stats->increment( "wanobjectcache.$kClass.hit.volatile" );
 
                                        return $value;
                                }
                                // Use the busy fallback value if nothing else
                                if ( $busyValue !== null ) {
+                                       $this->stats->increment( "wanobjectcache.$kClass.miss.busy" );
+
                                        return is_callable( $busyValue ) ? $busyValue() : $busyValue;
                                }
                        }
@@ -1013,24 +1038,19 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                } finally {
                        --$this->callbackDepth;
                }
+               $valueIsCacheable = ( $value !== false && $ttl >= 0 );
+
                // When delete() is called, writes are write-holed by the tombstone,
                // so use a special INTERIM key to pass the new value around threads.
-               if ( ( $isTombstone && $lockTSE > 0 ) && $value !== false && $ttl >= 0 ) {
+               if ( ( $isTombstone && $lockTSE > 0 ) && $valueIsCacheable ) {
                        $tempTTL = max( 1, (int)$lockTSE ); // set() expects seconds
                        $newAsOf = microtime( true );
                        $wrapped = $this->wrap( $value, $tempTTL, $newAsOf );
                        // Avoid using set() to avoid pointless mcrouter broadcasting
-                       $this->cache->merge(
-                               self::INTERIM_KEY_PREFIX . $key,
-                               function () use ( $wrapped ) {
-                                       return $wrapped;
-                               },
-                               $tempTTL,
-                               1
-                       );
+                       $this->setInterimValue( $key, $wrapped, $tempTTL );
                }
 
-               if ( $value !== false && $ttl >= 0 ) {
+               if ( $valueIsCacheable ) {
                        $setOpts['lockTSE'] = $lockTSE;
                        // Use best known "since" timestamp if not provided
                        $setOpts += [ 'since' => $preCallbackTime ];
@@ -1040,12 +1060,49 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
                if ( $lockAcquired ) {
                        // Avoid using delete() to avoid pointless mcrouter broadcasting
-                       $this->cache->changeTTL( self::MUTEX_KEY_PREFIX . $key, 1 );
+                       $this->cache->changeTTL( self::MUTEX_KEY_PREFIX . $key, (int)$preCallbackTime - 60 );
                }
 
+               $this->stats->increment( "wanobjectcache.$kClass.miss.compute" );
+
                return $value;
        }
 
+       /**
+        * @param string $key
+        * @param bool $versioned
+        * @param float $minTime
+        * @param mixed $asOf
+        * @return mixed
+        */
+       protected function getInterimValue( $key, $versioned, $minTime, &$asOf ) {
+               $wrapped = $this->cache->get( self::INTERIM_KEY_PREFIX . $key );
+               list( $value ) = $this->unwrap( $wrapped, microtime( true ) );
+               if ( $value !== false && $this->isValid( $value, $versioned, $asOf, $minTime ) ) {
+                       $asOf = $wrapped[self::FLD_TIME];
+
+                       return $value;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $key
+        * @param array $wrapped
+        * @param int $tempTTL
+        */
+       protected function setInterimValue( $key, $wrapped, $tempTTL ) {
+               $this->cache->merge(
+                       self::INTERIM_KEY_PREFIX . $key,
+                       function () use ( $wrapped ) {
+                               return $wrapped;
+                       },
+                       $tempTTL,
+                       1
+               );
+       }
+
        /**
         * Method to fetch multiple cache keys at once with regeneration
         *
@@ -1083,7 +1140,15 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *             $setOpts += Database::getCacheSetOptions( $dbr );
         *
         *             // Load the row for this file
-        *             $row = $dbr->selectRow( 'file', '*', [ 'id' => $id ], __METHOD__ );
+        *             $queryInfo = File::getQueryInfo();
+        *             $row = $dbr->selectRow(
+        *                 $queryInfo['tables'],
+        *                 $queryInfo['fields'],
+        *                 [ 'id' => $id ],
+        *                 __METHOD__,
+        *                 [],
+        *                 $queryInfo['joins']
+        *             );
         *
         *             return $row ? (array)$row : false;
         *         },
@@ -1169,7 +1234,15 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         *             // Load the rows for these files
         *             $rows = [];
-        *             $res = $dbr->select( 'file', '*', [ 'id' => $ids ], __METHOD__ );
+        *             $queryInfo = File::getQueryInfo();
+        *             $res = $dbr->select(
+        *                 $queryInfo['tables'],
+        *                 $queryInfo['fields'],
+        *                 [ 'id' => $ids ],
+        *                 __METHOD__,
+        *                 [],
+        *                 $queryInfo['joins']
+        *             );
         *             foreach ( $res as $row ) {
         *                 $rows[$row->id] = $row;
         *                 $mtime = wfTimestamp( TS_UNIX, $row->timestamp );
@@ -1315,8 +1388,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @see BagOStuff::makeKey()
-        * @param string $keys,... Key component
-        * @return string
+        * @param string $keys,... Key component (starting with a key collection name)
+        * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         * @since 1.27
         */
        public function makeKey() {
@@ -1325,8 +1398,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @see BagOStuff::makeGlobalKey()
-        * @param string $keys,... Key component
-        * @return string
+        * @param string $keys,... Key component (starting with a key collection name)
+        * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         * @since 1.27
         */
        public function makeGlobalKey() {
@@ -1507,7 +1580,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
-        * Check if a key should be regenerated (using random probability)
+        * Check if a key is nearing expiration and thus due for randomized regeneration
         *
         * This returns false if $curTTL >= $lowTTL. Otherwise, the chance
         * of returning true increases steadily from 0% to 100% as the $curTTL
@@ -1657,6 +1730,16 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                return $res;
        }
 
+       /**
+        * @param string $key String of the format <scope>:<class>[:<class or variable>]...
+        * @return string
+        */
+       protected function determineKeyClass( $key ) {
+               $parts = explode( ':', $key );
+
+               return isset( $parts[1] ) ? $parts[1] : $parts[0]; // sanity
+       }
+
        /**
         * @param string $value Wrapped value like "PURGED:<timestamp>:<holdoff>"
         * @return array|bool Array containing a UNIX timestamp (float) and holdoff period (integer),
@@ -1724,7 +1807,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                return array_diff( $keys, $keysFound );
        }
 
-               /**
+       /**
         * @param array $keys
         * @param array $checkKeys
         * @return array Map of (cache key => mixed)
index bc1454b..e04566e 100644 (file)
@@ -945,10 +945,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        # Update state tracking to reflect transaction loss due to disconnection
                        $this->handleSessionLoss();
                        if ( $this->reconnect() ) {
-                               $msg = __METHOD__ . ": lost connection to {$this->getServer()}; reconnected";
-                               $this->connLogger->warning( $msg );
-                               $this->queryLogger->warning(
-                                       "$msg:\n" . ( new RuntimeException() )->getTraceAsString() );
+                               $msg = __METHOD__ . ': lost connection to {dbserver}; reconnected';
+                               $params = [ 'dbserver' => $this->getServer() ];
+                               $this->connLogger->warning( $msg, $params );
+                               $this->queryLogger->warning( $msg, $params +
+                                       [ 'trace' => ( new RuntimeException() )->getTraceAsString() ] );
 
                                if ( !$recoverable ) {
                                        # Callers may catch the exception and continue to use the DB
@@ -958,8 +959,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                        $ret = $this->doProfiledQuery( $sql, $commentedSql, $isNonTempWrite, $fname );
                                }
                        } else {
-                               $msg = __METHOD__ . ": lost connection to {$this->getServer()} permanently";
-                               $this->connLogger->error( $msg );
+                               $msg = __METHOD__ . ': lost connection to {dbserver} permanently';
+                               $this->connLogger->error( $msg, [ 'dbserver' => $this->getServer() ] );
                        }
                }
 
@@ -2015,11 +2016,21 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                // No alias? Set it equal to the table name
                                $alias = $table;
                        }
+
+                       if ( is_array( $table ) ) {
+                               // A parenthesized group
+                               $joinedTable = '('
+                                       . $this->tableNamesWithIndexClauseOrJOIN( $table, $use_index, $ignore_index, $join_conds )
+                                       . ')';
+                       } else {
+                               $joinedTable = $this->tableNameWithAlias( $table, $alias );
+                       }
+
                        // Is there a JOIN clause for this table?
                        if ( isset( $join_conds[$alias] ) ) {
                                list( $joinType, $conds ) = $join_conds[$alias];
                                $tableClause = $joinType;
-                               $tableClause .= ' ' . $this->tableNameWithAlias( $table, $alias );
+                               $tableClause .= ' ' . $joinedTable;
                                if ( isset( $use_index[$alias] ) ) { // has USE INDEX?
                                        $use = $this->useIndexClause( implode( ',', (array)$use_index[$alias] ) );
                                        if ( $use != '' ) {
@@ -2041,7 +2052,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                $retJOIN[] = $tableClause;
                        } elseif ( isset( $use_index[$alias] ) ) {
                                // Is there an INDEX clause for this table?
-                               $tableClause = $this->tableNameWithAlias( $table, $alias );
+                               $tableClause = $joinedTable;
                                $tableClause .= ' ' . $this->useIndexClause(
                                                implode( ',', (array)$use_index[$alias] )
                                        );
@@ -2049,14 +2060,14 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                $ret[] = $tableClause;
                        } elseif ( isset( $ignore_index[$alias] ) ) {
                                // Is there an INDEX clause for this table?
-                               $tableClause = $this->tableNameWithAlias( $table, $alias );
+                               $tableClause = $joinedTable;
                                $tableClause .= ' ' . $this->ignoreIndexClause(
                                                implode( ',', (array)$ignore_index[$alias] )
                                        );
 
                                $ret[] = $tableClause;
                        } else {
-                               $tableClause = $this->tableNameWithAlias( $table, $alias );
+                               $tableClause = $joinedTable;
 
                                $ret[] = $tableClause;
                        }
index 4ebc623..53beb65 100644 (file)
@@ -440,8 +440,14 @@ class DatabaseMssql extends Database {
                if ( strpos( $sql, 'MAX(' ) !== false || strpos( $sql, 'MIN(' ) !== false ) {
                        $bitColumns = [];
                        if ( is_array( $table ) ) {
-                               foreach ( $table as $t ) {
-                                       $bitColumns += $this->getBitColumns( $this->tableName( $t ) );
+                               $tables = $table;
+                               while ( $tables ) {
+                                       $t = array_pop( $tables );
+                                       if ( is_array( $t ) ) {
+                                               $tables = array_merge( $tables, $t );
+                                       } else {
+                                               $bitColumns += $this->getBitColumns( $this->tableName( $t ) );
+                                       }
                                }
                        } else {
                                $bitColumns = $this->getBitColumns( $this->tableName( $table ) );
@@ -1065,7 +1071,6 @@ class DatabaseMssql extends Database {
         */
        public function strencode( $s ) {
                // Should not be called by us
-
                return str_replace( "'", "''", $s );
        }
 
index d81d909..58b0926 100644 (file)
@@ -203,7 +203,7 @@ class DatabaseMysql extends DatabaseMysqlBase {
        protected function mysqlRealEscapeString( $s ) {
                $conn = $this->getBindingHandle();
 
-               return mysql_real_escape_string( $s, $conn );
+               return mysql_real_escape_string( (string)$s, $conn );
        }
 }
 
index 5312a3d..e0ff475 100644 (file)
@@ -1044,7 +1044,8 @@ abstract class DatabaseMysqlBase extends Database {
                        return true;
                }
 
-               $this->queryLogger->warning( __METHOD__ . " failed to acquire lock '$lockName'\n" );
+               $this->queryLogger->warning( __METHOD__ . " failed to acquire lock '{lockname}'",
+                       [ 'lockname' => $lockName ] );
 
                return false;
        }
index 4c3cbdd..c1a5698 100644 (file)
@@ -316,7 +316,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        protected function mysqlRealEscapeString( $s ) {
                $conn = $this->getBindingHandle();
 
-               return $conn->real_escape_string( $s );
+               return $conn->real_escape_string( (string)$s );
        }
 
        /**
index 5719a1f..8c21d72 100644 (file)
@@ -532,26 +532,30 @@ __INDEXATTR__;
                                unset( $options[$forUpdateKey] );
                                $options['FOR UPDATE'] = [];
 
-                               // All tables not in $join_conds are good
-                               foreach ( $table as $alias => $name ) {
-                                       if ( is_numeric( $alias ) ) {
+                               $toCheck = $table;
+                               reset( $toCheck );
+                               while ( $toCheck ) {
+                                       $alias = key( $toCheck );
+                                       $name = $toCheck[$alias];
+                                       unset( $toCheck[$alias] );
+
+                                       $hasAlias = !is_numeric( $alias );
+                                       if ( !$hasAlias && is_string( $name ) ) {
                                                $alias = $name;
                                        }
-                                       if ( !isset( $join_conds[$alias] ) ) {
-                                               $options['FOR UPDATE'][] = $alias;
-                                       }
-                               }
 
-                               foreach ( $join_conds as $table_cond => $join_cond ) {
-                                       if ( 0 === preg_match( '/^(?:LEFT|RIGHT|FULL)(?: OUTER)? JOIN$/i', $join_cond[0] ) ) {
-                                               $options['FOR UPDATE'][] = $table_cond;
+                                       if ( !isset( $join_conds[$alias] ) ||
+                                               !preg_match( '/^(?:LEFT|RIGHT|FULL)(?: OUTER)? JOIN$/i', $join_conds[$alias][0] )
+                                       ) {
+                                               if ( is_array( $name ) ) {
+                                                       // It's a parenthesized group, process all the tables inside the group.
+                                                       $toCheck = array_merge( $toCheck, $name );
+                                               } else {
+                                                       // Quote alias names so $this->tableName() won't mangle them
+                                                       $options['FOR UPDATE'][] = $hasAlias ? $this->addIdentifierQuotes( $alias ) : $alias;
+                                               }
                                        }
                                }
-
-                               // Quote alias names so $this->tableName() won't mangle them
-                               $options['FOR UPDATE'] = array_map( function ( $name ) use ( $table ) {
-                                       return isset( $table[$name] ) ? $this->addIdentifierQuotes( $name ) : $name;
-                               }, $options['FOR UPDATE'] );
                        }
 
                        if ( isset( $options['ORDER BY'] ) && $options['ORDER BY'] == 'NULL' ) {
@@ -1175,7 +1179,7 @@ SQL;
 
        public function strencode( $s ) {
                // Should not be called by us
-               return pg_escape_string( $this->getBindingHandle(), $s );
+               return pg_escape_string( $this->getBindingHandle(), (string)$s );
        }
 
        public function addQuotes( $s ) {
@@ -1196,7 +1200,7 @@ SQL;
                        return 'DEFAULT';
                }
 
-               return "'" . pg_escape_string( $conn, $s ) . "'";
+               return "'" . pg_escape_string( $conn, (string)$s ) . "'";
        }
 
        /**
index 870fc3e..2b06607 100644 (file)
@@ -790,7 +790,7 @@ class DatabaseSqlite extends Database {
                        return "x'" . bin2hex( $s->fetch() ) . "'";
                } elseif ( is_bool( $s ) ) {
                        return (int)$s;
-               } elseif ( strpos( $s, "\0" ) !== false ) {
+               } elseif ( strpos( (string)$s, "\0" ) !== false ) {
                        // SQLite doesn't support \0 in strings, so use the hex representation as a workaround.
                        // This is a known limitation of SQLite's mprintf function which PDO
                        // should work around, but doesn't. I have reported this to php.net as bug #63419:
@@ -806,9 +806,9 @@ class DatabaseSqlite extends Database {
                                'For consistency all binary data should have been ' .
                                'first processed with self::encodeBlob()'
                        );
-                       return "x'" . bin2hex( $s ) . "'";
+                       return "x'" . bin2hex( (string)$s ) . "'";
                } else {
-                       return $this->mConn->quote( $s );
+                       return $this->mConn->quote( (string)$s );
                }
        }
 
index 67e8e85..868c2d4 100644 (file)
@@ -620,6 +620,19 @@ interface IDatabase {
         * This includes the user table in the query, with the alias "a" available
         * for use in field names (e.g. a.user_name).
         *
+        * Joins using parentheses for grouping (since MediaWiki 1.31) may be
+        * constructed using nested arrays. For example,
+        *
+        *    [ 'tableA', 'nestedB' => [ 'tableB', 'b2' => 'tableB2' ] ]
+        *
+        * along with `$join_conds` like
+        *
+        *    [ 'b2' => [ 'JOIN', 'b_id = b2_id' ], 'nestedB' => [ 'LEFT JOIN', 'b_a = a_id' ] ]
+        *
+        * will produce SQL something like
+        *
+        *    FROM tableA LEFT JOIN (tableB JOIN tableB2 AS b2 ON (b_id = b2_id)) ON (b_a = a_id)
+        *
         * All of the table names given here are automatically run through
         * Database::tableName(), which causes the table prefix (if any) to be
         * added, and various other table name mappings to be performed.
index 8393e2b..6bb8945 100644 (file)
@@ -568,7 +568,8 @@ class LoadBalancer implements ILoadBalancer {
                        $knownReachedPos->hasReached( $this->mWaitForPos )
                ) {
                        $this->replLogger->debug( __METHOD__ .
-                               ": replica DB $server known to be caught up (pos >= $knownReachedPos)." );
+                               ': replica DB {dbserver} known to be caught up (pos >= $knownReachedPos).',
+                               [ 'dbserver' => $server ] );
                        return true;
                }
 
@@ -576,13 +577,15 @@ class LoadBalancer implements ILoadBalancer {
                $conn = $this->getAnyOpenConnection( $index );
                if ( !$conn ) {
                        if ( !$open ) {
-                               $this->replLogger->debug( __METHOD__ . ": no connection open for $server" );
+                               $this->replLogger->debug( __METHOD__ . ': no connection open for {dbserver}',
+                                       [ 'dbserver' => $server ] );
 
                                return false;
                        } else {
                                $conn = $this->openConnection( $index, self::DOMAIN_ANY );
                                if ( !$conn ) {
-                                       $this->replLogger->warning( __METHOD__ . ": failed to connect to $server" );
+                                       $this->replLogger->warning( __METHOD__ . ': failed to connect to {dbserver}',
+                                               [ 'dbserver' => $server ] );
 
                                        return false;
                                }
@@ -592,15 +595,16 @@ class LoadBalancer implements ILoadBalancer {
                        }
                }
 
-               $this->replLogger->info( __METHOD__ . ": Waiting for replica DB $server to catch up..." );
+               $this->replLogger->info( __METHOD__ . ': Waiting for replica DB {dbserver} to catch up...',
+                       [ 'dbserver' => $server ] );
                $timeout = $timeout ?: $this->mWaitTimeout;
                $result = $conn->masterPosWait( $this->mWaitForPos, $timeout );
 
                if ( $result == -1 || is_null( $result ) ) {
                        // Timed out waiting for replica DB, use master instead
                        $this->replLogger->warning(
-                               __METHOD__ . ": Timed out waiting on {host} pos {$this->mWaitForPos}",
-                               [ 'host' => $server ]
+                               __METHOD__ . ': Timed out waiting on {host} pos {pos}',
+                               [ 'host' => $server, 'pos' => $this->mWaitForPos ]
                        );
                        $ok = false;
                } else {
@@ -1636,16 +1640,18 @@ class LoadBalancer implements ILoadBalancer {
                if ( $pos instanceof DBMasterPos ) {
                        $result = $conn->masterPosWait( $pos, $timeout );
                        if ( $result == -1 || is_null( $result ) ) {
-                               $msg = __METHOD__ . ": Timed out waiting on {$conn->getServer()} pos {$pos}";
-                               $this->replLogger->warning( "$msg" );
+                               $msg = __METHOD__ . ': Timed out waiting on {host} pos {pos}';
+                               $this->replLogger->warning( $msg,
+                                       [ 'host' => $conn->getServer(), 'pos' => $pos ] );
                                $ok = false;
                        } else {
-                               $this->replLogger->info( __METHOD__ . ": Done" );
+                               $this->replLogger->info( __METHOD__ . ': Done' );
                                $ok = true;
                        }
                } else {
                        $ok = false; // something is misconfigured
-                       $this->replLogger->error( "Could not get master pos for {$conn->getServer()}." );
+                       $this->replLogger->error( 'Could not get master pos for {host}',
+                               [ 'host' => $conn->getServer() ] );
                }
 
                return $ok;
index c46acc6..0cc1466 100644 (file)
@@ -388,7 +388,7 @@ class XMPReader implements LoggerAwareInterface {
                        }
                } catch ( Exception $e ) {
                        $this->logger->warning(
-                               '{method} Exception caught while parsing: ' . $e->getMessage(),
+                               '{method} {exception}',
                                [
                                        'method' => __METHOD__,
                                        'exception' => $e,
@@ -420,7 +420,8 @@ class XMPReader implements LoggerAwareInterface {
                        || $this->results['xmp-special']['HasExtendedXMP'] !== $guid
                ) {
                        $this->logger->info( __METHOD__ .
-                               " Ignoring XMPExtended block due to wrong guid (guid= '$guid')" );
+                               " Ignoring XMPExtended block due to wrong guid (guid= '{guid}')",
+                               [ 'guid' => 'guid' ] );
 
                        return false;
                }
@@ -954,8 +955,8 @@ class XMPReader implements LoggerAwareInterface {
                } else {
                        // something else we don't recognize, like a qualifier maybe.
                        $this->logger->info( __METHOD__ .
-                               " Encountered element <$elm> where only expecting character data as value of " .
-                               $this->curItem[0] );
+                               " Encountered element <{element}> where only expecting character data as value of {curitem}",
+                               [ 'element' => $elm, 'curitem' => $this->curItem[0] ] );
                        array_unshift( $this->mode, self::MODE_IGNORE );
                        array_unshift( $this->curItem, $elm );
                }
@@ -1005,8 +1006,10 @@ class XMPReader implements LoggerAwareInterface {
                                        // a child of a struct), then something weird is
                                        // happening, so ignore this element and its children.
 
-                                       $this->logger->warning( "Encountered <$ns:$tag> outside"
-                                               . " of its expected parent. Ignoring." );
+                                       $this->logger->warning(
+                                               'Encountered <{element}> outside of its expected parent. Ignoring.',
+                                               [ 'element' => "$ns:$tag" ]
+                                       );
 
                                        array_unshift( $this->mode, self::MODE_IGNORE );
                                        array_unshift( $this->curItem, $ns . ' ' . $tag );
@@ -1027,7 +1030,8 @@ class XMPReader implements LoggerAwareInterface {
                                }
                        } else {
                                // This element is not on our list of allowed elements so ignore.
-                               $this->logger->debug( __METHOD__ . " Ignoring unrecognized element <$ns:$tag>." );
+                               $this->logger->debug( __METHOD__ . ' Ignoring unrecognized element <{element}>.',
+                                       [ 'element' => "$ns:$tag" ] );
                                array_unshift( $this->mode, self::MODE_IGNORE );
                                array_unshift( $this->curItem, $ns . ' ' . $tag );
 
index 1ed18cd..a5af026 100644 (file)
@@ -22,8 +22,6 @@
  * @since 1.25
  */
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * This class formats block log entries.
  *
@@ -99,7 +97,7 @@ class BlockLogFormatter extends LogFormatter {
 
        public function getActionLinks() {
                $subtype = $this->entry->getSubtype();
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               $linkRenderer = $this->getLinkRenderer();
                if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
                        || !( $subtype === 'block' || $subtype === 'reblock' )
                        || !$this->context->getUser()->isAllowed( 'block' )
index 861ea30..e05357c 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 
-use MediaWiki\MediaWikiServices;
-
 class ContentModelLogFormatter extends LogFormatter {
        protected function getMessageParameters() {
                $lang = $this->context->getLanguage();
@@ -20,7 +18,7 @@ class ContentModelLogFormatter extends LogFormatter {
                }
 
                $params = $this->extractParameters();
-               $revert = MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink(
+               $revert = $this->getLinkRenderer()->makeKnownLink(
                        SpecialPage::getTitleFor( 'ChangeContentModel' ),
                        $this->msg( 'logentry-contentmodel-change-revertlink' )->text(),
                        [],
index ceb0052..ef00634 100644 (file)
@@ -23,8 +23,6 @@
  * @since 1.22
  */
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * This class formats delete log entries.
  *
@@ -135,7 +133,7 @@ class DeleteLogFormatter extends LogFormatter {
 
        public function getActionLinks() {
                $user = $this->context->getUser();
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               $linkRenderer = $this->getLinkRenderer();
                if ( !$user->isAllowed( 'deletedhistory' )
                        || $this->entry->isDeleted( LogPage::DELETED_ACTION )
                ) {
index 8b51932..bf35d78 100644 (file)
@@ -383,7 +383,7 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
 
        public function getComment() {
                return CommentStore::newKey( 'rc_comment' )
-                       // Legacy because the row probably used RecentChange::selectFields()
+                       // Legacy because the row may have used RecentChange::selectFields()
                        ->getCommentLegacy( wfGetDB( DB_REPLICA ), $this->row )->text;
        }
 
index 0f1e1f7..b28bb7d 100644 (file)
@@ -261,19 +261,15 @@ class LogFormatter {
                                                $text = wfMessage( 'undeletedarticle' )
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
-                                       // @codingStandardsIgnoreStart Long line
                                        //case 'revision': // Revision deletion
                                        //case 'event': // Log deletion
                                        // see https://github.com/wikimedia/mediawiki/commit/a9c243b7b5289dad204278dbe7ed571fd914e395
                                        //default:
-                                       // @codingStandardsIgnoreEnd
                                }
                                break;
 
                        case 'patrol':
-                               // @codingStandardsIgnoreStart Long line
                                // https://github.com/wikimedia/mediawiki/commit/1a05f8faf78675dc85984f27f355b8825b43efff
-                               // @codingStandardsIgnoreEnd
                                // Create a diff link to the patrolled revision
                                if ( $entry->getSubtype() === 'patrol' ) {
                                        $diffLink = htmlspecialchars(
@@ -644,12 +640,13 @@ class LogFormatter {
         * @return string
         */
        protected function makePageLink( Title $title = null, $parameters = [], $html = null ) {
+               if ( !$title instanceof Title ) {
+                       throw new MWException( 'Expected title, got null' );
+               }
                if ( !$this->plaintext ) {
-                       $link = Linker::link( $title, $html, [], $parameters );
+                       $html = $html !== null ? new HtmlArmor( $html ) : $html;
+                       $link = $this->getLinkRenderer()->makeLink( $title, $html, [], $parameters );
                } else {
-                       if ( !$title instanceof Title ) {
-                               throw new MWException( "Expected title, got null" );
-                       }
                        $link = '[[' . $title->getPrefixedText() . ']]';
                }
 
index f79fcfa..df432e1 100644 (file)
@@ -97,13 +97,11 @@ class LogPager extends ReverseChronologicalPager {
                        return $filters;
                }
                foreach ( $wgFilterLogTypes as $type => $default ) {
-                       // Avoid silly filtering
-                       if ( $type !== 'patrol' || $this->getUser()->useNPPatrol() ) {
-                               $hide = $this->getRequest()->getInt( "hide_{$type}_log", $default );
-                               $filters[$type] = $hide;
-                               if ( $hide ) {
-                                       $this->mConds[] = 'log_type != ' . $this->mDb->addQuotes( $type );
-                               }
+                       $hide = $this->getRequest()->getInt( "hide_{$type}_log", $default );
+
+                       $filters[$type] = $hide;
+                       if ( $hide ) {
+                               $this->mConds[] = 'log_type != ' . $this->mDb->addQuotes( $type );
                        }
                }
 
index b0edd4c..8775097 100644 (file)
@@ -54,9 +54,9 @@ class MergeLogFormatter extends LogFormatter {
 
                // Show unmerge link
                $params = $this->extractParameters();
-               $revert = Linker::linkKnown(
+               $revert = $this->getLinkRenderer()->makeKnownLink(
                        SpecialPage::getTitleFor( 'MergeHistory' ),
-                       $this->msg( 'revertmerge' )->escaped(),
+                       $this->msg( 'revertmerge' )->text(),
                        [],
                        [
                                'target' => $params[3],
index afbf8e9..43ca0ea 100644 (file)
@@ -71,9 +71,9 @@ class MoveLogFormatter extends LogFormatter {
                        return '';
                }
 
-               $revert = Linker::linkKnown(
+               $revert = $this->getLinkRenderer()->makeKnownLink(
                        SpecialPage::getTitleFor( 'Movepage' ),
-                       $this->msg( 'revertmove' )->escaped(),
+                       $this->msg( 'revertmove' )->text(),
                        [],
                        [
                                'wpOldTitle' => $destTitle->getPrefixedDBkey(),
index bbd8bad..894f59b 100644 (file)
@@ -22,7 +22,6 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  * @since 1.22
  */
-use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats patrol log entries.
@@ -55,8 +54,7 @@ class PatrolLogFormatter extends LogFormatter {
                                'oldid' => $oldid,
                                'diff' => 'prev'
                        ];
-                       $revlink = MediaWikiServices::getInstance()->getLinkRenderer()->makeLink(
-                               $target, $revision, [], $query );
+                       $revlink = $this->getLinkRenderer()->makeLink( $target, $revision, [], $query );
                } else {
                        $revlink = htmlspecialchars( $revision );
                }
index 9e5eea5..64ec626 100644 (file)
@@ -21,7 +21,6 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  * @since 1.26
  */
-use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats protect log entries.
@@ -78,7 +77,7 @@ class ProtectLogFormatter extends LogFormatter {
        }
 
        public function getActionLinks() {
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               $linkRenderer = $this->getLinkRenderer();
                $subtype = $this->entry->getSubtype();
                if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
                        || $subtype === 'move_prot' // the move log entry has the right action link
index 3370e5b..6d6d345 100644 (file)
@@ -332,12 +332,15 @@ class ObjectCache {
         * @throws UnexpectedValueException
         */
        public static function newWANCacheFromParams( array $params ) {
-               $erGroup = MediaWikiServices::getInstance()->getEventRelayerGroup();
+               $services = MediaWikiServices::getInstance();
+
+               $erGroup = $services->getEventRelayerGroup();
                foreach ( $params['channels'] as $action => $channel ) {
                        $params['relayers'][$action] = $erGroup->getRelayer( $channel );
                        $params['channels'][$action] = $channel;
                }
                $params['cache'] = self::newFromParams( $params['store'] );
+               $params['stats'] = $services->getStatsdDataFactory();
                if ( isset( $params['loggroup'] ) ) {
                        $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
                } else {
index b91bd9a..c9dc273 100644 (file)
@@ -590,7 +590,7 @@ class Article implements Page {
                                                        $outputPage->setRobotPolicy( 'noindex,nofollow' );
 
                                                        $errortext = $error->getWikiText( false, 'view-pool-error' );
-                                                       $outputPage->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
+                                                       $outputPage->addWikiText( Html::errorBox( $errortext ) );
                                                }
                                                # Connection or timeout error
                                                return;
@@ -1179,7 +1179,8 @@ class Article implements Page {
                $cache = MediaWikiServices::getInstance()->getMainObjectStash();
                $key = $cache->makeKey( 'page-recent-delete', md5( $title->getPrefixedText() ) );
                $loggedIn = $this->getContext()->getUser()->isLoggedIn();
-               if ( $loggedIn || $cache->get( $key ) ) {
+               $sessionExists = $this->getContext()->getRequest()->getSession()->isPersistent();
+               if ( $loggedIn || $cache->get( $key ) || $sessionExists ) {
                        $logTypes = [ 'delete', 'move', 'protect' ];
 
                        $dbr = wfGetDB( DB_REPLICA );
@@ -1196,7 +1197,7 @@ class Article implements Page {
                                        'lim' => 10,
                                        'conds' => $conds,
                                        'showIfEmpty' => false,
-                                       'msgKey' => [ $loggedIn
+                                       'msgKey' => [ $loggedIn || $sessionExists
                                                ? 'moveddeleted-notice'
                                                : 'moveddeleted-notice-recent'
                                        ]
@@ -2116,16 +2117,6 @@ class Article implements Page {
                return $this->mPage->doPurge();
        }
 
-       /**
-        * Call to WikiPage function for backwards compatibility.
-        * @see WikiPage::getLastPurgeTimestamp
-        * @deprecated since 1.29
-        */
-       public function getLastPurgeTimestamp() {
-               wfDeprecated( __METHOD__, '1.29' );
-               return $this->mPage->getLastPurgeTimestamp();
-       }
-
        /**
         * Call to WikiPage function for backwards compatibility.
         * @see WikiPage::doViewUpdates
@@ -2648,45 +2639,5 @@ class Article implements Page {
                return $handler->getAutoDeleteReason( $title, $hasHistory );
        }
 
-       /**
-        * @return array
-        *
-        * @deprecated since 1.24, use WikiPage::selectFields() instead
-        */
-       public static function selectFields() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return WikiPage::selectFields();
-       }
-
-       /**
-        * @param Title $title
-        *
-        * @deprecated since 1.24, use WikiPage::onArticleCreate() instead
-        */
-       public static function onArticleCreate( $title ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               WikiPage::onArticleCreate( $title );
-       }
-
-       /**
-        * @param Title $title
-        *
-        * @deprecated since 1.24, use WikiPage::onArticleDelete() instead
-        */
-       public static function onArticleDelete( $title ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               WikiPage::onArticleDelete( $title );
-       }
-
-       /**
-        * @param Title $title
-        *
-        * @deprecated since 1.24, use WikiPage::onArticleEdit() instead
-        */
-       public static function onArticleEdit( $title ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               WikiPage::onArticleEdit( $title );
-       }
-
        // ******
 }
index 935d299..c4baae4 100644 (file)
@@ -966,7 +966,7 @@ EOT
                                $fromSrc = $this->getContext()->msg(
                                        'shared-repo-from',
                                        $file->getRepo()->getDisplayName()
-                               )->text();
+                               )->escaped();
                        }
                        $out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
                }
index af936cc..c03d6b2 100644 (file)
@@ -231,12 +231,14 @@ class PageArchive {
                }
 
                $dbr = wfGetDB( DB_REPLICA );
+               $fileQuery = ArchivedFile::getQueryInfo();
                return $dbr->select(
-                       'filearchive',
-                       ArchivedFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        [ 'fa_name' => $this->title->getDBkey() ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'fa_timestamp DESC' ]
+                       [ 'ORDER BY' => 'fa_timestamp DESC' ],
+                       $fileQuery['joins']
                );
        }
 
@@ -249,34 +251,11 @@ class PageArchive {
         */
        public function getRevision( $timestamp ) {
                $dbr = wfGetDB( DB_REPLICA );
-               $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin();
-
-               $tables = [ 'archive' ] + $commentQuery['tables'];
-
-               $fields = [
-                       'ar_rev_id',
-                       'ar_text',
-                       'ar_user',
-                       'ar_user_text',
-                       'ar_timestamp',
-                       'ar_minor_edit',
-                       'ar_flags',
-                       'ar_text_id',
-                       'ar_deleted',
-                       'ar_len',
-                       'ar_sha1',
-               ] + $commentQuery['fields'];
-
-               if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
-                       $fields[] = 'ar_content_format';
-                       $fields[] = 'ar_content_model';
-               }
-
-               $join_conds = [] + $commentQuery['joins'];
+               $arQuery = Revision::getArchiveQueryInfo();
 
                $row = $dbr->selectRow(
-                       $tables,
-                       $fields,
+                       $arQuery['tables'],
+                       $arQuery['fields'],
                        [
                                'ar_namespace' => $this->title->getNamespace(),
                                'ar_title' => $this->title->getDBkey(),
@@ -284,7 +263,7 @@ class PageArchive {
                        ],
                        __METHOD__,
                        [],
-                       $join_conds
+                       $arQuery['joins']
                );
 
                if ( $row ) {
@@ -785,7 +764,9 @@ class PageArchive {
                        Hooks::run( 'ArticleUndelete',
                                [ &$this->title, $created, $comment, $oldPageId, $restoredPages ] );
                        if ( $this->title->getNamespace() == NS_FILE ) {
-                               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->title, 'imagelinks' ) );
+                               DeferredUpdates::addUpdate(
+                                       new HTMLCacheUpdate( $this->title, 'imagelinks', 'file-restore' )
+                               );
                        }
                }
 
index 972a397..4c2ebdc 100644 (file)
@@ -173,7 +173,9 @@ class WikiFilePage extends WikiPage {
 
                if ( $this->mFile->exists() ) {
                        wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
-                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, 'imagelinks' ) );
+                       DeferredUpdates::addUpdate(
+                               new HTMLCacheUpdate( $this->mTitle, 'imagelinks', 'file-purge' )
+                       );
                } else {
                        wfDebug( 'ImagePage::doPurge no image for '
                                . $this->mFile->getName() . "; limiting purge to cache only\n" );
index d0a04c0..8b34928 100644 (file)
@@ -88,12 +88,6 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected $mLinksUpdated = '19700101000000';
 
-       /** @deprecated since 1.29. Added in 1.28 for partial purging, no longer used. */
-       const PURGE_CDN_CACHE = 1;
-       const PURGE_CLUSTER_PCACHE = 2;
-       const PURGE_GLOBAL_PCACHE = 4;
-       const PURGE_ALL = 7;
-
        /**
         * Constructor and clear the article
         * @param Title $title Reference to a Title object.
@@ -164,8 +158,11 @@ class WikiPage implements Page, IDBAccessObject {
 
                $from = self::convertSelectType( $from );
                $db = wfGetDB( $from === self::READ_LATEST ? DB_MASTER : DB_REPLICA );
+               $pageQuery = self::getQueryInfo();
                $row = $db->selectRow(
-                       'page', self::selectFields(), [ 'page_id' => $id ], __METHOD__ );
+                       $pageQuery['tables'], $pageQuery['fields'], [ 'page_id' => $id ], __METHOD__,
+                       [], $pageQuery['joins']
+               );
                if ( !$row ) {
                        return null;
                }
@@ -283,11 +280,14 @@ class WikiPage implements Page, IDBAccessObject {
         * Return the list of revision fields that should be selected to create
         * a new page.
         *
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        public static function selectFields() {
                global $wgContentHandlerUseDB, $wgPageLanguageUseDB;
 
+               wfDeprecated( __METHOD__, '1.31' );
+
                $fields = [
                        'page_id',
                        'page_namespace',
@@ -313,6 +313,47 @@ class WikiPage implements Page, IDBAccessObject {
                return $fields;
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new page object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo() {
+               global $wgContentHandlerUseDB, $wgPageLanguageUseDB;
+
+               $ret = [
+                       'tables' => [ 'page' ],
+                       'fields' => [
+                               'page_id',
+                               'page_namespace',
+                               'page_title',
+                               'page_restrictions',
+                               'page_is_redirect',
+                               'page_is_new',
+                               'page_random',
+                               'page_touched',
+                               'page_links_updated',
+                               'page_latest',
+                               'page_len',
+                       ],
+                       'joins' => [],
+               ];
+
+               if ( $wgContentHandlerUseDB ) {
+                       $ret['fields'][] = 'page_content_model';
+               }
+
+               if ( $wgPageLanguageUseDB ) {
+                       $ret['fields'][] = 'page_lang';
+               }
+
+               return $ret;
+       }
+
        /**
         * Fetch a page record with the given conditions
         * @param IDatabase $dbr
@@ -321,14 +362,23 @@ class WikiPage implements Page, IDBAccessObject {
         * @return object|bool Database result resource, or false on failure
         */
        protected function pageData( $dbr, $conditions, $options = [] ) {
-               $fields = self::selectFields();
+               $pageQuery = self::getQueryInfo();
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $wikiPage = $this;
 
-               Hooks::run( 'ArticlePageDataBefore', [ &$wikiPage, &$fields ] );
+               Hooks::run( 'ArticlePageDataBefore', [
+                       &$wikiPage, &$pageQuery['fields'], &$pageQuery['tables'], &$pageQuery['joins']
+               ] );
 
-               $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__, $options );
+               $row = $dbr->selectRow(
+                       $pageQuery['tables'],
+                       $pageQuery['fields'],
+                       $conditions,
+                       __METHOD__,
+                       $options,
+                       $pageQuery['joins']
+               );
 
                Hooks::run( 'ArticlePageDataAfter', [ &$wikiPage, &$row ] );
 
@@ -512,7 +562,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $cache = ObjectCache::getMainWANInstance();
 
                        return $cache->getWithSetCallback(
-                               $cache->makeKey( 'page', 'content-model', $this->getLatest() ),
+                               $cache->makeKey( 'page-content-model', $this->getLatest() ),
                                $cache::TTL_MONTH,
                                function () {
                                        $rev = $this->getRevision();
@@ -1134,18 +1184,6 @@ class WikiPage implements Page, IDBAccessObject {
                return true;
        }
 
-       /**
-        * Get the last time a user explicitly purged the page via action=purge
-        *
-        * @return string|bool TS_MW timestamp or false
-        * @since 1.28
-        * @deprecated since 1.29. It will always return false.
-        */
-       public function getLastPurgeTimestamp() {
-               wfDeprecated( __METHOD__, '1.29' );
-               return false;
-       }
-
        /**
         * Insert a new empty page record for this article.
         * This *must* be followed up by creating a revision
@@ -1667,27 +1705,27 @@ class WikiPage implements Page, IDBAccessObject {
                        throw new MWException( "Could not find text for current revision {$oldid}." );
                }
 
-               // @TODO: pass content object?!
-               $revision = new Revision( [
-                       'page'       => $this->getId(),
-                       'title'      => $this->mTitle, // for determining the default content model
-                       'comment'    => $summary,
-                       'minor_edit' => $meta['minor'],
-                       'text'       => $meta['serialized'],
-                       'len'        => $newsize,
-                       'parent_id'  => $oldid,
-                       'user'       => $user->getId(),
-                       'user_text'  => $user->getName(),
-                       'timestamp'  => $now,
-                       'content_model' => $content->getModel(),
-                       'content_format' => $meta['serialFormat'],
-               ] );
-
                $changed = !$content->equals( $oldContent );
 
                $dbw = wfGetDB( DB_MASTER );
 
                if ( $changed ) {
+                       // @TODO: pass content object?!
+                       $revision = new Revision( [
+                               'page'       => $this->getId(),
+                               'title'      => $this->mTitle, // for determining the default content model
+                               'comment'    => $summary,
+                               'minor_edit' => $meta['minor'],
+                               'text'       => $meta['serialized'],
+                               'len'        => $newsize,
+                               'parent_id'  => $oldid,
+                               'user'       => $user->getId(),
+                               'user_text'  => $user->getName(),
+                               'timestamp'  => $now,
+                               'content_model' => $content->getModel(),
+                               'content_format' => $meta['serialFormat'],
+                       ] );
+
                        $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                        $status->merge( $prepStatus );
                        if ( !$status->isOK() ) {
@@ -1753,11 +1791,9 @@ class WikiPage implements Page, IDBAccessObject {
                } else {
                        // T34948: revision ID must be set to page {{REVISIONID}} and
                        // related variables correctly. Likewise for {{REVISIONUSER}} (T135261).
-                       $revision->setId( $this->getLatest() );
-                       $revision->setUserIdAndName(
-                               $this->getUser( Revision::RAW ),
-                               $this->getUserText( Revision::RAW )
-                       );
+                       // Since we don't insert a new revision into the database, the least
+                       // error-prone way is to reuse given old revision.
+                       $revision = $meta['oldRevision'];
                }
 
                if ( $changed ) {
@@ -2171,6 +2207,7 @@ class WikiPage implements Page, IDBAccessObject {
                                $this->getTitle(), null, $recursive, $editInfo->output
                        );
                        foreach ( $updates as $update ) {
+                               $update->setCause( 'edit-page', $user->getName() );
                                if ( $update instanceof LinksUpdate ) {
                                        $update->setRevision( $revision );
                                        $update->setTriggeringUser( $user );
@@ -2805,13 +2842,13 @@ class WikiPage implements Page, IDBAccessObject {
                $revCommentStore = new CommentStore( 'rev_comment' );
                $arCommentStore = new CommentStore( 'ar_comment' );
 
-               $fields = Revision::selectFields();
+               $revQuery = Revision::getQueryInfo();
                $bitfield = false;
 
                // Bitfields to further suppress the content
                if ( $suppress ) {
                        $bitfield = Revision::SUPPRESSED_ALL;
-                       $fields = array_diff( $fields, [ 'rev_deleted' ] );
+                       $revQuery['fields'] = array_diff( $revQuery['fields'], [ 'rev_deleted' ] );
                }
 
                // For now, shunt the revision data into the archive table.
@@ -2822,14 +2859,13 @@ class WikiPage implements Page, IDBAccessObject {
                // the rev_deleted field, which is reserved for this purpose.
 
                // Get all of the page revisions
-               $commentQuery = $revCommentStore->getJoin();
                $res = $dbw->select(
-                       [ 'revision' ] + $commentQuery['tables'],
-                       $fields + $commentQuery['fields'],
+                       $revQuery['tables'],
+                       $revQuery['fields'],
                        [ 'rev_page' => $id ],
                        __METHOD__,
                        'FOR UPDATE',
-                       $commentQuery['joins']
+                       $revQuery['joins']
                );
 
                // Build their equivalent archive rows
@@ -2913,7 +2949,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                $dbw->endAtomic( __METHOD__ );
 
-               $this->doDeleteUpdates( $id, $content, $revision );
+               $this->doDeleteUpdates( $id, $content, $revision, $user );
 
                Hooks::run( 'ArticleDeleteComplete', [
                        &$wikiPageBeforeDelete,
@@ -2964,8 +3000,11 @@ class WikiPage implements Page, IDBAccessObject {
         *   the required updates. This may be needed because $this->getContent()
         *   may already return null when the page proper was deleted.
         * @param Revision|null $revision The latest page revision
+        * @param User|null $user The user that caused the deletion
         */
-       public function doDeleteUpdates( $id, Content $content = null, Revision $revision = null ) {
+       public function doDeleteUpdates(
+               $id, Content $content = null, Revision $revision = null, User $user = null
+       ) {
                try {
                        $countable = $this->isCountable();
                } catch ( Exception $ex ) {
@@ -2983,12 +3022,14 @@ class WikiPage implements Page, IDBAccessObject {
                        DeferredUpdates::addUpdate( $update );
                }
 
+               $causeAgent = $user ? $user->getName() : 'unknown';
                // Reparse any pages transcluding this page
-               LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
-
+               LinksUpdate::queueRecursiveJobsForTable(
+                       $this->mTitle, 'templatelinks', 'delete-page', $causeAgent );
                // Reparse any pages including this image
                if ( $this->mTitle->getNamespace() == NS_FILE ) {
-                       LinksUpdate::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
+                       LinksUpdate::queueRecursiveJobsForTable(
+                               $this->mTitle, 'imagelinks', 'delete-page', $causeAgent );
                }
 
                // Clear caches
@@ -3276,7 +3317,9 @@ class WikiPage implements Page, IDBAccessObject {
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'templatelinks', 'page-create' )
+               );
 
                if ( $title->getNamespace() == NS_CATEGORY ) {
                        // Load the Category object, which will schedule a job to create
@@ -3314,7 +3357,9 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Images
                if ( $title->getNamespace() == NS_FILE ) {
-                       DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'imagelinks' ) );
+                       DeferredUpdates::addUpdate(
+                               new HTMLCacheUpdate( $title, 'imagelinks', 'page-delete' )
+                       );
                }
 
                // User talk pages
@@ -3337,10 +3382,14 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public static function onArticleEdit( Title $title, Revision $revision = null ) {
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'templatelinks', 'page-edit' )
+               );
 
                // Invalidate the caches of all pages which redirect here
-               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'redirect' ) );
+               DeferredUpdates::addUpdate(
+                       new HTMLCacheUpdate( $title, 'redirect', 'page-edit' )
+               );
 
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
index 49f2ce1..3548da9 100644 (file)
@@ -2504,10 +2504,10 @@ class Parser {
                                $value = '|';
                                break;
                        case 'currentmonth':
-                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'm' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'm' ), true );
                                break;
                        case 'currentmonth1':
-                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'n' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'n' ), true );
                                break;
                        case 'currentmonthname':
                                $value = $pageLang->getMonthName( MWTimestamp::getInstance( $ts )->format( 'n' ) );
@@ -2519,16 +2519,16 @@ class Parser {
                                $value = $pageLang->getMonthAbbreviation( MWTimestamp::getInstance( $ts )->format( 'n' ) );
                                break;
                        case 'currentday':
-                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'j' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'j' ), true );
                                break;
                        case 'currentday2':
-                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'd' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'd' ), true );
                                break;
                        case 'localmonth':
-                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'm' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'm' ), true );
                                break;
                        case 'localmonth1':
-                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'n' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'n' ), true );
                                break;
                        case 'localmonthname':
                                $value = $pageLang->getMonthName( MWTimestamp::getLocalInstance( $ts )->format( 'n' ) );
@@ -2540,10 +2540,10 @@ class Parser {
                                $value = $pageLang->getMonthAbbreviation( MWTimestamp::getLocalInstance( $ts )->format( 'n' ) );
                                break;
                        case 'localday':
-                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'j' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'j' ), true );
                                break;
                        case 'localday2':
-                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'd' ) );
+                               $value = $pageLang->formatNum( MWTimestamp::getLocalInstance( $ts )->format( 'd' ), true );
                                break;
                        case 'pagename':
                                $value = wfEscapeWikiText( $this->mTitle->getText() );
@@ -4206,6 +4206,9 @@ class Parser {
 
                        # Decode HTML entities
                        $safeHeadline = Sanitizer::decodeCharReferences( $safeHeadline );
+
+                       $safeHeadline = $this->normalizeSectionName( $safeHeadline );
+
                        $fallbackHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_FALLBACK );
                        $linkAnchor = Sanitizer::escapeIdForLink( $safeHeadline );
                        $safeHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_PRIMARY );
@@ -5767,6 +5770,8 @@ class Parser {
                $text = $this->stripSectionName( $text );
                $text = Sanitizer::normalizeSectionNameWhitespace( $text );
                $text = Sanitizer::decodeCharReferences( $text );
+               $text = $this->normalizeSectionName( $text );
+
                return '#' . Sanitizer::escapeIdForLink( $text );
        }
 
@@ -5786,6 +5791,7 @@ class Parser {
                $text = $this->stripSectionName( $text );
                $text = Sanitizer::normalizeSectionNameWhitespace( $text );
                $text = Sanitizer::decodeCharReferences( $text );
+               $text = $this->normalizeSectionName( $text );
 
                if ( isset( $wgFragmentMode[1] ) && $wgFragmentMode[1] === 'legacy' ) {
                        // ForAttribute() and ForLink() are the same for legacy encoding
@@ -5797,6 +5803,24 @@ class Parser {
                return "#$id";
        }
 
+       /**
+        * Apply the same normalization as code making links to this section would
+        *
+        * @param string $text
+        * @return string
+        */
+       private function normalizeSectionName( $text ) {
+               # T90902: ensure the same normalization is applied for IDs as to links
+               $titleParser = MediaWikiServices::getInstance()->getTitleParser();
+               try {
+
+                       $parts = $titleParser->splitTitleString( "#$text" );
+               } catch ( MalformedTitleException $ex ) {
+                       return $text;
+               }
+               return $parts['fragment'];
+       }
+
        /**
         * Strips a text string of wikitext for use in a section anchor
         *
index c7146a1..5e2845f 100644 (file)
@@ -1062,13 +1062,11 @@ class ParserOptions {
                                'speculativeRevIdCallback' => null,
                        ];
 
-                       // @codingStandardsIgnoreStart Squiz.WhiteSpace.OperatorSpacing.NoSpaceAfterAmp
                        Hooks::run( 'ParserOptionsRegister', [
                                &self::$defaults,
                                &self::$inCacheKey,
                                &self::$lazyOptions,
                        ] );
-                       // @codingStandardsIgnoreEnd
 
                        ksort( self::$inCacheKey );
                }
diff --git a/includes/profiler/ProfilerFunctions.php b/includes/profiler/ProfilerFunctions.php
deleted file mode 100644 (file)
index cc71630..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Core profiling functions. Have to exist before basically anything.
- *
- * 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 Profiler
- */
-
-/**
- * Get system resource usage of current request context.
- * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
- * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
- *
- * @since 1.24
- * @return array|bool Resource usage data or false if no data available.
- */
-function wfGetRusage() {
-       if ( !function_exists( 'getrusage' ) ) {
-               return false;
-       } elseif ( defined( 'HHVM_VERSION' ) && PHP_OS === 'Linux' ) {
-               return getrusage( 2 /* RUSAGE_THREAD */ );
-       } else {
-               return getrusage( 0 /* RUSAGE_SELF */ );
-       }
-}
-
-/**
- * Begin profiling of a function
- * @param string $functionname Name of the function we will profile
- * @deprecated since 1.25
- */
-function wfProfileIn( $functionname ) {
-}
-
-/**
- * Stop profiling of a function
- * @param string $functionname Name of the function we have profiled
- * @deprecated since 1.25
- */
-function wfProfileOut( $functionname = 'missing' ) {
-}
index ffc7a7e..5dc0b40 100644 (file)
@@ -450,7 +450,7 @@ class ExtensionProcessor implements Processor {
                        }
                        foreach ( $info['config'] as $key => $val ) {
                                if ( $key[0] !== '@' ) {
-                                       $this->globals["$prefix$key"] = $val;
+                                       $this->addConfigGlobal( "$prefix$key", $val );
                                }
                        }
                }
@@ -478,11 +478,26 @@ class ExtensionProcessor implements Processor {
                                if ( isset( $data['path'] ) && $data['path'] ) {
                                        $value = "$dir/$value";
                                }
-                               $this->globals["$prefix$key"] = $value;
+                               $this->addConfigGlobal( "$prefix$key", $value );
                        }
                }
        }
 
+       /**
+        * Helper function to set a value to a specific global, if it isn't set already.
+        *
+        * @param string $key The config key with the prefix and anything
+        * @param mixed $value The value of the config
+        */
+       private function addConfigGlobal( $key, $value ) {
+               if ( array_key_exists( $key, $this->globals ) ) {
+                       throw new RuntimeException(
+                               "The configuration setting '$key' was already set by another extension,"
+                               . " and cannot be set again." );
+               }
+               $this->globals[$key] = $value;
+       }
+
        protected function extractServiceWiringFiles( $dir, array $info ) {
                if ( isset( $info['ServiceWiringFiles'] ) ) {
                        foreach ( $info['ServiceWiringFiles'] as $path ) {
index c58bb00..b2e1c49 100644 (file)
@@ -728,6 +728,8 @@ class ResourceLoader implements LoggerAwareInterface {
                // See https://bugs.php.net/bug.php?id=36514
                ob_start();
 
+               $this->measureResponseTime( RequestContext::getMain()->getTiming() );
+
                // Find out which modules are missing and instantiate the others
                $modules = [];
                $missing = [];
@@ -828,6 +830,16 @@ class ResourceLoader implements LoggerAwareInterface {
                echo $response;
        }
 
+       protected function measureResponseTime( Timing $timing ) {
+               DeferredUpdates::addCallableUpdate( function () use ( $timing ) {
+                       $measure = $timing->measure( 'responseTime', 'requestStart', 'requestShutdown' );
+                       if ( $measure !== false ) {
+                               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+                               $stats->timing( 'resourceloader.responseTime', $measure['duration'] * 1000 );
+                       }
+               } );
+       }
+
        /**
         * Send main response headers to the client.
         *
index ca6e59f..fbd0a24 100644 (file)
@@ -32,7 +32,7 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
-               $logo = $this->getLogo( $this->getConfig() );
+               $logo = $this->getLogoData( $this->getConfig() );
                $styles = parent::getStyles( $context );
                $this->normalizeStyles( $styles );
 
@@ -42,25 +42,34 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                                '; }';
 
                if ( is_array( $logo ) ) {
-                       if ( isset( $logo['1.5x'] ) ) {
-                               $styles[
-                                       '(-webkit-min-device-pixel-ratio: 1.5), ' .
-                                       '(min--moz-device-pixel-ratio: 1.5), ' .
+                       if ( isset( $logo['svg'] ) ) {
+                               $styles['all'][] = '.mw-wiki-logo { ' .
+                                       'background-image: -webkit-linear-gradient(transparent, transparent), ' .
+                                               CSSMin::buildUrlValue( $logo['svg'] ) . '; ' .
+                                       'background-image: linear-gradient(transparent, transparent), ' .
+                                               CSSMin::buildUrlValue( $logo['svg'] ) . ';' .
+                                       'background-size: 135px auto; }';
+                       } else {
+                               if ( isset( $logo['1.5x'] ) ) {
+                                       $styles[
+                                               '(-webkit-min-device-pixel-ratio: 1.5), ' .
+                                               '(min--moz-device-pixel-ratio: 1.5), ' .
                                        '(min-resolution: 1.5dppx), ' .
-                                       '(min-resolution: 144dpi)'
-                               ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logo['1.5x'] ) . ';' .
-                               'background-size: 135px auto; }';
-                       }
-                       if ( isset( $logo['2x'] ) ) {
-                               $styles[
-                                       '(-webkit-min-device-pixel-ratio: 2), ' .
-                                       '(min--moz-device-pixel-ratio: 2),' .
-                                       '(min-resolution: 2dppx), ' .
-                                       '(min-resolution: 192dpi)'
-                               ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logo['2x'] ) . ';' .
-                               'background-size: 135px auto; }';
+                                               '(min-resolution: 144dpi)'
+                                       ][] = '.mw-wiki-logo { background-image: ' .
+                                       CSSMin::buildUrlValue( $logo['1.5x'] ) . ';' .
+                                       'background-size: 135px auto; }';
+                               }
+                               if ( isset( $logo['2x'] ) ) {
+                                       $styles[
+                                               '(-webkit-min-device-pixel-ratio: 2), ' .
+                                               '(min--moz-device-pixel-ratio: 2), ' .
+                                               '(min-resolution: 2dppx), ' .
+                                               '(min-resolution: 192dpi)'
+                                       ][] = '.mw-wiki-logo { background-image: ' .
+                                       CSSMin::buildUrlValue( $logo['2x'] ) . ';' .
+                                       'background-size: 135px auto; }';
+                               }
                        }
                }
 
@@ -83,11 +92,21 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                }
        }
 
+       /**
+        * @since 1.31
+        * @param Config $conf
+        * @return string|array
+        */
+       protected function getLogoData( Config $conf ) {
+               return static::getLogo( $conf );
+       }
+
        /**
         * @param Config $conf
-        * @return string|array Single url if no variants are defined
-        *  or array of logo urls keyed by dppx in form "<float>x".
-        *  Key "1x" is always defined.
+        * @return string|array Single url if no variants are defined,
+        *  or an array of logo urls keyed by dppx in form "<float>x".
+        *  Key "1x" is always defined. Key "svg" may also be defined,
+        *  in which case variants other than "1x" are omitted.
         */
        public static function getLogo( Config $conf ) {
                $logo = $conf->get( 'Logo' );
@@ -103,18 +122,25 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                        '1x' => $logo1Url,
                ];
 
-               // Only 1.5x and 2x are supported
-               if ( isset( $logoHD['1.5x'] ) ) {
-                       $logoUrls['1.5x'] = OutputPage::transformResourcePath(
+               if ( isset( $logoHD['svg'] ) ) {
+                       $logoUrls['svg'] = OutputPage::transformResourcePath(
                                $conf,
-                               $logoHD['1.5x']
-                       );
-               }
-               if ( isset( $logoHD['2x'] ) ) {
-                       $logoUrls['2x'] = OutputPage::transformResourcePath(
-                               $conf,
-                               $logoHD['2x']
+                               $logoHD['svg']
                        );
+               } else {
+                       // Only 1.5x and 2x are supported
+                       if ( isset( $logoHD['1.5x'] ) ) {
+                               $logoUrls['1.5x'] = OutputPage::transformResourcePath(
+                                       $conf,
+                                       $logoHD['1.5x']
+                               );
+                       }
+                       if ( isset( $logoHD['2x'] ) ) {
+                               $logoUrls['2x'] = OutputPage::transformResourcePath(
+                                       $conf,
+                                       $logoHD['2x']
+                               );
+                       }
                }
 
                return $logoUrls;
index 9afaf40..4f66cda 100644 (file)
@@ -43,14 +43,15 @@ class RevDelArchiveList extends RevDelRevisionList {
                        $timestamps[] = $db->timestamp( $id );
                }
 
-               $tables = [ 'archive' ];
-               $fields = Revision::selectArchiveFields();
+               $arQuery = Revision::getArchiveQueryInfo();
+               $tables = $arQuery['tables'];
+               $fields = $arQuery['fields'];
                $conds = [
                        'ar_namespace' => $this->title->getNamespace(),
                        'ar_title' => $this->title->getDBkey(),
                        'ar_timestamp' => $timestamps,
                ];
-               $join_conds = [];
+               $join_conds = $arQuery['joins'];
                $options = [ 'ORDER BY' => 'ar_timestamp DESC' ];
 
                ChangeTags::modifyDisplayQuery(
index 1d80d86..1ed8726 100644 (file)
@@ -40,15 +40,17 @@ class RevDelArchivedFileList extends RevDelFileList {
        public function doQuery( $db ) {
                $ids = array_map( 'intval', $this->ids );
 
+               $fileQuery = ArchivedFile::getQueryInfo();
                return $db->select(
-                       'filearchive',
-                       ArchivedFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        [
                                'fa_name' => $this->title->getDBkey(),
                                'fa_id' => $ids
                        ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'fa_id DESC' ]
+                       [ 'ORDER BY' => 'fa_id DESC' ],
+                       $fileQuery['joins']
                );
        }
 
index 77cf976..6a6b86c 100644 (file)
@@ -60,15 +60,17 @@ class RevDelFileList extends RevDelList {
                        $archiveNames[] = $timestamp . '!' . $this->title->getDBkey();
                }
 
+               $oiQuery = OldLocalFile::getQueryInfo();
                return $db->select(
-                       'oldimage',
-                       OldLocalFile::selectFields(),
+                       $oiQuery['tables'],
+                       $oiQuery['fields'],
                        [
                                'oi_name' => $this->title->getDBkey(),
                                'oi_archive_name' => $archiveNames
                        ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'oi_timestamp DESC' ]
+                       [ 'ORDER BY' => 'oi_timestamp DESC' ],
+                       $oiQuery['joins']
                );
        }
 
index 1ea6a38..07362c4 100644 (file)
@@ -62,9 +62,10 @@ class RevDelRevisionList extends RevDelList {
         */
        public function doQuery( $db ) {
                $ids = array_map( 'intval', $this->ids );
+               $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] );
                $queryInfo = [
-                       'tables' => [ 'revision', 'page', 'user' ],
-                       'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       'tables' => $revQuery['tables'],
+                       'fields' => $revQuery['fields'],
                        'conds' => [
                                'rev_page' => $this->title->getArticleID(),
                                'rev_id' => $ids,
@@ -73,10 +74,7 @@ class RevDelRevisionList extends RevDelList {
                                'ORDER BY' => 'rev_id DESC',
                                'USE INDEX' => [ 'revision' => 'PRIMARY' ] // workaround for MySQL bug (T104313)
                        ],
-                       'join_conds' => [
-                               'page' => Revision::pageJoinCond(),
-                               'user' => Revision::userJoinCond(),
-                       ],
+                       'join_conds' => $revQuery['joins'],
                ];
                ChangeTags::modifyDisplayQuery(
                        $queryInfo['tables'],
@@ -100,14 +98,15 @@ class RevDelRevisionList extends RevDelList {
                        return $live;
                }
 
+               $arQuery = Revision::getArchiveQueryInfo();
                $archiveQueryInfo = [
-                       'tables' => [ 'archive' ],
-                       'fields' => Revision::selectArchiveFields(),
+                       'tables' => $arQuery['tables'],
+                       'fields' => $arQuery['fields'],
                        'conds' => [
                                'ar_rev_id' => $ids,
                        ],
                        'options' => [ 'ORDER BY' => 'ar_rev_id DESC' ],
-                       'join_conds' => [],
+                       'join_conds' => $arQuery['joins'],
                ];
 
                ChangeTags::modifyDisplayQuery(
index cefe573..9f080d5 100644 (file)
@@ -57,13 +57,16 @@ class Command {
        private $method;
 
        /** @var bool */
-       private $useStderr = false;
+       private $doIncludeStderr = false;
+
+       /** @var bool */
+       private $doLogStderr = false;
 
        /** @var bool */
        private $everExecuted = false;
 
        /** @var string|false */
-       private $cGroup = false;
+       private $cgroup = false;
 
        /**
         * Constructor. Don't call directly, instead use Shell::command()
@@ -83,12 +86,14 @@ class Command {
         */
        public function __destruct() {
                if ( !$this->everExecuted ) {
+                       $context = [ 'command' => $this->command ];
                        $message = __CLASS__ . " was instantiated, but execute() was never called.";
                        if ( $this->method ) {
-                               $message .= " Calling method: {$this->method}.";
+                               $message .= ' Calling method: {method}.';
+                               $context['method'] = $this->method;
                        }
-                       $message .= " Command: {$this->command}";
-                       trigger_error( $message, E_USER_NOTICE );
+                       $message .= ' Command: {command}';
+                       $this->logger->warning( $message, $context );
                }
        }
 
@@ -131,10 +136,16 @@ class Command {
        /**
         * Sets execution limits
         *
-        * @param array $limits Optional array with limits(filesize, memory, time, walltime).
+        * @param array $limits Associative array of limits. Keys (all optional):
+        *   filesize (for ulimit -f), memory, time, walltime.
         * @return $this
         */
        public function limits( array $limits ) {
+               if ( !isset( $limits['walltime'] ) && isset( $limits['time'] ) ) {
+                       // Emulate the behavior of old wfShellExec() where walltime fell back on time
+                       // if the latter was overridden and the former wasn't
+                       $limits['walltime'] = $limits['time'];
+               }
                $this->limits = $limits + $this->limits;
 
                return $this;
@@ -172,37 +183,42 @@ class Command {
         * @return $this
         */
        public function includeStderr( $yesno = true ) {
-               $this->useStderr = $yesno;
+               $this->doIncludeStderr = $yesno;
 
                return $this;
        }
 
        /**
-        * Sets cgroup for this command
+        * When enabled, text sent to stderr will be logged with a level of 'error'.
         *
-        * @param string|false $cgroup
+        * @param bool $yesno
         * @return $this
         */
-       public function cgroup( $cgroup ) {
-               $this->cGroup = $cgroup;
+       public function logStderr( $yesno = true ) {
+               $this->doLogStderr = $yesno;
 
                return $this;
        }
 
        /**
-        * Executes command. Afterwards, getExitCode() and getOutput() can be used to access execution
-        * results.
+        * Sets cgroup for this command
         *
-        * @return Result
-        * @throws Exception
-        * @throws ProcOpenError
-        * @throws ShellDisabledError
+        * @param string|false $cgroup Absolute file path to the cgroup, or false to not use a cgroup
+        * @return $this
         */
-       public function execute() {
-               $this->everExecuted = true;
+       public function cgroup( $cgroup ) {
+               $this->cgroup = $cgroup;
 
-               $profileMethod = $this->method ?: wfGetCaller();
+               return $this;
+       }
 
+       /**
+        * String together all the options and build the final command
+        * to execute
+        *
+        * @return array [ command, whether to use log pipe ]
+        */
+       protected function buildFinalCommand() {
                $envcmd = '';
                foreach ( $this->env as $k => $v ) {
                        if ( wfIsWindows() ) {
@@ -221,37 +237,54 @@ class Command {
                        }
                }
 
+               $useLogPipe = false;
                $cmd = $envcmd . trim( $this->command );
 
-               $useLogPipe = false;
                if ( is_executable( '/bin/bash' ) ) {
                        $time = intval( $this->limits['time'] );
                        $wallTime = intval( $this->limits['walltime'] );
-                       // for b/c, wall time falls back to time
-                       $wallTime = min( $time, $wallTime );
                        $mem = intval( $this->limits['memory'] );
                        $filesize = intval( $this->limits['filesize'] );
 
                        if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
                                $cmd = '/bin/bash ' . escapeshellarg( __DIR__ . '/limit.sh' ) . ' ' .
-                                          escapeshellarg( $cmd ) . ' ' .
-                                          escapeshellarg(
-                                                  "MW_INCLUDE_STDERR=" . ( $this->useStderr ? '1' : '' ) . ';' .
-                                                  "MW_CPU_LIMIT=$time; " .
-                                                  'MW_CGROUP=' . escapeshellarg( $this->cGroup ) . '; ' .
-                                                  "MW_MEM_LIMIT=$mem; " .
-                                                  "MW_FILE_SIZE_LIMIT=$filesize; " .
-                                                  "MW_WALL_CLOCK_LIMIT=$wallTime; " .
-                                                  "MW_USE_LOG_PIPE=yes"
-                                          );
+                                       escapeshellarg( $cmd ) . ' ' .
+                                       escapeshellarg(
+                                               "MW_INCLUDE_STDERR=" . ( $this->doIncludeStderr ? '1' : '' ) . ';' .
+                                               "MW_CPU_LIMIT=$time; " .
+                                               'MW_CGROUP=' . escapeshellarg( $this->cgroup ) . '; ' .
+                                               "MW_MEM_LIMIT=$mem; " .
+                                               "MW_FILE_SIZE_LIMIT=$filesize; " .
+                                               "MW_WALL_CLOCK_LIMIT=$wallTime; " .
+                                               "MW_USE_LOG_PIPE=yes"
+                                       );
                                $useLogPipe = true;
-                       } elseif ( $this->useStderr ) {
-                               $cmd .= ' 2>&1';
                        }
-               } elseif ( $this->useStderr ) {
+               }
+               if ( !$useLogPipe && $this->doIncludeStderr ) {
                        $cmd .= ' 2>&1';
                }
-               wfDebug( __METHOD__ . ": $cmd\n" );
+
+               return [ $cmd, $useLogPipe ];
+       }
+
+       /**
+        * Executes command. Afterwards, getExitCode() and getOutput() can be used to access execution
+        * results.
+        *
+        * @return Result
+        * @throws Exception
+        * @throws ProcOpenError
+        * @throws ShellDisabledError
+        */
+       public function execute() {
+               $this->everExecuted = true;
+
+               $profileMethod = $this->method ?: wfGetCaller();
+
+               list( $cmd, $useLogPipe ) = $this->buildFinalCommand();
+
+               $this->logger->debug( __METHOD__ . ": $cmd" );
 
                // Don't try to execute commands that exceed Linux's MAX_ARG_STRLEN.
                // Other platforms may be more accomodating, but we don't want to be
@@ -259,13 +292,13 @@ class Command {
                // input. See T129506.
                if ( strlen( $cmd ) > SHELL_MAX_ARG_STRLEN ) {
                        throw new Exception( __METHOD__ .
-                                                                '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
+                               '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
                }
 
                $desc = [
                        0 => [ 'file', 'php://stdin', 'r' ],
                        1 => [ 'pipe', 'w' ],
-                       2 => [ 'file', 'php://stderr', 'w' ],
+                       2 => [ 'pipe', 'w' ],
                ];
                if ( $useLogPipe ) {
                        $desc[3] = [ 'pipe', 'w' ];
@@ -278,6 +311,7 @@ class Command {
                        throw new ProcOpenError();
                }
                $outBuffer = $logBuffer = '';
+               $errBuffer = null;
                $emptyArray = [];
                $status = false;
                $logMsg = false;
@@ -313,12 +347,20 @@ class Command {
 
                        $readyPipes = $pipes;
 
-                       // Clear last error
+                       // clear get_last_error without actually raising an error
+                       // from http://php.net/manual/en/function.error-get-last.php#113518
+                       // TODO replace with clear_last_error when requirements are bumped to PHP7
+                       set_error_handler( function () {
+                       }, 0 );
                        // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
                        @trigger_error( '' );
+                       // @codingStandardsIgnoreEnd
+                       restore_error_handler();
+
+                       // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
                        $numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
+                       // @codingStandardsIgnoreEnd
                        if ( $numReadyPipes === false ) {
-                               // @codingStandardsIgnoreEnd
                                $error = error_get_last();
                                if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
                                        continue;
@@ -344,6 +386,9 @@ class Command {
                                } elseif ( $fd == 1 ) {
                                        // From stdout
                                        $outBuffer .= $block;
+                               } elseif ( $fd == 2 ) {
+                                       // From stderr
+                                       $errBuffer .= $block;
                                } elseif ( $fd == 3 ) {
                                        // From log FD
                                        $logBuffer .= $block;
@@ -394,6 +439,15 @@ class Command {
                        $this->logger->warning( "$logMsg: {command}", [ 'command' => $cmd ] );
                }
 
-               return new Result( $retval, $outBuffer );
+               if ( $errBuffer && $this->doLogStderr ) {
+                       $this->logger->error( "Error running {command}: {error}", [
+                               'command' => $cmd,
+                               'error' => $errBuffer,
+                               'exitcode' => $retval,
+                               'exception' => new Exception( 'Shell error' ),
+                       ] );
+               }
+
+               return new Result( $retval, $outBuffer, $errBuffer );
        }
 }
diff --git a/includes/shell/CommandFactory.php b/includes/shell/CommandFactory.php
new file mode 100644 (file)
index 0000000..84dd50f
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * 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
+ */
+
+namespace MediaWiki\Shell;
+
+use Psr\Log\LoggerAwareTrait;
+use Psr\Log\NullLogger;
+
+/**
+ * Factory facilitating dependency injection for Command
+ *
+ * @since 1.30
+ */
+class CommandFactory {
+       use LoggerAwareTrait;
+
+       /** @var array */
+       private $limits;
+
+       /** @var string|bool */
+       private $cgroup;
+
+       /** @var bool */
+       private $doLogStderr = false;
+
+       /**
+        * Constructor
+        *
+        * @param array $limits See {@see Command::limits()}
+        * @param string|bool $cgroup See {@see Command::cgroup()}
+        */
+       public function __construct( array $limits, $cgroup ) {
+               $this->limits = $limits;
+               $this->cgroup = $cgroup;
+               $this->setLogger( new NullLogger() );
+       }
+
+       /**
+        * When enabled, text sent to stderr will be logged with a level of 'error'.
+        *
+        * @param bool $yesno
+        * @see Command::logStderr
+        */
+       public function logStderr( $yesno = true ) {
+               $this->doLogStderr = $yesno;
+       }
+
+       /**
+        * Instantiates a new Command
+        *
+        * @return Command
+        */
+       public function create() {
+               $command = new Command();
+               $command->setLogger( $this->logger );
+
+               return $command
+                       ->limits( $this->limits )
+                       ->cgroup( $this->cgroup )
+                       ->logStderr( $this->doLogStderr );
+       }
+}
index c1429df..1e18210 100644 (file)
@@ -32,13 +32,17 @@ class Result {
        /** @var string */
        private $stdout;
 
+       /** @var string|null */
+       private $stderr;
+
        /**
         * @param int $exitCode
         * @param string $stdout
         */
-       public function __construct( $exitCode, $stdout ) {
+       public function __construct( $exitCode, $stdout, $stderr = null ) {
                $this->exitCode = $exitCode;
                $this->stdout = $stdout;
+               $this->stderr = $stderr;
        }
 
        /**
@@ -58,4 +62,14 @@ class Result {
        public function getStdout() {
                return $this->stdout;
        }
+
+       /**
+        * Returns stderr of the process or null if the Command was configured to add stderr to stdout
+        * with includeStderr( true )
+        *
+        * @return string|null
+        */
+       public function getStderr() {
+               return $this->stderr;
+       }
 }
index f2c96ae..604c96a 100644 (file)
@@ -22,7 +22,6 @@
 
 namespace MediaWiki\Shell;
 
-use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -38,6 +37,7 @@ use MediaWiki\MediaWikiServices;
  *
  *  ... = $result->getExitCode();
  *  ... = $result->getStdout();
+ *  ... = $result->getStderr();
  */
 class Shell {
 
@@ -56,18 +56,9 @@ class Shell {
                        // treat it as a list of arguments
                        $args = reset( $args );
                }
-               $command = new Command();
-               $config = MediaWikiServices::getInstance()->getMainConfig();
-
-               $limits = [
-                       'time' => $config->get( 'MaxShellTime' ),
-                       'walltime' => $config->get( 'MaxShellWallClockTime' ),
-                       'memory' => $config->get( 'MaxShellMemory' ),
-                       'filesize' => $config->get( 'MaxShellFileSize' ),
-               ];
-               $command->limits( $limits );
-               $command->cgroup( $config->get( 'ShellCgroup' ) );
-               $command->setLogger( LoggerFactory::getInstance( 'exec' ) );
+               $command = MediaWikiServices::getInstance()
+                       ->getShellCommandFactory()
+                       ->create();
 
                return $command->params( $args );
        }
@@ -122,14 +113,12 @@ class Shell {
 
                        if ( wfIsWindows() ) {
                                // Escaping for an MSVC-style command line parser and CMD.EXE
-                               // @codingStandardsIgnoreStart For long URLs
                                // Refs:
                                //  * https://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
                                //  * https://technet.microsoft.com/en-us/library/cc723564.aspx
                                //  * T15518
                                //  * CR r63214
                                // Double the backslashes before any double quotes. Escape the double quotes.
-                               // @codingStandardsIgnoreEnd
                                $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
                                $arg = '';
                                $iteration = 0;
index 167b49d..07964a4 100644 (file)
@@ -34,7 +34,11 @@ use MediaWiki\MediaWikiServices;
  * @ingroup Skins
  */
 abstract class Skin extends ContextSource {
+       /**
+        * @var string|null
+        */
        protected $skinname = null;
+
        protected $mRelevantTitle = null;
        protected $mRelevantUser = null;
 
@@ -134,7 +138,17 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * @return string Skin name
+        * @since 1.31
+        * @param string|null $skinname
+        */
+       public function __construct( $skinname = null ) {
+               if ( is_string( $skinname ) ) {
+                       $this->skinname = $skinname;
+               }
+       }
+
+       /**
+        * @return string|null Skin name
         */
        public function getSkinName() {
                return $this->skinname;
index ee8d841..1ad1ab0 100644 (file)
@@ -96,12 +96,9 @@ class SkinFallbackTemplate extends BaseTemplate {
         * warning message and page content.
         */
        public function execute() {
-               $this->html( 'headelement' ) ?>
-
-               <div class="warningbox">
-                       <?php echo $this->buildHelpfulInformationMessage() ?>
-               </div>
-
+               $this->html( 'headelement' );
+               echo Html::warningBox( $this->buildHelpfulInformationMessage() );
+       ?>
                <form action="<?php $this->text( 'wgScript' ) ?>">
                        <input type="hidden" name="title" value="<?php $this->text( 'searchtitle' ) ?>" />
                        <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
index 0cdc55f..95729f3 100644 (file)
@@ -679,7 +679,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
                ];
 
                if ( $type === 'submit' && isset( $singleFieldInfo['label'] ) ) {
-                       $descriptor['default'] = wfMessage( $singleFieldInfo['label'] )->plain();
+                       $descriptor['default'] = $singleFieldInfo['label']->plain();
                } elseif ( $type !== 'submit' ) {
                        $descriptor += array_filter( [
                                // help-message is omitted as it is usually not really useful for a web interface
index df6a1c1..5194983 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup SpecialPage
  */
 use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\DBQueryTimeoutError;
 use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
@@ -542,45 +543,57 @@ abstract class ChangesListSpecialPage extends SpecialPage {
 
                $this->considerActionsForDefaultSavedQuery();
 
-               $rows = $this->getRows();
                $opts = $this->getOptions();
-               if ( $rows === false ) {
-                       $rows = new FakeResultWrapper( [] );
-               }
+               try {
+                       $rows = $this->getRows();
+                       if ( $rows === false ) {
+                               $rows = new FakeResultWrapper( [] );
+                       }
 
-               // Used by Structured UI app to get results without MW chrome
-               if ( $this->getRequest()->getVal( 'action' ) === 'render' ) {
-                       $this->getOutput()->setArticleBodyOnly( true );
-               }
+                       // Used by Structured UI app to get results without MW chrome
+                       if ( $this->getRequest()->getVal( 'action' ) === 'render' ) {
+                               $this->getOutput()->setArticleBodyOnly( true );
+                       }
 
-               // Used by "live update" and "view newest" to check
-               // if there's new changes with minimal data transfer
-               if ( $this->getRequest()->getBool( 'peek' ) ) {
+                       // Used by "live update" and "view newest" to check
+                       // if there's new changes with minimal data transfer
+                       if ( $this->getRequest()->getBool( 'peek' ) ) {
                        $code = $rows->numRows() > 0 ? 200 : 204;
-                       $this->getOutput()->setStatusCode( $code );
-                       return;
-               }
+                               $this->getOutput()->setStatusCode( $code );
+                               return;
+                       }
 
-               $batch = new LinkBatch;
-               foreach ( $rows as $row ) {
-                       $batch->add( NS_USER, $row->rc_user_text );
-                       $batch->add( NS_USER_TALK, $row->rc_user_text );
-                       $batch->add( $row->rc_namespace, $row->rc_title );
-                       if ( $row->rc_source === RecentChange::SRC_LOG ) {
-                               $formatter = LogFormatter::newFromRow( $row );
-                               foreach ( $formatter->getPreloadTitles() as $title ) {
-                                       $batch->addObj( $title );
+                       $batch = new LinkBatch;
+                       foreach ( $rows as $row ) {
+                               $batch->add( NS_USER, $row->rc_user_text );
+                               $batch->add( NS_USER_TALK, $row->rc_user_text );
+                               $batch->add( $row->rc_namespace, $row->rc_title );
+                               if ( $row->rc_source === RecentChange::SRC_LOG ) {
+                                       $formatter = LogFormatter::newFromRow( $row );
+                                       foreach ( $formatter->getPreloadTitles() as $title ) {
+                                               $batch->addObj( $title );
+                                       }
                                }
                        }
-               }
-               $batch->execute();
+                       $batch->execute();
 
-               $this->setHeaders();
-               $this->outputHeader();
-               $this->addModules();
-               $this->webOutput( $rows, $opts );
+                       $this->setHeaders();
+                       $this->outputHeader();
+                       $this->addModules();
+                       $this->webOutput( $rows, $opts );
 
-               $rows->free();
+                       $rows->free();
+               } catch ( DBQueryTimeoutError $timeoutException ) {
+                       MWExceptionHandler::logException( $timeoutException );
+
+                       $this->setHeaders();
+                       $this->outputHeader();
+                       $this->addModules();
+
+                       $this->getOutput()->setStatusCode( 500 );
+                       $this->webOutputHeader( 0, $opts );
+                       $this->outputTimeout();
+               }
 
                if ( $this->getConfig()->get( 'EnableWANCacheReaper' ) ) {
                        // Clean up any bad page entries for titles showing up in RC
@@ -629,7 +642,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        if ( $savedQueries && isset( $savedQueries[ 'default' ] ) ) {
                                // Only load queries that are 'version' 2, since those
                                // have parameter representation
-                               if ( $savedQueries[ 'version' ] === '2' ) {
+                               if ( isset( $savedQueries[ 'version' ] ) && $savedQueries[ 'version' ] === '2' ) {
                                        $savedQueryDefaultID = $savedQueries[ 'default' ];
                                        $defaultQuery = $savedQueries[ 'queries' ][ $savedQueryDefaultID ][ 'data' ];
 
@@ -791,6 +804,17 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                );
        }
 
+       /**
+        * Add the "timeout" message to the output
+        */
+       protected function outputTimeout() {
+               $this->getOutput()->addHTML(
+                       '<div class="mw-changeslist-timeout">' .
+                       $this->msg( 'recentchanges-timeout' )->parse() .
+                       '</div>'
+               );
+       }
+
        /**
         * Get the database result for this special page instance. Used by ApiFeedRecentChanges.
         *
@@ -970,6 +994,23 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                return $unstructuredGroupDefinition;
        }
 
+       /**
+        * @return array The legacy show/hide toggle filters
+        */
+       protected function getLegacyShowHideFilters() {
+               $filters = [];
+               foreach ( $this->filterGroups as $group ) {
+                       if ( $group instanceof  ChangesListBooleanFilterGroup ) {
+                               foreach ( $group->getFilters() as $key => $filter ) {
+                                       if ( $filter->displaysOnUnstructuredUi( $this ) ) {
+                                               $filters[ $key ] = $filter;
+                                       }
+                               }
+                       }
+               }
+               return $filters;
+       }
+
        /**
         * Register all the filters, including legacy hook-driven ones.
         * Then create a FormOptions object with options as specified by the user
@@ -1010,19 +1051,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                // If urlversion=2 is set, ignore the filter defaults and set them all to false/empty
                $useDefaults = $this->getRequest()->getInt( 'urlversion' ) !== 2;
 
-               // Add all filters
                /** @var ChangesListFilterGroup $filterGroup */
                foreach ( $this->filterGroups as $filterGroup ) {
-                       // URL parameters can be per-group, like 'userExpLevel',
-                       // or per-filter, like 'hideminor'.
-                       if ( $filterGroup->isPerGroupRequestParameter() ) {
-                               $opts->add( $filterGroup->getName(), $useDefaults ? $filterGroup->getDefault() : '' );
-                       } else {
-                               /** @var ChangesListBooleanFilter $filter */
-                               foreach ( $filterGroup->getFilters() as $filter ) {
-                                       $opts->add( $filter->getName(), $useDefaults ? $filter->getDefault( $structuredUI ) : false );
-                               }
-                       }
+                       $filterGroup->addOptions( $opts, $useDefaults, $structuredUI );
                }
 
                $opts->add( 'namespace', '', FormOptions::STRING );
@@ -1153,9 +1184,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                // or per-filter, like 'hideminor'.
 
                foreach ( $this->filterGroups as $filterGroup ) {
-                       if ( $filterGroup->isPerGroupRequestParameter() ) {
+                       if ( $filterGroup instanceof ChangesListStringOptionsFilterGroup ) {
                                $stringParameterNameSet[$filterGroup->getName()] = true;
-                       } elseif ( $filterGroup->getType() === ChangesListBooleanFilterGroup::TYPE ) {
+                       } elseif ( $filterGroup instanceof ChangesListBooleanFilterGroup ) {
                                foreach ( $filterGroup->getFilters() as $filter ) {
                                        $hideParameterNameSet[$filter->getName()] = true;
                                }
@@ -1185,7 +1216,10 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * @param FormOptions $opts
         */
        public function validateOptions( FormOptions $opts ) {
-               if ( $this->fixContradictoryOptions( $opts ) ) {
+               $isContradictory = $this->fixContradictoryOptions( $opts );
+               $isReplaced = $this->replaceOldOptions( $opts );
+
+               if ( $isContradictory || $isReplaced ) {
                        $query = wfArrayToCgi( $this->convertParamsForLink( $opts->getChangedValues() ) );
                        $this->getOutput()->redirect( $this->getPageTitle()->getCanonicalURL( $query ) );
                }
@@ -1256,6 +1290,34 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                return false;
        }
 
+       /**
+        * Replace old options 'hideanons' or 'hideliu' with structured UI equivalent
+        *
+        * @param FormOptions $opts
+        * @return bool True if the change was made
+        */
+       public function replaceOldOptions( FormOptions $opts ) {
+               if ( !$this->isStructuredFilterUiEnabled() ) {
+                       return false;
+               }
+
+               // At this point 'hideanons' and 'hideliu' cannot be both true,
+               // because fixBackwardsCompatibilityOptions resets (at least) 'hideanons' in such case
+               if ( $opts[ 'hideanons' ] ) {
+                       $opts->reset( 'hideanons' );
+                       $opts[ 'userExpLevel' ] = 'registered';
+                       return true;
+               }
+
+               if ( $opts[ 'hideliu' ] ) {
+                       $opts->reset( 'hideliu' );
+                       $opts[ 'userExpLevel' ] = 'unregistered';
+                       return true;
+               }
+
+               return false;
+       }
+
        /**
         * Convert parameters values from true/false to 1/0
         * so they are not omitted by wfArrayToCgi()
@@ -1291,20 +1353,10 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $dbr = $this->getDB();
                $isStructuredUI = $this->isStructuredFilterUiEnabled();
 
+               /** @var ChangesListFilterGroup $filterGroup */
                foreach ( $this->filterGroups as $filterGroup ) {
-                       // URL parameters can be per-group, like 'userExpLevel',
-                       // or per-filter, like 'hideminor'.
-                       if ( $filterGroup->isPerGroupRequestParameter() ) {
-                               $filterGroup->modifyQuery( $dbr, $this, $tables, $fields, $conds,
-                                       $query_options, $join_conds, $opts[$filterGroup->getName()] );
-                       } else {
-                               foreach ( $filterGroup->getFilters() as $filter ) {
-                                       if ( $filter->isActive( $opts, $isStructuredUI ) ) {
-                                               $filter->modifyQuery( $dbr, $this, $tables, $fields, $conds,
-                                                       $query_options, $join_conds );
-                                       }
-                               }
-                       }
+                       $filterGroup->modifyQuery( $dbr, $this, $tables, $fields, $conds,
+                               $query_options, $join_conds, $opts, $isStructuredUI );
                }
 
                // Namespace filtering
@@ -1360,8 +1412,10 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        protected function doMainQuery( $tables, $fields, $conds,
                $query_options, $join_conds, FormOptions $opts
        ) {
-               $tables[] = 'recentchanges';
-               $fields = array_merge( RecentChange::selectFields(), $fields );
+               $rcQuery = RecentChange::getQueryInfo();
+               $tables = array_merge( $tables, $rcQuery['tables'] );
+               $fields = array_merge( $rcQuery['fields'], $fields );
+               $join_conds = array_merge( $join_conds, $rcQuery['joins'] );
 
                ChangeTags::modifyDisplayQuery(
                        $tables,
@@ -1409,16 +1463,26 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        }
 
        /**
-        * Send output to the OutputPage object, only called if not used feeds
+        * Send header output to the OutputPage object, only called if not using feeds
         *
-        * @param ResultWrapper $rows Database rows
+        * @param int $rowCount Number of database rows
         * @param FormOptions $opts
         */
-       public function webOutput( $rows, $opts ) {
+       private function webOutputHeader( $rowCount, $opts ) {
                if ( !$this->including() ) {
                        $this->outputFeedLinks();
-                       $this->doHeader( $opts, $rows->numRows() );
+                       $this->doHeader( $opts, $rowCount );
                }
+       }
+
+       /**
+        * Send output to the OutputPage object, only called if not used feeds
+        *
+        * @param ResultWrapper $rows Database rows
+        * @param FormOptions $opts
+        */
+       public function webOutput( $rows, $opts ) {
+               $this->webOutputHeader( $rows->numRows(), $opts );
 
                $this->outputChangesList( $rows, $opts );
        }
index 476c452..eb0f0aa 100644 (file)
@@ -451,9 +451,8 @@ class SpecialEditTags extends UnlistedSpecialPage {
         */
        protected function failure( $status ) {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText( '<div class="errorbox">' .
-                       $status->getWikiText( 'tags-edit-failure' ) .
-                       '</div>'
+               $this->getOutput()->addWikiText(
+                       Html::errorBox( $status->getWikiText( 'tags-edit-failure' ) )
                );
                $this->showForm();
        }
index 249be7f..30eb38d 100644 (file)
@@ -280,7 +280,9 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        return "blockedemailuser";
                }
 
-               if ( $user->pingLimiter( 'emailuser' ) ) {
+               // Check the ping limiter without incrementing it - we'll check it
+               // again later and increment it on a successful send
+               if ( $user->pingLimiter( 'emailuser', 0 ) ) {
                        wfDebug( "Ping limiter triggered.\n" );
 
                        return 'actionthrottledtext';
@@ -376,6 +378,11 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                $text .= $context->msg( 'emailuserfooter',
                        $from->name, $to->name )->inContentLanguage()->text();
 
+               // Check and increment the rate limits
+               if ( $context->getUser()->pingLimiter( 'emailuser' ) ) {
+                       throw new ThrottledError();
+               }
+
                $error = false;
                if ( !Hooks::run( 'EmailUser', [ &$to, &$from, &$subject, &$text, &$error ] ) ) {
                        if ( $error instanceof Status ) {
index 8e6c446..eb7be51 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup SpecialPage
  */
 
-use Mediawiki\MediaWikiServices;
+use MediaWiki\MediaWikiServices;
 
 /**
  * A special page that allows users to export pages in a XML file
index 17c64c8..b786c86 100644 (file)
@@ -199,15 +199,6 @@ HTML;
                echo $html;
        }
 
-       /**
-        * Return an array of subpages that this special page will accept.
-        *
-        * @return string[] subpages
-        */
-       public function getSubpagesForPrefixSearch() {
-               return self::$frameworks;
-       }
-
        protected function getGroupName() {
                return 'other';
        }
index 46d7cf7..02d6d00 100644 (file)
@@ -235,18 +235,18 @@ class MovePageForm extends UnlistedSpecialPage {
                }
 
                if ( count( $err ) ) {
-                       $out->addHTML( "<div class='errorbox'>\n" );
                        $action_desc = $this->msg( 'action-move' )->plain();
-                       $out->addWikiMsg( 'permissionserrorstext-withaction', count( $err ), $action_desc );
+                       $errMsgHtml = $this->msg( 'permissionserrorstext-withaction',
+                               count( $err ), $action_desc )->parseAsBlock();
 
                        if ( count( $err ) == 1 ) {
                                $errMsg = $err[0];
                                $errMsgName = array_shift( $errMsg );
 
                                if ( $errMsgName == 'hookaborted' ) {
-                                       $out->addHTML( "<p>{$errMsg[0]}</p>\n" );
+                                       $errMsgHtml .= "<p>{$errMsg[0]}</p>\n";
                                } else {
-                                       $out->addWikiMsgArray( $errMsgName, $errMsg );
+                                       $errMsgHtml .= $this->msg( $errMsgName, $errMsg )->parseAsBlock();
                                }
                        } else {
                                $errStr = [];
@@ -260,9 +260,9 @@ class MovePageForm extends UnlistedSpecialPage {
                                        }
                                }
 
-                               $out->addHTML( '<ul><li>' . implode( "</li>\n<li>", $errStr ) . "</li></ul>\n" );
+                               $errMsgHtml .= '<ul><li>' . implode( "</li>\n<li>", $errStr ) . "</li></ul>\n";
                        }
-                       $out->addHTML( "</div>\n" );
+                       $out->addHTML( Html::errorBox( $errMsgHtml ) );
                }
 
                if ( $this->oldTitle->isProtected( 'move' ) ) {
index 9cb6d4b..37d96f4 100644 (file)
@@ -81,6 +81,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                }
 
                if ( !$base ) {
+                       // No subpage provided or base page does not exist
                        return null;
                }
 
@@ -90,14 +91,38 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                }
 
                $uiCode = $this->getLanguage()->getCode();
+               $wikiLangCode = $this->getConfig()->get( 'LanguageCode' );
+
+               if ( $uiCode === $wikiLangCode ) {
+                       // Short circuit when the current UI language is the
+                       // wiki's default language to avoid unnecessary page lookups.
+                       return $base;
+               }
+
+               // Check for a subpage in current UI language
                $proposed = $base->getSubpage( $uiCode );
-               if ( $proposed && $proposed->exists() && $uiCode !== $base->getPageLanguage()->getCode() ) {
+               if ( $proposed && $proposed->exists() ) {
                        return $proposed;
-               } elseif ( $provided && $provided->exists() ) {
+               }
+
+               if ( $provided !== $base && $provided->exists() ) {
+                       // Explicit language code given and the page exists
                        return $provided;
-               } else {
-                       return $base;
                }
+
+               // Check for fallback languages specified by the UI language
+               $possibilities = Language::getFallbacksFor( $uiCode );
+               foreach ( $possibilities as $lang ) {
+                       if ( $lang !== $wikiLangCode ) {
+                               $proposed = $base->getSubpage( $lang );
+                               if ( $proposed && $proposed->exists() ) {
+                                       return $proposed;
+                               }
+                       }
+               }
+
+               // When all else has failed, return the base page
+               return $base;
        }
 
        /**
index ba5a57e..7fa74af 100644 (file)
@@ -50,8 +50,8 @@ class SpecialPreferences extends SpecialPage {
                        return;
                }
 
-               $out->addModules( 'mediawiki.special.preferences' );
-               $out->addModuleStyles( 'mediawiki.special.preferences.styles' );
+               $out->addModules( 'mediawiki.special.preferences.ooui' );
+               $out->addModuleStyles( 'mediawiki.special.preferences.styles.ooui' );
 
                $session = $this->getRequest()->getSession();
                if ( $session->get( 'specialPreferencesSaveSuccess' ) ) {
@@ -83,37 +83,19 @@ class SpecialPreferences extends SpecialPage {
 
                $htmlForm = $this->getFormObject( $user, $this->getContext() );
                $htmlForm->setSubmitCallback( [ 'Preferences', 'tryUISubmit' ] );
-               $sectionTitles = $htmlForm->getPreferenceSections();
-
-               $prefTabs = '';
-               foreach ( $sectionTitles as $key ) {
-                       $prefTabs .= Html::rawElement( 'li',
-                               [
-                                       'role' => 'presentation',
-                                       'class' => ( $key === 'personal' ) ? 'selected' : null
-                               ],
-                               Html::rawElement( 'a',
-                                       [
-                                               'id' => 'preftab-' . $key,
-                                               'role' => 'tab',
-                                               'href' => '#mw-prefsection-' . $key,
-                                               'aria-controls' => 'mw-prefsection-' . $key,
-                                               'aria-selected' => ( $key === 'personal' ) ? 'true' : 'false',
-                                               'tabIndex' => ( $key === 'personal' ) ? 0 : -1,
-                                       ],
-                                       $htmlForm->getLegend( $key )
-                               )
-                       );
+
+               $prefTabs = [];
+               foreach ( $htmlForm->getPreferenceSections() as $key ) {
+                       $prefTabs[] = [
+                               'name' => $key,
+                               'label' => $htmlForm->getLegend( $key ),
+                       ];
                }
+               $out->addJsConfigVars( 'wgPreferencesTabs', $prefTabs );
+
+               // TODO: Render fake tabs here to avoid FOUC.
+               // $out->addHTML( $fakeTabs );
 
-               $out->addHTML(
-                       Html::rawElement( 'ul',
-                               [
-                                       'id' => 'preftoc',
-                                       'role' => 'tablist'
-                               ],
-                               $prefTabs )
-               );
                $htmlForm->show();
        }
 
@@ -121,13 +103,13 @@ class SpecialPreferences extends SpecialPage {
         * Get the preferences form to use.
         * @param User $user The user.
         * @param IContextSource $context The context.
-        * @return PreferencesForm|HtmlForm
+        * @return PreferencesForm|HTMLForm
         */
        protected function getFormObject( $user, IContextSource $context ) {
                return Preferences::getFormObject( $user, $context );
        }
 
-       private function showResetForm() {
+       protected function showResetForm() {
                if ( !$this->getUser()->isAllowed( 'editmyoptions' ) ) {
                        throw new PermissionsError( 'editmyoptions' );
                }
@@ -136,7 +118,7 @@ class SpecialPreferences extends SpecialPage {
 
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle( 'reset' ) ); // Reset subpage
-               $htmlForm = new HTMLForm( [], $context, 'prefs-restore' );
+               $htmlForm = HTMLForm::factory( 'ooui', [], $context, 'prefs-restore' );
 
                $htmlForm->setSubmitTextMsg( 'restoreprefs' );
                $htmlForm->setSubmitDestructive();
index 6ce1968..dfa13b6 100644 (file)
@@ -288,8 +288,10 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $dbr = $this->getDB();
                $user = $this->getUser();
 
-               $tables[] = 'recentchanges';
-               $fields = array_merge( RecentChange::selectFields(), $fields );
+               $rcQuery = RecentChange::getQueryInfo();
+               $tables = array_merge( $tables, $rcQuery['tables'] );
+               $fields = array_merge( $rcQuery['fields'], $fields );
+               $join_conds = array_merge( $join_conds, $rcQuery['joins'] );
 
                // JOIN on watchlist for users
                if ( $user->isLoggedIn() && $user->isAllowed( 'viewmywatchlist' ) ) {
@@ -621,18 +623,21 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                                // Check whether the widget is already collapsed or expanded
                                $collapsedState = $this->getRequest()->getCookie( 'rcfilters-toplinks-collapsed-state' );
                                // Note that an empty/unset cookie means collapsed, so check for !== 'expanded'
-                               $collapsedClass = $collapsedState !== 'expanded' ? 'mw-rcfilters-toplinks-collapsed' : '';
+                               $topLinksAttributes[ 'class' ] .= $collapsedState !== 'expanded' ?
+                                       ' mw-recentchanges-toplinks-collapsed' : '';
+
+                               $this->getOutput()->enableOOUI();
+                               $contentTitle = new OOUI\ButtonWidget( [
+                                       'classes' => [ 'mw-recentchanges-toplinks-title' ],
+                                       'label' => new OOUI\HtmlSnippet( $this->msg( 'rcfilters-other-review-tools' )->parse() ),
+                                       'framed' => false,
+                                       'indicator' => $collapsedState !== 'expanded' ? 'down' : 'up',
+                                       'flags' => [ 'progressive' ],
+                               ] );
 
-                               $contentTitle = Html::rawElement( 'div',
-                                       [ 'class' => 'mw-recentchanges-toplinks-title ' . $collapsedClass ],
-                                       $this->msg( 'rcfilters-other-review-tools' )->parse()
-                               );
                                $contentWrapper = Html::rawElement( 'div',
                                        array_merge(
-                                               [
-                                               'class' => 'mw-recentchanges-toplinks-content mw-collapsible-content ' .
-                                                       $collapsedClass
-                                               ],
+                                               [ 'class' => 'mw-recentchanges-toplinks-content mw-collapsible-content' ],
                                                $langAttributes
                                        ),
                                        $content
@@ -912,40 +917,32 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                $links = [];
 
-               $filterGroups = $this->getFilterGroups();
-
-               foreach ( $filterGroups as $groupName => $group ) {
-                       if ( !$group->isPerGroupRequestParameter() ) {
-                               foreach ( $group->getFilters() as $key => $filter ) {
-                                       if ( $filter->displaysOnUnstructuredUi( $this ) ) {
-                                               $msg = $filter->getShowHide();
-                                               $linkMessage = $this->msg( $msg . '-' . $showhide[1 - $options[$key]] );
-                                               // Extensions can define additional filters, but don't need to define the corresponding
-                                               // messages. If they don't exist, just fall back to 'show' and 'hide'.
-                                               if ( !$linkMessage->exists() ) {
-                                                       $linkMessage = $this->msg( $showhide[1 - $options[$key]] );
-                                               }
-
-                                               $link = $this->makeOptionsLink( $linkMessage->text(),
-                                                       [ $key => 1 - $options[$key] ], $nondefaults );
-
-                                               $attribs = [
-                                                       'class' => "$msg rcshowhideoption clshowhideoption",
-                                                       'data-filter-name' => $filter->getName(),
-                                               ];
-
-                                               if ( $filter->isFeatureAvailableOnStructuredUi( $this ) ) {
-                                                       $attribs['data-feature-in-structured-ui'] = true;
-                                               }
-
-                                               $links[] = Html::rawElement(
-                                                       'span',
-                                                       $attribs,
-                                                       $this->msg( $msg )->rawParams( $link )->escaped()
-                                               );
-                                       }
-                               }
+               foreach ( $this->getLegacyShowHideFilters() as $key => $filter ) {
+                       $msg = $filter->getShowHide();
+                       $linkMessage = $this->msg( $msg . '-' . $showhide[1 - $options[$key]] );
+                       // Extensions can define additional filters, but don't need to define the corresponding
+                       // messages. If they don't exist, just fall back to 'show' and 'hide'.
+                       if ( !$linkMessage->exists() ) {
+                               $linkMessage = $this->msg( $showhide[1 - $options[$key]] );
                        }
+
+                       $link = $this->makeOptionsLink( $linkMessage->text(),
+                               [ $key => 1 - $options[$key] ], $nondefaults );
+
+                       $attribs = [
+                               'class' => "$msg rcshowhideoption clshowhideoption",
+                               'data-filter-name' => $filter->getName(),
+                       ];
+
+                       if ( $filter->isFeatureAvailableOnStructuredUi( $this ) ) {
+                               $attribs['data-feature-in-structured-ui'] = true;
+                       }
+
+                       $links[] = Html::rawElement(
+                               'span',
+                               $attribs,
+                               $this->msg( $msg )->rawParams( $link )->escaped()
+                       );
                }
 
                // show from this onward link
index a13af55..358a309 100644 (file)
@@ -62,8 +62,9 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                $outputPage = $this->getOutput();
                $title = Title::newFromText( $target );
                if ( !$title || $title->isExternal() ) {
-                       $outputPage->addHTML( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )
-                                       ->parse() . '</div>' );
+                       $outputPage->addHTML(
+                               Html::errorBox( $this->msg( 'allpagesbadtitle' )->parse() )
+                       );
 
                        return false;
                }
@@ -84,8 +85,10 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                $ns = $title->getNamespace();
                $dbkey = $title->getDBkey();
 
-               $tables[] = 'recentchanges';
-               $select = array_merge( RecentChange::selectFields(), $select );
+               $rcQuery = RecentChange::getQueryInfo();
+               $tables = array_merge( $tables, $rcQuery['tables'] );
+               $select = array_merge( $rcQuery['fields'], $select );
+               $join_conds = array_merge( $join_conds, $rcQuery['joins'] );
 
                // left join with watchlist table to highlight watched rows
                $uid = $this->getUser()->getId();
index 3e89686..964a261 100644 (file)
@@ -74,7 +74,7 @@ class SpecialResetTokens extends FormSpecialPage {
 
        public function onSuccess() {
                $this->getOutput()->wrapWikiMsg(
-                       "<div class='successbox'>\n$1\n</div>",
+                       Html::successBox( '$1' ),
                        'resettokens-done'
                );
        }
index e1d4dd1..8edebf2 100644 (file)
@@ -636,9 +636,10 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        protected function failure( $status ) {
                // Messages: revdelete-failure, logdelete-failure
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText( '<div class="errorbox">' .
-                       $status->getWikiText( $this->typeLabels['failure'] ) .
-                       '</div>'
+               $this->getOutput()->addWikiText(
+                       Html::errorBox(
+                               $status->getWikiText( $this->typeLabels['failure'] )
+                       )
                );
                $this->showForm();
        }
index cb1e892..375694b 100644 (file)
@@ -39,17 +39,21 @@ class SpecialRunJobs extends UnlistedSpecialPage {
 
        public function execute( $par = '' ) {
                $this->getOutput()->disable();
+
                if ( wfReadOnly() ) {
                        wfHttpError( 423, 'Locked', 'Wiki is in read-only mode.' );
                        return;
-               } elseif ( !$this->getRequest()->wasPosted() ) {
+               }
+
+               // Validate request method
+               if ( !$this->getRequest()->wasPosted() ) {
                        wfHttpError( 400, 'Bad Request', 'Request must be POSTed.' );
                        return;
                }
 
+               // Validate request parameters
                $optional = [ 'maxjobs' => 0, 'maxtime' => 30, 'type' => false, 'async' => true ];
                $required = array_flip( [ 'title', 'tasks', 'signature', 'sigexpiry' ] );
-
                $params = array_intersect_key( $this->getRequest()->getValues(), $required + $optional );
                $missing = array_diff_key( $required, $params );
                if ( count( $missing ) ) {
@@ -59,11 +63,11 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                        return;
                }
 
+               // Validate request signature
                $squery = $params;
                unset( $squery['signature'] );
                $correctSignature = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) );
                $providedSignature = $params['signature'];
-
                $verified = is_string( $providedSignature )
                        && hash_equals( $correctSignature, $providedSignature );
                if ( !$verified || $params['sigexpiry'] < time() ) {
@@ -75,39 +79,34 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                $params += $optional;
 
                if ( $params['async'] ) {
-                       // Client will usually disconnect before checking the response,
-                       // but it needs to know when it is safe to disconnect. Until this
-                       // reaches ignore_user_abort(), it is not safe as the jobs won't run.
-                       ignore_user_abort( true ); // jobs may take a bit of time
                        // HTTP 202 Accepted
                        HttpStatus::header( 202 );
-                       ob_flush();
-                       flush();
-                       // Once the client receives this response, it can disconnect
-                       set_error_handler( function ( $errno, $errstr ) {
-                               if ( strpos( $errstr, 'Cannot modify header information' ) !== false ) {
-                                       return true; // bug T115413
-                               }
-                               // Delegate unhandled errors to the default MediaWiki handler
-                               // so that fatal errors get proper logging (T89169)
-                               return call_user_func_array(
-                                       'MWExceptionHandler::handleError', func_get_args()
-                               );
-                       } );
+                       // Clients are meant to disconnect without waiting for the full response.
+                       // Let the page output happen before the jobs start, so that clients know it's
+                       // safe to disconnect. MediaWiki::preOutputCommit() calls ignore_user_abort()
+                       // or similar to make sure we stay alive to run the deferred update.
+                       DeferredUpdates::addUpdate(
+                               new TransactionRoundDefiningUpdate(
+                                       function () use ( $params ) {
+                                               $this->doRun( $params );
+                                       },
+                                       __METHOD__
+                               ),
+                               DeferredUpdates::POSTSEND
+                       );
+               } else {
+                       $this->doRun( $params );
+                       print "Done\n";
                }
+       }
 
-               // Do all of the specified tasks...
-               if ( in_array( 'jobs', explode( '|', $params['tasks'] ) ) ) {
-                       $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
-                       $response = $runner->run( [
-                               'type'     => $params['type'],
-                               'maxJobs'  => $params['maxjobs'] ? $params['maxjobs'] : 1,
-                               'maxTime'  => $params['maxtime'] ? $params['maxjobs'] : 30
-                       ] );
-                       if ( !$params['async'] ) {
-                               print FormatJson::encode( $response, true );
-                       }
-               }
+       protected function doRun( array $params ) {
+               $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
+               $runner->run( [
+                       'type'     => $params['type'],
+                       'maxJobs'  => $params['maxjobs'] ?: 1,
+                       'maxTime'  => $params['maxtime'] ?: 30
+               ] );
        }
 
        /**
index 85b4572..b3a58cb 100644 (file)
@@ -365,16 +365,12 @@ class SpecialSearch extends SpecialPage {
                if ( $hasErrors ) {
                        list( $error, $warning ) = $textStatus->splitByErrorType();
                        if ( $error->getErrors() ) {
-                               $out->addHTML( Html::rawElement(
-                                       'div',
-                                       [ 'class' => 'errorbox' ],
+                               $out->addHTML( Html::errorBox(
                                        $error->getHTML( 'search-error' )
                                ) );
                        }
                        if ( $warning->getErrors() ) {
-                               $out->addHTML( Html::rawElement(
-                                       'div',
-                                       [ 'class' => 'warningbox' ],
+                               $out->addHTML( Html::warningBox(
                                        $warning->getHTML( 'search-warning' )
                                ) );
                        }
@@ -529,7 +525,7 @@ class SpecialSearch extends SpecialPage {
                if ( strval( $term ) !== '' ) {
                        $out->setPageTitle( $this->msg( 'searchresults' ) );
                        $out->setHTMLTitle( $this->msg( 'pagetitle' )
-                               ->rawParams( $this->msg( 'searchresults-title' )->rawParams( $term )->text() )
+                               ->plaintextParams( $this->msg( 'searchresults-title' )->plaintextParams( $term )->text() )
                                ->inContentLanguage()->text()
                        );
                }
index 56b6cc3..0da9b7a 100644 (file)
@@ -57,7 +57,7 @@ class SpecialUnblock extends SpecialPage {
 
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'unblockip' ) );
-               $out->addModules( [ 'mediawiki.special' ] );
+               $out->addModules( [ 'mediawiki.special', 'mediawiki.userSuggest' ] );
 
                $form = HTMLForm::factory( 'ooui', $this->getFields(), $this->getContext() );
                $form->setWrapperLegendMsg( 'unblockip' );
@@ -87,12 +87,12 @@ class SpecialUnblock extends SpecialPage {
        protected function getFields() {
                $fields = [
                        'Target' => [
-                               'type' => 'user',
+                               'type' => 'text',
                                'label-message' => 'ipaddressorusername',
                                'autofocus' => true,
                                'size' => '45',
                                'required' => true,
-                               'ipallowed' => true,
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ],
                        'Name' => [
                                'type' => 'info',
index 740207d..71dee3d 100644 (file)
@@ -969,12 +969,12 @@ class SpecialUndelete extends SpecialPage {
                        $key = urlencode( $row->fa_storage_key );
                        $pageLink = $this->getFileLink( $file, $this->getPageTitle(), $ts, $key );
                } else {
-                       $pageLink = $this->getLanguage()->userTimeAndDate( $ts, $user );
+                       $pageLink = htmlspecialchars( $this->getLanguage()->userTimeAndDate( $ts, $user ) );
                }
                $userLink = $this->getFileUser( $file );
                $data = $this->msg( 'widthheight' )->numParams( $row->fa_width, $row->fa_height )->text();
                $bytes = $this->msg( 'parentheses' )
-                       ->rawParams( $this->msg( 'nbytes' )->numParams( $row->fa_size )->text() )
+                       ->plaintextParams( $this->msg( 'nbytes' )->numParams( $row->fa_size )->text() )
                        ->plain();
                $data = htmlspecialchars( $data . ' ' . $bytes );
                $comment = $this->getFileComment( $file );
@@ -1049,7 +1049,7 @@ class SpecialUndelete extends SpecialPage {
                $time = $this->getLanguage()->userTimeAndDate( $ts, $user );
 
                if ( !$file->userCan( File::DELETED_FILE, $user ) ) {
-                       return '<span class="history-deleted">' . $time . '</span>';
+                       return '<span class="history-deleted">' . htmlspecialchars( $time ) . '</span>';
                }
 
                $link = $this->getLinkRenderer()->makeKnownLink(
index b0bb595..ce8b5a0 100644 (file)
@@ -106,8 +106,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                        $message = $e->getMessage();
                } catch ( SpecialUploadStashTooLargeException $e ) {
                        $code = 500;
-                       $message = 'Cannot serve a file larger than ' . self::MAX_SERVE_BYTES .
-                               ' bytes. ' . $e->getMessage();
+                       $message = $e->getMessage();
                } catch ( Exception $e ) {
                        $code = 500;
                        $message = $e->getMessage();
@@ -129,7 +128,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                $type = strtok( $key, '/' );
 
                if ( $type !== 'file' && $type !== 'thumb' ) {
-                       throw new UploadStashBadPathException( "Unknown type '$type'" );
+                       throw new UploadStashBadPathException(
+                               wfMessage( 'uploadstash-bad-path-unknown-type', $type )
+                       );
                }
                $fileName = strtok( '/' );
                $thumbPart = strtok( '/' );
@@ -137,7 +138,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                if ( $type === 'thumb' ) {
                        $srcNamePos = strrpos( $thumbPart, $fileName );
                        if ( $srcNamePos === false || $srcNamePos < 1 ) {
-                               throw new UploadStashBadPathException( 'Unrecognized thumb name' );
+                               throw new UploadStashBadPathException(
+                                       wfMessage( 'uploadstash-bad-path-unrecognized-thumb-name' )
+                               );
                        }
                        $paramString = substr( $thumbPart, 0, $srcNamePos - 1 );
 
@@ -147,8 +150,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
 
                                return [ 'file' => $file, 'type' => $type, 'params' => $params ];
                        } else {
-                               throw new UploadStashBadPathException( 'No handler found for ' .
-                                       "mime {$file->getMimeType()} of file {$file->getPath()}" );
+                               throw new UploadStashBadPathException(
+                                       wfMessage( 'uploadstash-bad-path-no-handler', $file->getMimeType(), $file->getPath() )
+                               );
                        }
                }
 
@@ -194,12 +198,16 @@ class SpecialUploadStash extends UnlistedSpecialPage {
 
                $thumbnailImage = $file->transform( $params, $flags );
                if ( !$thumbnailImage ) {
-                       throw new MWException( 'Could not obtain thumbnail' );
+                       throw new UploadStashFileNotFoundException(
+                               wfMessage( 'uploadstash-file-not-found-no-thumb' )
+                       );
                }
 
                // we should have just generated it locally
                if ( !$thumbnailImage->getStoragePath() ) {
-                       throw new UploadStashFileNotFoundException( "no local path for scaled item" );
+                       throw new UploadStashFileNotFoundException(
+                               wfMessage( 'uploadstash-file-not-found-no-local-path' )
+                       );
                }
 
                // now we should construct a File, so we can get MIME and other such info in a standard way
@@ -207,7 +215,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                $thumbFile = new UnregisteredLocalFile( false,
                        $this->stash->repo, $thumbnailImage->getStoragePath(), false );
                if ( !$thumbFile ) {
-                       throw new UploadStashFileNotFoundException( "couldn't create local file object for thumbnail" );
+                       throw new UploadStashFileNotFoundException(
+                               wfMessage( 'uploadstash-file-not-found-no-object' )
+                       );
                }
 
                return $this->outputLocalFile( $thumbFile );
@@ -261,13 +271,19 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                $status = $req->execute();
                if ( !$status->isOK() ) {
                        $errors = $status->getErrorsArray();
-                       $errorStr = "Fetching thumbnail failed: " . print_r( $errors, 1 );
-                       $errorStr .= "\nurl = $scalerThumbUrl\n";
-                       throw new MWException( $errorStr );
+                       throw new UploadStashFileNotFoundException(
+                               wfMessage(
+                                       'uploadstash-file-not-found-no-remote-thumb',
+                                       print_r( $errors, 1 ),
+                                       $scalerThumbUrl
+                               )
+                       );
                }
                $contentType = $req->getResponseHeader( "content-type" );
                if ( !$contentType ) {
-                       throw new MWException( "Missing content-type header" );
+                       throw new UploadStashFileNotFoundException(
+                               wfMessage( 'uploadstash-file-not-found-missing-content-type' )
+                       );
                }
 
                return $this->outputContents( $req->getContent(), $contentType );
@@ -284,7 +300,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         */
        private function outputLocalFile( File $file ) {
                if ( $file->getSize() > self::MAX_SERVE_BYTES ) {
-                       throw new SpecialUploadStashTooLargeException();
+                       throw new SpecialUploadStashTooLargeException(
+                               wfMessage( 'uploadstash-file-too-large', self::MAX_SERVE_BYTES )
+                       );
                }
 
                return $file->getRepo()->streamFile( $file->getPath(),
@@ -304,7 +322,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
        private function outputContents( $content, $contentType ) {
                $size = strlen( $content );
                if ( $size > self::MAX_SERVE_BYTES ) {
-                       throw new SpecialUploadStashTooLargeException();
+                       throw new SpecialUploadStashTooLargeException(
+                               wfMessage( 'uploadstash-file-too-large', self::MAX_SERVE_BYTES )
+                       );
                }
                // Cancel output buffering and gzipping if set
                wfResetOutputBuffers();
@@ -427,5 +447,5 @@ class SpecialUploadStash extends UnlistedSpecialPage {
        }
 }
 
-class SpecialUploadStashTooLargeException extends MWException {
+class SpecialUploadStashTooLargeException extends UploadStashException {
 }
index fcf1bfb..ff62e9e 100644 (file)
@@ -333,15 +333,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                        // This is how we handle the fact that HTML forms don't submit
                        // unchecked boxes.
-                       foreach ( $this->filterGroups as $filterGroup ) {
-                               if ( $filterGroup instanceof ChangesListBooleanFilterGroup ) {
-                                       /** @var ChangesListBooleanFilter $filter */
-                                       foreach ( $filterGroup->getFilters() as $filter ) {
-                                               if ( $filter->displaysOnUnstructuredUi() ) {
-                                                       $allBooleansFalse[$filter->getName()] = false;
-                                               }
-                                       }
-                               }
+                       foreach ( $this->getLegacyShowHideFilters() as $filter ) {
+                               $allBooleansFalse[ $filter->getName() ] = false;
                        }
 
                        $params = $params + $allBooleansFalse;
@@ -364,8 +357,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $dbr = $this->getDB();
                $user = $this->getUser();
 
-               $tables = array_merge( [ 'recentchanges', 'watchlist' ], $tables );
-               $fields = array_merge( RecentChange::selectFields(), $fields );
+               $rcQuery = RecentChange::getQueryInfo();
+               $tables = array_merge( $tables, $rcQuery['tables'], [ 'watchlist' ] );
+               $fields = array_merge( $rcQuery['fields'], $fields );
 
                $join_conds = array_merge(
                        [
@@ -378,6 +372,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                        ],
                                ],
                        ],
+                       $rcQuery['joins'],
                        $join_conds
                );
 
@@ -646,21 +641,15 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                # Spit out some control panel links
                $links = [];
                $namesOfDisplayedFilters = [];
-               foreach ( $this->getFilterGroups() as $groupName => $group ) {
-                       if ( !$group->isPerGroupRequestParameter() ) {
-                               foreach ( $group->getFilters() as $filterName => $filter ) {
-                                       if ( $filter->displaysOnUnstructuredUi( $this ) ) {
-                                               $namesOfDisplayedFilters[] = $filterName;
-                                               $links[] = $this->showHideCheck(
-                                                       $nondefaults,
-                                                       $filter->getShowHide(),
-                                                       $filterName,
-                                                       $opts[$filterName],
-                                                       $filter->isFeatureAvailableOnStructuredUi( $this )
-                                               );
-                                       }
-                               }
-                       }
+               foreach ( $this->getLegacyShowHideFilters() as $filterName => $filter ) {
+                       $namesOfDisplayedFilters[] = $filterName;
+                       $links[] = $this->showHideCheck(
+                               $nondefaults,
+                               $filter->getShowHide(),
+                               $filterName,
+                               $opts[ $filterName ],
+                               $filter->isFeatureAvailableOnStructuredUi( $this )
+                       );
                }
 
                $hiddenFields = $nondefaults;
index d4e5ef4..28cfb8b 100644 (file)
  * @file
  */
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * Form to edit user preferences.
  */
-class PreferencesForm extends HTMLForm {
+class PreferencesForm extends OOUIHTMLForm {
        // Override default value from HTMLForm
        protected $mSubSectionBeforeFields = false;
 
@@ -71,8 +69,6 @@ class PreferencesForm extends HTMLForm {
         * @return string
         */
        function getButtons() {
-               $attrs = [ 'id' => 'mw-prefs-restoreprefs' ];
-
                if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
                        return '';
                }
@@ -82,9 +78,14 @@ class PreferencesForm extends HTMLForm {
                if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
                        $t = $this->getTitle()->getSubpage( 'reset' );
 
-                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
-                       $html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),
-                               Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ) );
+                       $html .= new OOUI\ButtonWidget( [
+                               'infusable' => true,
+                               'id' => 'mw-prefs-restoreprefs',
+                               'label' => $this->msg( 'restoreprefs' )->text(),
+                               'href' => $t->getLinkURL(),
+                               'flags' => [ 'destructive' ],
+                               'framed' => false,
+                       ] );
 
                        $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
                }
index 979460c..85faddc 100644 (file)
@@ -175,79 +175,25 @@ class ContribsPager extends RangeChronologicalPager {
        }
 
        function getQueryInfo() {
-               list( $tables, $index, $userCond, $join_cond ) = $this->getUserCond();
-
-               $user = $this->getUser();
-               $conds = array_merge( $userCond, $this->getNamespaceCond() );
-
-               // Paranoia: avoid brute force searches (T19342)
-               if ( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0';
-               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
-                       $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::SUPPRESSED_USER ) .
-                               ' != ' . Revision::SUPPRESSED_USER;
-               }
-
-               # Don't include orphaned revisions
-               $join_cond['page'] = Revision::pageJoinCond();
-               # Get the current user name for accounts
-               $join_cond['user'] = Revision::userJoinCond();
-
-               $options = [];
-               if ( $index ) {
-                       $options['USE INDEX'] = [ 'revision' => $index ];
-               }
-
+               $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] );
                $queryInfo = [
-                       'tables' => $tables,
-                       'fields' => array_merge(
-                               Revision::selectFields(),
-                               Revision::selectUserFields(),
-                               [ 'page_namespace', 'page_title', 'page_is_new',
-                                       'page_latest', 'page_is_redirect', 'page_len' ]
-                       ),
-                       'conds' => $conds,
-                       'options' => $options,
-                       'join_conds' => $join_cond
+                       'tables' => $revQuery['tables'],
+                       'fields' => array_merge( $revQuery['fields'], [ 'page_is_new' ] ),
+                       'conds' => [],
+                       'options' => [],
+                       'join_conds' => $revQuery['joins'],
                ];
 
-               // For IPv6, we use ipc_rev_timestamp on ip_changes as the index field,
-               // which will be referenced when parsing the results of a query.
-               if ( self::isQueryableRange( $this->target ) ) {
-                       $queryInfo['fields'][] = 'ipc_rev_timestamp';
-               }
-
-               ChangeTags::modifyDisplayQuery(
-                       $queryInfo['tables'],
-                       $queryInfo['fields'],
-                       $queryInfo['conds'],
-                       $queryInfo['join_conds'],
-                       $queryInfo['options'],
-                       $this->tagFilter
-               );
-
-               // Avoid PHP 7.1 warning from passing $this by reference
-               $pager = $this;
-               Hooks::run( 'ContribsPager::getQueryInfo', [ &$pager, &$queryInfo ] );
-
-               return $queryInfo;
-       }
-
-       function getUserCond() {
-               $condition = [];
-               $join_conds = [];
-               $tables = [ 'revision', 'page', 'user' ];
-               $index = false;
                if ( $this->contribs == 'newbie' ) {
                        $max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ );
-                       $condition[] = 'rev_user >' . (int)( $max - $max / 100 );
+                       $queryInfo['conds'][] = 'rev_user >' . (int)( $max - $max / 100 );
                        # ignore local groups with the bot right
                        # @todo FIXME: Global groups may have 'bot' rights
                        $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
                        if ( count( $groupsWithBotPermission ) ) {
-                               $tables[] = 'user_groups';
-                               $condition[] = 'ug_group IS NULL';
-                               $join_conds['user_groups'] = [
+                               $queryInfo['tables'][] = 'user_groups';
+                               $queryInfo['conds'][] = 'ug_group IS NULL';
+                               $queryInfo['join_conds']['user_groups'] = [
                                        'LEFT JOIN', [
                                                'ug_user = rev_user',
                                                'ug_group' => $groupsWithBotPermission,
@@ -259,46 +205,76 @@ class ContribsPager extends RangeChronologicalPager {
                        // (T140537) Disallow looking too far in the past for 'newbies' queries. If the user requested
                        // a timestamp offset far in the past such that there are no edits by users with user_ids in
                        // the range, we would end up scanning all revisions from that offset until start of time.
-                       $condition[] = 'rev_timestamp > ' .
+                       $queryInfo['conds'][] = 'rev_timestamp > ' .
                                $this->mDb->addQuotes( $this->mDb->timestamp( wfTimestamp() - 30 * 24 * 60 * 60 ) );
                } else {
                        $uid = User::idFromName( $this->target );
                        if ( $uid ) {
-                               $condition['rev_user'] = $uid;
-                               $index = 'user_timestamp';
+                               $queryInfo['conds']['rev_user'] = $uid;
+                               $queryInfo['options']['USE INDEX']['revision'] = 'user_timestamp';
                        } else {
                                $ipRangeConds = $this->getIpRangeConds( $this->mDb, $this->target );
 
                                if ( $ipRangeConds ) {
-                                       $tables[] = 'ip_changes';
-                                       $join_conds['ip_changes'] = [
+                                       $queryInfo['tables'][] = 'ip_changes';
+                                       $queryInfo['join_conds']['ip_changes'] = [
                                                'LEFT JOIN', [ 'ipc_rev_id = rev_id' ]
                                        ];
-                                       $condition[] = $ipRangeConds;
+                                       $queryInfo['conds'][] = $ipRangeConds;
                                } else {
-                                       $condition['rev_user_text'] = $this->target;
-                                       $index = 'usertext_timestamp';
+                                       $queryInfo['conds']['rev_user_text'] = $this->target;
+                                       $queryInfo['options']['USE INDEX']['revision'] = 'usertext_timestamp';
                                }
                        }
                }
 
                if ( $this->deletedOnly ) {
-                       $condition[] = 'rev_deleted != 0';
+                       $queryInfo['conds'][] = 'rev_deleted != 0';
                }
 
                if ( $this->topOnly ) {
-                       $condition[] = 'rev_id = page_latest';
+                       $queryInfo['conds'][] = 'rev_id = page_latest';
                }
 
                if ( $this->newOnly ) {
-                       $condition[] = 'rev_parent_id = 0';
+                       $queryInfo['conds'][] = 'rev_parent_id = 0';
                }
 
                if ( $this->hideMinor ) {
-                       $condition[] = 'rev_minor_edit = 0';
+                       $queryInfo['conds'][] = 'rev_minor_edit = 0';
+               }
+
+               $user = $this->getUser();
+               $queryInfo['conds'] = array_merge( $queryInfo['conds'], $this->getNamespaceCond() );
+
+               // Paranoia: avoid brute force searches (T19342)
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $queryInfo['conds'][] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0';
+               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+                       $queryInfo['conds'][] = $this->mDb->bitAnd( 'rev_deleted', Revision::SUPPRESSED_USER ) .
+                               ' != ' . Revision::SUPPRESSED_USER;
                }
 
-               return [ $tables, $index, $condition, $join_conds ];
+               // For IPv6, we use ipc_rev_timestamp on ip_changes as the index field,
+               // which will be referenced when parsing the results of a query.
+               if ( self::isQueryableRange( $this->target ) ) {
+                       $queryInfo['fields'][] = 'ipc_rev_timestamp';
+               }
+
+               ChangeTags::modifyDisplayQuery(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $queryInfo['conds'],
+                       $queryInfo['join_conds'],
+                       $queryInfo['options'],
+                       $this->tagFilter
+               );
+
+               // Avoid PHP 7.1 warning from passing $this by reference
+               $pager = $this;
+               Hooks::run( 'ContribsPager::getQueryInfo', [ &$pager, &$queryInfo ] );
+
+               return $queryInfo;
        }
 
        function getNamespaceCond() {
index bbf97e1..6a8f7da 100644 (file)
@@ -85,13 +85,12 @@ class MergeHistoryPager extends ReverseChronologicalPager {
                $conds['rev_page'] = $this->articleID;
                $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp );
 
+               $revQuery = Revision::getQueryInfo( [ 'page', 'user' ] );
                return [
-                       'tables' => [ 'revision', 'page', 'user' ],
-                       'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       'tables' => $revQuery['tables'],
+                       'fields' => $revQuery['fields'],
                        'conds' => $conds,
-                       'join_conds' => [
-                               'page' => Revision::pageJoinCond(),
-                               'user' => Revision::userJoinCond() ]
+                       'join_conds' => $revQuery['joins']
                ];
        }
 
index 53362d9..a87bbb7 100644 (file)
@@ -28,7 +28,7 @@ class NewPagesPager extends ReverseChronologicalPager {
        protected $opts;
 
        /**
-        * @var HtmlForm
+        * @var HTMLForm
         */
        protected $mForm;
 
index fbe9270..82c35bb 100644 (file)
@@ -1669,13 +1669,11 @@ class BalanceActiveFormattingElements {
                $this->addToNoahList( $b );
        }
 
-       // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
        /**
         * Reconstruct the active formatting elements.
         * @param BalanceStack $stack The open elements stack
         * @see https://html.spec.whatwg.org/multipage/syntax.html#reconstruct-the-active-formatting-elements
         */
-       // @codingStandardsIgnoreEnd
        public function reconstruct( $stack ) {
                $entry = $this->tail;
                // If there are no entries in the list of active formatting elements,
index 755f9fd..c2ab899 100644 (file)
@@ -118,12 +118,15 @@ class UploadStash {
         */
        public function getFile( $key, $noAuth = false ) {
                if ( !preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
-                       throw new UploadStashBadPathException( "key '$key' is not in a proper format" );
+                       throw new UploadStashBadPathException(
+                               wfMessage( 'uploadstash-bad-path-bad-format', $key )
+                       );
                }
 
                if ( !$noAuth && !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__ .
-                               ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException(
+                               wfMessage( 'uploadstash-not-logged-in' )
+                       );
                }
 
                if ( !isset( $this->fileMetadata[$key] ) ) {
@@ -134,7 +137,9 @@ class UploadStash {
                        }
 
                        if ( !isset( $this->fileMetadata[$key] ) ) {
-                               throw new UploadStashFileNotFoundException( "key '$key' not found in stash" );
+                               throw new UploadStashFileNotFoundException(
+                                       wfMessage( 'uploadstash-file-not-found', $key )
+                               );
                        }
 
                        // create $this->files[$key]
@@ -153,13 +158,16 @@ class UploadStash {
                if ( !$this->files[$key]->exists() ) {
                        wfDebug( __METHOD__ . " tried to get file at $key, but it doesn't exist\n" );
                        // @todo Is this not an UploadStashFileNotFoundException case?
-                       throw new UploadStashBadPathException( "path doesn't exist" );
+                       throw new UploadStashBadPathException(
+                               wfMessage( 'uploadstash-bad-path' )
+                       );
                }
 
                if ( !$noAuth ) {
                        if ( $this->fileMetadata[$key]['us_user'] != $this->userId ) {
-                               throw new UploadStashWrongOwnerException( "This file ($key) doesn't "
-                                       . "belong to the current user." );
+                               throw new UploadStashWrongOwnerException(
+                                       wfMessage( 'uploadstash-wrong-owner', $key )
+                               );
                        }
                }
 
@@ -205,7 +213,9 @@ class UploadStash {
        public function stashFile( $path, $sourceType = null ) {
                if ( !is_file( $path ) ) {
                        wfDebug( __METHOD__ . " tried to stash file at '$path', but it doesn't exist\n" );
-                       throw new UploadStashBadPathException( "path doesn't exist" );
+                       throw new UploadStashBadPathException(
+                               wfMessage( 'uploadstash-bad-path' )
+                       );
                }
 
                $mwProps = new MWFileProps( MimeMagic::singleton() );
@@ -236,7 +246,9 @@ class UploadStash {
                $this->fileProps[$key] = $fileProps;
 
                if ( !preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
-                       throw new UploadStashBadPathException( "key '$key' is not in a proper format" );
+                       throw new UploadStashBadPathException(
+                               wfMessage( 'uploadstash-bad-path-bad-format', $key )
+                       );
                }
 
                wfDebug( __METHOD__ . " key for '$path': $key\n" );
@@ -265,15 +277,15 @@ class UploadStash {
                        // At this point, $error should contain the single "most important"
                        // error, plus any parameters.
                        $errorMsg = array_shift( $error );
-                       throw new UploadStashFileException( "Error storing file in '$path': "
-                               . wfMessage( $errorMsg, $error )->text() );
+                       throw new UploadStashFileException( wfMessage( $errorMsg, $error ) );
                }
                $stashPath = $storeStatus->value;
 
                // fetch the current user ID
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__
-                               . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException(
+                               wfMessage( 'uploadstash-not-logged-in' )
+                       );
                }
 
                // insert the file metadata into the db.
@@ -332,8 +344,9 @@ class UploadStash {
         */
        public function clear() {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__
-                               . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException(
+                               wfMessage( 'uploadstash-not-logged-in' )
+                       );
                }
 
                wfDebug( __METHOD__ . ' clearing all rows for user ' . $this->userId . "\n" );
@@ -361,8 +374,9 @@ class UploadStash {
         */
        public function removeFile( $key ) {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__
-                               . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException(
+                               wfMessage( 'uploadstash-not-logged-in' )
+                       );
                }
 
                $dbw = $this->repo->getMasterDB();
@@ -377,12 +391,15 @@ class UploadStash {
                );
 
                if ( !$row ) {
-                       throw new UploadStashNoSuchKeyException( "No such key ($key), cannot remove" );
+                       throw new UploadStashNoSuchKeyException(
+                               wfMessage( 'uploadstash-no-such-key', $key )
+                       );
                }
 
                if ( $row->us_user != $this->userId ) {
-                       throw new UploadStashWrongOwnerException( "Can't delete: "
-                               . "the file ($key) doesn't belong to this user." );
+                       throw new UploadStashWrongOwnerException(
+                               wfMessage( 'uploadstash-wrong-owner', $key )
+                       );
                }
 
                return $this->removeFileNoAuth( $key );
@@ -427,8 +444,9 @@ class UploadStash {
         */
        public function listFiles() {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__
-                               . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException(
+                               wfMessage( 'uploadstash-not-logged-in' )
+                       );
                }
 
                $dbr = $this->repo->getReplicaDB();
@@ -481,7 +499,9 @@ class UploadStash {
                }
 
                if ( is_null( $extension ) ) {
-                       throw new UploadStashFileException( "extension is null" );
+                       throw new UploadStashFileException(
+                               wfMessage( 'uploadstash-no-extension' )
+                       );
                }
 
                $extension = File::normalizeExtension( $extension );
@@ -515,7 +535,12 @@ class UploadStash {
 
                $row = $dbr->selectRow(
                        'uploadstash',
-                       '*',
+                       [
+                               'us_user', 'us_key', 'us_orig_path', 'us_path', 'us_props',
+                               'us_size', 'us_sha1', 'us_mime', 'us_media_type',
+                               'us_image_width', 'us_image_height', 'us_image_bits',
+                               'us_source_type', 'us_timestamp', 'us_status',
+                       ],
                        [ 'us_key' => $key ],
                        __METHOD__
                );
@@ -541,7 +566,9 @@ class UploadStash {
        protected function initFile( $key ) {
                $file = new UploadStashFile( $this->repo, $this->fileMetadata[$key]['us_path'], $key );
                if ( $file->getSize() === 0 ) {
-                       throw new UploadStashZeroLengthFileException( "File is zero length" );
+                       throw new UploadStashZeroLengthFileException(
+                               wfMessage( 'uploadstash-zero-length' )
+                       );
                }
                $this->files[$key] = $file;
 
@@ -581,14 +608,18 @@ class UploadStashFile extends UnregisteredLocalFile {
                        ) {
                                wfDebug( "UploadStash: tried to construct an UploadStashFile "
                                        . "from a file that should already exist at '$path', but path is not valid\n" );
-                               throw new UploadStashBadPathException( 'path is not valid' );
+                               throw new UploadStashBadPathException(
+                                       wfMessage( 'uploadstash-bad-path-invalid' )
+                               );
                        }
 
                        // check if path exists! and is a plain file.
                        if ( !$repo->fileExists( $path ) ) {
                                wfDebug( "UploadStash: tried to construct an UploadStashFile from "
                                        . "a file that should already exist at '$path', but path is not found\n" );
-                               throw new UploadStashFileNotFoundException( 'cannot find path, or not a plain file' );
+                               throw new UploadStashFileNotFoundException(
+                                       wfMessage( 'uploadstash-file-not-found-not-exists' )
+                               );
                        }
                }
 
@@ -734,7 +765,27 @@ class UploadStashFile extends UnregisteredLocalFile {
        }
 }
 
-class UploadStashException extends MWException {
+class UploadStashException extends MWException implements ILocalizedException {
+       /** @var string|array|MessageSpecifier */
+       protected $messageSpec;
+
+       /**
+        * @param string|array|MessageSpecifier $messageSpec See Message::newFromSpecifier
+        * @param int $code Exception code
+        * @param Exception|Throwable $previous The previous exception used for the exception chaining.
+        */
+       public function __construct( $messageSpec, $code = 0, $previous = null ) {
+               $this->messageSpec = $messageSpec;
+
+               $msg = $this->getMessageObject()->text();
+               $msg = preg_replace( '!</?(var|kbd|samp|code)>!', '"', $msg );
+               $msg = Sanitizer::stripAllTags( $msg );
+               parent::__construct( $msg, $code, $previous );
+       }
+
+       public function getMessageObject() {
+               return Message::newFromSpecifier( $this->messageSpec );
+       }
 }
 
 class UploadStashFileNotFoundException extends UploadStashException {
index 25625e7..b898d8a 100644 (file)
@@ -437,7 +437,7 @@ class BotPassword implements IDBAccessObject {
         * @return Status On success, the good status's value is the new Session object
         */
        public static function login( $username, $password, WebRequest $request ) {
-               global $wgEnableBotPasswords;
+               global $wgEnableBotPasswords, $wgPasswordAttemptThrottle;
 
                if ( !$wgEnableBotPasswords ) {
                        return Status::newFatal( 'botpasswords-disabled' );
@@ -462,6 +462,20 @@ class BotPassword implements IDBAccessObject {
                        return Status::newFatal( 'nosuchuser', $name );
                }
 
+               // Throttle
+               $throttle = null;
+               if ( !empty( $wgPasswordAttemptThrottle ) ) {
+                       $throttle = new MediaWiki\Auth\Throttler( $wgPasswordAttemptThrottle, [
+                               'type' => 'botpassword',
+                               'cache' => ObjectCache::getLocalClusterInstance(),
+                       ] );
+                       $result = $throttle->increase( $user->getName(), $request->getIP(), __METHOD__ );
+                       if ( $result ) {
+                               $msg = wfMessage( 'login-throttled' )->durationParams( $result['wait'] );
+                               return Status::newFatal( $msg );
+                       }
+               }
+
                // Get the bot password
                $bp = self::newFromUser( $user, $appId );
                if ( !$bp ) {
@@ -480,6 +494,9 @@ class BotPassword implements IDBAccessObject {
                }
 
                // Ok! Create the session.
+               if ( $throttle ) {
+                       $throttle->clear( $user->getName(), $request->getIP() );
+               }
                return Status::newGood( $provider->newSessionForRequest( $user, $bp, $request ) );
        }
 }
index dd16fb7..faf09ee 100644 (file)
@@ -288,11 +288,14 @@ class PasswordReset implements LoggerAwareInterface {
         * @throws MWException On unexpected database errors
         */
        protected function getUsersByEmail( $email ) {
+               $userQuery = User::getQueryInfo();
                $res = wfGetDB( DB_REPLICA )->select(
-                       'user',
-                       User::selectFields(),
+                       $userQuery['tables'],
+                       $userQuery['fields'],
                        [ 'user_email' => $email ],
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $userQuery['joins']
                );
 
                if ( !$res ) {
index 1c894a0..854ebbd 100644 (file)
@@ -688,20 +688,25 @@ class User implements IDBAccessObject {
                }
 
                $dbr = wfGetDB( DB_REPLICA );
+               $userQuery = self::getQueryInfo();
                $row = $dbr->selectRow(
-                       'user',
-                       self::selectFields(),
+                       $userQuery['tables'],
+                       $userQuery['fields'],
                        [ 'user_name' => $name ],
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $userQuery['joins']
                );
                if ( !$row ) {
                        // Try the master database...
                        $dbw = wfGetDB( DB_MASTER );
                        $row = $dbw->selectRow(
-                               'user',
-                               self::selectFields(),
+                               $userQuery['tables'],
+                               $userQuery['fields'],
                                [ 'user_name' => $name ],
-                               __METHOD__
+                               __METHOD__,
+                               [],
+                               $userQuery['joins']
                        );
                }
 
@@ -1278,12 +1283,14 @@ class User implements IDBAccessObject {
                list( $index, $options ) = DBAccessObjectUtils::getDBOptions( $flags );
                $db = wfGetDB( $index );
 
+               $userQuery = self::getQueryInfo();
                $s = $db->selectRow(
-                       'user',
-                       self::selectFields(),
+                       $userQuery['tables'],
+                       $userQuery['fields'],
                        [ 'user_id' => $this->mId ],
                        __METHOD__,
-                       $options
+                       $options,
+                       $userQuery['joins']
                );
 
                $this->queryFlagsUsed = $flags;
@@ -5497,9 +5504,11 @@ class User implements IDBAccessObject {
        /**
         * Return the list of user fields that should be selected to create
         * a new user object.
+        * @deprecated since 1.31, use self::getQueryInfo() instead.
         * @return array
         */
        public static function selectFields() {
+               wfDeprecated( __METHOD__, '1.31' );
                return [
                        'user_id',
                        'user_name',
@@ -5515,6 +5524,35 @@ class User implements IDBAccessObject {
                ];
        }
 
+       /**
+        * Return the tables, fields, and join conditions to be selected to create
+        * a new user object.
+        * @since 1.31
+        * @return array With three keys:
+        *   - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+        *   - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+        *   - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+        */
+       public static function getQueryInfo() {
+               return [
+                       'tables' => [ 'user' ],
+                       'fields' => [
+                               'user_id',
+                               'user_name',
+                               'user_real_name',
+                               'user_email',
+                               'user_touched',
+                               'user_token',
+                               'user_email_authenticated',
+                               'user_email_token',
+                               'user_email_token_expires',
+                               'user_registration',
+                               'user_editcount',
+                       ],
+                       'joins' => [],
+               ];
+       }
+
        /**
         * Factory function for fatal permission-denied errors
         *
index ab6683b..f3a7f9f 100644 (file)
@@ -49,11 +49,14 @@ abstract class UserArray implements Iterator {
                        return new ArrayIterator( [] );
                }
                $dbr = wfGetDB( DB_REPLICA );
+               $userQuery = User::getQueryInfo();
                $res = $dbr->select(
-                       'user',
-                       User::selectFields(),
+                       $userQuery['tables'],
+                       $userQuery['fields'],
                        [ 'user_id' => array_unique( $ids ) ],
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $userQuery['joins']
                );
                return self::newFromResult( $res );
        }
@@ -70,11 +73,14 @@ abstract class UserArray implements Iterator {
                        return new ArrayIterator( [] );
                }
                $dbr = wfGetDB( DB_REPLICA );
+               $userQuery = User::getQueryInfo();
                $res = $dbr->select(
-                       'user',
-                       User::selectFields(),
+                       $userQuery['tables'],
+                       $userQuery['fields'],
                        [ 'user_name' => array_unique( $names ) ],
-                       __METHOD__
+                       __METHOD__,
+                       [],
+                       $userQuery['joins']
                );
                return self::newFromResult( $res );
        }
diff --git a/includes/utils/ExecutableFinder.php b/includes/utils/ExecutableFinder.php
new file mode 100644 (file)
index 0000000..93f635d
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Copyright (C) 2017 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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.
+ *
+ */
+
+use MediaWiki\Shell\Shell;
+
+/**
+ * Utility class to find executables in likely places
+ *
+ * @since 1.31
+ */
+class ExecutableFinder {
+
+       /**
+        * Get an array of likely places we can find executables. Check a bunch
+        * of known Unix-like defaults, as well as the PATH environment variable
+        * (which should maybe make it work for Windows?)
+        *
+        * @return array
+        */
+       protected static function getPossibleBinPaths() {
+               return array_unique( array_merge(
+                       [ '/usr/bin', '/bin', '/usr/local/bin', '/opt/csw/bin',
+                               '/usr/gnu/bin', '/usr/sfw/bin', '/sw/bin', '/opt/local/bin' ],
+                       explode( PATH_SEPARATOR, getenv( 'PATH' ) )
+               ) );
+       }
+
+       /**
+        * Search a path for any of the given executable names. Returns the
+        * executable name if found. Also checks the version string returned
+        * by each executable.
+        *
+        * Used only by environment checks.
+        *
+        * @param string $path Path to search
+        * @param string $name Executable name to look for
+        * @param array|bool $versionInfo False or array with two members:
+        *   0 => Parameter to pass to binary for version check (e.g. --version)
+        *   1 => String to compare the output with
+        *
+        * If $versionInfo is not false, only executables with a version
+        * matching $versionInfo[1] will be returned.
+        * @return bool|string
+        */
+       protected static function findExecutable( $path, $name, $versionInfo = false ) {
+               $command = $path . DIRECTORY_SEPARATOR . $name;
+
+               MediaWiki\suppressWarnings();
+               $file_exists = is_executable( $command );
+               MediaWiki\restoreWarnings();
+
+               if ( $file_exists ) {
+                       if ( !$versionInfo ) {
+                               return $command;
+                       }
+
+                       $output = Shell::command( $command, $versionInfo[0] )
+                               ->includeStderr()->execute()->getStdout();
+                       if ( strstr( $output, $versionInfo[1] ) !== false ) {
+                               return $command;
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * Same as locateExecutable(), but checks in getPossibleBinPaths() by default
+        * @see locateExecutable()
+        * @param string|string[] $names Array of possible names.
+        * @param array|bool $versionInfo Default: false or array with two members:
+        *   0 => Parameter to run for version check, e.g. '--version'
+        *   1 => String to compare the output with
+        *
+        * If $versionInfo is not false, only executables with a version
+        * matching $versionInfo[1] will be returned.
+        * @return bool|string
+        */
+       public static function findInDefaultPaths( $names, $versionInfo = false ) {
+               $paths = self::getPossibleBinPaths();
+               foreach ( (array)$names as $name ) {
+                       foreach ( $paths as $path ) {
+                               $exe = self::findExecutable( $path, $name, $versionInfo );
+                               if ( $exe !== false ) {
+                                       return $exe;
+                               }
+                       }
+               }
+
+               return false;
+       }
+
+}
diff --git a/includes/watcheditem/WatchedItem.php b/includes/watcheditem/WatchedItem.php
new file mode 100644 (file)
index 0000000..bfd1d61
--- /dev/null
@@ -0,0 +1,200 @@
+<?php
+/**
+ * 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 Watchlist
+ */
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * Representation of a pair of user and title for watchlist entries.
+ *
+ * @author Tim Starling
+ * @author Addshore
+ *
+ * @ingroup Watchlist
+ */
+class WatchedItem {
+
+       /**
+        * @deprecated since 1.27, see User::IGNORE_USER_RIGHTS
+        */
+       const IGNORE_USER_RIGHTS = User::IGNORE_USER_RIGHTS;
+
+       /**
+        * @deprecated since 1.27, see User::CHECK_USER_RIGHTS
+        */
+       const CHECK_USER_RIGHTS = User::CHECK_USER_RIGHTS;
+
+       /**
+        * @deprecated Internal class use only
+        */
+       const DEPRECATED_USAGE_TIMESTAMP = -100;
+
+       /**
+        * @var bool
+        * @deprecated Internal class use only
+        */
+       public $checkRights = User::CHECK_USER_RIGHTS;
+
+       /**
+        * @var Title
+        * @deprecated Internal class use only
+        */
+       private $title;
+
+       /**
+        * @var LinkTarget
+        */
+       private $linkTarget;
+
+       /**
+        * @var User
+        */
+       private $user;
+
+       /**
+        * @var null|string the value of the wl_notificationtimestamp field
+        */
+       private $notificationTimestamp;
+
+       /**
+        * @param User $user
+        * @param LinkTarget $linkTarget
+        * @param null|string $notificationTimestamp the value of the wl_notificationtimestamp field
+        * @param bool|null $checkRights DO NOT USE - used internally for backward compatibility
+        */
+       public function __construct(
+               User $user,
+               LinkTarget $linkTarget,
+               $notificationTimestamp,
+               $checkRights = null
+       ) {
+               $this->user = $user;
+               $this->linkTarget = $linkTarget;
+               $this->notificationTimestamp = $notificationTimestamp;
+               if ( $checkRights !== null ) {
+                       $this->checkRights = $checkRights;
+               }
+       }
+
+       /**
+        * @return User
+        */
+       public function getUser() {
+               return $this->user;
+       }
+
+       /**
+        * @return LinkTarget
+        */
+       public function getLinkTarget() {
+               return $this->linkTarget;
+       }
+
+       /**
+        * Get the notification timestamp of this entry.
+        *
+        * @return bool|null|string
+        */
+       public function getNotificationTimestamp() {
+               // Back compat for objects constructed using self::fromUserTitle
+               if ( $this->notificationTimestamp === self::DEPRECATED_USAGE_TIMESTAMP ) {
+                       // wfDeprecated( __METHOD__, '1.27' );
+                       if ( $this->checkRights && !$this->user->isAllowed( 'viewmywatchlist' ) ) {
+                               return false;
+                       }
+                       $item = MediaWikiServices::getInstance()->getWatchedItemStore()
+                               ->loadWatchedItem( $this->user, $this->linkTarget );
+                       if ( $item ) {
+                               $this->notificationTimestamp = $item->getNotificationTimestamp();
+                       } else {
+                               $this->notificationTimestamp = false;
+                       }
+               }
+               return $this->notificationTimestamp;
+       }
+
+       /**
+        * Back compat pre 1.27 with the WatchedItemStore introduction
+        * @todo remove in 1.28/9
+        * -------------------------------------------------
+        */
+
+       /**
+        * @return Title
+        * @deprecated Internal class use only
+        */
+       public function getTitle() {
+               if ( !$this->title ) {
+                       $this->title = Title::newFromLinkTarget( $this->linkTarget );
+               }
+               return $this->title;
+       }
+
+       /**
+        * @deprecated since 1.27 Use the constructor, WatchedItemStore::getWatchedItem()
+        *             or WatchedItemStore::loadWatchedItem()
+        */
+       public static function fromUserTitle( $user, $title, $checkRights = User::CHECK_USER_RIGHTS ) {
+               wfDeprecated( __METHOD__, '1.27' );
+               return new self( $user, $title, self::DEPRECATED_USAGE_TIMESTAMP, (bool)$checkRights );
+       }
+
+       /**
+        * @deprecated since 1.27 Use User::addWatch()
+        * @return bool
+        */
+       public function addWatch() {
+               wfDeprecated( __METHOD__, '1.27' );
+               $this->user->addWatch( $this->getTitle(), $this->checkRights );
+               return true;
+       }
+
+       /**
+        * @deprecated since 1.27 Use User::removeWatch()
+        * @return bool
+        */
+       public function removeWatch() {
+               wfDeprecated( __METHOD__, '1.27' );
+               if ( $this->checkRights && !$this->user->isAllowed( 'editmywatchlist' ) ) {
+                       return false;
+               }
+               $this->user->removeWatch( $this->getTitle(), $this->checkRights );
+               return true;
+       }
+
+       /**
+        * @deprecated since 1.27 Use User::isWatched()
+        * @return bool
+        */
+       public function isWatched() {
+               wfDeprecated( __METHOD__, '1.27' );
+               return $this->user->isWatched( $this->getTitle(), $this->checkRights );
+       }
+
+       /**
+        * @deprecated since 1.27 Use WatchedItemStore::duplicateAllAssociatedEntries()
+        */
+       public static function duplicateEntries( Title $oldTitle, Title $newTitle ) {
+               wfDeprecated( __METHOD__, '1.27' );
+               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+               $store->duplicateAllAssociatedEntries( $oldTitle, $newTitle );
+       }
+
+}
diff --git a/includes/watcheditem/WatchedItemQueryService.php b/includes/watcheditem/WatchedItemQueryService.php
new file mode 100644 (file)
index 0000000..d0f45be
--- /dev/null
@@ -0,0 +1,684 @@
+<?php
+
+use Wikimedia\Rdbms\IDatabase;
+use MediaWiki\Linker\LinkTarget;
+use Wikimedia\Assert\Assert;
+use Wikimedia\Rdbms\LoadBalancer;
+
+/**
+ * Class performing complex database queries related to WatchedItems.
+ *
+ * @since 1.28
+ *
+ * @file
+ * @ingroup Watchlist
+ *
+ * @license GNU GPL v2+
+ */
+class WatchedItemQueryService {
+
+       const DIR_OLDER = 'older';
+       const DIR_NEWER = 'newer';
+
+       const INCLUDE_FLAGS = 'flags';
+       const INCLUDE_USER = 'user';
+       const INCLUDE_USER_ID = 'userid';
+       const INCLUDE_COMMENT = 'comment';
+       const INCLUDE_PATROL_INFO = 'patrol';
+       const INCLUDE_SIZES = 'sizes';
+       const INCLUDE_LOG_INFO = 'loginfo';
+
+       // FILTER_* constants are part of public API (are used in ApiQueryWatchlist and
+       // ApiQueryWatchlistRaw classes) and should not be changed.
+       // Changing values of those constants will result in a breaking change in the API
+       const FILTER_MINOR = 'minor';
+       const FILTER_NOT_MINOR = '!minor';
+       const FILTER_BOT = 'bot';
+       const FILTER_NOT_BOT = '!bot';
+       const FILTER_ANON = 'anon';
+       const FILTER_NOT_ANON = '!anon';
+       const FILTER_PATROLLED = 'patrolled';
+       const FILTER_NOT_PATROLLED = '!patrolled';
+       const FILTER_UNREAD = 'unread';
+       const FILTER_NOT_UNREAD = '!unread';
+       const FILTER_CHANGED = 'changed';
+       const FILTER_NOT_CHANGED = '!changed';
+
+       const SORT_ASC = 'ASC';
+       const SORT_DESC = 'DESC';
+
+       /**
+        * @var LoadBalancer
+        */
+       private $loadBalancer;
+
+       /** @var WatchedItemQueryServiceExtension[]|null */
+       private $extensions = null;
+
+       /**
+        * @var CommentStore|null */
+       private $commentStore = null;
+
+       public function __construct( LoadBalancer $loadBalancer ) {
+               $this->loadBalancer = $loadBalancer;
+       }
+
+       /**
+        * @return WatchedItemQueryServiceExtension[]
+        */
+       private function getExtensions() {
+               if ( $this->extensions === null ) {
+                       $this->extensions = [];
+                       Hooks::run( 'WatchedItemQueryServiceExtensions', [ &$this->extensions, $this ] );
+               }
+               return $this->extensions;
+       }
+
+       /**
+        * @return IDatabase
+        * @throws MWException
+        */
+       private function getConnection() {
+               return $this->loadBalancer->getConnectionRef( DB_REPLICA, [ 'watchlist' ] );
+       }
+
+       private function getCommentStore() {
+               if ( !$this->commentStore ) {
+                       $this->commentStore = new CommentStore( 'rc_comment' );
+               }
+               return $this->commentStore;
+       }
+
+       /**
+        * @param User $user
+        * @param array $options Allowed keys:
+        *        'includeFields'       => string[] RecentChange fields to be included in the result,
+        *                                 self::INCLUDE_* constants should be used
+        *        'filters'             => string[] optional filters to narrow down resulted items
+        *        'namespaceIds'        => int[] optional namespace IDs to filter by
+        *                                 (defaults to all namespaces)
+        *        'allRevisions'        => bool return multiple revisions of the same page if true,
+        *                                 only the most recent if false (default)
+        *        'rcTypes'             => int[] which types of RecentChanges to include
+        *                                 (defaults to all types), allowed values: RC_EDIT, RC_NEW,
+        *                                 RC_LOG, RC_EXTERNAL, RC_CATEGORIZE
+        *        'onlyByUser'          => string only list changes by a specified user
+        *        'notByUser'           => string do not incluide changes by a specified user
+        *        'dir'                 => string in which direction to enumerate, accepted values:
+        *                                 - DIR_OLDER list newest first
+        *                                 - DIR_NEWER list oldest first
+        *        'start'               => string (format accepted by wfTimestamp) requires 'dir' option,
+        *                                 timestamp to start enumerating from
+        *        'end'                 => string (format accepted by wfTimestamp) requires 'dir' option,
+        *                                 timestamp to end enumerating
+        *        'watchlistOwner'      => User user whose watchlist items should be listed if different
+        *                                 than the one specified with $user param,
+        *                                 requires 'watchlistOwnerToken' option
+        *        'watchlistOwnerToken' => string a watchlist token used to access another user's
+        *                                 watchlist, used with 'watchlistOwnerToken' option
+        *        'limit'               => int maximum numbers of items to return
+        *        'usedInGenerator'     => bool include only RecentChange id field required by the
+        *                                 generator ('rc_cur_id' or 'rc_this_oldid') if true, or all
+        *                                 id fields ('rc_cur_id', 'rc_this_oldid', 'rc_last_oldid')
+        *                                 if false (default)
+        * @param array|null &$startFrom Continuation value: [ string $rcTimestamp, int $rcId ]
+        * @return array of pairs ( WatchedItem $watchedItem, string[] $recentChangeInfo ),
+        *         where $recentChangeInfo contains the following keys:
+        *         - 'rc_id',
+        *         - 'rc_namespace',
+        *         - 'rc_title',
+        *         - 'rc_timestamp',
+        *         - 'rc_type',
+        *         - 'rc_deleted',
+        *         Additional keys could be added by specifying the 'includeFields' option
+        */
+       public function getWatchedItemsWithRecentChangeInfo(
+               User $user, array $options = [], &$startFrom = null
+       ) {
+               $options += [
+                       'includeFields' => [],
+                       'namespaceIds' => [],
+                       'filters' => [],
+                       'allRevisions' => false,
+                       'usedInGenerator' => false
+               ];
+
+               Assert::parameter(
+                       !isset( $options['rcTypes'] )
+                               || !array_diff( $options['rcTypes'], [ RC_EDIT, RC_NEW, RC_LOG, RC_EXTERNAL, RC_CATEGORIZE ] ),
+                       '$options[\'rcTypes\']',
+                       'must be an array containing only: RC_EDIT, RC_NEW, RC_LOG, RC_EXTERNAL and/or RC_CATEGORIZE'
+               );
+               Assert::parameter(
+                       !isset( $options['dir'] ) || in_array( $options['dir'], [ self::DIR_OLDER, self::DIR_NEWER ] ),
+                       '$options[\'dir\']',
+                       'must be DIR_OLDER or DIR_NEWER'
+               );
+               Assert::parameter(
+                       !isset( $options['start'] ) && !isset( $options['end'] ) && $startFrom === null
+                               || isset( $options['dir'] ),
+                       '$options[\'dir\']',
+                       'must be provided when providing the "start" or "end" options or the $startFrom parameter'
+               );
+               Assert::parameter(
+                       !isset( $options['startFrom'] ),
+                       '$options[\'startFrom\']',
+                       'must not be provided, use $startFrom instead'
+               );
+               Assert::parameter(
+                       !isset( $startFrom ) || ( is_array( $startFrom ) && count( $startFrom ) === 2 ),
+                       '$startFrom',
+                       'must be a two-element array'
+               );
+               if ( array_key_exists( 'watchlistOwner', $options ) ) {
+                       Assert::parameterType(
+                               User::class,
+                               $options['watchlistOwner'],
+                               '$options[\'watchlistOwner\']'
+                       );
+                       Assert::parameter(
+                               isset( $options['watchlistOwnerToken'] ),
+                               '$options[\'watchlistOwnerToken\']',
+                               'must be provided when providing watchlistOwner option'
+                       );
+               }
+
+               $db = $this->getConnection();
+
+               $tables = $this->getWatchedItemsWithRCInfoQueryTables( $options );
+               $fields = $this->getWatchedItemsWithRCInfoQueryFields( $options );
+               $conds = $this->getWatchedItemsWithRCInfoQueryConds( $db, $user, $options );
+               $dbOptions = $this->getWatchedItemsWithRCInfoQueryDbOptions( $options );
+               $joinConds = $this->getWatchedItemsWithRCInfoQueryJoinConds( $options );
+
+               if ( $startFrom !== null ) {
+                       $conds[] = $this->getStartFromConds( $db, $options, $startFrom );
+               }
+
+               foreach ( $this->getExtensions() as $extension ) {
+                       $extension->modifyWatchedItemsWithRCInfoQuery(
+                               $user, $options, $db,
+                               $tables,
+                               $fields,
+                               $conds,
+                               $dbOptions,
+                               $joinConds
+                       );
+               }
+
+               $res = $db->select(
+                       $tables,
+                       $fields,
+                       $conds,
+                       __METHOD__,
+                       $dbOptions,
+                       $joinConds
+               );
+
+               $limit = isset( $dbOptions['LIMIT'] ) ? $dbOptions['LIMIT'] : INF;
+               $items = [];
+               $startFrom = null;
+               foreach ( $res as $row ) {
+                       if ( --$limit <= 0 ) {
+                               $startFrom = [ $row->rc_timestamp, $row->rc_id ];
+                               break;
+                       }
+
+                       $items[] = [
+                               new WatchedItem(
+                                       $user,
+                                       new TitleValue( (int)$row->rc_namespace, $row->rc_title ),
+                                       $row->wl_notificationtimestamp
+                               ),
+                               $this->getRecentChangeFieldsFromRow( $row )
+                       ];
+               }
+
+               foreach ( $this->getExtensions() as $extension ) {
+                       $extension->modifyWatchedItemsWithRCInfo( $user, $options, $db, $items, $res, $startFrom );
+               }
+
+               return $items;
+       }
+
+       /**
+        * For simple listing of user's watchlist items, see WatchedItemStore::getWatchedItemsForUser
+        *
+        * @param User $user
+        * @param array $options Allowed keys:
+        *        'sort'         => string optional sorting by namespace ID and title
+        *                          one of the self::SORT_* constants
+        *        'namespaceIds' => int[] optional namespace IDs to filter by (defaults to all namespaces)
+        *        'limit'        => int maximum number of items to return
+        *        'filter'       => string optional filter, one of the self::FILTER_* contants
+        *        'from'         => LinkTarget requires 'sort' key, only return items starting from
+        *                          those related to the link target
+        *        'until'        => LinkTarget requires 'sort' key, only return items until
+        *                          those related to the link target
+        *        'startFrom'    => LinkTarget requires 'sort' key, only return items starting from
+        *                          those related to the link target, allows to skip some link targets
+        *                          specified using the form option
+        * @return WatchedItem[]
+        */
+       public function getWatchedItemsForUser( User $user, array $options = [] ) {
+               if ( $user->isAnon() ) {
+                       // TODO: should this just return an empty array or rather complain loud at this point
+                       // as e.g. ApiBase::getWatchlistUser does?
+                       return [];
+               }
+
+               $options += [ 'namespaceIds' => [] ];
+
+               Assert::parameter(
+                       !isset( $options['sort'] ) || in_array( $options['sort'], [ self::SORT_ASC, self::SORT_DESC ] ),
+                       '$options[\'sort\']',
+                       'must be SORT_ASC or SORT_DESC'
+               );
+               Assert::parameter(
+                       !isset( $options['filter'] ) || in_array(
+                               $options['filter'], [ self::FILTER_CHANGED, self::FILTER_NOT_CHANGED ]
+                       ),
+                       '$options[\'filter\']',
+                       'must be FILTER_CHANGED or FILTER_NOT_CHANGED'
+               );
+               Assert::parameter(
+                       !isset( $options['from'] ) && !isset( $options['until'] ) && !isset( $options['startFrom'] )
+                       || isset( $options['sort'] ),
+                       '$options[\'sort\']',
+                       'must be provided if any of "from", "until", "startFrom" options is provided'
+               );
+
+               $db = $this->getConnection();
+
+               $conds = $this->getWatchedItemsForUserQueryConds( $db, $user, $options );
+               $dbOptions = $this->getWatchedItemsForUserQueryDbOptions( $options );
+
+               $res = $db->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                       $conds,
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $watchedItems = [];
+               foreach ( $res as $row ) {
+                       // todo these could all be cached at some point?
+                       $watchedItems[] = new WatchedItem(
+                               $user,
+                               new TitleValue( (int)$row->wl_namespace, $row->wl_title ),
+                               $row->wl_notificationtimestamp
+                       );
+               }
+
+               return $watchedItems;
+       }
+
+       private function getRecentChangeFieldsFromRow( stdClass $row ) {
+               // This can be simplified to single array_filter call filtering by key value,
+               // once we stop supporting PHP 5.5
+               $allFields = get_object_vars( $row );
+               $rcKeys = array_filter(
+                       array_keys( $allFields ),
+                       function ( $key ) {
+                               return substr( $key, 0, 3 ) === 'rc_';
+                       }
+               );
+               return array_intersect_key( $allFields, array_flip( $rcKeys ) );
+       }
+
+       private function getWatchedItemsWithRCInfoQueryTables( array $options ) {
+               $tables = [ 'recentchanges', 'watchlist' ];
+               if ( !$options['allRevisions'] ) {
+                       $tables[] = 'page';
+               }
+               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
+                       $tables += $this->getCommentStore()->getJoin()['tables'];
+               }
+               return $tables;
+       }
+
+       private function getWatchedItemsWithRCInfoQueryFields( array $options ) {
+               $fields = [
+                       'rc_id',
+                       'rc_namespace',
+                       'rc_title',
+                       'rc_timestamp',
+                       'rc_type',
+                       'rc_deleted',
+                       'wl_notificationtimestamp'
+               ];
+
+               $rcIdFields = [
+                       'rc_cur_id',
+                       'rc_this_oldid',
+                       'rc_last_oldid',
+               ];
+               if ( $options['usedInGenerator'] ) {
+                       if ( $options['allRevisions'] ) {
+                               $rcIdFields = [ 'rc_this_oldid' ];
+                       } else {
+                               $rcIdFields = [ 'rc_cur_id' ];
+                       }
+               }
+               $fields = array_merge( $fields, $rcIdFields );
+
+               if ( in_array( self::INCLUDE_FLAGS, $options['includeFields'] ) ) {
+                       $fields = array_merge( $fields, [ 'rc_type', 'rc_minor', 'rc_bot' ] );
+               }
+               if ( in_array( self::INCLUDE_USER, $options['includeFields'] ) ) {
+                       $fields[] = 'rc_user_text';
+               }
+               if ( in_array( self::INCLUDE_USER_ID, $options['includeFields'] ) ) {
+                       $fields[] = 'rc_user';
+               }
+               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
+                       $fields += $this->getCommentStore()->getJoin()['fields'];
+               }
+               if ( in_array( self::INCLUDE_PATROL_INFO, $options['includeFields'] ) ) {
+                       $fields = array_merge( $fields, [ 'rc_patrolled', 'rc_log_type' ] );
+               }
+               if ( in_array( self::INCLUDE_SIZES, $options['includeFields'] ) ) {
+                       $fields = array_merge( $fields, [ 'rc_old_len', 'rc_new_len' ] );
+               }
+               if ( in_array( self::INCLUDE_LOG_INFO, $options['includeFields'] ) ) {
+                       $fields = array_merge( $fields, [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ] );
+               }
+
+               return $fields;
+       }
+
+       private function getWatchedItemsWithRCInfoQueryConds(
+               IDatabase $db,
+               User $user,
+               array $options
+       ) {
+               $watchlistOwnerId = $this->getWatchlistOwnerId( $user, $options );
+               $conds = [ 'wl_user' => $watchlistOwnerId ];
+
+               if ( !$options['allRevisions'] ) {
+                       $conds[] = $db->makeList(
+                               [ 'rc_this_oldid=page_latest', 'rc_type=' . RC_LOG ],
+                               LIST_OR
+                       );
+               }
+
+               if ( $options['namespaceIds'] ) {
+                       $conds['wl_namespace'] = array_map( 'intval', $options['namespaceIds'] );
+               }
+
+               if ( array_key_exists( 'rcTypes', $options ) ) {
+                       $conds['rc_type'] = array_map( 'intval', $options['rcTypes'] );
+               }
+
+               $conds = array_merge(
+                       $conds,
+                       $this->getWatchedItemsWithRCInfoQueryFilterConds( $user, $options )
+               );
+
+               $conds = array_merge( $conds, $this->getStartEndConds( $db, $options ) );
+
+               if ( !isset( $options['start'] ) && !isset( $options['end'] ) ) {
+                       if ( $db->getType() === 'mysql' ) {
+                               // This is an index optimization for mysql
+                               $conds[] = 'rc_timestamp > ' . $db->addQuotes( '' );
+                       }
+               }
+
+               $conds = array_merge( $conds, $this->getUserRelatedConds( $db, $user, $options ) );
+
+               $deletedPageLogCond = $this->getExtraDeletedPageLogEntryRelatedCond( $db, $user );
+               if ( $deletedPageLogCond ) {
+                       $conds[] = $deletedPageLogCond;
+               }
+
+               return $conds;
+       }
+
+       private function getWatchlistOwnerId( User $user, array $options ) {
+               if ( array_key_exists( 'watchlistOwner', $options ) ) {
+                       /** @var User $watchlistOwner */
+                       $watchlistOwner = $options['watchlistOwner'];
+                       $ownersToken = $watchlistOwner->getOption( 'watchlisttoken' );
+                       $token = $options['watchlistOwnerToken'];
+                       if ( $ownersToken == '' || !hash_equals( $ownersToken, $token ) ) {
+                               throw ApiUsageException::newWithMessage( null, 'apierror-bad-watchlist-token', 'bad_wltoken' );
+                       }
+                       return $watchlistOwner->getId();
+               }
+               return $user->getId();
+       }
+
+       private function getWatchedItemsWithRCInfoQueryFilterConds( User $user, array $options ) {
+               $conds = [];
+
+               if ( in_array( self::FILTER_MINOR, $options['filters'] ) ) {
+                       $conds[] = 'rc_minor != 0';
+               } elseif ( in_array( self::FILTER_NOT_MINOR, $options['filters'] ) ) {
+                       $conds[] = 'rc_minor = 0';
+               }
+
+               if ( in_array( self::FILTER_BOT, $options['filters'] ) ) {
+                       $conds[] = 'rc_bot != 0';
+               } elseif ( in_array( self::FILTER_NOT_BOT, $options['filters'] ) ) {
+                       $conds[] = 'rc_bot = 0';
+               }
+
+               if ( in_array( self::FILTER_ANON, $options['filters'] ) ) {
+                       $conds[] = 'rc_user = 0';
+               } elseif ( in_array( self::FILTER_NOT_ANON, $options['filters'] ) ) {
+                       $conds[] = 'rc_user != 0';
+               }
+
+               if ( $user->useRCPatrol() || $user->useNPPatrol() ) {
+                       // TODO: not sure if this should simply ignore patrolled filters if user does not have the patrol
+                       // right, or maybe rather fail loud at this point, same as e.g. ApiQueryWatchlist does?
+                       if ( in_array( self::FILTER_PATROLLED, $options['filters'] ) ) {
+                               $conds[] = 'rc_patrolled != 0';
+                       } elseif ( in_array( self::FILTER_NOT_PATROLLED, $options['filters'] ) ) {
+                               $conds[] = 'rc_patrolled = 0';
+                       }
+               }
+
+               if ( in_array( self::FILTER_UNREAD, $options['filters'] ) ) {
+                       $conds[] = 'rc_timestamp >= wl_notificationtimestamp';
+               } elseif ( in_array( self::FILTER_NOT_UNREAD, $options['filters'] ) ) {
+                       // TODO: should this be changed to use Database::makeList?
+                       $conds[] = 'wl_notificationtimestamp IS NULL OR rc_timestamp < wl_notificationtimestamp';
+               }
+
+               return $conds;
+       }
+
+       private function getStartEndConds( IDatabase $db, array $options ) {
+               if ( !isset( $options['start'] ) && !isset( $options['end'] ) ) {
+                       return [];
+               }
+
+               $conds = [];
+
+               if ( isset( $options['start'] ) ) {
+                       $after = $options['dir'] === self::DIR_OLDER ? '<=' : '>=';
+                       $conds[] = 'rc_timestamp ' . $after . ' ' .
+                               $db->addQuotes( $db->timestamp( $options['start'] ) );
+               }
+               if ( isset( $options['end'] ) ) {
+                       $before = $options['dir'] === self::DIR_OLDER ? '>=' : '<=';
+                       $conds[] = 'rc_timestamp ' . $before . ' ' .
+                               $db->addQuotes( $db->timestamp( $options['end'] ) );
+               }
+
+               return $conds;
+       }
+
+       private function getUserRelatedConds( IDatabase $db, User $user, array $options ) {
+               if ( !array_key_exists( 'onlyByUser', $options ) && !array_key_exists( 'notByUser', $options ) ) {
+                       return [];
+               }
+
+               $conds = [];
+
+               if ( array_key_exists( 'onlyByUser', $options ) ) {
+                       $conds['rc_user_text'] = $options['onlyByUser'];
+               } elseif ( array_key_exists( 'notByUser', $options ) ) {
+                       $conds[] = 'rc_user_text != ' . $db->addQuotes( $options['notByUser'] );
+               }
+
+               // Avoid brute force searches (T19342)
+               $bitmask = 0;
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $bitmask = Revision::DELETED_USER;
+               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+                       $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+               }
+               if ( $bitmask ) {
+                       $conds[] = $db->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask";
+               }
+
+               return $conds;
+       }
+
+       private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, User $user ) {
+               // LogPage::DELETED_ACTION hides the affected page, too. So hide those
+               // entirely from the watchlist, or someone could guess the title.
+               $bitmask = 0;
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $bitmask = LogPage::DELETED_ACTION;
+               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+                       $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
+               }
+               if ( $bitmask ) {
+                       return $db->makeList( [
+                               'rc_type != ' . RC_LOG,
+                               $db->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask",
+                       ], LIST_OR );
+               }
+               return '';
+       }
+
+       private function getStartFromConds( IDatabase $db, array $options, array $startFrom ) {
+               $op = $options['dir'] === self::DIR_OLDER ? '<' : '>';
+               list( $rcTimestamp, $rcId ) = $startFrom;
+               $rcTimestamp = $db->addQuotes( $db->timestamp( $rcTimestamp ) );
+               $rcId = (int)$rcId;
+               return $db->makeList(
+                       [
+                               "rc_timestamp $op $rcTimestamp",
+                               $db->makeList(
+                                       [
+                                               "rc_timestamp = $rcTimestamp",
+                                               "rc_id $op= $rcId"
+                                       ],
+                                       LIST_AND
+                               )
+                       ],
+                       LIST_OR
+               );
+       }
+
+       private function getWatchedItemsForUserQueryConds( IDatabase $db, User $user, array $options ) {
+               $conds = [ 'wl_user' => $user->getId() ];
+               if ( $options['namespaceIds'] ) {
+                       $conds['wl_namespace'] = array_map( 'intval', $options['namespaceIds'] );
+               }
+               if ( isset( $options['filter'] ) ) {
+                       $filter = $options['filter'];
+                       if ( $filter === self::FILTER_CHANGED ) {
+                               $conds[] = 'wl_notificationtimestamp IS NOT NULL';
+                       } else {
+                               $conds[] = 'wl_notificationtimestamp IS NULL';
+                       }
+               }
+
+               if ( isset( $options['from'] ) ) {
+                       $op = $options['sort'] === self::SORT_ASC ? '>' : '<';
+                       $conds[] = $this->getFromUntilTargetConds( $db, $options['from'], $op );
+               }
+               if ( isset( $options['until'] ) ) {
+                       $op = $options['sort'] === self::SORT_ASC ? '<' : '>';
+                       $conds[] = $this->getFromUntilTargetConds( $db, $options['until'], $op );
+               }
+               if ( isset( $options['startFrom'] ) ) {
+                       $op = $options['sort'] === self::SORT_ASC ? '>' : '<';
+                       $conds[] = $this->getFromUntilTargetConds( $db, $options['startFrom'], $op );
+               }
+
+               return $conds;
+       }
+
+       /**
+        * Creates a query condition part for getting only items before or after the given link target
+        * (while ordering using $sort mode)
+        *
+        * @param IDatabase $db
+        * @param LinkTarget $target
+        * @param string $op comparison operator to use in the conditions
+        * @return string
+        */
+       private function getFromUntilTargetConds( IDatabase $db, LinkTarget $target, $op ) {
+               return $db->makeList(
+                       [
+                               "wl_namespace $op " . $target->getNamespace(),
+                               $db->makeList(
+                                       [
+                                               'wl_namespace = ' . $target->getNamespace(),
+                                               "wl_title $op= " . $db->addQuotes( $target->getDBkey() )
+                                       ],
+                                       LIST_AND
+                               )
+                       ],
+                       LIST_OR
+               );
+       }
+
+       private function getWatchedItemsWithRCInfoQueryDbOptions( array $options ) {
+               $dbOptions = [];
+
+               if ( array_key_exists( 'dir', $options ) ) {
+                       $sort = $options['dir'] === self::DIR_OLDER ? ' DESC' : '';
+                       $dbOptions['ORDER BY'] = [ 'rc_timestamp' . $sort, 'rc_id' . $sort ];
+               }
+
+               if ( array_key_exists( 'limit', $options ) ) {
+                       $dbOptions['LIMIT'] = (int)$options['limit'] + 1;
+               }
+
+               return $dbOptions;
+       }
+
+       private function getWatchedItemsForUserQueryDbOptions( array $options ) {
+               $dbOptions = [];
+               if ( array_key_exists( 'sort', $options ) ) {
+                       $dbOptions['ORDER BY'] = [
+                               "wl_namespace {$options['sort']}",
+                               "wl_title {$options['sort']}"
+                       ];
+                       if ( count( $options['namespaceIds'] ) === 1 ) {
+                               $dbOptions['ORDER BY'] = "wl_title {$options['sort']}";
+                       }
+               }
+               if ( array_key_exists( 'limit', $options ) ) {
+                       $dbOptions['LIMIT'] = (int)$options['limit'];
+               }
+               return $dbOptions;
+       }
+
+       private function getWatchedItemsWithRCInfoQueryJoinConds( array $options ) {
+               $joinConds = [
+                       'watchlist' => [ 'INNER JOIN',
+                               [
+                                       'wl_namespace=rc_namespace',
+                                       'wl_title=rc_title'
+                               ]
+                       ]
+               ];
+               if ( !$options['allRevisions'] ) {
+                       $joinConds['page'] = [ 'LEFT JOIN', 'rc_cur_id=page_id' ];
+               }
+               if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) {
+                       $joinConds += $this->getCommentStore()->getJoin()['joins'];
+               }
+               return $joinConds;
+       }
+
+}
diff --git a/includes/watcheditem/WatchedItemQueryServiceExtension.php b/includes/watcheditem/WatchedItemQueryServiceExtension.php
new file mode 100644 (file)
index 0000000..93d5033
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Extension mechanism for WatchedItemQueryService
+ *
+ * @since 1.29
+ *
+ * @file
+ * @ingroup Watchlist
+ *
+ * @license GNU GPL v2+
+ */
+interface WatchedItemQueryServiceExtension {
+
+       /**
+        * Modify the WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
+        * query before it's made.
+        *
+        * @warning Any joins added *must* join on a unique key of the target table
+        *  unless you really know what you're doing.
+        * @param User $user
+        * @param array $options Options from
+        *  WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
+        * @param IDatabase $db Database connection being used for the query
+        * @param array &$tables Tables for Database::select()
+        * @param array &$fields Fields for Database::select()
+        * @param array &$conds Conditions for Database::select()
+        * @param array &$dbOptions Options for Database::select()
+        * @param array &$joinConds Join conditions for Database::select()
+        */
+       public function modifyWatchedItemsWithRCInfoQuery( User $user, array $options, IDatabase $db,
+               array &$tables, array &$fields, array &$conds, array &$dbOptions, array &$joinConds
+       );
+
+       /**
+        * Modify the results from WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
+        * before they're returned.
+        *
+        * @param User $user
+        * @param array $options Options from
+        *  WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
+        * @param IDatabase $db Database connection being used for the query
+        * @param array &$items array of pairs ( WatchedItem $watchedItem, string[] $recentChangeInfo ).
+        *  May be truncated if necessary, in which case $startFrom must be updated.
+        * @param ResultWrapper|bool $res Database query result
+        * @param array|null &$startFrom Continuation value. If you truncate $items, set this to
+        *  [ $recentChangeInfo['rc_timestamp'], $recentChangeInfo['rc_id'] ] from the first item
+        *  removed.
+        */
+       public function modifyWatchedItemsWithRCInfo( User $user, array $options, IDatabase $db,
+               array &$items, $res, &$startFrom
+       );
+
+}
diff --git a/includes/watcheditem/WatchedItemStore.php b/includes/watcheditem/WatchedItemStore.php
new file mode 100644 (file)
index 0000000..094297c
--- /dev/null
@@ -0,0 +1,875 @@
+<?php
+
+use Wikimedia\Rdbms\IDatabase;
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use MediaWiki\Linker\LinkTarget;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Assert\Assert;
+use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\LoadBalancer;
+
+/**
+ * Storage layer class for WatchedItems.
+ * Database interaction & caching
+ * TODO caching should be factored out into a CachingWatchedItemStore class
+ *
+ * Uses database because this uses User::isAnon
+ *
+ * @group Database
+ *
+ * @author Addshore
+ * @since 1.27
+ */
+class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterface {
+
+       /**
+        * @var LoadBalancer
+        */
+       private $loadBalancer;
+
+       /**
+        * @var ReadOnlyMode
+        */
+       private $readOnlyMode;
+
+       /**
+        * @var HashBagOStuff
+        */
+       private $cache;
+
+       /**
+        * @var array[] Looks like $cacheIndex[Namespace ID][Target DB Key][User Id] => 'key'
+        * The index is needed so that on mass changes all relevant items can be un-cached.
+        * For example: Clearing a users watchlist of all items or updating notification timestamps
+        *              for all users watching a single target.
+        */
+       private $cacheIndex = [];
+
+       /**
+        * @var callable|null
+        */
+       private $deferredUpdatesAddCallableUpdateCallback;
+
+       /**
+        * @var callable|null
+        */
+       private $revisionGetTimestampFromIdCallback;
+
+       /**
+        * @var StatsdDataFactoryInterface
+        */
+       private $stats;
+
+       /**
+        * @param LoadBalancer $loadBalancer
+        * @param HashBagOStuff $cache
+        * @param ReadOnlyMode $readOnlyMode
+        */
+       public function __construct(
+               LoadBalancer $loadBalancer,
+               HashBagOStuff $cache,
+               ReadOnlyMode $readOnlyMode
+       ) {
+               $this->loadBalancer = $loadBalancer;
+               $this->cache = $cache;
+               $this->readOnlyMode = $readOnlyMode;
+               $this->stats = new NullStatsdDataFactory();
+               $this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
+               $this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
+       }
+
+       public function setStatsdDataFactory( StatsdDataFactoryInterface $stats ) {
+               $this->stats = $stats;
+       }
+
+       /**
+        * Overrides the DeferredUpdates::addCallableUpdate callback
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * @param callable $callback
+        *
+        * @see DeferredUpdates::addCallableUpdate for callback signiture
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public function overrideDeferredUpdatesAddCallableUpdateCallback( callable $callback ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override DeferredUpdates::addCallableUpdate callback in operation.'
+                       );
+               }
+               $previousValue = $this->deferredUpdatesAddCallableUpdateCallback;
+               $this->deferredUpdatesAddCallableUpdateCallback = $callback;
+               return new ScopedCallback( function () use ( $previousValue ) {
+                       $this->deferredUpdatesAddCallableUpdateCallback = $previousValue;
+               } );
+       }
+
+       /**
+        * Overrides the Revision::getTimestampFromId callback
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * @param callable $callback
+        * @see Revision::getTimestampFromId for callback signiture
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public function overrideRevisionGetTimestampFromIdCallback( callable $callback ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override Revision::getTimestampFromId callback in operation.'
+                       );
+               }
+               $previousValue = $this->revisionGetTimestampFromIdCallback;
+               $this->revisionGetTimestampFromIdCallback = $callback;
+               return new ScopedCallback( function () use ( $previousValue ) {
+                       $this->revisionGetTimestampFromIdCallback = $previousValue;
+               } );
+       }
+
+       private function getCacheKey( User $user, LinkTarget $target ) {
+               return $this->cache->makeKey(
+                       (string)$target->getNamespace(),
+                       $target->getDBkey(),
+                       (string)$user->getId()
+               );
+       }
+
+       private function cache( WatchedItem $item ) {
+               $user = $item->getUser();
+               $target = $item->getLinkTarget();
+               $key = $this->getCacheKey( $user, $target );
+               $this->cache->set( $key, $item );
+               $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] = $key;
+               $this->stats->increment( 'WatchedItemStore.cache' );
+       }
+
+       private function uncache( User $user, LinkTarget $target ) {
+               $this->cache->delete( $this->getCacheKey( $user, $target ) );
+               unset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] );
+               $this->stats->increment( 'WatchedItemStore.uncache' );
+       }
+
+       private function uncacheLinkTarget( LinkTarget $target ) {
+               $this->stats->increment( 'WatchedItemStore.uncacheLinkTarget' );
+               if ( !isset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] ) ) {
+                       return;
+               }
+               foreach ( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] as $key ) {
+                       $this->stats->increment( 'WatchedItemStore.uncacheLinkTarget.items' );
+                       $this->cache->delete( $key );
+               }
+       }
+
+       private function uncacheUser( User $user ) {
+               $this->stats->increment( 'WatchedItemStore.uncacheUser' );
+               foreach ( $this->cacheIndex as $ns => $dbKeyArray ) {
+                       foreach ( $dbKeyArray as $dbKey => $userArray ) {
+                               if ( isset( $userArray[$user->getId()] ) ) {
+                                       $this->stats->increment( 'WatchedItemStore.uncacheUser.items' );
+                                       $this->cache->delete( $userArray[$user->getId()] );
+                               }
+                       }
+               }
+       }
+
+       /**
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|false
+        */
+       private function getCached( User $user, LinkTarget $target ) {
+               return $this->cache->get( $this->getCacheKey( $user, $target ) );
+       }
+
+       /**
+        * Return an array of conditions to select or update the appropriate database
+        * row.
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return array
+        */
+       private function dbCond( User $user, LinkTarget $target ) {
+               return [
+                       'wl_user' => $user->getId(),
+                       'wl_namespace' => $target->getNamespace(),
+                       'wl_title' => $target->getDBkey(),
+               ];
+       }
+
+       /**
+        * @param int $dbIndex DB_MASTER or DB_REPLICA
+        *
+        * @return IDatabase
+        * @throws MWException
+        */
+       private function getConnectionRef( $dbIndex ) {
+               return $this->loadBalancer->getConnectionRef( $dbIndex, [ 'watchlist' ] );
+       }
+
+       /**
+        * @since 1.31
+        */
+       public function countWatchedItems( User $user ) {
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+               $return = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_user' => $user->getId()
+                       ],
+                       __METHOD__
+               );
+
+               return $return;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function countWatchers( LinkTarget $target ) {
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+               $return = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                       ],
+                       __METHOD__
+               );
+
+               return $return;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function countVisitingWatchers( LinkTarget $target, $threshold ) {
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+               $visitingWatchers = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp >= ' .
+                               $dbr->addQuotes( $dbr->timestamp( $threshold ) ) .
+                               ' OR wl_notificationtimestamp IS NULL'
+                       ],
+                       __METHOD__
+               );
+
+               return $visitingWatchers;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function countWatchersMultiple( array $targets, array $options = [] ) {
+               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
+
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+
+               if ( array_key_exists( 'minimumWatchers', $options ) ) {
+                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$options['minimumWatchers'];
+               }
+
+               $lb = new LinkBatch( $targets );
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                       [ $lb->constructSet( 'wl', $dbr ) ],
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $watchCounts = [];
+               foreach ( $targets as $linkTarget ) {
+                       $watchCounts[$linkTarget->getNamespace()][$linkTarget->getDBkey()] = 0;
+               }
+
+               foreach ( $res as $row ) {
+                       $watchCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
+               }
+
+               return $watchCounts;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function countVisitingWatchersMultiple(
+               array $targetsWithVisitThresholds,
+               $minimumWatchers = null
+       ) {
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+
+               $conds = $this->getVisitingWatchersCondition( $dbr, $targetsWithVisitThresholds );
+
+               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
+               if ( $minimumWatchers !== null ) {
+                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$minimumWatchers;
+               }
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                       $conds,
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $watcherCounts = [];
+               foreach ( $targetsWithVisitThresholds as list( $target ) ) {
+                       /* @var LinkTarget $target */
+                       $watcherCounts[$target->getNamespace()][$target->getDBkey()] = 0;
+               }
+
+               foreach ( $res as $row ) {
+                       $watcherCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
+               }
+
+               return $watcherCounts;
+       }
+
+       /**
+        * Generates condition for the query used in a batch count visiting watchers.
+        *
+        * @param IDatabase $db
+        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget, last visit threshold)
+        * @return string
+        */
+       private function getVisitingWatchersCondition(
+               IDatabase $db,
+               array $targetsWithVisitThresholds
+       ) {
+               $missingTargets = [];
+               $namespaceConds = [];
+               foreach ( $targetsWithVisitThresholds as list( $target, $threshold ) ) {
+                       if ( $threshold === null ) {
+                               $missingTargets[] = $target;
+                               continue;
+                       }
+                       /* @var LinkTarget $target */
+                       $namespaceConds[$target->getNamespace()][] = $db->makeList( [
+                               'wl_title = ' . $db->addQuotes( $target->getDBkey() ),
+                               $db->makeList( [
+                                       'wl_notificationtimestamp >= ' . $db->addQuotes( $db->timestamp( $threshold ) ),
+                                       'wl_notificationtimestamp IS NULL'
+                               ], LIST_OR )
+                       ], LIST_AND );
+               }
+
+               $conds = [];
+               foreach ( $namespaceConds as $namespace => $pageConds ) {
+                       $conds[] = $db->makeList( [
+                               'wl_namespace = ' . $namespace,
+                               '(' . $db->makeList( $pageConds, LIST_OR ) . ')'
+                       ], LIST_AND );
+               }
+
+               if ( $missingTargets ) {
+                       $lb = new LinkBatch( $missingTargets );
+                       $conds[] = $lb->constructSet( 'wl', $db );
+               }
+
+               return $db->makeList( $conds, LIST_OR );
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function getWatchedItem( User $user, LinkTarget $target ) {
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               $cached = $this->getCached( $user, $target );
+               if ( $cached ) {
+                       $this->stats->increment( 'WatchedItemStore.getWatchedItem.cached' );
+                       return $cached;
+               }
+               $this->stats->increment( 'WatchedItemStore.getWatchedItem.load' );
+               return $this->loadWatchedItem( $user, $target );
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function loadWatchedItem( User $user, LinkTarget $target ) {
+               // Only loggedin user can have a watchlist
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+               $row = $dbr->selectRow(
+                       'watchlist',
+                       'wl_notificationtimestamp',
+                       $this->dbCond( $user, $target ),
+                       __METHOD__
+               );
+
+               if ( !$row ) {
+                       return false;
+               }
+
+               $item = new WatchedItem(
+                       $user,
+                       $target,
+                       wfTimestampOrNull( TS_MW, $row->wl_notificationtimestamp )
+               );
+               $this->cache( $item );
+
+               return $item;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function getWatchedItemsForUser( User $user, array $options = [] ) {
+               $options += [ 'forWrite' => false ];
+
+               $dbOptions = [];
+               if ( array_key_exists( 'sort', $options ) ) {
+                       Assert::parameter(
+                               ( in_array( $options['sort'], [ self::SORT_ASC, self::SORT_DESC ] ) ),
+                               '$options[\'sort\']',
+                               'must be SORT_ASC or SORT_DESC'
+                       );
+                       $dbOptions['ORDER BY'] = [
+                               "wl_namespace {$options['sort']}",
+                               "wl_title {$options['sort']}"
+                       ];
+               }
+               $db = $this->getConnectionRef( $options['forWrite'] ? DB_MASTER : DB_REPLICA );
+
+               $res = $db->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                       [ 'wl_user' => $user->getId() ],
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $watchedItems = [];
+               foreach ( $res as $row ) {
+                       // @todo: Should we add these to the process cache?
+                       $watchedItems[] = new WatchedItem(
+                               $user,
+                               new TitleValue( (int)$row->wl_namespace, $row->wl_title ),
+                               $row->wl_notificationtimestamp
+                       );
+               }
+
+               return $watchedItems;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function isWatched( User $user, LinkTarget $target ) {
+               return (bool)$this->getWatchedItem( $user, $target );
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function getNotificationTimestampsBatch( User $user, array $targets ) {
+               $timestamps = [];
+               foreach ( $targets as $target ) {
+                       $timestamps[$target->getNamespace()][$target->getDBkey()] = false;
+               }
+
+               if ( $user->isAnon() ) {
+                       return $timestamps;
+               }
+
+               $targetsToLoad = [];
+               foreach ( $targets as $target ) {
+                       $cachedItem = $this->getCached( $user, $target );
+                       if ( $cachedItem ) {
+                               $timestamps[$target->getNamespace()][$target->getDBkey()] =
+                                       $cachedItem->getNotificationTimestamp();
+                       } else {
+                               $targetsToLoad[] = $target;
+                       }
+               }
+
+               if ( !$targetsToLoad ) {
+                       return $timestamps;
+               }
+
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+
+               $lb = new LinkBatch( $targetsToLoad );
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                       [
+                               $lb->constructSet( 'wl', $dbr ),
+                               'wl_user' => $user->getId(),
+                       ],
+                       __METHOD__
+               );
+
+               foreach ( $res as $row ) {
+                       $timestamps[$row->wl_namespace][$row->wl_title] =
+                               wfTimestampOrNull( TS_MW, $row->wl_notificationtimestamp );
+               }
+
+               return $timestamps;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function addWatch( User $user, LinkTarget $target ) {
+               $this->addWatchBatchForUser( $user, [ $target ] );
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function addWatchBatchForUser( User $user, array $targets ) {
+               if ( $this->readOnlyMode->isReadOnly() ) {
+                       return false;
+               }
+               // Only loggedin user can have a watchlist
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               if ( !$targets ) {
+                       return true;
+               }
+
+               $rows = [];
+               $items = [];
+               foreach ( $targets as $target ) {
+                       $rows[] = [
+                               'wl_user' => $user->getId(),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp' => null,
+                       ];
+                       $items[] = new WatchedItem(
+                               $user,
+                               $target,
+                               null
+                       );
+                       $this->uncache( $user, $target );
+               }
+
+               $dbw = $this->getConnectionRef( DB_MASTER );
+               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
+                       // Use INSERT IGNORE to avoid overwriting the notification timestamp
+                       // if there's already an entry for this page
+                       $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
+               }
+               // Update process cache to ensure skin doesn't claim that the current
+               // page is unwatched in the response of action=watch itself (T28292).
+               // This would otherwise be re-queried from a slave by isWatched().
+               foreach ( $items as $item ) {
+                       $this->cache( $item );
+               }
+
+               return true;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function removeWatch( User $user, LinkTarget $target ) {
+               // Only logged in user can have a watchlist
+               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
+                       return false;
+               }
+
+               $this->uncache( $user, $target );
+
+               $dbw = $this->getConnectionRef( DB_MASTER );
+               $dbw->delete( 'watchlist',
+                       [
+                               'wl_user' => $user->getId(),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                       ], __METHOD__
+               );
+               $success = (bool)$dbw->affectedRows();
+
+               return $success;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function setNotificationTimestampsForUser( User $user, $timestamp, array $targets = [] ) {
+               // Only loggedin user can have a watchlist
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               $dbw = $this->getConnectionRef( DB_MASTER );
+
+               $conds = [ 'wl_user' => $user->getId() ];
+               if ( $targets ) {
+                       $batch = new LinkBatch( $targets );
+                       $conds[] = $batch->constructSet( 'wl', $dbw );
+               }
+
+               if ( $timestamp !== null ) {
+                       $timestamp = $dbw->timestamp( $timestamp );
+               }
+
+               $success = $dbw->update(
+                       'watchlist',
+                       [ 'wl_notificationtimestamp' => $timestamp ],
+                       $conds,
+                       __METHOD__
+               );
+
+               $this->uncacheUser( $user );
+
+               return $success;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function updateNotificationTimestamp( User $editor, LinkTarget $target, $timestamp ) {
+               $dbw = $this->getConnectionRef( DB_MASTER );
+               $uids = $dbw->selectFieldValues(
+                       'watchlist',
+                       'wl_user',
+                       [
+                               'wl_user != ' . intval( $editor->getId() ),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp IS NULL',
+                       ],
+                       __METHOD__
+               );
+
+               $watchers = array_map( 'intval', $uids );
+               if ( $watchers ) {
+                       // Update wl_notificationtimestamp for all watching users except the editor
+                       $fname = __METHOD__;
+                       DeferredUpdates::addCallableUpdate(
+                               function () use ( $timestamp, $watchers, $target, $fname ) {
+                                       global $wgUpdateRowsPerQuery;
+
+                                       $dbw = $this->getConnectionRef( DB_MASTER );
+                                       $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+                                       $ticket = $factory->getEmptyTransactionTicket( __METHOD__ );
+
+                                       $watchersChunks = array_chunk( $watchers, $wgUpdateRowsPerQuery );
+                                       foreach ( $watchersChunks as $watchersChunk ) {
+                                               $dbw->update( 'watchlist',
+                                                       [ /* SET */
+                                                               'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
+                                                       ], [ /* WHERE - TODO Use wl_id T130067 */
+                                                               'wl_user' => $watchersChunk,
+                                                               'wl_namespace' => $target->getNamespace(),
+                                                               'wl_title' => $target->getDBkey(),
+                                                       ], $fname
+                                               );
+                                               if ( count( $watchersChunks ) > 1 ) {
+                                                       $factory->commitAndWaitForReplication(
+                                                               __METHOD__, $ticket, [ 'domain' => $dbw->getDomainID() ]
+                                                       );
+                                               }
+                                       }
+                                       $this->uncacheLinkTarget( $target );
+                               },
+                               DeferredUpdates::POSTSEND,
+                               $dbw
+                       );
+               }
+
+               return $watchers;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 ) {
+               // Only loggedin user can have a watchlist
+               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
+                       return false;
+               }
+
+               $item = null;
+               if ( $force != 'force' ) {
+                       $item = $this->loadWatchedItem( $user, $title );
+                       if ( !$item || $item->getNotificationTimestamp() === null ) {
+                               return false;
+                       }
+               }
+
+               // If the page is watched by the user (or may be watched), update the timestamp
+               $job = new ActivityUpdateJob(
+                       $title,
+                       [
+                               'type'      => 'updateWatchlistNotification',
+                               'userid'    => $user->getId(),
+                               'notifTime' => $this->getNotificationTimestamp( $user, $title, $item, $force, $oldid ),
+                               'curTime'   => time()
+                       ]
+               );
+
+               // Try to run this post-send
+               // Calls DeferredUpdates::addCallableUpdate in normal operation
+               call_user_func(
+                       $this->deferredUpdatesAddCallableUpdateCallback,
+                       function () use ( $job ) {
+                               $job->run();
+                       }
+               );
+
+               $this->uncache( $user, $title );
+
+               return true;
+       }
+
+       private function getNotificationTimestamp( User $user, Title $title, $item, $force, $oldid ) {
+               if ( !$oldid ) {
+                       // No oldid given, assuming latest revision; clear the timestamp.
+                       return null;
+               }
+
+               if ( !$title->getNextRevisionID( $oldid ) ) {
+                       // Oldid given and is the latest revision for this title; clear the timestamp.
+                       return null;
+               }
+
+               if ( $item === null ) {
+                       $item = $this->loadWatchedItem( $user, $title );
+               }
+
+               if ( !$item ) {
+                       // This can only happen if $force is enabled.
+                       return null;
+               }
+
+               // Oldid given and isn't the latest; update the timestamp.
+               // This will result in no further notification emails being sent!
+               // Calls Revision::getTimestampFromId in normal operation
+               $notificationTimestamp = call_user_func(
+                       $this->revisionGetTimestampFromIdCallback,
+                       $title,
+                       $oldid
+               );
+
+               // We need to go one second to the future because of various strict comparisons
+               // throughout the codebase
+               $ts = new MWTimestamp( $notificationTimestamp );
+               $ts->timestamp->add( new DateInterval( 'PT1S' ) );
+               $notificationTimestamp = $ts->getTimestamp( TS_MW );
+
+               if ( $notificationTimestamp < $item->getNotificationTimestamp() ) {
+                       if ( $force != 'force' ) {
+                               return false;
+                       } else {
+                               // This is a little silly…
+                               return $item->getNotificationTimestamp();
+                       }
+               }
+
+               return $notificationTimestamp;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function countUnreadNotifications( User $user, $unreadLimit = null ) {
+               $queryOptions = [];
+               if ( $unreadLimit !== null ) {
+                       $unreadLimit = (int)$unreadLimit;
+                       $queryOptions['LIMIT'] = $unreadLimit;
+               }
+
+               $dbr = $this->getConnectionRef( DB_REPLICA );
+               $rowCount = $dbr->selectRowCount(
+                       'watchlist',
+                       '1',
+                       [
+                               'wl_user' => $user->getId(),
+                               'wl_notificationtimestamp IS NOT NULL',
+                       ],
+                       __METHOD__,
+                       $queryOptions
+               );
+
+               if ( !isset( $unreadLimit ) ) {
+                       return $rowCount;
+               }
+
+               if ( $rowCount >= $unreadLimit ) {
+                       return true;
+               }
+
+               return $rowCount;
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget ) {
+               $oldTarget = Title::newFromLinkTarget( $oldTarget );
+               $newTarget = Title::newFromLinkTarget( $newTarget );
+
+               $this->duplicateEntry( $oldTarget->getSubjectPage(), $newTarget->getSubjectPage() );
+               $this->duplicateEntry( $oldTarget->getTalkPage(), $newTarget->getTalkPage() );
+       }
+
+       /**
+        * @since 1.27
+        */
+       public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget ) {
+               $dbw = $this->getConnectionRef( DB_MASTER );
+
+               $result = $dbw->select(
+                       'watchlist',
+                       [ 'wl_user', 'wl_notificationtimestamp' ],
+                       [
+                               'wl_namespace' => $oldTarget->getNamespace(),
+                               'wl_title' => $oldTarget->getDBkey(),
+                       ],
+                       __METHOD__,
+                       [ 'FOR UPDATE' ]
+               );
+
+               $newNamespace = $newTarget->getNamespace();
+               $newDBkey = $newTarget->getDBkey();
+
+               # Construct array to replace into the watchlist
+               $values = [];
+               foreach ( $result as $row ) {
+                       $values[] = [
+                               'wl_user' => $row->wl_user,
+                               'wl_namespace' => $newNamespace,
+                               'wl_title' => $newDBkey,
+                               'wl_notificationtimestamp' => $row->wl_notificationtimestamp,
+                       ];
+               }
+
+               if ( !empty( $values ) ) {
+                       # Perform replace
+                       # Note that multi-row replace is very efficient for MySQL but may be inefficient for
+                       # some other DBMSes, mostly due to poor simulation by us
+                       $dbw->replace(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               $values,
+                               __METHOD__
+                       );
+               }
+       }
+
+}
diff --git a/includes/watcheditem/WatchedItemStoreInterface.php b/includes/watcheditem/WatchedItemStoreInterface.php
new file mode 100644 (file)
index 0000000..d5a3d7c
--- /dev/null
@@ -0,0 +1,291 @@
+<?php
+/**
+ * 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 Watchlist
+ */
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * @author Addshore
+ * @since 1.31 interface created. WatchedItemStore implementation available since 1.27
+ */
+interface WatchedItemStoreInterface {
+
+       /**
+        * @since 1.31
+        */
+       const SORT_ASC = 'ASC';
+
+       /**
+        * @since 1.31
+        */
+       const SORT_DESC = 'DESC';
+
+       /**
+        * Count the number of individual items that are watched by the user.
+        * If a subject and corresponding talk page are watched this will return 2.
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        *
+        * @return int
+        */
+       public function countWatchedItems( User $user );
+
+       /**
+        * @since 1.31
+        *
+        * @param LinkTarget $target
+        *
+        * @return int
+        */
+       public function countWatchers( LinkTarget $target );
+
+       /**
+        * Number of page watchers who also visited a "recent" edit
+        *
+        * @since 1.31
+        *
+        * @param LinkTarget $target
+        * @param mixed $threshold timestamp accepted by wfTimestamp
+        *
+        * @return int
+        * @throws DBUnexpectedError
+        * @throws MWException
+        */
+       public function countVisitingWatchers( LinkTarget $target, $threshold );
+
+       /**
+        * @since 1.31
+        *
+        * @param LinkTarget[] $targets
+        * @param array $options Allowed keys:
+        *        'minimumWatchers' => int
+        *
+        * @return array multi dimensional like $return[$namespaceId][$titleString] = int $watchers
+        *         All targets will be present in the result. 0 either means no watchers or the number
+        *         of watchers was below the minimumWatchers option if passed.
+        */
+       public function countWatchersMultiple( array $targets, array $options = [] );
+
+       /**
+        * Number of watchers of each page who have visited recent edits to that page
+        *
+        * @since 1.31
+        *
+        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget $target, mixed
+        *     $threshold),
+        *        $threshold is:
+        *        - a timestamp of the recent edit if $target exists (format accepted by wfTimestamp)
+        *        - null if $target doesn't exist
+        * @param int|null $minimumWatchers
+        *
+        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $watchers,
+        *         where $watchers is an int:
+        *         - if the page exists, number of users watching who have visited the page recently
+        *         - if the page doesn't exist, number of users that have the page on their watchlist
+        *         - 0 means there are no visiting watchers or their number is below the
+        *     minimumWatchers
+        *         option (if passed).
+        */
+       public function countVisitingWatchersMultiple(
+               array $targetsWithVisitThresholds,
+               $minimumWatchers = null
+       );
+
+       /**
+        * Get an item (may be cached)
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|false
+        */
+       public function getWatchedItem( User $user, LinkTarget $target );
+
+       /**
+        * Loads an item from the db
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|false
+        */
+       public function loadWatchedItem( User $user, LinkTarget $target );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $user
+        * @param array $options Allowed keys:
+        *        'forWrite' => bool defaults to false
+        *        'sort' => string optional sorting by namespace ID and title
+        *                     one of the self::SORT_* constants
+        *
+        * @return WatchedItem[]
+        */
+       public function getWatchedItemsForUser( User $user, array $options = [] );
+
+       /**
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return bool
+        */
+       public function isWatched( User $user, LinkTarget $target );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget[] $targets
+        *
+        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $timestamp,
+        *         where $timestamp is:
+        *         - string|null value of wl_notificationtimestamp,
+        *         - false if $target is not watched by $user.
+        */
+       public function getNotificationTimestampsBatch( User $user, array $targets );
+
+       /**
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        */
+       public function addWatch( User $user, LinkTarget $target );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget[] $targets
+        *
+        * @return bool success
+        */
+       public function addWatchBatchForUser( User $user, array $targets );
+
+       /**
+        * Removes the an entry for the User watching the LinkTarget
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return bool success
+        * @throws DBUnexpectedError
+        * @throws MWException
+        */
+       public function removeWatch( User $user, LinkTarget $target );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $user The user to set the timestamp for
+        * @param string|null $timestamp Set the update timestamp to this value
+        * @param LinkTarget[] $targets List of targets to update. Default to all targets
+        *
+        * @return bool success
+        */
+       public function setNotificationTimestampsForUser(
+               User $user,
+               $timestamp,
+               array $targets = []
+       );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $editor The editor that triggered the update. Their notification
+        *  timestamp will not be updated(they have already seen it)
+        * @param LinkTarget $target The target to update timestamps for
+        * @param string $timestamp Set the update timestamp to this value
+        *
+        * @return int[] Array of user IDs the timestamp has been updated for
+        */
+       public function updateNotificationTimestamp( User $editor, LinkTarget $target, $timestamp );
+
+       /**
+        * Reset the notification timestamp of this entry
+        *
+        * @since 1.31
+        *
+        * @param User $user
+        * @param Title $title
+        * @param string $force Whether to force the write query to be executed even if the
+        *    page is not watched or the notification timestamp is already NULL.
+        *    'force' in order to force
+        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is
+        *     assumed.
+        *
+        * @return bool success
+        */
+       public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 );
+
+       /**
+        * @since 1.31
+        *
+        * @param User $user
+        * @param int $unreadLimit
+        *
+        * @return int|bool The number of unread notifications
+        *                  true if greater than or equal to $unreadLimit
+        */
+       public function countUnreadNotifications( User $user, $unreadLimit = null );
+
+       /**
+        * Check if the given title already is watched by the user, and if so
+        * add a watch for the new title.
+        *
+        * To be used for page renames and such.
+        *
+        * @since 1.31
+        *
+        * @param LinkTarget $oldTarget
+        * @param LinkTarget $newTarget
+        */
+       public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget );
+
+       /**
+        * Check if the given title already is watched by the user, and if so
+        * add a watch for the new title.
+        *
+        * To be used for page renames and such.
+        * This must be called separately for Subject and Talk pages
+        *
+        * @since 1.31
+        *
+        * @param LinkTarget $oldTarget
+        * @param LinkTarget $newTarget
+        */
+       public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget );
+
+}
index 3e86738..3e913b0 100644 (file)
@@ -18,7 +18,7 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
         * @param array $config Configuration options
         * @param string $config['includeAllValue'] If specified, add a "all namespaces" option to the
         *     namespace dropdown, and use this as the input value for it
-        * @param number[] $config['exclude'] List of namespace numbers to exclude from the selector
+        * @param int[] $config['exclude'] List of namespace numbers to exclude from the selector
         */
        public function __construct( array $config = [] ) {
                // Configuration initialization
index 999cb6a..ea32058 100644 (file)
@@ -7,7 +7,7 @@
  */
 namespace MediaWiki\Widget;
 
-use \OOUI\TextInputWidget;
+use \OOUI\MultilineTextInputWidget;
 
 /**
  * Widget to select multiple users.
@@ -38,9 +38,8 @@ class UsersMultiselectWidget extends \OOUI\Widget {
                        $this->inputPlaceholder = $config['placeholder'];
                }
 
-               $textarea = new TextInputWidget( [
+               $textarea = new MultilineTextInputWidget( [
                        'name' => $this->inputName,
-                       'multiline' => true,
                        'value' => implode( "\n", $this->usersArray ),
                        'rows' => 25,
                ] );
index 0d0fa12..5e45c63 100644 (file)
@@ -79,7 +79,7 @@ class FullSearchResultWidget implements SearchResultWidget {
                        if ( !Hooks::run( 'ShowSearchHit', [
                                $this->specialPage, $result, $terms,
                                &$link, &$redirect, &$section, &$extract,
-                               &$score, &$size, &$date, &$related, &$html
+                               &$score, &$desc, &$date, &$related, &$html
                        ] ) ) {
                                return $html;
                        }
@@ -133,13 +133,14 @@ class FullSearchResultWidget implements SearchResultWidget {
                $title = clone $result->getTitle();
                $query = [];
 
+               $attributes = [ 'data-serp-pos' => $position ];
                Hooks::run( 'ShowSearchHitTitle',
-                       [ &$title, &$snippet, $result, $terms, $this->specialPage, &$query ] );
+                       [ &$title, &$snippet, $result, $terms, $this->specialPage, &$query, &$attributes ] );
 
                $link = $this->linkRenderer->makeLink(
                        $title,
                        $snippet,
-                       [ 'data-serp-pos' => $position ],
+                       $attributes,
                        $query
                );
 
index 81a1a43..b4e3414 100644 (file)
@@ -168,7 +168,7 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
         *
         * @param string $iwPrefix Interwiki prefix
         * @return OOUI\IconWidget
-        **/
+        */
        protected function iwIcon( $iwPrefix ) {
                $interwiki = $this->iwLookup->fetch( $iwPrefix );
                $parsed = wfParseUrl( wfExpandUrl( $interwiki ? $interwiki->getURL() : '/' ) );
index 7e59432..0021f37 100644 (file)
@@ -21,8 +21,6 @@
                "resources/src/mediawiki.toolbar",
                "resources/src/mediawiki.widgets",
                "resources/src/jquery/jquery.accessKeyLabel.js",
-               "resources/src/jquery/jquery.autoEllipsis.js",
-               "resources/src/jquery/jquery.badge.js",
                "resources/src/jquery/jquery.byteLength.js",
                "resources/src/jquery/jquery.byteLimit.js",
                "resources/src/jquery/jquery.checkboxShiftClick.js",
index 435f058..81564ab 100644 (file)
@@ -167,7 +167,7 @@ class Language {
         * The form is '/(?:([strong ltr codepoint])|([strong rtl codepoint]))/u' .
         *
         * Generated by UnicodeJS (see tools/strongDir) from the UCD; see
-        * https://git.wikimedia.org/summary/unicodejs.git .
+        * https://phabricator.wikimedia.org/diffusion/GUJS/ .
         */
        // @codingStandardsIgnoreStart
        // @codeCoverageIgnoreStart
@@ -178,6 +178,7 @@ class Language {
        /**
         * Get a cached or new language object for a given language code
         * @param string $code
+        * @throws MWException
         * @return Language
         */
        static function factory( $code ) {
index 67c0ca7..1f720af 100644 (file)
@@ -20,6 +20,8 @@
  */
 use MediaWiki\MediaWikiServices;
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Base class for language conversion.
  * @ingroup Language
@@ -351,26 +353,34 @@ class LanguageConverter {
                if ( $this->guessVariant( $text, $toVariant ) ) {
                        return $text;
                }
-
                /* we convert everything except:
-                * 1. HTML markups (anything between < and >)
-                * 2. HTML entities
-                * 3. placeholders created by the parser
-                */
-               $marker = '|' . Parser::MARKER_PREFIX . '[\-a-zA-Z0-9]+';
+                  1. HTML markups (anything between < and >)
+                  2. HTML entities
+                  3. placeholders created by the parser
+                  IMPORTANT: Beware of failure from pcre.backtrack_limit (T124404).
+                  Minimize use of backtracking where possible.
+               */
+               $marker = '|' . Parser::MARKER_PREFIX . '[^\x7f]++\x7f';
 
                // this one is needed when the text is inside an HTML markup
-               $htmlfix = '|<[^>]+$|^[^<>]*>';
+               $htmlfix = '|<[^>\004]++(?=\004$)|^[^<>]*+>';
+
+               // Optimize for the common case where these tags have
+               // few or no children. Thus try and possesively get as much as
+               // possible, and only engage in backtracking when we hit a '<'.
 
                // disable convert to variants between <code> tags
-               $codefix = '<code>.+?<\/code>|';
+               $codefix = '<code>[^<]*+(?:(?:(?!<\/code>).)[^<]*+)*+<\/code>|';
                // disable conversion of <script> tags
-               $scriptfix = '<script.*?>.*?<\/script>|';
+               $scriptfix = '<script[^>]*+>[^<]*+(?:(?:(?!<\/script>).)[^<]*+)*+<\/script>|';
                // disable conversion of <pre> tags
-               $prefix = '<pre.*?>.*?<\/pre>|';
+               $prefix = '<pre[^>]*+>[^<]*+(?:(?:(?!<\/pre>).)[^<]*+)*+<\/pre>|';
+               // The "|.*+)" at the end, is in case we missed some part of html syntax,
+               // we will fail securely (hopefully) by matching the rest of the string.
+               $htmlFullTag = '<(?:[^>=]*+(?>[^>=]*+=\s*+(?:"[^"]*"|\'[^\']*\'|[^\'">\s]*+))*+[^>=]*+>|.*+)|';
 
-               $reg = '/' . $codefix . $scriptfix . $prefix .
-                       '<[^>]+>|&[a-zA-Z#][a-z0-9]+;' . $marker . $htmlfix . '/s';
+               $reg = '/' . $codefix . $scriptfix . $prefix . $htmlFullTag .
+                       '&[a-zA-Z#][a-z0-9]++;' . $marker . $htmlfix . '|\004$/s';
                $startPos = 0;
                $sourceBlob = '';
                $literalBlob = '';
@@ -378,18 +388,45 @@ class LanguageConverter {
                // Guard against delimiter nulls in the input
                // (should never happen: see T159174)
                $text = str_replace( "\000", '', $text );
+               $text = str_replace( "\004", '', $text );
 
                $markupMatches = null;
                $elementMatches = null;
+
+               // We add a marker (\004) at the end of text, to ensure we always match the
+               // entire text (Otherwise, pcre.backtrack_limit might cause silent failure)
                while ( $startPos < strlen( $text ) ) {
-                       if ( preg_match( $reg, $text, $markupMatches, PREG_OFFSET_CAPTURE, $startPos ) ) {
+                       if ( preg_match( $reg, $text . "\004", $markupMatches, PREG_OFFSET_CAPTURE, $startPos ) ) {
                                $elementPos = $markupMatches[0][1];
                                $element = $markupMatches[0][0];
+                               if ( $element === "\004" ) {
+                                       // We hit the end.
+                                       $elementPos = strlen( $text );
+                                       $element = '';
+                               } elseif ( substr( $element, -1 ) === "\004" ) {
+                                       // This can sometimes happen if we have
+                                       // unclosed html tags (For example
+                                       // when converting a title attribute
+                                       // during a recursive call that contains
+                                       // a &lt; e.g. <div title="&lt;">.
+                                       $element = substr( $element, 0, -1 );
+                               }
                        } else {
-                               $elementPos = strlen( $text );
-                               $element = '';
+                               // If we hit here, then Language Converter could be tricked
+                               // into doing an XSS, so we refuse to translate.
+                               // If non-crazy input manages to reach this code path,
+                               // we should consider it a bug.
+                               $log = LoggerFactory::getInstance( 'languageconverter' );
+                               $log->error( "Hit pcre.backtrack_limit in " . __METHOD__
+                                       . ". Disabling language conversion for this page.",
+                                       [
+                                               "method" => __METHOD__,
+                                               "variant" => $toVariant,
+                                               "startOfText" => substr( $text, 0, 500 )
+                                       ]
+                               );
+                               return $text;
                        }
-
                        // Queue the part before the markup for translation in a batch
                        $sourceBlob .= substr( $text, $startPos, $elementPos - $startPos ) . "\000";
 
@@ -398,9 +435,16 @@ class LanguageConverter {
 
                        // Translate any alt or title attributes inside the matched element
                        if ( $element !== ''
-                               && preg_match( '/^(<[^>\s]*)\s([^>]*)(.*)$/', $element, $elementMatches )
+                               && preg_match( '/^(<[^>\s]*+)\s([^>]*+)(.*+)$/', $element, $elementMatches )
                        ) {
+                               // FIXME, this decodes entities, so if you have something
+                               // like <div title="foo&lt;bar"> the bar won't get
+                               // translated since after entity decoding it looks like
+                               // unclosed html and we call this method recursively
+                               // on attributes.
                                $attrs = Sanitizer::decodeTagAttributes( $elementMatches[2] );
+                               // Ensure self-closing tags stay self-closing.
+                               $close = substr( $elementMatches[2], -1 ) === '/' ? ' /' : '';
                                $changed = false;
                                foreach ( [ 'title', 'alt' ] as $attrName ) {
                                        if ( !isset( $attrs[$attrName] ) ) {
@@ -419,7 +463,7 @@ class LanguageConverter {
                                }
                                if ( $changed ) {
                                        $element = $elementMatches[1] . Html::expandAttributes( $attrs ) .
-                                               $elementMatches[3];
+                                               $close . $elementMatches[3];
                                }
                        }
                        $literalBlob .= $element . "\000";
@@ -631,29 +675,43 @@ class LanguageConverter {
                $out = '';
                $length = strlen( $text );
                $shouldConvert = !$this->guessVariant( $text, $variant );
-
-               while ( $startPos < $length ) {
-                       $pos = strpos( $text, '-{', $startPos );
-
-                       if ( $pos === false ) {
+               $continue = 1;
+
+               $noScript = '<script.*?>.*?<\/script>(*SKIP)(*FAIL)';
+               $noStyle = '<style.*?>.*?<\/style>(*SKIP)(*FAIL)';
+               // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+               $noHtml = '<(?:[^>=]*+(?>[^>=]*+=\s*+(?:"[^"]*"|\'[^\']*\'|[^\'">\s]*+))*+[^>=]*+>|.*+)(*SKIP)(*FAIL)';
+               // @codingStandardsIgnoreEnd
+               while ( $startPos < $length && $continue ) {
+                       $continue = preg_match(
+                               // Only match -{ outside of html.
+                               "/$noScript|$noStyle|$noHtml|-\{/",
+                               $text,
+                               $m,
+                               PREG_OFFSET_CAPTURE,
+                               $startPos
+                       );
+
+                       if ( !$continue ) {
                                // No more markup, append final segment
                                $fragment = substr( $text, $startPos );
                                $out .= $shouldConvert ? $this->autoConvert( $fragment, $variant ) : $fragment;
                                return $out;
                        }
 
-                       // Markup found
+                       // Offset of the match of the regex pattern.
+                       $pos = $m[0][1];
+
                        // Append initial segment
                        $fragment = substr( $text, $startPos, $pos - $startPos );
                        $out .= $shouldConvert ? $this->autoConvert( $fragment, $variant ) : $fragment;
-
-                       // Advance position
+                       // -{ marker found, not in attribute
+                       // Advance position up to -{ marker.
                        $startPos = $pos;
-
                        // Do recursive conversion
+                       // Note: This passes $startPos by reference, and advances it.
                        $out .= $this->recursiveConvertRule( $text, $variant, $startPos, $depth + 1 );
                }
-
                return $out;
        }
 
index e2ed910..281be2b 100644 (file)
@@ -370,7 +370,7 @@ class Names {
                'sd' => 'سنڌي', # Sindhi
                'sdc' => 'Sassaresu', # Sassarese
                'sdh' => 'کوردی خوارگ', # Southern Kurdish
-               'se' => 'sámegiella', # Northern Sami
+               'se' => 'davvisámegiella', # Northern Sami
                'sei' => 'Cmique Itom', # Seri
                'ses' => 'Koyraboro Senni', # Koyraboro Senni
                'sg' => 'Sängö', # Sango/Sangho
@@ -418,7 +418,6 @@ class Names {
                'tly' => 'толышә зывон', # Talysh
                'tn' => 'Setswana', # Setswana
                'to' => 'lea faka-Tonga', # Tonga (Tonga Islands)
-               'tokipona' => 'Toki Pona', # Toki Pona
                'tpi' => 'Tok Pisin', # Tok Pisin
                'tr' => 'Türkçe', # Turkish
                'tru' => 'Ṫuroyo', # Turoyo
index a92428b..c02c155 100644 (file)
                        "Fwolff",
                        "Oesjaar",
                        "Matma Rex",
-                       "Biggs ZA"
+                       "Biggs ZA",
+                       "Slashme"
                ]
        },
-       "tog-underline": "Onderstreep skakels.",
+       "tog-underline": "Onderstreep skakels:",
        "tog-hideminor": "Versteek klein wysigings in die onlangse wysigingslys.",
        "tog-hidepatrolled": "Versteek gepatrolleerde wysigings in onlangse wysigingslys",
        "tog-newpageshidepatrolled": "Versteek gepatrolleerde wysigings van nuwe bladsy lys",
        "tog-extendwatchlist": "Brei dophoulys uit om alle wysigings te wys, nie slegs die nuutste nie",
        "tog-usenewrc": "Groepeer wysigings per bladsy in onlangse wysigings en dophoulys",
        "tog-numberheadings": "Nommer opskrifte outomaties",
-       "tog-showtoolbar": "Wys redigeergereedskap",
-       "tog-editondblclick": "Dubbelkliek om te wysig",
+       "tog-showtoolbar": "Wys redigeringsnutsbalk",
+       "tog-editondblclick": "Dubbelklik om te redigeer",
        "tog-editsectiononrightclick": "Wysig afdeling met 'n regskliek op die afdeling se titel",
        "tog-watchcreations": "Voeg bladsye wat ek skep en lêers wat ek oplaai by my dophoulys",
        "tog-watchdefault": "Voeg bladsye en lêers wat ek wysig by my dophoulys",
        "tog-watchmoves": "Voeg bladsye en lêers wat ek skuif by my dophoulys",
        "tog-watchdeletion": "Voeg bladsye en lêers wat ek skrap by my dophoulys",
+       "tog-watchuploads": "Voeg lêers wat ek oplaai by my dophoulys",
        "tog-watchrollback": "Voeg bladsye wat ek teruggerol het by my dophoulys",
        "tog-minordefault": "Merk alle wysigings automaties as klein by verstek.",
        "tog-previewontop": "Wys voorskou bo wysigingsboks.",
        "tog-enotifminoredits": "Stuur ook e-pos vir klein wysigings aan bladsye en lêers",
        "tog-enotifrevealaddr": "Stel my e-posadres bloot in kennisgewingspos",
        "tog-shownumberswatching": "Wys die aantal gebruikers wat dophou",
-       "tog-oldsig": "Bestaande handtekening:",
-       "tog-fancysig": "Doodgewone handtekening (sonder outomatiese skakel)",
-       "tog-uselivepreview": "Gebruik lewendige voorskou",
+       "tog-oldsig": "U bestaande handtekening:",
+       "tog-fancysig": "Beskou handtekening as wikiteks (sonder 'n  outomatiese skakel)",
+       "tog-uselivepreview": "Vertoon voorskoue regstreeks",
        "tog-forceeditsummary": "Let my daarop as ek nie 'n opsomming van my wysiging gee nie",
        "tog-watchlisthideown": "Versteek my wysigings in dophoulys",
        "tog-watchlisthidebots": "Versteek robotwysigings in dophoulys",
        "tog-watchlisthideminor": "Versteek klein wysigings van my dophoulys",
        "tog-watchlisthideliu": "Versteek wysigings deur aangetekende gebruikers van dophoulys",
+       "tog-watchlistreloadautomatically": "Herlaai outomaties die dophoulys as 'n filter verander word (benodig JavaScript)",
+       "tog-watchlistunwatchlinks": "Voeg direkte dophou/verwyder skakels by dophoulysitems (JavaScript benodig vir skakelaarfunksie)",
        "tog-watchlisthideanons": "Versteek wysigings deur anonieme gebruikers van dophoulys",
        "tog-watchlisthidepatrolled": "Versteek gepatrolleerde wysigings van dophoulys",
+       "tog-watchlisthidecategorization": "Versteek kategorisering van bladsye",
        "tog-ccmeonemails": "Stuur my 'n kopie van die e-pos wat ek aan ander stuur",
        "tog-diffonly": "Moenie 'n bladsy se inhoud onder die wysigingsverskil wys nie",
        "tog-showhiddencats": "Wys versteekte kategorieë",
@@ -72,8 +77,8 @@
        "underline-default": "Omslag of webblaaier se verstekwaarde",
        "editfont-style": "Lettertipe vir wysigingsvenster:",
        "editfont-monospace": "Monospaced lettertipe",
-       "editfont-sansserif": "Sans-serif lettertipe",
-       "editfont-serif": "Serif lettertipe",
+       "editfont-sansserif": "Sans-serif-lettertipe",
+       "editfont-serif": "Serif-lettertipe",
        "sunday": "Sondag",
        "monday": "Maandag",
        "tuesday": "Dinsdag",
        "thursday": "Donderdag",
        "friday": "Vrydag",
        "saturday": "Saterdag",
-       "sun": "So",
-       "mon": "Ma",
-       "tue": "Di",
-       "wed": "Wo",
-       "thu": "Do",
-       "fri": "Vr",
-       "sat": "Sa",
+       "sun": "So.",
+       "mon": "Ma.",
+       "tue": "Di.",
+       "wed": "Wo.",
+       "thu": "Do.",
+       "fri": "Vr.",
+       "sat": "Sa.",
        "january": "Januarie",
        "february": "Februarie",
        "march": "Maart",
        "october-gen": "Oktober",
        "november-gen": "November",
        "december-gen": "Desember",
-       "jan": "Jan",
-       "feb": "Feb",
-       "mar": "Mrt",
-       "apr": "Apr",
+       "jan": "Jan.",
+       "feb": "Feb.",
+       "mar": "Mrt.",
+       "apr": "Apr.",
        "may": "Mei",
-       "jun": "Jun",
-       "jul": "Jul",
-       "aug": "Aug",
-       "sep": "Sep",
-       "oct": "Okt",
-       "nov": "Nov",
-       "dec": "Des",
+       "jun": "Jun.",
+       "jul": "Jul.",
+       "aug": "Aug.",
+       "sep": "Sept.",
+       "oct": "Okt.",
+       "nov": "Nov.",
+       "dec": "Des.",
        "january-date": "$1 Januarie",
        "february-date": "$1 Februarie",
        "march-date": "$1 Maart",
        "october-date": "$1 Oktober",
        "november-date": "$1 November",
        "december-date": "$1 Desember",
-       "period-am": "AM",
-       "period-pm": "PM",
+       "period-am": "vm.",
+       "period-pm": "nm.",
        "pagecategories": "{{PLURAL:$1|Kategorie|Kategorieë}}",
        "category_header": "Bladsye in kategorie \"$1\"",
        "subcategories": "Subkategorieë",
        "tagline": "Vanaf {{SITENAME}}",
        "help": "Hulp",
        "search": "Soek",
+       "search-ignored-headings": " #<!-- los hierdie reël onveranderd hier --> <pre>\n# Hofies wat deur die soektog geïgnoreer word.\n# Wysigings word toegepas sodra die bladsy met die hofie geïndekseer word.\n# Jy kan ïndeksering afdwing deur 'n nietige wysiging te maak.\n# Die sintaks is soos volg:\n#   * Alles vanaf 'n \"#\" karakter tot die einde van 'n lyn is 'n opmerking.\n#   * Elke reël wat enige teks bevat moet die presiese titel wees wat geïgnoreer moet word, insluitend hoof- en kleinletters.\nVerwsyings\nEksterne skakels\nSien ook\n #</pre> <!-- los hierdie reël onveranderd hier -->",
        "searchbutton": "Soek",
        "go": "Wys",
        "searcharticle": "Wys",
        "history": "Bladsygeskiedenis",
        "history_short": "Geskiedenis",
        "history_small": "geskiedenis",
-       "updatedmarker": "opgedateer sedert my laaste besoek",
+       "updatedmarker": "sedert my laaste besoek bygewerk",
        "printableversion": "Drukbare weergawe",
        "permalink": "Permanente skakel",
        "print": "Druk",
        "view": "Wys",
        "view-foreign": "Wys op $1",
-       "edit": "Wysig",
+       "edit": "Redigeer",
        "edit-local": "Wysig plaaslike beskrywing",
        "create": "Skep",
-       "create-local": "Voeg plaaslike beskrywing by",
+       "create-local": "Voeg 'n plaaslike beskrywing by",
        "delete": "Skrap",
        "undelete_short": "Herstel {{PLURAL:$1|een wysiging|$1 wysigings}}",
        "viewdeleted_short": "Wys {{PLURAL:$1|een geskrapte wysiging|$1 geskrapte wysigings}}",
        "talk": "Bespreking",
        "views": "Weergawes",
        "toolbox": "Gereedskap",
+       "tool-link-emailuser": "E-pos die {{GENDER:$1|gebruiker}}",
        "imagepage": "Lees bladsy oor lêer",
        "mediawikipage": "Bekyk boodskapsbladsy",
        "templatepage": "Bekyk sjabloonsbladsy",
        "otherlanguages": "Ander tale",
        "redirectedfrom": "(Aangestuur vanaf $1)",
        "redirectpagesub": "Aanstuurblad",
-       "redirectto": "Aanstuur na:",
+       "redirectto": "Stuur aan na:",
        "lastmodifiedat": "Die bladsy is laas op $1 om $2 bygewerk.",
        "viewcount": "Hierdie bladsy is al {{PLURAL:$1|keer|$1 kere}} aangevra.",
        "protectedpage": "Beskermde bladsy",
        "jumptonavigation": "navigasie",
        "jumptosearch": "soek",
        "view-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer om die bladsy op te roep.\n\n$1",
-       "generic-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer probeer.",
+       "generic-pool-error": "Jammer, die bedieners is tans oorbelas.\nTe veel gebruikers probeer om na hierdie bladsy te kyk.\nWag asseblief 'n rukkie voordat u weer toegang tot hierdie bron verkry.",
        "pool-timeout": "Die maksimum wagtyd vir 'n databasisversperring is oorskry.",
        "pool-queuefull": "Die poel se wagtou is vol",
        "pool-errorunknown": "Onbekende fout",
-       "pool-servererror": "Die \"pool counter\"-diens is nie beskikbaar nie ($1).",
+       "pool-servererror": "Die poelteller-diens is nie beskikbaar nie ($1).",
        "poolcounter-usage-error": "Gebruiksfout: $1",
        "aboutsite": "Inligting oor {{SITENAME}}",
        "aboutpage": "Project:Omtrent",
        "copyrightpage": "{{ns:project}}:Kopieregte",
        "currentevents": "Huidige gebeure",
        "currentevents-url": "Project:Huidige gebeure",
-       "disclaimers": "Voorbehoud",
+       "disclaimers": "Vrywaring",
        "disclaimerpage": "Project:Voorwaardes",
-       "edithelp": "Wysigingshulp",
+       "edithelp": "Redigeringshulp",
        "helppage-top-gethelp": "Hulp",
        "mainpage": "Tuisblad",
        "mainpage-description": "Tuisblad",
        "policy-url": "Project:Beleid",
-       "portal": "Gebruikersportaal",
+       "portal": "Gemeenskapsportaal",
        "portal-url": "Project:Gebruikersportaal",
        "privacy": "Privaatheidsbeleid",
        "privacypage": "Project:Privaatheidsbeleid",
        "passwordreset-emailtext-user": "Gebruiker $1 op die webtuiste {{SITENAME}} het u gebruikersgegewens vir {{SITENAME}} ($4) opgevra.\nDie volgende {{PLURAL:$3|gebruiker is|gebruikers is}} aan die e-posadres gekoppel:\n\n$2\n\n{{PLURAL:$3|Die tydelike wagwoord verval|Hierdie tydelike wagwoorde verval}} oor {{PLURAL:$5|een dag|$5 dae}}.\nMeld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.",
        "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTydelike wagwoord: \n$2",
        "passwordreset-emailsentemail": "'n E-pos is gestuur om u wagwoord te herstel.",
+       "passwordreset-invalidemail": "Ongeldige e-posadres",
        "changeemail": "Wysig E-posadres",
        "changeemail-header": "Wysig rekening se e-posadres",
        "changeemail-no-info": "U moet aangemeld wees om regstreeks toegang tot die bladsy te kry.",
        "revdelete-confirm": "Bevestig asseblief dat u dit wil doen, dat u die nagevolge verstaan en dat u dit doen in ooreenstemming met die [[{{MediaWiki:Policy-url}}|beleid]].",
        "revdelete-suppress-text": "Verberging van weergawes mag '''slegs''' in die volgende gevalle gebruik word:\n* Potensieel lasterlike inligting\n* Ongepaste persoonlike inligting\n*: ''woonadres, telefoonnommers, ID-nommers, ensovoorts.''",
        "revdelete-legend": "Stel sigbaarheid beperkinge",
-       "revdelete-hide-text": "Steek hersiening teks weg",
+       "revdelete-hide-text": "Wysigingsteks",
        "revdelete-hide-image": "Steek lêer inhoud weg",
        "revdelete-hide-name": "Steek aksie en teiken weg",
        "revdelete-hide-comment": "Wysigingsopsomming",
        "userrights-nodatabase": "Databasis $1 bestaan nie of is nie hier beskikbaar nie.",
        "userrights-changeable-col": "Groepe wat u kan verander",
        "userrights-unchangeable-col": "Groepe wat u nie kan verander nie",
+       "userrights-expiry": "Verval:",
+       "userrights-expiry-existing": "Bestaande vervaldatum: $2 om $3",
+       "userrights-expiry-othertime": "Ander tyd:",
        "userrights-conflict": "Konflik met gebruikersregte! Pas asseblief weer u wysigings toe.",
        "group": "Groep:",
        "group-user": "Gebruikers",
        "recentchanges-submit": "Wys",
        "rcfilters-tag-remove": "Verwyder '$1'",
        "rcfilters-legend-heading": "<strong>Lys van afkortings:</strong>",
-       "rcfilters-other-review-tools": "<strong>Ander hulpmiddels</strong>",
+       "rcfilters-other-review-tools": "Ander hulpmiddels",
        "rcfilters-group-results-by-page": "Groepeer resultate per bladsy",
        "rcfilters-grouping-title": "Groepering",
        "rcfilters-activefilters": "Aktiewe filters",
        "rcfilters-savedqueries-new-name-label": "Naam",
        "rcfilters-savedqueries-new-name-placeholder": "Beskryf die doel van die filter",
        "rcfilters-savedqueries-apply-label": "Skep filter",
-       "rcfilters-savedqueries-apply-and-setdefault-label": "Skep verstefilter",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Skep verstekfilter",
        "rcfilters-savedqueries-cancel-label": "Kanselleer",
        "rcfilters-savedqueries-add-new-title": "Stoor huidige instellings",
        "rcfilters-restore-default-filters": "Stel filters terug",
        "rcfilters-highlightmenu-help": "Kies 'n kleur om hierdie eienskap aan te dui",
        "rcfilters-filterlist-noresults": "Geen filters gevind",
        "rcfilters-noresults-conflict": "Geen resultate gevind omdat die soek-kriteria met mekaar bots",
+       "rcfilters-filtergroup-authorship": "Outeur van die bywerking",
        "rcfilters-filter-editsbyself-label": "U eie wysigings",
        "rcfilters-filter-editsbyself-description": "U eie bydraes.",
        "rcfilters-filter-editsbyother-label": "Wysigings deur ander",
        "rcfilters-filter-editsbyother-description": "Alle wysigings behalwe u eie.",
-       "rcfilters-filtergroup-userExpLevel": "Gebruikersregistrasie en ervaring",
+       "rcfilters-filtergroup-userExpLevel": "Registrasie en ervaring",
        "rcfilters-filter-user-experience-level-registered-label": "Geregistreer",
        "rcfilters-filter-user-experience-level-registered-description": "Aangemelde redigeerders.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Ongeregistreer",
        "rcfilters-filter-user-experience-level-unregistered-description": "Redigeerders wat nie aangemeld is nie.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nuwelinge",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Minder as 10 wysigings en 4 dae van aktiwiteit.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Redigeerders met minder as 10 wysigings en 4 dae van aktiwiteit.",
        "rcfilters-filter-user-experience-level-learner-label": "Leerlinge",
+       "rcfilters-filter-user-experience-level-learner-description": "Redigeerders met meer ervaring as \"nuwelinge\", maar minder as \"ervare gebruikers\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Ervare gebruikers",
+       "rcfilters-filter-user-experience-level-experienced-description": "Redigeerders met meer as 500 wysigings en 30 dae van aktiwiteit.",
+       "rcfilters-filtergroup-automated": "Geoutomatiseerde bywerkings",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Wysigings met behulp van geoutomatiseerde hulpmiddele.",
        "rcfilters-filter-humans-label": "Menslik (nie 'n bot)",
        "rcfilters-filter-minor-label": "Klein wysigings",
        "rcfilters-filter-minor-description": "Wysigings wat deur die outeur as klein gemerk is.",
        "rcfilters-filter-major-label": "Groot wysigings",
-       "rcfilters-filter-major-description": "Wysigings wat nie as klein gekerm is nie.",
-       "rcfilters-filtergroup-watchlist": "Opgehoude bladsye",
-       "rcfilters-filter-watchlist-watched-label": "Op die dophoulys",
+       "rcfilters-filter-major-description": "Wysigings wat nie as klein gemerk is nie.",
+       "rcfilters-filtergroup-watchlist": "Dopgehoude bladsye",
+       "rcfilters-filter-watchlist-watched-label": "In dophoulys",
        "rcfilters-filter-watchlist-watched-description": "Wysigings aan bladsye op u dophoulys.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nuwe dophoulys-wysigings",
+       "rcfilters-filter-watchlist-watchednew-description": "Wysigings aan bladsye op u dophoulys wat u nog nie besoek het nie.",
+       "rcfilters-filter-watchlist-notwatched-label": "Nie in dophoulys",
+       "rcfilters-filter-watchlist-notwatched-description": "Alles behalwe wysigings aan bladsye op u dophoulys.",
        "rcfilters-filtergroup-watchlistactivity": "Dophoulys-bedrywighede",
+       "rcfilters-filtergroup-changetype": "Soort wysiging",
        "rcfilters-filter-pageedits-label": "Bladsywysigings",
+       "rcfilters-filter-pageedits-description": "Wysigings aan wiki-inhoud, besprekings en kategoriebeskrywings…",
        "rcfilters-filter-newpages-label": "Nuwe bladsye",
+       "rcfilters-filter-newpages-description": "Bywerkings wat nuwe bladsye skep.",
+       "rcfilters-filter-categorization-label": "Kategorie-wysigings",
+       "rcfilters-filter-categorization-description": "Wys kategorisering van bladsye.",
        "rcfilters-filter-logactions-label": "Geregistreerde aksies",
-       "rcfilters-view-advanced-filters-label": "Gevorderde filters",
+       "rcfilters-filter-logactions-description": "Administratiewe aksies, nuwe rekeninge, bladsyverwyderings, oplaaie…",
+       "rcfilters-filtergroup-lastRevision": "Nuutste weergawes",
+       "rcfilters-filter-lastrevision-label": "Nuutste weergawe",
+       "rcfilters-filter-lastrevision-description": "Slegs die mees onlangse wysigings aan die bladsy.",
+       "rcfilters-filter-previousrevision-label": "Nie die nuutste weergawe nie",
+       "rcfilters-filter-previousrevision-description": "Alle wysigings is nie die \"nuutste weergawe\" nie.",
+       "rcfilters-filter-excluded": "Uitgesluit",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:nie</strong> $1",
+       "rcfilters-exclude-button-off": "Sluit uit",
        "rcfilters-view-tags": "Geëtiketteerde wysigings",
-       "rcfilters-view-namespaces-tooltip": "Filter resultate per naamruimte",
+       "rcfilters-view-namespaces-tooltip": "Filtreer resultate volgens naamruimte",
+       "rcfilters-view-tags-tooltip": "Filter resultate volgens wysigingsetikette",
        "rcfilters-preference-label": "Versteek die verbeter weergawe van 'Onlangse wysigings'",
        "rcnotefrom": "{{PLURAL:$5|Wysiging|Wysigings}} sedert <strong>$3 om $4</strong> (maksimum van <strong>$1</strong> word gewys).",
        "rclistfrom": "Vertoon wysigings vanaf $3 $2",
        "watchlist-details": "Daar is {{PLURAL:$1|$1 bladsy|$1 bladsye}} in u dophoulys (besprekingsblaaie ingesluit).",
        "wlheader-enotif": "E-pos kennisgewings is aangeskakel.",
        "wlheader-showupdated": "Bladsye wat verander is sedert u hulle laas besoek het word in '''vetdruk''' uitgewys.",
-       "wlnote": "Hier volg die laaste {{PLURAL:$1|verandering|'''$1''' veranderings}} binne die laaste {{PLURAL:$2|uur|'''$2''' ure}}, soos vanaf $3 om $4.",
+       "wlnote": "Hier volg die laaste {{PLURAL:$1|verandering<strong>$1</strong> veranderings}} binne die laaste {{PLURAL:$2|uur|<strong>$2</strong> ure}}, soos op $3 om $4.",
        "wlshowlast": "Wys afgelope $1 ure, $2 dae",
        "watchlist-hide": "Versteek",
        "watchlist-submit": "Wys",
        "allmessages-filter-unmodified": "Onveranderd",
        "allmessages-filter-all": "Alle",
        "allmessages-filter-modified": "Verander",
-       "allmessages-prefix": "Filter op voorvoegsel:",
+       "allmessages-prefix": "Filtreer volgens voorvoegsel:",
        "allmessages-language": "Taal:",
        "allmessages-filter-submit": "Laat waai",
        "allmessages-filter-translate": "Vertaal",
        "exif-flash-mode-2": "flitser verplig onderdruk",
        "exif-flash-mode-3": "outomatiese modus",
        "exif-flash-function-1": "Geen flitserfunksie",
-       "exif-flash-redeye-1": "filter rooi oë vermindering",
+       "exif-flash-redeye-1": "vermindering van rooi oë",
        "exif-focalplaneresolutionunit-2": "duim",
        "exif-sensingmethod-1": "Ongedefineer",
        "exif-sensingmethod-2": "Eén-chip-kleursensor",
        "confirmrecreate": "Gebruiker [[User:$1|$1]] ([[User talk:$1|kontak]]) het hierdie bladsy uitgevee nádat u begin redigeer het met rede:\n:''$2''\nBevestig asseblief dat u hierdie blad weer wil skep.",
        "confirmrecreate-noreason": "Gebruiker [[User:$1|$1]] ([[User talk:$1|bespreking]]) het die bladsy geskrap nadat u dit begin wysig het.\nBevestig dat u die bladsy wil herskep.",
        "recreate": "Herskep",
+       "confirm-purge-title": "Verfris die bladsy",
        "confirm_purge_button": "Regso",
        "confirm-purge-top": "Verwyder die kas van hierdie blad?",
        "confirm-purge-bottom": "Die opruiming van die kas sorg daarvoor dat die mees onlangse weergawe van 'n bladsy vertoon word.",
index ce82a52..594402e 100644 (file)
@@ -7,6 +7,7 @@
                        "Tokoabibi"
                ]
        },
+       "tog-underline": "nu sasaan sacuzu’ masasiket:",
        "tog-hideminor": "midimut ibabuay nu capi a sumad mikilulay a sumad",
        "tog-hidepatrolled": "midimut capiay a demiad masumaday tayza-mikibiay a mikawaway-kalumyiti",
        "tog-newpageshidepatrolled": "midimut baluhayay a kasabelih piazihan-tu-sulit tayza-mikibi a kasabelih",
@@ -14,6 +15,7 @@
        "tog-extendwatchlist": "micuwat miazihay a piazihan-tu-sulit paazih yamalyilu capi demiad zumaay a sacahamin sumad",
        "tog-usenewrc": "kilul capi demiad misumad atu miazihay a piazihan-tu-sulit a kasabelih  kakuniza paazih ku masumaday",
        "tog-numberheadings": "satangahan lunuk pabanggu",
+       "tog-showtoolbar": "paazih mikawaway-kalumyiti sakaluk tusil",
        "tog-editondblclick": "sapecec sakatusa hawsa mikawaway-kalumyiti kasabelih",
        "tog-editsectiononrightclick": "miwawah hwasu kawanan-penec sapecec tusil satangahan mikawaway-kalumyiti",
        "tog-watchcreations": "amipatizeng kasabelih nu maku atu patapabaw a tangan pacunus miazihay a piazihan-tu-sulit",
        "tog-enotifminoredits": "anu kasabelih atu tangan izaw ku mikilulay asumad, pabahel imyiyo(email) patakus takuwan",
        "tog-enotifrevealaddr": "ilabu nu patakusay a tigami paazih imyiyo(email) puenengan",
        "tog-shownumberswatching": "paazih misisip misaungayay a nikayadah",
+       "tog-oldsig": "nu misuay ayzaay a sulitan a ngangan:",
        "tog-fancysig": "sulitan a ngangan mahiza ku Wikitext kamu (caay lunuk misanga’ masasiket)",
        "tog-forceeditsummary": "caay misulit mikawaway-kalumyiti pecu’ nu lacul haw pacekil takuwan",
        "tog-watchlisthideown": "midimut ilabu miazihay a piazihan-tu-sulit numakuay a mikawaway-kalumyiti",
        "tog-watchlisthidebots": "midimut ilabu miazihay a piazihan-tu-sulit nu kikay-tademaw a mikawaway-kalumyiti",
        "tog-watchlisthideminor": "midimut ilabuay nu miazihay a piazihan-tu-sulit mikilulay a sumad",
        "tog-watchlisthideliu": "midimut miazihay a piazihan-tu-sulit patalabu misaungayay a mikawaway-kalumyiti",
+       "tog-watchlistreloadautomatically": "palalitemuh tu kawaw sakacucek misumad lunuk miliyaw maasip miazihay a piazihan tu sulit (maydih pisaungay JavaScript)",
        "tog-watchlisthideanons": "midimut miazihay a piazihan-tu-sulit mikawaway-kalumyiti nu paceba panganganay a misaungayay",
        "tog-watchlisthidepatrolled": "midimut ilabu miazihay a piazihan-tu-sulit natayza-mikibiay a mikawaway-kalumyiti",
        "tog-watchlisthidecategorization": "midimut kasabelih kakuniza",
        "hidden-categories": "{{PLURAL:$1|midimut kakuniza}}",
        "hidden-category-category": "midimut kakuniza",
        "category-subcat-count": "{{PLURAL:$2|uyni kakuniza hatiza ku cacay yamalyilu sailuc-kakuniza. kina kakuniza yamalyilu isasa $2 a sailuc-kasasizuma, ilabu {{PLURAL:$1}}mahiza ku isasaay}}",
+       "category-subcat-count-limited": "uyni kakuniza yamalyilu isasa’ay {{PLURAL:$1|sailuc-kakuniza}}.",
        "category-article-count": "{{PLURAL:$2|uyni kakuniza hatiza ku cacay yamalyilu sailuc-kakuniza. kina kakuniza yamalyilu isasa $2 a sailuc-kasasizuma, ilabu {{PLURAL:$1}}mahiza ku isasaay}}",
+       "category-article-count-limited": "isasa’ay a {{PLURAL:$1|kasabelih ku}} i masitudungay a kakuniza.",
        "category-file-count": "{{PLURAL:$2|kakuniza yamalyilu isasaay a cacay ku tangan. kakuniza yamalyilu isasaay izaway $1 ku tangan, pulung $2 makalaan.}}",
        "listingcontinuesabbrev": "palalid",
+       "index-category": "mapatayza kapah pikiliman tu nisulitan miasipay kasabelih",
+       "noindex-category": "caay kasilsil i kapah pikiliman tu nisulitan miasipay kasabelih",
        "broken-file-category": "tangan masasiket malepi’ay a kasabelih",
        "about": "mahizaay",
        "article": "lacul kasabelih",
        "tagline": "makayzaay i {{SITENAME}}",
        "help": "buhci tu kamu",
        "search": "kilim",
+       "search-ignored-headings": "#<!-- leave this line exactly as it is --><pre>\n# i mikilim maydih sekipo a pyawti.\n# misumad tina tangan sakalamkam sakay mapasilsilay a kapah pikiliman tu nisulitan miasip a kasabelih pyawti silaheci.\n# kapah kisu i mikawaway-kalumyiti caay misumad  lacul kya pacici kasabelih miliyaw kapah pikiliman tu nisulitan miasip.\n# kamu-sakilul tinaku isasa’ay:\n#   *  amahicahica nay \"#\" tatebanan nu nisulitan  angangan a silsil tayza izikuzay amihica ku buhci tu kamu.\n#   *  amahicahica caay nayi’ ku cacan a silsil dayhiw amisekipo a pyawti。\nmiazih tu tatenga’ay nasulitan \nhekal masasiket \naazihan\n #</pre><!-- leave this line exactly as it is -->",
        "searchbutton": "kilim",
        "go": "mileku",
        "searcharticle": "mileku",
        "create": "patizeng",
        "create-local": "cunusen itiniay a buhci tu kamu",
        "delete": "misipu",
+       "viewdeleted_short": "miciwsace {{PLURAL:$1|1 masipuay tu masumad|$1 masipuay tu masumad}}",
+       "protect": "midiput",
        "protect_change": "misumad",
        "unprotect": "misumad tu midiputay",
        "newpage": "baluhayay a kasabelih",
        "jumpto": "taayaw:",
        "jumptonavigation": "pasubana’ tu miidangay",
        "jumptosearch": "kilim",
+       "view-pool-error": "ahicanaca, tadayadah ku misaungayay mitanamay miciwsace tina a laculaculan, sefu-kikay masungaliw tu ku katumes.\npihalhalen mitanam aca.\n\n\n$1",
+       "generic-pool-error": "ahicanaca,tadayadah ku misaungayay mitanamay miciwsace tina a laculaculan, sefu-kikay masungaliw tu ku katumes.\npihalhalen mitanam aca.",
        "pool-timeout": "imahini mihalhal milawpes pamutek",
        "pool-queuefull": "laylay saculuk matumestu",
        "pool-errorunknown": "caay kapulita ku mungangaw",
        "pool-servererror": "la’cus pisaungay laylay miasipay mietap ($1)",
+       "poolcounter-usage-error": "sahicaan mungangaw: $1",
        "aboutsite": "mahizaay {{SITENAME}}",
        "aboutpage": "Project:mahizaay",
        "copyright": "anu izaw ku zuma buhci tu kamu, kasabelih aazihen a lacul i labu, pisaungay hamin $1 sapabeli tu kinli a ceding.",
        "privacypage": "Project:salimek a mikuwanay a kawaw",
        "badaccess": "mungangaw ku tungus",
        "badaccess-group0": "sisetyimo caay mahasa kisu mikawaw tina saungay.",
+       "badaccess-groups": "milunguc kisu misaungay dada’ tu {{PLURAL:$2|tina|uyniyay}} cyuncuay misaungayay taneng pisaungay: $1.",
        "versionrequired": "maydih $1 baziyong a MediaWiki",
+       "versionrequiredtext": "maydih pisaungay $1 baziyong a MediaWiki dada’ kapah pisaungay tina kasabelih.\npiazih tu tatenga’ay [[Special:Version|baziyong]].",
        "ok": "malucekay",
        "retrievedfrom": "miala i \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|izaw kisu}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|kisu}}izaw namakay {{PLURAL:$3|zumaay a misaungayay|$3 misaungayay}} a $1 ($2).",
        "youhavenewmessagesmanyusers": "izaw kisu namakay katuud misaungayay a $1 ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|cacay baluhay palatuh|999=baluhay palatuh}}",
+       "newmessagesdifflinkplural": "capi demiad {{PLURAL:$1|misumad|999=misumad}}",
        "youhavenewmessagesmulti": "izaw $1 baluhay palatuh kisu",
        "editsection": "mikawaway-kalumyiti",
        "editold": "mikawaway tu kalumyiti",
-       "viewsourceold": "ciwsace sakatizeng bangu",
+       "viewsourceold": "ciwsace yuensma-kodo",
        "editlink": "mikawaway-kalumyiti",
-       "viewsourcelink": "ciwsace sakatizeng bangu",
+       "viewsourcelink": "ciwsace yuensma-kodo",
        "editsectionhint": "mikawaway-kalumyiti tusil: $1",
        "toc": "dilyikotoling",
        "showtoc": "paazih",
        "confirmable-yes": "hang",
        "confirmable-no": "caay",
        "thisisdeleted": "ciwsace saca patiku $1?",
+       "viewdeleted": "ciwsace $1?",
        "restorelink": "{{PLURAL:$1|masipuay a mikawaway-kalumyiti}}",
        "feed-invalid": "la’cusay a miaca-aazihan Feed kakuniz.",
        "feed-unavailable": "caayhen nipabeli RSS saca Atom ayza",
+       "site-rss-feed": "\"$1\" a RSS saangangan",
        "site-atom-feed": "$1 a Atom saangangan",
        "page-rss-feed": "\"$1\" a RSS saangangan",
        "page-atom-feed": "$1 a Atom saangangan",
        "nstab-help": "buhci tu kamu a kasabelih",
        "nstab-category": "kakuniza",
        "mainpage-nstab": "saayaway a belih",
+       "nosuchspecialpage": "inayi’ tina sazumaay a kasabelih",
+       "nospecialpagetext": "<strong> milunguc nu misu a sazumaay a kasabelih la’cus.</strong>\n\nmaydih miala kapahay a sazumaay a kasabelih  piazihan-tu-sulit kapah tayza [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "mungangaw",
        "databaseerror": "sulu nu nasulitan  mungangaw",
        "databaseerror-text": "tahkal kalunasulitan-sulu palalitemuh tu kawaw mungangaw.\nuyniyan hakay pakatineng sisetyimo izaw ku munday.",
        "databaseerror-query": "palalitemuh tu kawaw: $1",
        "databaseerror-function": "sakapaluwaluway: $1",
        "databaseerror-error": "mungangaw: $1",
+       "laggedslavemode": "<strong> patalaw:</strong> kasabelih hakay caay yamalyilu capi demiad misabaluh.",
        "readonly": "pamutektu sulu nu nasulitan",
        "enterlockreason": "pisuliten pamutek a mahicaay, yamalyilu sausi miliyaw mawawah a tuki",
+       "missingarticle-rev": "(masumad#: $1)",
        "readonly_lag": "nasulitan-sulu lunuk miazih, imahini mihalhal mikilulay nasulitan-sulu malecad naamahiza misulit kalunasulitan katukuh sausi nasulitan-sulu",
        "internalerror": "ilabuay a mungangaw",
        "internalerror_info": "ilabuay a mungangaw: $1",
        "internalerror-fatal-exception": "pihaceng a bahal nikalahizaan \"$1\"",
        "filecopyerror": "la’cus mikopi tangan \"$1\" tayza \"$2\".",
        "filerenameerror": "la’cus miliyaw pangangan tu tangan \"$1\" ku \"$2\".",
+       "filedeleteerror": "la’cus misipu ku tangan \"$1\".",
        "directorycreateerror": "la’cus patizeng dilyikotoling \"$1\"",
        "directoryreadonlyerror": "dilyikotoling \"$1\" ku asip dada’.",
        "directorynotreadableerror": "dilyikotoling \"$1\" la’cu miasip.",
        "badarticleerror": "la’cus ini kasabelih miteka kya saungay.",
        "cannotdelete": "la’cus misipu kasabelih saca tangan \"$1\".\nhakay masipu tuway ku zumaay a tatemaw",
        "cannotdelete-title": "la’cus masipu kasabelih \"$1\"",
+       "delete-hook-aborted": "sipu masatezep tuway nay Hook.\nzumasatu caay patukil inayi’ amahicahica buhci tu kamu.",
        "no-null-revision": "la’cus patizeng kasabelih \"$1\" a baluhay nayi’ ku cacan a sumad",
        "badtitle": "a’cusay a pyawti",
        "badtitletext": "matuzu’ay a kasabelih pyawti u la’cusay、nayi’ ku cacan, caaysa tatenga’ay tu misiket kamu Wikiay a pyawti.\ntebanay pyawti akay amalyilu la’cusay pisaungay i pyawtayi a tatebanan nu nisulitan.",
        "title-invalid-empty": "tebanay satangahan akay amalyilu la’cusay pisaungay i pyawtayi a tatebanan-nisulitan.",
+       "title-invalid-utf8": "namilungucay a kasabelih satangahan yamalyilu izaw la’cusay a UTF-8 bacu",
        "title-invalid-interwiki": "milungucay a kasabelih satangahan yamalyilu la’cus pisaungay i satangahan a milakuid Wiki masasiket.",
        "title-invalid-talk-namespace": "milungucay a kasabelih satangahan nimicaliw hakay inayi’ay a sasukamu belih",
        "title-invalid-characters": "milungucay a kasabelih satangahan yamalyilu la’cusay a tatebanan-nisulitan: \"$1\".",
+       "title-invalid-magic-tilde": "milunguc tu kasabelih satangahan izaw ku la’cusay a kaliwaza masalaing bacu  (<nowiki>~~~</nowiki>)",
+       "title-invalid-too-long": "namilungucay a kasabelih satangahan mangasiw, satangahan pisaungay UTF-8 sakababalic a bang gu amana mangasiw $1 {{PLURAL:$1|wyiyincu}}.",
        "title-invalid-leading-colon": "milungucay a kasabelih  satangahan yamalyilu la’cusay a mahaw-bacu i lalingatuan.",
-       "viewsource": "ciwsace sakatizeng bangu",
+       "perfcachedts": "isasa’ay u saduba’ kalunasulitan, sazikuz misabaluh tuki sa u $1. saduba’ kalunasulitan sayadah sa kapah misuped  {{PLURAL:$4|1 ku heci|$4 ku heci}}.",
+       "viewsource": "ciwsace yuensma-kodo",
        "viewsource-title": "ciwsace $1 a sakatizeng banggu",
        "actionthrottled": "makelec saungay tuway",
        "protectedpagetext": "tina kasabelih masetin midiput  mitena’ mikawaway-kalumyiti saca zuma saungay tuway.",
        "viewsourcetext": "kapah kisu miciwsace atu mikopi tina kasabelih a sakatizeng banggu.",
+       "viewyourtext": "kapah kisu miciwsace atu kopi ilabu’ tina kasabelih <strong> kisu mikawaway-kalumyiti </strong> yuensma-kodo.",
+       "namespaceprotected": "inayi’ ku tungus kisu mikawaway-kalumyiti <strong>$1</strong> pangangananay a salaedan a kasabelih.",
+       "customcssprotected": "inayi’ ku tungus kisu mikawaway-kalumyiti tina CSS kasabelih, zayhan tina kasabelih yamalyilu ku zuma misaungayay teked a setin.",
+       "customjsprotected": "kisu sa inayi’ ku tungus mikawaway-kalumyiti tina JavaScript kasabelih, zayhan tina kasabelih yamalyilu tu zuma misaungayay nu teked a setin.",
        "mycustomcssprotected": "inayi’ tungus mikawaway-kalumyiti tina CSS kasabelih.",
        "mycustomjsprotected": "inayi’ tungus kisu mikawaway-kalumyiti tina JavaScript kasabelih.",
        "myprivateinfoprotected": "inayi’ tungus kisu mikawaway-kalumyiti cesyun nu misu.",
        "virus-badscanner": "mungangaw setin: caay kapulitaimelang-walak sekyin cengse: <em>$1</em>",
        "virus-scanfailed": "sekyin mungangaw (kodo $1)",
        "virus-unknownscanner": "caay kapulita tena’ tu milepi’ay:",
+       "logouttext": "<strong>matahkal tu kisu ayza. </strong>\n\npiazihen, izaw ku kasabelih matuling paazih patalabu a setyitase, katukuh kisu palawpes saazihay-sakaluk kabilil-miala.",
        "cannotlogoutnow-text": "anu pisaungay $1 la’cus katahkal.",
        "welcomeuser": "manamuh tu tayniay, $1!",
        "yourname": "misaungayay a kalungangan:",
        "userlogin-yourname": "misaungayay a kalungangan",
        "userlogin-yourname-ph": "pisulitan tu nu misay a misaungayay a kalungangan",
+       "createacct-another-username-ph": "pisulit misaungayay a kalungangan",
        "yourpassword": "mima:",
        "userlogin-yourpassword": "mima",
        "userlogin-yourpassword-ph": "suliten nu misuay a mima",
        "yourpasswordagain": "pisuliten tu mima cacay aca:",
        "createacct-yourpasswordagain": "malucekay tu mima",
        "createacct-yourpasswordagain-ph": "pisulitan ku mima kinacacay aca",
-       "userlogin-remembermypassword": "pabalucu'en patalabu setyitase nu maku",
+       "userlogin-remembermypassword": "pabalucuen patalabu setyitase nu maku",
        "userlogin-signwithsecure": "pisaungay zahkez misiket tu calay-zazan(wanglu)",
        "cannotlogin-title": "la’cus patalabu",
        "cannotlogin-text": "la’cus patalabu.",
        "password-change-forbidden": "amana kisu misumad tina Wiki a mima.",
        "externaldberror": "uyniyan hakay u nanu kalunasulitan-sulu sawantan  mungangaw, saca caay mahasa kisu mitadas ihekalay a canghaw.",
        "login": "patalabu",
+       "login-security": "sawantanen tu ID nu misu",
        "nav-login-createaccount": "patalabu / panganganen ku canghaw",
        "logout": "katahkal",
+       "userlogout": "katahkal",
        "notloggedin": "caay henay patalabu",
        "userlogin-noaccount": "inayi’ ku canghaw kisu haw?",
        "userlogin-joinproject": "micunus {{SITENAME}}",
        "createaccount": "panganganen ku canghaw",
        "userlogin-resetpassword-link": "maliyuh ku mima kisu haw?",
        "userlogin-helplink2": "patalabu miedap",
+       "userlogin-reauth": "kanca kisu patalabu aca amisawantanen kisu ku {{GENDER:$1|$1}}.",
        "userlogin-createanother": "patizeng tu zumaay canghaw",
        "createacct-emailrequired": "imyiyo(email) puenengan",
        "createacct-emailoptional": "imyiyo(email) tigami (u pili’ay sasulitan)",
        "loginsuccesstitle": "patalabutu",
        "nouserspecified": "kanca matuzu’ay cacay misaungayay a kalungangan kisu.",
        "login-userblocked": "tina misaungayay mapalangat tuway, caay mahasa patalabu tuway.",
+       "wrongpassword": "nasulitan nu misu a mima mungangaw, pitaneng aca.",
+       "wrongpasswordempty": "nasuliten a mima inayi’.\npitaneng aca.",
+       "passwordtooshort": "numisu a mima sainayi’ay maydih {{PLURAL:$1|$1 tatebanan nu nisulitan}}",
+       "passwordtoolong": "mima la’cus matabesiw {{PLURAL:$1|$1 tatebanan nu nisulitan}}.",
        "passwordtoopopular": "amana pisaungay sawsawni maazihay a mima,pipili’en pisaungay uzumaay a mima.",
        "password-name-match": "mima nu misu la’cus kalecad tu misaungayay a kalungangan",
        "password-login-forbidden": "tina misaungayay a kalungangan  atu mima masatezep pisaungay tuway.",
        "passwordremindertitle": "{{SITENAME}} a baluhay nanunuz mima",
        "noemail": "misaungayay \"$1\" inayi’ imyiyo(email) puenengan nasulitan.",
        "noemailcreate": "maydih kisu nipabeli cacay kapahay a imyiyo(email) puenengan.",
+       "passwordsent": "misaungayay \"$1\" a baluhay mima mapatahkal tu i saayaway a imyiyo(email) puenengan, kapihalhal henay maala tu tigami miliyaw patalabu aca",
+       "blocked-mailpassword": "numisu a IP puenengan malangat tu caay kahasa mikawaway-kalumyiti, satezep tu namakay tini IP puenengan a mima panukasan sasahicaan a mitena’ patahtah.",
        "mailerror": "pabahel imyiyo(email) mungangaw: $1",
        "emailauthenticated": "imyiyo(email) puenengan nu misu malucek tu i $2 $3.",
+       "emailnotauthenticated": "imyiyo(email) puenengan mu misu caay henay malucek, cayhenay patigami kisu isasa’ay a sasahicaan a imyiyo(email).",
        "noemailprefs": "i numisuay a setin tu kanamuhan misetin imyiyo(email) puenengan, kya kapah kisu pisaungay uyniyay sasahicaan.",
        "emailconfirmlink": "malucekay tu imyiyo(email) puenengan",
+       "invalidemailaddress": "la’cus mizawis tu caay tatenga’ay a kese tu ku imyiyo(email) puenengan, kapisuzu tu tatenga’ay imyiyo(email) puenengan a kese saca awas han ku nisulitan i langat-pisinga’an.",
        "cannotchangeemail": "tina Wiki satezep misumad canghaw a imyiyo(email) puenengan.",
        "emaildisabled": "tina calay-kakacawan(wangcan) caay kakapah pabahel imyiyo(email).",
        "accountcreated": "panganganen tu ku canghaw",
        "login-abort-generic": "patalabu kisu mungangaw - satezep tuway",
        "login-migrated-generic": "u canghaw nu misu maliyas tu, zumasatu tina Wiki nu misu misaungayay a kalungangan inayi’ tu.",
        "loginlanguagelabel": "kamu: $1",
+       "suspicious-userlogout": "katahkal a pilunguc nu misu kakakaiyan, hakay u numisu pisaungay izaw ku munday nu saazihay-sakaluk saca kabilil-miala kutay sefu-kikay",
+       "createacct-another-realname-tip": "tatenga’ay a ngangan ku mapili’ay a sasulitan pisinga’an.\namahica kisu nipabelitatenga’ay a ngangan, apasaungay i misaungayay paanin pangangan.",
        "pt-login": "patalabu",
        "pt-login-button": "patalabu",
        "pt-login-continue-button": "palalid patalabu",
        "oldpassword": "malumannay a mima",
        "newpassword": "baluhay a mima:",
        "retypenew": "miliyaw suliten baluhay a mima:",
+       "resetpass_submit": "setin mima atu patalabu",
        "changepassword-success": "mima nu misu masumad tu!",
        "changepassword-throttled": "capi demiad mitanam mangasiw patalabu.\npihalhal henay $1 pitaneng aca.",
        "botpasswords": "kikay-tademaw a mima",
        "botpasswords-bad-appid": "kikay-tademaw kalungangan \"$1\" la’cus.",
        "botpasswords-insert-failed": "micunusen kikay-tademaw kalungangan \"$1\" mungnhaw, pacunusen tu haw?",
        "botpasswords-update-failed": "misabaluh kikay-tademaw kalungangan \"$1\" mungnhaw, masipu tu haw?",
+       "botpasswords-created-title": "patizeng tu ku kikay-tademaw mima",
+       "botpasswords-created-body": "pabeli misaungayay \"$2\" a kikay-tademaw \"$1\" a kikay-tademaw mima mapatizeng tuway.",
+       "botpasswords-updated-title": "masabaluh kikay-tademaw mima",
+       "botpasswords-updated-body": "pabeli misaungayay \"$2\" a kikay-tademaw \"$1\" a kikay-tademaw mima masabaluh tuway.",
+       "botpasswords-deleted-title": "masipu tu kikay-tademaw mima",
+       "botpasswords-deleted-body": "pabeli misaungayay \"$2\" a kikay-tademaw \"$1\" a kikay-tademaw mima masipu tuway.",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider la’cus pisaungay.",
        "botpasswords-restriction-failed": "kikay-tademaw a mima kelec makai tu ayzaay a patalabu.",
        "botpasswords-invalid-name": "matuzu’ay a misaungayay a kalungangan caay yamalyilu kikay-tademaw mima maliyasay a tatebanan nu nisulitan  (\"$1\")",
        "botpasswords-not-exist": "misaungayay \"$1\" zumasatu inayi’ kalungangan ku \"$2\" a kikay-tademaw mima.",
        "resetpass-no-info": "kanca kisu patalabu kyu taneng kakelulan kisu misuped-miala tina kasabelih.",
        "resetpass-submit-loggedin": "misumad tu mima",
        "resetpass-submit-cancel": "palawpes",
+       "resetpass-wrong-oldpass": "la’cusay a pananebul sa saca ayza izaway a mima.\nhakay kisu masumad tu ku mima, saca milunguctu tu cacay baluhay kananebulan a mima.",
        "resetpass-recycled": "piliyaw patizeng mima nu misu caay kalecaday nu ayzaayㄡ",
+       "resetpass-temp-emailed": "pisaungay kisu mananebuh imyiyo(email) pabahelan i kodo patalabu.\namapahezek patalabu, kanca kisu misetin tu cacay baluhay a mima itini:",
        "resetpass-temp-password": "nanunuz a mima:",
        "resetpass-abort-generic": "sacunus satezip tu misumad  mima a saungay.",
        "resetpass-expired": "mima nu misu mangasiw tu. pisetin baluhayay a mima amipatalabu.",
        "passwordreset": "miliyaw miteka setin mima",
        "passwordreset-text-one": "pahezek tina aazihan cudad, micaliw tu imyiyo(email) pabahel nanuzu a mima sapaliyaw misetin mima nu misu.",
+       "passwordreset-text-many": "{{PLURAL:$1|pihezek tina aazihan cudad amicaliaw imyiyo(email) milayap nanunuz a mima.}}",
        "passwordreset-disabled": "tina Wiki mapasatezep tu miliyaw patizeng tu mima.",
        "passwordreset-emaildisabled": "uyni Wiki mapasatezep imyiyo(email) sasahicaan tuway.",
        "passwordreset-username": "misaungayay a kalungangan:",
        "passwordreset-domain": "calay-subal(wangyi) kalungangan:",
        "passwordreset-email": "imyiyo(email) puenengan:",
        "passwordreset-emailtitle": "i {{SITENAME}} a canghaw pulita kalunasulitan",
+       "passwordreset-emailtext-ip": "caay kapulita a tademaw (hakay kisu i, namakay IP puenengan $1) milunguc miliyaw patizeng i {{SITENAME}} ($4) a mima, isasa’ay sa ku mahizaay tina imyiyo(email) puenengan a misaungayay {{PLURAL:$3|canghaw}}:\n\n$2\n\n{{PLURAL:$3|tina nanunuzay a mima|uyniyay nanunuzay a mima}} nay ilabu’ nu {{PLURAL:$5|cacay a demiad|$5 a demiad}} kakatukuhan, kanca kisu tansul patalabu atu misaimed baluhayay a mima.\n\namahica caay kisu milunguc miliyaw patizeng mima, saca mazateng tu kisu ku mima, caay henay amisumad, kapah kisu sekipo tina palatuh zumasatu palalid pisaungay mahizaay saayaway mima nu misu.",
+       "passwordreset-emailelement": "misaungayay a kalungangan:\n$1\n\nnanunuzay a mima:\n$2",
+       "passwordreset-emailsentusername": "amahica tina tatenga’ ku misaungayay tu kalungangan masulitay imyiyo(email) puenengan nu misu, apatahkal miliyaw patizeng tu mima a tigami kisu.",
        "passwordreset-nocaller": "manakanca nipabeli caller",
        "passwordreset-nosuchcaller": "Caller inayi’: $1",
        "passwordreset-ignored": "caay pilisimet miliyaw patizeng mima. hakay caay henay misetin nipabeliay?",
        "passwordreset-invalidemail": "la’cusay a imyiyo(email) puenengan",
        "passwordreset-nodata": "caay nipabeli misaungayay a kalungangan saca ku imyiyo(email) puenengan",
        "changeemail": "misumad saca misipu imyiyo(email) puenengan",
+       "changeemail-header": "pisuliten tina aazihan cudad amisumad imyiyo(email) puenengan nu misu, amahica misipu kisu mumisuay a canghaw sa masasiketay a sacahamin imyiyo(email) puenengan, akapisulit i imyiyo(email) puenengan langat-pisinga’an.",
        "changeemail-no-info": "kanca kisu patalabu kyu taneng kakelulan kisu misuped-miala tina kasabelih.",
        "changeemail-oldemail": "ayzaay a imyiyo(email) puengengan:",
        "changeemail-newemail": "baluhay imyiyo(email) puenengan:",
        "changeemail-submit": "misumad imyiyo(email)",
        "changeemail-nochange": "pisulitan caay kalecaday baluhay imyiyo(email) puenengan.",
        "resettokens": "miliyaw patizeng sabuhat a mima",
-       "resettokens-no-tokens": "inayi’ ku miliyaw tu setinay a mima-sacukcuk.",
+       "resettokens-no-tokens": "inayi’ ku miliyaw tu setinay a mima-sabuhat.",
        "resettokens-tokens": "sabuhat:",
        "resettokens-token-label": "$1 (ayza sa ku $2)",
-       "resettokens-resetbutton": "miliyaw patizeng mapili’ay a sabuhat-sacukcuk",
+       "resettokens-watchlist-token": "sapiaca tu aazihan [[Special:Watchlist|miazihay a piazihan tu sulit]] Atom/RSS mima-sabuhat",
+       "resettokens-done": "maliyaw tu patizeng mima-sabuhat",
+       "resettokens-resetbutton": "miliyaw patizeng mapili’ay a mima-sabuhat",
        "bold_sample": "kibetulay a sulit",
        "bold_tip": "kibetulay a sulit",
        "italic_sample": "tukenihay nisulit",
        "preview": "pataayaway miazih",
        "showpreview": "paazih pataayaway miazih",
        "showdiff": "paazih ku masumaday",
+       "blankarticle": "<strong> patalaw:</strong> imahini kisu patizengay a kasabelih ku nayi’ ku cacanay.\namahica kisu mipecec \"$1\", apatizeng inayi’ amahicahica lacul a kasabelih.",
        "anoneditwarning": "<strong>patalaw:</strong>caay henay kisu patalabu. anu miteka mikawaway tu kalumyiti, IP adolyise nu misu ama mitilak. anu kisu <strong>[$1  patalabu ]</strong> acasa <strong>[$2 panganganen ku canghaw ]</strong>, misuay mikawaway tu kalumyiti payni tu nu misuay misaungayay kalungangan sacuzu’ ,izaway zuma kapahayay.",
+       "anonpreviewwarning": "<em>caay henay patalabu kisu. misuped kasabelih a mahiya ku nu misu i IP puenengan sulit tu nakawawan tina kasabelih ilabu’ nu mikawaway-kalumyiti nazipa’an. </em>",
+       "missingsummary": "<strong> pacekil:</strong>caay henay kisu suliten  mikawaway-kalumyiti pecu’ nu lacul.\namahica kisu amisapecec aca \"$1\" kinacacay, atakud han pecu’ nu lacul kakelul misuped mikawaway-kalumyiti nu misu.",
        "missingcommenttext": "pisuliten buhci tu kamu isasa’.",
+       "summary-preview": "mikawaway-kalumyiti pecu’ nu lacul pataayaway miazih:",
        "subject-preview": "pataayaway miazih  taazihan tu kawaw:",
        "previewerrortext": "mitanam pataayaway miazih sumad nu misu sa mungangaw.",
+       "blockedtitle": "misaungayay malangat tuway",
+       "blockedtext": "<strong> misaungayay a kalungangan nu misu saca IP puenengan malangat tuway.</strong>\n\nmalangat tu kisu nay $1,\nmahicaay ku <em>$2</em>.\n\n*  milangat miteka a tuki :$8\n*  milangat pahezek a tuki :$6\n*  mahizaay malangat a tukusay:$7\n\nkapah kisu patakus $1 saca zumaay a [[{{MediaWiki:Grouppage-sysop}}|mikuwanay]] matatengil malangatay a mahizaay a munday.\namahica kisu i [[Special:Preferences|setin tu kanamuhan]] misetin tu cacay kapahay a imyiyo(email) puenengan, zumasatu caay henay malangat tigami sasahicaan, kya taneng kisu micaliw \" imyiyo(Email) patakus tina misaungayay \" a sasahicaan apatakus mahizaay mikuwanay.\nIP puenengan nu misu ayzasa ku $3, tina malangatay a ID ku #$5.\nanu palita kisu sa, pakeliten ipabaway a pulita kalunasulitan.",
+       "autoblockedtext": "zayhan nasawniay zuma a cacay misaungayay malangat nu $1, IP puenengan nu misu lunuk  malangat tuway.\nkya mahicaay saku:\n\n:<em>$2</em>\n\n*  milangat miteka a tuki :$8\n*  milangat pahezek a tuki :$6\n*  mahizaay malangat a tusukay:$7\n\nkapah kisu patakus $1 saca zumaay a [[{{MediaWiki:Grouppage-sysop}}|mikuwanay]] matatengil milangatay a mahizaay munday.\namahica kisu i [[Special:Preferences|setin tu kanamuhan]] misetin tu cacay silaheciay a imyiyo(email) puenengan, zumasatu caay henay malangat tigami sasahicaan, kya taneng kisu micaliw \" imyiyo(Email) patakus tina misaungayay \" a sasahicaan apatakus mahizaay mikuwanay. \nIP puenengan nu misu ayzasa ku $3, tina malangatay a ID ku #$5.\nanu palita kisu sa, pakeliten ipabaway a pulita kalunasulitan",
        "blockednoreason": "caay pasaheci tu mahicaay",
        "whitelistedittext": "piayawen $1 sakapah mikawaway-kalumyiti kasabelih.",
        "nosuchsectiontitle": "caykatepa tu tusil",
+       "nosuchsectiontext": "mitanam kisu mikawaway-kalumyiti a tusil inayi’. hakay miciwsace kasabelih kisu sa malimad saca masipu.",
        "loginreqtitle": "maydih patalabu",
        "loginreqlink": "patalabu",
+       "loginreqpagetext": "$1 iayaw kyu kapah miciwsace zuma kasabelih.",
        "accmailtitle": "mima patigamitu",
        "newarticle": "(baluhay)",
        "newarticletext": "masasiket kisu tu nayi’ay tu kasabelih.\namipatizeng tina kasabelih, kaisasa mikawaway tu kalumyiti atilad misulit ku lacul (kahica nu kawaw piazih tu tatenga’ay [$1 misaungay a buhci tu kamu  kasabelih ]).\namahica caay padeteng tayza tina kasabelih kisu haw, pihaymaw sapecec saazihay a <strong>tatiku</strong> pipenecan.",
+       "anontalkpagetext": "<em>tina matatengil kasabelih apabeli caay henay panganganen ku canghaw a paceba panganganay a misaungayay pisaungay</em>\nsisa kanca kami pisaungay IP puenengan ataazihan kika, uyzasa malecaday a IP puenengan hakay nay katuuday caykalecaday a misaungayay kapulungan.\namahica kisu ku paceba panganganay a misaungayay zumasatu kunizateng buhci tu kamu a lacul inayi’ mahizaay kisu, [[Special:CreateAccount|patizeng baluhay canghaw]] saca [[Special:UserLogin|patalabu]] miliyas masiwala tu zuma paceba panganganay a misaungayay.",
        "noarticletext": "kina kasabelih inayi’ lacul ayza,kapah tu kisu i zumaay a kasabelih [[Special:Search/{{PAGENAME}}| mikilim kina kasabelih pyawti ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  mikilim sasuala nasulitan nakawawan ] caay sa[{{fullurl:{{FULLPAGENAME}}|action=edit}} patizeng kina kasabelih ]</span>.",
        "noarticletext-nopermission": "tina kasabelih ayza inayi’ lacul,\nkapah tu kisu i zuma kasabelih [[Special:Search/{{PAGENAME}}| kilim kina kasabelih pyawti ]],acasa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  kilim sasuala nasulitan nakawawan ]</span>,uyzasa  inayi’  ku tungus patizeng tina kasabelih.",
-       "userpage-userdoesnotexist-view": "misaungayay canghaw \"$1\" caay henay pangangan.",
+       "userpage-userdoesnotexist": "misaungayay canghaw \"$1\" caay henay  pangangan。\namahica maydih kisu patizeng/mikawaway-kalumyiti tina a kasabelih, kaliayaw mikinsa tatenga’ay tu hakiza.",
+       "userpage-userdoesnotexist-view": "misaungayay canghaw \"$1\" caay henay mapangangan.",
        "blocked-notice-logextract": "tina misaungayay malangat tu ayza.\nisasa’ay ku capi demiad malangatay a nasulitan apabeli miazih tu tatenga’ay:",
+       "clearyourcache": "<strong> azihen:</strong>izikuzay misuped kisu kanca palawpes saazihay-sakaluk kabilil-miala ngay maazih sabaluhay sumad.\n* <strong>Firefox / Safari:</strong> pecec <em>Shift</em> sa sapecec <em> miliyaw lisimeten </em>, saca pecec <em>Ctrl-F5</em> saca <em>Ctrl-R</em> (Mac sa ku <em>⌘-R</em>) \n* <strong>Google Chrome:</strong> pecec <em>Ctrl-Shift-R</em> (Mac sa ku <em>⌘-Shift-R</em>) \n* <strong>Internet Explorer:</strong> pecec <em>Ctrl</em> sa sapecec <em> miliyaw lisimeten </em>, saca pecec <em>Ctrl-F5</em>\n* <strong>Opera:</strong> taayaw <em> pili’  →  setin </em> (i Mac ku <em>Opera →  setin tu kanamuhan </em>) nazikuzan sa katukuh aca <em> midimut kasikazan & kazahkezan → palawpes azih  kalunasulitan → kabilil-miala tuway a zunga atu tangan </em>",
+       "usercsspreview": "<strong>mipataayaway miazih tunu misu misaungayay CSS kisu ayza, CSS caay henay misuped!</strong>",
+       "userjspreview": "strong>imhini pataayaway miazih kisu numisuay misaungayay a JavaScript.\nJavaScript caay henay misuped!</strong>",
+       "sitecsspreview": "<strong>imhini kisu ayza i pataayaway miazih tina CSS, CSS caay henay suped!</strong>",
+       "sitejspreview": "<strong> mipataayaway miazih tina JavaScript kisu ayza, JavaScript caay henay misuped!</strong>",
        "updated": "(misabaluh tuway)",
        "note": "<strong>azihen:</strong>",
+       "previewnote": "<strong>imahini kisu mapataayaway miazih, misu a pisumad caay henay kasinga’</strong>",
        "continue-editing": "taayaw mikawaway-kalumyiti nikatatapal",
+       "previewconflict": "tina pataayaway miazih paazih kisu ipabaway a sulit mikawaway-kalumyiti nikatatapal a lacul masuped tuway amapaazihay aheci.",
+       "session_fail_preview": "<strong>ahicanaca! u nanu tina patalabu a tuki matahkal kalunasulitan mahedaw, la’cus kami lisimet nasanga’ mikawaway-kalumyiti.</strong>\n\n<em> {{SITENAME}} mawawah tu saayaway HTML muse, sisa tina pataayaway miazih kya zunga caay paazih amiliyas JavaScript madebung.</em>\n\n<strong>anu maydih kisu tatenga’ taneng misanga’ tina mikawaway-kalumyiti, pitaneng aca.</strong>\namahica caay malahci henay, nazikuz tu [[Special:UserLogout|katahkal]] piliyaw miteka patalabu, zumasatu pilucek saazihay-sakaluk setin ku \"mahasa tina calay-subal(wangyi) a cookie\".",
        "editing": "mikawaway tu kalumyiti  $1 ayza",
        "creating": "patizeng ayza $1",
        "editingsection": "mikawaway tu kalumyiti ayza $1 (tusil)",
        "editingcomment": "imahini mikawaway-kalumyiti $1 (baluhay tusil)",
+       "editconflict": "mikawaway-kalumyiti sasula’cus: $1",
        "yourtext": "numisuay a sulit",
        "storedversion": "misupedtu tu sumad",
+       "editingold": "<strong>patalaw: imahini kisu mikawaway-kalumyiti kasabelih maluman a sumad baziyong.</strong>\namahica kisu suped, itini masumad tu haw masumaday a amahicahica a lacul amahedaw.",
        "yourdiff": "sasizuma",
        "editpage-cannot-use-custom-model": "tina kasabelih a lacul tatudungen-misanga’ amana pasumad.",
+       "semiprotectedpagewarning": "<strong> azihen:</strong>tina kasabelih madiput tuway, mapanganganay a misaungayay dada’ kapah mikawaway-kalumyiti.\nisasa’ sa, pabeli capi demiad a nasulitan nazipa’an kya kapah miazih tu tatenga’ay",
        "templatesused": "uyni kasabelih pisaungay tu isasaay {{PLURAL:$1|taazihan mitudung}}:",
        "templatesusedpreview": "tina pataayaway miazih pisaungay kya isasa’ay a {{PLURAL:$1|taazihan mitudung}}",
        "templatesusedsection": "tina belih pisaungay tu isasa’ay a {{PLURAL:$1|taazihan mitudung}}:",
        "template-semiprotected": "(madiputay a kasabelih - satizep mikawaway tu kalumyiti)",
        "hiddencategories": "kina kasabelih tungusay nu {{PLURAL:$1|1 midimut kakuniza }}mamikawaw:",
        "nocreate-loggedin": "inayi’ tungus kisu patizeng  baluhayay a kasabelih.",
+       "sectioneditnotsupported-title": "caay pidama mikawaway-kalumyiti tusil",
        "sectioneditnotsupported-text": "tina kasabelih caay midama mikawaway-kalumyiti tusil.",
        "permissionserrors": "mungangaw ku tungus",
+       "permissionserrorstext": "makay isasa’ay {{PLURAL:$1|mahicaay}}, inayi’ ku tungus kisu miteka ayzaay pisaungay",
        "permissionserrorstext-withaction": "namakay isasaay {{PLURAL:$1|mahicaay}}, inayi’ kisu situngus miteka $2 miteka tuway misaungay:",
+       "recreate-moveddeleted-warn": "<strong> patalaw: imahini kisu miliyaw patizeng nasawniay masipuay tu kasabelih. </strong>\n\nkanca kisu mizateng palalid mikawaway-kalumyiti tina bilih haw?\nitini nipabeli masipu atu milimad nasulitan nazipa’an sapiazih tu tatenga’ay",
        "moveddeleted-notice": "kina kasabelih masipu tu.\nisasa nipabeli kina kasabelihay a masipu atu milimad nasulitan nakawawan, taneng miazih tu tatenga’ay.",
+       "moveddeleted-notice-recent": "ahicanaca, tina a kasabelih ayaw sahenay masipu tu (caay sungaliw 24 a tuki).\nisasa’ sa nipabeli tina kasabelih a masipu atu milimad nasulitan nazipa’an sapihica miazih tu tatenga’ay.",
        "log-fulllog": "ciwsace leku nasulitan-nazipa’an",
        "edit-hook-aborted": "mikawaway-kalumyiti masatezep tuway nay Hook.\nzumasatu caay patukil inayi’ amahicahica buhci tu kamu.",
+       "edit-gone-missing": "la’cus misabaluh kasabelih.\nkya kasabelih hakay masipu tuway.",
        "edit-conflict": "mikawaway-kalumyiti sasula’cus",
        "edit-no-change": "izay kisu caay misumad amahicahica tu sulit, masekipo tina mikawaway-kalumyiti tuway.",
        "postedit-confirmation-created": "mapatizeng tu kasabelih.",
        "postedit-confirmation-restored": "mapatiku tu kasabelih.",
        "postedit-confirmation-saved": "masuped tu mikawaway-kalumyiti nu misu.",
        "defaultmessagetext": "pataayaw tu kawaw palatuh  a sulit",
+       "content-failed-to-parse": "tingalaw $2 kese a $1 kamu-sakilul a lacul mungangaw: $3",
        "invalid-content-data": "lacul kalunasulitan la’cus",
        "content-not-allowed-here": "kasabelih [[$2]] caay mahasa pisaungay \"$1\" lacul nu kamu-sakilul",
+       "editpage-invalidcontentmodel-title": "caay pidama tu lacul nu tatudungen misanga’",
        "editpage-invalidcontentmodel-text": "caay kamidama lacul tatudungen-misanga’ \"$1\".",
+       "editpage-notsupportedcontentformat-title": "caay pidama tuyni a lacul nu kese",
        "editpage-notsupportedcontentformat-text": "lacul kamu-sakilul $2 caay midama pisaungay $1 kese a lacul.",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "sulit a dada’",
        "deprecated-self-close-category": "pisaungay la’cus Self-closed HTML aazihen-paya a kasabelih",
        "duplicate-args-category": "anu taazihan-mitudung muawaw haw pisaungay misaliyaway a aazihen-sulyang a kasabelih",
        "expensive-parserfunction-category": "pisaungay sayadah eluc sisetyimo katahkalan nu kalisiw a mapulita kasabelih",
+       "post-expand-template-inclusion-warning": "<strong>patalaw:</strong> nicaliwan taazihan mitudung zikuz tabaki adidi’ matabesiw ku pikelec. uzuma taazihan mitudung lacul a caay papisaungay.",
        "post-expand-template-inclusion-category": "nicaliwan taazihan-mitudung mangasiw kelec nu kasabelih",
-       "post-expand-template-argument-category": "taazihan-mitudung aazihen a sulyang izaw layad masekipoay a kasabelih",
+       "post-expand-template-argument-category": "taazihan-mitudung aazihen-sulyang izaw layad masekipoay a kasabelih",
        "parser-template-loop-warning": "masedap taazihan-mitudung musaliyut: [[$1]]",
        "template-loop-category": "sitatutungay masaliyut a kasabelih",
        "template-loop-category-desc": "kasabelih yamalyilumaazihan masaliyut, mahizatuay niza miawaw nizaay a maazihan.",
        "parser-unstrip-loop-warning": "masedap tu Unstrip masaliyut.",
        "parser-unstrip-recursion-limit": "Unstrip musaliyuliyud mangasiw tu kelec ($1)",
        "converter-manual-rule-error": "imahini palima-saungay kamu miliyaw likec masedap tu mungangaw",
+       "undo-success": "tina mikawaway-kalumyiti kapah tu mapatiku.\nkapikinsa tu zikuz sasutili’ay sapat nu sulit, malucekay tu ukakaiyan kaidihan isu patiku, satu suped tu zikuz misumad tu pahezek mikawaway-kalumyiti patiku.",
        "undo-failure": "nay mikawaway-kalumyiti a sumad izaw sasula’cus,tina mikawaway-kalumyiti caay patiku.",
        "undo-norev": "uyni mikawaway-kalumyiti inayi’ saca masipu tuway, la’cus patiku",
        "undo-nochange": "tina mikawaway-kalumyiti mapatiku tuway.",
        "next": "zikuzan a cacay",
        "last": "ayaway",
        "page_last": "sazikuzay a kasabelih",
+       "histlegend": "sasutili’ mapili’ ay a baziyong sasizuma: mipili’ amisasutili’ masumad nu ayaway baziyong a cacay-pili’-atilad atu sapecec pututay a pipenecan miteka sasutili’.<br />\ntatebanan nu nisulitan buhci tu kamu: <strong>({{int:cur}})</strong> = pisasutili’ sefu-kikayluhay sumad  baziyong, <strong>({{int:last}})</strong> = sasutili’ tu masumad nu ayaway baziyong, <strong>{{int:minoreditletter}}</strong> = mikilulay masumad nu ayaway.",
        "history-fieldset-title": "mikilim masumad nu ayaway",
        "history-show-deleted": "paazih a cacay ku masipuay tu masumad",
        "histfirst": "sakasumamadan",
        "histlast": "sabaluhay",
+       "historysize": "({{PLURAL:$1|1 wyiyincu}})",
        "historyempty": "(inayi’)",
        "history-feed-title": "masumad nu ayaway a nazipa’an",
        "history-feed-description": "tina Wiki tina kasabelih nu masumaday a nazipa’an",
        "rev-deleted-comment": "(masipu tu mikawaway-kalumyiti  pecu’ nu lacul)",
        "rev-deleted-user": "(misipu misaungayay a kalungangan tuway)",
        "rev-deleted-event": "(masipu tu nasulitan-nazipa’an nu paazih tu sulit)",
+       "rev-deleted-user-contribs": "[misaungayay a kalungangan saca IP puenengan masipu tuway - madimut paanin piazihan-tu-sulit a mikawaway-kalumyiti]",
+       "rev-deleted-no-diff": "zayhan kasabelih u cacay masumad nu ayaway mapa <strong>masipu</strong>, la’cus kisu miciwsace tu kasasizuma.",
        "rev-delundel": "misumad ku maazihay",
        "rev-showdeleted": "paazih",
        "revisiondelete": "masipu/palawpes misipu masumad nu ayaway",
+       "revdelete-nooldid-title": "la’cusay a pamutekan masumad nu ayaway",
+       "revdelete-nooldid-text": "inayi’ matuzu’ay kisu amahicahica tu amisaungay tina sasahicaan pamutekan masumad nu ayaway nu ayaway, saca  matuzu’ay sumad inayi’ay, saca kisu mitanam midimut ayza a sumad",
        "revdelete-no-file": "matuzu’ay a tangan inayi’ tu.",
        "revdelete-show-file-submit": "hang",
+       "revdelete-selected-text": "mapili’ tuway [[:$2]] tebanay{{PLURAL:$1|cacayay|yadahay}} masumad nu ayaway",
+       "revdelete-selected-file": "mapili’ tu [[:$2]] labu’ay {{PLURAL:$1|cacay|yadahay}} tangan baziyong:",
        "logdelete-selected": "mapili’ {{PLURAL:$1|cacay|yadah}} nasulitan nazipa’an saungay nu binawlan.",
        "revdelete-text-text": "masipuay a sumad uyzatu matahkal kasabelih nazipa’an, uyzasa lacul caay mawawah misuped-miala.",
        "revdelete-text-file": "masipuay a tangan baziyong uyzatu matahkal i tangan nazipa’an, uyzasa lacul caay pawawah misuped-miala.",
+       "logdelete-text": "masipuay tu nasulitan a saungay nu binawlan a tahkal henay i nasulitan ilabu’, nika liyad a lacul a caay kawawah paazih tu katuuday misuped-miala.",
+       "revdelete-text-others": "amahica caay misetin uzumaay a sakacucek, zuma mikuwanay izaw tu ku tungus miciwsace atu palawpes masipu midimutay a lacul.",
        "revdelete-legend": "misetin paazih a kelec",
        "revdelete-hide-text": "masumad nu ayaway a sulit",
        "revdelete-hide-image": "midimut lacul nu tangan",
+       "revdelete-hide-name": "midimut pamutekan atu aazihen-sulyang",
        "revdelete-hide-comment": "pecu’ nu lacul mikawaway-kalumyiti",
        "revdelete-hide-user": "mikawaway-kalumyitiay a misaungayay a kalungangan/IP  puenengan",
        "revdelete-hide-restricted": "la’cus paazih kalunasulitan tu mikuwanay atu zuma misaungayay",
        "revdelete-submit": "caedung tu mapili’ay a {{PLURAL:$1|cacay|yadah}} masumad nu ayaway",
        "revdelete-success": "misabaluh masumaday a maazihay.",
        "logdelete-success": "setin nasulitan-nazipa’an a maazihay.",
+       "logdelete-failure": "la’cus misabaluh nasulitan-nazipa’an a paazih setin:\n$1",
        "revdel-restore": "misumad ku maazihay",
        "pagehist": "kasabelih nazipa’an",
        "deletedhist": "masiputu tu nazipa’an",
        "revdelete-hide-current": "midimut i $1 $2 a kasacacay mungangaw: tina ku sumad nuayzaay, amana midimut.",
+       "revdelete-show-no-access": "miciwsace tu $1 $2 a kasacacay mungangaw: tina kasacacay mapasiket tu \"makelec tu\". inayi’ ku tungus kisu misuped-miala..",
+       "revdelete-modify-no-access": "misumad nay $1 $2 kasacacay mungangaw: tina kasacacay masiket tu \"makelec tu\".\ninayi’ ku tungus kisu misuped-miala.",
        "revdelete-modify-missing": "misumad kasacacay ID $1 mungangaw: kalunasulitan-sulu inayi’ kya kalunasulitan",
+       "revdelete-no-change": "<strong>patalaw:</strong> i $1 $2 a kasacacay malunguc tu pisumad paazihay a setin.",
+       "revdelete-concurrent-change": "misumad i $1 $2 kasacacay mungangaway: itisuwan mitanam misumad pataayaw tu setyitase, mapasumad tu.\npikinsa tu nasulitan nazipa’an.",
+       "revdelete-reason-dropdown": "* lalid maazihay a misipuay a mahicaay \n** midebung nisanga’an niza tu tungus a kawaw \n** caay matatungusay a buhci tu kamu saca tekeday a cesyun\n** caay matatungusay a misaungayay a kalungangan  \n** midimut yamalyilu palawacu’ay a cesyun",
        "revdelete-otherreason": "zumaay/nicunusay a mahicaay:",
        "revdelete-reasonotherlist": "zuma a mahicaay",
        "revdelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
        "mergehistory-list": "kapah mikabuay a mikawaway-kalumyiti nazipa’an",
        "mergehistory-go": "paazih kapah mikabuay a mikawaway-kalumyiti",
        "mergehistory-empty": "inayi’ amikabuay a sumad.",
+       "mergehistory-done": "$1 izaw $3 {{PLURAL:$3|baziyong}} masumad nu ayaway makabu tu i [[:$2]]",
        "mergehistory-fail": "la’cus miteka nazipa’an mikabu, piliyaw kinsa kya kasabelih atu tuki aazihen-sulyang",
        "mergehistory-fail-bad-timestamp": "tatukian a suyling la’cus.",
+       "mergehistory-fail-invalid-source": "saangangan kasabelih la’cus.",
+       "mergehistory-fail-invalid-dest": "pamutekan kasabelih la’cus.",
+       "mergehistory-fail-no-change": "nazipa’an mikabu caay henay mikabu amahicahica tu masumad nu ayaway sulit nazipa’an. pisaliyaw kinsa kasabelih atu tukiay aazihen-sulyang.",
        "mergehistory-fail-permission": "mangadis tungus,la’cus mikabu nazipa’an.",
        "mergehistory-fail-self-merge": "malecad ku kalungangan nu saangangan kasabelih atu papatuzu’an kasabelih.",
        "mergehistory-fail-timestamps-overlap": "angangan masumad nu ayaway baziyong misaliyaw, saca i zikuz nu papatuzu’an masumad nu ayaway baziyong sa matahkal.",
-       "mergehistory-fail-toobig": "mangasiw $1 masumad nu ayaway milimadan pabaw-sahezek, la’cus miteka nazipa’an mikabu",
+       "mergehistory-fail-toobig": "mangasiw {{PLURAL:$1|baziyong}} masumad nu ayaway milimaday a pabaw-sahezek, la’cus mikabu nazipa’an.",
        "mergehistory-no-source": "saangangan kasabelih $1 inayi’.",
        "mergehistory-no-destination": "papatuzu’an kasabelih $1 inayi’.",
        "mergehistory-invalid-source": "saangangan kasabelih kanca pisaungay kapahay a satangahan.",
        "history-title": "\"$1\" masumaday a nazipa’an",
        "difference-title": "\"$1\" misumad laeday sasizuma",
        "difference-title-multipage": "kasabelih \"$1\" atu \"$2\" laeday a sasizuma",
+       "difference-multipage": "(kasabelih laeday sasizuma)",
        "lineno": "silsil $1:",
+       "compareselectedversions": "sasutili’ay tu mipili’ sumad",
        "showhideselectedversions": "misumad mapili’ay a masumad nu ayaway a paazihay a setin",
        "editundo": "patiku",
        "diff-empty": "(inayi’ sasizuma)",
        "diff-multi-sameuser": "(malecaday misaungayay {{PLURAL:$1|ilaed izaw ku $1 a sumad}}inayi’ paazih)",
+       "diff-multi-otherusers": "({{PLURAL:$1|cacay ilabu’ay a sumad|$1 ilabu’ay a sumad}} nay {{PLURAL:$2|uzumaay a misaungay|$2 misaungayay}} caay paazih)",
        "searchresults": "heci nu makatepa",
        "searchresults-title": "$1 heci nu makatepa",
        "titlematches": "kasabelih satangah matatungus",
        "nextn": "zikuzan a cacay {{PLURAL:$1|$1}}",
        "prev-page": "ayaway a belih",
        "next-page": "zikuzan a belih",
+       "prevn-title": "nuayaway $1 {{PLURAL:$1|heci}}",
        "nextn-title": "nuzikuzan saka {{PLURAL:$1|a heci}}",
        "shown-title": "paybelih {{PLURAL:$1|$1 ku heci}} paazih",
        "viewprevnext": "ciwsace ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>tina Wiki izawtu kalungangan ku \"[[:$1]]\" a kasabelih.</strong> {{PLURAL:$2|0=|saca piazih tu tatenga’ay zuma heci nu makatepa.}}",
        "searchmenu-new": "<strong> uyni Wiki patizeng ku kasabelih  \"[[:$1]]\"!</strong>{{PLURAL:$2|0=| acasa miazih tu tatenga’ay patalabuay a matepa’ay a heci. |acasa miazih tu tatenga’ay zuma matepa’ay a heci.}}",
        "searchprofile-articles": "lacul kasabelih",
        "searchprofile-images": "kayadah-myiti",
        "searchprofile-everything-tooltip": "kilim saca hamin lacul (yamalyilu sasukamu kasabelih)",
        "searchprofile-advanced-tooltip": "mikilim pakuniza misanga’ pangangananay a salaedan",
        "search-result-size": "$1 ({{PLURAL:$2|$2 ku sulit}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 sakawaway}} ({{PLURAL:$2|$2 sailuc-kasasizuma}}, {{PLURAL:$3|$3 tangan }})",
        "search-redirect": "(miliyaw tazuma namakay $1)",
        "search-section": "(tusil $1)",
        "search-category": "(kakuniza $1)",
+       "search-file-match": "(matatungus tangan lacul)",
        "search-suggest": "u tuzu’ nu misu ku:$1 haw?",
        "search-rewritten": "paazih $1 a heci nu makatepa, balicen mikilim $2ㄡ",
        "search-interwiki-caption": "yaheci namakay kakana-sabana a cwanan",
        "skin-preview": "pataayaway miazih",
        "datedefault": "sulyang nu pataayaw tu kawaw",
        "prefs-labs": "mitanam henay a sasahicaan",
+       "prefs-personal": "misaungayay angangan a kalunasulitan",
        "prefs-rc": "capi a demaiday a sumad",
        "prefs-watchlist": "miazihay a piazihan tu sulit",
        "prefs-editwatchlist": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
        "prefs-editwatchlist-label": "mikawaway-kalumyiti i numisuay  miazihay a piazihan-tu-sulit kasacacay:",
        "prefs-editwatchlist-edit": "ciwsace atu misipu satangahan ilabu nu miazihay a piazihan-tu-sulit",
        "prefs-editwatchlist-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
+       "prefs-editwatchlist-clear": "misipu miazihay a piazihan-tu-sulit nu misu",
        "prefs-watchlist-days": "ilabu nu miazihay a piazihan-tu-sulit paazih a demiad nikayadah:",
        "prefs-watchlist-days-max": "sayadahay $1 {{PLURAL:$1|a demiad}}",
        "prefs-watchlist-edits-max": "makelec nikayadah:1000",
+       "prefs-watchlist-token": "miazihay a piazihan-tu-sulit mima-sabuhat:",
        "prefs-misc": "zuma",
        "prefs-resetpass": "misumad tu mima",
        "prefs-changeemail": "misumad saca misipu imyiyo(email) puenengan",
        "savedrights": "masuped tu {{GENDER:$1|$1}} misaungayay a tungus.",
        "timezonelegend": "tatukian a kakitizaan:",
        "localtime": "itiniay a tuki:",
+       "timezoneuseserverdefault": "pisaungay Wiki pataayaw tu kawaw sulyang($1)",
        "servertime": "sefuci-kikay a tuki:",
        "guesstimezone": "pisaungay saazih sakaluk setin sulyang",
        "timezoneregion-africa": "Afilika",
        "prefs-searchoptions": "kilim",
        "prefs-namespaces": "pangangananay a salaedan",
        "default": "pataayaw tu kawaw",
+       "prefs-files": "tangan",
        "prefs-custom-css": "pakuniza misanga’ CSS",
        "prefs-custom-js": "pakuniza misanga’ JavaScript",
        "prefs-common-css-js": "sacahamin nuhekalan kapulungan a CSS/JavaScript:",
+       "prefs-reset-intro": "kapah kisu misaungay tina kasabelih miliyaw patizeng tunumisu misetin tu kanamuhan mala calay-kakacawan(wangcan) pataayaw sulyang.\ntina pisaungay a la’cus panukasan.",
+       "prefs-emailconfirm-label": "imyiyo(email) malucekay tuway:",
+       "youremail": "imyiyo(email):",
        "username": "{{GENDER:$1|misaungayay a kalungangan}}:",
+       "prefs-memberingroups": "{{GENDER:$2|mikitinay}} {{PLURAL:$1|luyaluy}}:",
        "prefs-registration": "pangangan a demiad:",
        "yourrealname": "tatengaay a ngangan:",
        "yourlanguage": "kamu:",
        "yourvariant": "lacul kamu masazumaay:",
        "prefs-help-variant": "maydih kisu sapaazih tina kakacawan a lacul kalukamu saca sasuala tu sulit nu kamu.",
        "yournick": "baluhay sulitan a ngangan:",
+       "prefs-help-signature": "i sasukamu kasabelih buhci tu kamu kanca pisaungay \"<nowiki>~~~~</nowiki>\" pangangan, bkya tatebanan nu nisulitan amaliyaw tu sulitan nu ngangan atu tuki.",
+       "badsig": "mungangaw a saayaway sulitan a ngangan.\npikinsa HTML aazihen-paya.",
+       "badsiglength": "numisuay a nipangangan tadatanayu’.\nselepen tu $1 ke {{PLURAL:$1|tatebanan nu nisulitan}}",
        "yourgender": "milunguc kisu pisaungay canan a etul muawaw tisuwanan?",
        "gender-unknown": "anu miawaw tisuwan sa, tina zwanti hakay amana misaungay tu etul-sulit.",
        "gender-male": "mikawaway-kalumyiti Wiki kasabelih ciniza",
        "gender-female": "mikawaway-kalumyiti Wiki kasabelih ciniza",
+       "prefs-help-gender": "tina kanamuhan a setin ku mapili’ay langat-pisinga’an.\nsisetyimo apisaungay namapili’ay nu misu a sasakawawen mitakus tisuwan, anu sasukamu tu tawan mapatahkal tisuwan sa apisaungay tu matatungus a ngangan.\ntina cesyun apabinawlan.",
        "email": "imyiyo(email)",
+       "prefs-help-realname": "tatenga’ay ngangan mipili’ tu sasulitan pisinga’an. \nanu pabeli, tatenga’ay ngangan hakay kapah malumisuay nalimaan a sapangangan",
+       "prefs-help-email": "imyiyo(email) puenengan ku mipili’ sasulitan langat-pisinga’an.\nnika i miliyaw patizeng mima sa matineng pisaungay,hakay kisu kalamapawan tu mima.",
        "prefs-help-email-required": "imyiyo(email) puenengan manakanca suliten naca kasacacay.",
        "prefs-info": "anganganay a cesyun",
        "prefs-i18n": "masakitakiay",
        "userrights": "tungus nu misaungayay",
        "userrights-lookup-user": "mipili’ misaungayay",
        "userrights-user-editname": "pisuliti misaungayay a kalungangan:",
+       "editusergroup": "pacumud misaungayay luyaluy",
        "userrights-editusergroup": "mikawaway-kalumyiti {{GENDER:$1|misaungayay}} cyucu",
        "userrights-viewusergroup": "ciwsace {{GENDER:$1|misaungayay}} luyaluy",
        "saveusergroups": "misuped {{GENDER:$1|misaungayay}} luyaluy",
        "userrights-groupsmember": "canan a luyaluy:",
+       "userrights-groupsmember-auto": "litinay yamalyilu luyaluy:",
        "userrights-reason": "mahicaay:",
        "userrights-no-interwiki": "inayi’ tungus kisu mikawaway-kalumyiti zuma Wiki misaungayay a tungus.",
        "userrights-nodatabase": "kalunasulitan-sulu $1 inayi’ saca inayi’ itiniay a angangan-kikay.",
+       "userrights-changeable-col": "kapah kisu ku misumaday tu luyaluy",
        "userrights-unchangeable-col": "amana kisu misumad tu luyaluy",
        "userrights-expiry-current": "kakatekuhan $1",
        "userrights-expiry-none": "inayi’ kakatekuhan",
        "userrights-expiry": "kakatekuhan:",
-       "userrights-expiry-existing": "masetin tu kakatekuhan: $3, $2",
+       "userrights-expiry-existing": "ayzaay a kakatekuhan: $3, $2",
        "userrights-expiry-othertime": "zuma a tatukian:",
        "userrights-invalid-expiry": "luyaluy \"$1\" a kakatekuhan la’cus tu.",
        "userrights-expiry-in-past": "luyaluy \"$1\" a kakatekuhan mangliw tu.",
        "userrights-conflict": "misaungayay tungus misumad sasula’cus! piciwsace atu malucekay sumad nu misu",
        "group": "luyaluy:",
        "group-user": "misaungayay",
+       "group-autoconfirmed": "lunuk malucekay tu misaungayay",
        "group-bot": "kikay a tademaw",
        "group-sysop": "mikuwanay",
        "group-bureaucrat": "situngusay a mikawaway",
        "grouppage-autoconfirmed": "{{ns:project}}: lunuk malucekay tu misaungayay",
        "grouppage-bot": "{{ns:project}}:kikay a tademaw",
        "grouppage-sysop": "{{ns:project}}:mikuwanay",
-       "grouppage-bureaucrat": "{{ns:project}}:situngusay a mikawaway",
+       "grouppage-bureaucrat": "{{ns:project}}:situngusay mikawaw",
        "grouppage-suppress": "{{ns:project}}:misisipay",
        "right-read": "miasip kasabelih",
        "right-edit": "kasabelih mikawaway-kalumyiti",
        "right-createtalk": "patizeng matatengil  kasabelih",
        "right-createaccount": "patizeng baluhay misaungayay a canghaw",
        "right-autocreateaccount": "pisaungay hekalay a misaungayay canghaw lunuk patalabu",
+       "right-minoredit": "sacuzu’ mikawaway-kalumyiti mala mikilulay",
        "right-move": "milimad kasabelih",
        "right-move-subpages": "milimad kasabelih atu sailuc-kasabelih",
        "right-move-rootuserpages": "milimad tu limit misaungayay a kasabelih",
        "right-movefile": "milimad tu tangan",
        "right-suppressredirect": "milimad kasabelih caay i angangan kasabelih kakitizaan patizeng miliyaw patatuzu’ kasabelih",
        "right-upload": "patapabaw tu tangan",
+       "right-reupload": "mitahpu tu izaay ayza a tangan",
        "right-reupload-own": "mitahpu patapabaway a tangan nu misu",
        "right-reupload-shared": "mitahpu kapulungan myiti tangan-sulu i itiniay a tangan",
        "right-upload_by_url": "pisaungay URL patapabaw tangan",
        "right-purge": "amana malucek palawpesen tu calay-kakacawan(wangcan) a kasabelih kalamkam-miala",
        "right-autoconfirmed": "caay pasatezepan nu IP-based a pangangan tumiyac",
+       "right-bot": "a u malunukay ku piazih tu laylay",
        "right-nominornewtalk": "caay paazih matatengil kasabelih  mikilulay mikawaway-kalumyiti a baluhay palatuh pacekil",
        "right-apihighlimits": "pisaungay API takalaway a makelec nikayadah nu palalitemuh tu kawaw",
        "right-writeapi": "pisaungay suliten API",
        "right-hideuser": "milangat misaungayay a kalungangan, amana pabibawlan paazih",
        "right-ipblock-exempt": "sekipo IP milangat, lunuk milangat atu subal milangat kinsa",
        "right-unblockself": "mihulak tu ku langat nu maku",
-       "right-protect": "misumad midiput saselal atu mikawaway-kalumyiti mapatatusul midiputay a kasabelih",
+       "right-protect": "misumad midiput tindud atu mikawaway-kalumyiti mapatatusul midiputay a kasabelih",
+       "right-editprotected": "mikawaway-kalumyiti midiput tu kasalaylay ku \"{{int:protect-level-sysop}}\" a kasabelih.",
        "right-editcontentmodel": "mikawaway-kalumyiti kasabelih a lacul tatudungen-misanga’",
+       "right-editinterface": "mikawaway-kalumyiti misaungayay taypuolayta",
        "right-editusercss": "mikawaway-kalumyiti zuma misaungayay a CSS tangan",
        "right-edituserjs": "mikawaway-kalumyiti zuma misaungayay a JavaScript tangan",
+       "right-editmyusercss": "mikawaway-kalumyiti numisuay a misaungayay CSS tangan",
        "right-editmyuserjs": "mikawaway-kalumyiti numisuay misaungayay a JavaScript tangan",
        "right-viewmywatchlist": "ciwsace misuay a miazihay a piazihan-tu-sulit",
+       "right-editmywatchlist": "mikawaway-kalumyiti misuay miazihay a piazihan tu sulit. azihen, kanahatu inayi’ kuyni tungus, izaw hatizaay pisaungay cunusen ku kasabelih katukuh miazihay a piazihan tu sulit",
        "right-viewmyprivateinfo": "ciwsace numisuay a dimut kalunasulitan (tinaku, imyiyo(email) puenengan atu tatenga’ay a ngangan)",
        "right-editmyoptions": "mikawaway-kalumyiti nucimacimaay a setin tu kanamuhan",
        "right-rollback": "besuchan patiku sazikuzay a misaungayay a mikawaway-kalumyiti kasabelih",
        "right-userrights": "mikawaway-kalumyiti sacahamin  misaungayay a tungus",
        "right-userrights-interwiki": "mikawaway-kalumyiti misaungayay a tungus i zuma a Wiki",
        "right-siteadmin": "pamutek atu mihulak azihen sulu nu nasulitan",
-       "right-override-export-depth": "patahkal ku kasabelih yamalyilu  masasiket lacul, ilabu pabaw-sahezek silima kasaselal",
+       "right-override-export-depth": "patahkal ku kasabelih yamalyilu masasiket lacul, ilabu pabaw-sahezek silima tindud",
        "right-sendemail": "pabahel imyiyo(email) patakus zuma misaungayay",
+       "right-managechangetags": "patizeng zumasat nay nasulitan-sulu (palawpes) mitiyung [[Special:Tags| aazihen-paya]]",
+       "right-applychangetags": "miladay ku cimaay a sumad pulung han caedung [[Special:Tags|aazihen-paya]]",
+       "right-changetags": "micunus atu misipu amahicahica tu ikasasizuma masumad nu ayaway atu nasulitan nazipa’an kasacacayan [[Special:Tags|aazihen-paya]]",
        "right-deletechangetags": "nay kalunasulitan-sulu masipu [[Special:Tags|aazihen-paya]]",
        "grant-generic": "\"$1\" tungus pulung han",
        "grant-group-page-interaction": "kasasukamu tu kasabelih",
        "grant-group-watchlist-interaction": "sakasaungay numisuay misisip a piazihan-tu-sulit",
        "grant-group-email": "pabahel imyiyo(email)",
        "grant-group-high-volume": "mileku sayadah a saungay nu binawlan",
+       "grant-group-customization": "pakuniza misanga’ atu setin tu kanamuhan",
        "grant-group-administration": "mileku tu mikuwanay a kawaw",
        "grant-group-other": "zuma saungay nu binawlan",
        "grant-blockusers": "milangat atu mihulak milangatay a misaungayay",
        "grant-createaccount": "panganganen ku canghaw",
        "grant-createeditmovepage": "patizeng、mikawaway-kalumyiti atu milimad kasabelih",
        "grant-delete": "misipu kasabelih, misumad nu ayaway atu nasulitan-nazipa’an",
+       "grant-editinterface": "mikawaway-kalumyiti MediaWiki pangangananay a salaedan atu misaungayay CSS/JavaScript",
        "grant-editmycssjs": "mikawaway-kalumyiti numisuay a misaungayay CSS/JavaScript",
        "grant-editmyoptions": "mikawaway-kalumyiti misaungayay setin tu kanamuhan nu misu",
        "grant-editmywatchlist": "mikawaway-kalumyiti numisu misisip a piazihan-tu-sulit",
+       "grant-editpage": "mikawaway-kalumyiti izaway kasabelih",
        "grant-editprotected": "mikawaway-kalumyiti madiputay a kasabelih",
        "grant-highvolume": "masibek mikawaway-kalumyiti",
        "grant-oversight": "midimut misaungayay atu satezep paazih masumad nu ayaway",
+       "grant-patrol": "mikibi tu kasabelihay a misumad",
        "grant-privateinfo": "misuped-miala madimut kasikazan a cesyun",
        "grant-protect": "midiput atu palawpes midiput kasabelih",
+       "grant-rollback": "patiku kasabelih a sumad",
        "grant-sendemail": "pabahel imyiyo(email) patakus zuma misaungayay",
        "grant-uploadeditmovefile": "patapabaw, mibalic atu milimad tangan",
        "grant-uploadfile": "patapabaw ku baluhay a tangan",
        "grant-viewrestrictedlogs": "ciwsace makelecay a nasulitan-nazipa’an kasacacay",
        "newuserlogpage": "patizeng misaungayay nasulitan nakawawan",
        "newuserlogpagetext": "uniyan sa u patizeng misaungayay a nasulitan-nazipa’an.",
+       "rightslog": "misaungayay a tungus  nasulitan nazipa’an",
        "rightslogtext": "uyiniyan sa ku misumad  misaungayay tungus a nasulitan-nazipa’an.",
        "action-read": "miasip tina kasabelih",
        "action-edit": "mikawaway-kalumyiti uyni a kasabelih",
        "action-reupload": "mitahpu imahiniay a tangan",
        "action-reupload-shared": "mitahpu tina kapulungan sulu nu tangan a tangan",
        "action-upload_by_url": "pisaungay URL patapabaw tina tangan",
+       "action-writeapi": "pisaungay suliten API",
        "action-delete": "misipu tina kasabelih",
        "action-deleterevision": "misipu tu masumaday nu ayaway",
        "action-deletelogentry": "masipu nasulitan nazipa’an  kasacacay",
        "action-deletedhistory": "ciwsace kasabelih a masipu nazipa’an",
        "action-deletedtext": "ciwsac masipuay a sulit nu masumad ayaway baziyong",
        "action-browsearchive": "mikilim masipuay a kasabelih",
+       "action-undelete": "palawpes masipuay kasabelih",
        "action-suppressrevision": "miciwsace atu patiku midimut masumad nu ayaway",
        "action-suppressionlog": "ciwsace tina caay pabinawlanay nasulitan-nazipa’an",
        "action-block": "miangat tina saungayay a tungus nu mikawaway-kalumyiti",
-       "action-protect": "misumad tina kasabelih a midiput saselal",
+       "action-protect": "misumad tina kasabelih a midiput tindud",
+       "action-rollback": "kalamkam patiku sazikuzay a cacay misaungayay patatapalen zuma a cacay kasabelih a mikawaway-kalumyiti.",
        "action-import": "nay zuma Wiki pacumud kasabelih",
        "action-importupload": "nay tangan patapabaw pacumud kasabelih",
        "action-patrol": "sacuzu’ zumaay a mikawaway-kalumyiti tu tayza-mikibi",
        "recentchanges-legend-heading": "<strong>u tinaku nu kulit:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (piazih tu tatenga’ay [[Special:NewPages| baluhayay a kasabelih]])",
        "recentchanges-submit": "paazih",
+       "rcfilters-activefilters": "pisaungayay a sebseb sakacucek",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|tuki}}",
        "rcfilters-quickfilters": "suped sebseb sakaluk",
        "rcfilters-savedqueries-defaultlabel": "suped sebseb sakaluk",
        "rcfilters-savedqueries-new-name-label": "kalungangan",
        "rcfilters-savedqueries-cancel-label": "palawpes",
        "rcfilters-restore-default-filters": "patiku pataayaw tu kawaw mipili’ay sakacucek",
+       "rcfilters-clear-all-filters": "misipu sacahamin sebseb sakacucek",
        "rcfilters-search-placeholder": "pili’ tu labuay sulit capi misumad (azih saca miteka suzu)",
+       "rcfilters-invalid-filter": "la’cusay a sebseb sakacucek",
        "rcfilters-empty-filter": "inayi’ pisaungay pili’ tu labuay sulit. mapaazih sacahamin a paanin.",
        "rcfilters-filterlist-title": "sakacucek nu misapili’",
        "rcfilters-highlightbutton-title": "pulita sacuzu’ a heci",
        "rcfilters-filter-minor-description": "masacudaday sacuzu’ tuway mikilulay a mikawaway-kalumyiti.",
        "rcfilters-filter-major-label": "caay mikilulay mikawaway-kalumyiti",
        "rcfilters-filter-major-description": "caay silusi mikilulay a mikawaway-kalumyiti.",
+       "rcfilters-filtergroup-watchlist": "mikantuk tu lisetoay kasabelih",
        "rcfilters-filter-watchlist-watched-label": "miazih piazihan tu sulit",
        "rcfilters-filter-watchlist-watched-description": "misumad piazihan-tu-sulit i misisip nu misu.",
        "rcfilters-filter-watchlist-watchednew-label": "nasumadan nu baluhayay misisip a piazihan-tu-sulit",
+       "rcfilters-filter-watchlist-notwatched-label": "caayay ka kantuk a liseto",
        "rcfilters-filtergroup-changetype": "misumad nikalahizaan",
        "rcfilters-filter-pageedits-label": "mikawaway-kalumyiti nu kasabelih",
        "rcfilters-filter-pageedits-description": "nay Wiki lacul, matatengil, kakuniza buhci tu kamu nasangaan a mikawaway-kalumyiti...",
        "rcfilters-filter-categorization-description": "mamicunus i kakuniza saca nay kakuniza masipuay a kasabelih nasulitanㄡ",
        "rcfilters-filter-logactions-label": "saungay a nasulitan nazipa’an",
        "rcfilters-filter-logactions-description": "mikuwan saungay, patizeng canghaw, misipu kasabelih, patapabaw...",
+       "rcfilters-hideminor-conflicts-typeofchange": "izaw ku zumaay misumad nikalahizaan la’cus matuzu’ay mala \"mikilulay\", sisa tina sakacucek nu misapili’ atu isasa’ay a sumad nikalahizaan sakacucek nu misapili’ sasula’cus: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "tina misumad nikalahizaan sakacucek nu misapili’ atu \"mikilulay mikawaway-kalumyiti\" sakacucek nu misapili’sasula’cus, uzuma misumad nikalahizaan la’cus matuzu’ay ku \"mikilulay\"",
        "rcfilters-filtergroup-lastRevision": "sabaluhay masumad",
+       "rcnotefrom": "isasa’ay a {{PLURAL:$5|ku}}nay <strong>$3 $4</strong> a sumad  (sayadah paazih <strong>$1</strong>).",
        "rclistfrom": "paazih nay $3 $2 baluhayay a sumad katukuh ayza",
        "rcshowhideminor": "$1 mikilulay mikawaway-kalumyiti",
        "rcshowhideminor-show": "paazih",
        "minoreditletter": "adidi’",
        "newpageletter": "baluhay",
        "boteditletter": "kikay a tademaw",
+       "number_of_watching_users_pageview": "[$1 imahini miazihay a {{PLURAL:$1|misaungayay}}]",
        "rc_categories": "kakuniza kelec (ku \"|\" palaliyas):",
        "rc_categories_any": "amahicahica tu mipili’ay",
        "rc-change-size-new": "masumadtu sa u $1 {{PLURAL:$1|wyiyincu}}",
        "recentchangeslinked-summary": "uyni kasabelih pasilsil micuzu’ kasabelih masasiketay saca hamin kasabelihan (hakya u matuzu’ay kakuniza\nilabu saca hamin mamikawaw)izaw ku  misumaday kasabelih piazihan tu sulit.\nizawtu ku [[Special:Watchlist|sapacukat a sulit nu misu]] ilabuay a kasabelih apatahkal ku <strong>kibetulay a sulit</strong> sacuzu’.",
        "recentchangeslinked-page": "kasabelih kalungangan:",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead\nmisumad ku paazih masasiket tayza matuzu’ay kasabelih a nisumad",
+       "recentchanges-page-added-to-category": "[[:$1]] macunus tu ta kakuniza",
        "recentchanges-page-removed-from-category": "[[:$1]] masipu tu nay kakuniza",
        "autochange-username": "MediaWiki lunuk misumad",
        "upload": "patapabaw ku tangan",
        "upload_directory_missing": "ma’ngadis patapabaw dilyikotoling ($1) zumasa calay-belih(wangyi) sefu-kikay inayi’ tungus mipatizeng.",
        "upload_directory_read_only": "calay-belih(wangyi) sefu-sakaluk inayi’ patapabaw dilyikotoling ($1) a suliten  tungus.",
        "uploaderror": "patapabaw mungangaw",
+       "uploadtext": "pisaungay isasa’ay a aazihan cudad ngay patapabaw tangan.\namiciwsace saca mikilim iayaw patapabaway a tangan, taneng tayza [[Special:FileList|tangan patapabaw piazihan tu sulit]], (miliyaw miteka)  patapabaw a i [[Special:Log/upload| patapabaw nasulitan nazipa’an]] sulitan, zumasatu masipu ngay i [[Special:Log/delete|masipu nazipa’an]] sulitan.\n\na i kasabelih micaliwan tu tangan, kapah pisaungay isasa’ay ilabu’ ku cacay a sasakawawen masasiket:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> paazih leku ditek a zunga \n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong>amipazeng cacay 200 syangsu ahebalay a zunga ilabu’ nu misabacu, zumasatu paazih \"alt text\" sapihica ku sapuelac \n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> kakelul masasiket ta zunga caay paazih pataayaway miazih",
+       "upload-permitted": "mahasa tangan {{PLURAL:$2|nikalahizaan}}: $1.",
+       "upload-preferred": "patahkal nizateng a tangan {{PLURAL:$2|nikalahizaan}}: $1",
+       "upload-prohibited": "satezep a tangan {{PLURAL:$2|nikalahizaan}}: $1",
        "uploadlogpage": "patapabaw nasulitan nazipa’an",
        "filename": "kalungangan nu tangan",
        "filedesc": "pecu’ nu lacul",
        "ignorewarning": "sekipo patalaw atu misuped tu tangan",
        "ignorewarnings": "sekipo sacahamin patalaw",
        "minlength1": "tangan kalungangan manakanca anu inayi’ i cacay tatebanan-nisulitan.",
+       "illegalfilename": "tangan kalungangan \"$1\" yamalyilu kasabelih satangahan pasatezep pisaungayan tatebanan nu nisulitan.\nkapiliyaw pangangan mamin sa patapabawen.",
        "filename-toolong": "tangan kalungangan amana mangsiw 240 wyiyincu.",
        "badfilename": "masumad tuway tangan kalungangan ku \"$1\"",
+       "filetype-mime-mismatch": "tangan mikilulay-tangan-ngangan \".$1\" caay katatungus sedap katukuhan tangan MIME nikalahizaan ($2)",
        "filetype-badmime": "amana mahasa patapabaw MIME nikalahizaan ku \"$1\" a tangan.",
+       "filetype-bad-ie-mime": "Internet Explorer amitangan itini nikalahizaan mungangaw piazih ku \"$1\", hakay malecay midimutay a mundayk, caay mahasa patapabaw tina nikalahizaan tangan.",
+       "filetype-missing": "kya tangan inayi’ mikilulay ngangan nu tangan (tinaku \".jpg\")",
        "empty-file": "patayzaan nu misu a tangan u inayi’ay.",
        "file-too-large": "patayzaan tangan nu misu micalapay.",
+       "filename-tooshort": "tangan kalungangan tada apuyu’.",
        "filetype-banned": "tina nikalahizaan tangan masatezep pisaungay tuway.",
        "verification-error": "tina tangan caay kasawantan.",
        "hookaborted": "mitanam kisu misumad pasatezep nu sacunus-tuutuud.",
        "tmp-write-error": "suliten nanunuz a tangan mungangaw.",
        "large-file": "patahkal nizateng a tangan hacica-tabaki pabaw-sahezek u $1;\ntina tangan u $2.",
        "largefileserver": "tina tangan hacica-tabaki mangsiw sefu-kikay setin a mahasaay a subal.",
+       "emptyfile": "patapabaway tu tangan nu misu nayay ilabu.\nhakay u tangan a kalungangan mungangaw ku sulitan.\nkapikinsa maydih kisu patapabaw tu nayaay a tangan.",
        "windows-nonascii-filename": "tina Wiki caay midama pisaungay sazumaay bacu a tangan kalungangan.",
+       "fileexists-no-change": "patapabaway a tangan atu ayza baziyong a <strong>[[:$1]]</strong> tada malecad.",
        "file-exists-duplicate": "tina tangan masaliyaw isasa’ay a {{PLURAL:$1|cacay|yadah}} tangan",
        "uploadwarning": "patapabaw patalaw",
        "uploadwarning-text": "pisumad isasa’ay a tangan sapuelac atu mitanam aca.",
        "uploaddisabled": "mapasatezep tu ku patapabaw",
        "copyuploaddisabled": "mapasatezep pisaungay URL patudud.",
        "uploaddisabledtext": "patapabaw tangan mapasatezep tuway.",
+       "php-uploaddisabledtext": "PHP mapasatezep tangan patapabaw.\npikinsa file_uploads setin.",
+       "uploadscripted": "tina tangan yamalyilu hakay u calay-belih(wangyi) saazihay-sakaluk a mungangaw masaungay HTML saca Script.",
+       "upload-scripted-pi-callback": "la’cus patapabaw yamalyilu XML-stylesheet sapisadimel mituzu’ a tangan.",
        "uploaded-script-svg": "i mapatapabaway a SVG tangan matepa kapah micengseay a kuku’-ulic aazihen-paya \"$1\".",
        "uploaded-hostile-svg": "i mapatapabaway a SVG tangan yangse aazihen-paya matepa caay kaenapay a CSS.",
+       "uploaded-setting-href-svg": "masatezep pisaungay \"set\" aazihen-paya amicunus \"href\" susin ta mama yinsu.",
+       "uploaded-image-filter-svg": "ilabu’ mapatapabaway a SVG tangan matepa zunga sebseb-sakaluk pisaungay URL:<code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadinvalidxml": "la’cus mitingalaw matapabaway tangan a XML.",
        "upload-source": "saangangan a tangan",
+       "sourcefilename": "saangangan tangan kalungangan:",
+       "sourceurl": "saangangan URL:",
+       "destfilename": "pamutekan tangan kalungangan:",
        "upload-maxfilesize": "hacica-tabaki nu tangan makelec: $1",
        "upload-description": "tangan sapuelac",
        "upload-options": "patapabaw mapiliay",
        "watchthisupload": "miazih tina tangan",
+       "filewasdeleted": "nasawniay izaw tu ku malecaday kalungangan a tangan patapabaw, masiputu nazikuzan.\nkanca kisu a patapabaw tina tangan pataayaw mikinsa $1.",
+       "upload-proto-error": "padinwaay a ketun caay katatenga’",
        "upload-file-error": "ilabuay a mungangaw",
+       "upload-file-error-text": "mitanam i sefu-kikay patizeng singa’an tu sulit sa tahkal labuay mungangaw.\npimasukazih [[Special:ListUsers/sysop|mikuwanay]].",
+       "upload-misc-error": "caay kapulita patudud mungangaw",
        "upload-too-many-redirects": "kya URL miliyaw patatuzu’ tayza sayadah zuma a puenengan",
        "upload-http-error": "HTTP mungangaw: $1",
        "upload-copy-upload-invalid-domain": "tina calay-subal(wangyi) caay mahasa kopi patapabaway a tangan.",
        "upload-form-label-infoform-title": "pulitaay a kalunasulitan",
        "upload-form-label-infoform-name": "kalungangan",
        "upload-form-label-infoform-description": "sapuelac",
+       "upload-form-label-infoform-description-tooltip": "sapuyu’en ku kamu sapuelac tu nalimaan amahicahicaay tu matatungus pibuhci tu kamu i kalukawaw.\ntinaku i sasing, taneng mapatahkal ku sasakamuen i sasing, kalukawawatu kahicelaan.",
        "upload-form-label-own-work": "uyni ku nalimaan nu maku",
        "upload-form-label-infoform-categories": "kakuniza",
        "upload-form-label-infoform-date": "demiad",
+       "upload-form-label-own-work-message-generic-local": "milucek tu kaku patapabaway a tangan nu maku maduduc tu ku isasa’ay {{SITENAME}} miedapay a cedang atu sapabeli tu kinli a cedang",
+       "upload-form-label-not-own-work-message-generic-local": "amahica kisu la’cus patubeli mikilul {{SITENAME}} tu amikuwanay-pasayzaay patapabaw tu tangan, kapiedeb tina a sasukamu-liwang zumasatu mitanam tu zuma a sakaluk.",
+       "upload-form-label-not-own-work-local-generic-local": "kapah kisu mitanam [[Special:Upload|pataayaw tu kawaw a patapabaw kasabelih]].",
+       "upload-form-label-own-work-message-generic-foreign": "matineng tu kaku patapabaw tina tangan tayza i cacay kapulungan suped-sulu, milucek tu kaku miduduc tu nu wiki a cedang atu sapabeli tu kinli a likec.",
+       "upload-form-label-not-own-work-message-generic-foreign": "anu makai kisu patubeli miduduc kasasimel suped-sulu a amikuwanay-pasayzaay patapabaw tu tangan,piedeb tina sasukamu-liwang a mitanam tuzumaay a sakaluk.",
        "backend-fail-stream": "la’cus pabahel tu tangan \"$1\".",
        "backend-fail-backup": "la’cus mikopi tu tangan \"$1\".",
        "backend-fail-notexists": "tangan $1 inayi’.",
        "backend-fail-hashes": "la’cus maala tangan macamel-sulyang (Hash) miteka sasutili’ay.",
        "backend-fail-notsame": "i \"$1\" izaw tu zumaay caay kalecaday a tangan.",
        "backend-fail-invalidpath": "\"$1\" caykaw kapahay a suped pazazan.",
+       "backend-fail-delete": "la’cus misipu ku tangan \"$1\".",
        "backend-fail-describe": "la’cus misumad tangan \"$1\" a kalunasulitan misaheci.",
        "backend-fail-alreadyexists": "tangan \"$1\" izaw tu.",
        "backend-fail-store": "la’cus misuped tangan \"$1\" i \"$2\".",
        "backend-fail-closetemp": "la’cus miedeb misinga’ tu tangan.",
        "backend-fail-read": "la’cus maasip tangan \"$1\".",
        "backend-fail-create": "la’cus pasulit tu tangan \"$1\".",
+       "backend-fail-readonly": "suped-sulu zikuzan \"$1\" ayzaay aasipen muse. mahicaay: <em>$2</em>",
        "backend-fail-synced": "tangan \"$1\" atu ilabuay i zikuzan nu suped-sulu a setyitase caay kalecad",
        "backend-fail-connect": "la’cus misasiket tayza suped-sulu zikuzan malutapiingan \"$1\"",
        "backend-fail-internal": "suped-sulu zikuzan \"$1\" izaw caay kapulitaay a mungangaw.",
        "backend-fail-contenttype": "la’cus taazihan misuped i \"$1\" a tangan lacul nikalahizaan",
+       "backend-fail-usable": "u nanu tungus caay kataneng saca dilyikotoling/sapilacul mahedaw, la’cus miasip saca misuliten tangan \"$1\" .",
        "filejournal-fail-dbconnect": "la’cus papatun tu zikuzan nu suped-sulu \"$1\" a nasulitan-nazipa’an  kalunasulitan-sulu.",
        "filejournal-fail-dbquery": "la’cus misabaluh suped-sulu zikuzan \"$1\" a nasulitan-nazipa’an kalunasulitan-sulu",
        "lockmanager-notlocked": "la’cus mihulak pamutek \"$1\"; kya tangan caay pamutek.",
        "zip-file-open-error": "miwawah tangan miteka ZIP kinsa sa mungangaw.",
        "zip-wrong-format": "matuzu’ay a tangan caay ku ZIP tangan.",
        "zip-bad": "ZIP tangan malepi’tu saca la’cus miasip.\nla’cus habutud han miteka zahkez kinsa.",
+       "zip-unsupported": "ZIP tangan pisaungay tu MediaWiki ayza caay kadama sasahicaan.\nla’cus malecek miteka kazahkez mikinsa.",
        "uploadstash": "patapabaw ku sulu nu pisipetan",
-       "uploadstash-clear": "palamadac tu sulu nu tangan",
+       "uploadstash-clear": "palamadac tu suped-sulu nu tangan",
        "uploadstash-nofiles": "inayi’ masupetay a tangan nu misu.",
        "uploadstash-badtoken": "miteka saungay mungangaw. mikawaway-kalumyitiay nu misu a pincen hakay mangasiw, piliyaw aca.",
        "uploadstash-errclear": "palamadac tu tangan masepay.",
        "http-curl-error": "imahini miala URL sa mungangaw: $1",
        "http-bad-status": "miteka HTTP milunguc izaw tu ku munday: $1 $2",
        "upload-curl-error6": "la’cus misiket tu calay-zazan(wanglu) ta URL",
+       "upload-curl-error6-text": "la’cus misiket tu calay-zazan(wanglu) ta matuzu’ay nu URL.\nkapiliyaw miteka mikinsa URL u tatenga’ay tu haw, nika malucekay tu calay-kakacawan(wangcan) kapah ku pisaungay.",
        "upload-curl-error28": "patapabaw mautang",
+       "upload-curl-error28-text": "calay-kakacawan(wangcan) mangasiw patukil a tukiay kelec. \npikinsa kya calay-kakacawan(wangcan) malecek saungay haw? pihanhan henay pitaneng aca.\npatahkal nizateng tisuwan kapah kisu i caay makalahay a tuki mitanam misiket tu calay-zazan(wanglu).",
        "license": "sapabeli tu kinli a cedang",
        "license-header": "sapabeli tu kinli a cedang",
        "nolicense": "caay henay mipili’",
        "upload_source_file": "(mapili’ay a tangan nu misu i tinnaw nu misu)",
        "listfiles-delete": "misipu",
        "listfiles-summary": "uyni sazumaay a kasabelih paazih sacahamin patabapaw a tangan.",
+       "listfiles_search_for": "mikilim myiti kalungangan:",
        "listfiles-userdoesnotexist": "misaungayay canghaw \"$1\" caay henay pangangan.",
        "imgfile": "tangan",
        "listfiles": "piazihan tu sulit nu tangan",
        "filehist-comment": "pacunus sakacaay kapawan",
        "imagelinks": "sakapaluwaluway nu tangan",
        "linkstoimage": "isasaay {{PLURAL:$1| kasabelih  misiket |saka $1 a kasabelih misiket}}katukuh tina tangan:",
+       "linkstoimage-more": "mangasiw $1 {{PLURAL:$1|kasabelih masasiket}} ta tina tangan.\nisasa’ay piazihan-tu-sulit pasilsil iayaway a dada’ {{PLURAL:$1|1 masasiket|$1 masasiket}} ta tina tangan a kasabelih.\nkapah tu kisu miciwsace [[Special:WhatLinksHere/$2|leku piazihan-tu-sulit]].",
        "nolinkstoimage": "nayi’ ku kasabelih masasiket katukuh tini a tangan.",
        "linkstoimage-redirect": "$1 (tangan miliyaw patatuzu’) $2",
        "sharedupload": "tina tangan namakay $1 satu hakay masaungay nu zuma a cwanan.",
        "filerevert-legend": "patiku tu tangan",
        "filerevert-comment": "mahicaay:",
        "filerevert-defaultcomment": "patiku tuway tayza i $1 $2 ($3) a baziyong",
+       "filerevert-submit": "patiku",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> mapatiku ta [$4 i $2 $3 a baziyong ].",
        "filerevert-badversion": "caay katepa tangan nu nasawniay  matuzu’ tu demiad a itiniay baziyong.",
        "filerevert-identical": "ayzaay baziyong a tangan atu mipili’ay baziyong malecalecad.",
        "filedelete": "misipu \"$1\"",
        "filedelete-legend": "misipu tu tangan",
+       "filedelete-intro-old": "imahini amisipu kisu <strong>[[Media:$1|$1]]</strong> i [$4 $2 $3] a baziyong.",
        "filedelete-comment": "mahicaay:",
        "filedelete-submit": "masipu",
        "filedelete-success": "masipu tu <strong>$1</strong>.",
        "filedelete-nofile": "<strong>$1</strong> inayi’.",
+       "filedelete-nofile-old": "inayi’ matepa <strong>$1</strong> izaway matuzu’ay a susinay emicen henay baziyong.",
        "filedelete-otherreason": "zumaay/nicunusay a mahicaay:",
        "filedelete-reason-otherlist": "zuma a mahicaay",
+       "filedelete-reason-dropdown": "* sawsawni maazih misipuay a mahicaay \n**midebung nisanga’an niza tu tungus a kawaw \n**tangan misaliyaw",
        "filedelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
        "filedelete-maintenance": "midiput a demiad sa tangan misipu atu patiku nanunuz pisaungay.",
        "filedelete-maintenance-title": "la’cus masipu tu tangan",
+       "mimesearch": "MIME kilim",
+       "mimetype": "MIME nikalahizaan:",
        "download": "patasasa'",
        "unwatchedpages": "caayay kasisip a kasabelih",
        "listredirects": "miliyaw patatuzu’ piazihan tu sulit",
        "listduplicatedfiles": "misaliyaw tu tangan piazihan tu sulit",
+       "listduplicatedfiles-summary": "tina piazihan tu sulit yamalyilu sabaluhay baziyong a tangan atu zuma tangan misaliyaw a piazihan tu sulit, tina piazihan tu sulit dada’ paazih itiniay a tangan",
        "unusedtemplates": "caayay kasaungay a taazihan mitudung",
        "randompage": "kakibalucu’ ay a kasabelih",
+       "randompage-nopages": "i {{PLURAL:$2|pangangananay a salaedan}} inayi’ amahicahica tu kasabelih: $1.",
        "randomincategory": "kakibalucu’ kakuniza a kasabelih",
        "randomincategory-invalidcategory": "\"$1\" caay ku kapahay a kakuniza kalungangan.",
        "randomincategory-nopages": "ilabu nu [[:Category:$1]] inayi’ amahicahica tu kasabelih.",
        "statistics": "sausi",
        "statistics-header-pages": "kasabelih sausi",
        "statistics-header-edits": "sausi mikawaway-kalumyiti",
+       "statistics-header-users": "misaungayay a sausi cesyun",
        "statistics-header-hooks": "zuma a sausi",
        "statistics-articles": "lacul kasabelih",
+       "statistics-pages": "kasabelih",
        "statistics-pages-desc": "i Wiki sacahamin a kasabelih, yamalyilu sasukamu kasabelih, miliyaw patatuzau’ kasabelih…",
        "statistics-files": "mapatapabaw tu a tangan",
        "statistics-edits": "nay {{SITENAME}} napatizeng katukuh ayza sa kasabelih mikawaway-kalumyiti sulyang",
-       "statistics-edits-average": "paybelih malecalecad mikawaway-kalumyiti su",
+       "statistics-edits-average": "paybelih malecalecad mikawaway-kalumyiti sulyang",
+       "statistics-users": "mapanganganay tu [[Special:ListUsers|misaungayay]]",
        "statistics-users-active": "saungay nu binawlan a misaungayay",
        "pageswithprop": "izaw susin a kasabelih",
        "pageswithprop-text": "tina kasabelih sapalalitemuh tu kawaw pisaungay matuzu’ay susin a kasabelih",
        "pageswithprop-submit": "mileku",
        "pageswithprop-prophidden-long": "midimut mangasiw tanaya’ a susin sulyang ($1) tuway",
        "pageswithprop-prophidden-binary": "madimut tusa-taayaw-eneng susin sulyang ($1)",
+       "doubleredirects": "tusaay a miliyaw patatuzu’",
+       "double-redirect-fixed-move": "[[$1]] mapahezek tu milimad.\ntina kasabelih malunuk misaimed zumasatu mamiliyaw patatuzau’ tu [[$2]].",
+       "double-redirect-fixed-maintenance": "i midiput a kawaw sa lunuk misumad tupatibabaay miliyaw patatuzu’ nay [[$1]] katukuh [[$2]].",
+       "double-redirect-fixer": "miliyaw patatuzu’ misumaday",
        "brokenredirects": "malepi’ ay miliyaw patatuzu’",
        "brokenredirectstext": "isasa’ miliyaw patatuzu’ kasabelih masasiket a kasabelih inayi’:",
+       "brokenredirects-edit": "mikawaway-kalumyiti",
        "brokenredirects-delete": "misipu",
        "withoutinterwiki": "inayi’ ku kamu masasiket a kasabelih",
        "withoutinterwiki-summary": "isasa’ay inayi’ masasiket tu zuma  kamu baziyong a kasabelih.",
        "withoutinterwiki-legend": "saayaway a sulit",
        "withoutinterwiki-submit": "paazih",
+       "fewestrevisions": "sainayi'ay masumaday nu kasabelih",
        "nbytes": "$1 {{PLURAL:$1|wyiyincu}}",
        "ncategories": "{{PLURAL:$1|kakuniza}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki masasiket}}",
        "nlinks": "$1 {{PLURAL:$1|masasiket}}",
        "nmembers": "$1 {{PLURAL:$1|ku mamikawaw}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|sakawaway}}",
        "nrevisions": "$1 {{PLURAL:$1|masumad nu ayaway}}",
        "nimagelinks": "{{PLURAL:$1|kasabelih}}",
        "ntransclusions": "$1 {{PLURAL:$1|ku kasabelih}}",
        "specialpage-empty": "tina aazihen cudad inayi’ amahicahica a heci.",
        "lonelypages": "masipulu’ a kasabelih",
+       "lonelypagestext": "isasa’ay a kasabelih caay henay {{SITENAME}} zumaay kasabelih masasiket saca nicaliwan.",
        "uncategorizedpages": "cayhen kakunizaay a kasabelih",
        "uncategorizedcategories": "cayhenay kakunizaay a kakuniza",
        "uncategorizedimages": "cayhen kakunizaay a tangan",
        "wantedpages": "maydihay a kasabelih",
        "wantedpages-badtitle": "kyu i lecapuay a satangahan la’cus: $1",
        "wantedfiles": "maydihay a tangan",
+       "wantedfiletext-cat-noforeign": "isasa’ay a tangan mapasaungay tu uyzasa inayi’ay. tina a dada’ silabas kakaiyan tu, kasabelih sipakabit ilabu’ nika inayi’ay a tangan mapalaylay i [[:$1]]",
        "wantedtemplates": "maydihay a taazihan mitudung",
+       "mostlinked": "masasiket sayadahay a kasabelih",
        "mostlinkedcategories": "masasiket sayadahay a kakuniza",
        "mostlinkedtemplates": "nipacaliwan kayadahay a kasabelih",
+       "mostcategories": "iyadah ku kakunizaay nu kasabelih",
        "mostimages": "masasiket kayadahay a tangan",
        "mostinterwikis": "sayadah lakec masasiket nu Wiki a kasabelih",
+       "mostrevisions": "iyadah ku masumaday nu kasabelih",
        "prefixindex": "kilul tatangahan nu sulit palalitemuh tu kawaw kasabelih",
        "prefixindex-namespace": "kilulen tatangahan nu sulit palalitemuh tu kawaw kasabelih ($1 pangangananay a salaedan)",
        "prefixindex-submit": "paazih",
        "shortpages": "ma’ngadisay a kasabelih",
        "longpages": "mangasiway a kasabelih",
        "deadendpages": "inayi’ masasiket kasabelih",
+       "deadendpagestext": "isasa’ay i {{SITENAME}} a kasabelih caay masasiket katukuh zuma kasabelih.",
        "protectedpages": "madiputay a kasabelih",
        "protectedpages-indef": "paazih a cacay inayi’-kakatekuhan midiputay kasabelih",
        "protectedpages-cascade": "paazih a cacay patatusulay a midiput kasabelih",
        "protectedpages-params": "midiput tu aazihen a sulyang",
        "protectedpages-reason": "mahicaay",
        "protectedpages-submit": "paazih tu kasabelih",
+       "protectedpages-unknown-timestamp": "caay kapulita",
        "protectedpages-unknown-performer": "caay kapulita a misaungayay",
        "protectedtitles": "madiputay a satangahan",
        "protectedtitlesempty": "inayi’ pisaungay uyniyay aazihen-sulyang a madiputay  satangahan ayza.",
        "protectedtitles-submit": "paazih tu satangahan",
        "listusers": "misaungayay a piazihan tu sulit",
        "listusers-editsonly": "paazih a cacay izaw misaungayay nu mikawaway-kalumyiti",
+       "listusers-creationsort": "i patizeng a demiad tu kasalaylay",
        "listusers-desc": "pisaungay nay tabakiay katukuh adidi’ kasalaylay",
        "usereditcount": "$1 {{PLURAL:$1|ku mikawaway-kalumyiti}}",
        "usercreated": "i $1 $2 {{GENDER:$3|patizeng}}",
        "newpages-username": "misaungayay a kalungangan:",
        "ancientpages": "samalumanay a kasabelih",
        "move": "milimad",
+       "unusedimagestext": "isasa’ay ku caay pisaungay a tangan nu mahicahica a kasabelih.\npiazihen, zuma calay-kakacawan(wangcan) hakay kakelul micaliw URL masasiket tu tangan, sisa pasilsilay a tangan itini hakay izaw henay pisaungay.",
        "unusedcategoriestext": "isasa’ kakuniza inayi’ caay henay masaungay nu kasabelih saca kakuniza",
        "notargettitle": "inayi’ ku pabalucu’an",
        "notargettext": "caay henay kisu matuzu’ papatuzu'an kasabelih saca misaungayay amiteka tina saungay.",
+       "nopagetitle": "inayi’ku pamutekan tu kasabelih",
        "nopagetext": "matuzu’ay a papatuzu’an a kasabelih nu misu inayi’.",
-       "pager-newer-n": "{{PLURAL:$1|baluhay $1}}",
+       "pager-newer-n": "{{PLURAL:$1|hatiya baluhayay $1}}",
        "pager-older-n": "{{PLURAL:$1| kusa malumanay}}",
        "suppress": "malangat",
        "querypage-disabled": "uyni sazumaay a kasabelih zayhan mizateng ku icelang a munday mapasatezep tuway.",
        "apisandbox": "bunac haku nu API",
        "apisandbox-jsonly": "maydih JavaScript kya kapah pisaungay API bunak-haku.",
        "apisandbox-api-disabled": "tina calay-kakacawan(wangcan) maedeb API tuway.",
+       "apisandbox-intro": "isaungay tina kasabelih taneng mitanam  <strong>MediaWiki web service API</strong>.\npiazih tu tatenga’ay [[mw:API:Main page|API buhci tu kamu cudad]] ngay maala pulita cesyun. tinaku:[https://www.mediawiki.org/wiki/API#A_simple_example maala angnangan-belih a lacul]. pipili’ saungay ngay maala kayadahay a satinakuan.\n\npiazihi, kanahatu tina ku bunak-haku, i tina belih sapisaungayay a saungay hakay amasumad tu ku Wiki.",
        "apisandbox-fullscreen": "micuwat tu sapat",
        "apisandbox-fullscreen-tooltip": "micuwat sandobokese banyilo amipatumes saazihay-sakaluk azih-sasingalan.",
        "apisandbox-unfullscreen": "paazih  kasabelih",
+       "apisandbox-unfullscreen-tooltip": "wada’en sandobokese banyilo a tabaki, ngay MediaWiki pasubana’ tu miidangay masasiket kapah misaungay.",
        "apisandbox-submit": "miawaw tu milunguc",
        "apisandbox-reset": "palawpis",
        "apisandbox-retry": "miliyaw mitaneng",
        "apisandbox-results-error": "miasip API palalitemuh tu kawaw patukil sa mungangaw: $1.",
        "apisandbox-request-selectformat-label": "paazih milunguc kalunasulitan u:",
        "apisandbox-request-format-url-label": "URL palalitemuh tu kawaw sulisulitan",
+       "apisandbox-request-url-label": "milunguc URL:",
        "apisandbox-request-json-label": "milunguc JSON:",
        "apisandbox-request-time": "milungucay a tatukian:{{PLURAL:$1|$1 ms}}",
-       "apisandbox-results-fixtoken": "misumad mima-sacukcuk sa miliyaw patayzaan",
-       "apisandbox-results-fixtoken-fail": "maala \"$1\" mima-sacukcuk mungangaw.",
+       "apisandbox-results-fixtoken": "misumad mima-sabuhat sa miliyaw patayzaan",
+       "apisandbox-results-fixtoken-fail": "maala \"$1\" mima-sabuhat mungangaw.",
        "apisandbox-alert-page": "tina kasabelih a pisinga’an  la’cus.",
        "apisandbox-alert-field": "la’cus tina pisinga’an a sulyang.",
        "apisandbox-continue": "palalid",
        "apisandbox-continue-clear": "palawpis",
        "apisandbox-param-limit": "musulit <kbd>max</kbd> amisaungay satabakiay a kelec.",
        "apisandbox-multivalue-all-namespaces": "$1 (sacahamin pangangananay a salaedan)",
+       "apisandbox-multivalue-all-values": "$1 (sacahamin sulyang)",
        "booksources": "nu cudad atu laculaculan",
        "booksources-search-legend": "mikilim ku cudad atu laculaculan",
        "booksources-search": "kilim",
+       "booksources-text": "isasa’ay a piazihan tu sulit yamalyilu zuma pacakay baluhay cudad saca malumanay cudad i calay-kakacawan(wangcan) masasiket, hakay izaw ku kaydihan nu misu a cudad pataayaw matineng tatalaayaway a cesyun.",
        "booksources-invalid-isbn": "nipabeli nu misu a ISBN caay tatenga’ay; pikinsa kopiay a saangangan mungangaw haw?",
        "magiclink-tracking-rfc": "pisaungay RFC kaliwaza misasiket kasabelih",
        "magiclink-tracking-pmid": "masasiketay a kasabelih nu pisaungay PMID kaliwaza tina Wiki mapasatezep tu miliyaw patizeng tu mima",
        "magiclink-tracking-isbn": "misasiketay a kasabelih nu pisaungay ISBN kaliwaza",
        "specialloguserlabel": "mileku-misaungayay:",
+       "speciallogtitlelabel": "pamutekan (satangahan saca {{ns:user}}: misaungayay pakatineng misaungayay):",
        "log": "nasulitan nakawawan",
        "logeventslist-submit": "paazih",
        "all-logs-page": "sacahamin pabinawlan nasulitan nazipa’an",
+       "alllogstext": "mikabu paazih sacahamin {{SITENAME}} sacahamin  nikalahizaan a nasulitan nazipa’an.\nkapah kisu sapecec mutengteng-patasasa’ sakakawawen mapili’ay mipili’ nazipa’an a nikalahizaan, matuzu’ay misaungayay a kalungangan (sawantanen tabakiay atu adidi’ay a sulit) saca malawilaway a kasabelih (sawantanen tabakiay atu adidi’ay a sulit).",
        "logempty": "inayi’ nasulitan-nazipa’an matatungus tu sakacucek.",
        "log-title-wildcard": "mikilim satangahan nu nay tina langat-pisinga’an saayaway sulit",
        "showhideselectedlogentries": "paazih/midimut mapili’ay a nasulitan-nazipa’an a kasacacay",
        "listusers-submit": "paazih",
        "listusers-noresult": "caykatepa misaungayay.",
        "listusers-blocked": "(malangat tuway)",
+       "activeusers": "saungay nu binawlanay misaungayay piazihan tu sulit",
+       "activeusers-intro": "tina piazihan-tu-sulit sa ku capi $1 {{PLURAL:$1|demiad}} izaw ku saungay a misaungayay.",
+       "activeusers-count": "{{PLURAL:$1|saungay}} capi {{PLURAL:$3|demiad}}",
        "activeusers-from": "paazih misaungayay miteka nay:",
        "activeusers-groups": "paazih tungusay nu sasa’ay a luyaluy misaungayay:",
        "activeusers-excludegroups": "palawpes tungusay nu isasa’ay luyaluy a misaungayay:",
        "activeusers-noresult": "caykatepa misaungayay.",
        "activeusers-submit": "paazih misaungayay i saungay nu binawlan",
+       "listgrouprights": "misaungayay luyaluy a tungus",
        "listgrouprights-group": "luyaluy",
        "listgrouprights-rights": "kinli",
        "listgrouprights-helppage": "Help:Group rights",
        "listgrouprights-removegroup": "misipu {{PLURAL:$2|cyucu}}:$1",
        "listgrouprights-addgroup-all": "micunus sacahamin a luyaluy",
        "listgrouprights-removegroup-all": "misipu sacahamin luyaluy",
+       "listgrouprights-addgroup-self": "i nimisuan a canghaw ilabu’ micunusan {{PLURAL:$2|cacay|yadahay}} luyaluy: $1",
+       "listgrouprights-removegroup-self": "pasipu canghaw nu misuay {{PLURAL:$2|cacay|yadah}} cyucu: $1",
        "listgrouprights-addgroup-self-all": "i misuay a canghaw micunus sacahamin a luyaluy",
        "listgrouprights-removegroup-self-all": "misipu canghaw nu misu sacahamin a cyucu",
        "listgrouprights-namespaceprotection-header": "pangangananay a salaedan mikelec",
+       "listgrouprights-namespaceprotection-namespace": "pangangananay a salaedan",
        "listgrouprights-namespaceprotection-restrictedto": "mahasa misaungayay mikawaway-kalumyiti a tungus",
        "listgrants": "pabeli tu kinli",
        "listgrants-rights": "kinli",
        "trackingcategories": "mikilul nazikuzan kakuniza",
        "trackingcategories-desc": "kakuniza milisimet a tatungus",
        "restricted-displaytitle-ignored": "sekipo paazih satangah a kasabelih",
+       "post-expand-template-inclusion-category-desc": "namicuwat taazihan mitudung tuway kya tabaki’ mangawi <code>$wgMaxArticleSize</code> hamaw layad taazihan mitudung caay malecek micuwat kasabelih.",
        "broken-file-category-desc": "yamalyilu malepi’ a tangan masasiket a kasabelih (sipakabit ilabu tangan masasiket a tangan inayi’).",
        "trackingcategories-nodesc": "inayi’ ku silaheciay a sapuelac",
        "trackingcategories-disabled": "mapasatezep kakuniza tuway",
        "emailuser-title-target": "imyiyo(email) tu{{GENDER:$1|misaungayay}}",
        "emailuser-title-notarget": "imyiyo(email) patakus misaungayay",
        "defemailsubject": "{{SITENAME}} misaungayay \"$1\" patigamiay a imyiyo(email)",
-       "usermaildisabled": "mapasatezep imyiyo(email)",
+       "usermaildisabled": "misaungayay imyiyo(email) mapasatezep tu",
        "usermaildisabledtext": "la’cus pabahel imyiyo(email) tayza tian Wiki zumaay a misaungayay",
+       "noemailtitle": "inayi’ imyiyo(email) puenegan",
        "noemailtext": "tina misaungayay caay henay  matuzu’ay cacay ku kapahay a imyiyo(email) puenengan.",
        "nowikiemailtext": "tina misaungayay mipili’ caay mizawis zuma misaungayay a tigami.",
        "emailnotarget": "milayapay inayi’ saca la’cus ku misaungayay a kalungangan.",
        "emailsend": "patigamitu",
        "emailccme": "pabahel cacay palatuh mikilulay-cudad tu imyiyo(email) nu maku.",
        "emailccsubject": "napatigami $1 nu misa a palatuh mikilulay-cudad: $2",
+       "emailsent": "mapatahkal tu i imyiyo(email)",
        "emailsenttext": "patigamitu ku imyiyo(email) palatuh nu misu.",
+       "usermessage-summary": "subelid tu latuh tayza i sisetyimo.",
+       "usermessage-editor": "sisetyimo palatuh",
        "watchlist": "miazihay a piazihan tu sulit",
        "mywatchlist": "miazihay a piazihan tu sulit",
        "watchlistfor2": "$1 miazihay a piazihan-tu-sulit $2",
        "unwatchthispage": "pahanhan miazih",
        "notanarticle": "caay ku lacul nu kasabelih",
        "notvisiblerev": "sazikuzay nay zuma misaungayay namasumad masipu tuway",
+       "watchlist-details": "{{PLURAL:$1|miazihay a piazihan-tu-sulit nu misu izaw $1 kasabelih}}(yamalyilu sasukamu kasabelih).",
        "wlheader-enotif": "mawawah tuway imyiyo(email) patakus sasahicaan.",
+       "wlheader-showupdated": "i tisuwan sazikuz tu ciwsace sazikuzay misumad tu kasabelih a u <strong>kibetulay</strong> paazih",
+       "wlnote": "isasa’ay {{PLURAL:$1|u nazikuzay a sumad|u nazikuzay <strong>$1</strong> sumad}} i inazikuzay {{PLURAL:$2|tuki|<strong>$2</strong> tuki}}, itawya $3, $4.",
        "wlshowlast": "paazih capi demaid $1 tuki $2 demiad",
        "watchlist-hide": "midimut",
+       "watchlist-submit": "paazih",
        "wlshowtime": "apaazihay a tuki-tenes:",
        "wlshowhideminor": "cayka yadah ku misumad",
        "wlshowhidebots": "kikay a tademaw",
        "wlshowhidepatr": "tayza mikibi mikawaway-kalumyiti",
        "wlshowhidemine": "numakuay a mikawaway-kalumyiti",
        "wlshowhidecategorization": "kasabelih nu kakuniza",
-       "watchlist-options": "misisipa piazihan-tu-sulit a syinsiang",
-       "unwatching": "palawpes aazihan...",
+       "watchlist-options": "miazihay piazihan-tu-sulit a mapiliay",
+       "watching": "imahini miazih...",
+       "unwatching": "imahini pahanhan mikantuk…",
        "watcherrortext": "imahini misumad \"$1\" miazihay a piazihan-tu-sulit setin sa mungangaw",
        "enotif_reset": "silusi sacahamin kasabelih ku maciwsaceay",
        "enotif_impersonal_salutation": "{{SITENAME}} misaungayay",
        "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
        "deletepage": "misipu tu kasabelih",
        "confirm": "malucekaytu",
+       "excontent": "lacul nu: \"$1\"",
        "exbeforeblank": "caay henay palawpes hamin a lacul ku: \"$1\"",
        "delete-confirm": "misipu \"$1\"",
+       "historywarning": "<strong> patalaw:</strong> imahini amisipuay a kasabelih nu misu yamalyilu $1 {{PLURAL:$1|sumad}} nazipa’an",
        "historyaction-submit": "paazih",
        "actioncomplete": "pahezek tu ku saungay",
        "actionfailed": "saungay mungangaw",
        "rollbacklinkcount": "patiku {{PLURAL:$1|mikawaway tu kalumyiti}}",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|mikawaway-kalumyiti}}",
        "rollbackfailed": "patiku mungangaw",
-       "rollback-missingparam": "milunguc caay kataneng kasasulul aazihen a sulyang.",
+       "rollback-missingparam": "milunguc caay kataneng kasasulul aazihen-sulyang.",
        "rollback-missingrevision": "la’cus pacumud masumad nu ayaway a kalunasulitan.",
        "cantrollback": "la’cus patiku mikawaway-kalumyiti;\ntina kasabelih a sazikuz paaninay u kinacacay a masacudaday.",
+       "alreadyrolled": "la’cus patiku nay [[User:$2|$2]] ([[User talk:$2|sasukamu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] sapihica sazikuzay cacay mikawaway-kalumyiti [[:$1]], izawtu zumaay tatemaw mikawaway-kalumyiti saca patikutu kya kasabelih.)\n\nsazikuzay a cacay mikawaway-kalumyiti kya kasabelih a misaungayay sa ku [[User:$3|$3]] ([[User talk:$3|sasukamu]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "mikawaway-kalumyiti pecu’ nu lacul ku: <em>$1</em>.",
+       "rollback-success-notify": "mapatiku $1 nikawawan mikawaway-kalumyiti;\nmisumad patiku ta $2 masumad nu ayaway a sazikuz cacay baziyong. [$3 paazih ku masumaday]",
        "sessionfailure-title": "kasasiket mungangaw",
+       "sessionfailure": "kisu patalabu kasasiketan mahiza simunday,\nsaka pataayaw-milangat kasasiketan maalaw atu madebung, tina saungay mapalawpes tuway.\npitatiku ayaway a kasabelih, miliyaw maasip kya kasabelih pitaneng aca.",
        "changecontentmodel": "misumad lacul tatudungen misanga’",
        "changecontentmodel-title-label": "kasabelih satangahan",
        "changecontentmodel-model-label": "tatudungen misanga’ nu baluhay a lacul",
        "changecontentmodel-reason-label": "mahicaay:",
+       "changecontentmodel-success-title": "masumad tuway lacul tatudungen misanga’",
        "changecontentmodel-success-text": "masumad tuway [[:$1]] a lacul nikalahizaan.",
        "changecontentmodel-cannot-convert": "[[:$1]] a lacul la’cus miliyaw tu $2 a nikalahizaan.",
        "changecontentmodel-nodirectediting": "$1 a lacul tatudungen-misanga’ caay midama kakelulay a mikawaway-kalumyiti",
        "changecontentmodel-emptymodels-title": "inayi’ ku silaheciay a lacul tatudungen-misanga",
        "changecontentmodel-emptymodels-text": "[[:$1]] a lacul akamiliyaw tu amahicahica nikalahizaan.",
+       "log-name-contentmodel": "lacul tatudungen misanga’ misumad nasulitan nazipa’an",
+       "log-description-contentmodel": "tina kasabelih pasilsil tu kasabelih lacul tatudungen misanga’ sumad misulit atu pisaungay caay pataayaw tu kawaw tu lacul nu tatudungen misanga’ patizeng tu kasabelih",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|masaungay tuway}} caay pataayaw tu kawaw a lacul tatudungen misanga’ \"$5\" patizeng kasabelih $3",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|masumad tuway}} kasabelih $3 u lacul tatudungen misanga’ nay \"$4\" ta \"$5\"",
+       "logentry-contentmodel-change-revertlink": "patiku",
+       "logentry-contentmodel-change-revert": "patiku",
        "protectlogpage": "midiput nasulitan nakawawan",
        "protectedarticle": "madiput tuway \"[[$1]]\"",
-       "modifiedarticleprotection": "masumad tuway \"[[$1]]\" a midiput kasaselal",
+       "modifiedarticleprotection": "masumad tuway \"[[$1]]\" a midiput tindud",
        "unprotectedarticle": "mahulak tu \"[[$1]]\" a diput",
        "movedarticleprotection": "malimad \"[[$2]]\" a midiput setin tu \"[[$1]]\"",
        "protectedarticle-comment": "{{GENDER:$2|madiputay}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|masumad tuway}} \"[[$1]]\" a midiputay a kasaselal",
        "unprotectedarticle-comment": "{{GENDER:$2|masipu tu }} \"[[$1]]\" a midiput",
-       "protect-title": "misumad \"$1\" a midiputay a saselal",
+       "protect-title": "misumad \"$1\" a midiputay a tindud",
+       "protect-title-notallowed": "ciwsace \"$1\" a midiput tindud",
        "prot_1movedto2": "malimad [[$1]] tayza [[$2]]",
        "protect-badnamespace-title": "pangangananay a salaedan amana midiput",
        "protect-badnamespace-text": "tina ilabu nupangangananay a salaedan a kasabelih la’cusay setin tu midiput.",
        "protect-norestrictiontypes-text": "la’cus midiput tina kasabelih, inayi’ sapakelecay a kasacacay.",
+       "protect-norestrictiontypes-title": "inayi’ midiputay a kasabelih",
        "protect-legend": "malucekay tu midiputay",
        "protectcomment": "mahicaay:",
        "protectexpiry": "kakatekuhan:",
        "protect_expiry_invalid": "la’cusay a kakatekuhan",
        "protect_expiry_old": "Expiration time is in the past.",
        "protect-unchain-permissions": "mihulak pamutek yadahay a midiput mapiliay",
+       "protect-text": "kapah kisu itini miciwsace atu misumad kasabelih <strong>$1</strong> a midiput tu kasalaylay.",
        "protect-default": "mahasa sacahamin misaungayay",
        "protect-fallback": "mahasa dada’ ku \"$1\" situngusay a misaungayay",
        "protect-level-autoconfirmed": "mahasa dada’ lunuk malucekay tu misaungayay",
        "protect-expiring": "kakatekuhan $1 (UTC)",
        "protect-expiring-local": "kakatekuhan katukuh i $1",
        "protect-expiry-indefinite": "inayi’ u sungliw",
-       "protect-cantedit": "inayi’ mikawaway-kalumyiti a tungus kisu, la’cus misumad tina kasabelih a midiput kasaselal.",
+       "protect-cantedit": "inayi’ mikawaway-kalumyiti a tungus kisu,la’cus misumad tina kasabelih a midiput tindud.",
        "protect-othertime": "zuma a tatukian:",
-       "protect-existing-expiry": "masetin tu kakatekuhan: $3, $2",
+       "protect-existing-expiry": "ayzaay a kakatekuhan: $3, $2",
        "protect-existing-expiry-infinity": "masetin tuway a kakatekuhan: inayi’kakatekuhan",
        "protect-otherreason": "zumaay/nicunusay a mahicaay:",
        "protect-otherreason-op": "zuma a mahicaay",
        "restriction-level-all": "amahicahicaay a kasalelal",
        "undelete": "ciwsace masipuay tu kasabelih",
        "undeletepage": "ciwsace atu patiku masipuay tu kasabelih",
+       "undeletepagetitle": "<strong>isasa’ay mala [[:$1|$1]] masipuay tu masumad nu ayaway baziyong</strong>.",
        "viewdeletedpage": "ciwsace masipuay tu kasabelih",
        "undelete-fieldset-title": "patiku misumad nu ayaway",
+       "undeleterevisions": "$1{{PLURAL:$1|baziyong}}misipu",
+       "undeleterevdel": "amahica sabaluhayay a kasabelih saca tangan masumad nu ayaway masipu tu liyad, a la’cus mileku palawpes misipuay a saungay.\nanumahiza sa kanca mipili’ hatizaay saca palawpes  midimut masipuay tu sabaluhay a sumad nu ayaway.",
        "undelete-revision": "masipu nu $3 a $1 (i $4 $5) masumad nu ayaway",
+       "undeleterevision-missing": "la’cus saca mahedaw a nisumadan.\nhakay kisu pisaungay tu mungangaway misiket, saca kya amasumad nu ayaway namaemicen patiku saca masipu.",
        "undelete-nodiff": "inayi’ nasawniay a sumad.",
        "undeletebtn": "patiku",
+       "undeletelink": "ciwsace/patiku",
+       "undeleteviewlink": "ciwsace",
        "undeleteinvert": "kabelihan mipili’",
        "undeletecomment": "mahicaay:",
        "cannotundelete": "liyad saca hamin a palawpes  misipu mungangaw:\n$1",
+       "undelete-header": "kapiazih tu tatenga’ay [[Special:Log/delete|masipu nasulitan nazipa’an]] palalitemuh tu kawaw capi demiad masipuay kasabelih.",
        "undelete-search-title": "mikilim masipuay a kasabelih",
        "undelete-search-prefix": "paazih kasabelih miteka nay:",
        "undelete-search-submit": "kilim",
        "undelete-filename-mismatch": "la’cus palawpes misipu tuki sapa $1 a tangan misumad nu ayaway: tangan kalungangan caay matatungus.",
        "undelete-bad-store-key": "la’cus palawpes masipu tuki ku $1 a tangan masumad nu ayaway: tangan caay henay misipu mahedaw tuway.",
        "undelete-cleanup-error": "yu misipu caay pisaungay a misinga’ tangan \"$1\" sa mungangaw.",
+       "undelete-missing-filearchive": "nasulitan-sulu inayi’ay i tangan emicen henay ID $1, la’cus patiku tangan.\nkya tangan hakay mapalawpes tu masipu.",
        "undelete-error": "palawpes masipu kasabelih  mungangaw",
        "undelete-error-short": "palawpes masipu tangan mungangaw: $1",
+       "undelete-error-long": "imahini palawpes misipu tangan bahal mungangaw:\n\n$1",
        "undelete-show-file-submit": "hang",
        "namespace": "pangangananay a salaedan:",
        "invert": "kabelihan mipili’",
        "sp-contributions-logs": "nasulitan nakawawan",
        "sp-contributions-talk": "sasukamu",
        "sp-contributions-blocked-notice": "tina misaungayay malangat tu ayza.\nisasa’ay ku capi demiad malangatay a nasulitan apabeli miazih tu tatenga’ay:",
+       "sp-contributions-blocked-notice-anon": "tina IP puenengan malangat tuway ayza.\nisasa’ay u capi demiad milangat nazipa’an mamiazih tu tatenga’ay",
        "sp-contributions-search": "mikilim tu paanin",
        "sp-contributions-username": "IP puenengan saca misaungayay a kalungangan:",
        "sp-contributions-toponly": "paazih a cacay sabaluhay masumad nu ayaway a mikawaway-kalumyiti",
        "sp-contributions-hideminor": "midimut mikilulay mikawaway-kalumyiti",
        "sp-contributions-submit": "kilim",
        "whatlinkshere": "masasiket katukuh uyniyay a kasabelih",
-       "whatlinkshere-title": "masasiket tazumaay a \"$1\" kasabelih",
+       "whatlinkshere-title": "masasiket tayza \"$1\" a kasabelih",
        "whatlinkshere-page": "Kasabelih:",
        "linkshere": "isasaay a kasabelih masasiket tazuma tu <strong>[[:$1]]</strong>:",
+       "nolinkshere": "No pages link to <strong>[[:$1]]</strong>.",
        "nolinkshere-ns": "mapili’ay a pangangananay a salaedan inayi’ kasabelih  masasiket tu [[:$1]].",
        "isredirect": "miliyaw patatuzu’",
        "istemplate": "palaculen tu kasabelih",
        "whatlinkshere-hideimages": "$1 tangan-tangan misiket",
        "whatlinkshere-filters": "sakacucek nu misapili’",
        "whatlinkshere-submit": "mileku",
+       "autoblockid": "lunuk malangat #$1",
        "block": "milangat misaungayay",
+       "unblock": "mihulak malangat misaungayay",
        "blockip": "milangat {{GENDER:$1|misaungayay}}",
        "ipaddressorusername": "IP puenengan saca misaungayay a kalungangan:",
        "ipbexpiry": "kakatekuhan:",
        "ipbreason": "mahicaay:",
        "ipb-hardblock": "amana pisaungay tina IP puenengan patalabuay a misaungayay mikawaway-kalumyiti",
+       "ipbcreateaccount": "mitena’ patizeng baluhay canghaw",
        "ipbemailban": "satezep misaungayay pabahel imyiyo(email)",
+       "ipbenableautoblock": "lunuk milangat tina misaungayay sazikuz pisaungayan IP puenengan atu sacahamin izikuzay mitanam mikawaway-kalumyiti pisaungayan IP puenengan",
        "ipbsubmit": "milangat tina misaungayay",
        "ipbother": "zuma a tatukian:",
+       "ipboptions": "2 a tuki:2 hours,1 a demiad:1 day,3 a demiad:3 days,1 a lipay:1 week,2 a lipay:2 weeks,1 a lulad:1 month,3 bulad:3 months,6 a bulad:6 months,1 a mihca:1 year, haynisadikud:infinite",
        "ipbhidename": "mikawaway-kalumyiti ayu piazihan-tu-sulit midimut  misaungayay a kalungangan",
        "ipbwatchuser": "miazih tina misaungayay a misaungayay kasabelih atu sasukamu kasabelih niza",
        "ipb-disableusertalk": "mitena’ tina misaungayay i malangat a demiad mikawaway-kalumyiti numisuay a sasukamu kasabelih",
        "badipaddress": "la’cusay a IP puenengan",
        "blockipsuccesssub": "milangat malahci",
        "ipb-blockingself": "amilangat tu kisu haw! malucek kisu amahiza haw?",
+       "ipb-confirmhideuser": "amilangat kisu cacay a misaungayay zumasatu \"midimut\" kya misaungayay, apasatezep paazih sacahamin patahkal i piazihan-tu-sulit atu ibalu nu nasulitan a misaungayay a kalungangan.\ntatenga’ kisu ahatizaan haw?",
+       "ipb-confirmaction": "anu malucekay hinien mahica asa kisu, kapikinsa tu isasa’ay \"{{int:ipb-confirm}}\" langat-pisinga’an.",
        "ipb-edit-dropdown": "malangat a mahicaay nu mikawaway-kalumyiti",
        "ipb-unblock-addr": "mihulak tu langat $1",
        "ipb-unblock": "mihulak malangat misaungayay a kalungangan saca IP puenengan",
        "ipb-blocklist": "ciwsace katukuhayza a langat",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} a paanin",
        "ipb-blocklist-duration-left": "$1 pakawili",
+       "unblockip": "mihulak malangat misaungayay",
+       "unblockiptext": "pisaungay isasa’ay a aazihan cudad apatiku nuayaw malangatay a IP puenengan saca misaungayay a kalungangan a suliten misuped-miala.",
        "ipusubmit": "misipu tina langat",
        "unblocked": "[[User:$1|$1]] a langat mahulak tuway.",
        "unblocked-range": "mahulak tu ku langat $1.",
        "unblocked-id": "misipu tuway $1 a langat.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] mahulak ku langat tuway.",
        "blocklist": "malangatay tu a misaungayay",
        "autoblocklist-submit": "kilim",
        "ipblocklist": "malangatay tu a misaungayay",
        "infiniteblock": "inayi’ u sungliw",
        "expiringblock": "$1 $2 hatinitu",
        "anononlyblock": "wiza dada’ paceba panganganay ku misaungayay",
-       "noautoblockblock": "mapasatezep lunuk  milangat",
+       "noautoblockblock": "lunuk malangat mapasatezep tu",
        "createaccountblock": "canghaw patizeng mapasatezep tuway",
        "emailblock": "mapasatezep imyiyo(email)",
        "blocklist-nousertalk": "la’cus mikawaway-kalumyiti sasukamu kasabelih nu misu",
+       "ipblocklist-empty": "malangat piazihan tu sulit nayi’tu ku canan.",
        "ipblocklist-no-results": "milungucay a IP puenengan saca misaungayay a kalungangan caay henay palangat.",
        "blocklink": "milangat",
        "unblocklink": "mihulak tu langat",
        "change-blocklink": "misumad tu langat",
        "contribslink": "paanin",
        "emaillink": "pabahel imyiyo(email)",
+       "autoblocker": "IP nu misu puenengan izay capi demiad pasaungay ni [[User:$1|$1]] sisa lunuk malangat.\nmilangat $1 a mahicaay ku \"$2\"",
        "blocklogpage": "milangat tu nasulitan nakawawan",
        "blocklog-showlog": "tina misaungayay nasawniay malangat tuway.\nisasa’ay ku malangatay a kiluk sapaazih tu tatenga’ay:",
+       "blocklog-showsuppresslog": "tina misaungayay nasawniay malangat zumasatu midimut.\nisasa’ay sa u satezep paazih kiluk amiazih tu tatenga’ay",
        "blocklogentry": "malangat [[$1]] a kakatukuhan i $2 $3",
        "reblock-logentry": "misumad [[$1]] a langat kakatukuhan katukuh $2 $3",
        "unblocklogentry": "mahulak malangat $1 tuway",
        "block-log-flags-anononly": "wiza dada’ paceba panganganay ku misaungayay",
        "block-log-flags-nocreate": "canghaw patizeng mapasatezep tuway",
-       "block-log-flags-noautoblock": "mapasatezep lunuk  milangat",
+       "block-log-flags-noautoblock": "lunuk malangat mapasatezep tu",
        "block-log-flags-noemail": "mapasatezep imyiyo(email)",
        "block-log-flags-nousertalk": "la’cus mikawaway-kalumyiti sasukamu kasabelih nu misu",
        "block-log-flags-angry-autoblock": "pangaleb lunuk-langat mawawah tuway",
+       "block-log-flags-hiddenname": "midimut misaungayay a kalungangan",
        "range_block_disabled": "mikuwanay kapah patizeng subal milangat a tungus maedeb tuway.",
+       "ipb_expiry_old": "kakatukuhan a demiad mangasiw tuway.",
        "ipb_expiry_temp": "midimut misaungayay a kalungangan langat amana misetin kakatekuhan.",
+       "ipb_hide_invalid": "la’cus satezep paazih tina canghaw; izaw mangasiw {{PLURAL:$1|cacay mikawaway-kalumyiti}} ciniza.",
        "ipb_already_blocked": "malangat \"$1\" tuway.",
        "ipb-needreblock": "$1 mapalangat tu. maydih kisu misetin haw?",
        "ipb-otherblocks-header": "zuma {{PLURAL:$1|milangat}}",
        "ipb_cant_unblock": "mungangaw: inayi’ milangat ID $1, hakay mahulak tu kya langat.",
        "ip_range_invalid": "la’cusay IP subal.",
        "ip_range_toolarge": "caay mahasa milangat kya taliyuk mangasiw /$1.",
-       "proxyblocker": "kutay sefuci-kikay milangat-kikay",
+       "proxyblocker": "kutay sefu-kikay milangat-kikay",
+       "sorbsreason": "numisu a IP u puenengan i {{SITENAME}} pisaungayan  DNSBL mapala mawawah midayli  sefu-kikay",
        "softblockrangesreason": "IP puenengan nu misu ($1) inayi’ mahasa paceba pangangan paanin, pipatalabu.",
+       "xffblockreason": "IP puenengan nu misu pisaungay X-Forwarded-For satangahan, kisu saca pisaungay nu misu a kutay sefu-kikay malangat tuway.\nmalangatay a mahicaay ku:$1",
        "ipbblocked": "izay kisu malangat, sisa la’cus milangat saca mihulak malangatay a zuma  misaungayay",
        "ipbnounblockself": "caay mahasa mihulak malangat tu kisu.",
        "lockdb": "pamutek tu sulu nu kalunasulitan",
+       "unlockdb": "mihulak azihen nasulitan-sulu",
        "lockconfirm": "hang, maydih kaku pamutek kalunasulitan-sulu.",
        "unlockconfirm": "hang, maydih kaku mihulak pamutek sulu nu nasulitan",
        "lockbtn": "pamutek tu sulu nu kalunasulitan",
+       "unlockbtn": "mihulak azihen nasulitan-sulu",
        "locknoconfirm": "caay henay kisu hatizaay malucekay tu mapili’ay atilad",
        "lockdbsuccesssub": "malahci pamutek sulu nu nasulitan tuway",
        "unlockdbsuccesssub": "misipu pamutek tu sulu nu kalunasulitan tuway",
-       "databaselocked": "pamutek tuway ku sulu nu nasulitan.",
-       "databasenotlocked": "caay pamutek henay ku sulu nu nasulitan.",
+       "lockdbsuccesstext": "mamutek tu ku nasulitan-sulu. <br />\namana kapawan anu mahemin midiput pahezek [[Special:UnlockDB| mihulak pamutek ]] nasulitan-sulu.",
+       "lockfilenotwritable": "inayi’ tungus suliten nasulitan-sulu pamutek tu tangan.\ncalay-belih(wangyi) sefu-kikay maydih tu tangan a suliten tungus u azihen atu mihulak pamutek nasulitan-sulu.",
+       "databaselocked": "pamutek tuway ku kalunasulitan-sulu",
+       "databasenotlocked": "caay pamutek henay ku kalunasulitan-sulu",
        "lockedbyandtime": "(nay {{GENDER:$1|$1}} i $2 a $3)",
        "move-page": "milimad $1",
        "move-page-legend": "milimad kasabelih",
+       "movepagetext": "isasa’ay a aazihan cudad kapah sapihica miliyaw pangangan cacay kasabelih, atu milimad mikabu kya kasabelih a sacahamin nazipa’an nasulitan ta izaw baluhay kalungangan a kasabelih.\nmaluman pyawti a kasabelih amiliyaw patatuzu’ kasabelih, payiza pisaungay baluhay pyawti a kasabelih.\npikinsa izaw haw ku [[Special:DoubleRedirects|hatusa miliyaw patatuzu’]] saca [[Special:BrokenRedirects|malepi’ay a miliyaw patatuzu’]] maydih misumad.\nizaw kisu sikining ngay masasiket palalid payiza tatenga’ay a kakitizaan.\n\npiazihen, amahica baluhayay a kasabelih kalungangan masaungay tuway, kyu tina kasabelih <strong> caay </strong> malimad tu zuma kakitizaan, anu caay baluhay kalungangan miliyaw patatuzu’ kasabelih zumasatu inayi’ amahicahica  mikawaway-kalumyiti nazipa’an.\nmahiza sakamu, kapah kisu milimad mungangaw ta zuma kalungangan a kasabelih patiku ta saayaway kalungangan,uyzasa amana mitahpu amahicahica tu ayzaay kasabelih.\n\n<strong> azihen: </strong>\ntina saungay sakay manamuhay kasabelih hakay tadamaan atu talibahalay a sumad;\niayaw nu saungay kaluceki matineng kisu haw hakay kya teluc nay milimad.",
        "movenotallowed": "inayi’ tungus milimad tu tangan.",
        "movenotallowedfile": "inayi’ tungus milimad tu tangan.",
        "cant-move-user-page": "inayi’ tungus kisu milimad misaungayay kasabelih (caay yamalyilu sailuc-kasabelih)",
        "move-watch": "miazih katahkalan atu nabalucu’ kasabelih",
        "movepagebtn": "milimad kasabelih",
        "pagemovedsub": "milimad malaheci tuway",
+       "movepage-moved": "<strong> malimad tuway \"$1\" ta \"$2\"</strong>",
        "movepage-moved-redirect": "patizeng miliyawtu patatuzu’ kasabelih tuway.",
        "movepage-moved-noredirect": "palawpes tuway patizeng miliyaw patatuzu’ kasabelih.",
        "articleexists": "kya kasabelih kalungangan izaw tu, saca napili’ay a kalungangan nu misu la’cus.\npipili’ zuma kalunganga.",
        "movelogpage": "milimad ku nasulitan nakawawan",
        "movelogpagetext": "isasa’ay sa u sacahamin milimad kasabelih a saungay nasulitan piazihan-tu-sulit.",
        "movesubpage": "{{PLURAL:$1|sailuc-kasabelih}}",
+       "movesubpagetext": "tina kasabelih izaw $1 {{PLURAL:$1|sailuc-kasabelih}} mahiza isasa’ay.",
+       "movesubpagetalktext": "patatapalen a sasukamu kasabelih izaw isasa’ay $1 belih{{PLURAL:$1|sailuc-kasabelih}}",
        "movenosubpage": "tina kasabelih inayi’ amahicahica tu sailuc-kasabelih.",
        "movereason": "mahicaay:",
+       "revertmove": "patiku",
+       "delete_and_move_text": "papatuzu’an a kasabelih \"[[:$1]]\" izaw tuway.\nmaydih kisu misipu tu kasabelih i pahezek milimad?",
        "delete_and_move_confirm": "hang, masipu tina kasabelih",
        "delete_and_move_reason": "masipu tuway kya namakay [[$1]] kasabelih kapah milimad",
        "immobile-source-namespace": "la’cus milimad i pangangananay a salaedan \"$1\" a kasabelih.",
        "immobile-target-namespace": "la’cus milimad kasabelih tayza pangangananay a salaedan \"$1\"",
        "immobile-target-namespace-iw": "milimad kasabelih amana pisaungay Interwiki masasiket sanu papatuzu'an.",
-       "immobile-source-page": "tina belih la’cus milimad.",
+       "immobile-source-page": "tina kasabelih la’cus milimad.",
        "immobile-target-page": "la’cus milimad katukuh nabalucu’a satangahan.",
        "bad-target-model": "matuzu’ay a patusukan pisaungay caay kalecaday a lacul  tatudungen misanga’. la’cus miliyaw $1 tu $2.",
+       "imagenocrossnamespace": "amana milimad tangan tayza caay ku nu tangan panganganay a salaedan.",
        "nonfile-cannot-move-to-file": "caay kakapah milimad paceba’ay a tangan tayza tangan  pangangananay a salaedan",
        "imagetypemismatch": "baluhayay a tangan mikilulay-tangan-ngangan caay matatungus kya tangan a nikalahizaan.",
        "imageinvalidfilename": "papatuzu’an a tangan  kalungangan la’cus.",
        "fix-double-redirects": "misabaluh sacahamin patatuzu’ nuayaway a satangahan miliyaw patatuzu’ kasabelih",
        "move-leave-redirect": "miliwan miliyaw patatuzu’ kasabelih",
+       "semiprotectedpagemovewarning": "<strong> azihen:</strong> tina kasabelih madiput tuway, u mapanganganay a misaungayay dada’ kapah milimad. \nisasa’ sa, pabeli capi demiad a nasulitan nazipa’an kya kapah miazih tu tatenga’ay:",
+       "move-over-sharedrepo": "[[:$1]] mamueneng tu i kapulungan tangan-sulu, u tangan a milimad tayni   satangahan a mitahpu tu kapulungan tangan.",
+       "file-exists-sharedrepo": "mipili’ay a tangan kalungangan i kapulungan tangan-sulu masaungay tu ku zuma tangan.\npipili’en ku zuma a kalungangan.",
        "export": "patahkal ku kasabelih",
+       "exporttext": "kapah kisu patahkal matuzu’ay kasabelih saca kayadah belih a sulit atu mikawaway-kalumyiti nazipa’an, pisaungay XML kese a tabu.\nuyniyay tangan kapah pacumud ta zuma pisaungay  MediaWiki a Wiki, micaliw [[Special:Import|pacumud kasabelih]].\n\napatahkal kasabelih, isasa’ nu sulit atilad misulit kasabelih pyawti, cacay pyawti pisaungay cacay tusil, zumasatu pipili’ apatahkal ayzaay a sumad yamalyilu haw sacahamin nazipa’an masumad nu ayaway nasulitan, saca patahkal dada’ ayzaay a sumad atu sazikuzay mikawaway-kalumyiti a cesyun。\n\ni sulit atilad kapah tu kisu pisaungay masasiket, tinaku:[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] dayhiw patahkal kasabelih \"[[{{MediaWiki:Mainpage}}]]\"",
        "exportall": "patahkal sacahamin  kasabelih",
        "exportcuronly": "yamalyilu dada’ ayzaay a sumad nu ayaway, caay yamalyilu lekuay a sumad nu nazipa’an",
+       "exportnohistory": "<strong>piazihen:</strong>zayhan matalaw tu sefu-kikay silahciay munday, mapasatezep tu patahkal ku kasabelih a sacahamin nazipa’an misilit.",
        "exportlistauthors": "yamalyilu paykasabelih lekuay a piazihan-tu-sulit nu paaninay",
        "export-submit": "patahkal",
        "export-addcattext": "pisaungay kakuniza cunusen kasabelih:",
        "allmessages": "sisetyimo palatuh",
        "allmessagesname": "kalungangan",
        "allmessagesdefault": "pataayaw tu kawaw palatuh  a sulit",
+       "allmessagescurrent": "ayzaay palatuh a sulit",
        "allmessages-filter-legend": "kilim",
        "allmessages-filter": "kilul misumad zasatu mikilim:",
        "allmessages-filter-unmodified": "caay henay misumad",
        "thumbnail-more": "patabaki(micuwat)",
        "filemissing": "tangan mahedaw",
        "thumbnail_error": "patizeng sukep tu zunga mungangaw: $1",
+       "thumbnail_error_remote": "namakay $1 mungangaw palatuh\n\n$2",
        "djvu_page_error": "DjVu kasabelih micalapay",
        "djvu_no_xml": "la’cus i DjVu tangan miala XML",
        "thumbnail-temp-create": "la’cus patizeng nanunuz misukep tu zunga tangan",
        "thumbnail-dest-create": "la’cus misuped sukep tu zunga ta pabalucu’an",
+       "thumbnail_invalid_params": "la’cusay a sukep tu zunga aazihen-sulyang",
        "thumbnail_toobigimagearea": "tangan a ditek mangasiw $1",
        "thumbnail_dest_directory": "la’cus patizeng papatuzu’an a dilyikotoling",
        "thumbnail_image-type": "caypi damaenay a zunga nikalahizaan",
        "thumbnail_gd-library": "caay pahezek GD setin: caay kataneng hansu-sausi $1",
        "thumbnail_image-missing": "tangan mahedaw: $1",
+       "thumbnail_image-failure-limit": "capi demiad paazih tina sukep tu zunga pinapian tuway mungangaw ($1 saca yadah ), pisawsawni teneng aca.",
        "import": "pacumuden kasabelih",
        "importinterwiki": "nay zuma wiki pacumud",
        "import-interwiki-sourcewiki": "saangangan Wiki:",
        "import-interwiki-history": "kopi tina kasabelih sacahamin nazipa’an masumad nu ayaway",
        "import-interwiki-templates": "yamalyilu sacahamin  taazihan mitudung",
        "import-interwiki-submit": "pacumud",
+       "import-mapping-default": "pacumud tayza pataayaw tu kawaw kakitizaan",
        "import-mapping-namespace": "pacumud i pangangananay a salaedan:",
        "import-mapping-subpage": "pacumud sapa isasa’ay kasabelih a sailuc-kasabelih:",
        "import-upload-filename": "kalungangan nu tangan:",
        "import-comment": "pacunus sakacaay kapawan:",
+       "importtext": "pisaungay [[Special:Export|patahkal sakaluk]] nay Wiki patahkal ku tangan.\nmisuped i tinnaw nu misu zumasatu patapabaw itini.",
+       "importstart": "pacumud tayza pataayaw tu kawaw kakitizaan",
        "import-revision-count": "$1 {{PLURAL:$1|masumad nu ayaway}}",
        "importnopages": "inayi’ mapacumuday a kasabelih.",
+       "imported-log-entries": "pacumud tuway $1 {{PLURAL:$1|nasulitan-nazipa’an kasacacay}}",
        "importfailed": "pacumud mungangaw:<nowiki>$1</nowiki>",
        "importunknownsource": "caykapulita a nikalahizaan nu pacumud a saangangan",
        "importcantopen": "la’cusay miwawah pacumuday a tangan",
        "importbadinterwiki": "la’cusay a interwiki masasiket",
        "importsuccess": "pahezek tuway pacumud!",
+       "importnosources": "caay satetek amahicahica mapacumuday a wiki saangangan zumasatu maedeben pisaungay nazipa’an nasulitan patapabaw sasahicaan.",
        "importnofile": "caay henay papabaw pacumud tangan.",
+       "importuploaderrorsize": "patapabaw pacumud tangan mungangaw.\ntangan hacica-tabaki mangasiw mahasa patapabaw hacica-tabaki.",
+       "importuploaderrorpartial": "patapabaw pacumud tu tangan mungangaw.\npatapabaw dada’ liyad a tangan.",
+       "importuploaderrortemp": "patapabaw pacumud tu tangan mungangaw.\nmahedaw nanunuz kalunasulita-emic",
        "import-parse-failure": "XML pacumud tingalaw mungangaw",
        "import-noarticle": "inayi’ amahicahica kapah pacumuday a kasabelih!",
        "import-nonewrevisions": "inayi’ pacumud amahicahica tu masumad nu ayaway (masumad nu ayaway izaw tuway, saca zayhan mungangaw sekipo)",
        "import-invalid-interwiki": "amana pacumud nay matuzu’ay a Wiki.",
        "import-error-edit": "inayi’ tungus kisu mikawaway-kalumyiti kasabelih \"$1\", la’cus micumud",
        "import-error-create": "inayi’ tungus kisu patizeng kasabelih \"$1\", la’cus micumud.",
+       "import-error-interwiki": "kasabelih \"$1\" kalungangan maliwan hizantu mala hekalay masasiket (interwiki) pisaungay, la’cus pacumud.",
        "import-error-special": "kasabelih \"$1\" tungusay nu caay mahasa kasabelih a sazumaay azihen pangangananay a salaedan, la’cus  pacumud.",
        "import-error-invalid": "kasabelih \"$1\" pacumud tina Wiki a kalungangan la’cus, la’cus pacumud.",
+       "import-error-bad-location": "tina a Wiki a kasabelih \"$1\" caay pidama pisaungay tu lacul tatudungen misanga’ $3, masumad nu ayaway $2 la’cus misuped tayza i kasabelih.",
+       "import-options-wrong": "{{PLURAL:$2|mapili’ay}} mungangaw: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "matuzu’ay a limit-kasabelih satangahan la’cus.",
        "import-rootpage-nosubpage": "pangangananay a salaedann \"$1\" a lamit kasabelih caay mahasa sailuc-kasabelih",
        "importlogpage": "pacumuden nasulitan nazipa’an",
        "import-logentry-interwiki-detail": "nay $2 pacumud tu $1 {{PLURAL:$1|masumad nu ayaway}}",
        "javascripttest": "JavaScript mitanam",
        "javascripttest-pagetext-unknownaction": "caykapulitay saungay \"$1\"",
+       "javascripttest-qunit-intro": "piazih tu tatenga’ay mediawiki.org a [$1 mitanam buhci tu kamu cudad].",
        "tooltip-pt-userpage": "{{GENDER:|misaungayay nu misu}} kasabelih",
        "tooltip-pt-anonuserpage": "imahini kisu ku isasa’ay a kika mikawaway-kalumyiti tina IP puenengan a misaungayay kasabelih.",
        "tooltip-pt-mytalk": "{{GENDER:|misuay }}sasukamu a kasabelih",
        "tooltip-pt-createaccount": "taneng kami pauuh kisuan panganganen tu cacay canghaw atu patalabu, anu caay ku tabakiay a pisaungay.",
        "tooltip-ca-talk": "matatengil tu mahizaay lacul nu kasabelih",
        "tooltip-ca-edit": "mikawaway-kalumyiti uyni a kasabelih",
+       "tooltip-ca-addsection": "miteka tu cacay baluhay ngatu",
        "tooltip-ca-viewsource": "uyni kasabelih madiputay tuway.\nkapah kisu miciwsace tuyni kasabelih sakatizeng bangu",
        "tooltip-ca-history": "uyini kasabelih nasawniay a sumad",
        "tooltip-ca-protect": "midiput tina kasabelih",
        "tooltip-ca-delete": "misipu tina kasabelih",
        "tooltip-ca-undelete": "patiku tina kasabelih tu ayaw setyitase nu masipu",
        "tooltip-ca-move": "milimad tina kasabelih",
-       "tooltip-ca-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
+       "tooltip-ca-watch": "micunus tina kasabelih tayza numisuay a miazihay a piazihan-tu-sulit",
        "tooltip-ca-unwatch": "tina kasabelih nay misipu ilabu nu miazihay a piazihan-tu-sulit",
        "tooltip-search": "kilim {{SITENAME}}",
        "tooltip-search-go": "amahica milihiza tuyni kalungangan malalanepay kasabelih izaay tu, taayawen ku tiza kasabelih",
        "tooltip-preview": "kay iayaw nu pisuped miazih tu nu misuay nisumad.",
        "tooltip-diff": "paazih hica sa kisu labuay a nisumadan",
        "tooltip-compareselectedversions": "piazih tina kasabelih yatatusa mapili’ay a sasizuma nu sumad",
-       "tooltip-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
+       "tooltip-watch": "micunus tina kasabelih tayza numisuay a miazihay a piazihan-tu-sulit",
        "tooltip-watchlistedit-normal-submit": "misipu satangahan",
        "tooltip-watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
        "tooltip-recreate": "namahicahica masipu caay haw, miliyaw patizeng kya kasabelih",
        "tooltip-undo": "\"patiku\" kapah tu patiku tuyni mikawaway tu kalumyiti payni pataayaway miazih muse miwawah mikawaway tu kalumyiti aazihan cudad, saka caay cayaw nu labu micunus mahicaay.",
        "tooltip-preferences-save": "pisuped tu setin nu kanamuhan",
        "tooltip-summary": "kapisulitan apuyu’ay a pecu’ nu lacul",
+       "anonymous": "{{SITENAME}} a paceba pangangan {{PLURAL:$1|misaungayay}}",
        "siteuser": "{{SITENAME}} misaungayay $1",
        "anonuser": "{{SITENAME}} paceba panganganay a misaungayay $1",
        "othercontribs": "tina kasabelih nay $1 sapaanin.",
        "others": "zuma",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|misaungayay}} $1",
+       "anonusers": "{{SITENAME}} paceba pangangan {{PLURAL:$2|misaungayay}} $1",
        "creditspage": "kasabelih kasakumi nu misayingaay",
        "nocredits": "tina kasabelih inayi’ kasakumi nu misayingaay cesyun.",
        "spamprotectiontitle": "misapili’ a cengse nu babakahen a sulit",
+       "spamprotectiontext": "misulitan a sulit lacul nu misu mapasatezepan misuped tu tatuni’ palatuh misebsebay a cengse, hakay zayhan misu a lacul yamalyilu tu malangat ku hekal masasiket.",
        "spamprotectionmatch": "isasa’ay a lacul mateka’ babakahen a sulit sebseb cengse:$1",
        "spambot_username": "misadimel MediaWiki babakahen a sulit",
        "spam_reverting": "patiku tayza caay yamalyilu $1 masasiket a sabaluhay masumad nu ayaway",
        "pageinfo-header-restrictions": "kasabelih midiput",
        "pageinfo-header-properties": "susin nu kasabelih",
        "pageinfo-display-title": "paazih tu satangahan",
+       "pageinfo-default-sort": "pataayaw tu kawaw pasilsilay a sasakawawen",
        "pageinfo-length": "kasabelih a tanaya’ (wyiyincu)",
        "pageinfo-article-id": "kasabelih ID",
        "pageinfo-language": "kasabelih lacul a kamu",
        "pageinfo-robot-noindex": "amana",
        "pageinfo-watchers": "kasabelih miazihay a nikayadah",
        "pageinfo-visiting-watchers": "mazizaw capi demiad mikawaway-kalumyiti a kasabelih miazihay kinapina",
+       "pageinfo-few-watchers": "ma'ngadis mangalep $1 {{PLURAL:$1|misisipay}}",
        "pageinfo-few-visiting-watchers": "miazih capi demiad mikawaway-kalumyiti a misaungayay hakay ku miazihay a misaungayay.",
        "pageinfo-redirects-name": "patuzu’ tina kasabelih a miliyaw patatuzu’ kasabelih nikayadah",
        "pageinfo-subpages-name": "tina belih a sailuc-kasabelih nikayadah",
+       "pageinfo-subpages-value": "$1 ($2 ke{{PLURAL:$2|miliyaw patatuzau’}}; $3 {{PLURAL:$3|caay piliyaw patatuzau’}})",
        "pageinfo-firstuser": "kasabelih patizengay",
        "pageinfo-firsttime": "patizeng demiad nu kasabelih",
        "pageinfo-lastuser": "capiay a mikawaway-kalumyiti",
        "pageinfo-recent-edits": "capi demiad mikawaway-kalumyiti kinapina (naayaw $1 ilabu)",
        "pageinfo-recent-authors": "capiay masacudaday a nikayadah",
        "pageinfo-magic-words": "mosu {{PLURAL:$1|sulit}} ($1)",
+       "pageinfo-hidden-categories": "midimut {{PLURAL:$1|kakuniza}} ($1)",
+       "pageinfo-templates": "nicaliwan{{PLURAL:$1|taazihan-mitudung}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|kasabelih}} nanicaliwan i ($1)",
        "pageinfo-toolboxlink": "kasabelih cesyun",
        "pageinfo-redirectsto-info": "katinengan",
        "pageinfo-contentpage": "miasip papi lacul kasabelih",
        "pageinfo-category-files": "tangan nikayadah",
        "pageinfo-user-id": "misaungayay ID",
        "markaspatrolleddiff": "silusi natayza mikibi tuway",
+       "markaspatrolledtext": "silusi tina belih ku tayza-mikibi",
        "markaspatrolledtext-file": "silusi tina tangan baziyong tu tayza-mikibi",
        "markedaspatrolled": "silusi natayza mikibi tuway",
        "markedaspatrolledtext": "masilusi mipili’ay a sumad [[:$1]] ku tayza-mikibiay.",
        "rcpatroldisabled": "mapasatezep tu ku capi-demiad misumad tayza-mikibi",
        "rcpatroldisabledtext": "sabaluhay misumad tayza-mikibi a sasahicaan mapasatezep tu ayza.",
+       "markedaspatrollederror": "la’cus silusi tayza tu makibi",
        "markedaspatrollederrortext": "maydih kisu matuzu’ apasilusi tayza-mikibi sumad.",
        "markedaspatrollederror-noautopatrol": "la’cus kisu misumad namasanga’ nu misu pasilusi ku tayza-mikibi.",
        "markedaspatrollednotify": "kasabelih $1 a sumad silusi tayza-mikibi tuway.",
        "patrol-log-page": "tayza mikibi nasulitan nazipa’an",
        "patrol-log-header": "uyniyan sa u tayza-mikibi masumaday baziyong a nasulitan-nazipa’an.",
        "log-show-hide-patrol": "$1 tayza mikibi nasulitan nazipa’an",
-       "log-show-hide-tag": "$1 aazihen a paya nasulitan nazipa’an",
+       "log-show-hide-tag": "$1 tazihan-paya nasulitan nazipa’an",
        "confirm-markpatrolled-button": "malucekay",
        "confirm-markpatrolled-top": "silusi $2 a sumad $3 ku tayza-mikibi?",
        "deletedrevision": "masipu malumanay misumad nu ayaway $1",
        "filedelete-archive-read-only": "calay-belih(wangyi) sefu-kikay inayi’ malangat-misupet dilyikotoling \"$1\" suliten a tungus.",
        "previousdiff": "← malumanay a mikawaway tu kalumyiti",
        "nextdiff": "baluhayay mikawaway tu kalumyit →",
+       "imagemaxsize": "zunga pinalu hacica tabaki kelec:<br /><em>(saungay i tangan sapuelac kasabelih)</em>",
        "thumbsize": "sukep tu zunga hacica-tabaki:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ku kasabelih}}",
        "file-info": "tangan hacica-tabaki: $1, MIME nikalahizaan: $2",
        "file-info-gif-looped": "palalacalen",
        "file-info-gif-frames": "$1 {{PLURAL:$1|kulit sapat}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|kulit sapat}}",
+       "file-no-thumb-animation": "<strong>azihen: kyu sitaneng mikelec, tina tangan sukep tu zunga nayi’ ku laheci nu tunghwa</strong>",
        "newimages": "baluhay tangan a sulu nu zunga",
        "newimages-summary": "uyni sazumaay a kasabelih paazih sabaluhay patapabaw a tangan",
        "newimages-legend": "kilim",
        "newimages-user": "IP puenengan saca misaungayay a kalungangan",
        "newimages-newbies": "paazih a cacay baluhay canghaw a paanin",
        "newimages-showbots": "paazih nay tademaw-kikay patapabaw a tangan",
+       "newimages-hidepatrolled": "midimut natayza tu mikibi patudud",
        "noimages": "inayi’ amahicahica tu zunga.",
        "gallery-slideshow-toggle": "ketun mibalic sukep tu zunga",
        "ilsubmit": "kilim",
        "seconds-ago": "ayaw $1 {{PLURAL:$1|a beti}}",
        "monday-at": "sakacacay a demiad nu lipay i$1",
        "tuesday-at": "sakatusa a demied nu lipay i $1",
-       "wednesday-at": "saka tulu i $1",
-       "thursday-at": "sakasepat i $1",
+       "wednesday-at": "sakatulu a demiad nu lipay i $1",
+       "thursday-at": "sakasepat a demied nu lipay i $1",
        "friday-at": "sakalima a demied nu lipay i $1",
        "saturday-at": "sakaenem a demiad nu lipay i $1",
        "sunday-at": "pilipayan i $1",
        "exif-samplesperpixel": "syangsu nikayadah",
        "exif-planarconfiguration": "kalunasulitan misilsil",
        "exif-ycbcrsubsampling": "takuliway pasumad sumanahay sakatusa mipiri’",
+       "exif-ycbcrpositioning": "likat atu takelal kakitizaan",
        "exif-xresolution": "sasuala katingalaw",
        "exif-yresolution": "mitelekay katingalaw",
        "exif-stripoffsets": "iga kalunasulitan kakitizaan",
        "exif-rowsperstrip": "cacay ku kaus papina ku tusil",
+       "exif-stripbytecounts": "pay piepian mipecec tay wyiyincu sulyang",
        "exif-jpeginterchangeformat": "JPEG SOI misiwit",
        "exif-jpeginterchangeformatlength": "JPEG kalunasulitan wyiyincu",
        "exif-whitepoint": "sangelacay hacica-kulit",
        "exif-primarychromaticities": "sausi sulyang nu kulit",
+       "exif-ycbcrcoefficients": "kalukulit salaedan miliyaw cicen  sisu",
        "exif-referenceblackwhite": "umeniay-sangelacay miazih tu tatenga’ay nikayadah",
        "exif-datetime": "tangan misumaday a demiad atu tuki",
        "exif-imagedescription": "satangahan nu iga",
        "exif-pixelxdimension": "zunga nu hacica-ahebal",
        "exif-pixelydimension": "zunga nu hacica-takalaw",
        "exif-usercomment": "misaungayay a buhci tu kamu",
+       "exif-relatedsoundfile": "mahizaay nu suniay a tangan",
        "exif-datetimeoriginal": "kalunasulitan masangaay’ a demiad atu tuki",
        "exif-datetimedigitized": "suwyihwaay a demiad atu tuki",
        "exif-subsectime": "DateTime saba-beti",
        "exif-subjectarea": "sausi a kakitizaan",
        "exif-flashenergy": "sabelabelatay a tinghuy u icelang",
        "exif-focalplanexresolution": "X couciaw kimpi’ katingalaw",
+       "exif-focalplaneyresolution": "Y couciaw kimpi’ katingalaw",
        "exif-focalplaneresolutionunit": "edil-sanat a sapat katingalaw  tatebanan nu nisulitan",
        "exif-subjectlocation": "kakitizaan nu satangahan",
        "exif-exposureindex": "mapaedil a sulyang",
        "exif-sharpness": "kacidem",
        "exif-devicesettingdescription": "sakaluk setin sapuelac",
        "exif-subjectdistancerange": "baat nu tatizengan a liwliw",
+       "exif-imageuniqueid": "kinacacay sakatineng-kodo nu sasing",
        "exif-gpsversionid": "GPS baziyong nu aazihen a paya",
        "exif-gpslatituderef": "pyiwyi asaca nanwyi",
        "exif-gpslongituderef": "tongcing asaca sicing",
        "exif-gpsdop": "miditek a tatungus",
        "exif-gpsspeedref": "saduba’ kalamkam a sacacaycacay",
        "exif-gpsspeed": "GPS pizawis-sakaluk saduba’ kalamkam",
+       "exif-gpstrackref": "milimad pasayzaan miazih tu tatenga’ay sulyang",
+       "exif-gpsimgdirectionref": "pasayzaan nu iga miazih tu tatenga’ay sulyang",
        "exif-gpsmapdatum": "pisaungay ulaulangan miditek a kalunasulitan",
+       "exif-gpsdestlatituderef": "pametekan wyitu miazih tu tatenga’ay sulyang",
        "exif-gpsdestlatitude": "pabalucu’an a wyitu",
-       "exif-gpsdestlongituderef": "pabalucu’an a cintu",
+       "exif-gpsdestlongituderef": "pamutekan cintu miazih tu tatenga’ay sulyang",
+       "exif-gpsdestbearingref": "pamutekan sasakawawen miazih tu tatenga’ay sulyang",
+       "exif-gpsdestdistanceref": "pamutekan baat miazih tu tatenga’ay sulyang",
        "exif-gpsprocessingmethod": "GPS saungay sasakawawen kalungangan",
+       "exif-gpsareainformation": "GPS subal kalungangan",
        "exif-gpsdatestamp": "GPS a demiad",
        "exif-gpsdifferential": "GPS chafen misumad",
        "exif-jpegfilecomment": "JPEG tangan pacunus sakacaay kapawan",
        "exif-keywords": "aazihen dulit",
        "exif-worldregioncreated": "zunga masasing a kakitizaan",
        "exif-countrycreated": "zunga masasingan a kanatal",
+       "exif-countrycodecreated": "zunga masasing kanatal kodo",
        "exif-provinceorstatecreated": "yakuwanan a sasing",
        "exif-citycreated": "yatukay a sasing",
        "exif-sublocationcreated": "zunga masasing tukay pulita kahicelaan",
-       "exif-worldregiondest": "paazih tu subal nu kitakit",
+       "exif-worldregiondest": "paazih ku subal nu kitakit",
        "exif-countrydest": "paazih tu kanatal",
        "exif-countrycodedest": "paazih kanatal a kodo",
        "exif-provinceorstatedest": "paazih seng asaca cou",
        "exif-serialnumber": "sasasing salaylay a banggu",
        "exif-cameraownername": "sasasing nizaay",
        "exif-label": "aazihen paya",
+       "exif-datetimemetadata": "sazikuzay a demiad sapisumad nu kalunasulitan misaheci",
        "exif-nickname": "caykaw tatengaay a zunga kalungangan",
        "exif-rightscertificate": "nisanga’an niza tu tungus a kawaw nu makuwanay a pincen",
        "exif-copyrighted": "nisanga’an niza tu tungus a kawaw setyitase",
        "exif-copyrightowner": "nizaay nisanga’an tu tungus a kawaw",
        "exif-usageterms": "mamaala a cedang",
        "exif-webstatement": "nabalucu'an nu i telay nisanga’an niza tu tungus a kawaw",
-       "exif-originaldocumentid": "kinacacay mapulitaay a kodo nu saayaway a cudad",
+       "exif-originaldocumentid": "kinacacay sakatineng-kodo nu saayaway a cudad",
        "exif-licenseurl": "nisanga’an niza tu tungus a kawaw pabeli tu kinli  masasiket",
        "exif-morepermissionsurl": "paliyuh pabeli tu kinli a cesyun",
        "exif-attributionurl": "anu misaliyaw pisaungay tina nalimaan, pisasiket tu",
        "exif-unknowndate": "caay kapulita ku demiad",
        "exif-orientation-1": "tatungus",
        "exif-orientation-2": "mabelih tu zazay",
+       "exif-orientation-3": "malineng 180°",
        "exif-orientation-4": "mabelih tu mitelekay",
        "exif-orientation-5": "cuis tu culil nu tuki malineng 90° atu pitelekay mibelih",
        "exif-orientation-7": "duduc tu culil nu tuki malineng 90° atu mitelekay mibelih",
        "exif-exposureprogram-7": "muse nu tademaw sasing (sapiicapiay a sasing,sanat inayi’ itada)",
        "exif-exposureprogram-8": "makaazihay muse (i makaazihay a sasing,paedil-sanat i zikuz)",
        "exif-subjectdistance-value": "$1 mi",
+       "exif-meteringmode-0": "caay kapulita",
        "exif-meteringmode-1": "lalet",
        "exif-meteringmode-2": "pikuwanan pacunus lalet",
        "exif-meteringmode-3": "baniyut-ditek",
        "exif-meteringmode-5": "muse",
        "exif-meteringmode-6": "liyad",
        "exif-meteringmode-255": "zuma",
+       "exif-lightsource-0": "caay kapulita",
        "exif-lightsource-1": "likat",
        "exif-lightsource-2": "inkwang a tinghuy",
-       "exif-lightsource-3": "useteng-tinghuy (白熾燈)",
+       "exif-lightsource-3": "useteng-tinghuy",
        "exif-lightsource-4": "sabelabelatay a tinghuy",
        "exif-lightsource-9": "cilalah a demiad",
        "exif-lightsource-10": "kenutan",
        "exif-lightsource-255": "zuma katahkalan nu likat",
        "exif-flash-fired-0": "sabelabelatay a tinghui caay henay miwawah",
        "exif-flash-fired-1": "sabelabelatay a tinghui miwawah tuway",
+       "exif-flash-return-0": "inayi’ belabelatan-kikay a sasahicaan",
        "exif-flash-return-2": "sabelabela-sedap-sakaluk caay sedap tu edil",
        "exif-flash-return-3": "sabelabelatay sedap-sakaluk sedap tu edil",
        "exif-flash-mode-1": "pacici sabelabelatay tinghuy mawawah",
        "exif-sharpness-0": "tatungus",
        "exif-sharpness-1": "pu’nel",
        "exif-sharpness-2": "takalaw",
+       "exif-subjectdistancerange-0": "caay kapulita",
        "exif-subjectdistancerange-1": "ciyuci",
        "exif-subjectdistancerange-2": "pakatepalay a azih",
        "exif-subjectdistancerange-3": "pakabatatay a azih",
        "exif-gpsdestdistance-m": "inli",
        "exif-gpsdestdistance-n": "hayli",
        "exif-gpsdop-excellent": "tada kapah ($1)",
+       "exif-gpsdop-good": "kapahay ($1)",
+       "exif-gpsdop-moderate": "hucu ($1)",
        "exif-gpsdop-poor": "la’cus ($1)",
        "exif-objectcycle-a": "namalamam a cacay",
        "exif-objectcycle-p": "nakalahukan a cacay",
        "exif-ycbcrpositioning-1": "teban",
        "exif-ycbcrpositioning-2": "palecad miala tu maaziahan",
        "exif-dc-contributor": "paaninay tu kalusasing",
+       "exif-dc-coverage": "myitiay ahebal nu hekal",
        "exif-dc-date": "demiad",
        "exif-dc-publisher": "insacay",
        "exif-dc-relation": "mahizaay u myiti",
        "exif-dc-type": "myiti nikalahizaan",
        "exif-rating-rejected": "kakaian",
        "exif-isospeedratings-overflow": "satabakien tu 65535",
+       "exif-iimcategory-ace": "nalimaanay, lalangawan atu limulak",
        "exif-iimcategory-clj": "mungangaw atu hulic",
+       "exif-iimcategory-dis": "labades atu malitemuhay",
        "exif-iimcategory-fin": "kyizay atu syubay",
        "exif-iimcategory-edu": "pasubana’ay a kawaw",
        "exif-iimcategory-evn": "liwliw",
        "exif-urgency-other": "misaungayay pakuniza misanga’ maluayaw tungus ($1)",
        "namespacesall": "hamin",
        "monthsall": "hamin",
+       "confirmemail": "milucekay tu imyiyo(email) puengan",
+       "confirmemail_send": "imyiyo(email) malucekay-kodo",
+       "confirmemail_sent": "malucekay mapatigami tuway.",
+       "confirmemail_invalid": "la’cus malucekay-kodo.\nkya kodo hakay mangasiw tuway.",
+       "confirmemail_needlogin": "$1 pilucek tu misuay a imyiyo(email) puenengan nu misu.",
        "confirmemail_loggedin": "malucekay tu misuay imyiyo(email) puengengan.",
        "confirmemail_subject": "{{SITENAME}} imyiyo(email) puenengan malucekay tuway",
        "confirmemail_invalidated": "palawpes tu imyiyo(email) puenengan palucekay",
+       "invalidateemail": "palawpes imyiyo(email) malucekay tuway",
        "notificationemail_subject_changed": "{{SITENAME}} panganganay a imyiyo(email) puenengan masumad tuway",
+       "scarytranscludedisabled": "[Interwiki miliyaw kodo caay ka saungayen]",
        "scarytranscludefailed": "[taazihan-mitudung $1 maasip  mungangaw]",
        "scarytranscludefailed-httpstatus": "[taazihan-mitudung $1 maasip mungangaw: HTTP $2]",
+       "scarytranscludetoolong": "[URL tada tanayu’]",
+       "deletedwhileediting": "<strong> patalaw:</strong>tinakasabelih i kisuwan miteka mikawaway-kalumyiti nazikuzan a masipu!",
        "recreate": "miliyaw miteka patizeng",
        "confirm-purge-title": "misipu tina kasabelih",
        "confirm_purge_button": "malucekay",
        "confirm-purge-top": "amisipu tina kasabelih a kalamkam-miala haw?",
        "confirm-purge-bottom": "palawpes kasabelih amalawpes kasabelih a kyasiw nasulitan zumasatu pacici paazih capi demiad kasabelih masumad nu ayaway.",
        "confirm-watch-button": "malucekay",
+       "confirm-watch-top": "micunus tina kasabelih tayza numisuay a miazihay a piazihan-tu-sulit?",
        "confirm-unwatch-button": "malucekay",
        "confirm-unwatch-top": "nay misuay a miazihay a piazihan-tu-sulit sa misipu tina kasabelih?",
        "confirm-rollback-button": "malucekay",
+       "confirm-rollback-top": "patiku mikawaway-kalumyiti tu tina kasabelih?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "ayaway cacay a belih",
        "imgmultipagenext": "zikuzan a belih →",
        "autoredircomment": "kasabelih miliyaw patatuzu’ tu [[$1]]",
        "autosumm-new": "napatizeng tu kasabelih, lacul ku \"$1\"",
        "autosumm-newblank": "patizeng nayi’ ku cacan a kasabelih",
+       "lag-warn-normal": "tina piazihan tu sulit hakay caay paazih tu macapiay demiad $1 {{PLURAL:$1| widi}}labu’ay a sumad.",
+       "lag-warn-high": "nanu nasulitan-sulu patukil mautang, tina piazihan tu sulit hakay caayay paazih capi demiad $1 {{PLURAL:$1|widi}}ilabu’ay misumad.",
        "watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
        "watchlistedit-normal-legend": "nay miazihay a piazihan-tu-sulit misipu satangahan",
        "watchlistedit-normal-submit": "misipu satangahan",
+       "watchlistedit-normal-done": "masipu tuway nay miazihay a piazihan-tu-sulit nu misu {{PLURAL:$1|$1}} satangahan",
        "watchlistedit-raw-title": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
        "watchlistedit-raw-done": "misabaluh tuway miazihay a piazihan-tu-sulit nu misu.",
+       "watchlistedit-raw-added": "macunus tu {{PLURAL:$1|atangahan}}",
+       "watchlistedit-raw-removed": "masipu tu {{PLURAL:$1|satangahan}}:",
        "watchlistedit-clear-title": "misipu miazihay a piazihan tu sulit",
        "watchlistedit-clear-explain": "amisipu nu misuay a sacahamin a satangahan nay miazihay a piazihan-tu-sulit",
        "watchlistedit-clear-submit": "palawpes amin miazihay a piazihan-tu-sulit (la’cus patiku)",
        "watchlistedit-clear-done": "malawpes tu miazihay a piazihan-tu-sulit nu misu.",
+       "watchlistedit-clear-removed": "masipu tu {{PLURAL:$1|satangahan}}:",
        "watchlistedit-too-many": "iyadah apaazihay a kasabelih itini.",
        "watchlisttools-clear": "misipu miazihay a piazihan tu sulit",
        "watchlisttools-view": "ciwsace mahizaay a sumad",
        "watchlisttools-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
        "timezone-local": "itizaay",
+       "duplicate-displaytitle": "<strong>patalaw:</strong> paazih satangahan \"$2\" mitahpu ayaway paazih satangahan \"$1\".",
+       "invalid-indicator-name": "<strong> mungangaw:</strong> kasabelih setyitase micuzu’ay tu kawaw a <code>name</code> susin amana inayi’",
        "version": "baziyong",
        "version-extensions": "malacul tu sacunusan a sakaluk",
        "version-skins": "malacul tu nuhekalan",
        "version-other": "zuma",
        "version-mediahandlers": "myiti saungayay a sakaluk",
        "version-hooks": "kulawid",
+       "version-parser-extensiontags": "patingalaway-kikay micuwat tu taazihen-paya",
        "version-parser-function-hooks": "kamu-sakilul mapulita sapisausi makulawit",
        "version-hook-name": "kalawid a kalungangan",
        "version-hook-subscribedby": "pangangan",
        "version-ext-colheader-credits": "masacudaday",
        "version-license-title": "$1 a sapabeli tu kinli a cedang",
        "version-license-not-found": "caay katepa tina sacunusay a pulita sapabeli tu kinli a cedang cesyun.",
-       "version-credits-title": "$1 a kasakumi nu misayingaay",
+       "version-credits-title": "$1 a kasakumi nu paaninay",
        "version-credits-not-found": "caay katepa tina sacunusay a pulita kasakumi nu misayingaay  cesyun",
        "version-poweredby-others": "zuma",
        "version-poweredby-translators": "translatewiki.net mibelihay",
+       "version-license-info": "MediaWiki ku paybalucu’ zwanti; kapah kisu sausi paybalucu’ zwanti kikingkay patahkalay a GNU hina kapulungan sapabeli tu kinli a cedang kakilulen, amiliyaw patiyak atu / saca amisumad tina cengse; namahicahica kisu sausi ku tina sapabeli tu kinli a cedang a sakatusa baziyong saca (kapah kisu mipili’ nay kisu) izikuzay a amahicahica baziyong.\n\ntina cengse patiyakay a patusukan sa ku maydih kapah nipabeli saedap, uyzasa caay mitelung amahicahica sikinin mihusiw; zumasatu caay milimek sakay matatungus-pacakayay saca uzumaay sasahicaan a matatungusay zasatu sikinin. kahica nu kawaw piazihan GNU hina kapulungan pabeli tu kinli.\n\nkanca kisu maladay tina cengse milayap [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU hina kapulungan sapabeli tu kinli a cedang a mikilulay-cudad]; amahica inayi’, pipatigami patakus paybalucu’ zwanti kikingkay, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, saca [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ipabaw nu calay miasip].",
        "version-software": "malacul tu ku zwanti",
        "version-software-product": "nasang’ay a tuutuud",
        "version-software-version": "baziyong",
        "version-entrypoints": "sacumud URL",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "malaculay a cengse-sulu",
        "version-libraries-library": "sulu nu cengse",
        "version-libraries-version": "baziyong",
        "version-libraries-license": "sapabeli tu kinli a cedang",
        "version-libraries-description": "sapuelac",
        "version-libraries-authors": "masacudaday",
        "redirect": "kilulen tangan, misaungayay, kasabelih, masumad nu ayaway saca nasulitan nazipa’an ID amiliyaw patatuzu’",
+       "redirect-summary": "tina sazumaay a kasabelih taneng sapihica miliyaw patatuzu’ ta tangan (matuzu’ay tangan kalungangan), kasabelih (matuzu’ay masumad nu ayaway ID saca kasabelih ID), misaungayay kasabelih (matuzu’ay misaungayay ID), saca  nasulitan nazipa’an kasacacay (matuzu’ay  nazipa’an ID). ahicaen:[[{{#Special:Redirect}}/file/Example.jpg]],\n[[{{#Special:Redirect}}/page/64308]],\n[[{{#Special:Redirect}}/revision/328429]], \n[[{{#Special:Redirect}}/user/101]] saca [[{{#Special:Redirect}}/logid/186]]",
        "redirect-submit": "mileku",
        "redirect-lookup": "palalitemuh tu kawaw:",
        "redirect-value": "sulyang:",
        "redirect-user": "misaungayay ID",
        "redirect-page": "kasabelih ID",
+       "redirect-revision": "misumad tu kasabelih ID",
        "redirect-file": "kalungangan nu tangan",
        "redirect-logid": "nasulitan nazipa’an ID",
        "redirect-not-exists": "caykatepa ku sulyang",
        "fileduplicatesearch-summary": "sausi macamel-sulyang (Hash) amikilim misaliyaway a tangan.",
        "fileduplicatesearch-filename": "kalungangan nu tangan:",
        "fileduplicatesearch-submit": "kilim",
+       "fileduplicatesearch-info": "$1 × $2 syangsu <br />tangan pinalu’ hacica tabaki’: $3<br />MIME  nikalahizaan: $4",
        "fileduplicatesearch-result-1": "tangan $1 inayi’ misaliyaw tu tangan.",
+       "fileduplicatesearch-result-n": "tina tangan \"$1\" izaw {{PLURAL:$2|1 malecad misaliyaw|$2 malecad misaliyaw}}.",
        "fileduplicatesearch-noresults": "inayi’ ku kalungangan nu \"$1\" a tangan.",
        "specialpages": "sazumaay a kasabelih",
        "specialpages-group-maintenance": "aazihen a cudad nu midiputay",
        "specialpages-group-other": "sazumaay cidek a kasabelih",
        "specialpages-group-login": "patalabu / panganganen ku canghaw",
+       "specialpages-group-changes": "capi misumad atu nasulitan nazipa’an",
+       "specialpages-group-media": "myiti patapabaw atu aazihen cudad",
        "specialpages-group-users": "misaungayay atu tungus",
        "specialpages-group-highuse": "sawsawniay a kasabelih",
        "specialpages-group-pages": "piazihan tu sulit nu kasabelih",
        "specialpages-group-pagetools": "kasabelih sakaluk",
        "specialpages-group-wiki": "kalunasulitan atu sakaluk",
        "specialpages-group-redirects": "miliyaw patatuzu’ mahizaay sazumaay a kasabelih",
+       "specialpages-group-spam": "satena’ tu babakahen a sulit sakaluk",
        "specialpages-group-developer": "saayaway miteka a misakakawaway sakaluk",
        "blankpage": "salengacay a kasabelih",
+       "intentionallyblankpage": "kasabelih padetengan a miliwan.",
        "tags": "kapah misumad tu tazihan a paya",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
        "tags-title": "aazihen a paya",
        "tags-tag": "aazihen a paya  kalungangan",
        "tags-display-header": "ilabu nu misumad nasulitan-nazipa’an paazih sasakawawen",
+       "tags-description-header": "malekuay mibuhci tu kamu",
        "tags-source-header": "saangangan",
        "tags-active-header": "miwawah",
        "tags-actions-header": "saungay",
        "tags-deactivate": "mapasatezep",
        "tags-hitcount": "$1 {{PLURAL:$1|misumad}}",
        "tags-manage-no-permission": "inayi’ tungus kisu mikuwan numisumad aazihen a paya.",
+       "tags-manage-blocked": "la’cus kisu i {{GENDER:$1|kisu}} malangat a demiad sanay mikuwan misumaday a aazihen-paya.",
        "tags-create-heading": "patizeng baluhay aazihen a paya",
        "tags-create-explanation": "i pataayaw tu kawaw a pulita sa, baluhay patizengay a aazihen-paya kapah masaungayay atu kikay-tademaw pisaungay.",
        "tags-create-tag-name": "aazihen a paya  kalungangan:",
        "tags-create-no-name": "manakanca kisu matuzu’ay cacay aazihen a paya kalungangan.",
        "tags-create-invalid-title-chars": "aazihen-paya kalungangan caay yamalyilu la’cus misaungayay kasabelih satangahan a tatebanan-nisulitan",
        "tags-create-already-exists": "aazihen a paya \"$1\" izaw tu.",
+       "tags-create-warnings-above": "mitanam patizeng aazihen-paya \"$1\" tatukian mahica isasa’ {{PLURAL:$2|patalaw}}:",
        "tags-create-warnings-below": "apalalid patizeng aazihen a paya kisu haw?",
        "tags-delete-title": "misipu tu aazihen a paya",
        "tags-delete-explanation-initial": "imahini amisipu kisu tu aazihen-paya \"$1\" nay kalunasulitan-sulu.",
+       "tags-delete-explanation-in-use": "aazihen-paya amakay ayzaay imahini pisaungay a {{PLURAL:$2|$2 masumad nu ayaway saca nazipa’annasulitan nazipa’an kasacacay|$2 sumad nu ayaway saca nazipa’an kasacacay}} misipu.",
        "tags-delete-reason": "mahicaay:",
        "tags-delete-submit": "la’cus palawpes misipu tina aazihen a paya",
        "tags-delete-not-allowed": "la’cus misipu nay sacunus misaheciay a aazihen-paya, anu... kya sacunus mahasa tuway",
        "tags-delete-not-found": "aazihen a paya \"$1\" inayi’.",
+       "tags-delete-warnings-after-delete": "aazihen-paya \"$1\" masipu tuway, nika matahkal isasa’ {{PLURAL:$2|patalaw}}",
        "tags-delete-no-permission": "inayi’ tungus masipu aazihen a paya kisu.",
        "tags-activate-title": "miteka aazihen a paya",
        "tags-activate-question": "amiteka kisu tu aazihen a paya \"$1\".",
        "tags-deactivate-reason": "mahicaay:",
        "tags-deactivate-not-allowed": "la’cus mapasatezep aazihen a paya \"$1\".",
        "tags-apply-no-permission": "inayi’ tungus kisu papulung nu misuay a sumad caedung aazihen-paya.",
+       "tags-apply-blocked": "la’cus kisu i {{GENDER:$1|kisu}} malangat tu sa caedung misumad aazihen-paya nu misu a sumad.",
        "tags-apply-not-allowed-one": "caay mahasa lima-saungay caedung aazihen-paya \"$1\".",
+       "tags-apply-not-allowed-multi": "caay mahasa lima-saungay caedung isasa’ay {{PLURAL:$2|aazihen-paya}}:$1",
        "tags-update-no-permission": "inayi’ tungus kisu micunus atu misipu amahicahica tu akuakuay a masumad nu ayaway atu nasulitan nazipa’an kasacacay a aazihen-paya.",
+       "tags-update-blocked": "la’cus kisu i {{GENDER:$1|kisu}} malangatay a demiad sanay misipu masumaday a aazihen-paya.",
        "tags-update-add-not-allowed-one": "caay mahasa lima-saungay pacunus aazihen-paya \"$1\".",
+       "tags-update-add-not-allowed-multi": "caay mahasa lima-saungay micunus isasa’ay {{PLURAL:$2|aazihen-paya}}:$1",
        "tags-update-remove-not-allowed-one": "caay mahasa lima-saungay misipu aazihen-paya \"$1\".",
+       "tags-update-remove-not-allowed-multi": "caay mahasa lima-saungay misipu isasa’ay {{PLURAL:$2|aazihen-paya}}:$1",
        "tags-edit-title": "aazihen a paya mikawaway-kalumyiti",
        "tags-edit-manage-link": "aazihen a paya nu kuwan",
+       "tags-edit-revision-selected": "mapili’ tuway [[:$2]] tebanay{{PLURAL:$1|cacayay|yadahay}} masumad nu ayaway",
        "tags-edit-logentry-selected": "mapili’ {{PLURAL:$1|cacay|yadah}} nasulitan nazipa’an saungay nu binawlan.",
+       "tags-edit-revision-legend": "micunus saca misipu tina aazihen-paya nay {{PLURAL:$1|tina masumad nu ayaway|hamin $1 ku masumad nu ayaway}}",
+       "tags-edit-logentry-legend": "micunus saca misipu tina aazihen-paya maka {{PLURAL:$1|tina nasulitan nazipa’an kasacacay|sacahamin $1 ku nazipa’an kasacacay}}",
+       "tags-edit-existing-tags": "izaway tu a taazihen-paya:",
        "tags-edit-existing-tags-none": "<em>inayi’</em>",
        "tags-edit-new-tags": "baluhay aazihen a paya:",
-       "tags-edit-add": "micunus uyniyay aazihen a paya:",
+       "tags-edit-add": "micunus uyniyay taazihen-paya:",
+       "tags-edit-remove": "misipu uyniyay taazihen-paya:",
+       "tags-edit-remove-all-tags": "(misipu sacahamin taazihen-paya)",
        "tags-edit-chosen-placeholder": "mipili’ hatizaay aazihen a paya",
        "tags-edit-chosen-no-results": "inayi’ aazihen a paya matatungus sakacucek",
        "tags-edit-reason": "mahicaay:",
        "tags-edit-revision-submit": "caedung kya sumad katukuh i {{PLURAL:$1|tina misumad nu ayaway|$1 masumad nu ayaway}}",
+       "tags-edit-logentry-submit": "caedung sumad ta {{PLURAL:$1|tina nazipa’an kasacacay|$1 nasulitan nazipa’an kasacacay }}",
        "tags-edit-success": "macaedung tu ku sasumad.",
        "tags-edit-failure": "misumad la’cus micaedung:\n$1",
+       "tags-edit-nooldid-title": "la’cusay a pamutekan masumad nu ayaway",
        "tags-edit-nooldid-text": "inayi’ kisu matuzu’ amahicahica amiteka tina sasahicaan a papatuzu'an masumad nu ayaway saca matuzu’ay sumad inayi’.",
        "tags-edit-none-selected": "anu inayi’ i pipili’ cacay amicunusay saca amisipuay a aazihen-paya.",
        "comparepages": "sasutili’ay a kasabelih",
        "compare-rev1": "misumad nu ayaway 1",
        "compare-rev2": "misumad nu ayaway 2",
        "compare-submit": "sasutili’ay",
+       "compare-invalid-title": "matuzu’ay satangahan la’cus.",
        "compare-title-not-exists": "matuzu’ay a satangah nu misu inayi’.",
        "compare-revision-not-exists": "matuzu’ay a sumad nu misu inayi’.",
        "diff-form": "sasizuma",
        "permanentlink": "saluimengay misiket",
        "dberr-problems": "ahicanaca! tina calay-kakacawan(wangcan) tahkal tuway hatizaay sitanengay a munday.",
+       "dberr-again": "sawsawni pinapina ku widi pitanam aca.",
+       "dberr-info": "(la’cus misuped-miala kalunasulitan-sulu: $1)",
        "dberr-info-hidden": "(la’cus misuped-miala sulu nu nasulitan)",
        "dberr-usegoogle": "kapah tu kisu mitanam ilabu nu kakatekuhan pisaungay Google kilim.",
        "dberr-outofdate": "azihen, napatizeng nu heni pikiliman tu nisulitan miasip a lacul hakay caay kawbaluhayay.",
        "htmlform-selectorother-other": "zuma",
        "htmlform-no": "caay",
        "htmlform-yes": "hang",
+       "htmlform-chosen-placeholder": "kapipili’tu cacay mapiliay",
        "htmlform-cloner-create": "ngalepen tu cunus",
        "htmlform-cloner-delete": "milimad",
        "htmlform-cloner-required": "anu inayi’ i manakanca suliten cacay kalunasulitan.",
        "htmlform-date-placeholder": "YYYY-MM-DD",
        "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+       "htmlform-date-invalid": "matuzu’ kisu a sulyang caay kakapah ku taazihan a demiad, pitanam misaungay YYYY-MM-DD kese",
+       "htmlform-time-invalid": "matuzu’ay a sulyang nu misu caay kacacay kapah taazihan a tuki, pitanam misaungay HH:MM:SS kese",
        "htmlform-date-toolow": "matuzu’ay a sulyang nu misu mahasaay a demiad i ayaw nu $1.",
-       "htmlform-date-toohigh": "matuzu’ay a sulyang nu misu mahasaay a demiad i ayaw nu $1.",
+       "htmlform-date-toohigh": "matuzu’ay a sulyang i zikuz nu mahasaay a demiad $1.",
        "htmlform-time-toolow": "namatuzu’ kisu a sulyang i ayaw nu saayaw mahasa a tuki $1.",
        "htmlform-time-toohigh": "namituzu’ kisu a sulyang i zikuz nu sazikuz mahasa a tuki $1.",
        "htmlform-datetime-toolow": "matuzu’ay a sulyangnu misu iayaw saayaw mahasa a demiad atu tuki $1.",
        "htmlform-title-not-creatable": "\"$1\" amana patizeng kasabelih a satangahan",
        "htmlform-title-not-exists": "$1 inayi’",
        "htmlform-user-not-exists": "<strong>$1</strong> inayi’",
+       "htmlform-user-not-valid": "<strong>$1</strong> caay kakapahay a misaungayay a kalungangan.",
        "logentry-delete-delete": "$1 {{GENDER:$2|masiputu}} kasabelih $3",
+       "logentry-delete-delete_redir": "$1 micaliw ku miliyaw misulit {{GENDER:$2|masipu tu}} miliyaw patatuzu’ $3",
        "logentry-delete-restore": "$1{{GENDER:$2|patiku}} kasabelih $3($4)",
        "restore-count-files": "{{PLURAL:$1|1 tangan}}",
+       "logentry-delete-event": "ilabu nu $1 {{GENDER:$2|masumad tuway}} $3 {{PLURAL:$5|1 nazipa’an|$5 nasulitan nazipa’an}} a  maazihay:$4",
+       "logentry-delete-revision": "ilabu nu $1 {{GENDER:$2|masumad tuway}} $3 {{PLURAL:$5|1 nazipa’an|$5 nasulitan nazipa’an}} a maazihay:$4",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|masumad tuway}} kasabelih $3 masumad nu ayaway a maazihay",
        "logentry-suppress-delete": "$1 {{GENDER:$2|misatezep paazih tuway}} kasabelih $3",
+       "logentry-suppress-event-legacy": "$1 {{GENDER:$2|milimekan misumad}} $3 nasulitan nazipa’an a maazihay",
+       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|masumad tu}} kasabelih $3 labu’ masumad nu ayaway a maazihay",
        "revdelete-content-hid": "madimut tu ku lacul",
+       "revdelete-summary-hid": "madimut mikawaway-kalumyiti pecu’ nu lacul",
+       "revdelete-uname-hid": "midimut misaungayay a kalungangan",
        "revdelete-content-unhid": "palawpes midimut tu lacul",
        "revdelete-summary-unhid": "palawpes midimut  mikawaway-kalumyiti pecu’ nu lacul",
        "revdelete-uname-unhid": "palawpes midimut misaungayay a kalungangan",
        "revdelete-restricted": "caedung mikuwanay a kelec tuway",
        "revdelete-unrestricted": "masipu tu ku mikuwanay a kelec",
+       "logentry-block-unblock": "$1 {{GENDER:$2|mahulaktu ku langat}} {{GENDER:$4|$3}}",
        "logentry-import-upload": "$1 nay tangan patapabaw {{GENDER:$2|pacumud}} $3",
+       "logentry-import-upload-details": "$1 pisaungay tangan patapabaw tuway {{GENDER:$2|pacumud}} $3 ($4 {{PLURAL:$4| misumad nu ayaway}})",
+       "logentry-import-interwiki": "$1 namakay zuma wiki {{GENDER:$2|pacumud}} $3",
+       "logentry-merge-merge": "$1 pala $3 {{GENDER:$2|mikabu}} ta $4 (masumad nu ayaway baziyong ta $5)",
        "logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|malimad tuway}} kasabelih $3 katukuh $4, caay pisubelid miliyaw patatuzau’",
        "logentry-move-move_redir": "$1 malimad kasabelih $3 tu $4 zumasatu mitahpu nuayaway miliyaw patatuzau’",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|mapasilusi}} kasabelih $3 a sumad $4 ku mapatayza tu mikibi",
+       "logentry-patrol-patrol-auto": "$1 malunuk tu {{GENDER:$2| silusi }} kasabelih $3 sumad $4 apatayza mikibi tu.",
        "logentry-newusers-newusers": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
        "logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
        "logentry-newusers-create2": "$1 {{GENDER:$2|mapatizeng tu}} misaungayay canghaw $3",
+       "logentry-newusers-byemail": "$1 {{GENDER:$2|mapatizeng tu}} misaungayay canghaw $3 atu u imyiyo(email) sapatakus a mima",
        "logentry-newusers-autocreate": "lunuk {{GENDER:$2|patizeng}} misaungayay a canghaw $1",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|malimad tuway}} midiput setin nay $4 ta $3",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|masipu tuway}} $3 a midiput",
        "logentry-protect-protect": "$1 {{GENDER:$2|madiput tuway}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|madiput}} $3 $4 [patatusul]",
+       "logentry-protect-modify": "$1 {{GENDER:$2|masumad tuway}} $3 a midiputay a kasaselal $4",
+       "logentry-protect-modify-cascade": "$1 {{GENDER:$2|masumad tuway}} $3 a midiputay tu kasatindud $4 [patatusul]",
+       "logentry-rights-rights": "$1 {{GENDER:$2|masumad tuway}} {{GENDER:$6|$3}} a luyaluy tatungus sakawaway nay $4 mala $5",
+       "logentry-rights-autopromote": "$1 malunuk {{GENDER:$2|pacakat}} nay $4 mala $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|patapabaw tuway}} baluhay baziyong a $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|masayacay tuway}} $3",
-       "log-name-managetags": "aazihan-paya kuwan tu nasulitan",
+       "log-name-managetags": "tazihan-paya kuwan tu nasulitan",
        "logentry-managetags-create": "$1 {{GENDER:$2|mapatizeng yuway}} aazihen-paya \"$4\"",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|misaungay tuway}} aazihen-paya \"$4\" pabeli tu misaungayay atu kikay-tademaw pisaungay",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|mapasatezep tuway}} aazihen-paya \"$4\" pabeli misaungayay atu kikay-tademaw pisaungay",
        "log-name-tag": "aazihen a paya nasulitan nazipa’an",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|masipu tuway}} {{PLURAL:$9|aazihen-paya}} $8 nay kasabelih $3  sumad $4.",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|masipu tuway}} {{PLURAL:$9|aazihen-paya}} $8 nay nasulitan nazipa’an kasacacay $3 a sumad $5.",
        "rightsnone": "(nayi’)",
        "rightslogentry-temporary-group": "$1 (nanunuz, katukuh $2)",
        "feedback-adding": "imahini micunus nabalucu’ hwidubaku tayza kasabelih...",
        "feedback-back": "tatiku",
+       "feedback-bugcheck": "kapah! kinsaen nabalucu’an nu misu mapasilsil tu [$1 matinengay a munday] haw?",
        "feedback-bugnew": "makinsa tu kaku. patubeli baluhay a munday",
        "feedback-cancel": "palawpes",
        "feedback-close": "malahecitu",
        "feedback-external-bug-report-button": "munday nu patubeli",
        "feedback-dialog-title": "patahkal tu kamu mihwidubaku",
        "feedback-error1": "mungangaw: la’cus sapulita API maminay a heci",
+       "feedback-error2": "mungangaw: mikawaway-kalumyiti mungangaw",
        "feedback-error3": "mungangaw: API inayi’ patukil",
        "feedback-error4": "mungangaw: la’cus patiyak tu matuzu’ay a nabalucu’ hwidubaku satangahan",
        "feedback-message": "palatuh:",
        "feedback-subject": "satangahan:",
        "feedback-submit": "patayzaan",
+       "feedback-termsofuse": "patubeli kaku kilulen mamaala a cedang nipabeli nabalucu’an hwidubaku.",
        "feedback-thanks": "kukay! nu misu a nabalucu’an hwidubaku mapatiyak tu kasabelih \"[$2 $1]\"",
        "feedback-thanks-title": "kukay tisuwanan!",
        "feedback-useragent": "misaungayay tayli:",
        "searchsuggest-search": "kilim {{SITENAME}}",
-       "api-error-badtoken": "labuay a mungangaw: mima-sacukcuk mungangaw.",
+       "api-error-badtoken": "labuay a mungangaw: mima-sabuhat mungangaw",
        "api-error-emptypage": "la’cus mahasa patizeng inayi’ ku cacan a kasabelih.",
        "api-error-publishfailed": "nu labuay a mungangaw: sefu’kikay patiyak nanunuz mungangaw.",
        "api-error-stashfailed": "nu labuay a mungangaw: sefu’kikay suped nanunuz mungangaw.",
        "api-error-unknown-warning": "caykapulitaay patalaw: \"$1\".",
-       "api-error-unknownerror": "caay kapulita ku mungangaw: \"$1\".",
+       "api-error-unknownerror": "caykapulitaay mungangaw: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|a beti}}",
        "duration-minutes": "$1 {{PLURAL:$1|widi}}",
        "duration-hours": "$1 {{PLURAL:$1|tuki}}",
+       "duration-days": "$1 {{PLURAL:$1|a demiad}}",
        "duration-weeks": "$1 {{PLURAL:$1|a lipas}}",
        "duration-years": "$1 {{PLURAL:$1|a mihca}}",
+       "duration-decades": "$1{{PLURAL:$1|0 a mihca}}",
        "duration-centuries": "$1 {{PLURAL:$1|lasubu a mihca}}",
        "duration-millennia": "$1 {{PLURAL:$1|malebut a mihca}}",
        "rotate-comment": "duduc tu culil nu tuki malineng a zunga $1 {{PLURAL:$1|tu}}",
        "limitreport-ppgeneratednodes": "pataayaw-saungay-sakaluk masanga’ ciyityin kinapina",
        "limitreport-postexpandincludesize": "namicuwat nicaliwan hacica-tabaki",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|wyiyincu}}",
+       "limitreport-templateargumentsize": "taazihan mitudung aazihen-sulyang hacica tabaki",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|wyiyincu}}",
        "limitreport-expansiondepth": "satakalaw micuwat ilabu",
+       "limitreport-expensivefunctioncount": "sayadah-eluc tingalaw-sakaluk hansu kinapina",
        "expandtemplates": "micuwat tu taazihan a mitudung",
        "expand_templates_title": "ulic satangahan, pabeli {{FULLPAGENAME}} atu zuma pisaungay:",
        "expand_templates_input": "suliten:",
        "action-pagelang": "misumad kasabelih a kamu",
        "log-name-pagelang": "kamu misumad a nasulitan nazipa’an",
        "log-description-pagelang": "tina kasabelih sa ku kasabelih kamu sumad nasulitan-nazipa’an.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|masumad tuway}} kasabelih $3 kamuay tayza $4 katukuh $5",
+       "default-skin-not-found": "ayah! kisu i <code dir=\"ltr\">$wgDefaultSkin</code> misetinay a Wiki  pataayaw tu kawaw nuhekalan <code>$1</code>  la’cus pisaungay.\n\nnilacul laylay nu misu kanca yamalyilu isasa’ay a {{PLURAL:$4| nuhekalan}}. piazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Manual:Skin_configuration misaungay a cudad: nuhekalan a setin] kya maala hicaen {{PLURAL:$4|miwawah nuhekalan zumasatu misetin pataayaw tu kawaw sulyang}}a cesyun .\n\n$2\n\n; amahica kisu nasawni milacul tuway MediaWiki:\n: hakay kisu ku pisaungay git saca kakilul micaliw yuensma-kodo pisaungay zuma sakaluk milacul, u malecekay tina pulita。pitanam milacul  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org a nuhekalan dilyikotoling] a liyad nuhekalan pisaungay isasa’ay a sasakawawen:\n:* patasasa’ [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball milacul cengse], kya cengse yamalyilu yadahay nuhekalan atu sacunus. kapah kisu kopi atu mizepit i <code>skins/</code>dilyikotoling. \n:* nay [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] patasasa’ tekeday a nuhekalan tarball.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins pisaungay Git patasasa’ nuhekalan].\n: amahica kisu ku MediaWiki a saayaway miteka a misakakawaway,mahizaay kanca caay lawilawnumisuay a git suped-sulu.\n\n; amahica kisu nasawni pacakat MediaWiki:\n: MediaWiki 1.24 atu sasutili’ay baluhayay a baziyong caaytu lunuk miwawah malacul tu nuhekalan (piazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery misaungay a cuad: nuhekalan lunuk mikilim]). kapah kisu isasa’ {{PLURAL:$5|silsil}}pazepit i <code>LocalSettings.php</code> ngay miwawah {{PLURAL:$5| sacahamin }} ayzasa malacul tuway a {{PLURAL:$5|nuhekalan}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; amahica kisu nasawni misumad <code>LocalSettings.php</code>:\n: pisaliyaw milucek kisu misulit a nuhekalan  kalungangan mungangaw haw?",
+       "default-skin-not-found-no-skins": "ayah! kisu i <code>$wgDefaultSkin</code> misetinay a Wiki pataayaw tu kawaw nuhekalan <code>$1</code> la’cus pisaungay.\n\ncaay milacul kisu amahicahica a nuhekalan.\n\n; amahica kisu nasawni milacul tuway saca pacakat tuway MediaWiki:\n: hakay kisu ku pisaungay git saca kakilul micaliw yuensma-kodo pisaungay zuma sakaluk milacul, u malecekay tina pulita. MediaWiki 1.24 saca sasutili’ay baluhayay a baziyong i angangan suped-sulu caay yamalyilu amahicahica a nuhekalan. pitanam milacul [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org a nuhekalan dilyikotoling] a liyad nuhekalan pisaungay isasa’ay a sasakawawen:\n:* patasasa’ [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball milacul cengse], kya cengse yamalyilu yadahay nuhekalan atu sacunus. kapah kisu kopi atu mizepit i <code>skins/</code>dilyikotoling.\n:* nay [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] patasasa’ tekeday a nuhekalan  tarball.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins  pisaungay Git patasasa’ nuhekalan].\n: amahica kisu ku MediaWiki a saayaway miteka a misakakawaway, mahizaay kanca caay lawilawnumisuay a git suped-sulu。piazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration misaungay a cudad: nuhekalan setin] ngay maala hicaen miwawah  nuhekalan zumasatu misetin pataayaw tu kawaw sulyang a cesyun.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (mawawah tu)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>mapasatezep tu</strong>)",
        "mediastatistics": "myiti sausi cesyun",
+       "mediastatistics-summary": "patapabawan tu ku tangan nikalahizaan u sausi ku cesyun, tina aazihen cudad dada’ sausi tangan sefu-kikay baluhay baziyong, caay yamalyilu maluman atu masipuay tu baziyong.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 wyiyincu}} ($2; $3%)",
+       "mediastatistics-allbytes": "sacahamin tangan a pulung tangan pinalu hacica-tabaki: {{PLURAL:$1|$1 wyiyincu}} ($2).",
        "mediastatistics-table-mimetype": "MIME nikalahizaan",
        "mediastatistics-table-extensions": "kapah saungay a mikilulay a ngangan nu tangan",
        "mediastatistics-table-count": "tangan nikayadah",
        "mediastatistics-header-executable": "kapah tu mileku",
        "mediastatistics-header-archive": "piepian mipecec tuway a kese",
        "mediastatistics-header-total": "sacahamin a tangan",
+       "json-warn-trailing-comma": "masipu tuway $1 JSON sazikuzay {{PLURAL:$1|widi-bacu}}",
        "json-error-unknown": "JSON simunday. mungangaw: $1",
        "json-error-depth": "mangasiw tu ilabu kelec nu sakalud",
        "json-error-state-mismatch": "la’cus saca kese caay tatenga’ay a JSON",
        "json-error-ctrl-char": "misimaw tatebanan-nisulitan mungangaw, hakay caay tatenga’ay tu sakababalic a banggu",
        "json-error-syntax": "sakilul nu kamu mungangaw",
        "json-error-utf8": "UTF-8 tatebanan-nisulitan a kese caay tatenga’ay, hakay caay tatenga’ kya  sakababalic a banggu",
+       "json-error-recursion": "ilabu nu kalunasulitan izaw cacay saca yadah musaliyuliyud sulyang nu tanengnengan masakababalic tu banggu",
        "json-error-inf-or-nan": "i kalunasulitan izaw ku cacay saca yadayay a NAN saca INF sulyang masakababalic a banggu",
        "json-error-unsupported-type": "isasa’ay a kalunasulitan kakuniza la’cus sakababalic tu banggu",
        "headline-anchor-title": "misasiket tina tusil",
        "mw-widgets-dateinput-no-date": "caayhen mipili’ tu demiad",
        "mw-widgets-mediasearch-noresults": "caykatepa ku heci.",
        "mw-widgets-titleinput-description-new-page": "kasabelih nayai’ tu",
+       "mw-widgets-titleinput-description-redirect": "miliyaw tazuma tu $1",
        "mw-widgets-categoryselector-add-category-placeholder": "micunus tu kakuniza...",
        "mw-widgets-usersmultiselect-placeholder": "micunus sangaleben...",
        "sessionmanager-tie": "la’cus mikabu kayadahay a milunguc zencen nikalahizaan:$1",
        "sessionprovider-generic": "$1 kasasiketan",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "palana’an nu cookie amikasasiket a ngatu",
+       "sessionprovider-nocookies": "Cookie sasahicaan hakay maedeb tu, pilucek kisu misumad miwawah Cookie sasahicaan zumasatu miliyaw misaungay.",
        "randomrootpage": "kakibalucu’ lamitay kasabelih",
        "log-action-filter-block": "milangat nikalahizaan:",
        "log-action-filter-contentmodel": "lacul tatudungen-misanga’ misumad nikalahizaan:",
        "log-action-filter-import": "pacumud nikalahizaan:",
        "log-action-filter-managetags": "nikalahizaan nu aazihen a paya mikuwanay a saungay:",
        "log-action-filter-move": "milimad nikalahizaan:",
+       "log-action-filter-newusers": "canghaw patizengay a nikalahizaan:",
        "log-action-filter-patrol": "tayza mikibi nikalahizaan:",
        "log-action-filter-protect": "midiput nikalahizaan:",
+       "log-action-filter-rights": "tungus misumad a nikalahizaan:",
+       "log-action-filter-suppress": "satezep paazih nikalahizaan:",
        "log-action-filter-upload": "nikalahizaan nu patapabaw:",
        "log-action-filter-all": "hamin",
        "log-action-filter-block-block": "milangat",
        "log-action-filter-managetags-create": "patizeng aazihen paya",
        "log-action-filter-managetags-delete": "misipu aazihen a paya",
        "log-action-filter-managetags-activate": "aazihen a paya miteka",
-       "log-action-filter-managetags-deactivate": "aazihan-paya palawpesen ku pisaungay",
+       "log-action-filter-managetags-deactivate": "tazihan-paya palawpesen ku pisaungay",
        "log-action-filter-move-move": "milimad caay maliyaw misulit miliyaw patatuzu’",
        "log-action-filter-move-move_redir": "milimad miliyaw misulit miliyawtu tazuma nay",
        "log-action-filter-newusers-create": "nay paceba panganganay a misaungayay patizeng",
        "authmanager-userdoesnotexist": "misaungayay canghaw \"$1\" caay henay pangangan.",
        "authmanager-userlogin-remembermypassword-help": "apabalucu’en ku mima amiala ku tanaya’ay a kasasiketan tuki.",
        "authmanager-username-help": "zencen a misaungayay a kalungangan.",
+       "authmanager-password-help": "sapizencen a mima.",
        "authmanager-domain-help": "ihekal zencenay a calay-subal(wangyi).",
        "authmanager-retype-help": "misult mima kinacacay henay kya malucek.",
        "authmanager-email-label": "imyiyo(email)",
        "authprovider-confirmlink-failed": "canghaw masasiket caay kahamin malahci: $1",
        "authprovider-confirmlink-ok-help": "paazih masasiket mungangaw a palatuh sa palalid.",
        "authprovider-resetpass-skip-label": "sekipo",
+       "authprovider-resetpass-skip-help": "takud han miliyaw patizeng tu mima.",
        "authform-nosession-login": "malahci tu mizencen, uyzasa saazihay-sakaluk nu misu la’cus \"i balucu’en\" patalabu cesyun.\n\n$1",
        "authform-nosession-signup": "panganganen tu ku canghaw, uyzasa saazihay-sakaluk nu misu la’cus \"i balucu’en\" patalabu cesyun.\n\n$1",
        "authform-newtoken": "mahedaw mima-sacukcuk. $1",
        "authform-wrongtoken": "mima-sacukcuk mungangaw",
        "specialpage-securitylevel-not-allowed-title": "amana",
        "specialpage-securitylevel-not-allowed": "ahicanaca, caay mahasa pisaungay tina belih kisu, u nanu ID nu misu caay henay sawantan.",
+       "authpage-cannot-login": "la’cus miteka patalabu.",
        "authpage-cannot-login-continue": "la’cus milalid patalabu, kasasiketan nu misu hakay mautang tuway.",
        "authpage-cannot-create": "la’cus miteka patizeng tu canghaw.",
        "authpage-cannot-create-continue": "la’cus palalid patizeng tu canghaw. kasasiketan nu misu mahiza mautang.",
        "unlinkaccounts": "palawpes masasiketay a canghaw",
        "unlinkaccounts-success": "malawpes masasiket tu canghaw.",
        "authenticationdatachange-ignored": "zencen kalunasulitan a sumad caay henay milisimet, hakay inayi’ misetin  nipabeliay?",
+       "userjsispublic": "kapiazihen: JavaScript bisac a kasabelih kapah u zumaay ku misaungayay amiciwsace, amana yamalyilu ku dimut kalunasulitan.",
+       "usercssispublic": "piazihen: CSS sailuc-kasabelih kapah miciwsace ku zuma misaungayay, amana yamalyilu silangiwngiway a kalunasulitan.",
        "restrictionsfield-badip": "la’cusay a IP puenengan saca subal: $1",
        "restrictionsfield-label": "mahasaay a subal nu IP:",
+       "restrictionsfield-help": "cacay IP puenengan saca CIDR tatungus cacay a silsil, amiwawah sacahamin tatungus kapah pisaungay:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "masumad nu ayaway $1",
        "pageid": "kasabelih ID $1",
        "rawhtml-notallowed": "&lt;html&gt; aazihen-paya la’cus pisaungay i hekal nu habutud kasabelih."
index 5473afe..d1e4b14 100644 (file)
@@ -65,7 +65,6 @@
        "underline-never": "Nǣfre",
        "underline-default": "Scinnes oþþe webbsēcendes gewuna",
        "editfont-style": "Stæfcynd for þǣre wrītunge on þǣre adihtunge mearce:",
-       "editfont-default": "Webbsēcendes gewunelicu gesetedness",
        "editfont-monospace": "Ānes gemetes gebrǣded stæfcynd",
        "editfont-sansserif": "Tægellēas stæfcynd",
        "editfont-serif": "Tægelbǣre stæfcynd",
        "cannotdelete": "Se tramet oþðe ymele \"$1\" ne meahte beon ahwiten. Meahtlice hæfþ adihtere ær hine astricon.",
        "cannotdelete-title": "Ne cann forlēosan þone tramet \"$1\"",
        "badtitle": "Nā genge titul",
+       "title-invalid-too-long": "Se trametnama þone þū wilt is to lang.  He sceal bēon ne langor þon $1 {{PLURAL:$1|byte|bytan}} in UTF-8 rūncræfte.",
+       "title-invalid-leading-colon": "Se trametnama þone þū wilt beclypeþ unregolfæsten twafealden prican æt his orde.",
        "querypage-no-updates": "Ednīwunga for þissum tramete ne sindon nū gelīfeda. \nCȳþþu hēr ne biþ hraðe ednīwod.",
        "viewsource": "Sēon fruman",
        "viewsource-title": "Fruman for $1 sēon",
        "booksources-search-legend": "Sēcan bōcfruman",
        "booksources-search": "Sēcan",
        "booksources-text": "Niðer is getæl hlencena tō ōðrum webstedum þe cīpaþ nīwa and gebrocena bēc, and wēninga hæbben ēac mā cȳþþu ymbe bēc þe þu sēcst:",
+       "booksources-invalid-isbn": "Se ISBN gegiefen geþynceþ me nis genge; hawe hine for gedwilde in bewritunge fram þæm fruman.",
+       "magiclink-tracking-isbn": "Trametas ða nyttiað ISBN drycræftige hlencas",
        "specialloguserlabel": "Gelǣstende brūcend:",
        "speciallogtitlelabel": "Ende (trametes titul oþþe brūcendes nama):",
        "log": "Ealdhord",
index 4734ca2..2958327 100644 (file)
@@ -13,6 +13,7 @@
        "tog-hideminor": "हाल के बदलाव सॆं छोटॊ बदलाव छुपाबॊ",
        "tog-hidepatrolled": "निगरानी मॆं करलॊ गेलॊ संपादनॊ कॆ हाल के बदलावॊ मॆं नै देखाबॊ",
        "tog-newpageshidepatrolled": "निगरानी वाला पन्ना कॆ नया पन्ने वाला सूची मॆं नै देखाबॊ",
+       "tog-hidecategorization": "पृष्ठ के श्रेणीकरण छिपाबौ",
        "tog-extendwatchlist": "ध्यान सूची मॆं सब्भे बदलाव दर्शाबॊ, सिर्फ हाले के नै",
        "tog-usenewrc": "हाल मं॑ होलऽ परिवर्तनऽ आरू ध्यानसूची मं॑ परिवर्तनऽ क॑ पृष्ठ अनुसार समूहऽ मं॑ बाँटऽ",
        "tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करॊ",
@@ -23,6 +24,7 @@
        "tog-watchdefault": "हमरऽ संपादित करलऽ पन्ना आरू फाइल क॑ हमरऽ ध्यानसूची मं॑ रखियै",
        "tog-watchmoves": "हमरऽ हटैलऽ पन्ना आरू फाइल क॑ हमरऽ ध्यानसूची मं॑ रखियै",
        "tog-watchdeletion": "हमरऽ मेटैलऽ पन्ना आरू फाइल क॑ हमरऽ ध्यानसूची मं॑ रखियै",
+       "tog-watchuploads": "हमरौ नया फ़ाइल क॑ हमरौ ध्यानसूची में डालौ ।",
        "tog-watchrollback": "हमरऽ द्वारा प्रत्यापन्न (रोलबैक) करलऽ गेलऽ पन्ना सब क॑ हमरऽ ध्यानसूची मंं॑ जोड़ऽ",
        "tog-minordefault": "सब्भे सम्पादनऽ क॑ छोटऽ बदलाव के रूप मं॑ चिह्नित करऽ",
        "tog-previewontop": "एडिट बॉक्स के उपर झलक दिखाबॊ",
@@ -32,9 +34,9 @@
        "tog-enotifminoredits": "पन्ना आरू फाइल मं॑ तनी-मनी बदलाव लेली भी हमरा इ-मेल भेजऽ",
        "tog-enotifrevealaddr": "अधिसूचना ईमेल मं॑ हमरऽ ईमेल पता दर्शाबऽ",
        "tog-shownumberswatching": "ध्यान रखै वाला यूजर के संख्या देखाबऽ",
-       "tog-oldsig": "वरà¥\8dतमान à¤¦à¤¸à¤\96त:",
+       "tog-oldsig": "à¤\86पनà¥\91 à¤\95à¥\87 à¤µà¤°à¥\8dतमान à¤¹à¤¸à¥\8dताà¤\95à¥\8dषर:",
        "tog-fancysig": "दसखत क॑ विकिपाठ ऐसनऽ मानऽ (बिना स्वचालित कड़ी केरऽ)",
-       "tog-uselivepreview": "सà¤\9cà¥\80वन à¤\9dलà¤\95 à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रऽ",
+       "tog-uselivepreview": "सà¤\9cà¥\80वन à¤\9dलà¤\95 à¤\95à¥\87 à¤\89पयà¥\8bà¤\97 à¤\95रà¥\8c",
        "tog-forceeditsummary": "जों सम्पादन सारांश नै देलऽ गेलऽ छै त॑ हमरा सूचित करऽ",
        "tog-watchlisthideown": "हमरऽ ध्यानसूची सं॑ हमरऽ करलऽ बदलाव छिपाबऽ",
        "tog-watchlisthidebots": "हमरऽ ध्यानसूची सं॑ बॉट द्वारा करलऽ बदलाव छिपाबऽ",
@@ -52,7 +54,6 @@
        "underline-never": "कहियो नै",
        "underline-default": "प्राथमिक त्वचा या ब्राउज़र",
        "editfont-style": "सम्पादन क्षेत्र केरऽ मुद्रलिपि शैली:",
-       "editfont-default": "प्राथमिक ब्राउज़र",
        "editfont-monospace": "एकल स्थल मुद्रलिपि",
        "editfont-sansserif": "'सॅन्स-सेरिफ' मुद्रालिपि",
        "editfont-serif": "'सेरिफ' मुद्रालिपि",
        "anontalk": "इ आई॰पी लेली वार्ता",
        "navigation": "भ्रमण",
        "and": "&#32;आरू",
-       "qbfind": "खोजॊ",
-       "qbbrowse": "ब्राउज़",
-       "qbedit": "संपादन",
-       "qbpageoptions": "इ पन्ना",
-       "qbmyoptions": "हमरऽ पन्ना",
        "faq": "अक्सर पूछलऽ जाबै वाला प्रश्न",
-       "faqpage": "Project:अक्सर पूछलऽ जाबै वाला सवाल",
        "actions": "क्रिया",
        "namespaces": "नामस्थान",
        "variants": "संस्करण",
        "edit-local": "स्थानीय विवरण सम्पादित करऽ",
        "create": "सृजन करॊ",
        "create-local": "स्थानीय विवरण जोड़ऽ",
-       "editthispage": "ई पन्ना के सम्पादन करॊ",
-       "create-this-page": "इ पन्ना सृजित करऽ",
        "delete": "हटाबॊ",
-       "deletethispage": "इ पन्ना हटाबऽ",
-       "undeletethispage": "इ पन्ना क॑ पुनर्स्थापित करऽ",
        "undelete_short": "{{PLURAL:$1|एगऽ हटैलऽ गेलै|$1 हटैलऽ गेलै}} बदलाव वापस लानऽ",
        "viewdeleted_short": "देखऽ {{PLURAL:$1|एगऽ हटैलऽ गेलऽ सम्पादन|$1 हटैलऽ गेलऽ सम्पादन}}",
        "protect": "सुरक्षित करॊ",
        "protect_change": "बदलॊ",
-       "protectthispage": "इ पन्ना सुरक्षित करऽ",
        "unprotect": "सुरक्षितता बदलऽ",
-       "unprotectthispage": "इ पन्ना केरऽ सुरक्षितता बदलऽ",
        "newpage": "नया पन्ना",
-       "talkpage": "इ पन्ना पर चर्चा करॊ",
        "talkpagelinktext": "वार्ता",
        "specialpage": "विशेष पन्ना",
        "personaltools": "वैयक्तिक औज़ार",
-       "articlepage": "लेख पन्ना",
        "talk": "चर्चा",
        "views": "दर्शाव",
        "toolbox": "उपकरण",
-       "userpage": "सदस्य पन्ना देखऽ",
-       "projectpage": "प्रोजेक्ट पन्ना देखऽ",
        "imagepage": "फाइल पन्ना देखऽ",
        "mediawikipage": "सन्देश पृष्ठ देखऽ",
        "templatepage": "साँचा पृष्ठ देखऽ",
        "redirectedfrom": "($1 स॑ भेजलऽ गेलऽ)",
        "redirectpagesub": "पुन: निर्देशित पन्ना",
        "redirectto": "क॑ अनुप्रेषित:",
-       "lastmodifiedat": "$1 à¤\95à¥\87 $2 à¤ªà¤° à¤\87 à¤ªà¤¨à¥\8dना à¤ªà¤° à¤\85नà¥\8dतिम à¤¬à¤¾à¤° à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¥\87लà¥\88.",
+       "lastmodifiedat": "$1 à¤\95à¥\87 $2 à¤ªà¥\91 à¤\88 à¤ªà¤¨à¥\8dना à¤ªà¥\91 à¤\85नà¥\8dतिम à¤¬à¤¾à¤° à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¥\87लà¥\88 à¥¤",
        "viewcount": "इ पृष्ठ {{PLURAL:$1|एक|$1}} बार देखलऽ गेलऽ छै.",
        "protectedpage": "सुरक्षित पन्ना",
        "jumpto": "हिन्न॑ जा:",
        "viewsourceold": "स्रोत देखऽ",
        "editlink": "संपादन",
        "viewsourcelink": "स्रोत देखऽ.",
-       "editsectionhint": "विभाà¤\97 à¤¸à¤\82पादन: $1",
+       "editsectionhint": "सà¤\82पादन à¤µà¤¿à¤­à¤¾à¤\97: $1",
        "toc": "विषय सूची",
        "showtoc": "देखाबॊ",
        "hidetoc": "छुपाबॊ",
        "nowiki_tip": "विकि प्रारूपण नज़रंदाज़ करऽ",
        "image_tip": "संलग्न संचिका",
        "media_tip": "फाईल लिंक",
-       "sig_tip": "à¤\86पनà¥\86 के हस्ताक्षर व समय",
+       "sig_tip": "à¤\86पनà¥\91 के हस्ताक्षर व समय",
        "hr_tip": "हॉरिझॉंटल लाईन (कम इस्तेमाल करऽ)",
        "summary": "सारांश:",
        "subject": "विषय/शीर्षक",
        "showdiff": "बदलाव देखाबऽ",
        "anoneditwarning": "<strong>सावधान:</strong> आपन॑ लॉग-इन नै करन॑ छियै. जों आपन॑ सम्पादन करै छियै त॑ इ पृष्ठ के संपादन इतिहास मं॑ आपने के आइ.पी. पता अंकित करलऽ जैतै. जों आपन॑ <strong>[$1 लॉगिन]</strong> करै छियै अथवा <strong>[$2 खाता बनाबै छियै]</strong> त॑ अन्य सुविधा के साथ-साथ आपन॑ क॑ संपादनऽ केरऽ श्रेय आपन॑ केरऽ सदस्यनाम पर देलऽ जैतै.",
        "summary-preview": "सारांश पूर्वावलोकन:",
+       "blockedtext": "'''आपका सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिया गया हैं ।'''\n\nअवरोध $1 द्वारा किया गया था।\nअवरोध का कारण है ''$2''\n\n* अवरोध का आरंभ: $8\n* अवरोध की समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइस अवरोध के बारे में चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकते हैं।\nअगर आपने [[Special:Preferences|अपनी वरीयताओं]] में वैध ई-मेल पता प्रविष्ट किया है तो ही आप 'इस प्रयोक्ता को ई-मेल भेजें' वाली सुविधा का इस्तेमाल कर सकते हैं और आपको इसका इस्तेमाल करने से नहीं रोका गया है।\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "loginreqlink": "लॉग-इन",
        "newarticle": "(नया)",
        "newarticletext": "आपनॆ जे लेख चाहै छियै वू अखनी तलक लिखलॊ नै गेलॊ छै. इ लेख लिखै लेली नीचे टाइप करॊ. सहायता लेली [$1 ऐन्जां] क्लीक करॊ.\n\nजों आपनॆ यहां पर गलती सॆं आबी गेलॊ छियै तॆ आपनॊ ब्राउज़र कॆ बॅक (back) पर क्लीक करॊ.",
+       "anontalkpagetext": "----\n<em>यह वार्ता पृष्ठ उन बेनामी सदस्यों के लिये है जिन्होंने या तो खाता नहीं खोला है या खाते का प्रयोग नहीं कर रहे हैं।</em>\nइसलिये उनकी पहचान के लिये हमें उनका संख्यात्मक आई॰पी॰ पता प्रयोग करना पड़ता है।\nऐसा आई॰पी॰ पता कई सदस्यों के लिए साझा हो सकता है।\nयदि आप एक बेनामी सदस्य हैं और आपको लगता है कि आपके बारे में अप्रासंगिक टीका टिप्पणी की गई है तो कृपया [[Special:CreateAccount|सदस्यता लें]] या [[Special:UserLogin|सत्रारंभ करें]] ताकि अन्य बेनामी सदस्यों में से आपको अलग से पहचाना जा सके।",
        "noarticletext": "फ़िलहाल ई पन्ना पर कोनो सामग्री नै छै.\nआपन॑ अन्य पन्ना मं॑ [[Special:Search/{{PAGENAME}}|ई सामग्री के खोज]] कर॑ सकै छियै,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित चिट्ठा मं॑ खोज कर॑ सकै छियै],\nया [{{fullurl:{{FULLPAGENAME}}|action=edit}} इ पन्ना क॑ संपादित कर॑ सक॑ छियै]</span>.",
        "noarticletext-nopermission": "\nफ़िलहाल इ पन्ना पर कोय सामग्री नै छै.\nआपने अन्य पन्ना म॑ [[Special:Search/{{PAGENAME}}|इ सामग्री केरऽ खोज]] कर॑ सकै छियै,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित चिट्ठा मं॑ खोज कर॑ सकै छियै],\nया फेरू [{{fullurl:{{FULLPAGENAME}}|action=edit}} इ पन्ना क॑ संपादित कर॑ सकै छियै]</span>.",
-       "previewnote": "'''याद रखॊ, इ केवल एगॊ झलक छेकै आरू अभी तलक सुरक्षित  नै करलॊ गेलॊ छै!'''",
+       "userpage-userdoesnotexist-view": "सदस्य \"$1\" पंजीकृत नै छै।",
+       "clearyourcache": "'''ध्यान दिऐ:'''  संजोला के बाद बदलाव देखै लेली आपन॑ क॑ अपने ब्राउज़र के कैश खाली करै ल॑ पड़॑ सकै छै।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखें, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाएँ (मैक पर ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाएँ (मैक पर ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाकर ''Refresh'' (रिफ़्रेश) करें या ''Ctrl-F5'' (कंट्रोल-F5) दबाएँ\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → वरीयताएँ) में कैश साफ़ करें",
+       "previewnote": "'''याद रखऽ, ई खाली एगऽ झलक छेकै आरू अभी तलक सुरक्षित  नै करलऽ गेलऽ छै!'''",
+       "continue-editing": "संपादन क्षेत्र म॑ जा",
        "editing": "$1 केरऽ सम्पादन चली रहलऽ छै.",
        "creating": "$1 बनाबऽ",
        "editingsection": "$1 सम्पादन (अनुभाग)",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षीत)",
        "hiddencategories": "इ लेख निम्नलिखित {{PLURAL:$1|1 छुपैलऽ श्रेणी म॑|$1 छुपैलऽ श्रेणी म॑}} छै:",
+       "permissionserrors": "अनुमति त्रुटि",
        "permissionserrorstext-withaction": "आपन॑क॑ $2 केरऽ अनुमति नै छै, निम्नलिखित {{PLURAL:$1|कारण लेली|कारणऽ लेली}}:",
-       "moveddeleted-notice": "इ पन्ना हटाय देलऽ गेलऽ छै.\nपन्ना हटाबै केरऽ लॉग संदर्भ लेली नीचें देलऽ गेलऽ छै.",
+       "recreate-moveddeleted-warn": "'''चेतावनी: आप एक पहले हटाए गए पृष्ठ को पुनर्निर्मित कर रहे हैं।'''\n\nआप को विचार करना चाहिये कि क्या इस पृष्ठ का संपादन जारी रखना उचित होगा।\nइस पृष्ट के हटाने व स्थानांतरण का लॉग सुविधा के लिये उपलब्ध है:",
+       "moveddeleted-notice": "ई पन्ना हटाय देलऽ गेलऽ छै ।\nपन्ना हटाबै केरऽ लॉग संदर्भ लेली नीचें देलऽ गेलऽ छै ।",
+       "content-model-wikitext": "विकिपाठ्य",
+       "undo-failure": "ई बीच अन्य बदलाव होला के कारण ई संपादन पूर्ववत करना संभव नै छै।",
        "viewpagelogs": "इ पन्ना केरऽ लॉग देखॊ",
        "currentrev-asof": "$1 केरऽ समय के संस्करण",
        "revisionasof": "$1 केरऽ संस्करण",
        "cur": "चालू",
        "last": "पिछला",
        "histlegend": "फर्क चयन: फर्क देखै लेली पुराना अवतरणॊ के आगे देलॊ गेलॊ रेडियो बॉक्सपर क्लीक करॊ तथा एन्टर करॊ अथवा नीचॆं देलॊ बटन पर क्लीक करॊ<br />\nलिजेंड: (चालू) = सद्य अवतरण के बीच मॆ फर्क,\n(आखिरी) = पिछला अवतरण के बीच मॆं फर्क, छो = छोटा बदलाव",
-       "history-fieldset-title": "इतिहास के विचरण करॊ",
-       "histfirst": "बहुत पहिले के",
-       "histlast": "एकदम हाल के",
+       "history-fieldset-title": "अवतरण हेतु खोजऽ",
+       "histfirst": "सबस॑ पहलकरऽ",
+       "histlast": "सबस॑ नया",
+       "history-feed-title": "अवतरण इतिहास",
+       "history-feed-description": "विकि प॑ उपलब्ध ई पृष्ठ केरऽ अवतरण इतिहास",
+       "history-feed-item-nocomment": "$1 $3 क॑ $4 बजे",
        "rev-delundel": "दिखाब/छुपाबऽ",
        "revdel-restore": "दृश्यता बदलॊ",
+       "mergelog": "एकत्रीकरण लॉग",
        "revertmerge": "अलग करॊ",
        "history-title": "\"$1\" केरऽ अवतरण इतिहास",
        "difference-title": "\"$1\" केरऽ संशोधनऽ के बीच फरक",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "च़यन करलॊ अवतरणों मॆं फर्क देखियै",
        "editundo": "पूर्ववत करऽ",
+       "diff-empty": "(कोय फरक नै)",
        "diff-multi-sameuser": "({{PLURAL:$1|एगऽ मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधन}} एक्के यूजर द्वारा नै दिखलैलऽ गेलऽ)",
+       "diff-multi-otherusers": "({{PLURAL:$2|एक अन्य सदस्य|$2 सदस्यऽ}} द्वारा {{PLURAL:$1|करलऽ गेलऽ बीच के एगो अवतरण नै दर्शैलऽ|करलऽ गेलै बीच के $1 अवतरण नै दर्शैलऽ गेलऽ}})",
        "searchresults": "खोज परिणाम",
        "searchresults-title": "\"$1\" लेली खोज परिणाम",
        "notextmatches": "कोनो पन्ना मॆं इ सामग्री नै मिललै.",
        "prevn": "पिछला {{PLURAL:$1|$1}}",
        "nextn": "अगला {{PLURAL:$1|$1}}",
+       "prevn-title": "{{PLURAL:$1|पिछला|पिछला सब}} $1 परिणाम",
        "nextn-title": "अगला $1 {{PLURAL:$1|नतीजा|जादा नतीजा}}",
        "shown-title": "हर पन्ना प॑ $1 {{PLURAL:$1|result|results}} दिखाबऽ",
        "viewprevnext": "देख़ऽ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>ई विकि पर \"[[:$1]]\" नाम स॑ एगो पृष्ठ छेकै।</strong> {{PLURAL:$2|0=|अन्य प्राप्त खोज परिणाम भी देखऽ।}}",
        "searchmenu-new": "<strong>इ विकि पर \"[[:$1]]\" नाम केरऽ पन्ना बनाबऽ!</strong>{{PLURAL:$2|0=|आपने केरऽ खोज सं॑ मेल खैतें पन्ना भी देखऽ.|खोज परिणाम भी देखऽ।}}",
        "searchprofile-articles": "सामग्री पृष्ठ",
        "searchprofile-images": "मल्टीमीडिया",
        "searchprofile-everything-tooltip": "(वार्ता पृष्ठ सहित) सब्भे सामग्री मं॑ खोजऽ",
        "searchprofile-advanced-tooltip": "विशेष नामस्थानऽ मं॑ खोजऽ",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})",
-       "search-redirect": "($1 क॑ अनुप्रेषित)",
+       "search-result-category-size": "{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी|$2 उपश्रेणियाँ}}, {{PLURAL:$3|$3 सञ्चिका|$3 सञ्चिकाएँ}})",
+       "search-redirect": "($1 स॑ पुनर्निर्देशित)",
        "search-section": "(विभाग $1)",
+       "search-file-match": "(फ़ाइल सामग्री स॑ मेल खाय छै)",
        "search-suggest": "की आपन॑ के मतलब $1 छै ?",
        "search-interwiki-caption": "अन्य प्रकल्प",
        "search-interwiki-default": "$1 के रिज़ल्ट:",
        "powersearch-ns": "नामस्थानॊ मॆ खोजॊ:",
        "preferences": "वरीयता",
        "mypreferences": "वरीयता",
+       "group-bot": "बॉट",
        "group-sysop": "प्रचालक",
+       "grouppage-bot": "{{ns:project}}:बॉट",
        "grouppage-sysop": "{{ns:project}}:प्रचालक",
        "right-writeapi": "लेखन API के प्रयोग करऽ",
        "newuserlogpage": "नयऽ सदस्यऽ के सूची",
        "rightslog": "सदस्य अधिकार सूची",
        "action-edit": " ई पन्ना के सम्पादन करॊ",
+       "action-createaccount": "ई सदस्य के खाता खोलऽ",
        "nchanges": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges": "हाल मं॑ होलऽ बदलाव",
        "recentchanges-legend": "हाल केरऽ परिवर्तन संबंधी विकल्प",
        "recentchanges-summary": "इस विकि पर हाल मं॑ होलऽ बदलाव इ पन्ना पर देखलऽ जाब॑ सकै छै.",
+       "recentchanges-noresult": "ई अवधि के दौरान ई मापदंड क॑ पूरा करतें कोय परिवर्तन नै करलऽ गेलऽ छै।",
        "recentchanges-feed-description": "इ फ़ीड मॆ होय वाला विकि पर हाल मॆ होलॊ बदलाव देखियै.",
        "recentchanges-label-newpage": "इ संपादन सं॑ तैयार होलऽ नया पन्ना",
        "recentchanges-label-minor": "इ एगऽ छोटऽ बदलाव छेकै",
        "recentchanges-label-plusminus": "पृष्ठ आकार इ बाइट संख्या सं॑ बदललै",
        "recentchanges-legend-heading": "<strong>विवरण:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नया पन्ना के सूची]] क॑ भी देखऽ)",
+       "rcnotefrom": "नीचे <strong>$2</strong> के बाद स॑ (<strong>$1</strong> तलक) {{PLURAL:$5|होलऽ बदलाव दर्शैलऽ गेलऽ छै |होलऽ बदलाव दर्शैलऽ गेलऽ छै}}।",
        "rclistfrom": "$3 $2 सं॑ नया बदलाव देखलाबऽ",
        "rcshowhideminor": "छोटऽ बदलाव $1",
        "rcshowhideminor-show": "देखाबऽ",
        "rcshowhidebots-show": "देखाबऽ",
        "rcshowhidebots-hide": "छुपाबऽ",
        "rcshowhideliu": "पंजीकृत सदस्य $1",
+       "rcshowhideliu-show": "देखाबऽ",
        "rcshowhideliu-hide": "छुपाबऽ",
        "rcshowhideanons": "$1 अनामक सदस्यऽ",
        "rcshowhideanons-show": "देखाबऽ",
        "rcshowhideanons-hide": "छुपाबऽ",
+       "rcshowhidepatr": "परीक्षित सम्पादन $1",
        "rcshowhidemine": "हमरऽ संपादन $1",
        "rcshowhidemine-show": "देखाबऽ",
        "rcshowhidemine-hide": "छुपाबऽ",
        "rc-change-size-new": "बदलाव केरऽ बाद $1 {{PLURAL:$1|बाइट}}",
        "rc-enhanced-expand": "विस्तृत जानकारी देखाबॊ (ऐकरा लेली जावास्क्रिप्ट चाहियॊ)",
        "rc-enhanced-hide": "विस्तृत जानकारी छिपाबॊ",
+       "rc-old-title": "मूल रूप स॑ \"$1\" नाम स॑ बनैलऽ गेलऽ छेलै",
        "recentchangeslinked": "इ पृष्ठ संबंधी बदलाव",
+       "recentchangeslinked-feed": "इ पृष्ठ संबंधी बदलाव",
        "recentchangeslinked-toolbox": "इ पृष्ठ संबंधी बदलाव",
        "recentchangeslinked-title": "\"$1\" म॑ होलऽ बदलाव",
        "recentchangeslinked-summary": "कोनो पन्ना के हवाले कत्त॑ भी पन्ना मौजूद हुअ॑ सकै छै, इ सूची उ पन्ना (या कोनो श्रेणी के सदस्यऽ) मं॑ होलऽ हाल के बदलाव देखाबै छै.\n[[Special:Watchlist|आपन॑ के ध्यानसूची]] मं॑ मौजूद पन्ना '''मोटा''' अक्षरऽ मं॑ दिखतै.",
        "upload": "फाईल अपलोड",
        "uploadlogpage": "अपलोड सूची",
        "filedesc": "सारांश",
+       "license": "लाइसेन्सिंग:",
        "license-header": "लाइसेन्सिंग",
        "imgfile": "फाइल",
+       "listfiles": "फ़ाइल सूची",
        "file-anchor-link": "फ़ाइल",
        "filehist": "फाइल के इतिहास",
        "filehist-help": "संचिका पुरानऽ समय में कैन्हऽ दिखै रहै इ जानै लेली वांछित दिनांक/समय पर चटका लगाबऽ.",
+       "filehist-revert": "पूर्ववत करऽ",
        "filehist-current": "मौजूदा",
        "filehist-datetime": "तारीख/समय",
        "filehist-thumb": "थम्बनेल",
        "filehist-thumbtext": "$1 केरऽ समय के संस्करण के अँगूठाकार प्रारूप",
+       "filehist-nothumb": "कोय अंगूठाकार नै",
        "filehist-user": "सदस्य",
        "filehist-dimensions": "आयाम",
        "filehist-comment": "टिप्पणी",
        "imagelinks": "फ़ाइल केरऽ उपयोग",
        "linkstoimage": "निम्नोक्त {{PLURAL:$1|पन्ने|$1 पन्ना सीनी}} मं॑ इ संचिका के हवाले छै:",
+       "linkstoimage-more": "{{PLURAL:$1|$1}} से अधिक पृष्ठ इस फ़ाइल से जुड़ते हैं।\nनिम्नोक्त सूची फ़ाइल से जुड़ने वाले {{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठ सब}} दिखाती है।\n[[Special:WhatLinksHere/$2|पूरी सूची]] भी उपलब्ध है।",
        "nolinkstoimage": "इ फ़ाइल स॑ कोय पन्ना नै जुड़ै छै.",
+       "linkstoimage-redirect": "$1(फ़ाइल पुनर्निर्देश) $2",
        "sharedupload": "ई फाईल $1 सॆ छै आरू संभवतः अन्य परियोजना भी एकरॊ इस्तेमाल करी रहलॊ होतै.",
        "sharedupload-desc-here": "इ फ़ाइल $1 स॑ छेकै आरू अन्य परियोजना द्वारा भी प्रयोग करलऽ जाब॑ सकै छै.\nवहाँ पर एकरऽ [$2 फ़ाइल विवरण पृष्ठ] मं॑ मौजूद विवरण निम्नांकित छै.",
+       "filepage-nofile": "ई नाम के कोय फ़ाइल मौजूद नै छै।",
        "uploadnewversion-linktext": "इ फाईल के नया संस्करण अपलॊड करॊ",
        "upload-disallowed-here": "आपन॑ इ फ़ाइल क॑ अधिलेखित नै कर॑ सकै छो",
        "randompage": "कोय्यो पन्ना",
        "statistics": "आँकड़ा",
+       "double-redirect-fixer": "पुनर्प्रेषण मिस्त्री",
        "nbytes": "{{PLURAL:$1|बाइट|बाइट}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|जादा सदस्य}}",
        "prefixindex": "इ उपसर्ग वाल सब्भे पन्ना",
+       "listusers": "सदस्यसूची",
        "newpages": "नया पन्ना",
        "move": "स्थानांतरण",
        "movethispage": "इ पन्ना स्थानांतरित करॊ",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत खोजऽ",
        "booksources-search": "खोजऽ",
+       "specialloguserlabel": "कर्ता:",
+       "speciallogtitlelabel": "लक्ष्य (शीर्षक या \"{{ns:सदस्यनाम}}:सदस्यनाम\" सदस्य हेतु):",
        "log": "लॉग सूची",
+       "all-logs-page": "सब सार्वजनिक लॉग",
+       "alllogstext": "{{SITENAME}} की सभी उपलब्ध लॉगों की प्रविष्टियों का मिला-जुला प्रदर्शन।\nआप और बारीकी के लिए लॉग का प्रकार, सदस्य नाम (लघु-दीर्घ-अक्षर संवेदी), या प्रभावित पृष्ठ (लघु-दीर्घ-अक्षर संवेदी) चुन सकते हैं।",
+       "logempty": "लॉग में ऐसनऽ प्रविष्टि नै छै।",
        "allpages": "सब्भे पन्ना",
        "prevpage": "पिछला पन्ना ($1)",
        "allpagesfrom": "देलॊ गेलॊ अक्षर सॆं आरंभ होयवाला लेख दर्शाबॊ:",
        "allpagesto": "ऐना समाप्त होय वाला पन्ना दिखाबॊ:",
        "allarticles": "सब्भे पन्ना",
        "allpagessubmit": "चलऽ",
+       "allpages-hide-redirects": "पुनर्निर्देश छुपाबऽ",
        "categories": "श्रेणी",
        "linksearch": "बाहरी कड़ी",
        "listgrouprights-members": "(सदस्य सूची)",
        "emailuser": "इ सदस्य कॆ ई-मेल भेजॊ",
-       "watchlist": "हमरॊ ध्यानसूची",
+       "usermessage-editor": "सिस्टम दूत",
+       "watchlist": "ध्यानसूची",
        "mywatchlist": "ध्यानसूची",
+       "watchlistfor2": "$1 $2 लेली",
        "addedwatchtext": "\"[[:$1]]\" आपनॆके [[Special:Watchlist|ध्यानसूची]] मॆं \"<nowiki>$1</nowiki>\" केरॊ समावेश करी देलॊ गेलॊ छै.\nभविष्य मॆं इ पन्ना तथा इ पन्ने केरॊ वार्ता मॆं होय वाला बदलाव आपनॆकॆ ध्यानसूची मॆं दिखतै तथा [[Special:RecentChanges|हाल मॆं होलॊ बदलावॊ के सूची]] मॆं ई पन्ना बोल्ड दिखतै ताकि  आपनॆ आसानी सॆं एकरॊ ध्यान रखॆ सकियै.\n\n<p>अगर आपनॆकॆ इ पन्ना कॆ अपनॊ ध्यानसूची सॆं निकालना छै तॆ [[Special:RecentChanges|टटका परिवर्तन]] पर क्लिक करॊ.",
        "removedwatchtext": "\"[[:$1]]\" नामक पन्ना कॆ आपनॆ के [[Special:Watchlist|ध्यानसूची]] सॆं हटाय देलॊ गेलॊ छै.",
        "watch": "ध्यान रखऽ",
        "watchthispage": "ई पन्ना ध्यानसूची में डालॊ",
        "unwatch": "ध्यान हटाबॊ",
-       "watchlist-details": "वार्ता पन्ना केरॊ अलावा {{PLURAL:$1|$1 पन्ना|$1 पन्ने}} आपने के ध्यानसूची मॆं छै.",
-       "wlshowlast": "पिछला $1 घंटा $2 दिन  देखॊ",
+       "watchlist-details": " {{PLURAL:$1|$1 पृष्ठ}} आपन॑ के ध्यानसूची म॑ छै (वार्ता पृष्ठऽ के अलावा)।",
+       "wlheader-showupdated": "आपन॑ के देखला गेला के बाद जोन पृष्ठऽ म॑ बदलाव होतै, ओकरऽ कड़ी <strong>गहरा</strong> रंग के दिखतै।",
+       "wlnote": "$3 क॑ $4 बजे तलक पिछला <strong>$2</strong> {{PLURAL:$2|घंटा|घंटां}} म॑ {{PLURAL:$1|हुआ एक|होलै <strong>$1</strong>}} परिवर्तन निम्न {{PLURAL:$1|छै|छैं}}।",
+       "wlshowlast": "पिछला $1 घंटा $2 दिन  देखऽ",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दय रहलॊ छै...",
        "unwatching": "ध्यान हटाय रहलॊ छियै...",
+       "enotif_reset": "सब पृष्ठ देखलऽ जैन्हऽ दर्शाबऽ",
        "deletepage": "पन्ना हटाबॊ",
        "confirmdeletetext": "आपनॆ एगॊ लेख ओकरॊ सब्भॆ अवतरणॊ के साथ हटाय लॆ चाहै छहॊ.\nआपनॆ सॆं अनुरोध छै कि आपनॆ जे करी रहलॊ छियै वू मीडिया विकि के [[{{MediaWiki:Policy-url}}|नीतिनुसार]] छै इ बात के पुष्टि करी लॆ तथा क्रिया करला सॆं पहले आपनॊ क्रिया के परिणाम जानी लॆ.",
        "actioncomplete": "कार्य पूर्ण",
        "contributions-title": "$1 लेली सदस्यॊ के योगदान",
        "mycontris": "योगदान",
        "anoncontribs": "योगदान",
-       "contribsub2": "$1 लेली ($2)",
-       "uctop": "(उपर)",
+       "contribsub2": "{{GENDER:$3|$1}} ($2) लेली",
+       "nocontribs": "ई कसौटी स॑ मिलै वाला बदलाव मिललै नै ।",
+       "uctop": "मौजूदा",
        "month": "इ महिना स॑ (आरू पुरान॑):",
        "year": "इ साल स॑ (आरू पुरानऽ):",
        "sp-contributions-newbies": "सिर्फ नया सदस्यॊ के योगदान दर्शाबॊ",
        "sp-contributions-blocklog": "ब्लॉक सूची",
+       "sp-contributions-uploads": "अपलोड",
+       "sp-contributions-logs": "लॉग सूची",
+       "sp-contributions-talk": "वार्ता",
        "sp-contributions-search": "योगदान लेली खोज",
        "sp-contributions-username": "आईपी एड्रेस या सदस्यनाम:",
+       "sp-contributions-toponly": "खाली वू सम्पादनऽ क॑ दिखाबऽ जे नवीनतम संशोधन छेकै",
+       "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों हुअ॑",
        "sp-contributions-submit": "खोज",
        "whatlinkshere": "एन्जां की जुड़तै",
        "whatlinkshere-title": "$1 सं॑ जुड़लऽ पन्ना",
        "whatlinkshere-page": "पन्ना:",
        "linkshere": "नीचे के सब पन्ना '''[[:$1]]''' स॑ जुड़लऽ:",
+       "nolinkshere": "<strong>[[:$1]]</strong> स॑ कोय भी पन्ना नै जुड़लऽ छै।",
        "isredirect": "पुन: निर्दिष्ट पन्ना",
        "istemplate": "मिलाबऽ",
        "isimage": "फाइल लिंक",
        "whatlinkshere-prev": "{{PLURAL:$1|पिछला|पिछला सीनी $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अगला|अगला $1}}",
        "whatlinkshere-links": "← लिंक",
-       "whatlinkshere-hideredirs": "$1 à¤\85नà¥\81पà¥\8dरà¥\87षितà¥\87à¤\82",
+       "whatlinkshere-hideredirs": "$1 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87श",
        "whatlinkshere-hidetrans": "$1 ट्रान्स्क्ल्युजन्स",
        "whatlinkshere-hidelinks": "$1 लिंक",
+       "whatlinkshere-hideimages": "$1 फ़ाइल कड़ी",
        "whatlinkshere-filters": "फिल्टर्स",
        "blockip": "अवरोधित करॊ",
        "ipboptions": "२ घंटा:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ता:2 weeks,१ महिना:1 month,३ महिना:3 months,६ महिना:6 months,१ साल:1 year,अनंत:infinite",
        "ipblocklist": "अवरोधित आईपी पता व सदस्यनाम",
+       "infiniteblock": "इनफाईनाईट",
        "blocklink": "अवरोधित करऽ",
        "unblocklink": "अवरोध हटाएँ (अनब्लॉक)",
        "change-blocklink": "ब्लॉक बदलॊ",
        "contribslink": "योगदान",
        "blocklogpage": "ब्लॉक सूची",
        "blocklogentry": "\"[[$1]]\" कॆ $2 $3 तलक बदलाव करै सॆं रोकी देलॊ गेलॊ छै.",
+       "reblock-logentry": "[[$1]] केरऽ अवरोध जमाव बदललऽ गेलै, मियाद अब॑ $2 $3 प॑ खत्म होतै",
        "unblocklogentry": "$1 ब्लॉक निकाली देलॊ गेलॊ छै.",
        "block-log-flags-nocreate": "खाता निर्माण पर रोक",
+       "proxyblocker": "प्रॉक्सी ब्लॉकर",
        "movepagetext": "नीचॆं देलॊ पर्चा पन्ना के नाम बदली देतै, ऐकरॊ सारा इतिहास भी नयॊ नाम सॆं दिखना शुरू होय जैतै.\nपुराना शीर्षक नया नाम कॆ अनुप्रेषित करी लेतै.\nमूल शीर्षक दन्नॆ जाय वाला अग्रेषणॊ कॆ आपनॆ स्वचालित रूपॊ सॆं बदलॆ सकॆ छियै.\nयदि आपनॆ ऐन्हॊ नै करै छियै तॆ कृपया [[Special:DoubleRedirects|दोहरा]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटलॊ पुनर्निर्देशन]] लेली ज़रूर जाँच करॊ.\nकड़ी सीनी सही जगह इंगित करी रहलॊ छै, ई सुनिश्चित करना आपनॆ कॆ जिम्मेदारी छै.\n\nअगर नयॊ शीर्षक के लेख पहलै सॆं छै तॆ स्थानांतरण '''नै''' होतै. पर अगर नयॊ शीर्षक वाला लेख खाली छै अथवा कहीं आरू अनुप्रेषित करै छियै आरू साथ ही ओकरॊ पुरानॊ संस्करण नै छै तॆ स्थानांतरण होय जैतै.\nएकरॊ मतलब कि यदि आपनॆ सॆं गलती हो जाय तॆ आपनॆ वापस पुरानॊ नाम पर इ पन्ना कॆ स्थानांतरण करॆ सकॆ छियै, आरू साथ ही आपनॆ कोनॊ मौजूदा पन्ना के बदले ई स्थानांतरण नै करॆ सकॆ छियै.\n\n'''चेतावनी!'''\nयदि पन्ना काफ़ी लोकप्रिय छै तॆ ओकरा लेली ई एक बहुत बड़ा व अकस्मात् परिवर्तन हुऎ सकॆ छै;\nआगू बढ़ला सॆं पहले अंजाम अच्छा सॆं समझी लॆ.\n\n'''सूचना!'''\nस्थानांतरण करला सॆं कोय भी महत्वपूर्ण लेख मॆं अनपेक्षित बदलाव हुऎ सकॆ छै\nआपनॆ सॆं अनुरोध छै कि आपनॆ एकरॊ परिणाम जानी लियै.",
        "movepagetalktext": "संबंधित वार्ता पृष्ठ ऐकरॊ साथ स्थानांतरीत नै होतै '''अगर:'''\n* आपनॆ पन्ना दोसरॊ नामस्थान मॆं स्थानांतरीत करी रहलॊ छहॊ.\n* इ नाम के वार्ता पृष्ठ पहलॆ सॆं बनलॊ छै, या\n* नीचॆं देलॊ गेलॊ चेक बॉक्स आपनॆ निकाली देनॆ छियै.\n\nइ मामला मॆं आपनॆकॆ स्वयं इ पन्ना जोडै लॆ पड़तै.",
        "newtitle": "नया शीर्षक दन्नॆ:",
        "revertmove": "पुरानॊ अवतरण पर लॆ चलॊ (रिवर्ट)",
        "export": "पन्ना क॑ निर्यात करऽ",
        "thumbnail-more": "बड़ा करऽ",
+       "importlogpage": "आयात सूची",
        "tooltip-pt-userpage": "{{GENDER:|आपन॑ के प्रयोक्ता}} पन्ना",
        "tooltip-pt-mytalk": "{{GENDER:|आपन॑ के}} वार्ता पृष्ठ",
        "tooltip-pt-preferences": "{{GENDER:|आपन॑ के}} वरीयता",
        "tooltip-feed-rss": "इ पन्ना के आरएसएस फ़ीड",
        "tooltip-feed-atom": "इ पन्ना के अणु फ़ीड",
        "tooltip-t-contributions": "{{GENDER:$1| केरऽ ई साल}} म॑ सदस्य के योगदान केरऽ सूची देखियै",
-       "tooltip-t-emailuser": "इस सदस्य कॆ इमेल भेजॊ",
+       "tooltip-t-emailuser": "{{GENDER:$1|ई सदस्य}} क॑ इमेल भेजऽ",
        "tooltip-t-upload": "फाईल लादऽ (अपलोड )",
        "tooltip-t-specialpages": "ख़ास पन्ना केरऽ सूची",
        "tooltip-t-print": "इ पन्ना के छापे लायक संस्करण.",
        "tooltip-ca-nstab-special": "इ एगऽ खास पन्ना छै, आपन॑ एकरा बदल॑ नै सकै छियै.",
        "tooltip-ca-nstab-project": "प्रोजेक्ट पन्ना देखियै",
        "tooltip-ca-nstab-image": "फाइल के पन्ना देखऽ",
+       "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश देखऽ",
        "tooltip-ca-nstab-template": "टेम्प्लेट देखियै",
        "tooltip-ca-nstab-category": "श्रेणी पन्ना देखऽ",
        "tooltip-minoredit": "ऐकरा छोटा बदलाव के तौर पर दर्ज करॊ",
        "tooltip-undo": "\"पुरानऽ स्थिति पर लानऽ\" इ बदलाव क॑ वापस ल॑ जाय क॑ संपादन पर्चा क॑ झलक रीति म॑ दिखलाबै छै.\nएकरऽ जरिया सं॑ सारांश मं॑ पुरानऽ स्थिति मं॑ लानै के कारण लिखलऽ जाब॑ पार॑.",
        "tooltip-summary": "एक संक्षिप्त सारांश दर्ज करऽ",
        "simpleantispam-label": "स्पैम-विरोधी जाँच.\nएकरा म॑ इ <strong>नै</strong> भरऽ!",
+       "pageinfo-title": "\"$1\" लेली जानकारी",
+       "pageinfo-header-basic": "मूल जानकारी",
+       "pageinfo-header-edits": "सम्पादन इतिहास",
+       "pageinfo-header-restrictions": "पृष्ठ सुरक्षा",
+       "pageinfo-header-properties": "पृष्ठ जानकारी",
+       "pageinfo-display-title": "प्रदर्शित शीर्षक",
+       "pageinfo-default-sort": "डिफ़ॉल्ट सॉर्ट की",
+       "pageinfo-length": "पृष्ठ आकार (बाइट्स म॑)",
+       "pageinfo-article-id": "पृष्ठ आइ॰डी",
+       "pageinfo-language": "पृष्ठ सामग्री भाषा",
+       "pageinfo-content-model": "पृष्ठ सामग्री के नमूना",
+       "pageinfo-robot-policy": "सर्च इंजन बॉट द्वारा अनुक्रमण",
+       "pageinfo-robot-index": "अनुमतित",
+       "pageinfo-robot-noindex": "नै अनुमतित",
+       "pageinfo-watchers": "पृष्ठ पर नज़र रखै वाला के संख्या",
+       "pageinfo-few-watchers": "$1 स॑ कम ध्यान दै {{PLURAL:$1|वाला|वालां}}",
+       "pageinfo-redirects-name": "इ पृष्ठ क॑ पुनर्निर्देश के संख्या",
+       "pageinfo-subpages-name": "ई पृष्ठ के उप-पृष्ठ",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|पुनर्निर्देश}}; $3 {{PLURAL:$3|ग़ैर-पुनर्निर्देश}})",
+       "pageinfo-firstuser": "पृष्ठ निर्माता",
+       "pageinfo-firsttime": "पृष्ठ निर्माण तिथि",
+       "pageinfo-lastuser": "नवीनतम सम्पादक",
+       "pageinfo-lasttime": "नवीनतम सम्पादन तिथि",
+       "pageinfo-edits": "संपादन के कुल संख्या",
+       "pageinfo-authors": "लेखक सिनी के संख्या",
+       "pageinfo-recent-edits": "हाल म॑ होलऽ सम्पादनऽ के संख्या (पिछ्ला $1 म॑)",
+       "pageinfo-recent-authors": "हाल ही म॑ लेखकऽ के संख्या",
+       "pageinfo-magic-words": "जादुई {{PLURAL:$1|शब्द}} ($1)",
+       "pageinfo-hidden-categories": "छुपलऽ {{PLURAL:$1|श्रेणी|श्रेणियाँ}} ($1)",
+       "pageinfo-templates": "प्रयुक्त {{PLURAL:$1|साँचा|साँचां}} ($1)",
        "pageinfo-toolboxlink": "पृष्ठ सूचना",
+       "pageinfo-contentpage": "सामग्री पृष्ठऽ म॑ गिनलऽ जाय छै",
+       "pageinfo-contentpage-yes": "हाँ",
+       "patrol-log-page": "परीक्षण लॉग",
        "previousdiff": " पुराना संपादन",
        "nextdiff": "टटका संपादन",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|पृष्ठ|पृष्ठ सब}}",
        "file-info-size": "$1 × $2 चित्रतत्व, संचिका के आकार: $3, MIME प्रकार: $4",
+       "file-info-size-pages": "$1 × $2  पिक्सेल, फ़ाइल केरऽ आकार:  $3 , MIME प्रकार:  $4 ,  $5   {{PLURAL:$5| page|pages}}",
        "file-nohires": "स॑ ज्यादा रिज़ोल्यूशन उपलब्ध नै छै.",
-       "svg-long-desc": "SVG à¤«à¤¼à¤¾à¤\88ल, à¤¸à¤¾à¤§à¤¾à¤°à¤£à¤¤: $1 Ã\97 $2 à¤ªà¥\80à¤\95à¥\8dसà¥\87लà¥\8dस, à¤«à¤¼à¤¾à¤\88ल à¤\95à¥\87रà¥\8a आकार: $3",
+       "svg-long-desc": "SVG à¤«à¤¼à¤¾à¤\88ल, à¤¸à¤¾à¤§à¤¾à¤°à¤£à¤¤: $1 Ã\97 $2 à¤ªà¥\80à¤\95à¥\8dसà¥\87लà¥\8dस, à¤«à¤¼à¤¾à¤\88ल à¤\95à¥\87रऽ आकार: $3",
        "show-big-image": "संपूर्ण रिजोल्यूशन",
        "show-big-image-preview": "इ पूर्वावलोकन के आकार:  $1 ।",
        "show-big-image-other": "अन्य  {{PLURAL:$2| resolution|resolutions}}:$1",
        "exif-orientation-1": "सामान्य",
        "namespacesall": "सब्भे",
        "monthsall": "सब्भे",
+       "imgmultipagenext": "अगला पृष्ठ →",
+       "imgmultigo": "जा !",
+       "imgmultigoto": "$1 पृष्ठ प॑ जा",
+       "watchlisttools-clear": "ध्यानसूची खाली करऽ",
        "watchlisttools-view": "प्रासंगिक बदलाव देखॊ",
        "watchlisttools-edit": "ध्यानसूची देखॊ आरू संपादित करॊ.",
        "watchlisttools-raw": "अनिर्मित ध्यानसूची देखॊ एवम्‌ संपादित करॊ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
+       "redirect": "फ़ाइल, सदस्य, पृष्ठ, अवतरण या लॉग आईडी द्वारा अनुप्रेषित",
+       "redirect-summary": "ई विशेष पृष्ठ एगो फाइल (फाइल नाम देलऽ गेलऽ छै), एक पृष्ठ (एक अवतरण पता अथवा पृष्ठ पता दिया गया), एक सदस्य पृष्ठ (एक संख्यात्मक सदस्य पता) अथवा एक लॉग प्रविष्टि (लॉग पता दिया गया) पर अनुप्रेषित होता है। उपयोग: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], अथवा [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-submit": "चलऽ",
+       "redirect-lookup": "ढूँढऽ:",
+       "redirect-value": "मूल्य:",
+       "redirect-user": "सदस्य आई॰डी",
+       "redirect-page": "पृष्ठ आइ॰डी",
+       "redirect-revision": "पृष्ठ अवतरण संख्या",
+       "redirect-file": "फ़ाइल नाम",
        "specialpages": "खास पन्ना",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+       "tags-active-yes": "हाँ",
+       "tags-active-no": "नै",
+       "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव सिनी}}",
        "logentry-delete-delete": "$1 न॑ पृष्ठ $3 {{GENDER:$2|हटाय}} देलकै",
+       "logentry-delete-restore": "$1 न॑ पृष्ठ $3 ($4) क॑ {{GENDER:$2|पुनर्स्थापित}} करी देलकै",
+       "logentry-delete-revision": "$1 न॑ $3 पृष्ठ के {{PLURAL:$5|एक अवतरण|$5 अवतरणों}} के दृश्यता {{GENDER:$2|बदललकै}}: $4",
+       "revdelete-content-hid": "सामग्री छिपैलऽ गेलै",
        "logentry-move-move": "$1 न॑ $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} करलकै",
+       "logentry-move-move-noredirect": "$1 न॑ $3 पर पुनर्निर्देश छोड़ल॑ बिना ओकरा $4 पर {{GENDER:$2|स्थानांतरित}} करलकै",
+       "logentry-move-move_redir": "$1 ने $4 स॑ पुनर्निर्देश हटायक॑ $3 क॑ ओकरा प॑ {{GENDER:$2|स्थानांतरित}} करलकै",
+       "logentry-patrol-patrol-auto": "$1 न॑ $3 पृष्ठ केरऽ $4 अवतरण क॑ स्वचालित रूप स॑ परीक्षित {{GENDER:$2|चिन्हित}} करलकै",
        "logentry-newusers-create": "यूजर खाता $1 {{GENDER:$2|बनैलऽ गेलै}}",
+       "logentry-newusers-autocreate": "खाता $1 स्वचालित रूप स॑ {{GENDER:$2|बनैलऽ}} गेलऽ छेलै",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपलोड}} $3",
-       "searchsuggest-search": "खोजऽ"
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|अपलोड करलऽ गेलै}} $3 केरऽ एगो नया अवतरण",
+       "searchsuggest-search": "{{SITENAME}} मं॑ खोजऽ",
+       "duration-days": "$1 {{PLURAL:$1|दिन}}",
+       "randomrootpage": "अविशिष्ट मूल पृष्ठ"
 }
index 8404117..30b05b7 100644 (file)
        "anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
        "missingsummary": "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.\nإذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
        "selfredirect": "<strong>تحذير:</strong> أنت تقوم بتحويل الصفحة إلى نفسها.\nربما حددت الهدف الخطأ للتحويلة أو أنك تقوم بتحرير الصفحة الخطأ.\n\nإذا نقرت على «$1» مرة أخرى، سيتم إنشاء التحويلة رغم الخطأ.",
-       "missingcommenttext": "من فضلك أدخل تعليقا في الأسفل.",
+       "missingcommenttext": "من فضلك أدخل تعليقا.",
        "missingcommentheader": "<strong>تنبيه:</strong>  لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"$1\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
        "summary-preview": "معاينة ملخص تحرير",
        "subject-preview": "معاينة الموضوع:",
        "timezoneregion-europe": "أوروبا",
        "timezoneregion-indian": "المحيط الهندي",
        "timezoneregion-pacific": "المحيط الهادي",
-       "allowemail": "مكن تلقي البريد الإلكتروني من المستخدمين الآخرين",
+       "allowemail": "اسمح للمستخدمين الآخرين بإرسال بريد إلكتروني إلي",
        "email-blacklist-label": "امنع هؤلاء المستخدمين من إرسال بريد إلكتروني لي:",
        "prefs-searchoptions": "البحث",
        "prefs-namespaces": "أسماء النطاقات",
        "recentchanges-legend": "خيارات أحدث التغييرات",
        "recentchanges-summary": "تابع آخر التغييرات في الويكي من هذه الصفحة.",
        "recentchanges-noresult": "لا توجد تغييرات خلال الفترة المحددة تطابق هذه المعايير.",
+       "recentchanges-timeout": "البحث انتهى بدون نتائج. ربما تحب تجربة مدخلات بحث مختلفة.",
+       "recentchanges-network": "نتيجة لخطأ تقني، لم يمكن تحميل أي نتائج. من فضلك حاول إعادة تحديث الصفحة.",
        "recentchanges-feed-description": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
        "recentchanges-label-newpage": "أنشأ هذا التعديل صفحة جديدة",
        "recentchanges-label-minor": "هذا تعديل طفيف",
        "recentchanges-submit": "أظهر",
        "rcfilters-tag-remove": "أزل '$1'",
        "rcfilters-legend-heading": "<strong>قائمة الاختصارات:</strong>",
-       "rcfilters-other-review-tools": "<strong>أدوات مراجعة أخرى</strong>",
+       "rcfilters-other-review-tools": "أدوات مراجعة أخرى",
        "rcfilters-group-results-by-page": "جمع النتائج حسب الصفحة",
        "rcfilters-grouping-title": "جمع",
        "rcfilters-activefilters": "المرشحات النشطة",
        "rcfilters-days-show-hours": "{{PLURAL:$1|ساعة واحدة|ساعتان|$1 ساعات|$1 ساعة}}",
        "rcfilters-highlighted-filters-list": "معلمة: $1",
        "rcfilters-quickfilters": "المرشحات المحفوظة",
-       "rcfilters-quickfilters-placeholder-title": "Ù\84ا Ù\88صÙ\84ات تم حفظها بعد",
+       "rcfilters-quickfilters-placeholder-title": "Ù\84ا Ù\85رشحات تم حفظها بعد",
        "rcfilters-quickfilters-placeholder-description": "لحفظ إعدادات الفلتر وإعادة استخدامها في وقت لاحق; انقر فوق رمز الإشارة المرجعية في منطقة الفلتر النشط أدناه.",
        "rcfilters-savedqueries-defaultlabel": "مرشحات محفوظة",
        "rcfilters-savedqueries-rename": "أعد التسمية",
        "rcfilters-savedqueries-apply-and-setdefault-label": "إنشاء مرشح افتراضي",
        "rcfilters-savedqueries-cancel-label": "ألغ",
        "rcfilters-savedqueries-add-new-title": "احفظ إعدادات المرشحات الحالية",
+       "rcfilters-savedqueries-already-saved": "هذه المرشحات محفوظة بالفعل. غير إعداداتك لإنشاء مرشح محفوظ جديد.",
        "rcfilters-restore-default-filters": "استرجاع المرشحات الافتراضية",
        "rcfilters-clear-all-filters": "مسح كل المرشحات",
        "rcfilters-show-new-changes": "عرض أحدث التغييرات",
-       "rcfilters-search-placeholder": "رشح Ø£Ø­Ø¯Ø« Ø§Ù\84تغÙ\8aÙ\8aرات (تصÙ\81Ø­ Ø£Ù\88 Ø§Ø¨Ø¯Ø£ Ø§Ù\84Ù\83تابة)",
+       "rcfilters-search-placeholder": "رشح Ø§Ù\84تغÙ\8aÙ\8aرات (استخدÙ\85 Ø§Ù\84Ù\82ائÙ\85Ø© Ø£Ù\88 Ø§Ù\84بحث Ù\84اسÙ\85 Ø§Ù\84Ù\85رشح)",
        "rcfilters-invalid-filter": "مرشح غير صحيح",
        "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "rcfilters-filterlist-title": "مرشحات",
        "rcfilters-filter-user-experience-level-unregistered-label": "غير المسجلين",
        "rcfilters-filter-user-experience-level-unregistered-description": "المحررون الذين لم يسجلوا الدخول.",
        "rcfilters-filter-user-experience-level-newcomer-label": "القادمون الجدد",
-       "rcfilters-filter-user-experience-level-newcomer-description": "المحررون المسجلون الذين لديهم أقل من 10 تعديلات و 4 أيام من النشاط.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "المحررون المسجلون الذين لديهم أقل من 10 تعديلات أو 4 أيام من النشاط.",
        "rcfilters-filter-user-experience-level-learner-label": "المتعلمون",
        "rcfilters-filter-user-experience-level-learner-description": "المحررون المسجلون الذين تقع تجربتهم بين \"القادمين الجدد\" و \"المستخدمين ذوي الخبرة\".",
        "rcfilters-filter-user-experience-level-experienced-label": "المستخدمون ذوو الخبرة",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ليس</strong> $1",
        "rcfilters-exclude-button-off": "استبعاد المختارة",
        "rcfilters-exclude-button-on": "استثناء المختارة",
-       "rcfilters-view-advanced-filters-label": "مرشحات متقدمة",
        "rcfilters-view-tags": "تعديلات موسومة",
        "rcfilters-view-namespaces-tooltip": "رشح النتائج حسب النطاق",
        "rcfilters-view-tags-tooltip": "رشح النتائج حسب وسوم التعديل",
        "uploaded-script-svg": "تم العثور على عنصر سكريبت \"$1\" في ملف الSVG المرفوع.",
        "uploaded-hostile-svg": "تم العثور على CSS غير آمن في عنصر الشكل في ملف الSVG المرفوع.",
        "uploaded-event-handler-on-svg": "ضبط سمات معالج الأحداث <code>$1=\"$2\"</code> غير مسموح به في ملفات SVG.",
-       "uploaded-href-attribute-svg": "سمات href في ملفات SVG مسموح بوصلها فقط بأهداف http:// أو https:// ، تم العثور على <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> العناصر يمكنها فقط وصل (href) للبيانات: (ملف مضمن)، أهداف http:// أو https://, أو fragment (#, same-document).  للعناصر الأخرى، مثل <image>، فقط بيانات: و fragment مسموح بها. جرب تضمين الصور عند تصدير الSVG الخاص بك. تم العثور على <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "تم العثور على href لبيانات غير آمنة: هدف URI <code>&lt;$1 $2=\"$3\"&gt;</code> في ملف SVG المرفوع.",
        "uploaded-animate-svg": "تم العثور على وسم \"animate\" الذي ربما يكون يغير href, باستخدام سمة \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> في ملف SVG المرفوع.",
        "uploaded-setting-event-handler-svg": "ضبط سمات معالج الأحداث ممنوع، تم العثور على <code>&lt;$1 $2=\"$3\"&gt;</code> في ملف SVG المرفوع.",
        "uploadstash-refresh": "تحديث قائمة الملفات",
        "uploadstash-thumbnail": "اعرض صورة مصغرة",
        "uploadstash-exception": "لم يمكن تخزين الرفع في الstash ($1): \"$2\".",
+       "uploadstash-bad-path": "المسار غير موجود",
+       "uploadstash-bad-path-invalid": "المسار غير صحيح.",
+       "uploadstash-bad-path-unknown-type": "نوع غير معروف \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "اسم تصغير غير متعرف عليه.",
+       "uploadstash-bad-path-no-handler": "لم يتم العثور على هاندلر للميم $1 للملف $2.",
+       "uploadstash-bad-path-bad-format": "المفتاح \"$1\" ليس بصيغة صحيحة.",
+       "uploadstash-file-not-found": "المفتاح \"$1\" لم يتم العثور عليه في الستاش.",
+       "uploadstash-file-not-found-no-thumb": "لم يمكن الحصول على تصغير.",
+       "uploadstash-file-not-found-no-local-path": "لا مسار محلي للعنصر المصغر.",
+       "uploadstash-file-not-found-no-object": "لم يمكن إنشاء كائن ملف محلي للتصغير.",
+       "uploadstash-file-not-found-no-remote-thumb": "الحصول على التصغير فشل: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "هاندلر مفقود لنوع المحتوى",
+       "uploadstash-file-not-found-not-exists": "لم يمكن العثور على المسار، أو ليس ملف صريح.",
+       "uploadstash-file-too-large": "لا يمكن عرض ملف أكبر من $1 بايت.",
+       "uploadstash-not-logged-in": "لا مستخدم مسجل الدخول، الملفات يجب أن تنتمي إلى مستخدمين.",
+       "uploadstash-wrong-owner": "هذا الملف ($1) لا ينتمي للمستخدم الحالي.",
+       "uploadstash-no-such-key": "لا مفتاح كهذا ($1)، لم يمكن الإزالة.",
+       "uploadstash-no-extension": "الامتداد هو لا شيء.",
+       "uploadstash-zero-length": "الملف طوله صفر.",
        "invalid-chunk-offset": "قطعة أوفست غير صالحة",
        "img-auth-accessdenied": "رفض الوصول",
        "img-auth-nopathinfo": "PATH_INFO مفقود.\nخادومك ليس مضبوطاً لتمرير هذه المعلومة.\nقد يكون مبنياً على نظام CGI ولا يمكنه دعم img_auth.\nراجع https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 60607f4..98b5675 100644 (file)
@@ -70,7 +70,6 @@
        "underline-never": "কেতিয়াও নহয়",
        "underline-default": "ব্ৰাউজাৰ ডিফল্ট",
        "editfont-style": "সম্পাদনা ক্ষেত্ৰৰ ফ'ণ্ট শৈলী:",
-       "editfont-default": "ব্ৰাউজাৰ ডিফ'ল্ট",
        "editfont-monospace": "ম'ন'স্পেছ ফ'ণ্ট",
        "editfont-sansserif": "ছেন্স-ছেৰিফ ফ'ণ্ট",
        "editfont-serif": "ছেৰিফ ফ'ণ্ট",
        "accmailtext": "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিকভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল । \nএই নতুন একাউন্টত প্ৰৱেশ কৰি ''[[Special:ChangePassword|গুপ্তশব্দ সলনি কৰক]]'' পৃষ্ঠাখনত শব্দতো সলনি কৰি ল’ব পাৰিব ।",
        "newarticle": "(নতুন)",
        "newarticletext": "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।\n\nইচ্ছা কৰিলে আপুনিয়েই এই প্ৰবন্ধটো লিখা আৰম্ভ কৰিব পাৰে। [$1 ইয়াত] সহায় পাব।\n\nআপুনি যদি ইয়ালৈ ভুলতে আহিছে, তেনেহলে আপোনাৰ ব্ৰাওজাৰৰ '''BACK''' বুটামত টিপা মাৰক।",
-       "anontalkpagetext": "----''à¦\8fà¦\87à¦\96ন à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠা à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦¬à¦¾à¦¬à§\87, à¦¯à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦\9cা à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f  à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰা à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦¯à¦¿à¦¯à¦¼à§\87 à¦¸à§\87à¦\87 à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f à¦¬à§\8dযৱহাৰ à¦¨à¦\95ৰà§\87।\nà¦\8fতà§\87à¦\95à§\87 à¦\86মি à¦¤à§\87à¦\96à§\87তসà¦\95লà¦\95 à¦\86à¦\87-পি à¦ à¦¿à¦\95নাৰà§\87 à¦\9aিনাà¦\95à§\8dত à¦\95ৰিবলà§\88 à¦¬à¦¾à¦§à§\8dয।\nসà§\87à¦\87 à¦\8fà¦\95à§\87à¦\87 à¦\86à¦\87-পি à¦ à¦¿à¦\95না à¦\85নà§\87à¦\95à§\87à¦\87 à¦¬à§\8dযৱহাৰ à¦\95ৰিব à¦ªà¦¾à§°à§\87।\nà¦\86পà§\81নি à¦¯à¦¦à¦¿ à¦\8fà¦\9cন à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dয à¦\86ৰà§\81 à¦¯à¦¦à¦¿ à¦\86পà§\81নি à¦\85নà§\81ভৱ à¦\95ৰà§\87 à¦¯à§\87 à¦\86পà§\8bনাৰ à¦ªà§\8dৰতি à¦\85পà§\8dৰাসà¦\99à§\8dà¦\97িà¦\95 à¦®à¦¨à§\8dতবà§\8dয à¦\95ৰা à¦¹à§\88à¦\9bà§\87, à¦¤à§\87নà§\87হলà§\87 à¦\86ন à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦ªà§°à¦¾ à¦ªà§\83থà¦\95 à¦\95ৰিবলà§\88 \n[[Special:CreateAccount|à¦\8fà¦\95াà¦\89ন্ট সৃষ্টি কৰক]] বা [[Special:UserLogin|প্ৰৱেশ কৰক]] ।''",
+       "anontalkpagetext": "----''à¦\8fà¦\87à¦\96ন à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠা à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦¬à¦¾à¦¬à§\87, à¦¯à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦\9cা à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f  à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰা à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦¯à¦¿à¦¯à¦¼à§\87 à¦¸à§\87à¦\87 à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f à¦¬à§\8dযৱহাৰ à¦¨à¦\95ৰà§\87।\nà¦\8fতà§\87à¦\95à§\87 à¦\86মি à¦¤à§\87à¦\96à§\87তসà¦\95লà¦\95 à¦\86à¦\87-পি à¦ à¦¿à¦\95নাৰà§\87 à¦\9aিনাà¦\95à§\8dত à¦\95ৰিবলà§\88 à¦¬à¦¾à¦§à§\8dয।\nসà§\87à¦\87 à¦\8fà¦\95à§\87à¦\87 à¦\86à¦\87-পি à¦ à¦¿à¦\95না à¦\85নà§\87à¦\95à§\87à¦\87 à¦¬à§\8dযৱহাৰ à¦\95ৰিব à¦ªà¦¾à§°à§\87।\nà¦\86পà§\81নি à¦¯à¦¦à¦¿ à¦\8fà¦\9cন à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dয à¦\86ৰà§\81 à¦¯à¦¦à¦¿ à¦\86পà§\81নি à¦\85নà§\81ভৱ à¦\95ৰà§\87 à¦¯à§\87 à¦\86পà§\8bনাৰ à¦ªà§\8dৰতি à¦\85পà§\8dৰাসà¦\99à§\8dà¦\97িà¦\95 à¦®à¦¨à§\8dতবà§\8dয à¦\95ৰা à¦¹à§\88à¦\9bà§\87, à¦¤à§\87নà§\87হলà§\87 à¦\86ন à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦ªà§°à¦¾ à¦ªà§\83থà¦\95 à¦\95ৰিবলà§\88 \n[[Special:CreateAccount|à¦\8fà¦\95াà¦\89ণ্ট সৃষ্টি কৰক]] বা [[Special:UserLogin|প্ৰৱেশ কৰক]] ।''",
        "noarticletext": "এই পৃষ্ঠাত বৰ্তমান কোনো পাঠ্য নাই ।\nআপুনি আন পৃষ্ঠাত [[Special:Search/{{PAGENAME}}|এই শিৰোনামা সন্ধান কৰিব পাৰে]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পৰ্কীয় অভিলেখ সন্ধান কৰিব পাৰে],\nবা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পৃষ্ঠা সৃষ্টি কৰিব পাৰে]</span>",
        "noarticletext-nopermission": "এই পৃষ্ঠাত বৰ্তমান কোনো পাঠ্য নাই।\nআপুনি আন পৃষ্ঠাত [[Special:Search/{{PAGENAME}}|এই শিৰোনামা সন্ধান কৰিব পাৰে]],\nবা <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পৰ্কীয় অভিলেখ সন্ধান কৰিব পাৰে]</span>, কিন্তু এই পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "missing-revision": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।",
        "explainconflict": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত আন কোনোবাই এই পৃষ্ঠাটো সলনি কৰিলে।\nপাঠ্য-স্থানৰ উপৰ ভাগত এই পৃষ্ঠাৰ প্ৰচলিত পাঠ্য দিয়া হৈছে।\nআপোনাৰ সলনিসমূহ পাঠ্য-স্থানৰ তলৰ ভাগত দেখুওৱা হৈছে।\nআপুনি আপোনাৰ সালসলনিসমূহ প্ৰচলিত পাঠ্যত অন্তৰ্ভুক্ত কৰিব পাৰে।\nআপুনি \"$1\" টিপিলে '''কেৱল''' পাঠ্য-স্থানৰ উপৰ ভাগৰ অংশখিনিহে সংৰক্ষিত হ'ব ।",
        "yourtext": "আপুনি লিখা পাঠ",
        "storedversion": "জমা সংস্কৰণ",
-       "nonunicodebrowser": "'''সতৰ্কবাণী: আপোনাৰ ব্ৰাউজাৰ ইউনিক’ড-ভাৱাপন্ন নহয় ।'''\nআপুনি ঠিকমতে সম্পাদনা কৰিব পৰাকৈ সমাধান আছে: non-ASCII কেৰেক্টাৰবোৰ সম্পাদনা ক্ষেত্ৰত hexadecimal ক’ড হিছাপে দেখা যাব ।",
        "editingold": "'''সাৱধান: আপুনি এই পৃষ্ঠাৰ এটি পুৰণি সংস্কৰণ সম্পাদনা কৰি আছে ।\nযদি আপুনি আপোনাৰ সম্পাদনাসমূহ জমা কৰে, সেই পৰৱৰ্তী সংস্কৰণসমূহ হেৰাই যাব ‌‌।'''",
        "yourdiff": "তফাৎ",
        "copyrightwarning": "অনুগ্ৰহ কৰি মন কৰক যে {{SITENAME}}লৈ কৰা সকলো বৰঙণি $2 ৰ চৰ্তাৱলীৰ মতে প্ৰদান কৰা বুলি ধৰি লোৱা হ'ব (আৰু অধিক জানিবলৈ $1 চাওক)। যদি আপুনি আপোনাৰ লিখনি নিৰ্দয়ভাৱে সম্পাদনা কৰা আৰু ইচ্ছামতে পুনৰ্বিতৰণ কৰা ভাল নাপায়, তেনেহ'লে নিজৰ লিখনি ইয়াত নিদিব।\n<br />\n\nইয়াত আপোনাৰ লিখনি দিয়াৰ লগে লগে আপোনা-আপুনি প্ৰতিশ্ৰুতি দিয়া হৈছে যে এই লিখনিটো আপোনাৰ মৌলিক লিখনি, বা কোনো স্বত্বাধিকাৰ নথকা বা কোনো ৰাজহুৱা ৱেবছাইট বা তেনে কোনো মুকলি উৎসৰ পৰা আহৰণ কৰা।\n'''স্বত্বাধিকাৰযুক্ত কোনো সমল অনুমতি অবিহনে দাখিল নকৰে যেন!'''",
        "recentchanges-legend-heading": "<strong>ব্যাখ্যা:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (লগতে [[Special:NewPages|নতুন পৃষ্ঠাসমূহৰ তালিকা]] চাওক)",
        "recentchanges-legend-plusminus": "(''±১২৩'')",
-       "rcnotefrom": "তলত '''$2''' ৰ পৰা হোৱা ('''$1''' লৈকে) পৰিৱৰ্তন দেখুৱা হৈছে ।",
+       "rcnotefrom": "<strong>$2</strong>ৰ পৰা হোৱা পৰিৱৰ্তনসমূহ (সৰ্বোচ্চ <strong>$1টা</strong> দেখুৱা হৈছে)।",
        "rclistfrom": "$3 $2ৰ পৰা নতুন সালসলনি দেখুৱাওক",
        "rcshowhideminor": "$1 -সংখ্যক নগণ্য সম্পাদনা",
        "rcshowhideminor-show": "দেখুৱাওক",
        "unwatchthispage": "চকু দিয়া বন্ধ কৰক",
        "notanarticle": "সমল পৃষ্ঠা নহয়",
        "notvisiblerev": "অন্য কোনো সদস্যই কৰা সংশোধনী বিলোপ কৰা হৈছে",
-       "watchlist-details": "à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠাসমà§\82হ à¦¬à§\87লà§\87à¦\97à¦\95à§\88 à¦²à§\87à¦\96ত à¦¨à¦§à§°à¦¿ {{PLURAL:$1|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা}} à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦\86à¦\9bà§\87।",
+       "watchlist-details": "à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত {{PLURAL:$1|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা}}  à¦\86à¦\9bà§\87 (à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠাসহ)।",
        "wlheader-enotif": "ইমেইল জাননী সক্ৰিয় কৰা হৈছে।",
        "wlheader-showupdated": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
-       "wlnote": "তলত {{PLURAL:$1| হ'ল সৰ্বশেষ পৰিৱৰ্তন|হ'ল সৰ্বশেষ '''$1''' পৰিৱৰ্তনসমূহ}} সৰ্বশেষ {{PLURAL:$2|ঘন্টা|'''$2''' ঘন্টা}}, $3, $4 -ৰ হিচাপে।",
+       "wlnote": "তলত $3, $4 তাৰিখত বিগত {{PLURAL:$2|১ ঘণ্টাত|<strong>$2</strong> ঘণ্টাত}} সংঘটিত {{PLURAL:$1|শেহতীয়া এটা পৰিৱৰ্তন|শেহতীয়া <strong>$1টা</strong> পৰিৱৰ্তন}} দেখুওৱা হ'ল।",
        "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন  চাওক",
        "wlshowhidecategorization": "পৃষ্ঠা শ্ৰেণীকৰণ",
        "watchlist-options": "লক্ষ্য-তালিকা পছন্দসমূহ",
        "block": "সদস্য বাৰণ কৰক",
        "unblock": "সদস্যৰ বাৰণ উঠাই লওক",
        "blockip": "সদস্য বাৰণ কৰক",
-       "blockip-legend": "সদস্য বাৰণ কৰক",
        "blockiptext": "তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি কোনো নিৰ্দিষ্ট আই.পি. ঠিকনা বা সদস্যনামৰ লিখাৰ অধিকাৰ বাৰণ কৰিব পাৰে ।\nকেৱল ধ্বংসপ্ৰৱণতা ৰোধ কৰিবলৈ আৰু [[{{MediaWiki:Policy-url}}|নীতি]] মানি চলি এনে কৰক ।\nতলত এটা নিৰ্দিষ্ট কাৰণ উল্লেখ কৰক (যেনে, ধ্বংসসাধন কৰা পৃষ্ঠাৰ নাম) ।",
        "ipaddressorusername": "আই-পি ঠিকনা বা সদস্যনাম:",
        "ipbexpiry": "ম্যাদ উকলিব:",
        "tooltip-feed-rss": "এই পৃষ্ঠাৰ বাবে আৰ-এচ-এচ ভুক্তি",
        "tooltip-feed-atom": "এই পৃষ্ঠাৰ বাবে এটম ভুক্তি",
        "tooltip-t-contributions": "{{GENDER:$1|এই সদস্যজনৰ}} বৰঙণিসমূহৰ তালিকা চাওক",
-       "tooltip-t-emailuser": "এই সদস্যজনলৈ ই-মেইল পঠাওক",
+       "tooltip-t-emailuser": "{{GENDER:$1|এই সদস্যগৰাকীলৈ}} এটা ইমেইল পঠিয়াওক",
        "tooltip-t-info": "এই পৃষ্ঠাৰ বিষয়ে অধিক তথ্য",
        "tooltip-t-upload": "ফাইল আপল'ডৰ বাবে",
        "tooltip-t-specialpages": "বিশেষ পৃষ্ঠাসমূহৰ সূচী",
        "logentry-rights-rights-legacy": "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
        "logentry-rights-autopromote": "$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপল'ড কৰা হ'ল}}",
+       "logentry-upload-overwrite": "$1 $3-ৰ এটা নতুন সংস্কৰণ {{GENDER:$2|-এ আপল'ড কৰিছে}}",
        "rightsnone": "(নাই)",
        "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
        "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
index 36c29a9..46ea545 100644 (file)
        "loginerror": "Error d'aniciu de sesión",
        "createacct-error": "Error de creación de cuenta",
        "createaccounterror": "Nun se pudo crear la cuenta: $1",
-       "nocookiesnew": "La cuenta d'usuariu ta creada, pero nun anició sesión.\n{{SITENAME}} usa «cookies» pa identificar a los usuarios.\nTien les «cookies» desactivaes.\nPor favor activeles y anicie sesión col nuevu nome d'usuariu y contraseña.",
+       "nocookiesnew": "La cuenta d'usuariu ta creada, pero nun aniciasti sesión.\n{{SITENAME}} usa «cookies» pa identificar a los usuarios.\nTienes les «cookies» desactivaes.\nPor favor actívales y anicia sesión col nuevu nome d'usuariu y contraseña.",
        "nocookieslogin": "{{SITENAME}} usa «cookies» pa identificar a los usuarios.\nTien les «cookies» desactivaes.\nPor favor activeles y vuelva a intentalo.",
        "nocookiesfornew": "La cuenta nun se creó porque nun pudimos confirmar l'orixe.\nComprueba que tienes activaes les «cookies», recarga esta páxina y vuelvi a intentalo.",
        "createacct-loginerror": "La cuenta creóse correchamente, pero nun pudo aniciase sesión automáticamente. Sigui col [[Special:UserLogin|accesu manual]].",
        "anonpreviewwarning": "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
        "missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"$1\", la to edición guardaráse ensin nengún resume.",
        "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «$1», crearáse la redireición de toles maneres.",
-       "missingcommenttext": "Por favor, escribi un comentariu abaxo.",
+       "missingcommenttext": "Escribi un comentariu.",
        "missingcommentheader": "<strong>Recordatoriu:</strong> Nun conseñasti un asuntu pa esti comentariu.\nSi calques nuevamente «$1», la to edición guardaráse ensin nengunu.",
        "summary-preview": "Vista previa del resume d'edición:",
        "subject-preview": "Vista previa del asuntu:",
        "sectioneditnotsupported-text": "La edición de seición nun tien sofitu nesta páxina.",
        "permissionserrors": "Fallu de permisos",
        "permissionserrorstext": "Nun tien permisu pa facer eso {{PLURAL:$1|pol siguiente motivu|polos siguientes motivos}}:",
-       "permissionserrorstext-withaction": "Nun tien permisu pa $2 {{PLURAL:$1|pol siguiente motivu|polos siguientes motivos}}:",
+       "permissionserrorstext-withaction": "Nun tienes permisu pa $2 {{PLURAL:$1|pol siguiente motivu|polos siguientes motivos}}:",
        "contentmodelediterror": "Nun ye posible editar esta revisión porque'l so modelu de conteníu ye <code>$1</code>, que ye distintu del modelu de conteníu actual de la páxina, <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Avisu: Tas volviendo a crear una páxina que se desanició anteriormente.'''\n\nHabríes considerar si ye afechisco siguir editando esta páxina.\nEquí tienes el rexistru de desanicios y tresllaos d'esta páxina:",
        "moveddeleted-notice": "Esta páxina se desanició.\nComo referencia, embaxo s'ufre'l rexistru de desanicios, proteiciones y tresllaos de la páxina.",
        "shown-title": "Amosar $1 {{PLURAL:$1|resultáu|resultaos}} por páxina",
        "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Hai una páxina nomada \"[[$1]]\" nesta wiki'''",
-       "searchmenu-new": "<strong>¡Crear la páxina «[[:$1]]» nesta wiki!</strong> {{PLURAL:$2|0=|Vea tamién la páxina que s'alcontró cola gueta.|Vea tamién los resultaos qu'alcontró la gueta.}}",
+       "searchmenu-new": "<strong>¡Crear la páxina «[[:$1]]» nesta wiki!</strong> {{PLURAL:$2|0=|Ver tamién la páxina que s'alcontró cola gueta.|Ver tamién los resultaos qu'alcontró la gueta.}}",
        "searchprofile-articles": "Páxines de conteníu",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Too",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Océanu Índicu",
        "timezoneregion-pacific": "Océanu Pacíficu",
-       "allowemail": "Dexar a los otros usuarios mandate correos",
-       "email-blacklist-label": "Torgar a estos usuarios unviame correos electrónicos:",
+       "allowemail": "Permitir qu'otros usuarios m'unvien correos",
+       "email-blacklist-label": "Torgar qu'estos usuarios m'unvien correos electrónicos:",
        "prefs-searchoptions": "Buscar",
        "prefs-namespaces": "Espacios de nome",
        "default": "predetermináu",
        "recentchanges-legend": "Opciones de cambios recientes",
        "recentchanges-summary": "Sigui los cambios más recientes na wiki nesta páxina.",
        "recentchanges-noresult": "Nengún cambiu nel periodu conseñáu coincide con esos criterios.",
+       "recentchanges-timeout": "Esta gueta escosó'l tiempu. Escurque quieras tentar con parámetros de gueta distintos.",
+       "recentchanges-network": "Nun se cargó nenguna resultancia por cuenta d'un problema técnicu. Tenta volver a cargar la páxina.",
        "recentchanges-feed-description": "Sigui nesta canal los últimos cambios de la wiki.",
        "recentchanges-label-newpage": "Esta edición creó una páxina nueva",
        "recentchanges-label-minor": "Esta ye una edición menor",
        "recentchanges-submit": "Amosar",
        "rcfilters-tag-remove": "Desanicia '$1'",
        "rcfilters-legend-heading": "<strong>Llista d'abreviatures:</strong>",
-       "rcfilters-other-review-tools": "<strong>Otres ferramientes de revisión</strong>",
+       "rcfilters-other-review-tools": "Otres ferramientes de revisión",
        "rcfilters-group-results-by-page": "Agrupar resultancies per páxina",
        "rcfilters-grouping-title": "Agrupamientu",
        "rcfilters-activefilters": "Filtros activos",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|hores}}",
        "rcfilters-highlighted-filters-list": "Resaltao: $1",
        "rcfilters-quickfilters": "Filtros guardaos",
-       "rcfilters-quickfilters-placeholder-title": "Entá nun se guardaron enllaces",
+       "rcfilters-quickfilters-placeholder-title": "Entá nun se guardó nengún filtru",
        "rcfilters-quickfilters-placeholder-description": "Pa guardar les preferencies del filtru y volver a usales sero, pulsia nel iconu del marcador del área de Filtru Activu más abaxo.",
        "rcfilters-savedqueries-defaultlabel": "Filtros guardaos",
        "rcfilters-savedqueries-rename": "Renomar",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Crear filtru predetermináu",
        "rcfilters-savedqueries-cancel-label": "Encaboxar",
        "rcfilters-savedqueries-add-new-title": "Guardar les preferencies de filtru actuales",
+       "rcfilters-savedqueries-already-saved": "Estos filtros yá se guardaron",
        "rcfilters-restore-default-filters": "Restaurar los filtros predeterminaos",
        "rcfilters-clear-all-filters": "Borrar tolos filtros",
        "rcfilters-show-new-changes": "Ver los cambeos más recién",
-       "rcfilters-search-placeholder": "Filtriar cambeos recién (restolar o empezar a escribir)",
+       "rcfilters-search-placeholder": "Filtriar cambeos (usa'l menú o busca'l nome del filtru)",
        "rcfilters-invalid-filter": "Filtru inválidu",
        "rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filter-user-experience-level-unregistered-label": "Non rexistraos",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que nun tán coneutaos.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Recién llegaos",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Editores rexistraos con menos de 10 ediciones y 4 díes d'actividá.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores rexistraos que tienen menos de 10 ediciones o 4 díes d'actividá.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprendices",
        "rcfilters-filter-user-experience-level-learner-description": "Editores rexistraos con esperiencia ente «Recién llegaos» y «Usuarios espertos».",
        "rcfilters-filter-user-experience-level-experienced-label": "Usuarios espertos",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Torgar los seleicionaos",
        "rcfilters-exclude-button-on": "Torgando los seleicionaos",
-       "rcfilters-view-advanced-filters-label": "Filtros avanzaos",
        "rcfilters-view-tags": "Ediciones etiquetaes",
        "rcfilters-view-namespaces-tooltip": "Filtriar los resultaos por espaciu de nomes",
        "rcfilters-view-tags-tooltip": "Filtriar los resultaos usando les etiquetes d'edición",
        "uploaded-script-svg": "Alcontróse l'elementu «$1» que puede recibir scripts nel ficheru SVG xubíu.",
        "uploaded-hostile-svg": "Alcontróse CSS inseguru nel elementu d'estilu del ficheru SVG xubíu.",
        "uploaded-event-handler-on-svg": "Nun se permite configurar los atributos de controladores de socesos <code>$1=\"$2\"</code> nos ficheros SVG.",
-       "uploaded-href-attribute-svg": "Los atributos href de los ficheros SVG are sólo pueden enllazar a destinos http:// o https://, alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> los elementos solo pueden enllazar (href) con destinos «data:» (ficheru incrustáu), «http://», «https://» o de fragmentu («#», «same-document»). Pa otros elementos como <image>, sólo se permiten «data:» y fragmentu. Tenta incrustar les imaxes al esportar el SVG. Atopóse <code>&lt;$1 $2=\"$3\"&gt;</code>",
        "uploaded-href-unsafe-target-svg": "Alcontróse un href a datos inseguros: la URI de destín <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploaded-animate-svg": "Alcontróse la etiqueta \"animate\" que puede cambiar href, usando l'atributu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploaded-setting-event-handler-svg": "Ta torgada la configuración d'atributos del xestor de socesos. Alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploadstash-refresh": "Anovar la llista de ficheros",
        "uploadstash-thumbnail": "ver miniatura",
        "uploadstash-exception": "Nun pudo guardase la subida nel almacén ($1): «$2».",
+       "uploadstash-bad-path": "La ruta nun esiste.",
+       "uploadstash-bad-path-invalid": "La ruta nun ye válida.",
+       "uploadstash-bad-path-unknown-type": "Triba «$1» desconocida.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nun se reconoció'l nome de miniatura.",
+       "uploadstash-bad-path-no-handler": "Nun s'alcontró un xestor pal tipu mime $1 del ficheru $2.",
+       "uploadstash-bad-path-bad-format": "La clave «$1» nun ta nun formatu correutu.",
+       "uploadstash-file-not-found": "La clave «$1» nun s'alcontró nel almacén.",
+       "uploadstash-file-not-found-no-thumb": "Nun pudo llograse la miniatura.",
+       "uploadstash-file-not-found-no-local-path": "Nun hai una ruta llocal pal elementu redimensionáu.",
+       "uploadstash-file-not-found-no-object": "Nun pudo crease l'oxetu de ficheru llocal pa la miniatura.",
+       "uploadstash-file-not-found-no-remote-thumb": "Fallu al llograr la miniatura: $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "Falta la cabecera de triba de conteníu.",
+       "uploadstash-file-not-found-not-exists": "Nun pudo alcontrase la ruta, o nun ye un ficheru.",
+       "uploadstash-file-too-large": "Nun puede sirvise un ficheru mayor de $1 bytes.",
+       "uploadstash-not-logged-in": "Nun hai usuarios con sesión aniciada, los ficheros tienen de pertenecer a usuarios.",
+       "uploadstash-wrong-owner": "Esti ficheru ($1) nun pertenez al usuariu actual.",
+       "uploadstash-no-such-key": "Nun esiste esa clave ($1), nun pudo desaniciase.",
+       "uploadstash-no-extension": "La estensión ye nula.",
+       "uploadstash-zero-length": "El ficheru tien tamañu cero.",
        "invalid-chunk-offset": "Allugamientu inválidu del fragmentu",
        "img-auth-accessdenied": "Accesu denegáu",
        "img-auth-nopathinfo": "Falta PATH_INFO.\nEl to sirvidor nun ta configuráu pa pasar esta información.\nPue tar basáu en CGI y nun tener sofitu pa img_auth.\nVer https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "deadendpagestext": "Les páxines siguientes nun enllacien a páxina dala de {{SITENAME}}.",
        "protectedpages": "Páxines protexíes",
        "protectedpages-indef": "Namái les proteiciones permanentes",
-       "protectedpages-summary": "Esta páxina llista les páxines esistentes que tan protexíes actualmente. Pa ver la llista de títulos que tienen torgada la creación, vea [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-summary": "Esta páxina amuesa la llista de páxines esistentes que tan protexíes actualmente. Pa la llista de títulos que tienen torgada la creación, ver [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Namái proteiciones en cascada",
        "protectedpages-noredirect": "Anubrir redireiciones",
        "protectedpagesempty": "Nun hai páxines protexíes anguaño con estos parámetros.",
        "protectedpages-unknown-timestamp": "Desconocida",
        "protectedpages-unknown-performer": "Usuariu desconocíu",
        "protectedtitles": "Títulos protexíos",
-       "protectedtitles-summary": "Esta páxina llista los títulos que tienen torgada la creación. Pa ver una llista de les páxines protexíes esistentes, vea [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "Esta páxina amuesa la llista de títulos que tienen torgada la creación. Pa ver una llista de les páxines protexíes esistentes, ver [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Nun hai títulos protexíos anguaño con estos parámetros.",
        "protectedtitles-submit": "Amosar títulos",
        "listusers": "Llista d'usuarios",
index 999a6bd..548fa4c 100644 (file)
        "talk": "Müzakirə",
        "views": "Görünüş",
        "toolbox": "Alətlər",
+       "tool-link-userrights": "{{GENDER:$1|İstifadəçi}} qruplarını dəyişdir",
+       "tool-link-userrights-readonly": "{{GENDER:$1|İstifadəçi}} qruplarına bax",
        "imagepage": "Fayl səhifəsini göstər",
        "mediawikipage": "Mesaj səhifəsini göstər",
        "templatepage": "Şablon səhifəsini göstər",
        "currentevents-url": "Project:Aktual hadisələr",
        "disclaimers": "Məsuliyyətdən imtina",
        "disclaimerpage": "Project:Məsuliyyətdən imtina",
-       "edithelp": "Redaktə kömək",
+       "edithelp": "Redaktədə köməklik",
        "helppage-top-gethelp": "Kömək",
        "mainpage": "Ana Səhifə",
        "mainpage-description": "Ana Səhifə",
        "password-login-forbidden": "Bu istifadəçi adından və paroldan istifadə qadağan olunub.",
        "mailmypassword": "E-mail ilə yeni parol göndər",
        "passwordremindertitle": "{{SITENAME}} parol xatırladıcı",
-       "passwordremindertext": "Kimsə (ehtimal ki siz özünüz, $1 IP ünvanından) {{SITENAME}} ($4) layihəsi \nüçün yeni bir parol göndərilməsini istəyib. \"$2\" adlı istifadəçi üçün müvəqqəti \nolaraq \"$3\" parolu yaradılıb. Əgər bu sizin istəyiniz əsasında olubsa, \nhesabınıza daxil olaraq yeni bir parol yaratmağınız vacibdir. Müvəqqəti parolunuz\n{{PLURAL:$5|1 gün|$5 gün}} ərzində qüvvədə olacaqdır.\n\nParol dəyişdirməni siz istəməmisinizsə və ya parolunuzu xatırladınızsa \nvə artıq parolunuzu dəyişdirmək istəmirsinizsə, bu mesaja əhəmiyyət vermədən \nəvvəlki parolunuzdan istifadə etməyə davam edə bilərsiniz.",
+       "passwordremindertext": "Kimsə (ehtimal ki, siz özünüz, $1 IP ünvanından) {{SITENAME}} ($4) layihəsi \nüçün yeni bir parol göndərilməsini istəyib. \"$2\" adlı istifadəçi üçün müvəqqəti \nolaraq \"$3\" parolu yaradılıb. Əgər bu sizin istəyiniz əsasında olubsa, \nhesabınıza daxil olaraq yeni bir parol yaratmağınız vacibdir. Müvəqqəti parolunuz\n{{PLURAL:$5|1 gün|$5 gün}} ərzində qüvvədə olacaqdır.\n\nParol dəyişdirməni siz istəməmisinizsə və ya parolunuzu xatırladınızsa \nvə artıq parolunuzu dəyişdirmək istəmirsinizsə, bu mesaja əhəmiyyət vermədən \nəvvəlki parolunuzdan istifadə etməyə davam edə bilərsiniz.",
        "noemail": "\"$1\" adlı istifadəçi e-poçt ünvanını qeyd etməmişdir.",
        "noemailcreate": "Düzgün e-poçt ünvanı qeyd etməlisiniz",
        "passwordsent": "Yeni parol \"$1\" üçün qeydiyyata alınan e-poçt ünvanına göndərilmişdir.\nXahiş edirik, e-məktubu aldıqdan sonra yenidən daxil olasınız.",
        "throttled-mailpassword": "Bir parol sıfırlama e-poçtu son {{PLURAL:$1|bir saat|$1 saat}} içində zatən göndərildi. Xidməti pis niyyətlə istifadə etməyi önləmək üçün, hər {{PLURAL:$1|bir saatda|$1 saatda}} sadəcə bir parol sıfırlama e-poçtu göndəriləcəkdir.",
        "mailerror": "Məktub göndərmə xətası: $1",
        "acct_creation_throttle_hit": "Sizin IP ünvanınızdan bu vikidə son $2 ərzində {{PLURAL:$1|1 hesab|$1 hesab}} açılmışdır və bu, həmin müddət ərzində icazə verilən maksimum saydır.\nBu səbəbdən, bu IP ünvanı istifadə edən istifadəçilər hal-hazırda başqa hesab aça bilməzlər.",
-       "emailauthenticated": "E-poçt ünvanınız $2 saat $3 tarixində təsdiq edilib.",
+       "emailauthenticated": "E-poçt ünvanınız $3, $2 tarixində təsdiq edilib.",
        "emailnotauthenticated": "E-poçt ünvanınız təsdiq edilməyib.\nAşağıdakı xidmətlərin heç biri üçün Sizə e-məktub göndərilməyəcək.",
        "noemailprefs": "Bu xidmətlərdən yararlanmaq üçün nizamlamalarında E-məktub ünvanını göstər.",
        "emailconfirmlink": "E-poçt ünvanını təsdiq et",
        "anoneditwarning": "<strong>Diqqət:</strong> Siz sistemə daxil olmamısınız. Hər hansı dəyişiklik etsəniz, sizin IP-ünvanınız hamıya görünəcək. Əgər <strong>[$1 daxil olsanız]</strong> və ya <strong>[$2 hesab yaratsanız]</strong>, redaktələriniz sizin istifadəçi adınıza yazılacaq və digər üstünlüklər də qazanacaqsınız.",
        "anonpreviewwarning": "Sistemə daxil olmamısınız. \"Səhifəni qeyd et\" düyməsini bassanız IP ünvanınız səhifənin tarixçəsində qeyd olunacaq.",
        "missingsummary": "'''Xatırlatma.''' Siz dəyişikliklərin qısa şərhini verməmisiniz. \"Səhifəni qeyd et\" düyməsinə təkrar basandan sonra sizin dəyişiklikləriniz şərhsiz qeyd olunacaq.",
-       "missingcommenttext": "Zəhmət olmasa, aşağıda şərhinizi yazın.",
+       "missingcommenttext": "Zəhmət olmasa, şərh yazın.",
        "summary-preview": "Dəyişikliyin izahının görünüşü:",
        "subject-preview": "Sərlövhə belə olacaq:",
        "blockedtitle": "İstifadəçi bloklanıb",
        "powersearch-togglelabel": "Yoxla:",
        "powersearch-toggleall": "Hamısı",
        "powersearch-togglenone": "Heç biri",
+       "powersearch-remember": "Gələcək axtarışlarımda bu seçimi xatırla",
        "search-external": "Xarici axtarış",
        "preferences": "Nizamlamalar",
        "mypreferences": "Nizamlamalar",
        "timezoneregion-europe": "Avropa",
        "timezoneregion-indian": "Hind Okeanı",
        "timezoneregion-pacific": "Sakit Okean",
-       "allowemail": "Digər istifadəçilər mənə e-məktub göndərə bilər",
+       "allowemail": "Digər istifadəçilərin mənə e-məktub göndərməsinə icazə ver",
        "prefs-searchoptions": "Axtar",
        "prefs-namespaces": "Adlar fəzası",
        "default": "boş",
        "prefs-custom-css": "Xüsusi CSS",
        "prefs-custom-js": "Xüsusi JavaScript",
        "prefs-common-css-js": "Bütün skinlər üçün ümumi CSS/JavaScript:",
+       "prefs-reset-intro": "Bu səhifəni nizamlamalarınızı ilkin vəziyyətə gətirmək üçün istifadə edə bilərsiniz. Bu əməliyyat geri qaytarıla bilməz.",
        "prefs-emailconfirm-label": "E-poçtun təsdiqlənməsi:",
        "youremail": "E-məktub:",
        "username": "{{GENDER:$1|İstifadəçi adı}}:",
        "editusergroup": "İstifadəçi qruplarını yüklə",
        "editinguser": "İstifadəçi <strong>[[User:$1|$1]]</strong> $2 üçün istifadəçi hüquqları dəyişdirilir",
        "userrights-editusergroup": "İstifadəçinin qruplarını redaktə et",
+       "userrights-viewusergroup": "{{GENDER:$1|İstifadəçi}} qruplarına bax",
        "saveusergroups": "{{GENDER:$1|İstifadəçi}} qruplarını qeyd et",
        "userrights-groupsmember": "Daxil olduğu qruplar:",
        "userrights-groupsmember-auto": "Güman edilən üzv:",
+       "userrights-groups-help": "Bu istifadəçinin daxil olduğu qrupları dəyişdirə bilərsiniz:\n* İşarələnmiş qutucuq istifadəçinin o qrupa daxil olduğunu bildirir.\n* Seçilməmiş qutucuq istifadəçinin o qrupa daxil olmadığını bildirir.\n* * simvolu istifadəçini bir dəfə əlavə etdikdən və ya çıxardıqdan sonra bu əməliyyatın əksini yerinə yetirə bilməyəcəyinizi göstərir.\n* # simvolu bu qrupda üzvlük müddətini uzada biləcəyinizi, lakin qısalda bilməyəcəyinizi göstərir.",
        "userrights-reason": "Səbəb:",
        "userrights-no-interwiki": "Sizə başqa vikilayihələrdəki istifadəçilərin statusunu dəyişməyə icazə verilməyib",
        "userrights-nodatabase": "$1 verilənlər bazası ya mövcud deyil, ya da lokal deyil.",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
        "recentchanges-submit": "Göstər",
        "rcfilters-legend-heading": "<strong>Abreviaturalar siyahısı:</strong>",
-       "rcfilters-other-review-tools": "<strong>Digər yoxlama alətləri</strong>",
+       "rcfilters-other-review-tools": "Digər yoxlama alətləri",
        "rcfilters-group-results-by-page": "Dəyişiklikləri səhifələrə görə qruplaşdır",
        "rcfilters-grouping-title": "Qruplaşdırma",
        "rcfilters-activefilters": "Aktiv filtrlər",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|gün|gün}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|saat|saat}}",
        "rcfilters-quickfilters": "Yaddaşdakı filtrlər",
-       "rcfilters-quickfilters-placeholder-title": "Yaddaşa verilmiş keçid yoxdur",
+       "rcfilters-quickfilters-placeholder-title": "Yaddaşa verilmiş filtr yoxdur",
        "rcfilters-quickfilters-placeholder-description": "Filtr nizamlamalarını yaddaşda saxlamaq və sonradan təkrar istifadə etmək üçün aşağıdakı Aktiv Filtrlər bölməsindəki əlfəcin nişanını tıqlayın.",
        "rcfilters-savedqueries-rename": "Adını dəyiş",
        "rcfilters-savedqueries-setdefault": "Standart filtr et",
        "rcfilters-filter-previousrevision-label": "Sonuncu olmayan versiya",
        "rcfilters-exclude-button-off": "Seçilənləri istisna et",
        "rcfilters-exclude-button-on": "Seçilmişlərin çıxarılması",
-       "rcfilters-view-advanced-filters-label": "Genişləndirilmiş filtrlər",
        "rcfilters-view-tags": "Etiketlənmiş redaktələr",
        "rcfilters-view-namespaces-tooltip": "Nəticələri adlar fəzasına görə filtrlə",
        "rcfilters-view-tags-tooltip": "Nəticələri redaktə etiketləri əsasında filtrlə",
        "restricted-displaytitle-ignored": "İmtina edilmiş görüntü başlıqlarına malik səhifələr",
        "mailnologin": "Ünvan yoxdur",
        "emailuser": "İstifadəçiyə e-məktub göndər",
+       "emailuser-title-target": "Bu {{GENDER:$1|istifadəçiyə}} e-məktub göndər",
        "defemailsubject": "\"$1\" adlı istifadəçidən {{SITENAME}} e-məktubu",
        "usermaildisabled": "İstifadəçi e-maili işləmir",
        "noemailtitle": "E-məktub ünvanı yoxdur",
        "exbeforeblank": "Silinmədən əvvəlki məzmun: '$1'",
        "delete-confirm": "Silinən səhifə: \"$1\"",
        "delete-legend": "Sil",
-       "historywarning": "'''Xəbərdarlıq:''' Silinəcək səhifənin tarixçəsində qeyd olunmuş $1 {{PLURAL:$1|redaktə|redaktə}} var:",
+       "historywarning": "'''Xəbərdarlıq:''' Silmək istədiyiniz səhifənin tarixçəsində qeyd olunmuş $1 {{PLURAL:$1|redaktə|redaktə}} var:",
        "historyaction-submit": "Göstər",
        "confirmdeletetext": "Bu səhifə və ya fayl bütün tarixçəsi ilə birlikdə birdəfəlik silinəcək. Bunu [[{{MediaWiki:Policy-url}}|qaydalara]] uyğun etdiyinizi və əməliyyatın nəticələrini başa düşdüyünüzü təsdiq edin.",
        "actioncomplete": "Fəaliyyət tamamlandı",
        "rollbackfailed": "Geri qaytarma uğursuzdur",
        "cantrollback": "Redaktə geri qaytarıla bilməz; axırıncı redaktə səhifədə olan yeganə fəaliyyətdir.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Müzakirə]]) tərəfindən edilmiş dəyişikliklər [[User:$1|$1]] tərəfindən edilmiş dəyişikliklərə qaytarıldı.",
-       "revertpage-nouser": "(istifadəçi adı çıxarılmış) tərəfindən edilən dəyişikliklər [[User:$1|$1]] tərəfindən edilən son dəyişikliyə geri alındı",
+       "revertpage-nouser": "İstifadəçi adı gizlədilmiş istifadəçi tərəfindən edilən dəyişikliklər  {{GENDER:$1|[[User:$1|$1]]}} tərəfindən edilmiş son redaktəyə geri qaytarıldı",
        "rollback-success": "$1 tərəfindən edilmiş redaktələr geri qaytarıldı; $2 tərəfindən yaradılmış son versiya bərpa olundu.",
        "sessionfailure-title": "Giriş səhvi",
        "changecontentmodel-reason-label": "Səbəb:",
index e43fb43..9abf0be 100644 (file)
        "recentchanges-label-plusminus": "صفحه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
        "recentchanges-legend-heading": "<strong>قیسالتمالار:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بیرده [[Special:NewPages|یئنی صفحه‌لرین لیستینه]] باخین)",
+       "rcfilters-other-review-tools": "داها یوخلاما آلتلری",
+       "rcfilters-savedqueries-defaultlabel": "ذخیره اوْلونموش فیلترلر",
        "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
        "enotif_subject_restored": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله قایتاریلیب‌دیر",
        "enotif_subject_changed": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله دَییشیلیب‌دیر",
        "enotif_body_intro_deleted": "{{SITENAME}} صحیفه‌‌ $1-ی $PAGEEDITDATE تاریخیمده {{gender:$2|$2}} طرفیندن سیلینمیشدیر، $3-ی گؤرون.",
-       "enotif_body_intro_created": "{{SITENAME}} صحیفه‌‌$1-ای {{gender:$2|$2}} $PAGEEDITDATE-سینده سیلینمیشدیر، جاری يئنیدن باخما اوچون $3-ای گؤر.",
-       "enotif_body_intro_moved": "{{SITENAME}} صحیفه‌‌$1-ای {{gender:$2|$2}} $PAGEEDITDATE-سینده حرکت ائتدیریلن ، جاری يئنیدن باخما اوچون $3-ای گؤر.",
+       "enotif_body_intro_created": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله $PAGEEDITDATE-ده قایتاریلیب‌دیر، سون نوسخه اوچون $3  -ه باخین.",
+       "enotif_body_intro_moved": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله $PAGEEDITDATE-ده قایتاریلیب‌دیر، سون نوسخه اوچون $3- ه باخین.",
        "enotif_body_intro_restored": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله $PAGEEDITDATE-ده قایتاریلیب‌دیر، سون نوسخه اوچون $3-ه باخین.",
        "enotif_body_intro_changed": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله $PAGEEDITDATE-ده دَییشیلیب‌دیر، سون نوسخه اوچون $3-ه باخین.",
        "enotif_lastvisited": "سونونجو زیارتینیزدن ایندیدک اولان بوتون دییشیک‌لیک‌لری گؤرمک اوچون باخین: $1.",
        "deleting-backlinks-warning": "'''اخطار:''' بو سیلمگه قصدینیز اولان صفحه‌یه، [[Special:WhatLinksHere/{{FULLPAGENAME}}|باشقا صفحه‌لر]] باغلانتی وئریب یا اونو اؤزلرین‌ده ایشلدیب‌لر.",
        "rollback": "اوولکی نوسخه لر",
        "rollbacklink": "قایتار",
-       "rollbacklinkcount": "{{PLURAL:$1|دییشدیرمه}}نی قایتار",
+       "rollbacklinkcount": "{{PLURAL:$1|دییشدیرمه}}نی قایتار",
        "rollbacklinkcount-morethan": "$1-دن چوْخ دییشدیرمه‌نی قایتار",
        "rollbackfailed": "گئری قایتارما اوغورسوزدور",
        "cantrollback": "دییشدیر گئری قایتاریلا بیلمز؛ آخیرینجی دییشدیر صحیفه‌ده اولان یئگانه فالیت‌دیر.",
index 71824d3..e929115 100644 (file)
        "wrongpasswordempty": "Зинһар, буш булмаған серһүҙ керетегеҙ.",
        "passwordtooshort": "Серһүҙ кәмендә $1 {{PLURAL:$1|символдан}} торорға тейеш.",
        "passwordtoolong": "Серһүҙ {{PLURAL:$1|1 символдан}} артмаҫҡа тейеш.",
-       "passwordtoopopular": "Ð\99Ñ\8bÑ\88 Ò¡Ñ\83лланÑ\8bдған серһүҙ ҡабул ителмәй, Башҡа серһүҙ һайлағыҙ.",
+       "passwordtoopopular": "Ð\99Ñ\8bÑ\88 Ò¡Ñ\83лланÑ\8bлған серһүҙ ҡабул ителмәй, Башҡа серһүҙ һайлағыҙ.",
        "password-name-match": "Керетелгән серһүҙ ҡулланыусы исеменән айырылырға тейеш.",
        "password-login-forbidden": "Был ҡатнашыусы исемен һәм серһүҙҙе ҡулланыу тыйылған",
        "mailmypassword": "Серһүҙҙе ташлатыу",
        "recentchanges-submit": "Күрһәтергә",
        "rcfilters-tag-remove": "'$1'юй",
        "rcfilters-legend-heading": "<strong>Ҡыҫҡартыуҙар теҙмәһе:</strong>",
-       "rcfilters-other-review-tools": "<strong>Тикшереүҙең башҡа ҡоралдары</strong>",
+       "rcfilters-other-review-tools": "Тикшереүҙең башҡа ҡоралдары",
        "rcfilters-group-results-by-page": "Төркөмдөң төрлө биттәге һөҙөмтәләре",
        "rcfilters-grouping-title": "Төркөмләштереү",
        "rcfilters-activefilters": "Әүҙем фильтрҙар",
        "rcfilters-advancedfilters": "Киңәйтелгән фильтрҙар",
        "rcfilters-limit-title": "Күрһәтеү өсөн үҙгәртеүҙәр",
-       "rcfilters-limit-shownum": "{{PLURAL:$1|$1 һуңғы үҙгәреште}} күрһәтергә",
+       "rcfilters-limit-shownum": "Һуңғы $1 үҙгәреште күрһәтергә",
        "rcfilters-days-title": "Аҙаҡҡы көндәр",
        "rcfilters-hours-title": "Аҙаҡҡы сәғәттәр",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|көн}}",
        "rcfilters-tag-prefix-namespace-inverted": "<Strong>: </strong> $1 түгел",
        "rcfilters-exclude-button-off": "Һайланғанды алып ташларға",
        "rcfilters-exclude-button-on": "Һайланғанды алып ташалу",
-       "rcfilters-view-advanced-filters-label": "Киңәйтелгән фильтрҙар",
        "rcfilters-view-tags": "Тегтары булған үҙгәртеүҙәр",
        "rcfilters-view-namespaces-tooltip": "Фильтрҙың исемдәр яланындағы һөҙөмтәһе",
        "rcfilters-view-tags-tooltip": "Үҙгәртеү билдәләрен ҡулланған фильтрҙың һөҙөмтәһе",
index 56a5a58..33550b8 100644 (file)
        "anonpreviewwarning": "<em>Вы не ўвайшлі ў сыстэму. Па захаваньні старонкі ваш IP-адрас будзе дададзены ў яе гісторыю рэдагаваньняў.</em>",
        "missingsummary": "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў.\nКалі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.",
        "selfredirect": "<strong>Папярэджаньне:</strong> вы перанакіроўваеце старонку саму на сябе.\nМагчыма, вы пазначылі няслушную старонку для перанакіраваньня або вы рэдагуеце ня тую старонку.\nКалі вы націсьніце «$1» яшчэ раз, перанакіраваньне будзе створанае.",
-       "missingcommenttext": "Калі ласка, увядзіце камэнтар ніжэй.",
+       "missingcommenttext": "Калі ласка, увядзіце камэнтар.",
        "missingcommentheader": "<strong>Напамін:</strong> Вы не пазначылі загаловак камэнтара. Калі Вы націсьніце кнопку «$1» яшчэ раз, Вашая зьмена будзе захаваная без камэнтара.",
        "summary-preview": "Папярэдні прагляд апісаньня зьменаў:",
        "subject-preview": "Папярэдні прагляд загалоўку:",
        "prefs-editwatchlist-raw": "Рэдагаваць нефарматаваны сьпіс назіраньня",
        "prefs-editwatchlist-clear": "Ачысьціць ваш сьпіс назіраньня",
        "prefs-watchlist-days": "Колькасьць дзён для паказу ў сьпісе назіраньня:",
-       "prefs-watchlist-days-max": "(максымальна $1 {{PLURAL:$1|дзень|дні|дзён}})",
+       "prefs-watchlist-days-max": "Максымальна $1 {{PLURAL:$1|дзень|дні|дзён}}",
        "prefs-watchlist-edits": "Максымальная колькасьць зьменаў для паказу ў сьпісе назіраньня:",
        "prefs-watchlist-edits-max": "Максымальная колькасьць: 1000",
-       "prefs-watchlist-token": "СакÑ\80Ñ\8dÑ\82нÑ\8b Ðºлюч сьпісу назіраньня:",
+       "prefs-watchlist-token": "Ð\9aлюч сьпісу назіраньня:",
        "prefs-misc": "Рознае",
        "prefs-resetpass": "Зьмяніць пароль",
        "prefs-changeemail": "Зьмяніць ці выдаліць адрас электроннай пошты",
-       "prefs-setemail": "УÑ\81Ñ\82анавÑ\96ць адрас электроннай пошты",
+       "prefs-setemail": "Ð\92Ñ\8bзнаÑ\87Ñ\8bць адрас электроннай пошты",
        "prefs-email": "Налады электроннай пошты",
        "prefs-rendering": "Выгляд",
        "saveprefs": "Захаваць",
        "searchresultshead": "Пошук",
        "stub-threshold": "Максымальны памер старонкі для паказу спасылак як на накід ($1):",
        "stub-threshold-sample-link": "прыклад",
-       "stub-threshold-disabled": "Ð\92Ñ\8bключаны",
+       "stub-threshold-disabled": "Ð\90дключаны",
        "recentchangesdays": "Колькасьць дзён для паказу ў апошніх зьменах:",
-       "recentchangesdays-max": "(максымальна $1 {{PLURAL:$1|дзень|дні|дзён}})",
-       "recentchangescount": "Ð\9aолÑ\8cкаÑ\81Ñ\8cÑ\86Ñ\8c Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e Ð´Ð»Ñ\8f Ð¿Ð°ÐºÐ°Ð·Ñ\83 Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87ванÑ\8cнÑ\96:",
-       "prefs-help-recentchangescount": "Гэта датычыцца апошніх зьменах, гісторый старонак і журналаў.",
-       "prefs-help-watchlist-token2": "Ð\93Ñ\8dÑ\82а Ñ\81акÑ\80Ñ\8dÑ\82нÑ\8b ÐºÐ»Ñ\8eÑ\87 Ð´Ð° Ñ\81Ñ\82Ñ\83жкÑ\96 Ð²Ð°Ñ\88ага Ñ\81Ñ\8cпÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f.\nÐ\9aожнÑ\8b, Ñ\85Ñ\82о Ð²ÐµÐ´Ð°Ðµ Ñ\8fго, Ð¼Ð¾Ð¶Ð° Ð½Ð°Ð±Ñ\8bÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\81Ñ\8cпÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f, Ñ\82амÑ\83 Ð½Ðµ Ð´Ð·Ñ\8fлÑ\96Ñ\86еÑ\81Ñ\8f Ñ\96м.\n[[Special:ResetTokens|Ð\9fÑ\81Ñ\82Ñ\80Ñ\8bкнÑ\96Ñ\86е Ñ\82Ñ\83Ñ\82, ÐºÐ°Ð»Ñ\96 Ð²Ð°Ð¼ Ñ\82Ñ\80Ñ\8dба скінуць яго]].",
+       "recentchangesdays-max": "Максымальна $1 {{PLURAL:$1|дзень|дні|дзён}}",
+       "recentchangescount": "Колькасьць рэдагаваньняў для паказу па змоўчаньні:",
+       "prefs-help-recentchangescount": "Гэта ўключае апошнія зьмены, гісторыі старонак і журналы падзеяў.",
+       "prefs-help-watchlist-token2": "Ð\93Ñ\8dÑ\82а Ñ\81акÑ\80Ñ\8dÑ\82нÑ\8b ÐºÐ»Ñ\8eÑ\87 Ð´Ð° Ñ\81Ñ\82Ñ\83жкÑ\96 Ð²Ð°Ñ\88ага Ñ\81Ñ\8cпÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f.\nÐ\9aожнÑ\8b, Ñ\85Ñ\82о Ð²ÐµÐ´Ð°Ðµ Ñ\8fго, Ð¼Ð¾Ð¶Ð° Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\81Ñ\8cпÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f, Ñ\82амÑ\83 Ð½Ðµ Ð´Ð·Ñ\8fлÑ\96Ñ\86еÑ\81Ñ\8f Ñ\96м.\nÐ\9aалÑ\96 Ð²Ð°Ð¼ Ñ\82Ñ\80Ñ\8dба, [[Special:ResetTokens|вÑ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е скінуць яго]].",
        "savedprefs": "Вашыя налады былі захаваныя.",
        "savedrights": "Групы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 былі захаваныя.",
        "timezonelegend": "Часавы пояс:",
        "timezoneregion-europe": "Эўропа",
        "timezoneregion-indian": "Індыйскі акіян",
        "timezoneregion-pacific": "Ціхі акіян",
-       "allowemail": "Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц",
+       "allowemail": "Дазволіць іншым удзельнікам і ўдзельніцам дасылаць мне лісты электроннай поштай",
        "email-blacklist-label": "Забараніць гэтым удзельнікам дасылаць мне лісты электроннай поштай:",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Прасторы назваў",
        "recentchanges-legend": "Налады апошніх зьменаў",
        "recentchanges-summary": "Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} на гэтай старонцы.",
        "recentchanges-noresult": "Зьмены, што пасуюць дадзенаму пэрыяду і крытэрам, ня знойдзеныя.",
+       "recentchanges-timeout": "Адведзены на гэты пошук час скончыўся. Вы можаце паспрабаваць іншыя парамэтры пошуку.",
+       "recentchanges-network": "Праз тэхнічную памылку вынікі ня могуць быць загружаныя. Калі ласка, паспрабуйце абнавіць старонку.",
        "recentchanges-feed-description": "Сачыце за апошнімі зьменамі ў вікі праз гэтую стужку.",
        "recentchanges-label-newpage": "Гэтым рэдагаваньнем была створаная новая старонка",
        "recentchanges-label-minor": "Гэта дробнае рэдагаваньне",
        "recentchanges-submit": "Паказаць",
        "rcfilters-tag-remove": "Выдаліць «$1»",
        "rcfilters-legend-heading": "<strong>Сьпіс абрэвіятураў:</strong>",
-       "rcfilters-other-review-tools": "<strong>Іншыя інструмэнты праверкі</strong>",
+       "rcfilters-other-review-tools": "Іншыя інструмэнты праверкі",
        "rcfilters-group-results-by-page": "Групаваць вынікі паводле старонак",
        "rcfilters-grouping-title": "Групаваньне",
        "rcfilters-activefilters": "Актыўныя фільтры",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|гадзіна|гадзіны|гадзінаў}}",
        "rcfilters-highlighted-filters-list": "Вылучана: $1",
        "rcfilters-quickfilters": "Захаваныя фільтры",
-       "rcfilters-quickfilters-placeholder-title": "СпаÑ\81Ñ\8bлкÑ\96 Ñ\8fÑ\88Ñ\87Ñ\8d Ð½Ðµ Ð·Ð°Ñ\85аванÑ\8bÑ\8f",
+       "rcfilters-quickfilters-placeholder-title": "ЯÑ\88Ñ\87Ñ\8d Ð½Ñ\8fма Ð·Ð°Ñ\85аванÑ\8bÑ\85 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80аÑ\9e",
        "rcfilters-quickfilters-placeholder-description": "Каб захаваць налады вашага фільтру і выкарыстаць іх пазьней, націсьніце на выяву закладкі ў зоне актыўнага фільтру ніжэй.",
        "rcfilters-savedqueries-defaultlabel": "Захаваныя фільтры",
        "rcfilters-savedqueries-rename": "Перайменаваць",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Стварыць фільтар па змоўчаньні",
        "rcfilters-savedqueries-cancel-label": "Адмяніць",
        "rcfilters-savedqueries-add-new-title": "Захаваць цяперашнія налады фільтру",
+       "rcfilters-savedqueries-already-saved": "Гэтыя фільтры ўжо захаваныя. Зьмяніце вашыя налады, каб стварыць новы захаваны фільтар.",
        "rcfilters-restore-default-filters": "Аднавіць фільтры па змоўчаньні",
        "rcfilters-clear-all-filters": "Ачысьціць усе фільтры",
        "rcfilters-show-new-changes": "Праглядзець найноўшыя зьмены",
-       "rcfilters-search-placeholder": "ФÑ\96лÑ\8cÑ\82аÑ\80 Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\85 Ð·Ñ\8cменаÑ\9e (пÑ\80аглÑ\8fдзеÑ\86Ñ\8c Ð°Ð±Ð¾ Ð¿Ð°Ñ\87нÑ\96Ñ\86е Ð´Ñ\80Ñ\83каваÑ\86Ñ\8c)",
+       "rcfilters-search-placeholder": "ФÑ\96лÑ\8cÑ\82аÑ\80 Ð·Ñ\8cменаÑ\9e (Ñ\83жÑ\8bвайÑ\86е Ð¼Ñ\8dнÑ\8e Ñ\86Ñ\96 Ð¿Ð¾Ñ\88Ñ\83к Ð´Ð·ÐµÐ»Ñ\8f Ð½Ð°Ð·Ð²Ñ\8b Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\83)",
        "rcfilters-invalid-filter": "Няслушны фільтар",
        "rcfilters-empty-filter": "Няма актыўных фільтраў. Паказаны ўвесь унёсак.",
        "rcfilters-filterlist-title": "Фільтры",
        "rcfilters-filter-user-experience-level-unregistered-label": "Незарэгістраваныя",
        "rcfilters-filter-user-experience-level-unregistered-description": "Рэдактары, якія не ўвайшлі ў сыстэму",
        "rcfilters-filter-user-experience-level-newcomer-label": "Навічкі",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Зарэгістраваныя рэдактары зь менш чым 10 праўкамі і 4 днямі актыўнасьці.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Зарэгістраваныя рэдактары, якія маюць менш чым 10 правак ці 4 дні актыўнасьці.",
        "rcfilters-filter-user-experience-level-learner-label": "Вучні",
        "rcfilters-filter-user-experience-level-learner-description": "Зарэгістраваныя рэдактары, чый досьвед больш чым у «навічкоў», але меней чым у «дасьведчаных удзельнікаў».",
        "rcfilters-filter-user-experience-level-experienced-label": "Дасьведчаныя ўдзельнікі",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
        "rcfilters-exclude-button-off": "Выключыць абранае",
        "rcfilters-exclude-button-on": "За выключэньнем абранага",
-       "rcfilters-view-advanced-filters-label": "Пашыраныя фільтры",
        "rcfilters-view-tags": "Праўкі зь меткамі",
        "rcfilters-view-namespaces-tooltip": "Фільтар вынікаў паводле прасторы назваў",
        "rcfilters-view-tags-tooltip": "Фільтар вынікаў з дапамогай метак правак",
        "uploaded-script-svg": "У загружаным SVG-файле знойдзены небясьпечны элемэнт з падтрымкай сцэнароў «$1».",
        "uploaded-hostile-svg": "Знойдзены небясьпечны CSS у элемэнце стылю загружанага SVG-файла.",
        "uploaded-event-handler-on-svg": "Усталёўваць атрыбуты апрацоўніка падзеяў <code>$1=\"$2\"</code> не дазволена для SVG-файлаў.",
-       "uploaded-href-attribute-svg": "href-атрыбутам у SVG-файлах дазволена весьці толькі на http:// ці https://, знойдзена <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> элемэнты могуць толькі спасылацца (href) на зьвесткі: (укладзены файл), http:// ці https://, ці фрагмэнт (#, той жа дакумэнт). Для іншых элемэнтаў, такіх як <image>, толькі зьвесткі: фрагмэнты дазволеныя. Паспрабуйце ўкладзеныя выявы, калі экспартуеце ваш SVG. Знойдзена <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "У загружаным SVG-файле знойдзеная спасылка на небясьпечныя зьвесткі: URI-мэты <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "У загружаным SVG-файле знойдзены тэг «animate», які можа зьмяняць спасылку з дапамогай атрыбуту «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Усталёўка атрыбутаў апрацоўкі падзеяў заблякаваная, у загружаным SVG-файле знойдзены код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadstash-refresh": "Абнавіць сьпіс файлаў.",
        "uploadstash-thumbnail": "прагляд мініятуры",
        "uploadstash-exception": "Не магу захаваць загрузку ў сховішчы ($1): «$2».",
+       "uploadstash-bad-path": "Шлях не існуе.",
+       "uploadstash-bad-path-invalid": "Шлях не зьяўляецца слушным.",
+       "uploadstash-bad-path-unknown-type": "Невядомы тып «$1».",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Невядомая назва мініятуры.",
+       "uploadstash-bad-path-no-handler": "Ня знойдзены апрацоўнік для mime-тыпу $1 файлу $2.",
+       "uploadstash-bad-path-bad-format": "Ключ «$1» мае няслушны фармат.",
        "invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту",
        "img-auth-accessdenied": "Доступ забаронены",
        "img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сэрвэр не ўстаноўлены на пропуск гэтай інфармацыі.\nМагчма, ён працуе праз CGI і не падтрымлівае img_auth.\nГлядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "blocklog-showlog": "Гэты ўдзельнік ужо заблякаваны. Журнал блякаваньняў пададзены ніжэй:",
        "blocklog-showsuppresslog": "Гэты ўдзельнік ужо заблякаваны і схаваны. Журнал хаваньняў пададзены ніжэй:",
        "blocklogentry": "заблякаваны [[$1]] на тэрмін: $2 $3",
-       "reblock-logentry": "зьмененыя парамэтры блякаваньня для [[$1]] на тэрмін: з $2 да $3",
+       "reblock-logentry": "зьмененыя парамэтры блякаваньня для [[$1]] на тэрмін $2 $3",
        "blocklogtext": "Гэта журнал уліку блякаваньняў і разблякаваньняў удзельнікаў.\nАўтаматычна заблякаваныя IP-адрасы не пазначаныя.\nГлядзіце [[Special:BlockList|сьпіс блякаваньняў]], каб пабачыць дзейныя ў гэты момант блякаваньні.",
        "unblocklogentry": "разблякаваны $1",
        "block-log-flags-anononly": "толькі ананімныя ўдзельнікі",
        "pageinfo-few-watchers": "Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}",
        "pageinfo-few-visiting-watchers": "Могуць быць, а могуць ня быць удзельнікі, якія назіраюць за старонкай і бачылі апошнія зьмены",
        "pageinfo-redirects-name": "Перанакіраваньняў на гэтую старонку",
-       "pageinfo-subpages-name": "Колькасьць падстаронак",
+       "pageinfo-subpages-name": "Колькасьць падстаронак гэтай старонкі",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перанакіраваньне|перанакіраваньні|перанакіраваньняў}}; $3 {{PLURAL:$3|звычайная|звычайныя|звычайных}})",
        "pageinfo-firstuser": "Стваральнік старонкі",
        "pageinfo-firsttime": "Дата стварэньня старонкі",
index 9a6dd50..7e4665b 100644 (file)
@@ -82,7 +82,6 @@
        "underline-never": "Ніколі",
        "underline-default": "Як у браўзеры",
        "editfont-style": "Шрыфт у абшары праўкі:",
-       "editfont-default": "Як у браўзеры",
        "editfont-monospace": "Роўна-шырокі",
        "editfont-sansserif": "Без засечак",
        "editfont-serif": "З засечкамі",
        "explainconflict": "Нехта іншы змяніў старонку пасля таго, як вы пачалі працу з ёю.\nВерхняе тэкставае поле паказвае актуальны зыходны тэкст старонкі.\nВашы праўкі паказаны ў ніжнім тэкставым полі.\nВам трэба будзе далучыць іх да актуальнага зыходнага тэксту.\nКалі націснуць \"$1\", будзе запісаны '''толькі''' тэкст у верхнім полі.",
        "yourtext": "Свой тэкст",
        "storedversion": "Захаваная версія",
-       "nonunicodebrowser": "<strong>Увага: ваш браўзер не працуе з Unicode-кадаваннем.</strong> Каб вы маглі карэктна правіць старонкі, усе знакі, не ўключаныя ў ASCII, паказваюцца ў рэдактарскім акне як шаснаццаткавыя коды.",
        "editingold": "<strong>Увага: Вы правіце састарэлую версію гэтай старонкі.</strong>\nКалі Вы паспрабуеце захаваць яе, то страціце змены ў артыкуле, зробленыя пасля колішняга запісу гэтай версіі.",
        "yourdiff": "Адрозненні",
        "copyrightwarning": "Заўважце, што ўсе ўклады на {{GRAMMAR:месны|{{SITENAME}}}} лічацца выданымі на ўмовах $2 (гл. падрабязнасці на $1). Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, і свабодна распаўсюджваліся, то і не аддавайце іх сюды.<br />\nТаксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу.\n<strong>Нельга без дазволу дадаваць матэрыялы, абароненыя аўтарскім правам!</strong>",
        "expensive-parserfunction-warning": "Увага: На старонцы занадта шмат працаёмістых зваротаў да парсера.\n\nТрэба, каб зваротаў было меней за $2, а зараз ёсць $1.<!--In this particular lingual case, there's no need for plurals at all, so let's make checker happy by adding commented out {{PLURAL:$2|call|calls}} and {{PLURAL:$1|is now $1 call|are now $1 calls}}-->",
        "expensive-parserfunction-category": "Старонкі, дзе шмат працаёмістых зваротаў да парсера",
        "post-expand-template-inclusion-warning": "Увага: аб'ём улучанага шаблона занадта вялікі.\nНекаторыя шаблоны не будуць улучаныя.",
-       "post-expand-template-inclusion-category": "Старонкі, на якіх перавышаны максімальны аб'ём шаблона",
+       "post-expand-template-inclusion-category": "Старонкі, на якіх перавышаны максімальны абём шаблона",
        "post-expand-template-argument-warning": "Увага: на гэтай старонцы ёсць прынамсі адзін параметр шаблона, які занадта доўгі ў разгорнутым выглядзе.\nТакія параметры былі прапушчаныя.",
        "post-expand-template-argument-category": "Старонкі, на якіх прапушчаны параметры шаблонаў",
        "parser-template-loop-warning": "Цыклічнае ўключэнне шаблона: [[$1]]",
        "block": "Заблакаваць удзельніка",
        "unblock": "Разблакаваць удзельніка",
        "blockip": "Заблакаваць {{GENDER:$1|удзельніка|удзельніцу}}",
-       "blockip-legend": "Заблакаваць удзельніка",
        "blockiptext": "Гэты фармуляр дазваляе заблакаваць магчымасць запісу для пэўнага адрасу IP ці імя ўдзельніка.\nГэта трэба рабіць толькі дзеля засцерагання ад вандалізму і ў адпаведнасці з [[{{MediaWiki:Policy-url}}|правіламі]].\nНіжэй трэба ўпісаць канкрэтную прычыну (напрыклад, пералічваючы канкрэтныя старонкі, якія былі вандалізаваныя).",
        "ipaddressorusername": "IP-адрас ці імя ўдзельніка:",
        "ipbexpiry": "Згасае:",
        "compare-invalid-title": "Абраная вамі назва недапушчальная.",
        "compare-title-not-exists": "Не існуе названай вамі назвы.",
        "compare-revision-not-exists": "Паказанай вамі версіі не існуе.",
+       "diff-form": "'''фармуляр'''",
        "dberr-problems": "Прабачце, на пляцоўцы здарыліся тэхнічныя цяжкасці.",
        "dberr-again": "Паспрабуйце перачытаць праз некалькі хвілін.",
        "dberr-info": "(Немагчыма звязацца з базай даных: $1)",
index 7d32a40..c6d0cd6 100644 (file)
        "action-deleterevision": "изтриване на версии",
        "action-deletelogentry": "изтриване на записи от дневника",
        "action-deletedhistory": "преглед на изтритата история на тази страница",
+       "action-deletedtext": "преглед на текста на изтритата версия",
        "action-browsearchive": "търсене на изтрити страници",
        "action-undelete": "възстановяване на страници",
        "action-suppressrevision": "преглеждане и възстановяване на скрити версии",
        "action-editcontentmodel": "редактиране на модела на съдържанието на страница",
        "action-managechangetags": "създаване и (де)активиране на етикети",
        "action-applychangetags": "прилагане на етикетите заедно с промените ви",
+       "action-deletechangetags": "изтриване на етикети от базата от данни",
        "action-purge": "почисти кеша на тази страница",
        "nchanges": "$1 {{PLURAL:$1|промяна|промени}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|от последното посещение}}",
        "recentchanges-submit": "Показване",
        "rcfilters-tag-remove": "Премахване на '$1'",
        "rcfilters-legend-heading": "<strong>Списък на съкращенията:</strong>",
-       "rcfilters-other-review-tools": "<strong>Други инструменти за проверка</strong>",
+       "rcfilters-other-review-tools": "Други инструменти за проверка",
        "rcfilters-group-results-by-page": "Групиране на резултатите по страница",
        "rcfilters-grouping-title": "Групиране",
        "rcfilters-activefilters": "Активни филтри",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|час|часа}}",
        "rcfilters-highlighted-filters-list": "Маркирани: $1",
        "rcfilters-quickfilters": "Запазени филтри",
-       "rcfilters-quickfilters-placeholder-title": "Няма запазени препратки",
+       "rcfilters-quickfilters-placeholder-title": "Няма запазени филтри",
        "rcfilters-quickfilters-placeholder-description": "За да запазите настройките на филтрите и да ги използвате повторно по-късно, щракнете върху иконката за отметки в блока „Активни филтри“ по-долу.",
        "rcfilters-savedqueries-defaultlabel": "Съхранени филтри",
        "rcfilters-savedqueries-rename": "Преименуване",
        "rcfilters-filter-watchlist-watchednew-description": "Промени в страниците от списъка за наблюдение, които не сте посетили от извършването им.",
        "rcfilters-filter-watchlist-notwatched-label": "Извън списъка за наблюдение",
        "rcfilters-filter-watchlist-notwatched-description": "Всички, освен промените в страници от списъка за наблюдение.",
+       "rcfilters-filtergroup-watchlistactivity": "Активност по списъка за наблюдение",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Невидяни промени",
        "rcfilters-filter-watchlistactivity-seen-label": "Видени промени",
        "rcfilters-filtergroup-changetype": "Вид на промяната",
        "rcfilters-filter-pageedits-label": "Редакции на страници",
        "rcfilters-filter-categorization-description": "Записи от добавяне или премахване на страници от категории.",
        "rcfilters-filter-logactions-label": "Записани в дневника действия",
        "rcfilters-filter-logactions-description": "Административни действия, създавания на сметки, изтривания на страници, качвания...",
-       "rcfilters-filtergroup-lastRevision": "ТекÑ\83Ñ\89а Ð²ÐµÑ\80Ñ\81иÑ\8f",
+       "rcfilters-filtergroup-lastRevision": "ТекÑ\83Ñ\89и Ð²ÐµÑ\80Ñ\81ии",
        "rcfilters-filter-lastrevision-label": "Текуща версия",
        "rcfilters-filter-lastrevision-description": "Последната промяна на страница.",
        "rcfilters-filter-previousrevision-label": "По-ранни версии",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
        "rcfilters-exclude-button-off": "Изключване на избраните",
        "rcfilters-exclude-button-on": "Изключване на избраните",
-       "rcfilters-view-advanced-filters-label": "Разширени филтри",
        "rcfilters-view-tags": "Редакции с етикети",
        "rcfilters-view-namespaces-tooltip": "Филтриране на резултатите по именни пространства",
        "rcfilters-view-tags-tooltip": "Филтриране на резултатите по етикети на редакциите",
        "rcfilters-view-return-to-default-tooltip": "Назад към главното меню на филтрите",
+       "rcfilters-view-tags-help-icon-tooltip": "Научете повече за Етикетираните редакции",
        "rcfilters-liveupdates-button": "Обновявания на живо",
        "rcfilters-liveupdates-button-title-off": "Показване на новите промени в реално време",
        "rcfilters-watchlist-markseen-button": "Отбелязване на всички промени като видени",
+       "rcfilters-watchlist-edit-watchlist-button": "Редактиране на списъка за наблюдение",
        "rcfilters-preference-label": "Скриване на подобрената версия на Последни промени",
        "rcfilters-preference-help": "Премахва новия дизайн на интерфейса от 2017 г. и всички инструменти, добавени тогава и след това.",
        "rcnotefrom": "{{PLURAL:$5|Дадена е промяната|Дадени са промените}} от <strong>$3, $4</strong> (до <strong>$1</strong> показани).",
+       "rclistfromreset": "Нулиране на избора на дата",
        "rclistfrom": "Показване на промени, като се започва от $3 $2",
        "rcshowhideminor": "$1 на малки промени",
        "rcshowhideminor-show": "Показване",
        "uploaddisabledtext": "Качването на файлове е забранено.",
        "php-uploaddisabledtext": "Качванията на файлове са спрени в PHP.\nПроверете настройката file_uploads.",
        "uploadscripted": "Файлът съдържа HTML или скриптов код, който може да бъде погрешно интерпретиран от браузъра.",
+       "uploaded-script-svg": "Намерен е скриптов елемент „$1“ в качения SVG файл.",
+       "uploaded-hostile-svg": "Намерен е несигурен CSS в стиловия елемент на качения SVG файл.",
+       "uploaded-event-handler-on-svg": "Поставянето на event-handler атрибути <code>$1=\"$2\"</code> не е позволено в SVG файлове.",
        "uploadscriptednamespace": "Този SVG файл съдържа неправилно именно пространство „<nowiki>$1</nowiki>“",
        "uploadinvalidxml": "XML-кода в качения файл не може да бъде анализиран.",
        "uploadvirus": "Файлът съдържа вирус! Подробности: $1",
        "upload-form-label-not-own-work-message-generic-foreign": "Ако не можете да качите този файл в съответствие с правилата на споделеното хранилище, моля, затворете този прозорец и опитайте друг метод.",
        "backend-fail-notexists": "Файлът „$1“ не съществува.",
        "backend-fail-delete": "Файлът „$1“ не може да бъде изтрит.",
+       "backend-fail-describe": "Метаданните не могат да бъдат променени за файл „$1“.",
        "backend-fail-alreadyexists": "Файлът „$1“ вече съществува.",
        "backend-fail-store": "Файлът „$1“ не може да бъде съхранен в „$2“.",
        "backend-fail-copy": "Файлът „$1“ не можа да бъде копиран в „$2“.",
        "backend-fail-opentemp": "Временният файл не може да бъде отворен.",
        "backend-fail-writetemp": "Грешка при записването във временния файл.",
        "backend-fail-closetemp": "Не може да бъде затворен временният файл.",
-       "backend-fail-read": "Файлът $1 не може да бъде прочетен.",
+       "backend-fail-read": "Файлът „$1“ не може да бъде прочетен.",
        "backend-fail-create": "Файлът „$1“ не може да бъде съхранен.",
        "backend-fail-maxsize": "Файлът „$1“ не може да бъде съхранен, тъй като размерът му надвишава {{PLURAL:$2|един байт|$2 байт}}.",
+       "backend-fail-connect": "Не е възможно свързването към бекенда за съхранение „1“.",
+       "backend-fail-internal": "Възникна неизвестна грешка в бекенда за съхранение „1“.",
        "zip-file-open-error": "Възникна грешка при отваряне на файла за проверка на ZIP.",
        "zip-wrong-format": "Указаният файл не е ZIP файл.",
        "zip-bad": "Файлът е повреден или е нечетим ZIP файл.\nСигурността му не може да бъде проверена.",
        "listredirects": "Списък на пренасочванията",
        "listduplicatedfiles": "Списък на повтарящи се файлове",
        "listduplicatedfiles-summary": "Това е списък на файловете, за които последната версия е дубликат с последната версия на друг файл. Показани са само локалните файлове.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|дубликат|$2 дубликата}}]].",
        "unusedtemplates": "Неизползвани шаблони",
        "unusedtemplatestext": "Тази страница съдържа списък на страниците в именно пространство {{ns:template}}, които не са включени в друга страница. Проверявайте за препратки към отделните шаблони преди да ги изтриете или предложите за изтриване.",
        "unusedtemplateswlh": "други препратки",
        "pageswithprop-legend": "Страници с page property",
        "pageswithprop-text": "На тази страница са показани всички страници, които използват page property.",
        "pageswithprop-prop": "Име на свойството:",
+       "pageswithprop-reverse": "Подреждане в обратен ред",
+       "pageswithprop-sortbyvalue": "Подреждане по стойност на свойството",
        "pageswithprop-submit": "Отваряне",
        "doubleredirects": "Двойни пренасочвания",
        "doubleredirectstext": "Тази страница съдържа списък със страници, които пренасочват към друга пренасочваща страница.\nВсеки ред съдържа препратки към първото и второто пренасочване, както и целта на второто пренасочване, която обикновено е „истинската“ целева страница, към която първото пренасочване би трябвало да сочи.\n<del>Задрасканите</del> записи са коригирани.",
        "apisandbox-dynamic-parameters-add-label": "Добавяне на параметър:",
        "apisandbox-dynamic-parameters-add-placeholder": "Име на параметъра",
        "apisandbox-dynamic-error-exists": "Параметър с име „$1“ вече съществува.",
+       "apisandbox-deprecated-parameters": "Остарели параметри",
+       "apisandbox-fetch-token": "Автоматично попълване на маркера",
        "apisandbox-submit-invalid-fields-title": "Някои полета са невалидни",
        "apisandbox-submit-invalid-fields-message": "Моля, поправете маркираните полета и опитайте пак.",
        "apisandbox-results": "Резултати",
        "apisandbox-request-url-label": "URL-адрес на заявката:",
        "apisandbox-request-json-label": "JSON заявка:",
        "apisandbox-request-time": "Време на заявката: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-alert-page": "Полета на тази страница не са валидни.",
+       "apisandbox-alert-field": "Стойността на това поле не е валидна.",
        "apisandbox-continue": "Продължаване",
        "apisandbox-continue-clear": "Изчистване",
        "apisandbox-multivalue-all-namespaces": "$1 (Всички именни пространства)",
        "booksources-search": "Търсене",
        "booksources-text": "По-долу е списъкът от връзки към други сайтове, продаващи нови и използвани книги или имащи повече информация за книгите, които търсите:",
        "booksources-invalid-isbn": "Предоставеният ISBN изглежда е невалиден; проверете за грешки и копирайте от оригиналния източник.",
+       "magiclink-tracking-rfc": "Страници, използващи вълшебни препратки RFC",
        "magiclink-tracking-pmid": "Страници, използващи вълшебни препратки PMID",
        "magiclink-tracking-pmid-desc": "Тази страница използва вълшебни препратки PMID. Вижте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] как да ги пренесете.",
        "magiclink-tracking-isbn": "Страници, използващи вълшебни препратки ISBN",
        "trackingcategories-msg": "Категория за проследяване",
        "trackingcategories-name": "Име на съобщението",
        "trackingcategories-desc": "Критерий за включване на категория",
+       "restricted-displaytitle-ignored": "Страници с игнорирани заглавия за показване",
        "trackingcategories-nodesc": "Няма налично описание.",
        "trackingcategories-disabled": "Категорията е деактивирана",
        "mailnologin": "Няма електронна поща",
        "rollbacklinkcount": "отмяна на $1 {{PLURAL:$1|редакция|редакции}}",
        "rollbacklinkcount-morethan": "отмяна на повече от $1 {{PLURAL:$1|редакция|редакции}}",
        "rollbackfailed": "Отмяната не сполучи",
+       "rollback-missingrevision": "Данните за версията не могат да бъдат заредени.",
        "cantrollback": "Не може да се извърши отмяна на редакциите. Последният редактор е и единствен автор на страницата.",
        "alreadyrolled": "Редакцията на [[:$1]], направена от [[User:$2|$2]] ([[User talk:$2|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), не може да бъде отменена. Някой друг вече е редактирал страницата или е отменил промените.\n\nПоследната редакция е на [[User:$3|$3]] ([[User talk:$3|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Резюмето на редакцията беше: <em>$1</em>.",
        "changecontentmodel-submit": "Променяне",
        "changecontentmodel-success-title": "Моделът на съдържанието беше променен",
        "changecontentmodel-success-text": "Типът на съдържанието на [[:$1]] е успешно променен.",
+       "changecontentmodel-cannot-convert": "Съдържанието на [[:$1]] не може да преобразувано в тип $2.",
+       "changecontentmodel-nodirectediting": "Моделът на съдържание $1 не поддържа пряко редактиране",
+       "changecontentmodel-emptymodels-title": "Не са налични модели на съдържание",
+       "changecontentmodel-emptymodels-text": "Съдържанието в [[:$1]] не може да бъде преобразувано в никакъв тип.",
        "log-name-contentmodel": "Дневник на промените на модела на съдържанието",
        "log-description-contentmodel": "Страницата показва промените в модела на съдържанието на страниците и страниците, създадени с модел на съдържанието различен от този по подразбиране.",
        "logentry-contentmodel-new": "$1 {{GENDER:$2|създаде}} страницата $3, използвайки модел на съдържанието „$5“, който не е по подразбиране",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|промени}} модела на съдържание на страница $3 от „$4“ на „$5“",
        "logentry-contentmodel-change-revertlink": "връщане",
        "logentry-contentmodel-change-revert": "връщане",
        "protectlogpage": "Дневник на защитата",
        "whatlinkshere-page": "Страница:",
        "linkshere": "Следните страници сочат към '''[[:$1]]''':",
        "nolinkshere": "Няма страници, сочещи към '''[[:$1]]'''.",
-       "nolinkshere-ns": "Няма страници, сочещи към '''[[:$1]]''' в избраното именно пространство.",
+       "nolinkshere-ns": "Няма страници, сочещи към [[:$1]] в избраното именно пространство.",
        "isredirect": "пренасочваща страница",
        "istemplate": "включване",
        "isimage": "препратка към файла",
        "blocklist": "Блокирани потребители",
        "autoblocklist": "Автоматични блокирания",
        "autoblocklist-submit": "Търсене",
+       "autoblocklist-legend": "Списък на автоматични блокирания",
        "autoblocklist-localblocks": "{{PLURAL:$1|Локално автоматично блокиране|Локални автоматични блокирания}}",
+       "autoblocklist-total-autoblocks": "Общ брой автоматични блокирания: $1",
        "autoblocklist-empty": "Списъкът на автоматичните блокирания е празен.",
        "ipblocklist": "Блокирани потребители",
        "ipblocklist-legend": "Търсене на блокиран потребител",
        "ipb_blocked_as_range": "Грешка: IP-адресът $1 не може да бъде разблокиран, тъй като е част от блокирания регистър $2. Можете да разблокирате адреса, като разблокирате целия регистър.",
        "ip_range_invalid": "Невалиден интервал за IP-адреси.",
        "ip_range_toolarge": "Забранено е блокиране на диапазони от IP адреси по-големи от /$1.",
+       "ip_range_exceeded": "IP диапазонът превишава максималния диапазон. Позволен диапазон: /$1.",
        "proxyblocker": "Блокировач на проксита",
        "proxyblockreason": "IP-адресът ви беше блокиран, тъй като е анонимно достъпен междинен сървър. Свържете се с доставчика ви на интернет и го информирайте за този сериозен проблем в сигурността.",
        "sorbsreason": "IP-адресът ви е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}.",
        "locknoconfirm": "Не сте отметнали кутийката за потвърждение.",
        "lockdbsuccesssub": "Заключването на базата от данни беше успешно",
        "unlockdbsuccesssub": "Отключването на базата от данни беше успешно",
-       "lockdbsuccesstext": "Ð\91азаÑ\82а Ð´Ð°Ð½Ð½Ð¸ Ð½Ð° {{SITENAME}} Ð±ÐµÑ\88е Ð·Ð°ÐºÐ»Ñ\8eÑ\87ена.\n<br />Ð\9dе Ð·Ð°Ð±Ñ\80авÑ\8fйÑ\82е Ð´Ð° Ñ\8f [[Special:UnlockDB|оÑ\82клÑ\8eÑ\87иÑ\82е]] ÐºÐ¾Ð³Ð°Ñ\82о Ð¿Ñ\80ивършите с работата по поддръжката.",
+       "lockdbsuccesstext": "Ð\91азаÑ\82а Ð´Ð°Ð½Ð½Ð¸ Ð½Ð° {{SITENAME}} Ð±ÐµÑ\88е Ð·Ð°ÐºÐ»Ñ\8eÑ\87ена.\n<br />Ð\9dе Ð·Ð°Ð±Ñ\80авÑ\8fйÑ\82е Ð´Ð° Ñ\8f [[Special:UnlockDB|оÑ\82клÑ\8eÑ\87иÑ\82е]] ÐºÐ¾Ð³Ð°Ñ\82о Ð·Ð°вършите с работата по поддръжката.",
        "unlockdbsuccesstext": "Базата от данни на {{SITENAME}} беше отключена.",
        "lockfilenotwritable": "Няма права за писане върху файла за заключване на базата данни. За да заключи или отключи базата данни, уеб-сървърът трябва да има тези права.",
        "databaselocked": "Базата от данни е вече заключена.",
        "confirmemail_loggedin": "Адресът Ви за електронна поща беше потвърден.",
        "confirmemail_subject": "{{SITENAME}} – Потвърждаване на адрес за е-поща",
        "confirmemail_body": "Някой, вероятно Вие, от IP-адрес $1, е регистрирал потребител „$2“ в {{SITENAME}}, като е посочил този адрес за електронна поща.\n\nЗа да потвърдите, че сметката в {{SITENAME}} и настоящият пощенски адрес са Ваши, заредете долната препратка в браузъра си:\n\n$3\n\nАко някой друг е направил регистрацията в {{SITENAME}} и не желаете да я потвърждавате, последвайте препратката по-долу:\n\n$5\n\nКодът за потвърждение ще загуби валидност след $4.",
-       "confirmemail_body_changed": "Някой, вероятно Вие, от IP адрес $1,\nе променил с този адрес електронната поща, свързана с потребителска сметка \"$2\" в {{SITENAME}}.\n\nЗа да потвърдите, че тази потребителска сметка ви принадлежи и да активирате отново функциите, свързани с електронната поща в {{SITENAME}}, отворете във вашия браузър следната връзка:\n\n$3\n\nАко потребителската сметка *не* Ви принадлежи, моля, откажете потвърждението, като последвате следната връзка:\n\n$5\n\nВалидността на този код за потвърждение ще важи до $4.",
+       "confirmemail_body_changed": "Някой, вероятно Вие, от IP адрес $1,\nе променил с този адрес електронната поща, свързана с потребителска сметка „$2“ в {{SITENAME}}.\n\nЗа да потвърдите, че тази потребителска сметка ви принадлежи и да активирате отново функциите, свързани с електронната поща в {{SITENAME}}, отворете във вашия браузър следната връзка:\n\n$3\n\nАко потребителската сметка *не* Ви принадлежи, моля, откажете потвърждението, като последвате следната връзка:\n\n$5\n\nВалидността на този код за потвърждение ще важи до $4.",
        "confirmemail_body_set": "Някой, вероятно Вие, от IP адрес $1,\nе посочил този адрес за електронната поща, свързан с потребителска сметка „$2“ в {{SITENAME}}.\n\nЗа потвърждаване, че тази потребителска сметка наистина Ви принадлежи и за да активирате отново функциите, свързани с електронна поща в {{SITENAME}}, необходимо е да отворите във вашия браузър следната препратка:\n\n$3\n\nАко потребителската сметка *не* Ви принадлежи, можете да откажете потвърждението, като последвате следната препратка:\n\n$5\n\nВалидността на този код за потвърждение изтича на $4.",
        "confirmemail_invalidated": "Отменено потвърждение за електронна поща",
        "invalidateemail": "Отмяна на потвърждението за електронна поща",
        "confirm-watch-button": "Потвърждаване",
        "confirm-watch-top": "Добавяне на страницата в списъка ви за наблюдение?",
        "confirm-unwatch-button": "Потвърждаване",
-       "confirm-unwatch-top": "Ð\9fÑ\80емаÑ\85ване Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¾Ñ\82 Ñ\81пиÑ\81Ñ\8aка Ð²и за наблюдение?",
+       "confirm-unwatch-top": "Ð\9fÑ\80емаÑ\85ване Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¾Ñ\82 Ñ\81пиÑ\81Ñ\8aка Ð\92и за наблюдение?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Отменяне на редакции по тази страница?",
        "quotation-marks": "„$1“",
        "watchlistedit-clear-submit": "Изчистване на списъка за наблюдение (Необратимо!)",
        "watchlistedit-clear-done": "Списъкът за наблюдение беше изчистен.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 заглавие беше премахнато|$1 заглавия бяха премахнати}}:",
+       "watchlistedit-too-many": "Има твърде много страници за показване.",
        "watchlisttools-clear": "Изчистване на списъка за наблюдение",
        "watchlisttools-view": "Преглед на списъка за наблюдение",
        "watchlisttools-edit": "Преглед и редактиране на списъка за наблюдение",
        "watchlisttools-raw": "Редактиране на необработения списък за наблюдение",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|беседа]])",
+       "timezone-local": "Местно",
        "duplicate-defaultsort": "<strong>Внимание:</strong> Ключът за сортиране по подразбиране „$2“ отменя по-ранния ключ „$1“.",
        "version": "Версия",
        "version-extensions": "Инсталирани разширения",
        "tag-filter": "Филтър на [[Special:Tags|етикета]]:",
        "tag-filter-submit": "Филтриране",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Етикет|Етикети}}]]: $2)",
+       "tag-mw-contentmodelchange": "промяна на модела на съдържание",
        "tags-title": "Етикети",
        "tags-intro": "Тук са изброени всички етикети, които могат да се ползват за отбелязване на редакциите, както и тяхното значение.",
        "tags-tag": "Име на етикета",
        "tags-deactivate-reason": "Причина:",
        "tags-deactivate-not-allowed": "Деактивирането на етикет „$1“ не е възможно.",
        "tags-deactivate-submit": "Деактивиране",
+       "tags-apply-no-permission": "Нямате права да прилагате етикети за промени заедно с промените си.",
+       "tags-apply-blocked": "Не може да прилагате етикети за промени, докато сте {{GENDER:$1|блокирани}}.",
+       "tags-apply-not-allowed-one": "Не е позволено етикетът „$1“ да бъде прилаган ръчно.",
+       "tags-apply-not-allowed-multi": "Не е позволено {{PLURAL:$2|следният етикет да бъде ръчно променен|следните етикети да бъдат ръчно променени}}: $1",
        "tags-update-no-permission": "Нямате права за добавяне или премахване на етикети от индивидуални версии или дневници.",
+       "tags-update-blocked": "Не може да добавяте или премахвате етикети за промени, докато сте {{GENDER:$1|блокирани}}.",
+       "tags-update-add-not-allowed-one": "Не е позволено етикетът „$1“ да бъде ръчно добавян.",
+       "tags-update-remove-not-allowed-one": "Не е позволено етикетът „$1“ да бъде премахван.",
        "tags-edit-title": "Редактиране на етикетите",
        "tags-edit-manage-link": "Управление на етикетите",
        "tags-edit-revision-selected": "{{PLURAL:$1|Избрана версия|Избрани версии}} от [[:$2]]:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|Избрано събитие|Избрани събития}}:",
        "tags-edit-revision-legend": "Добавяне или премахване на етикети от {{PLURAL:$1|тази редакция|всичките $1 редакции}}",
+       "tags-edit-logentry-legend": "Добавяне или променяне на етикети {{PLURAL:$1|в този запис в дневника|във всички $1 записи в дневника}}",
        "tags-edit-existing-tags": "Съществуващи етикети:",
        "tags-edit-existing-tags-none": "<em>Няма</em>",
        "tags-edit-new-tags": "Нови етикети:",
        "tags-edit-remove": "Премахнете тези етикети:",
        "tags-edit-remove-all-tags": "(изтриване на всички етикети)",
        "tags-edit-chosen-placeholder": "Избиране на няколко етикета",
+       "tags-edit-chosen-no-results": "Не са открити съответстващи етикети",
        "tags-edit-reason": "Причина:",
        "tags-edit-revision-submit": "Прилагане на промените към {{PLURAL:$1|тази редакция|$1 редакции}}",
+       "tags-edit-logentry-submit": "Прилагане на промените към {{PLURAL:$1|този запис в дневника|$1 записи в дневника}}",
        "tags-edit-success": "Промените са приложени.",
        "tags-edit-failure": "Промените не могат да бъдат приложени:\n$1",
        "tags-edit-nooldid-title": "Не е зададена версия",
        "compare-invalid-title": "Посоченото заглавие е невалидно.",
        "compare-title-not-exists": "Посоченото заглавие не съществува.",
        "compare-revision-not-exists": "Посочената версия не съществува.",
-       "diff-form": "'''формуляр'''",
+       "diff-form": "Разлики",
+       "diff-form-submit": "Показване на разликите",
        "permanentlink": "Постоянна препратка",
        "permanentlink-revid": "ID на редакцията",
        "permanentlink-submit": "Към редакцията",
        "htmlform-time-placeholder": "ЧЧ:ММ:СС",
        "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
        "htmlform-date-invalid": "Избраната от вас стойност за дата не е разпозната. Опитайте да използвате формат ГГГГ-ММ-ДД.",
+       "htmlform-time-invalid": "Стойността, която сте уточнили, не е разпозната. Опитайте да използвате формат ЧЧ:ММ:СС.",
        "htmlform-datetime-invalid": "Избраната от вас стойност за дата не е разпозната. Опитайте да използвате формат ГГГГ-ММ-ДД ЧЧ:ММ:СС.",
+       "htmlform-date-toolow": "Стойността, която сте указали, е по-рано от най-ранната позволена дата $1.",
+       "htmlform-date-toohigh": "Стойността, която сте указали, е след най-късната позволена дата $1.",
+       "htmlform-time-toolow": "Стойността, която сте указали, е преди най-ранното позволено време $1.",
+       "htmlform-time-toohigh": "Стойността, която сте указали, е след най-късното позволено време $1.",
+       "htmlform-datetime-toolow": "Стойността, която сте указали, е преди най-ранните позволени дата и час $1.",
        "htmlform-title-badnamespace": "[[:$1]] не е в именното пространство „{{ns:$2}}“.",
+       "htmlform-title-not-creatable": "Заглавието „$1“ не може да бъде създадено",
        "htmlform-title-not-exists": "$1 не съществува.",
        "htmlform-user-not-exists": "<strong>$1</strong> не съществува.",
        "htmlform-user-not-valid": "<strong>$1</strong> не е валидно потребителско име.",
        "logentry-block-reblock": "$1 {{GENDER:$2|промени }} настройките на блокиране на {{GENDER:$4|$3}} със срок на изтичане $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|блокира}} {{GENDER:$4|$3}} със срок на изтичане $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|промени}} настройките на блокиране на {{GENDER:$4|$3}} със срок на изтичане $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|внесе}} $3 чрез качване на файл",
+       "logentry-import-upload-details": "$1 {{GENDER:$2|внесе}} $3 чрез качване на файл ($4 {{PLURAL:$4|редакция|редакции}})",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|внесе}} $3 от друго уики",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2|внесе}} $3 от $5 ($4 {{PLURAL:$4|редакция|редакции}})",
        "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-newusers-byemail": "$1 {{GENDER:$2|създаде}} потребителската сметка $3, като паролата за нея беше изпратена по е-поща",
        "logentry-newusers-autocreate": "Сметката $1 беше {{GENDER:$2|създадена}} автоматично",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|премести}} настройките на защита от $4 на $3",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|премахна}} защитата от $3",
        "logentry-protect-protect": "\n$1 {{GENDER:$2|защити}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|защити}} $3 $4 [каскадно]",
        "logentry-protect-modify": "$1 {{GENDER:$2|промени}} нивото на защита на $3 $4",
        "log-description-tag": "Тази страница показва, кога потребителите са добавили или премахнали [[Special:Tags|етикети]] от отделни версии или записи. Списъкът не включва подобни действия, когато те се появяват, като част от процеса на редактиране, изтриване или подобни действия.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|добави}} {{PLURAL:$7|етикета|етикетите}} $6 към редакция $4 на страница $3",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|добави}} {{PLURAL:$7|етикета|етикетите}} $6 към записа в дневника $5 на страница $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|премахна}} {{PLURAL:$9|етикета|етикетите}} $8 от редакция $4 на страница $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|премахна}} {{PLURAL:$9|етикета|етикетите}} $8 от запис в дневника $5 на страница $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|обнови}} етикети на редакция $4 на страница $3 ({{PLURAL:$7|добавени}} $6; {{PLURAL:$9|премахнати}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|обнови}} етикети в запис в дневника $5 на страница $3 ({{PLURAL:$7|добавени}} $6; {{PLURAL:$9|премахнати}} $8)",
        "rightsnone": "(никакви)",
+       "rightslogentry-temporary-group": "$1 (временно, до $2)",
        "feedback-adding": "Добавяне на коментар към страницата...",
        "feedback-back": "Обратно",
        "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
        "feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата „[$3 $2]“, наред с вашето потребителско име.",
        "feedback-cancel": "Отказване",
        "feedback-close": "Готово",
+       "feedback-dialog-title": "Изпращане на обратна връзка",
        "feedback-error1": "Грешка: Неразпознат резултат от API",
        "feedback-error2": "Грешка: Неуспешна редакция",
        "feedback-error3": "Грешка: Няма отговор от API",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>изключено</strong>)",
        "mediastatistics": "Статистика за файлове",
        "mediastatistics-summary": "Статистика за видовете качени файлове. Тя включва само последните версии на файловете, без старите или изтритите версии.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байта}} ($2; $3%)",
        "mediastatistics-bytespertype": "Пълен размер на файловете за този раздел: {{PLURAL:$1|$1 байт|$1 байта}} ($2; $3%).",
        "mediastatistics-allbytes": "Общ размер на всички файлове: {{PLURAL:$1|$1 байт|$1 байта}} ($2).",
        "mediastatistics-table-mimetype": "MIME тип",
        "log-action-filter-upload-upload": "Ново качване",
        "log-action-filter-upload-overwrite": "Повторно качване",
        "authmanager-create-disabled": "Създаването на сметки е изключено.",
+       "authmanager-create-from-login": "За да създадете сметка, моля попълнете полетата.",
+       "authmanager-authplugin-setpass-failed-title": "Промяната на паролата е неуспешна",
        "authmanager-authplugin-setpass-bad-domain": "Невалиден домейн.",
        "authmanager-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "authmanager-retype-help": "Парола (повторно) за потвърждение.",
        "authmanager-realname-help": "Истинско име на потребителя",
        "authmanager-provider-temporarypassword": "Временна парола",
        "authprovider-resetpass-skip-label": "Пропускане",
+       "authform-newtoken": "Липсва маркер. $1",
        "authform-notoken": "Липсва маркер",
+       "authform-wrongtoken": "Грешен маркер",
        "specialpage-securitylevel-not-allowed-title": "Не е позволено",
        "cannotauth-not-allowed-title": "Достъпът е отказан",
        "cannotauth-not-allowed": "Не ви е позволено да използвате тази страница",
index cdf953d..b49efdb 100644 (file)
@@ -35,7 +35,9 @@
                        "Elias Ahmmad",
                        "Catrope",
                        "Mohammed Galib Hasan",
-                       "এম আবু সাঈদ"
+                       "এম আবু সাঈদ",
+                       "Shahadat1971",
+                       "Rasal Lia"
                ]
        },
        "tog-underline": "সংযোগের নিচে দাগ দেখানো হোক:",
        "anonpreviewwarning": "<em>আপনি অ্যাকাউন্টে প্রবেশ করেননি। সম্পাদনা সংরক্ষণ করলে এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সংরক্ষিত হবে।</em>",
        "missingsummary": "'''খেয়াল করুন''':  আপনি আপনার সম্পাদনার কোনও সারাংশ দেননি। আবার যদি \"$1\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।",
        "selfredirect": "<strong>সতর্কতা:</strong> আপনি এই পাতাকে এর নিজের দিকে পুনঃনির্দেশিত করছেন।\nআপনাকে পুনঃনির্দেশিত করার জন্য হয় ভুল লক্ষ্য নির্দিষ্ট করেছেন, অথবা আপনি ভুল পাতা সম্পাদনা করছেন।\nআপনি যদি আবার \"$1\" ক্লিক করেন, পুনর্নির্দেশ যেকোনোভাবেই হোক তৈরি করা হবে।",
-       "missingcommenttext": "দয়া à¦\95রà§\87 à¦¨à¦¿à¦\9aà§\87 মন্তব্য যোগ করুন।",
+       "missingcommenttext": "দয়া à¦\95রà§\87 à¦\8fà¦\95à¦\9fি মন্তব্য যোগ করুন।",
        "missingcommentheader": "<strong>খেয়াল করুন:</strong> আপনি এই মন্তব্যের জন্য কোনও বিষয় প্রদান করেননি। আপনি যদি আবার \"$1\" বোতামে ক্লিক করেন, আপনার এই সম্পাদনা কোন বিষয় ছাড়াই সংরক্ষিত হবে।",
        "summary-preview": "সম্পাদনা সারাংশের প্রাকদর্শন:",
        "subject-preview": "বিষয়ের প্রাকদর্শন:",
        "timezoneregion-europe": "ইউরোপ",
        "timezoneregion-indian": "ভারত মহাসাগর",
        "timezoneregion-pacific": "প্রশান্ত মহাসাগর",
-       "allowemail": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87রà¦\95à§\87 à¦\86পনাà¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦ªà¦¾à¦ à¦¾à¦¨à§\8bর à¦\85নà§\81মতি à¦¦à¦¿à¦¨à¥¤",
+       "allowemail": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87রà¦\95à§\87 à¦\86মাà¦\95à§\87 à¦\87মà§\87ল à¦\95রতà§\87 à¦\85নà§\81মতি à¦¦à¦¿à¦¨",
        "email-blacklist-label": "আমাকে ইমেইল পাঠানো থেকে এই ব্যবহারকারীদের বিরত রাখুন:",
        "prefs-searchoptions": "অনুসন্ধান",
        "prefs-namespaces": "নামস্থানসমূহ",
        "action-applychangetags": "আপনার পরিবর্তনগুলোর সাথে ট্যাগ সংযোজন করুন",
        "action-changetags": "নির্দিষ্ট সংস্করণ এবং লগ ভুক্তিগুলিতে যথেচ্ছভাবে ট্যাগ সংযোজন ও অপসারণ করা",
        "action-deletechangetags": "ডাটাবেজ থেকে ট্যাগ অপসরণ করার",
-       "action-purge": "এই পাতা হালনাগাদ করার",
+       "action-purge": "এই পাতাটি শোধন করুন",
        "nchanges": "$1টি {{PLURAL:$1|পরিবর্তন}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|সর্বশেষ প্রদর্শনের পর}} $1টি",
        "enhancedrc-history": "ইতিহাস",
        "recentchanges-legend": "সাম্প্রতিক পরিবর্তনের পছন্দগুলি",
        "recentchanges-summary": "এই পাতায় উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।",
        "recentchanges-noresult": "নির্ধারিত সময়ের মধ্যে কোনো পরিবর্তন পাওয়া যায়নি।",
+       "recentchanges-timeout": "এই অনুসন্ধানের সময় শেষ হয়েছে। আপনি ভিন্ন অনুসন্ধানের পরামিতি দিয়ে চেষ্টা করতে পারেন।",
+       "recentchanges-network": "কারিগরি ত্রুটির কারনে কোন ফলাফল পাওয়া যায়নি । অনুগ্রহকরে এই পাতাটি রিফ্রেশ করে আমার চেষ্টা করুন ।",
        "recentchanges-feed-description": "এই ফিডে উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।",
        "recentchanges-label-newpage": "এই সম্পাদনায় একটি নতুন পাতা তৈরি হয়েছে",
        "recentchanges-label-minor": "এটি একটি অনুল্লেখিত সম্পাদনা",
        "recentchanges-submit": "দেখাও",
        "rcfilters-tag-remove": "'$1' সরান",
        "rcfilters-legend-heading": "<strong>সংক্ষিপ্ত রূপের তালিকা:</strong>",
-       "rcfilters-other-review-tools": "<strong>অন্যান্য পর্যালোচনা সরঞ্জাম</strong>",
+       "rcfilters-other-review-tools": "অন্যান্য পর্যালোচনা সরঞ্জাম",
        "rcfilters-group-results-by-page": "পাতা অনুযায়ী দলের ফলাফল",
        "rcfilters-grouping-title": "দলবদ্ধ",
        "rcfilters-activefilters": "সক্রিয় ছাঁকনিসমূহ",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ঘণ্টা}}",
        "rcfilters-highlighted-filters-list": "আলোকপাতাকৃত: $1",
        "rcfilters-quickfilters": "সংরক্ষিত ছাঁকনি",
-       "rcfilters-quickfilters-placeholder-title": "à¦\8fà¦\96নà§\8b à¦\95à§\8bন à¦¸à¦\82যà§\8bà¦\97 সংরক্ষণ হয়নি",
+       "rcfilters-quickfilters-placeholder-title": "à¦\8fà¦\96নà§\8b à¦\95à§\8bন à¦\9bাà¦\81à¦\95নি সংরক্ষণ হয়নি",
        "rcfilters-quickfilters-placeholder-description": "আপনার ছাঁকনির সেটিং সংরক্ষণ করতে ও পরে পুনরায় ব্যবহার করতে, নীচে, সক্রিয় ছাঁকনি এলাকায় বুকমার্ক আইকনে ক্লিক করুন।",
        "rcfilters-savedqueries-defaultlabel": "ছাঁকনি সংরক্ষণ",
        "rcfilters-savedqueries-rename": "নামান্তর",
        "rcfilters-filter-user-experience-level-unregistered-label": "অনিবন্ধিত",
        "rcfilters-filter-user-experience-level-unregistered-description": "যেসব সম্পাদক অ্যাকাউন্টে প্রবেশ করেননি।",
        "rcfilters-filter-user-experience-level-newcomer-label": "নতুন আগত",
-       "rcfilters-filter-user-experience-level-newcomer-description": "১০à¦\9fির à¦\95ম à¦¸à¦®à§\8dপাদনা à¦\93 ৪ দিনের কম সময় ধরে সক্রিয় থাকা নিবন্ধিত সম্পাদক।",
+       "rcfilters-filter-user-experience-level-newcomer-description": "১০à¦\9fির à¦\95ম à¦¸à¦®à§\8dপাদনা à¦¬à¦¾ ৪ দিনের কম সময় ধরে সক্রিয় থাকা নিবন্ধিত সম্পাদক।",
        "rcfilters-filter-user-experience-level-learner-label": "শিক্ষার্থী",
        "rcfilters-filter-user-experience-level-learner-description": "নিবন্ধিত সম্পাদক যাদের অভিজ্ঞতা \"নতুন আগত\" ও \"অভিজ্ঞ ব্যবহারকারীদের\" মধ্যে পড়ে।",
        "rcfilters-filter-user-experience-level-experienced-label": "অভিজ্ঞ ব্যবহারকারী",
        "rcfilters-tag-prefix-namespace-inverted": "$1 <strong>:নয়</strong>",
        "rcfilters-exclude-button-off": "নির্বাচিতগুলি বাদ দিন",
        "rcfilters-exclude-button-on": "নির্বাচিতগুলি বাদে",
-       "rcfilters-view-advanced-filters-label": "উন্নত ছাঁকনি",
        "rcfilters-view-tags": "ট্যাগকৃত সম্পাদনা",
        "rcfilters-view-namespaces-tooltip": "নামস্থান অনুযায়ী ফলাফল ছাঁকুন",
        "rcfilters-view-tags-tooltip": "সম্পাদনা ট্যাগ ব্যবহার করে ফলাফল ছাঁকুন",
        "rcfilters-liveupdates-button-title-on": "সরাসরি হালনাগাদ বন্ধ করুন",
        "rcfilters-liveupdates-button-title-off": "নতুন পরিবর্তন ঘটামাত্র তাঁদের দেখান",
        "rcfilters-watchlist-markseen-button": "দেখা হিসাবে সব পরিবর্তন চিহ্নিত করুন",
+       "rcfilters-watchlist-edit-watchlist-button": "আপনার নজরে রাখা পাতার তালিকা সম্পাদনা করুন",
        "rcfilters-watchlist-showupdated": "পরিবর্তন যখন ঘটেছে তখন থেকে যে পাতাগুলি আপনি এখনো দেখেননি তা মোটা চিহ্নসহ <strong>গাঢ়</strong> করে দেখানো হয়েছে।",
        "rcfilters-preference-label": "সাম্প্রতিক পরিবর্তনের উন্নত সংস্করণটি লুকান",
        "rcfilters-preference-help": "২০১৭-এর পুনঃনকশাকৃত ইন্টারফেস এবং তখন পর্যন্ত ও তখন থেকে যোগ করা সকল সরঞ্জামে ফেরত নিবে।",
        "uploadstash-refresh": "ফাইলের তালিকা রিফ্রেশ করুন",
        "uploadstash-thumbnail": "থাম্বনেইল দেখুন",
        "uploadstash-exception": "স্টাসে আপলোড সঞ্চয় করা যায়নি ($1): \"$2\"।",
+       "uploadstash-bad-path": "পথের অস্তিত্ব নেই।",
+       "uploadstash-bad-path-invalid": "পথ বৈধ নয়।",
+       "uploadstash-bad-path-unknown-type": "\"$1\" ধরন অজানা।",
+       "uploadstash-bad-path-unrecognized-thumb-name": "সংক্ষিপ্ত চিত্রটির নাম অস্বীকৃত।",
+       "uploadstash-bad-path-no-handler": "$2 ফাইলের মূকাভিনয় $1-এর জন্য কোন নিয়ন্ত্রক পাওয়া যায়নি।",
+       "uploadstash-bad-path-bad-format": "চাবি \"$1\" সঠিক অাদলে নেই।",
+       "uploadstash-file-not-found-no-thumb": "সংক্ষিপ্ত চিত্রও পাওয়া যায়নি।",
+       "uploadstash-file-not-found-no-local-path": "স্কেল করা আইটেমের জন্য কোনো স্থানীয় পথ নেই।",
+       "uploadstash-file-not-found-no-object": "সংক্ষিপ্ত চিত্রের সংশ্লিষ্ট স্থানীয় ফাইলের সামগ্রী তৈরি করা যায়নি।",
+       "uploadstash-file-not-found-missing-content-type": "সামগ্রীর-ধরনের শিরোনাম অনুপস্থিত।",
+       "uploadstash-file-not-found-not-exists": "পথ পাওয়া যাচ্ছে না, অথবা ফাইল স্বাভাবিক নয়।",
+       "uploadstash-file-too-large": "$1 বাইটের বড় ফাইল পরিবেশন করা যাবে না।",
+       "uploadstash-not-logged-in": "কোন ব্যবহারকারী প্রবেশ করেনি, নথিগুলো অবশ্যই ব্যবহারকারীদের অধিকারে থাকবে।",
+       "uploadstash-wrong-owner": "এই ফাইলটি ($1) বর্তমান ব্যবহারকারীর অন্তর্গত নয়।",
+       "uploadstash-no-such-key": "এই রকম কোন চাবি নেই ($1), বাতিল করা যাবে না,",
+       "uploadstash-no-extension": "এক্সটেনশনটি অকার্যকর।",
+       "uploadstash-zero-length": "ফাইলটির দৈর্ঘ্য শূন্য।",
        "invalid-chunk-offset": "ত্রুটিপূর্ণ চাংক অফসেট",
        "img-auth-accessdenied": "প্রবেশাধিকার নাই",
        "img-auth-nopathinfo": "PATH_INFO পাওয়া যাচ্ছে না।\nআপনার সার্ভার থেকে এই তথ্য পাঠানোর জন্য কনফিগার করা হয়নি।\nএটি হয়তো CGI ভিত্তিক এবং img_auth সমর্থন করে না।\nবিস্তারিত দেখুন https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization।",
        "compare-title-not-exists": "আপনার কাঙ্ক্ষিত শিরোনামটি নেই।",
        "compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
        "diff-form": "পার্থক্য",
+       "diff-form-oldid": "পুরানো সংস্করণ আইডি (ঐচ্ছিক)",
        "diff-form-submit": "পার্থক্য দেখান",
        "permanentlink": "স্থায়ী সংযোগ",
        "permanentlink-revid": "সংশোধন আইডি",
index 5606e04..3505ecc 100644 (file)
        "perfcached": "Sljedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
        "perfcachedts": "Sljedeći podaci su keširani i posljednji put ažurirani na datum $2 u $3. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze ne moraju biti aktuelni.",
-       "viewsource": "Prikaži izvor",
-       "viewsource-title": "Prikaz izvora stranice $1",
+       "viewsource": "Izvorni kôd",
+       "viewsource-title": "Izvorni kôd stranice $1",
        "actionthrottled": "Akcija je usporena",
        "actionthrottledtext": "U cilju borbe protiv zloupotrebe, ograničeno vam je da u kratkom vremenskom periodu previše puta vršite ovu radnju, a upravo ste prešli to ograničenje.\nPokušajte ponovo za nekoliko minuta.",
        "protectedpagetext": "Ova stranica je zaključana da bi se spriječile izmjene.",
        "mergelog": "Zapisnik spajanja",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
-       "history-title": "$1: Historija izmjena",
-       "difference-title": "$1: Razlike između izmjena",
+       "history-title": "Historija izmjena stranice \"$1\"",
+       "difference-title": "Razlika između izmjena na stranici \"$1\"",
        "difference-title-multipage": "$1 i $2: Razlike između stranica",
        "difference-multipage": "(Razlika između stranica)",
        "lineno": "Red $1:",
        "searchprofile-advanced-tooltip": "Traži u ostalim imenskim prostorima",
        "search-result-size": "$1 ({{PLURAL:$2|$2 riječ|$2 riječi}})",
        "search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 potkategorija|$2 potkategorije|$2 potkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
-       "search-redirect": "(preusmjereno sa $1)",
+       "search-redirect": "(preusmjerenje sa $1)",
        "search-section": "(sekcija $1)",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
        "recentchanges-submit": "Prikaži",
        "rcfilters-tag-remove": "Ukloni '$1'",
        "rcfilters-legend-heading": "<strong>Spisak skraćenica:</strong>",
-       "rcfilters-other-review-tools": "<strong>Drugi alati za pregled</strong>",
+       "rcfilters-other-review-tools": "Drugi alati za pregled",
        "rcfilters-group-results-by-page": "Grupiraj rezultate po stranicama",
        "rcfilters-grouping-title": "Grupiranje",
        "rcfilters-activefilters": "Aktivni filteri",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
        "rcfilters-exclude-button-off": "Izuzmi izabrano",
        "rcfilters-exclude-button-on": "Izuzimam izabrano",
-       "rcfilters-view-advanced-filters-label": "Napredni filteri",
        "rcfilters-view-tags": "Označene izmjene",
        "rcfilters-view-namespaces-tooltip": "Filtriraj rezultate po imenskom prostoru",
        "rcfilters-view-tags-tooltip": "Filtriraj rezultate po oznakama",
        "tooltip-ca-talk": "Razgovor o sadržaju",
        "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Započnite novu sekciju.",
-       "tooltip-ca-viewsource": "Ovaj članak je zaključan. Možete ga samo vidjeti ili kopirati kod.",
+       "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete joj vidjeti izvorni kôd",
        "tooltip-ca-history": "Prethodne verzije ove stranice.",
        "tooltip-ca-protect": "Zaštitite stranicu od budućih izmjena",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
        "confirmemail": "Potvrdite adresu e-pošte",
        "confirmemail_noemail": "Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].",
        "confirmemail_text": "{{SITENAME}} zahtijeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte.\nAktivirajte dugme ispod kako biste poslali poštu za potvrdu na Vašu adresu.\nPošta uključuje link koji sadrži kod;\nučitajte link u Vaš preglednik da biste potvrdili da je adresa Vaše e-pošte validna.",
-       "confirmemail_pending": "Potvrdni kod Vam je već poslan e-poštom;\nako ste nedavno otvorili račun, trebali biste pričekati nekoliko minuta da poslana pošta stigne, prije nego što ponovo zahtijevate novi kod.",
+       "confirmemail_pending": "Potvrdni kod Vam je već poslan e-poštom;\nako ste nedavno otvorili račun, pričekajte nekoliko minuta da poruka stigne prije nego što zatražite novi kod.",
        "confirmemail_send": "Pošaljite kod za potvrdu",
        "confirmemail_sent": "E-pošta za potvrđivanje poslata.",
        "confirmemail_oncreate": "Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu.\nTaj kod nije neophodan za prijavljivanje, ali Vam ne potreban kako bi ste omogućili funkcije wikija zasnovane na e-mailu.",
        "log-action-filter-contentmodel-change": "Izmjena modela sadržaja",
        "log-action-filter-contentmodel-new": "Nova stranica s nestandardnim modelom sadržaja",
        "log-action-filter-delete-delete": "Brisanje stranice",
-       "log-action-filter-delete-delete_redir": "Prepisivanje preusmjerenja",
+       "log-action-filter-delete-delete_redir": "Presnimavanje preusmjerenja",
        "log-action-filter-delete-restore": "Vraćanje obrisane stranice",
        "log-action-filter-delete-event": "Brisanje unosa u zapisniku",
        "log-action-filter-delete-revision": "Brisanje izmjene",
index da172aa..80ecf13 100644 (file)
        "anonpreviewwarning": "''No us heu identificat amb un compte d'usuari. La vostra adreça IP quedarà registrada a l'historial d'aquesta pàgina.''",
        "missingsummary": "'''Recordatori''': Heu deixat en blanc el resum de l'edició. Si torneu a clicar al botó de desar, l'edició es guardarà sense resum.",
        "selfredirect": "<strong>Avís:</strong> Esteu redirigint la pàgina a si mateixa.\nPodeu haver especificat un objectiu erroni per a la redirecció, o potser esteu modificant una pàgina incorrecta.\nSi feu clic a «$1» una vegada més, la redirecció es crearà de totes maneres.",
-       "missingcommenttext": "Introduïu un comentari a continuació.",
+       "missingcommenttext": "Introduïu un comentari.",
        "missingcommentheader": "<strong>Recordatori:</strong> no heu proporcionat un assumpte/encapçalament per al comentari.\nSi feu clic de nou al botó «$1», la vostra contribució es desarà sense cap.",
        "summary-preview": "Previsualització del resum de modificació:",
        "subject-preview": "Previsualització de l’assumpte:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceà Índic",
        "timezoneregion-pacific": "Oceà Pacífic",
-       "allowemail": "Permet que altres usuaris puguin enviar-me missatges per correu electrònic",
+       "allowemail": "Permet que altres usuaris m'enviïn missatges per correu electrònic",
+       "email-blacklist-label": "Prohibeix a aquests usuaris que m'enviïn correus electrònics:",
        "prefs-searchoptions": "Cerca",
        "prefs-namespaces": "Espais de noms",
        "default": "per defecte",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
        "rcfilters-legend-heading": "<strong>Llista d'abreviatures:</strong>",
-       "rcfilters-other-review-tools": "<strong>Altres eines de supervisió</strong>",
+       "rcfilters-other-review-tools": "Altres eines de supervisió",
        "rcfilters-group-results-by-page": "Agrupa els resultats per pàgina",
        "rcfilters-grouping-title": "Agrupació",
        "rcfilters-activefilters": "Filtres actius",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|hores}}",
        "rcfilters-highlighted-filters-list": "Destacat: $1",
        "rcfilters-quickfilters": "Filtres desats",
-       "rcfilters-quickfilters-placeholder-title": "Encara no s’ha desat cap enllaç",
+       "rcfilters-quickfilters-placeholder-title": "Encara no s’ha desat cap filtre",
        "rcfilters-quickfilters-placeholder-description": "Per desar els teus filtres i usar-los  després, premeu l'icona de marcador de pàgina a l'àrea de Filtres Actius, més avall.",
        "rcfilters-savedqueries-defaultlabel": "Filtres desats",
        "rcfilters-savedqueries-rename": "Reanomena",
        "rcfilters-filtergroup-lastRevision": "Darreres revisions",
        "rcfilters-filter-lastrevision-label": "Darrera revisió",
        "rcfilters-filter-lastrevision-description": "El canvi més recent a una pàgina.",
-       "rcfilters-filter-previousrevision-label": "Revisions anteriors",
+       "rcfilters-filter-previousrevision-label": "No la darrera revisió",
+       "rcfilters-filter-previousrevision-description": "Tots els canvis que no són «la darrera revisió».",
        "rcfilters-filter-excluded": "Exclòs",
        "rcfilters-exclude-button-off": "Exclou els seleccionats",
        "rcfilters-exclude-button-on": "Excloent els seleccionats",
-       "rcfilters-view-advanced-filters-label": "Filtres avançats",
        "rcfilters-view-tags": "Canvis etiquetats",
        "rcfilters-view-namespaces-tooltip": "Filtrar resultats per l'espai de noms",
        "rcfilters-view-tags-tooltip": "Filtrar resultats usant etiquetes d'edició",
        "rcfilters-watchlist-markseen-button": "Marca tots els canvis com a vistos",
        "rcfilters-watchlist-edit-watchlist-button": "Editeu la vostra llista de pàgines seguides",
        "rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
+       "rclistfromreset": "Reinicialitza la selecció de data",
        "rclistfrom": "Mostra els canvis nous des de $3, $2",
        "rcshowhideminor": "$1 edicions menors",
        "rcshowhideminor-show": "Mostra",
        "listfiles_size": "Mida (octets)",
        "listfiles_description": "Descripció",
        "listfiles_count": "Versions",
-       "listfiles-show-all": "Inclou versions antigues de les imatges",
+       "listfiles-show-all": "Inclou versions antigues dels fitxers",
        "listfiles-latestversion": "Versió actual",
        "listfiles-latestversion-yes": "Sí",
        "listfiles-latestversion-no": "No",
        "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.",
        "pageswithprop-prop": "Nom de la propietat:",
+       "pageswithprop-reverse": "Ordena en invers",
+       "pageswithprop-sortbyvalue": "Ordena pel valor de la propietat",
        "pageswithprop-submit": "Vés",
        "pageswithprop-prophidden-long": "valor de propietat text llarg ocult ($1)",
        "pageswithprop-prophidden-binary": "valor de propietat binària oculta ($1)",
        "enotif_lastdiff": "Per a visualitzar aquest canvi, consulteu $1",
        "enotif_anon_editor": "usuari anònim $1",
        "enotif_body": "Benvolgut/uda $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResum de l'editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacteu amb l'editor:\ncorreu: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo rebreu més notificacions en cas de més activitat a menys que visiteu aquesta pàgina havent iniciat sessió.\nTambé podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.\n\nEl servei de notificacions del projecte {{SITENAME}}\n\n--\nPer a canviar les opcions de notificació per correu electrònic aneu a\n{{canonicalurl:{{#special:Preferences}}}}\n\nPer a canviar les opcions de la vostra llista de seguiment aneu a\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPer eliminar la pàgina de la vostra llista de seguiment aneu a\n$UNWATCHURL\n\nSuggeriments i ajuda:\n$HELPPAGE",
+       "enotif_minoredit": "Aquesta és una modificació menor",
        "created": "creada",
        "changed": "modificada",
        "deletepage": "Elimina la pàgina",
        "undelete-search-title": "Cerca de pàgines esborrades",
        "undelete-search-box": "Cerca pàgines esborrades",
        "undelete-search-prefix": "Mostra pàgines que comencin:",
+       "undelete-search-full": "Mostra títols de pàgines que continguin:",
        "undelete-search-submit": "Cerca",
        "undelete-no-results": "Amb aquest criteri de cerca, no s'ha trobat cap pàgina a l'arxiu de supressions",
        "undelete-filename-mismatch": "No es pot revertir l'eliminació de la revisió de fitxer amb marca horària $1: no coincideix el nom de fitxer",
        "compare-title-not-exists": "El títol que heu especificat no existeix.",
        "compare-revision-not-exists": "La revisió que heu especificat no existeix.",
        "diff-form": "Diferències",
+       "permanentlink-revid": "ID de la revisó",
+       "permanentlink-submit": "Vés a la revisió",
        "dberr-problems": "Ho sentim. Aquest lloc web està experimentant dificultats tècniques.",
        "dberr-again": "Intenteu esperar uns minuts i tornar a carregar.",
        "dberr-info": "(No es pot accedir a la base de dades: $1)",
index 94c0132..4a1f7a7 100644 (file)
                        "唐吉訶德的侍從",
                        "Ztl8702",
                        "Macofe",
-                       "GnuDoyng"
+                       "GnuDoyng",
+                       "Davidzdh"
                ]
        },
        "tog-underline": "Â-hĕk-siáng lièng-giék",
        "tog-hideminor": "Káung kī cī-bŏng gì guó-éu siŭ-gāi",
        "tog-hidepatrolled": "Káung kī cī-bŏng ī giēng-că gì siŭ-gāi",
        "tog-newpageshidepatrolled": "Káung kī sĭng hiĕk dăng-dăng gà̤-dēng ī-gĭng giēng-că guó gì hiĕk",
+       "tog-hidecategorization": "隱藏頁面分類",
        "tog-extendwatchlist": "敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改",
        "tog-usenewrc": "按頁顯示最近修改共監視列表臺中其群組改變",
-       "tog-numberheadings": "Biĕu-dà̤ cê̤ṳ-dông piĕng-hô̤",
-       "tog-showtoolbar": "Hiēng-sê piĕng-cĭk gă-sĭ-dèu",
+       "tog-numberheadings": "標題自動編號",
+       "tog-showtoolbar": "顯示編輯家私條",
        "tog-editondblclick": "雙擊就修改頁面",
        "tog-editsectiononrightclick": "啟用右擊標題編輯段落",
        "tog-watchcreations": "加添我開其頁面共我上傳其文件遘我其監視單",
        "tog-watchdefault": "添加我編輯其頁面共文件遘我其監視單",
        "tog-watchmoves": "添加我移動其頁面共文件遘我其監視單",
        "tog-watchdeletion": "添加我刪掉其頁面共文件遘我其監視單",
+       "tog-watchuploads": "共我上傳其新文件加遘我其監視單",
        "tog-watchrollback": "敆我其監視列表臺中添加我做過回滚其頁面",
        "tog-minordefault": "默認共所有其編輯都當作過幼修改",
        "tog-previewontop": "敆編輯框以前顯示預覽",
@@ -38,9 +41,9 @@
        "tog-enotifminoredits": "就㑚講是過幼編輯,也着發電子郵件乞我",
        "tog-enotifrevealaddr": "敆通知郵件臺中顯示我其電子郵件地址",
        "tog-shownumberswatching": "顯示監視用戶其數量",
-       "tog-oldsig": "Nṳ̄ còng-câi gì chiĕng-miàng:",
+       "tog-oldsig": "汝存在其簽名:",
        "tog-fancysig": "共簽名當成維基文本(無自動鏈接)",
-       "tog-uselivepreview": "使即時預覽",
+       "tog-uselivepreview": "無重新加載頁面直接看預覽",
        "tog-forceeditsummary": "提醒我行遘蜀萆空白其編輯總結",
        "tog-watchlisthideown": "趁監視單𡅏囥起我其修改",
        "tog-watchlisthidebots": "囥起監視單其機器人其修改",
@@ -50,7 +53,7 @@
        "tog-watchlisthideanons": "共匿名其用戶其編輯趁監視單𡅏囥起咯",
        "tog-watchlisthidepatrolled": "共巡查其編輯趁監視單𡅏囥起咯",
        "tog-watchlisthidecategorization": "Káung kī hiĕk gì lôi-biék",
-       "tog-ccmeonemails": "共我發乞其他用戶其電子郵件其備份發乞我",
+       "tog-ccmeonemails": "共我發乞其他用戶其電子郵件其備份發乞我",
        "tog-diffonly": "伓使敆下底其顯示𣍐蜀様其地方顯示頁面內容",
        "tog-showhiddencats": "㪗藏類別",
        "tog-norollbackdiff": "Cék-hèng huòi-gūng ī-hâiu ng-sāi hiēng-sê chă-biék",
        "editfont-monospace": "蜀様寬其字體",
        "editfont-sansserif": "無襯線其字體",
        "editfont-serif": "有襯線其字體",
-       "sunday": "Lā̤-bái",
-       "monday": "Bái-ék",
+       "sunday": "禮拜",
+       "monday": "拜一",
        "tuesday": "Bái-nê",
-       "wednesday": "Bái-săng",
-       "thursday": "Bái-sé",
-       "friday": "Bái-ngô",
-       "saturday": "Bái-lĕ̤k",
+       "wednesday": "拜三",
+       "thursday": "拜四",
+       "friday": "拜五",
+       "saturday": "拜六",
        "sun": "禮拜",
-       "mon": "B1",
-       "tue": "Bái-nê",
+       "mon": "拜一",
+       "tue": "拜二",
        "wed": "拜三",
        "thu": "拜四",
        "fri": "拜五",
        "sat": "拜六",
        "january": "Ék-nguŏk",
-       "february": "Nê-nguŏh",
+       "february": "Nê-nguŏk",
        "march": "Săng-nguŏk",
        "april": "Sé-nguŏk",
        "may_long": "Ngô-nguŏk",
@@ -90,7 +93,7 @@
        "november": "Sĕk-ék-nguŏk",
        "december": "Sĕk-nê-nguŏk",
        "january-gen": "一月",
-       "february-gen": "Nê-nguŏk",
+       "february-gen": "二月",
        "march-gen": "三月",
        "april-gen": "四月",
        "may-gen": "五月",
        "october-gen": "十月",
        "november-gen": "十一月",
        "december-gen": "十二月",
-       "jan": "Ék-nguŏk",
-       "feb": "Nê-nguŏk",
-       "mar": "Săng-nguŏk",
-       "apr": "Sé-nguŏk",
-       "may": "Ngô-nguŏk",
-       "jun": "Lĕ̤k-nguŏk",
-       "jul": "Chék-nguŏk",
-       "aug": "Báik-nguŏk",
-       "sep": "Gāu-nguŏk",
-       "oct": "Sĕk-nguŏk",
-       "nov": "Sĕk-ék-nguŏk",
-       "dec": "Sĕk-nê-nguŏk",
+       "jan": "1 ng.",
+       "feb": "2 ng.",
+       "mar": "3 ng.",
+       "apr": "四月",
+       "may": "五月",
+       "jun": "6 ng.",
+       "jul": "七月",
+       "aug": "8 ng.",
+       "sep": "9 ng.",
+       "oct": "10 ng.",
+       "nov": "11 ng.",
+       "dec": "12 ng.",
        "january-date": "一月$1號",
        "february-date": "二月$1號",
        "march-date": "三月$1號",
        "category_header": "「$1」類別下底其頁面",
        "subcategories": "子類別",
        "category-media-header": "「$1」類別下底其媒體",
-       "category-empty": "''茲類別下底現在無文章也無媒體。''",
+       "category-empty": "<em>茲類別下底現在無文章也無媒體。</em>",
        "hidden-categories": "{{PLURAL:$1}} bĭk ké̤ṳk káung kī gì lôi-biék",
        "hidden-category-category": "已經囥起其類別",
        "category-subcat-count": "{{PLURAL:$2|Ciā lôi-biék nâ bău-guák â-dā̤ siŏh bĭk cṳ̄-lôi-biék.|Ciā lôi-biék bău-guák â-dā̤ $1 bĭk cṳ̄-lôi-biék, gê̤ṳng-cūng $2 bĭk.}}",
        "category-file-count-limited": "下底其茲$1萆文件都敆茲蜀萆類別𡅏。{{PLURAL:$1}}",
        "listingcontinuesabbrev": "(繼續前斗)",
        "index-category": "索引其頁面",
-       "noindex-category": "Muôi sáuk-īng gì hiĕk",
+       "noindex-category": "無索引其頁",
        "broken-file-category": "獃其文件鏈接其頁面",
        "about": "關於",
        "article": "文章",
-       "newwindow": "(敆新窗口開)",
+       "newwindow": "(敆新窗口𡅏開)",
        "cancel": "取消",
-       "moredotdotdot": "価...",
-       "morenotlisted": "Ciā dăng-dăng mâ̤ uòng-cīng.",
+       "moredotdotdot": "価...",
+       "morenotlisted": "茲萆單單𣍐完整",
        "mypage": "頁面",
        "mytalk": "我其討論",
-       "anontalk": "Păng-gōng",
-       "navigation": "Īng-dô̤:",
-       "and": "&#32;gâe̤ng",
+       "anontalk": "攀講",
+       "navigation": "Dô̤-hòng",
+       "and": "&#32;",
        "faq": "真稠碰著其問題",
        "actions": "動作",
        "namespaces": "Miàng-kŭng-găng",
        "variants": "Biéng-tā̤",
        "navigation-heading": "Dô̤-hòng chái-dăng",
-       "errorpagetitle": "咯",
+       "errorpagetitle": "咯",
        "returnto": "轉去$1。",
        "tagline": "Lài-nguòng: {{SITENAME}}",
        "help": "Bŏng-cô",
        "search": "Sìng-tō̤",
-       "searchbutton": "Tō̤",
+       "searchbutton": "尋討",
        "go": "去",
        "searcharticle": "Kó̤",
-       "history": "Hiĕk-miêng lĭk-sṳ̄",
-       "history_short": "Lĭk-sṳ̄",
+       "history": "頁面歷史",
+       "history_short": "歷史",
+       "history_small": "歷史",
        "updatedmarker": "趁我最後蜀回訪問開始更新",
-       "printableversion": "Â̤ páh-éng gì bēng-buōng",
-       "permalink": "Īng-giū lièng-giék",
+       "printableversion": "Kō̤ páh-éng bēng-buōng",
+       "permalink": "永久鏈接",
        "print": "拍印",
-       "view": "Ché̤ṳ-siŏh-ché̤ṳ",
+       "view": "覷蜀覷",
        "view-foreign": "敆$1𡅏看",
        "edit": "Siŭ-gāi",
        "edit-local": "編輯當地描述",
        "protect_change": "改變",
        "unprotect": "改變保護其狀態",
        "newpage": "新頁",
-       "talkpagelinktext": "páng-gōng",
+       "talkpagelinktext": "tō̤-lâung",
        "specialpage": "特殊頁",
-       "personaltools": "Gó̤-ìng gì gă-sĭ-huă",
+       "personaltools": "Gó̤-ìng gă-sĭ-huă",
        "talk": "Tō̤-lâung",
-       "views": "Ché̤ṳ-siŏh-ché̤ṳ",
+       "views": "Ché̤ṳ siŏh ché̤ṳ",
        "toolbox": "Gă-sĭ-huă",
        "imagepage": "覷蜀覷文件頁面",
        "mediawikipage": "看消息頁",
        "redirectedfrom": "(téng $1 tṳ̀ng-déng-hióng guó-lì)",
        "redirectpagesub": "重定向頁",
        "redirectto": "重定向遘",
-       "lastmodifiedat": "Cī siŏh hiĕk sê diŏh $1 $2 sèng-hâiu có̤i-hâiu siŭ-gāi gì.",
+       "lastmodifiedat": "茲蜀頁是著$1地方,$2辰候之後修改其。",
        "viewcount": "茲蜀頁已經乞訪問$1回了。{{PLURAL:$1}}",
        "protectedpage": "保護頁",
        "jumpto": "Tiéu gáu:",
-       "jumptonavigation": "Īng-dô̤:",
-       "jumptosearch": "Sìng-tō̤",
-       "view-pool-error": "對不住,服務器茲蜀萆時候已過載了。\n過価用戶敆𡅏覷茲蜀頁。\n起動等仂久再來覷茲蜀頁。\n\n$1",
+       "jumptonavigation": "dô̤-hòng",
+       "jumptosearch": "sìng-tō̤",
+       "view-pool-error": "對不住,服務器茲蜀萆時候已過載了。\n過価用戶敆𡅏覷茲蜀頁。\n起動等仂久再來覷茲蜀頁。\n\n$1",
        "generic-pool-error": "對不住,現刻時服務器過載了。\n實在過価用戶敆𡅏訪問茲蜀萆資源。\n起動汝等蜀刻再訪問茲蜀萆資源。",
        "pool-timeout": "等待鎖定其時間遘了",
        "pool-queuefull": "隊列池已經滿了",
        "poolcounter-usage-error": "Ê̤ṳng-huák chó̤-nguô: $1",
        "aboutsite": "Guăng-ṳ̀ {{SITENAME}}",
        "aboutpage": "Project:Guăng-ṳ̀",
-       "copyright": "內容會使敆$1下底會使獲得遘,若無會給出其它提示。",
+       "copyright": "內容會使敆$1下底會使獲得遘,若無會乞其他提示。",
        "copyrightpage": "{{ns:project}}:Bēng-guòng",
        "currentevents": "Duâi Ché̤ṳ Â",
        "currentevents-url": "Project:Duâi Ché̤ṳ Â",
        "disclaimers": "Mò̤-hô-cáik sĭng-mìng",
        "disclaimerpage": "Project:Mò̤-hô-cáik sĭng-mìng",
        "edithelp": "修改保護",
-       "helppage-top-gethelp": "Bŏng-cô",
+       "helppage-top-gethelp": "幫助",
        "mainpage": "Tàu Hiĕk",
        "mainpage-description": "Tàu Hiĕk",
        "policy-url": "Project:政策",
        "portal-url": "Project:Tiăng-dŏng",
        "privacy": "Ṳ̄ng-sṳ̆ céng-cháik",
        "privacypage": "Project:Ṳ̄ng-sŭ céng-cháik",
-       "badaccess": "權限錯誤",
+       "badaccess": "權限綻去",
        "badaccess-group0": "汝𣍐使做汝要求其茲蜀萆動作。",
        "badaccess-groups": "汝卜做其動作着{{PLURAL:$2|茲蜀群組|茲蜀組裡勢}}其用戶乍有能耐使:$1",
        "versionrequired": "需要版本$1其MediaWiki",
        "versionrequiredtext": "需要MediaWiki其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
        "ok": "好",
        "retrievedfrom": "Lài-nguòng: \"$1\"",
-       "youhavenewmessages": "汝有$1($2)。",
+       "youhavenewmessages": "{{PLURAL:$3|汝有}}$1($2)。",
        "youhavenewmessagesfromusers": "汝有趁$3用戶($2)來其$1萆信息{{PLURAL:$3}}",
        "youhavenewmessagesmanyusers": "汝有趁雅価用戶($2)其$1信息",
        "newmessageslinkplural": "{{PLURAL:$1|蜀條新其消息|999=新其消息}}",
        "editsection": "siŭ-gāi",
        "editold": "修改",
        "viewsourceold": "看源代碼",
-       "editlink": "siŭ-gāi",
-       "viewsourcelink": "Káng nguòng-dâi-mā",
-       "editsectionhint": "Siŭ-gāi dâung: $1",
-       "toc": "Mŭk-liŏh",
+       "editlink": "修改",
+       "viewsourcelink": "看源代碼",
+       "editsectionhint": "修改段落:$1",
+       "toc": "目錄",
        "showtoc": "顯示",
        "hidetoc": "囥起",
        "collapsible-collapse": "掩",
        "site-atom-feed": "$1 Atom déng-iŏk",
        "page-rss-feed": "「$1」RSS訂閱",
        "page-atom-feed": "$1 Atom déng-iŏk",
-       "red-link-title": "$1 (mò̤ hī hiĕk)",
+       "red-link-title": "$1(mò̤ ciā hiĕk)",
        "sort-descending": "降序排序",
-       "sort-ascending": "序排序",
-       "nstab-main": "Ùng-ciŏng",
+       "sort-ascending": "序排序",
+       "nstab-main": "頁面",
        "nstab-user": "用戶頁",
        "nstab-media": "媒體頁",
-       "nstab-special": "Dĕk-sṳ̀-hiĕk",
-       "nstab-project": "工程頁",
-       "nstab-image": "Ùng-giông",
+       "nstab-special": "特殊頁",
+       "nstab-project": "項目頁",
+       "nstab-image": "文件",
        "nstab-mediawiki": "消息",
        "nstab-template": "模板",
        "nstab-help": "幫助頁",
        "nosuchactiontext": "茲蜀種URL指定其行動是𣍐合法其。",
        "nosuchspecialpage": "無總款其特殊頁",
        "nospecialpagetext": "<strong>汝請求蜀萆𣍐合法其特殊頁面。</strong>\n\n合法其特殊頁面清單會使敆[[Special:SpecialPages|{{int:特殊頁面}}]]頁面討著",
-       "error": "咯",
+       "error": "咯",
        "databaseerror": "數據庫有綻",
        "databaseerror-text": "數據庫查詢發生錯誤。\n嚽可能是軟件裡勢其程序缺陷。",
        "databaseerror-textcl": "數據庫查詢發生錯誤。",
        "laggedslavemode": "'''警告:'''頁面可能無最近其更新。",
        "readonly": "數據庫乞鎖起咯",
        "enterlockreason": "拍入汝鎖定數據庫其原因,包括汝估計其釋放鎖其時間",
-       "readonlytext": "數據庫茲滿乞儂鎖定了,𣍐使寫新條目或者做修改。有可能是日常維護,之後就會正常。\n\n\n鎖起數據庫其管理員總款解釋:$1",
+       "readonlytext": "æ\95¸æ\93\9a庫è\8c²æ»¿ä¹\9eå\84\82é\8e\96å®\9aäº\86ï¼\8cð£\8d\90使寫æ\96°æ¢\9dç\9b®æ\88\96è\80\85å\81\9aä¿®æ\94¹ã\80\82æ\9c\89å\8f¯è\83½æ\98¯æ\97¥å¸¸ç¶­è­·ï¼\8cä¹\8bå¾\8cå°±æ\9c\83正常ã\80\82\n\n\né\8e\96èµ·æ\95¸æ\93\9a庫å\85¶ç³»çµ±ç®¡ç\90\86å\93¡ç¸½æ¬¾è§£é\87\8bï¼\9a$1",
        "missing-article": "數據庫未討遘本身應當著討遘其名叫\"$1\"其頁面$2其文本。\n\n嚽可能是下底其過時其diff或者已經删除其歴史鏈接造成其。\n\n如果伓是茲兩種情況,汝可能發現著蜀萆服務器其缺陷。\n起動汝共茲蜀萆缺陷匯報乞[[Special:ListUsers/sysop|管理員]],附上網址。",
        "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(比並:$1、$2)",
        "filenotfound": "討𣍐著文件「$1」。",
        "unexpected": "伓是卜挃其值:「$1」=「$2」。",
        "formerror": "綻去:𣍐使提交表單。",
-       "badarticleerror": "不允許敆茲蜀萆做茲蜀種行為。",
-       "cannotdelete": "ç\84¡è\83½è\80\90å\88ªæ\8e\89é \81é\9d¢æ\88\96è\80\85æ\96\87件ã\80\8c$1ã\80\8dã\80\82\nå\8f¯è\83½è\8c²å·²ç¶\93å\85±別儂刪掉咯了。",
+       "badarticleerror": "𣍐使敆茲蜀萆頁面做茲蜀種行為。",
+       "cannotdelete": "ç\84¡è\83½è\80\90å\88ªæ\8e\89é\80\99é \81é\9d¢æ\88\96è\80\85æ\96\87件ã\80\8c$1ã\80\8dã\80\82\nå\8f¯è\83½å\9a½å·²ç¶\93ä¹\9e別儂刪掉咯了。",
        "cannotdelete-title": "無辦法刪掉頁面「$1」",
        "delete-hook-aborted": "刪除乞鉤子拍斷咯。\n無給出解釋。",
        "no-null-revision": "𣍐使敆頁面$1𡅏新建空操作。",
-       "badtitle": "其標題",
+       "badtitle": "其標題",
        "perfcached": "下底其數據乞緩存固加可能伓是最新其。{{PLURAL:$1|$1條結果}}會敆緩存臺中討著。",
        "perfcachedts": "下底其數據已經緩存過了,最後更新遘$1。{{PLURAL:$4|$4條結果}}會敆緩存臺中討著。",
        "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據嚽塊現刻時𣍐更新了。",
        "viewsource-title": "覷\"$1\"其源代碼",
        "actionthrottled": "行動乞取消咯",
        "protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。",
-       "viewsourcetext": "汝會使看共複製茲蜀頁其源代碼",
-       "viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:",
+       "viewsourcetext": "汝會使看共複製茲蜀頁其源代碼",
+       "viewyourtext": "汝會使覷蜀覷或者複製茲頁<strong>汝其修改</strong>其源代碼。",
        "editinginterface": "<strong>警告:</strong>汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。",
-       "cascadeprotected": "茲頁乞保護起去,汝無能耐修改,因為茲頁乞下底有開“級聯”選項其{{PLURAL:$1|頁|頁}}保護頁面引用:\n$2",
+       "cascadeprotected": "茲頁乞保護起去,汝無能耐修改,因為茲頁乞下底有開「級聯」選項其{{PLURAL:$1|頁|頁}}保護頁面引用:\n$2",
        "namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。",
        "customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。",
        "customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。",
        "exception-nologin": "未登錄",
        "exception-nologin-text": "起動汝登錄以後再訪問茲蜀頁,或者做茲蜀萆操作。",
        "exception-nologin-text-manual": "起動汝$1,以後才會使訪問茲蜀頁,或者做茲蜀萆行為。",
-       "virus-badscanner": "獃其配置:𣍐八其病毒掃描器:''$1''",
-       "virus-scanfailed": "掃描失敗(代碼$1)",
+       "virus-badscanner": "呆其配置:𣍐仈倛病毒掃描器:<em>$1</em>",
+       "virus-scanfailed": "掃描𣍐來(代碼$1)",
        "virus-unknownscanner": "𣍐八其反病毒:",
        "logouttext": "<strong>汝現在已經躒出了。</strong>\n\n注意有其頁面可能會繼續顯示汝未躒出辰候其樣式,除開汝清理瀏覽器緩存。",
        "welcomeuser": "歡迎,$1!",
        "createacct-reason": "原因",
        "createacct-reason-ph": "汝奚勢復想開另外蜀隻賬戶?",
        "createacct-submit": "開賬戶",
-       "createacct-another-submit": "新建另外蜀萆賬號",
+       "createacct-another-submit": "新建賬號",
        "createacct-benefit-heading": "{{SITENAME}}是共汝蜀様其儂做其。",
        "createacct-benefit-body1": "{{PLURAL:$1|修改}}",
        "createacct-benefit-body2": "{{PLURAL:$1|頁面}}",
        "createacct-benefit-body3": "最近其{{PLURAL:$1|貢獻者}}",
        "badretype": "汝拍入其密碼𣍐蜀様。",
        "userexists": "用戶名已經乞別人使去了。\n起動另外再起蜀萆名字。",
-       "loginerror": "登錄有",
+       "loginerror": "登錄有",
        "createacct-error": "開賬號無成功",
-       "createaccounterror": "無能開賬戶:$1",
+       "createaccounterror": "無能開賬戶:$1",
        "nocookiesnew": "用戶賬號已經開好了,不過汝固未躒入。\n{{SITENAME}}使cookie來記錄已經躒入其用戶。\n汝其cookie固未開起來。\n起動汝開啟cookie,仱再使汝新其賬號共密碼來躒入。",
        "nocookieslogin": "{{SITENAME}}使cookies來記錄已經登錄其用戶。\n但是汝禁用了cookie。\n起動汝開起cookie,然後再試蜀試。",
        "noname": "汝未指定蜀萆合法其用戶名。",
        "nosuchusershort": "無總款其用戶名「$1」。\n檢查汝其拼寫。",
        "nouserspecified": "汝著指定蜀萆用戶名。",
        "login-userblocked": "茲隻用戶已經乞封鎖去了。登錄是𣍐允許其。",
-       "wrongpassword": "密碼咯。\n起動再查蜀下。",
+       "wrongpassword": "密碼咯。\n起動再查蜀下。",
        "wrongpasswordempty": "未拍入密碼。\n起動汝再試蜀下。",
        "passwordtooshort": "密碼著設最少{{PLURAL:$1|$1萆字符}}。",
        "password-name-match": "汝其密碼無能耐共汝其用戶名蜀模蜀樣。",
        "passwordremindertitle": "{{SITENAME}}其新其臨時密碼",
        "passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再登錄蜀頭部。",
        "mailerror": "寄電批有綻:$1",
-       "acct_creation_throttle_hit": "使汝其IP訪問茲蜀萆維基百科訪問者其已經敆最後蜀日創建{{PLURAL:$1|$1萆賬戶}}去了。茲蜀段時間最価若允許創建茲滿価萆賬戶。故此講使茲蜀萆IP訪問其儂敆現刻時𣍐使再開賬戶了。",
+       "acct_creation_throttle_hit": "使汝其IP訪問茲蜀萆維基百科訪問者其已經敆最後$2創建{{PLURAL:$1|$1萆賬戶}}去了。茲蜀段時間最価若允許創建茲滿価萆賬戶。故此講使茲蜀萆IP訪問其儂敆現刻時𣍐使再開賬戶了。",
        "emailauthenticated": "汝其電子郵件地址已經敆$2$3確定過了。",
        "emailnotauthenticated": "汝其電批固未確定過。\n下底其所有特性都𣍐發電批乞汝。",
        "emailconfirmlink": "確定汝其電批地址",
        "resetpass-submit-cancel": "取消",
        "resetpass-temp-password": "臨時密碼:",
        "passwordreset": "重置密碼",
-       "passwordreset-text-one": "完成茲隻表單,通過電批寄臨時密碼其方法來重新設定汝其密碼。",
+       "passwordreset-text-one": "完成茲隻表單,使電批寄臨時密碼來重新設定汝其密碼。",
        "passwordreset-username": "用戶名:",
        "passwordreset-domain": "域名:",
        "passwordreset-email": "電批地址:",
-       "passwordreset-emailsentemail": "蜀萆密碼重新設置其電批已經寄出去了。",
-       "changeemail": "修改é\9b»æ\89¹å\85¶å\9c°å\9d\80",
+       "passwordreset-emailsentemail": "如果茲萆电子郵件地址共汝其賬號有關聯,噲密碼重設电子郵件會發過去。",
+       "changeemail": "修改æ\88\96è\80\85å\88ªé\99¤é\9b»å­\90é\83µä»¶å\9c°å\9d\80",
        "changeemail-header": "修改賬戶電子郵件地址",
        "changeemail-oldemail": "現刻時其電批地址:",
        "changeemail-newemail": "新其電批地址:",
        "sig_tip": "汝其帶時間戳其簽名",
        "hr_tip": "水平線(廮𡅏保護使其)",
        "summary": "總結:",
-       "subject": "主題/標題:",
+       "subject": "主題:",
        "minoredit": "過幼修改",
        "watchthis": "監視茲頁",
        "savearticle": "Bō̤-còng ciā hiĕk",
        "anoneditwarning": "<strong>警告:</strong>汝固未登錄。\n儷是汝做出修改其話,汝其IP地址會敆編輯歷史裡勢公開。儷是汝<strong>[$1躒入]</strong>或者<strong>[$2註册新賬號]</strong>,汝其修改記錄會顯示汝其用戶名,固有其它其好處。",
        "anonpreviewwarning": "<em>汝固未躒入。儷是汝卜想保存茲蜀頁其修改,汝其IP地址會乞記著茲蜀頁其編輯歷史臺中。</em>",
        "missingcommenttext": "起動敆下底拍蜀條評論。",
-       "summary-preview": "總結預覽:",
+       "summary-preview": "修改總結預覽:",
        "blockedtitle": "用戶乞封鎖了",
        "blockednoreason": "無掏出原因",
        "whitelistedittext": "汝必須$1乍會使修改頁面。",
-       "loginreqtitle": "需要登錄",
+       "loginreqtitle": "汝著登錄",
        "loginreqlink": "láuk-diē",
        "loginreqpagetext": "起動汝$1以後再看其它頁面。",
        "accmailtitle": "密碼寄出了",
        "newarticle": "(新)",
        "newarticletext": "汝已經跟鏈接跟遘無存在其頁面了。\n卜想創建頁面,敆下底其框框𡅏拍字(覷蜀覷[$1 幫助頁面]有無更更価其幫助)。\n如果汝是無注意來遘茲蜀萆頁面,篤囇汝其瀏覽器上其「返回」按鈕。",
        "anontalkpagetext": "<em>茲是未登錄其用戶討論頁面。</em>\n故此儂家著使數字IP來確定伊。\n總款其IP地址會乞雅価用戶共享。\n如果蜀隻未登錄其用戶見覺無關係其評論指向汝,起動[[Special:CreateAccount|開賬戶]]或者[[Special:UserLogin|登錄]]來避免以後共其它未登錄其用戶混蜀堆。",
-       "noarticletext": "現在敆茲蜀頁𡅏無文字。汝會使敆其它其頁面𡅏[[Special:Search/{{PAGENAME}}|討蜀討茲蜀萆標題]],<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 討相關其記錄],或者[{{fullurl:{{FULLPAGENAME}}|action=edit}}編輯茲蜀頁]</span>。",
+       "noarticletext": "現在敆茲蜀頁𡅏無文字。汝會使敆其它其頁面𡅏[[Special:Search/{{PAGENAME}}|討蜀討茲蜀萆標題]],<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 討相關其記錄],或者[{{fullurl:{{FULLPAGENAME}}|action=edit}}創建茲蜀頁]</span>。",
        "clearyourcache": "'''注意:'''保存以後,汝可能固著刷新汝其瀏覽器緩存來看遘變化。\n* '''火狐/Safari:'''擪下''Shift''篤蜀篤''重新載入'',或者擪蜀擪''Ctrl+F5''或者''Ctrl+R'' (''⌘-R''敆Mac懸頂)\n* '''Google Chrome:'''擪''Ctrl+Shift+R''(敆Mac𡅏使''⌘-Shift-R'')\n* '''Internet Explorer:'''擪''Ctrl''其時候篤蜀篤''刷新'',或者擪''Ctrl+F5''\n* '''Opera:'''敆''工具→首選項''𡅏清除緩存",
        "note": "<strong>注意:</strong>",
        "previewnote": "'''記定茲若是蜀萆預覽。'''\n汝其改變固𡅏未保存!",
        "continue-editing": "繼續修改",
-       "editing": "修改 $1",
+       "editing": "修改$1",
        "creating": "創建$1",
        "editingsection": "修改$1(段)",
        "editingcomment": "修改$1(新其蜀部分)",
        "yourtext": "汝其文字",
        "editingold": "'''警告:汝現在𡅏修改已經過時其版本。'''\n如果汝保存伊,趁茲以後其任何改變都變無了。",
        "yourdiff": "差別",
-       "readonlywarning": "'''警告:數據庫已經乞鎖定來保養去了,故此汝現刻時𣍐使保存汝其編輯。'''\n汝可能希望複製再粘貼汝其文字遘蜀萆文本文件𡅏,再共伊保存起咯。\n\n鎖定伊其管理員給出茲蜀萆解釋:$1",
+       "readonlywarning": "<strong>警告:數據庫已經乞鎖定來保養去了,故此汝現刻時𣍐使保存汝其編輯。</strong>\n汝可能希望複製再粘貼汝其文字遘蜀萆文本文件𡅏,再共伊保存起咯。\n\n鎖定伊其系統管理員給出茲蜀萆解釋:$1",
        "protectedpagewarning": "''警告:茲蜀頁已經乞保護起去了,故此囇有管理員權力其用戶乍會使修改伊。'''\n最新其日誌已經敆下底提供來做參考:",
        "semiprotectedpagewarning": "'''注意:''' 茲蜀頁已經乞保護起去了,故此囇有註冊其用戶乍會使修改伊。\n最新其日誌已經敆下底提供來做參考:",
        "templatesused": "{{PLURAL:$1}}茲頁裏勢使其模板:",
        "page_first": "頭",
        "page_last": "尾",
        "histlegend": "差別揀選:選擇卜比並其版本,再擪「回車」('''Enter''')或者擪底底其'''比並揀選版本'''。<br />\n說明:(伶)=共第一新其版本比並,(前)=共前蜀版本比並,~=過幼修改。",
-       "history-fieldset-title": "瀏覽歷史",
-       "history-show-deleted": "囇刪掉",
+       "history-fieldset-title": "尋討各萆版本",
+       "history-show-deleted": "囇刪掉版本",
        "histfirst": "最舊",
        "histlast": "最遲",
        "historysize": "({{PLURAL:$1|$1字節}})",
        "searchprofile-articles-tooltip": "Găk $1 lā̤ sìng-tō̤",
        "searchprofile-images-tooltip": "Sìng-tō̤ ùng-giông",
        "search-result-size": "$1 ({{PLURAL:$2|$2 bĭk dăng-sṳ̀}})",
-       "search-redirect": "(dêng-hióng $1)",
+       "search-redirect": "(趁$1重定向過來)",
        "search-suggest": "汝其意思是伓是:$1",
        "searchrelated": "相關其",
        "searchall": "全部",
        "prefs-rc": "這般其改變",
        "prefs-watchlist": "監視單",
        "prefs-watchlist-days": "監視單單臺中顯示其天數",
-       "prefs-watchlist-edits": "敆擴展監視其單單臺中顯示其更改其最大數目:",
+       "prefs-watchlist-edits": "敆監視其單單臺中顯示其更改其最大數目:",
        "prefs-misc": "其它",
        "saveprefs": "保存",
        "prefs-editing": "編輯",
        "email": "電批",
        "prefs-help-email": "電子郵件地址是愛寫就寫其,但是如果汝𣍐記密碼咯,密碼重置其時候需要茲。",
        "prefs-help-email-others": "汝也會使選擇讓其他其用戶通過汝其用戶頁面或者討論頁面懸頂其鏈接,使電子郵件來聯繫汝。其他其用戶聯繫汝其辰候,汝其電子郵件地址𣍐顯示出來。",
-       "editusergroup": "修改用戶組",
+       "editusergroup": "加載用戶組",
        "group": "組:",
        "group-bot": "機器人",
        "group-sysop": "管理員",
        "group-bot-member": "機器人",
        "group-sysop-member": "管理員",
        "group-bureaucrat-member": "官僚組",
-       "group-suppress-member": "巡查員",
+       "group-suppress-member": "{{GENDER:$1|監督員}}",
        "grouppage-autoconfirmed": "{{ns:project}}:自動確認用戶",
        "grouppage-bot": "{{ns:project}}:機器人",
        "grouppage-sysop": "{{ns:project}}:管理員",
        "grouppage-bureaucrat": "{{ns:project}}:官僚組",
-       "grouppage-suppress": "{{ns:project}}:巡查員",
+       "grouppage-suppress": "{{ns:project}}:監督員",
        "newuserlogpage": "Kŭi dióng-hô nĭk-cé",
        "action-edit": "修改茲蜀頁",
        "recentchanges": "Cī-bŏng gì gāi-biéng",
        "nolinkstoimage": "無鏈接遘茲蜀萆文件其頁面。",
        "uploadnewversion-linktext": "上傳蜀萆新版本其茲萆文件。",
        "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "upload-disallowed-here": "汝無年呆覆蓋茲萆文件。",
        "download": "下載",
        "unwatchedpages": "無監視其頁面",
        "listredirects": "重定向其單單",
        "booksources-search-legend": "尋討書源",
        "booksources-text": "下底是鏈接遘其它賣新書共舊書其站點其單單,固加可能有更多關於汝敆𡅏看其茲本書其信息:",
        "specialloguserlabel": "表演者:",
-       "speciallogtitlelabel": "目標(稱呼或者用戶):",
+       "speciallogtitlelabel": "目標(頭銜或者{{ns:user}}:用戶其用戶名):",
        "log": "日誌",
        "alllogstext": "所有會使趁{{SITENAME}}獲得其日誌其都合併顯示。\n汝會使使揀選日誌類型、用戶名(大小寫敏感),或者受影響其頁面(大小寫敏感)其方法來縮小視角。",
        "logempty": "日誌裏勢討要𣍐着項目",
        "deletepage": "刪頁",
        "confirm": "確認",
        "excontent": "乇是:「$1」",
-       "excontentauthor": "ä¹\87æ\98¯ï¼\9aã\80\8c$1ã\80\8dï¼\88並ä¸\94ä½\9cè\80\85å\9b\87æ\9c\89ã\80\8c[[Special:Contributions/$2|$2]]ã\80\8d)",
+       "excontentauthor": "ä¹\87æ\98¯ï¼\9aã\80\8c$1ã\80\8dï¼\8c並ä¸\94ä½\9cè\80\85å\9b\87æ\9c\89è\9c\80è\90\86ä½\9cè\80\85ã\80\8c[[Special:Contributions/$2|$2]]ã\80\8dï¼\88[[User talk:$2|è¨\8eè«\96]])",
        "exbeforeblank": "空白以前其乇是:「$1」",
        "historywarning": "<strong>警告:</strong>汝卜想刪掉其頁面有$1隻{{PLURAL:$1|版本|版本}}其蜀段歷史:",
        "confirmdeletetext": "汝準備將囫圇隻頁面或者圖片(包括伊其歷史)全部刪唻。\n請汝確定:汝當真卜想總款做,汝瞭解總款做其後果,並且汝總款做是符合[[{{MediaWiki:Policy-url}}]]其。",
        "sp-contributions-newbies": "囇顯示新開賬戶其貢獻",
        "sp-contributions-newbies-sub": "才來其",
        "sp-contributions-blocklog": "封鎖日誌",
-       "sp-contributions-deleted": "乞刪唻其用戶貢獻",
+       "sp-contributions-deleted": "乞刪唻其{{GENDER:$1|用戶}}貢獻",
        "sp-contributions-uploads": "上傳",
        "sp-contributions-logs": "日誌",
        "sp-contributions-talk": "討論",
        "lockdbsuccesssub": "數據庫鎖定好了",
        "databasenotlocked": "茲數據庫無鎖。",
        "move-page-legend": "移動頁面",
-       "movepagetext": "使下底其表單重新乞茲蜀頁起蜀萆名字,移動伊共伊所有其歷史遘伊其新名字。\n舊其標題會變成新其標題其重定向頁。\n汝會使自動更新重定向許蜀點遘原底其標題。\n如果伊結果伓是總款其話,汝著檢查蜀下[[Special:DoubleRedirects|雙重重定向]]或者[[Special:BrokenRedirects|獃其重定向]]。\n汝有責任讓頁面鏈接遘正確其地方。\n\n注意儷是許塊已經有蜀隻頁面,噲就'''無能耐'''移動過了,除開噲儷是蜀萆重定向並且無舊底其修改歷史。\n嚽其意思就是講儷是汝名字起綻了,汝會使將茲蜀萆頁面重新起伊原底其名字,但是𣍐使覆蓋已經有其頁面。\n\n'''警告!'''\n嚽可能會對一般頁面造成盡大其並且無能耐想遘其改變;\n起動汝著敆做之前會意總款做其後果。",
+       "movepagetext": "使下底其表單重新乞茲蜀頁起蜀萆名字,移動伊共伊所有其歷史遘伊其新名字。\n舊其標題會變成新其標題其重定向頁。\n汝會使自動更新重定向許蜀點遘原底其標題。\n如果伊結果伓是總款其話,汝著檢查蜀下[[Special:DoubleRedirects|雙重重定向]]或者[[Special:BrokenRedirects|獃其重定向]]。\n汝有責任讓頁面鏈接遘正確其地方。\n\n注意儷是許塊已經有蜀隻頁面,噲就'''無能耐'''移動過了,除開噲儷是蜀萆重定向並且無舊底其修改歷史。\n嚽其意思就是講儷是汝名字起綻了,汝會使將茲蜀萆頁面重新起伊原底其名字,但是𣍐使覆蓋已經有其頁面。\n\n<strong>注意:</strong>\n嚽可能會對一般頁面造成盡大其並且無能耐想遘其改變;\n起動汝著敆做之前會意總款做其後果。",
        "movepagetalktext": "相關其討論頁會自動共伊移遘'''無挃''':\n* 汝其新其用戶名已經有蜀頁有內容其討論頁,或者\n* 汝取消下底其框框。\n\n若總款,汝會使自家移動或者是合併頁面。",
        "movenologintext": "著[[Special:UserLogin|躒入]]才有能耐移動頁面。",
-       "newtitle": "新題目:",
+       "newtitle": "新題目:",
        "move-watch": "監視茲頁",
        "movepagebtn": "移動頁面",
        "pagemovedsub": "移動成功",
        "allmessagestext": "茲是敆MediaWiki命名空間裏勢系統消息其蜀萆單單。\n如果汝卜想貢獻通用其MediaWiki基本地化服務,起動汝訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki本地化]共[https://translatewiki.net translatewiki.net]。",
        "allmessagesnotsupportedDB": "茲蜀頁𣍐使其,因為'''$wgUseDatabaseMessages'''已經乞禁止去了。",
        "thumbnail-more": "Huóng-duâi",
-       "tooltip-pt-userpage": "汝其用戶頁",
-       "tooltip-pt-mytalk": "汝其討論頁",
+       "tooltip-pt-userpage": "{{GENDER:|汝其用戶}}頁",
+       "tooltip-pt-mytalk": "{{GENDER:|汝其}}討論頁",
        "tooltip-pt-anontalk": "Cī ciáh IP ôi-cī iū-guăng siŭ-gāi gì tō̤-lâung",
-       "tooltip-pt-preferences": "汝其設定",
+       "tooltip-pt-preferences": "{{GENDER:|汝其}}設定",
        "tooltip-pt-watchlist": "汝監視其頁面有改過其單單",
-       "tooltip-pt-mycontris": "汝其貢獻其單單",
+       "tooltip-pt-mycontris": "{{GENDER:|汝其}}貢獻其單單",
        "tooltip-pt-login": "Gióng-ngiê nṳ̄ sĕng láuk-diē; bók-guó nàng-gă mò̤ ăng nṳ̄ cūng-kuāng có̤.",
        "tooltip-pt-logout": "Láuk-chók",
        "tooltip-pt-createaccount": "Gióng-ngiê nṳ̄ sĕng kŭi dióng-hô gái láuk-diē; bók-guó nàng-gă mò̤ ăng nṳ̄ cūng-kuāng có̤.",
        "tooltip-n-help": "Sìng-tō̤ bŏng-cô gì sū-câi",
        "tooltip-t-whatlinkshere": "Ciòng-buô lièng-gáu cŭ-uái gì wiki hiĕk-miêng dăng-dăng",
        "tooltip-t-recentchangeslinked": "鏈遘茲頁其頁面其最近修改\nCī hiĕk lièng gáu bĕk hiĕk gì cī-bŏng gì gāi-biéng",
-       "tooltip-t-contributions": "茲蜀用戶其貢獻單單",
-       "tooltip-t-emailuser": "向茲蜀隻用戶寄電批",
+       "tooltip-t-contributions": "{{GENDER:$1|茲蜀隻用戶}}其貢獻單單",
+       "tooltip-t-emailuser": "向{{GENDER:$1|茲蜀隻用戶}}寄電批",
        "tooltip-t-upload": "Siông-diòng ùng-giông",
        "tooltip-t-specialpages": "Cuòng-buô dĕk-sṳ̀-hiĕk dăng-dăng",
        "tooltip-t-print": "Cī hiĕk gì â̤ páh-éng bēng-buōng",
        "tooltip-t-permalink": "茲頁茲版本其永久鏈接\nCī hiĕk cī bēng-buōng gì īng-giū lièng-giék",
        "tooltip-ca-nstab-main": "Káng iĕk gì nô̤i-ṳ̀ng",
        "tooltip-ca-nstab-user": "覷蜀覷用戶頁",
-       "tooltip-ca-nstab-special": "茲是蜀萆特殊頁,汝𣍐使修改茲蜀頁。",
+       "tooltip-ca-nstab-special": "茲是蜀萆特殊頁,𣍐使修改。",
        "tooltip-ca-nstab-project": "看工程頁",
        "tooltip-ca-nstab-image": "Ché̤ṳ ùng-giông hiĕk",
        "tooltip-ca-nstab-template": "覷蜀覷模板",
        "previousdiff": "← 舊其修改",
        "nextdiff": "新其修改 →",
        "file-nohires": "無更高決斷",
+       "show-big-image": "原底其文件",
+       "show-big-image-preview": "茲萆預覽其尺寸:$1.",
+       "show-big-image-other": "其他{{PLURAL:$2|分辨率}}:$1。",
        "show-big-image-size": "$1 × $2 chiông-só",
        "ilsubmit": "尋討",
        "bydate": "按日期",
        "metadata": "Nguòng-só-gé̤ṳ",
+       "metadata-help": "茲萆文件臺中有多餘其信息,可能是數碼相機或者掃描儀敆創建或者數字化其過程臺中添加其。如果文件趁初始狀態開始就已經受遘修改,噲有其詳細說明可能無法反映修改以後其文件。",
+       "metadata-expand": "顯示詳細資料",
        "exif-componentsconfiguration-0": "無存在",
        "exif-meteringmode-0": "𣍐八",
        "exif-lightsource-0": "𣍐八",
        "confirmemail_body": "有人(可能是汝)敆IP地址$1𡅏已經使茲蜀萆電子郵件地址來註冊蜀萆賬戶「$2」去了。\n\n卜想確認茲蜀萆賬戶當真是汝其,固加敆{{SITENAME}}激活電子郵件特點,許敆汝其瀏覽器𡅏拍開茲蜀萆鏈接:\n\n$3\n\n如果汝*無*註冊茲賬戶,單擊茲蜀萆鏈接來取消電子郵件確認:\n\n$5\n\n茲蜀萆確認代碼會敆$4時候過期。",
        "deletedwhileediting": "<strong>警告:</strong>茲蜀頁敆汝編輯以前已經乞刪唻了!",
        "recreate": "重新開",
+       "confirm-purge-title": "刷新茲頁",
        "confirm_purge_button": "好",
+       "confirm-purge-top": "卜想清除茲頁其缓存無?",
+       "confirm-purge-bottom": "刷新頁面會清除缓存,固加會強制顯示最近其版本。",
        "imgmultipageprev": "← 前蜀頁",
        "imgmultipagenext": "下蜀頁 →",
        "imgmultigo": "去!",
        "watchlisttools-edit": "看共修改監視單",
        "watchlisttools-raw": "修改原始監視單",
        "specialpages": "Dĕk-sṳ̀-hiĕk",
-       "searchsuggest-search": "Tō̤"
+       "tag-filter": "[[Special:Tags|標籤]]過濾器:",
+       "tag-list-wrapper": "([[Special:Tags|$1萆標籤]]:$2)",
+       "searchsuggest-search": "討 {{SITENAME}}"
 }
index f53ded7..1b6d15c 100644 (file)
        "createacct-reason-ph": "Стен кхуллуш ду ахьа керла декъашхочун дӀаяздар",
        "createacct-submit": "Кхолла декъашхочун дӀаяздар",
        "createacct-another-submit": "Кхолла декъашхочун кхин дӀаяздар",
+       "createacct-continue-submit": "Декъашхочун дӀаяздар кхоллар чекхдаккха",
+       "createacct-another-continue-submit": "Декъашхочун дӀаяздар кхоллар чекхдаккха",
        "createacct-benefit-heading": "{{SITENAME}} кхолийна хьо санначу наха.",
        "createacct-benefit-body1": "{{PLURAL:$1|нисдар|нисдарш}}",
        "createacct-benefit-body2": "{{PLURAL:$1|яззам|яззамаш}}",
        "changepassword-success": "Хьан пароль хийцина!",
        "changepassword-throttled": "Хьо дукха гӀиртира.\nДехар до, собар де $1 юха гӀортале.",
        "botpasswords": "Ботийн парольш",
+       "botpasswords-existing": "Ботан йолуш йолу паролаш",
+       "botpasswords-createnew": "Ботан керла пароль кхолла",
        "botpasswords-editexisting": "Тае ботан йолуш йолу пароль",
        "botpasswords-label-appid": "Ботан цӀе:",
        "botpasswords-label-create": "Кхолла",
        "botpasswords-label-update": "Карлаяккха",
        "botpasswords-label-cancel": "Юхаяккха",
        "botpasswords-label-delete": "ДӀаяккхар",
+       "botpasswords-label-resetpassword": "Пароль кхоссар",
+       "botpasswords-label-grants": "Лелош йолу шоралаш:",
        "botpasswords-label-grants-column": "Магийна",
        "botpasswords-bad-appid": "«$1» ботан цӀе магийна яц.",
+       "botpasswords-created-title": "Ботан пароль кхоьллина",
        "botpasswords-created-body": "Ботан «$1» пароль кхиамца кхоьллина.",
+       "botpasswords-updated-title": "Ботан пароль карлаяьккхина",
+       "botpasswords-updated-body": "«$2» декъашхочун «$1» ботан пароль карлаяьккхина.",
+       "botpasswords-deleted-title": "Ботан пароль дӀаяьккхина",
+       "botpasswords-deleted-body": "«$2» декъашхочун «$1» ботан пароль дӀаяьккхина.",
        "resetpass_forbidden": "Пароль хийца йиш яц",
        "resetpass-no-info": "ХӀара агӀо лело системин чугӀо.",
        "resetpass-submit-loggedin": "Хийца пароль",
        "explainconflict": "Ахьа хӀара агӀо тоечу хенахь, цхьам хийцамаш бина.\nЛакхарчу таяран корехь хьона гуш ду хӏинца агӏона чохь долу йоза.\nЛахарчу корехь ахь бина хийцам бу.\nХьой бина хийцам лахарчу корера лакхарчу коре баккха.\nКнопкан «$1» тӏетаӏича лакхара корера йоза дӏаязлурду.",
        "yourtext": "Хьан йоза",
        "storedversion": "Ӏалашйина верси",
-       "editingold": "'''ДӀахьедар. Ахь таеш ю хӀокху агӀонан шира елла верси.'''\nАгӀо Ӏалаш йинчул тӀаьхьа, хьалхо бина хийцамаш дӀабевра бу.",
+       "editingold": "'''ДӀахьедар. Ахь таеш ю хӀокху агӀонан ширъелла верси.'''\nАгӀо Ӏалаш йинчул тӀаьхьа, хьалхо бина хийцамаш дӀабера бу.",
        "yourdiff": "Башхаллаш",
        "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцуш санна оцу лицензи хьолехь.\nНагахь хьо лууш вацахь хьайн йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИштта чӀагӀо йой ахьа, айхьа далош долучуьнна хьо куьг да ву аьлла, я хьаэцна цхьан\nхьостера, хийцам ба а дӀаса даржада а чулацам болуш.<br />\n'''МА-КХИССА БАКЪО ЙОЦУ ГӀИРСАШ КХУ ЧУ, КУЬЙГАЛХОЧУЬННА БАКЪО ЛАРЪЕШ ЙОЛУ!'''",
        "readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
        "recentchanges-legend-heading": "<strong>Легенда:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
        "recentchanges-submit": "Гайта",
-       "rcfilters-other-review-tools": "<strong>Талларан кхин гӀирсаш</strong>",
+       "rcfilters-other-review-tools": "Талларан кхин гӀирсаш",
        "rcfilters-group-results-by-page": "Карийнарш, агӀонгахь тобанаш ян",
        "rcfilters-grouping-title": "Тобанашца нисъяр",
        "rcfilters-activefilters": "Жигара литтарш",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Хаьржинарг юкъарадаккха",
        "rcfilters-exclude-button-on": "Хаьржинарг юкъарадаккхар",
-       "rcfilters-view-advanced-filters-label": "Шуьйра литтарш",
        "rcfilters-view-tags": "Билгалонаш",
        "rcfilters-view-namespaces-tooltip": "Меттигийн цӀерашца литтаран карийнарш",
        "rcfilters-view-tags-tooltip": "Нисдарийн билгало йолу литтаран карийна хийцамаш",
        "tooltip-ca-nstab-user": "ХӀора декъашхочун долахь йолу агӀо ю",
        "tooltip-ca-nstab-media": "Медиа-файл",
        "tooltip-ca-nstab-special": "ХӀара белхан агӀо ю, хӀара таялуш яц",
-       "tooltip-ca-nstab-project": "Ð\9aÑ\85олламан Ð´Ð°ÐºÑ\8aа",
+       "tooltip-ca-nstab-project": "Ð\9fÑ\80оекÑ\82ан Ð°Ð³Ó\80о",
        "tooltip-ca-nstab-image": "Файлан агӀо",
        "tooltip-ca-nstab-mediawiki": "Хааман агlо MediaWiki",
        "tooltip-ca-nstab-template": "Кепан агӀо",
        "date-range-to": "Терхье:",
        "sessionprovider-generic": "$1 сесси",
        "randomrootpage": "Цахууш нисъелла ораман агӀо",
+       "log-action-filter-block": "Блоктохаран тайпа:",
+       "log-action-filter-all": "Ерриге",
        "log-action-filter-block-block": "Блоктохар",
        "log-action-filter-block-reblock": "Блоктохар хийцар",
        "log-action-filter-block-unblock": "БлокдӀаяхарш",
index 5991aab..ff67d24 100644 (file)
        "recentchanges-legend-plusminus": "(''±۱٢٣'')",
        "recentchanges-submit": "نیشانی بدە",
        "rcfilters-legend-heading": "<strong>پێرستی ناوبڕەکان:</strong>",
+       "rcfilters-other-review-tools": "ئامرازەکانی تری بەسەرداچوونەوە",
        "rcfilters-activefilters": "پاڵێوەرە چالاکەکان",
+       "rcfilters-advancedfilters": "پاڵوێنە پێشکەوتووەکان",
        "rcfilters-limit-shownum": "پیشاندانی دوایین $1 دەستکاری",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|ڕۆژ}}",
+       "rcfilters-quickfilters": "پاڵوێنە پاشەکەوتکراوەکان",
        "rcfilters-savedqueries-defaultlabel": "پاڵوێنە پاشەکەوتکراوەکان",
        "rcfilters-clear-all-filters": "ھەموو فیلتەرەکان بسڕەوە",
        "rcfilters-search-placeholder": "پاڵاوتنی گۆڕانکارییە نوێیەکان (بگەڕێ یان دەست بە نووسین بکە)",
        "rcfilters-filter-newpages-label": "دروستکردنی پەڕەکان",
        "rcfilters-filter-categorization-label": "گۆڕانکاری پۆلەکان",
        "rcfilters-filter-logactions-label": "کردارە لۆگییەکان",
+       "rcfilters-view-advanced-filters-label": "پاڵوێنە پێشکەوتووەکان",
        "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە <strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
        "rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
        "rcshowhideminor": "دەستکارییە بچووکەکان $1",
        "logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
        "logentry-managetags-create": "$1 تاگی \"$4\"ی دروست کرد",
        "rightsnone": "(ھیچ)",
+       "rightslogentry-temporary-group": "$1 (کاتیی، تاوەکوو $2)",
        "feedback-back": "گەڕانەوە",
        "feedback-cancel": "ھەڵوەشاندنەوە",
        "feedback-close": "کرا",
index 8753dd9..8b9746e 100644 (file)
        "anonpreviewwarning": "<em>Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.</em>",
        "missingsummary": "<strong>Připomenutí:</strong> Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na „$1“, bude vaše editace zapsána bez shrnutí.",
        "selfredirect": "<strong>Upozornění:</strong> Pokoušíte se tuto stránku přesměrovat na sebe samu.\nMožná jste zadali chybný cíl přesměrování, nebo editujete špatnou stránku.\nPokud ještě jednou kliknete na „$1“, bude i přesto přesměrování vytvořeno.",
-       "missingcommenttext": "Zadejte komentář",
+       "missingcommenttext": "Prosím, zadejte komentář.",
        "missingcommentheader": "<strong>Připomenutí:</strong> Nezadali jste předmět pro tento komentář.\nPokud ještě jednou kliknete na „$1“, bude vaše editace uložena bez něj.",
        "summary-preview": "Náhled shrnutí:",
        "subject-preview": "Náhled předmětu:",
        "timezoneregion-europe": "Evropa",
        "timezoneregion-indian": "Indický oceán",
        "timezoneregion-pacific": "Tichý oceán",
-       "allowemail": "Povolit e-mail od ostatních uživatelů",
+       "allowemail": "Dovolit ostatním uživatelům posílat mi e-maily",
        "email-blacklist-label": "Znemožnit těmto uživatelům posílat mi e-maily:",
        "prefs-searchoptions": "Vyhledávání",
        "prefs-namespaces": "Jmenné prostory",
        "recentchanges-legend": "Možnosti posledních změn",
        "recentchanges-summary": "Na této stránce sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}}.",
        "recentchanges-noresult": "V daném období neodpovídaly zadaným kritériím žádné změny.",
+       "recentchanges-timeout": "Časový limit vyhledávání vypršel. Můžete ho zkusit znovu s jinými parametry.",
+       "recentchanges-network": "Kvůli technické chybě se nepodařilo načíst žádné výsledky. Zkuste obnovit stránku.",
        "recentchanges-feed-description": "Na tomto kanále sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}}.",
        "recentchanges-label-newpage": "Touto editací byla založena nová stránka",
        "recentchanges-label-minor": "Toto je malá editace",
        "recentchanges-submit": "Zobrazit",
        "rcfilters-tag-remove": "Odebrat '$1'",
        "rcfilters-legend-heading": "<strong>Seznam zkratek:</strong>",
-       "rcfilters-other-review-tools": "<strong>Další kontrolní nástroje</strong>",
+       "rcfilters-other-review-tools": "Další kontrolní nástroje",
        "rcfilters-group-results-by-page": "Seskupit výsledky podle stránky",
        "rcfilters-grouping-title": "Seskupování",
        "rcfilters-activefilters": "Aktivní filtry",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hodina|hodiny|hodin}}",
        "rcfilters-highlighted-filters-list": "Zvýrazněno: $1",
        "rcfilters-quickfilters": "Uložené filtry",
-       "rcfilters-quickfilters-placeholder-title": "Zatím neuloženy žádné odkazy",
+       "rcfilters-quickfilters-placeholder-title": "Zatím neuloženy žádné filtry",
        "rcfilters-quickfilters-placeholder-description": "Pokud chcete uložit svá nastavení filtrů a použít je později, klikněte na ikonku záložky v ploše aktivních filtrů níže.",
        "rcfilters-savedqueries-defaultlabel": "Uložené filtry",
        "rcfilters-savedqueries-rename": "Přejmenovat",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Vytvořit výchozí filtr",
        "rcfilters-savedqueries-cancel-label": "Zrušit",
        "rcfilters-savedqueries-add-new-title": "Uložit současné nastavení filtrů",
+       "rcfilters-savedqueries-already-saved": "Tyto filtry jsou již uloženy.",
        "rcfilters-restore-default-filters": "Obnovit výchozí filtry",
        "rcfilters-clear-all-filters": "Zrušit všechny filtry",
        "rcfilters-show-new-changes": "Zobrazit nejnovější změny",
-       "rcfilters-search-placeholder": "Filtrujte poslední změny (prohlížejte nebo začněte psát)",
+       "rcfilters-search-placeholder": "Filtrovat poslední změny (použijte menu nebo vyhledejte název filtru)",
        "rcfilters-invalid-filter": "Neplatný filtr",
        "rcfilters-empty-filter": "Žádné aktivní filtry. Zobrazeny jsou všechny příspěvky.",
        "rcfilters-filterlist-title": "Filtry",
        "rcfilters-filter-user-experience-level-unregistered-label": "Neregistrovaní",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editoři, kteří nejsou přihlášení.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nováčci",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registrovaní uživatelé s méně než 10 editacemi a 4 dny činnosti.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrovaní uživatelé, kteří mají méně než 10 editací nebo 4 dny činnosti.",
        "rcfilters-filter-user-experience-level-learner-label": "Začátečníci",
        "rcfilters-filter-user-experience-level-learner-description": "Registrovaní uživatelé, jejichž zkušenosti spadají mezi „Nováčky“ a „Zkušené uživatele“.",
        "rcfilters-filter-user-experience-level-experienced-label": "Zkušení uživatelé",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
        "rcfilters-exclude-button-off": "Vynechat vybrané",
        "rcfilters-exclude-button-on": "Vybrané vynechány",
-       "rcfilters-view-advanced-filters-label": "Pokročilé filtry",
        "rcfilters-view-tags": "Označené editace",
        "rcfilters-view-namespaces-tooltip": "Filtrovat výsledky podle jmenného prostoru",
        "rcfilters-view-tags-tooltip": "Filtrovat výsledky pomocí značek editací",
        "uploaded-script-svg": "V načteném SVG souboru byl nalezen skriptovatelný element „$1“.",
        "uploaded-hostile-svg": "V načteném SVG souboru bylo v elementu se styly nalezeno nebezpečné CSS.",
        "uploaded-event-handler-on-svg": "Nastavování atributů pro obsluhu událostí <code>$1=\"$2\"</code> není v SVG souborech dovoleno.",
-       "uploaded-href-attribute-svg": "Atributy href v souborech SVG smějí odkazovat jen na cíle využívající http:// nebo https://, nalezeno <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Elementy <a> smějí odkazovat (atributem href) jen na cíle využívající data: (vložený soubor), http://, https:// nebo fragment (#, obsah ve stejném dokumentu). U jiných elementů, např. <image>, jsou dovoleny pouze cíle data: a fragmenty. Při exportu do SVG zkuste obrázky vložit. Nalezeno <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "V načteném SVG souboru byl nalezen href odkazující na nebezpečný cíl s datovým URI <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "V načteném SVG souboru byla nalezena značka „animate“, která by mohla měnit href, s atributem „from“ <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Nastavování atributů pro obsluhu událostí je zablokováno, v načteném SVG souboru bylo nalezeno <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadstash-refresh": "Aktualizovat seznam souborů",
        "uploadstash-thumbnail": "zobrazit náhled",
        "uploadstash-exception": "Načtený soubor se nepodařilo uložit do skrýše ($1): „$2“.",
+       "uploadstash-bad-path": "Cesta neexistuje.",
+       "uploadstash-bad-path-invalid": "Cesta není platná.",
+       "uploadstash-bad-path-unknown-type": "Neznámý typ „$1“.",
+       "uploadstash-file-not-found-no-thumb": "Nepodařilo se získat náhled.",
+       "uploadstash-file-not-found-no-remote-thumb": "Načtení náhledu se nepodařilo: $1\nURL = $2",
+       "uploadstash-file-too-large": "Nelze poskytnout soubor větší než $1 bajtů.",
+       "uploadstash-not-logged-in": "Není přihlášen žádný uživatel, soubory musí patřit uživatelům.",
+       "uploadstash-wrong-owner": "Tento soubor ($1) nepatří aktuálnímu uživateli.",
+       "uploadstash-no-such-key": "Uvedený klíč ($1) neexistuje, nelze odebrat.",
+       "uploadstash-zero-length": "Soubor má nulovou délku.",
        "invalid-chunk-offset": "Neplatný posun bloku",
        "img-auth-accessdenied": "Přístup odepřen",
        "img-auth-nopathinfo": "Chybí PATH_INFO.\nVáš server není nastaven tak, aby tuto informaci poskytoval.\nMožná funguje pomocí CGI a img_auth na něm nemůže fungovat.\nVizte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 405e14f..e3240db 100644 (file)
@@ -41,7 +41,7 @@
        "tog-shownumberswatching": "Pòkażë lëczba ùzérającëch brëkòwników",
        "tog-oldsig": "Wëzdrzatk twòjegò pòdpisënkù:",
        "tog-fancysig": "Wzérôj na pòdpisënk jakno na wikikòd (bez aùtomatnych lënków)",
-       "tog-uselivepreview": "Felënk dinamicznegò pòdzérkù",
+       "tog-uselivepreview": "Wëskrzëni pòdzérk bez zladowaniô znowa starnë",
        "tog-forceeditsummary": "Pëtôj przed wéńdzenim do pùstégò pòdrechòwania edicëji",
        "tog-watchlisthideown": "Zatacë mòje edicje z lëstë ùzérónëch artiklów",
        "tog-watchlisthidebots": "Zatacë edicëje botów z lëstë ùzérónëch artiklów",
@@ -61,7 +61,6 @@
        "underline-never": "Nigdë",
        "underline-default": "Tak jak w domëslnym przezérnikù abò skórczi.",
        "editfont-style": "Sztél fònta w edicjowim pòlu:",
-       "editfont-default": "Domëslny przezérnik",
        "editfont-monospace": "fònt ò stałi szérzé",
        "editfont-sansserif": "bezszëfrowi fònt",
        "editfont-serif": "szefrowi fònt",
        "prefs-rc": "Slédné edicje",
        "prefs-watchlist": "Lësta ùzérónëch artiklów",
        "prefs-watchlist-days": "Wielëna dniów dlô wëskrzëniwaniô na lësce ùzérónëch artiklów:",
-       "prefs-watchlist-edits": "Maksymalnô lëczba edicëjów do pòkazaniô w rozszérzoné lësce ùzérónëch artiklów:",
+       "prefs-watchlist-edits": "Maksymalnô wielëna edicëjów do wëskrzënieniô w lësce ùzérónych artiklów:",
        "prefs-misc": "Jine",
        "saveprefs": "Zapiszë",
        "prefs-editing": "Edicëjô",
index 85449b7..386bc5b 100644 (file)
@@ -70,7 +70,6 @@
        "underline-never": "Byth",
        "underline-default": "Rhagosodyn y porwr neu'r wedd",
        "editfont-style": "Arddull y ffont yn y blwch golygu:",
-       "editfont-default": "Rhagosodyn y porwr",
        "editfont-monospace": "Ffont unlled",
        "editfont-sansserif": "Sans-seriff",
        "editfont-serif": "Seriff",
        "explainconflict": "Mae rhywun arall wedi newid y dudalen hon ers i chi ddechrau ei golygu hi.\nMae'r blwch testun uchaf yn cynnwys testun y dudalen fel y mae hi rwan.\nMae eich newidiadau chi yn ymddangos yn y blwch testun isaf.\nBydd yn rhaid i chi gyfuno eich newidiadau chi a'r testun sydd yn bodoli eisoes.\n'''Dim ond''' y testun yn y blwch testun '''uchaf''' fydd yn cael ei roi ar gadw pan wasgwch y botwm \"$1\".",
        "yourtext": "Eich testun",
        "storedversion": "Y golygiad diweddaraf yn y storfa",
-       "nonunicodebrowser": "'''RHYBUDD: Nid yw eich porwr yn cydymffurfio ag Unicode. Serch hyn, mae modd i chi olygu tudalennau: bydd nodau sydd ddim yn rhan o ASCII yn ymddangos yn y blwch golygu fel codau hecsadegol.'''",
        "editingold": "'''RHYBUDD: Rydych chi'n golygu hen ddiwygiad o'r dudalen hon. Os caiff ei chadw, bydd unrhyw newidiadau diweddarach yn cael eu colli.'''",
        "yourdiff": "Gwahaniaethau",
        "copyrightwarning": "Mae pob cyfraniad i {{SITENAME}} yn cael ei ryddhau o dan termau'r Drwydded Ddogfen Rhydd ($2) (gwelwch $1 am fanylion). Os nad ydych chi'n fodlon i'ch gwaith gael ei olygu heb drugaredd, neu i gopïau ymddangos ar draws y we, peidiwch a'i gyfrannu yma.<br />\nRydych chi'n cadarnhau mai chi yw awdur y cyfraniad, neu eich bod chi wedi'i gopïo o'r parth cyhoeddus (''public domain'') neu rywle rhydd tebyg. '''Nid''' yw'r mwyafrif o wefannau yn y parth cyhoeddus.\n\n'''PEIDIWCH Â CHYFRANNU GWAITH O DAN HAWLFRAINT HEB GANIATÂD!'''",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Dangos",
        "rcfilters-legend-heading": "<strong>Rhestr o fyrfoddau:</strong>",
-       "rcfilters-other-review-tools": "<strong>Teclynau adolygu eraill</strong>",
+       "rcfilters-other-review-tools": "Teclynau adolygu eraill",
        "rcfilters-group-results-by-page": "Canlyniadau'r grwp bob yn ddalen",
        "rcfilters-grouping-title": "Grwpio",
        "rcfilters-activefilters": "Hidlau sydd ar waith",
        "block": "Rhwystro defnyddiwr",
        "unblock": "Dad-rwystro defnyddiwr",
        "blockip": "Rhwystro'r {{GENDER:$1|defnyddiwr}}",
-       "blockip-legend": "Rhwystro'r defnyddiwr",
        "blockiptext": "Defnyddiwch y ffurflen hon i rwystro cyfeiriad IP neu ddefnyddiwr rhag ysgrifennu i'r gronfa ddata. \nDylech chi ddim ond gwneud hyn er mwyn rhwystro fandaliaeth, a chan ddilyn [[{{MediaWiki:Policy-url}}|polisi'r wici]]. \nRhowch reswm dros rwystro'r defnyddiwr (er enghraifft, dywedwch pa dudalen(au) a fandaleiddiwyd).",
        "ipaddressorusername": "Cyfeiriad IP neu enw defnyddiwr:",
        "ipbexpiry": "Am gyfnod:",
index e5d8299..057ac25 100644 (file)
        "tog-shownumberswatching": "Vis antal brugere, der overvåger",
        "tog-oldsig": "Din nuværende signatur:",
        "tog-fancysig": "Behandl signatur som wikitekst (uden automatisk henvisning)",
-       "tog-uselivepreview": "Benyt løbende forhåndsvisning",
+       "tog-uselivepreview": "Vis forhåndsvisninger uden at indlæse siden igen",
        "tog-forceeditsummary": "Advar mig, hvis jeg ikke udfylder beskrivelsesfeltet",
        "tog-watchlisthideown": "Skjul egne ændringer i overvågningslisten",
        "tog-watchlisthidebots": "Skjul ændringer fra botter i overvågningslisten",
        "tog-watchlisthideminor": "Skjul mindre ændringer i overvågningslisten",
        "tog-watchlisthideliu": "Skjul indloggede brugeres redigeringer i overvågningslisten",
        "tog-watchlistreloadautomatically": "Opdater overvågningslisten automatisk, når et filter ændres (kræver JavaScript)",
+       "tog-watchlistunwatchlinks": "Tilføj direkte henvisninger for at overvåge/fjerne overvågning til overvågningsposter (JavaScript krævet for at skifte funktionalitet)",
        "tog-watchlisthideanons": "Skjul anonyme brugeres redigeringer i overvågningslisten",
        "tog-watchlisthidepatrolled": "Skjul patruljerede ændringer i overvågningslisten",
        "tog-watchlisthidecategorization": "Skjul kategorisering af sider",
        "underline-never": "Aldrig",
        "underline-default": "Standard for browseren eller udseendet",
        "editfont-style": "Skriftstil ved redigering:",
-       "editfont-default": "Brug browserens indstilling",
        "editfont-monospace": "Fastbreddeskrift",
        "editfont-sansserif": "Skrift uden fødder",
        "editfont-serif": "Skrift med fødder",
        "botpasswords-updated-body": "Robottens adgangskode for robotnavn »$1« for brugeren »$2« blev opdateret.",
        "botpasswords-deleted-title": "Bot kodeord slettet",
        "botpasswords-deleted-body": "Robottens adgangskode for robotnavn »$1« for brugeren »$2« blev slettet.",
+       "botpasswords-newpassword": "Den nye adgangskode at logge ind med for <strong>$1</strong> er <strong>$2</strong>. <em>Gem denne oplysning for fremtidig reference.</em> <br> (For gamle robotter som kræver at logindnavnet er det samme som det eventuelle brugernavn, så kan du også bruge <strong>$3</strong> som brugernavn og <strong>$4</strong> som adgangskode).",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider er ikke tilgængelig.",
+       "botpasswords-restriction-failed": "Begrænsninger for robotadgangskode forhindrer dette logind.",
+       "botpasswords-invalid-name": "Det angivne brugernavn indeholder ikke adskillelsestegnet for robotadgangskoden (»$1«).",
+       "botpasswords-not-exist": "Brugeren »$1« har ikke en robotadgangskode navngivet »$2«.",
        "resetpass_forbidden": "Adgangskoder kan ikke ændres",
        "resetpass_forbidden-reason": "Adgangskoder kan ikke ændres: $1",
        "resetpass-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "anonpreviewwarning": "''Du er ikke logget på. Hvis du gemmer, registreres din IP-adresse i versionshistorikken.''",
        "missingsummary": "'''Bemærk:''' Du har ikke angivet en redigeringsbeskrivelse. Hvis du igen trykker på \"$1\", gemmes ændringerne uden en beskrivelse.",
        "selfredirect": "<strong>Advarsel:</strong> Du er ved at omdirigere denne side til sig selv.\nDu kan have angivet det forkerte mål for omdirigeringen, eller du kan være ved at redigere den forkerte side.\nHvis du klikker på \"$1\" igen, vil omdirigeringen blive oprettet uanset dette.",
-       "missingcommenttext": "Skriv venligst en kommentar nedenfor.",
+       "missingcommenttext": "Skriv venligst en kommentar.",
        "missingcommentheader": "<strong>Bemærk:</strong> Du har ikke angivet en overskrift/emne for denne kommentar. Hvis du trykker \"$1\" én gang til, gemmes dine ændringer uden overskrift/emne.",
        "summary-preview": "Forhåndsvisning af sammenfatning:",
        "subject-preview": "Forhåndsvisning af emne/overskrift:",
        "permissionserrorstext": "Du har ikke rettigheder til at gennemføre denne handling, {{PLURAL:$1|årsagen|årsagerne}} er:",
        "permissionserrorstext-withaction": "Du har ikke rettigheder til at $2 af følgende {{PLURAL:$1|grund|grunde}}:",
        "recreate-moveddeleted-warn": "'''Advarsel: Du er ved at genskabe en tidligere slettet side.'''\n\nOvervej om det er passende at genoprette siden. Sletnings- og flytteloggerne for siden er vist nedenfor.",
-       "moveddeleted-notice": "Denne side er blevet slettet.\nSletnings- og flytteloggerne for siden er vist nedenfor.",
+       "moveddeleted-notice": "Denne side er blevet slettet.\nSletnings-, beskyttelses- og flytteloggene for siden er vist nedenfor.",
+       "moveddeleted-notice-recent": "Beklager, denne side er for nylig blevet slettet (i løbet af de sidste 24 timer).\nSlette-, beskyttelses- og flytteloggene for siden er vist nedenfor.",
        "log-fulllog": "Vis fuldstændig log",
        "edit-hook-aborted": "Redigering afbrudt af en programfunktion. Ingen tilknyttet forklaring.",
        "edit-gone-missing": "Kunne ikke opdatere siden.\nDen ser du til at være slettet.",
        "mergehistory-fail-bad-timestamp": "Tidsangivelsen er ugyldig.",
        "mergehistory-fail-invalid-source": "Kildesiden er ugyldig.",
        "mergehistory-fail-invalid-dest": "Målsiden er ugyldigt.",
+       "mergehistory-fail-no-change": "Historiksammenføjning sammenføjede ikke nogle revisioner. Kontroller siden og tidsparametre igen.",
+       "mergehistory-fail-permission": "Utilstrækkelige tilladelser for at flette historik.",
+       "mergehistory-fail-self-merge": "Kilde- og destinationssider er ens.",
+       "mergehistory-fail-timestamps-overlap": "Kilderevisioner overlapper eller kommer efter destinationsrevisioner.",
        "mergehistory-fail-toobig": "Ude af stand til at flette historiken sammen, fordi flere end grænsen på $1 {{PLURAL:$1|version|versioner}} ville blive flyttet.",
        "mergehistory-no-source": "Kildesiden $1 findes ikke.",
        "mergehistory-no-destination": "Destinationssiden $1 findes ikke.",
        "search-category": "(kategorien $1)",
        "search-file-match": "(svarer til filens indhold)",
        "search-suggest": "Mente du: $1",
+       "search-rewritten": "Viser resultater for $1. Søg i stedet efter $2.",
        "search-interwiki-caption": "Resultater fra søsterprojekter",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mere)",
        "showingresultsinrange": "Herunder vises op til {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultater}} fra nummer <strong>$2</strong> til nummer <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> af <strong>$3</strong>|Resultat <strong>$1 - $2</strong> af <strong>$3</strong>}}",
        "search-nonefound": "Søgningen gav ingen resultater.",
+       "search-nonefound-thiswiki": "Der var ingen resultater matchende forespørgslen  på denne side.",
        "powersearch-legend": "Avanceret søgning",
        "powersearch-ns": "Søg i navnerummene:",
        "powersearch-togglelabel": "Marker:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Indiske Ocean",
        "timezoneregion-pacific": "Stillehavet",
-       "allowemail": "Tillad e-mail fra andre brugere",
+       "allowemail": "Tillad at andre brugere sender mig beskeder",
+       "email-blacklist-label": "Forbyd disse brugere i at sende mig beskeder:",
        "prefs-searchoptions": "Søg",
        "prefs-namespaces": "Navnerum",
        "default": "standard",
        "prefs-editor": "Redigeringsprogrammet",
        "prefs-preview": "Forhåndsvisning",
        "prefs-advancedrc": "Avancerede indstillinger",
+       "prefs-opt-out": "Vælg ikke at få forbedringer",
        "prefs-advancedrendering": "Avancerede indstillinger",
        "prefs-advancedsearchoptions": "Avancerede indstillinger",
        "prefs-advancedwatchlist": "Avancerede indstillinger",
        "userrights-user-editname": "Skriv et brugernavn:",
        "editusergroup": "Indlæs brugergrupper",
        "editinguser": "Ændrer brugerrettigheder for {{GENDER:$1|brugeren}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Viser brugerrettigheder for {{GENDER:$1|bruger}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Redigér {{GENDER:$1|brugergrupper}}",
+       "userrights-viewusergroup": "Vis {{GENDER:$1|user}}-grupper",
        "saveusergroups": "Gem {{GENDER:$1|brugergrupper}}",
        "userrights-groupsmember": "Medlem af:",
        "userrights-groupsmember-auto": "Implicit medlem af:",
-       "userrights-groups-help": "Du kan ændre denne brugers gruppemedlemsskaber:\n* Et markeret afkrydsningsfelt betyder at brugeren er medlen af den pågældende gruppe.\n* Et umarkeret felt betyder at brugeren ikke er medlem af gruppen.\n* En * betyder at du ikke kan fravælge gruppen, når den først er tilføjet og omvendt.",
+       "userrights-groups-help": "Du kan ændre denne brugers gruppemedlemsskaber:\n* Et markeret afkrydsningsfelt betyder at brugeren er medlen af den pågældende gruppe.\n* Et umarkeret felt betyder at brugeren ikke er medlem af gruppen.\n* En * betyder at du ikke kan fravælge gruppen, når den først er tilføjet og omvendt.\n* En # betyder at du kun kan forkorte udløbsperioden for dette gruppemedlemskab; du kan ikke forlænge den.",
        "userrights-reason": "Årsag:",
        "userrights-no-interwiki": "Du har ikke tilladelse til at redigere brugerrettigheder på andre wikier.",
        "userrights-nodatabase": "Databasen $1 eksisterer ikke lokalt.",
        "recentchanges-submit": "Vis",
        "rcfilters-tag-remove": "Fjern »$1«",
        "rcfilters-legend-heading": "<strong>Liste over forkortelser:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andre gennemgangsværktøjer</strong>",
+       "rcfilters-other-review-tools": "Andre gennemgangsværktøjer",
        "rcfilters-group-results-by-page": "Grupper resultater efter side",
        "rcfilters-grouping-title": "Gruppering",
        "rcfilters-activefilters": "Aktive filtre",
        "rcfilters-filter-user-experience-level-unregistered-label": "Uregistrerede",
        "rcfilters-filter-user-experience-level-unregistered-description": "Redaktører, der ikke er logget ind.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nybegyndere",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Færre end 10 redigeringer og 4 dages aktivitet",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrerede brugere som har færre end 10 redigeringer eller 4 dages aktivitet.",
        "rcfilters-filter-user-experience-level-learner-label": "Let øvede",
        "rcfilters-filter-user-experience-level-learner-description": "Mere erfaring end \"nybegyndere\" men mindre end \"erfarne brugere\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfarne brugere",
-       "rcfilters-filter-user-experience-level-experienced-description": "Over 30 dages aktivitet og 500 redigeringer.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Registrerede skribenter med mere end 500 redigeringer og 30 dages aktivitet.",
        "rcfilters-filtergroup-automated": "Automatiserede bidrag",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Redigeringer udført af automatiserede værktøjer.",
        "rcfilters-filter-lastrevision-label": "Seneste revision",
        "rcfilters-filter-lastrevision-description": "Den nyeste ændring af en side.",
        "rcfilters-filter-previousrevision-label": "Tidligere revisioner",
-       "rcfilters-filter-previousrevision-description": "Alle ændringer som ikke er den nyeste ændring af en side.",
+       "rcfilters-filter-previousrevision-description": "Alle ændringer som ikke er »seneste revision«.",
+       "rcfilters-filter-excluded": "Ekskluderet",
        "rcfilters-view-advanced-filters-label": "Avancerede filtre",
        "rcfilters-view-tags": "Mærkede redigeringer",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultater efter navnerum",
+       "rcfilters-watchlist-markseen-button": "Marker alle ændringer som set",
        "rcfilters-watchlist-edit-watchlist-button": "Rediger din liste med overvågede sider",
        "rcfilters-preference-label": "Skjul den forbedrede verson af Seneste ændringer",
        "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
        "apisandbox-results": "Resultater",
        "apisandbox-sending-request": "Sender API-forespørgsel ...",
        "apisandbox-loading-results": "Modtager API-resultater ...",
+       "apisandbox-results-error": "Der opstod en fejl under indlæsning af API-forespørgelsessvaret: $1.",
        "apisandbox-request-format-url-label": "Adresseforepørgselsstreng",
        "apisandbox-request-url-label": "Forespurgt URL:",
        "apisandbox-request-time": "Forespørgselstid: {{PLURAL:$1|$1 ms}}",
        "activeusers-intro": "Dette er en liste over brugere, som har haft en eller anden form for aktivitet inden for {{PLURAL:$1|den|de}} seneste {{PLURAL:$1|dag|$1 dage}}.",
        "activeusers-count": "$1 {{PLURAL:$1|handling|handlinger}} i {{PLURAL:$3|det seneste døgn|de seneste $3 dage}}",
        "activeusers-from": "Vis brugere som starter med:",
+       "activeusers-groups": "Vis brugere tilhørende grupperne:",
+       "activeusers-excludegroups": "Ekskluder brugere tilhørende grupperne:",
        "activeusers-noresult": "Ingen brugere fundet.",
+       "activeusers-submit": "Vis aktive brugere",
        "listgrouprights": "Brugergrupperettigheder",
        "listgrouprights-summary": "Denne side viser de brugergrupper der er defineret på denne wiki og de enkelte gruppers rettigheder.\n\nDer findes muligvis [[{{MediaWiki:Listgrouprights-helppage}}|yderligere information]] om de enkelte rettigheder.",
        "listgrouprights-key": "Forklaring:\n* <span class=\"listgrouprights-granted\">Bevilget rettighed</span>\n* <span class=\"listgrouprights-revoked\">Tilbagetrukket rettighed</span>",
        "listgrouprights-namespaceprotection-header": "Navnerumsbegrænsninger",
        "listgrouprights-namespaceprotection-namespace": "Navnerum",
        "listgrouprights-namespaceprotection-restrictedto": "Rettighed(er) der giver brugeren mulighed for at redigere",
+       "listgrants": "Tildelinger",
+       "listgrants-grant": "Tildeling",
        "listgrants-rights": "Rettigheder",
        "trackingcategories": "Sporingskategorier",
        "trackingcategories-summary": "Denne side viser sporing af de kategorier, som er automatisk udfyldt af MediaWiki-softwaren. Deres navne kan ændres ved at ændre de relevante system-beskeder i {{ns:8}}-navnerummet.",
        "trackingcategories-msg": "Sporingskategori",
        "trackingcategories-name": "Navn på besked",
        "trackingcategories-desc": "Optagelseskriterier for kategori",
+       "restricted-displaytitle-ignored": "Sider med ignorerede visningstitler",
        "noindex-category-desc": "Siden indekseres ikke af robotter, fordi den indeholder det magiske ord <code><nowiki>__NOINDEX__</nowiki></code> og er i et navnerum, hvor dette flag er tilladt.",
        "index-category-desc": "Siden indeholder <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerum, hvor dette flag er tilladt), og bliver derfor indekseret af robotter, hvor den normalt ikke ville blive det.",
        "post-expand-template-inclusion-category-desc": "Siden er større end <code>$wgMaxArticleSize</code> efter alle skabeloner er udvidet, så nogle skabeloner blev ikke udvidet.",
        "unwatchthispage": "Fjern overvågning",
        "notanarticle": "Ikke en artikel",
        "notvisiblerev": "Versionen er blevet slettet",
-       "watchlist-details": "Du har {{PLURAL:$1|$1 side|$1 sider}} på din overvågningsliste (uden at medregne diskussionssider).",
+       "watchlist-details": "{{PLURAL:$1|$1 side er|$1 sider er}} på din overvågningsliste (plus diskussionssider).",
        "wlheader-enotif": "E-mail-underretning er slået til.",
        "wlheader-showupdated": "Sider, der er ændret siden dit sidste besøg, er vist med '''fed skrift'''.",
        "wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste <strong>$1</strong> ændringer}} i {{PLURAL:$2|den sidste time|de sidste <strong>$2</strong> timer}} op til den $3 kl. $4.",
        "rollback-success": "Ændringerne fra $1 er fjernet,\nog den seneste version af $2 er gendannet.",
        "sessionfailure-title": "Sessionsfejl",
        "sessionfailure": "Der lader til at være et problem med din loginsession; denne handling blev annulleret som en sikkerhedsforanstaltning mod kapring af sessionen. Tryk på \"tilbage\"-knappen og genindlæs den side du kom fra, og prøv dernæst igen.",
+       "changecontentmodel-legend": "Ændr indholdsmodel",
        "changecontentmodel-title-label": "Sidetitel",
        "changecontentmodel-model-label": "Ny indholdsmodel",
        "changecontentmodel-reason-label": "Begrundelse:",
+       "changecontentmodel-submit": "Ændr",
+       "changecontentmodel-success-title": "Indholdsmodellen blev ændret",
+       "changecontentmodel-success-text": "Indholdstypen for [[:$1]] er blevet ændret.",
+       "changecontentmodel-cannot-convert": "Indholdet for [[:$1]] kan ikke konverteres til en type af $2.",
        "changecontentmodel-emptymodels-title": "Ingen indholdsmodeller er tilgængelige",
        "changecontentmodel-emptymodels-text": "Indholdet på [[:$1]] kan ikke konverteres til en anden type.",
        "protectlogpage": "Skrivebeskyttelseslog",
        "undelete-search-title": "Søg i slettede sider",
        "undelete-search-box": "Søg efter slettede sider",
        "undelete-search-prefix": "Vis sider som starter med:",
+       "undelete-search-full": "Vis sidetitler indeholdende:",
        "undelete-search-submit": "Søg",
        "undelete-no-results": "Der blev ikke fundet en passende side i arkivet.",
        "undelete-filename-mismatch": "Kan ikke gendanne filen med tidsstempel $1: forkert filnavn",
        "block": "Bloker bruger",
        "unblock": "Ophæv blokering af bruger",
        "blockip": "Bloker {{GENDER:$1|bruger}}",
-       "blockip-legend": "Bloker bruger",
-       "blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).",
+       "blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).\nDu kan blokere IP-adresseintervaller via syntaksen fra [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; det største tilladte interval er /$1 for IPv4 og /$2 for IPv6.",
        "ipaddressorusername": "IP-adresse eller brugernavn",
        "ipbexpiry": "varighed",
        "ipbreason": "Begrundelse:",
        "unblocked": "[[User:$1|$1]] blev frigivet",
        "unblocked-range": "$1 er fjernet fra blokering",
        "unblocked-id": "Blokering $1 er blevet fjernet",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] har fået fjernet blokering.",
        "blocklist": "Blokerede brugere",
        "autoblocklist": "Autoblokeringer",
        "autoblocklist-submit": "Søg",
        "autoblocklist-legend": "Vis autoblokeringer",
+       "autoblocklist-total-autoblocks": "Samlet antal automatiske blokeringer: $1",
        "autoblocklist-empty": "Autoblokeringslisten er tom.",
        "autoblocklist-otherblocks": "Andre {{PLURAL:$1|autoblokering|autoblokeringer}}",
        "ipblocklist": "Blokerede brugere",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nej",
        "tags-source-extension": "Defineret af programmellet",
+       "tags-source-manual": "Anvendt manuelt af brugere og robotter",
        "tags-source-none": "Anvendes ikke længere",
        "tags-edit": "redigér",
        "tags-delete": "slet",
index 6132476..8a26c7d 100644 (file)
@@ -9,7 +9,11 @@
                        "SVG",
                        "The Evil IP address",
                        "Umherirrender",
-                       "Das Schäfchen"
+                       "Das Schäfchen",
+                       "FriedhelmW",
+                       "J. 'mach' wust",
+                       "Macofe",
+                       "Marcell0"
                ]
        },
        "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden",
        "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden",
        "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste",
        "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren",
+       "january": "Januar",
+       "february": "Februar",
+       "march": "März",
+       "april": "April",
+       "may_long": "Mai",
+       "june": "Juni",
+       "july": "Juli",
+       "august": "August",
+       "september": "September",
+       "october": "Oktober",
+       "november": "November",
+       "december": "Dezember",
+       "jan": "Jan.",
+       "feb": "Feb.",
+       "mar": "Mär.",
+       "apr": "Apr.",
+       "may": "Mai",
+       "jun": "Jun.",
+       "jul": "Juli",
+       "aug": "Aug.",
+       "sep": "Sep.",
+       "oct": "Okt.",
+       "nov": "Nov.",
+       "dec": "Dez.",
        "category_header": "Seiten in der Kategorie «$1»",
        "category-media-header": "Medien in der Kategorie «$1»",
+       "navigation": "Navigation",
+       "namespaces": "Namensräume",
+       "variants": "Varianten",
+       "navigation-heading": "Navigationsmenü",
+       "help": "Hilfe",
+       "search": "Suche",
+       "searchbutton": "Suche",
+       "searcharticle": "Gehe",
+       "printableversion": "Druckbare Version",
+       "edit": "Bearbeiten",
+       "talkpagelinktext": "Diskussion",
+       "personaltools": "Meine Werkzeuge",
+       "talk": "Diskussion",
+       "views": "Ansichten",
+       "toolbox": "Werkzeuge",
+       "jumpto": "Wechseln zu:",
+       "jumptonavigation": "Navigation",
+       "jumptosearch": "Suche",
+       "aboutsite": "Über {{SITENAME}}",
+       "aboutpage": "Project:Über_{{SITENAME}}",
+       "disclaimers": "Impressum",
+       "disclaimerpage": "Project:Impressum",
+       "privacy": "Datenschutz",
+       "privacypage": "Project:Datenschutz",
        "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.",
        "retrievedfrom": "Von «$1»",
+       "editsection": "Bearbeiten",
+       "editsectionhint": "Abschnitt bearbeiten: $1",
        "site-atom-feed": "Atom-Feed für «$1»",
        "page-rss-feed": "RSS-Feed für «$1»",
        "page-atom-feed": "Atom-Feed für «$1»",
+       "red-link-title": "$1 (Seite nicht vorhanden)",
        "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
        "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.",
        "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.",
        "cannotdelete-title": "Seite «$1» kann nicht gelöscht werden",
        "actionthrottledtext": "Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
        "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 [https://translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
+       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung <em>$2</em> eingerichtet.",
        "filereadonlyerror": "Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».",
        "createacct-realname": "Richtiger Name (optional)",
        "loginsuccess": "Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.",
-       "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
+       "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:CreateAccount|melde dich als neuer Benutzer an]].",
        "nosuchusershort": "Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
        "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer «$2» lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere dieses E-Mail, falls du es nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
        "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.",
        "mailerror": "Fehler beim Senden des E-Mails: $1",
        "createaccount-text": "Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
        "createacct-another-realname-tip": "Der richtige Name ist optional.\nWenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.",
+       "pt-login": "Anmelden",
+       "pt-createaccount": "Benutzerkonto erstellen",
        "user-mail-no-addy": "Versuchte, ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden",
        "user-mail-no-body": "Es wurde versucht, ein E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
        "resetpass_announce": "Um die Anmeldung abzuschliessen, musst du ein neues Passwort festlegen.",
-       "passwordreset-emailsent": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
-       "passwordreset-emailsent-capture": "Ein Passwortzurücksetzungs-E-Mail wurde versandt, das unten angezeigt wird.",
-       "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
-       "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
-       "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
+       "passwordreset-emailsentemail": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
+       "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «$1» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
+       "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «$1» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
        "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde von $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "confirmedittext": "Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].",
        "creating": "Erstellen von «$1»",
        "editingsection": "Bearbeiten von «$1» (Abschnitt)",
        "editingcomment": "Bearbeiten von «$1» (Neuer Abschnitt)",
-       "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
+       "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «$1» klickst.",
        "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
        "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''\nEr kann nicht gespeichert werden.",
        "post-expand-template-inclusion-warning": "Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.",
        "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
        "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
        "mergehistory-merge": "Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
-       "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.",
+       "mergehistory-done": "{{PLURAL:$3|1 Version|$3 Versionen}} von «$1» erfolgreich nach «[[:$2]]» vereinigt.",
        "mergehistory-no-source": "Ursprungsseite «$1» ist nicht vorhanden.",
        "mergehistory-no-destination": "Zielseite «$1» ist nicht vorhanden.",
        "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»",
        "recentchangescount": "Anzahl der standardmässig angezeigten Bearbeitungen:",
        "yourrealname": "Richtiger Name:",
        "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
+       "gender-unknown": "«Der Benutzer», «seine Diskussion», «er bearbeitet» usw.",
+       "gender-male": "«Der Benutzer», «seine Diskussion», «er bearbeitet» usw. (männlich)",
+       "gender-female": "«Die Benutzerin», «ihre Diskussion», «sie bearbeitet» usw. (weiblich)",
        "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein richtiger Name deinen Beiträgen zugeordnet werden.",
        "right-createpage": "Seiten erstellen (ausser Diskussionsseiten)",
        "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige",
        "right-viewmyprivateinfo": "Eigene private Daten ansehen (beispielsweise E-Mail-Adresse, richtiger Name)",
        "right-editmyprivateinfo": "Eigene private Daten bearbeiten (beispielsweise E-Mail-Adresse, richtiger Name)",
        "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5",
-       "right-passwordreset": "Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen",
        "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes",
        "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit «|»):",
+       "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} nach der Änderung",
        "rc-old-title": "ursprünglich erstellt als «$1»",
        "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind",
        "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
        "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.",
        "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).",
        "allpages-bad-ns": "Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.",
-       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
-       "post-expand-template-inclusion-category-desc": "Nach dem Expandieren aller Vorlagen ist die Seitengrösse grösser als <code>$wgMaxArticleSize</code>, sodass einige Vorlagen nicht expandiert werden.",
+       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: $1 (Standard ist http, falls kein Protokoll angegeben ist.)",
+       "post-expand-template-inclusion-category-desc": "Die Seitengrösse ist nach dem Expandieren aller Vorlagen grösser als <code>$wgMaxArticleSize</code>, so dass einige Vorlagen nicht expandiert wurden.",
        "post-expand-template-argument-category-desc": "Nach dem Expandieren eines Vorlagenargumentes (etwas in dreifach geschweiften Klammern, z.&nbsp;B. <code>{{{Foo}}})</code> ist die Seite grösser als <code>$wgMaxArticleSize</code>.",
        "hidden-category-category-desc": "Dies ist eine Kategorie mit <code><nowiki>__HIDDENCAT__</nowiki></code>, die standardmässig nicht auf Seiten im Kategorienbereich angezeigt wird.",
        "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular ein E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
-       "defemailsubject": "{{SITENAME}} - E-Mail von Benutzer «$1»",
+       "defemailsubject": "{{SITENAME}} - E-Mail von {{GENDER:$1|Benutzer|Benutzerin}} «$1»",
        "emailnotarget": "Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.",
        "emailccme": "Sende eine Kopie des E-Mails an mich",
        "emailsenttext": "Dein E-Mail wurde verschickt.",
        "exbeforeblank": "Inhalt vor dem Leeren der Seite: «$1»",
        "delete-confirm": "Löschen von «$1»",
        "deletedtext": "«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.",
-       "editcomment": "Die Änderungszusammenfassung lautet: ''«$1»''.",
+       "editcomment": "Die Änderungszusammenfassung lautet: <em>$1</em>.",
        "protectedarticle": "schützte «[[$1]]»",
        "modifiedarticleprotection": "änderte den Schutz von «[[$1]]»",
        "unprotectedarticle": "hob den Schutz von «[[$1]]» auf",
        "undeletedpage": "'''«$1»''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
        "undelete-cleanup-error": "Fehler beim Löschen der unbenutzten Archiv-Version «$1».",
        "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?",
+       "blanknamespace": "(Seiten)",
        "contributions-title": "Benutzerbeiträge von «$1»",
        "whatlinkshere-title": "Seiten, die auf «$1» verlinken",
        "linkshere": "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
        "ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus «Benutzer verstecken» zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
        "ipb-unblock-addr": "«$1» freigeben",
        "ipb-blocklist-contribs": "Benutzerbeiträge von «$1»",
+       "contribslink": "Beiträge",
        "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.\nGrund der Benutzersperre: «$2»",
        "blocklogentry": "sperrte «[[$1]]» für den Zeitraum: $2 $3",
        "reblock-logentry": "änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3",
        "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.",
        "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.",
        "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.",
-       "import-logentry-upload": "importierte «[[$1]]» von einer Datei",
-       "import-logentry-interwiki": "importierte «$1» (Transwiki)",
-       "javascripttest-pagetext-unknownframework": "Unbekanntes Framework «$1».",
+       "tooltip-pt-createaccount": "Wir ermutigen dich ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
+       "tooltip-search": "{{SITENAME}} durchsuchen",
+       "tooltip-search-go": "Gehe zur Seite mit diesem exakten Namen, falls diese existiert.",
+       "tooltip-search-fulltext": "Durchsuche die Seiten nach diesem Text",
+       "tooltip-p-logo": "Hauptseite aufsuchen",
+       "tooltip-n-recentchanges": "Liste der letzten Änderungen in diesem Wiki",
+       "tooltip-n-help": "Der Platz um herauszufinden",
        "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden",
+       "tooltip-t-specialpages": "Liste aller Spezialseiten",
        "pageinfo-title": "Informationen zu «$1»",
+       "pageinfo-toolboxlink": "Informationen zur Seite",
        "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.",
        "filedelete-missing": "Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.",
        "filedelete-old-unregistered": "Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.",
        "autosumm-new": "Die Seite wurde neu angelegt: «$1»",
        "watchlistedit-normal-explain": "Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
        "watchlistedit-raw-explain": "Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».\nDu kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
-       "unknown_extension_tag": "Unbekanntes Parsertag «$1»",
        "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».",
        "version-license-info": "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nMediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
        "fileduplicatesearch-info": "$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4",
        "fileduplicatesearch-result-1": "Die Datei «$1» hat keine identischen Duplikate.",
        "fileduplicatesearch-result-n": "Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.",
        "fileduplicatesearch-noresults": "Es wurde keine Datei namens «$1» gefunden.",
+       "specialpages": "Spezialseiten",
        "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
        "feedback-bugornote": "Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite «[$3 $2]» hinzugefügt.",
        "feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.",
-       "api-error-file-too-large": "Die hochgeladene Datei war zu gross.",
-       "api-error-hookaborted": "Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).",
-       "api-error-unknown-code": "Unbekannter Fehler: «$1»",
+       "searchsuggest-search": "Suche",
        "api-error-unknown-warning": "Unbekannte Warnung: «$1»",
        "api-error-unknownerror": "Unbekannter Fehler: «$1»"
 }
index a719fb6..e49e4e7 100644 (file)
        "edit_form_incomplete": "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
        "explainconflict": "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält Ihre Änderungen.\nBitte fügen Sie Ihre Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „$1“ klicken.",
        "yourtext": "Ihr Text",
-       "nonunicodebrowser": "'''Achtung: Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten.''' Es wird eine Hilfsroutine eingesetzt, um Ihnen zu erlauben, Seiten sicher zu bearbeiten: Nicht-ASCII-Zeichen werden dabei im Bearbeitungsfenster als hexadezimale Codes angezeigt.",
        "editingold": "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
        "copyrightwarning": "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nSie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
        "copyrightwarning2": "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.\n\nSie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben\n(weitere Einzelheiten unter $1). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
        "confirmemail_loggedin": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt.",
        "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:\n\n$3\n\nWenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
        "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser:\n\n$3\n\nFalls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+       "notificationemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ auf „$3“ geändert.\n\nFalls Sie dies nicht waren, kontaktieren Sie bitte umgehend einen Administrator des Wikis.",
+       "notificationemail_body_removed": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ entfernt.\n\nFalls Sie dies nicht waren, kontaktieren Sie bitte umgehend einen Administrator des Wikis.",
        "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.\nWenn Sie die Seite speichern, wird sie neu angelegt.",
        "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:\n: ''$2''\nBitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
        "watchlistedit-normal-explain": "Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
index 6e4037d..de6d8bd 100644 (file)
        "tog-numberheadings": "Überschriften automatisch nummerieren",
        "tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
        "tog-editondblclick": "Seiten mit Doppelklick bearbeiten",
-       "tog-editsectiononrightclick": "Einzelne Abschnitte per Rechtsklick bearbeiten",
+       "tog-editsectiononrightclick": "Einzelne Abschnitte per Rechtsklick auf die Überschrift bearbeiten",
        "tog-watchcreations": "Selbst erstellte Seiten und hochgeladene Dateien automatisch beobachten",
        "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
        "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
        "anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
        "missingsummary": "<strong>Hinweis:</strong> Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „$1“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
        "selfredirect": "<strong>Warnung:</strong> Du leitest auf diese Seite selbst weiter.\nDu hast vermutlich das falsche Weiterleitungsziel angegeben oder du bearbeitest die falsche Seite.\nWenn du erneut auf „$1“ klickst, wird die Weiterleitung dennoch erstellt.",
-       "missingcommenttext": "Bitte gib unten einen Kommentar ein.",
+       "missingcommenttext": "Bitte gib einen Kommentar ein.",
        "missingcommentheader": "<strong>Achtung:</strong> Du hast keinen Betreff eingegeben. Wenn du erneut auf „$1“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
        "summary-preview": "Vorschau der Zusammenfassungszeile:",
        "subject-preview": "Vorschau der Zusammenfassungszeile:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Indischer Ozean",
        "timezoneregion-pacific": "Pazifischer Ozean",
-       "allowemail": "E-Mail-Empfang von anderen Benutzern ermöglichen",
+       "allowemail": "Anderen Benutzern erlauben, E-Mails an mich zu senden.",
        "email-blacklist-label": "Diesen Benutzern das Versenden von E-Mails an mich verbieten:",
        "prefs-searchoptions": "Suche",
        "prefs-namespaces": "Namensräume",
        "recentchanges-legend": "Anzeigeoptionen",
        "recentchanges-summary": "Auf dieser Seite kannst du die letzten Änderungen in diesem Wiki nachverfolgen.",
        "recentchanges-noresult": "Keine Änderungen während des angegebenen Zeitraums entsprechen diesen Kriterien.",
+       "recentchanges-timeout": "Die Zeit für diese Suche wurde überschritten. Du kannst verschiedene Suchparameter ausprobieren.",
+       "recentchanges-network": "Aufgrund eines technischen Fehlers konnten keine Ergebnisse geladen werden. Bitte versuche, die Seite neu zu laden.",
        "recentchanges-feed-description": "Verfolge mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
        "recentchanges-label-newpage": "Neue Seite",
        "recentchanges-label-minor": "Kleine Änderung",
        "recentchanges-submit": "Anzeigen",
        "rcfilters-tag-remove": "„$1“ entfernen",
        "rcfilters-legend-heading": "<strong>Liste von Abkürzungen:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andere Überprüfungswerkzeuge</strong>",
+       "rcfilters-other-review-tools": "Andere Überprüfungswerkzeuge",
        "rcfilters-group-results-by-page": "Ergebnisse nach Seite gruppieren",
        "rcfilters-grouping-title": "Gruppierung",
        "rcfilters-activefilters": "Aktive Filter",
        "rcfilters-days-show-hours": "{{PLURAL:$1|Eine Stunde|$1 Stunden}}",
        "rcfilters-highlighted-filters-list": "Hervorgehoben: $1",
        "rcfilters-quickfilters": "Gespeicherte Filter",
-       "rcfilters-quickfilters-placeholder-title": "Noch keine Links gespeichert",
+       "rcfilters-quickfilters-placeholder-title": "Noch keine Filter gespeichert",
        "rcfilters-quickfilters-placeholder-description": "Um deine Filtereinstellungen zu speichern und später erneut zu verwenden, klicke unten auf das Lesezeichensymbol im Bereich der aktiven Filter.",
        "rcfilters-savedqueries-defaultlabel": "Gespeicherte Filter",
        "rcfilters-savedqueries-rename": "Umbenennen",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Standardfilter erstellen",
        "rcfilters-savedqueries-cancel-label": "Abbrechen",
        "rcfilters-savedqueries-add-new-title": "Aktuelle Filtereinstellungen speichern",
+       "rcfilters-savedqueries-already-saved": "Diese Filter sind bereits gespeichert. Ändere deine Einstellungen, um einen neuen Gespeicherten Filter zu erstellen.",
        "rcfilters-restore-default-filters": "Standardfilter wiederherstellen",
        "rcfilters-clear-all-filters": "Alle Filter löschen",
        "rcfilters-show-new-changes": "Neueste Änderungen ansehen",
-       "rcfilters-search-placeholder": "Letzte Änderungen filtern (durchsuchen oder beginne mit der Eingabe)",
+       "rcfilters-search-placeholder": "Änderungen filtern (Menü oder Suche für den Filternamen verwenden)",
        "rcfilters-invalid-filter": "Ungültiger Filter",
        "rcfilters-empty-filter": "Keine aktiven Filter. Es werden alle Beiträge angezeigt.",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-filter-user-experience-level-unregistered-label": "Unangemeldet",
        "rcfilters-filter-user-experience-level-unregistered-description": "Autoren, die nicht angemeldet sind.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Neulinge",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Angemeldete Autoren mit weniger als 10 Bearbeitungen und einer Aktivität von weniger als 4 Tagen.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Angemeldete Autoren, die weniger als 10 Bearbeitungen oder eine Aktivität von weniger als 4 Tagen haben.",
        "rcfilters-filter-user-experience-level-learner-label": "Anfänger",
        "rcfilters-filter-user-experience-level-learner-description": "Angemeldete Autoren, deren Erfahrung zwischen „Neulinge“ und „Erfahrene Benutzer“ fällt.",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfahrene Benutzer",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nicht</strong> $1",
        "rcfilters-exclude-button-off": "Ausgewählte ausschließen",
        "rcfilters-exclude-button-on": "Ausgewählte ausgeschlossen",
-       "rcfilters-view-advanced-filters-label": "Erweiterte Filter",
        "rcfilters-view-tags": "Markierte Bearbeitungen",
        "rcfilters-view-namespaces-tooltip": "Ergebnisse nach Namensraum filtern",
        "rcfilters-view-tags-tooltip": "Ergebnisse filtern, die Bearbeitungsmarkierungen verwenden",
        "uploaded-script-svg": "Skriptelement „$1“ in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-hostile-svg": "Unsicheres CSS im Styleelement der hochgeladenen SVG-Datei gefunden.",
        "uploaded-event-handler-on-svg": "Das Festlegen von Ereignis-Handler-Attributen <code>$1=\"$2\"</code> ist in SVG-Dateien nicht erlaubt.",
-       "uploaded-href-attribute-svg": "href-Attribute in SVG-Dateien sind nur als Verlinkung zu http://- oder https://-Zielen erlaubt. <code>&lt;$1 $2=\"$3\"&gt;</code> gefunden.",
+       "uploaded-href-attribute-svg": "<a>-Elemente können nur auf Daten verlinken (href): (eingebettete Datei), http://, https:// oder fragment-Ziele (#, gleiches Dokument). Für andere Elemente wie <image> sind nur data: und fragment erlaubt. Versuche beim Exportieren deiner SVG-Datei Bilder einzubinden. <code>&lt;$1 $2=\"$3\"&gt;</code> gefunden.",
        "uploaded-href-unsafe-target-svg": "href zu unsicheren Daten gefunden: URI-Ziel <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei.",
        "uploaded-animate-svg": "Tag „animate“ gefunden, das href mithilfe des Attributs „from“ <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei ändern könnte.",
        "uploaded-setting-event-handler-svg": "Das Festlegen von Ereignis-Handler-Attributen ist gesperrt. <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei gefunden.",
        "uploadstash-refresh": "Liste der Dateien aktualisieren",
        "uploadstash-thumbnail": "Vorschaubild ansehen",
        "uploadstash-exception": "Upload konnte nicht gespeichert werden ($1): „$2“.",
+       "uploadstash-bad-path": "Der Pfad ist nicht vorhanden.",
+       "uploadstash-bad-path-invalid": "Der Pfad ist nicht gültig.",
+       "uploadstash-bad-path-unknown-type": "Unbekannter Typ „$1“.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nicht erkannter Vorschaubildname.",
+       "uploadstash-bad-path-no-handler": "Es wurde kein Verarbeitungsprogramm für den MIME-Typ $1 der Datei $2 gefunden.",
+       "uploadstash-bad-path-bad-format": "Der Schlüssel „$1“ ist nicht in einem passenden Format.",
+       "uploadstash-file-not-found": "Der Schlüssel „$1“ wurde nicht im Speicher gefunden.",
+       "uploadstash-file-not-found-no-thumb": "Das Vorschaubild konnte nicht abgerufen werden.",
+       "uploadstash-file-not-found-no-local-path": "Kein lokaler Pfad für das skalierte Element.",
+       "uploadstash-file-not-found-no-object": "Es kann kein lokales Dateiobjekt für das Vorschaubild erstellt werden.",
+       "uploadstash-file-not-found-no-remote-thumb": "Das Abrufen des Vorschaubildes ist fehlgeschlagen: $1\nURL: $2",
+       "uploadstash-file-not-found-missing-content-type": "Fehlender Inhaltstyp-Header.",
+       "uploadstash-file-not-found-not-exists": "Der Pfad konnte nicht gefunden werden oder die Datei ist nicht eindeutig.",
+       "uploadstash-file-too-large": "Es kann keine Datei angeboten werden, die größer als $1 Bytes ist.",
+       "uploadstash-not-logged-in": "Es ist kein Benutzer angemeldet. Dateien müssen zu Benutzern gehören.",
+       "uploadstash-wrong-owner": "Diese Datei ($1) gehört nicht dem aktuellen Benutzer.",
+       "uploadstash-no-such-key": "Kein entsprechender Schlüssel ($1). Entfernen nicht möglich.",
+       "uploadstash-no-extension": "Die Erweiterung hat einen Wert von null.",
+       "uploadstash-zero-length": "Die Datei hat eine Größe von null.",
        "invalid-chunk-offset": "Ungültiger Startpunkt",
        "img-auth-accessdenied": "Zugriff verweigert",
        "img-auth-nopathinfo": "Die Angabe PATH_INFO fehlt.\nDer Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher „img_auth“ (Authentifizierung des Dateiaufrufs) nicht unterstützen.\nSiehe auch https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (englisch).",
        "emailuser-title-target": "E-Mail an {{GENDER:$1|diesen Benutzer|diese Benutzerin}} senden",
        "emailuser-title-notarget": "E-Mail an Benutzer",
        "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
-       "defemailsubject": "{{SITENAME}} – E-Mail von Benutzer „$1“",
+       "defemailsubject": "{{SITENAME}} – E-Mail von {{GENDER:$1|Benutzer|Benutzerin}} „$1“",
        "usermaildisabled": "E-Mail-Empfang deaktiviert",
        "usermaildisabledtext": "Du kannst in diesem Wiki keine E-Mails an andere Benutzer senden",
        "noemailtitle": "Keine E-Mail-Adresse",
        "emailccsubject": "Kopie deiner Nachricht an $1: $2",
        "emailsent": "E-Mail verschickt",
        "emailsenttext": "Deine E-Mail wurde verschickt.",
-       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „{{GENDER:$2|$2}}“ durch die Funktion „{{int:emailuser}}“ bei {{SITENAME}} {{GENDER:$1|gesendet}}. Falls {{GENDER:$2|du}} auf diese E-Mail antwortest, wird sie direkt an {{GENDER:$1|den Originalabsender|die Originalabsenderin}} gesendet. Dabei erfährt {{GENDER:$1|er|sie}} {{GENDER:$2|deine}} E-Mail-Adresse.",
+       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „{{GENDER:$2|$2}}“ durch die Funktion „E-Mail an {{GENDER:$2|diesen Benutzer|diese Benutzerin}}“ bei {{SITENAME}} {{GENDER:$1|gesendet}}. Falls {{GENDER:$2|du}} auf diese E-Mail antwortest, wird sie direkt an {{GENDER:$1|den Originalabsender|die Originalabsenderin}} gesendet. Dabei erfährt {{GENDER:$1|er|sie}} {{GENDER:$2|deine}} E-Mail-Adresse.",
        "usermessage-summary": "Systemnachricht gespeichert.",
        "usermessage-editor": "System-Messenger",
        "usermessage-template": "MediaWiki:Benutzernachricht",
        "tooltip-whatlinkshere-invert": "Markiere dieses Kontrollkästchen, um Links von Seiten innerhalb des ausgewählten Namensraums auszublenden.",
        "namespace_association": "Zugehöriger Namensraum",
        "tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den deiner Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
-       "blanknamespace": "(Artikel)",
+       "blanknamespace": "(Seiten)",
        "contributions": "{{GENDER:$1|Benutzerbeiträge}}",
        "contributions-title": "Benutzerbeiträge von „$1“",
        "mycontris": "Beiträge",
        "invalidateemail": "E-Mail-Adressbestätigung abbrechen",
        "notificationemail_subject_changed": "Die registrierte E-Mail-Adresse auf {{SITENAME}} wurde geändert",
        "notificationemail_subject_removed": "Die registrierte E-Mail-Adresse auf {{SITENAME}} wurde entfernt",
-       "notificationemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ auf „$3“ geändert.\n\nFalls das nicht du warst, kontaktiere umgehend einen Wikiadministrator.",
-       "notificationemail_body_removed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ entfernt.\n\nFalls das nicht du warst, kontaktiere umgehend einen Wikiadministrator.",
+       "notificationemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ auf „$3“ geändert.\n\nFalls du dies nicht warst, kontaktiere bitte umgehend einen Administrator des Wikis.",
+       "notificationemail_body_removed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ entfernt.\n\nFalls du dies nicht warst, kontaktiere bitte umgehend einen Administrator des Wikis.",
        "scarytranscludedisabled": "[Interwiki-Einbindung ist deaktiviert]",
        "scarytranscludefailed": "[Vorlageneinbindung für $1 ist gescheitert]",
        "scarytranscludefailed-httpstatus": "[Vorlagenabruf fehlgeschlagen für $1: HTTP $2]",
index 305fcd0..341c800 100644 (file)
        "edit-local": "Şınasnayışê lokali bıvurne",
        "create": "Vıraze",
        "create-local": "Şınasnayışê lokali cı ke",
-       "delete": "Bestern",
+       "delete": "Bestere",
        "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
        "protect": "Bıstarnê",
        "histlast": "Peyênêr",
        "historysize": "({{PLURAL:$1|1 bayt|$1 bayti}})",
        "historyempty": "(veng)",
-       "history-feed-title": "Tarixê çım eştışi",
+       "history-feed-title": "Tarixê çımraviyarnayışi",
        "history-feed-description": "Wiki de tarixê çım ra viyarnayışë na perer",
        "history-feed-item-nocomment": "$1 miyanê $2i de",
        "history-feed-empty": "Pela cıgeyrayiye çıniya.\nBeno ke ena esteriya, ya zi namê cı vuriyo.\nSeba pelanê muhimanê newan [[Special:Search|cıgeyrayışê wiki de]] bıcerebne.",
        "action-writeapi": "ser nuşte API gure bike",
        "action-delete": "ena pele bestere",
        "action-deleterevision": "revizyoni besternê",
-       "action-deletelogentry": "roceka dekerdan bestern",
+       "action-deletelogentry": "qeydanê cıkewtışan bestere",
        "action-deletedhistory": "verora esteriya perrer bıvin",
        "action-browsearchive": "pelanê esterıteyan bıgeyre",
        "action-undelete": "Ena perre mesterê",
        "undelete-error-long": "hewn a kerdışê na dosyayi wexta tepiya geriyenê xeta vıraziya:\n\n$1",
        "undelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" şıma emin î dosyaya revizyonê no $2 $3 tarixi bıvini?",
        "undelete-show-file-submit": "Eya",
-       "namespace": "Namey herun:",
+       "namespace": "Heruna namey:",
        "invert": "Weçinayışi dimlaşt ke",
        "tooltip-invert": "nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê",
        "namespace_association": "Heruna namanê elaqedaran",
index 4a2e3f5..175cba5 100644 (file)
@@ -54,7 +54,8 @@
                        "Thodoris",
                        "Ftsalamp",
                        "Kostas20142",
-                       "Nikosgranturismogt"
+                       "Nikosgranturismogt",
+                       "KATRINE1992"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "tog-shownumberswatching": "Εμφάνιση του αριθμού των συνδεδεμένων χρηστών",
        "tog-oldsig": "Η τρέχουσα υπογραφή σας:",
        "tog-fancysig": "Μεταχείριση υπογραφής ως κώδικα wiki (χωρίς αυτόματο σύνδεσμο)",
-       "tog-uselivepreview": "ΧÏ\81ήÏ\83η Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83ηÏ\82 Ï\83ε Î¶Ï\89νÏ\84ανÏ\8c Ï\87Ï\81Ï\8cνο",
+       "tog-uselivepreview": "Î\95μÏ\86άνιÏ\83ηÏ\82 Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83ηÏ\82 Ï\87Ï\89Ï\81ίÏ\82 ÎµÏ\80αναÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η Ï\84ηÏ\82 Ï\83ελίδαÏ\82",
        "tog-forceeditsummary": "Να ειδοποιούμαι κατά την εισαγωγή κενής σύνοψης επεξεργασίας",
        "tog-watchlisthideown": "Απόκρυψη των επεξεργασιών μου από τη λίστα παρακολούθησης",
        "tog-watchlisthidebots": "Απόκρυψη των επεξεργασιών των bot από τη λίστα παρακολούθησης",
        "tog-watchlisthideminor": "Απόκρυψη των επεξεργασιών μικρής σημασίας από τη λίστα παρακολούθησης",
        "tog-watchlisthideliu": "Απόκρυψη επεξεργασιών συνδεδεμένων χρηστών από τη λίστα παρακολούθησης",
        "tog-watchlistreloadautomatically": "Φορτώσετε εκ νέου η λίστα παρακολούθησής αυτόματα κάθε φορά που ένα φίλτρο έχει αλλάξει (Απαιτείται JavaScript)",
+       "tog-watchlistunwatchlinks": "Προσθέσετε άμεσους συνδέσμους μη παρακολούθησης/παρακολούθησης για να παρακολουθείτε εγγραφές (απαιτείται JavaScript για την λειτουργική στάθμιση)",
        "tog-watchlisthideanons": "Απόκρυψη επεξεργασιών ανωνύμων χρηστών από τη λίστα παρακολούθησης",
        "tog-watchlisthidepatrolled": "Απόκρυψη ελεγμένων επεξεργασιών από τη λίστα παρακολούθησης",
        "tog-watchlisthidecategorization": "Απόκρυψη κατηγοριοποίησης σελίδων",
        "passwordreset-emailelement": "Όνομα χρήστη: \n$1\n\nΠροσωρινός κωδικός πρόσβασης:\n$2",
        "passwordreset-emailsentemail": "Αν αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου συνδέεται με το  λογαριασμό σας, τότε  θα σας αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για την επαναφορά του κωδικού πρόσβασης.",
        "passwordreset-emailsentusername": "Αν υπάρχει μια διεύθυνση ηλεκτρονικού ταχυδρομείου που συνδέεται με αυτό το όνομα χρήστη, τότε θα σας αποσταλεί ένα μήνυμα ηλεκτρονικού ταχυδρομείου για την επαναφορά του κωδικού πρόσβασης.",
+       "passwordreset-nocaller": "Πρέπει να γίνει   κλήση",
+       "passwordreset-nosuchcaller": "Δεν υπάρχει κλήση : $1",
+       "passwordreset-ignored": "Δεν έγινε ανάκτηση κωδικού πρόσβασης. Μήπως δεν υπήρξε προμηθευτής;",
        "passwordreset-invalidemail": "Μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
        "passwordreset-nodata": "Δεν δόθηκε όνομα χρήστη ή διεύθυνση email.",
        "changeemail": "Αλλαγή ή αφαίρεση της διεύθυνσης ηλεκτρονικού ταχυδρομείου",
        "yourtext": "Το κείμενό σας",
        "storedversion": "Αποθηκευμένη έκδοση",
        "editingold": "'''Προειδοποίηση: Επεξεργάζεστε μια παλιότερη αναθεώρηση αυτής της σελίδας.'''\nΑν την αποθηκεύσετε, όσες αλλαγές έχουν γίνει μετά από αυτή την αναθεώρηση θα χαθούν.",
+       "unicode-support-fail": "Φαίνεται πως ο περιηγητής σας δεν υποστηρίζει το Unicode. Απαιτείται η επεξεργασία σελίδων, έτσι η επεξεργασμένη σελίδα δεν αποθηκεύτηκε.",
        "yourdiff": "Διαφορές",
        "copyrightwarning": "Παρακαλούμε σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} θεωρούνται ότι δημοσιεύονται σύμφωνα με την $2 (βλ. $1 για λεπτομέρειες).\nΑν δεν επιθυμείτε τα κείμενά σας να τα επεξεργάζονται ανηλεώς άλλοι χρήστες και να τα διαδίδουν κατά βούληση, τότε να μην τα υποβάλλετε εδώ.<br />Μας υπόσχεστε επίσης ότι αυτό το γράψατε μόνοι σας ή το αντιγράψατε από κάποια ελεύθερη πηγή ως κοινό κτήμα ή κάτι ανάλογο.\n<strong>Μην υποβάλλετε δουλειά που προστατεύεται από πνευματικά δικαιώματα χωρίς άδεια!</strong>",
        "copyrightwarning2": "Σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} μπορούν να υποστούν επεξεργασία, να αλλαχθούν, ή να αφαιρεθούν από άλλους συνεισφέροντες. Αν δεν θέλετε τα γραπτά σας να υποστούν επεξεργασία κατά βούληση, τότε μην τα τοποθετήσετε σε αυτό το χώρο.<br />\nΕπίσης μας υπόσχεστε πως ό,τι γράφετε είναι δικό σας, ή αντιγραμμένο από μια πηγή που είναι κοινό κτήμα, ή μια παρόμοια ελεύθερη πηγή (δείτε $1 για λεπτομέρειες).\n'''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''",
        "contentmodelediterror": "Δεν μπορείτε να επεξεργαστείτε αυτή την αναθεώρηση, γιατί το περιεχόμενό του μοντέλου του  είναι <code>$1</code>, το οποίο διαφέρει από το τρέχον περιεχόμενο μοντέλο της σελίδας <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Προειδοποίηση: Ξαναδημιουργείτε μια σελίδα που είχε προηγουμένως διαγραφεί.'''\n\nΘα πρέπει να σκεφτείτε σοβαρά αν είναι σωστό να συνεχίσετε να επεξεργάζεστε αυτή τη σελίδα.\nΟι καταγραφές διαγραφών και μετακινήσεων παρέχονται εδώ για διευκόλυνση:",
        "moveddeleted-notice": "Αυτή η σελίδα έχει διαγραφεί.\nΤο αρχείο καταγραφών διαγραφών και μετακινήσεων της σελίδας παρέχεται παρακάτω για αναφορά.",
-       "moveddeleted-notice-recent": "ΣÏ\85γγνÏ\8eμη, Î· Ï\83ελίδα Î­Ï\87ει Î´Î¹Î±Î³Ï\81αÏ\86εί Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84α (μέÏ\83α Ï\83Ï\84ιÏ\82 Ï\84ελεÏ\85Ï\84αίεÏ\82 24 Ï\8eÏ\81εÏ\82).\nÎ\97 Î´Î¹Î±Î³Ï\81αÏ\86ή ÎºÎ±Î¹ Î¼ÎµÏ\84ακίνηÏ\83η Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 ÎºÎ±Ï\84αγÏ\81αÏ\86ής της σελίδας παρέχεται παρακάτω για αναφορά.",
+       "moveddeleted-notice-recent": "ΣÏ\85γγνÏ\8eμη, Î· Ï\83ελίδα Î­Ï\87ει Î´Î¹Î±Î³Ï\81αÏ\86εί Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84α (μέÏ\83α Ï\83Ï\84ιÏ\82 Ï\84ελεÏ\85Ï\84αίεÏ\82 24 Ï\8eÏ\81εÏ\82).\nΤο Î±Ï\81Ï\87είο ÎºÎ±Ï\84αγÏ\81αÏ\86ήÏ\82 Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82, Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82, ÎºÎ±Î¹ Î¼ÎµÏ\84ακίνηÏ\83ης της σελίδας παρέχεται παρακάτω για αναφορά.",
        "log-fulllog": "Εμφάνιση πλήρους αρχείου",
        "edit-hook-aborted": "Η επεξεργασία ματαιώθηκε από το hook.\nΔεν έδωσε εξήγηση.",
        "edit-gone-missing": "Δεν ήταν εφικτό να ενημερωθεί η σελίδα.\nΦαίνεται πως έχει διαγραφεί.",
        "invalid-content-data": "Μη έγκυρα δεδομένα περιεχομένου",
        "content-not-allowed-here": "Το περιεχόμενο «$1» δεν επιτρέπεται στη σελίδα [[$2]]",
        "editwarning-warning": "Αφήνοντας αυτή τη σελίδα μπορεί να έχει ως συνέπεια να χαθούν κάποιες αλλαγές που έχετε κάνει.\nΑν έχετε συνδεθεί, μπορείτε να απενεργοποιήσετε αυτή την προειδοποίηση στην  ενότητα \"{{int:prefs-editing}}\"  των προτιμήσεών σας.",
+       "editpage-invalidcontentmodel-title": "Δεν υποστηρίχτηκε το μοντέλο περιεχομένου",
+       "editpage-invalidcontentmodel-text": "Το μοντέλο ''$1'' δεν υποστηρίχτηκε.",
        "editpage-notsupportedcontentformat-title": "Μορφή περιεχομένου που δεν υποστηρίζεται",
        "editpage-notsupportedcontentformat-text": "Η μορφή του περιεχομένου $1 δεν υποστηρίζεται από το μοντέλο περιεχομένου $2.",
        "content-model-wikitext": "κείμενο wiki",
        "content-model-css": "CSS",
        "content-json-empty-object": "Κενό αντικείμενο",
        "content-json-empty-array": "Κενός πίνακα",
+       "deprecated-self-close-category": "Σελίδες που χρησιμοποιούν μη έγκυρα tags HTML που κλείνουν αυτόματα",
+       "deprecated-self-close-category-desc": "Η σελίδα περιέχει HTML tags που κλείνουν αυτόματα, όπως <code>&lt;b/></code> ή <code>&lt;span/></code>.  Η λειτουργία τους θα αλλάξει σύντομα για να συνάδει με τις προδιαγραφές HTML5, για αυτό και η χρήση τους στο wikitext  υποτιμήθηκε.",
        "duplicate-args-warning": "<strong>Προειδοποίηση:</strong> Η σελίδα [[:$1]] καλεί το πρότυπο [[:$2]] με περισσότερες από μία τιμές για την παράμετρο \"$3\". Μόνο η τελευταία παρεχόμενη τιμή θα χρησιμοποιηθεί.",
        "duplicate-args-category": "Σελίδες που χρησιμοποιούν διπλές παραμέτρους σε κλήσεις προτύπων",
        "duplicate-args-category-desc": "Η σελίδα περιέχει κλήσεις πρότυπων που χρησιμοποιούν διπλές παραμέτρους, όπως <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "post-expand-template-argument-warning": "'''Προειδοποίηση:''' Αυτή η σελίδα περιέχει τουλάχιστον μια παράμετρο προτύπου η οποία έχει πολύ μεγάλο μέγεθος ανάπτυξης.\nΑυτές οι παράμετροι έχουν παραλειφθεί.",
        "post-expand-template-argument-category": "Σελίδες που περιέχουν παραλειπόμενες παραμέτρους προτύπων",
        "parser-template-loop-warning": "Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]",
+       "template-loop-category": "Μη προσβάσιμες σελίδες",
+       "template-loop-category-desc": "Η σελίδα δεν είναι προσβάσιμη, πχ ένα πρότυπο αναδρομικό",
+       "template-loop-warning": "<strong>Προειδοποίηση: </strong> Οι αναδρομές σε αυτήν την σελίδα {{:$1}}που μπλοκάρει το μοντέλο (σαν ατέλειωτη αναδρομική κλήση).",
        "parser-template-recursion-depth-warning": "Το όριο του μάκρους της αναδρομής του πρότυπου έχει ξεπεραστεί ($1)",
        "language-converter-depth-warning": "Το όριο βάθους του μετατροπέα γλώσσας έχει ξεπεραστεί ($1)",
        "node-count-exceeded-category": "Σελίδες υπέρβασης του αριθμού κόμβων",
        "mergehistory-fail-bad-timestamp": "Η χρονική σήμανση δεν είναι έγκυρη.",
        "mergehistory-fail-invalid-source": "Η πηγή σελίδας δεν είναι έγκυρη.",
        "mergehistory-fail-invalid-dest": "Η σελίδα προορισμού δεν είναι έγκυρη.",
+       "mergehistory-fail-no-change": "Η συγχώνευση του ιστορικού δεν συγχώνευσε επαναλήψεις. Παρακαλώ ελέγξετε ξανά την σελίδα και τις χρονικές παραμέτρους.",
        "mergehistory-fail-permission": "Μη επαρκή δικαιώματα για τη συγχώνευση του ιστορικού.",
        "mergehistory-fail-self-merge": "Η πηγή και ο προορισμός των σελίδων είναι ο ίδιος.",
+       "mergehistory-fail-timestamps-overlap": "Οι αρχικές επαναλήψεις επικαλύπτουν ή ακολουθούν μετά τις επαναλήψεις.",
        "mergehistory-fail-toobig": "Δεν είναι δυνατό να πραγματοποιηθεί η συγχώνευση ιστορικών, καθώς πάνω από $1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} θα μετακινούνταν.",
        "mergehistory-no-source": "Η σελίδα πηγής $1 δεν υπάρχει.",
        "mergehistory-no-destination": "Η σελίδα προορισμού $1 δεν υπάρχει.",
        "search-file-match": "(ταιριάζει με το περιεχόμενο του αρχείου)",
        "search-suggest": "Μήπως εννοούσατε: $1",
        "search-rewritten": "Εμφανίζονται αποτελέσματα για $1. Εναλλακτικά αναζητήστε για $2.",
-       "search-interwiki-caption": "Αδελφικά εγχειρήματα",
+       "search-interwiki-caption": "Αποτελέσματα από αδελφικά εγχειρήματα",
        "search-interwiki-default": "$1 αποτελέσματα:",
        "search-interwiki-more": "(περισσότερα)",
        "search-interwiki-more-results": "περισσότερα αποτελέσματα",
        "timezoneregion-europe": "Ευρώπη",
        "timezoneregion-indian": "Ινδικός Ωκεανός",
        "timezoneregion-pacific": "Ειρηνικός Ωκεανός",
-       "allowemail": "Ενεργοποίηση παραλαβής μηνύματος ηλεκτρονικού ταχυδρομείου από άλλους χρήστες",
+       "allowemail": "Να επιτρέπεται σε άλλους χρήστες να μου στέλνουν email",
+       "email-blacklist-label": "Απαγορεύστε σε αυτούς τους χρήστες να μου στέλνουν email:",
        "prefs-searchoptions": "Αναζήτηση",
        "prefs-namespaces": "Περιοχές ονομάτων",
        "default": "προεπιλογή",
        "prefs-editor": "Συντάκτης",
        "prefs-preview": "Προεπισκόπηση",
        "prefs-advancedrc": "Προηγμένες επιλογές",
+       "prefs-opt-out": "Optar por no los mejoramientos",
        "prefs-advancedrendering": "Προηγμένες επιλογές",
        "prefs-advancedsearchoptions": "Προηγμένες επιλογές",
        "prefs-advancedwatchlist": "Προηγμένες επιλογές",
        "userrights-user-editname": "Δηλώστε όνομα χρήστη:",
        "editusergroup": "Φόρτωση ομάδων χρηστών",
        "editinguser": "Αλλαγή δικαιωμάτων χρήστη {{GENDER:$1|του χρήστη|της χρήστριας}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Ver a los derechos del usuario {{GENDER:$1|user}} <strong>{{Usuario:$1|$1}}",
        "userrights-editusergroup": "Επεξεργασία ομάδων χρηστών",
+       "userrights-viewusergroup": "Ver a los grupos {{GENDER: 1|user}}",
        "saveusergroups": "Αποθήκευση {{GENDER:$1|ομάδων}}  χρηστών",
        "userrights-groupsmember": "Μέλος της ομάδας:",
        "userrights-groupsmember-auto": "Αυτονόητο μέλος του:",
        "userrights-expiry-options": "1 ημέρα:1 day,1 εβδομάδα:1 week,1 μήνας:1 month,3 μήνες:3 months,6 μήνες:6 months,1 έτος:1 year",
        "userrights-invalid-expiry": "Ο χρόνος λήξης για την ομάδα «$1» δεν είναι έγκυρος.",
        "userrights-expiry-in-past": "Ο χρόνος λήξης για την ομάδα «$1» είναι στο παρελθόν.",
+       "userrights-cannot-shorten-expiry": "No puede determinar a la expiracion de la participacion al grupo ''$1''. Solamente los usuarios que tienen permiso de agregar y remover este grupo pueden determinar el tiempo de",
        "userrights-conflict": "Σύγκρουση αλλαγών στα δικαιώματα χρήστη! Παρακαλούμε επανεξετάστε και επικυρώστε τις αλλαγές σας.",
        "group": "Ομάδα:",
        "group-user": "Χρήστες",
        "recentchanges-legend": "Επιλογές πρόσφατων αλλαγών",
        "recentchanges-summary": "Παρακολουθήστε τις πιο πρόσφατες αλλαγές στο wiki σε αυτή τη σελίδα.",
        "recentchanges-noresult": "Χωρίς αλλαγές κατά τη διάρκεια της συγκεκριμένης χρονικής περιόδου, με αυτά τα κριτήρια.",
+       "recentchanges-timeout": "Ο χρόνος της αναζήτησης τελείωσε. Μπορεί να θέλετε να δοκιμάσετε διαφορετικές παραμέτρους αναζήτησης.",
+       "recentchanges-network": "Λόγω ενός τεχνικού λάθους, δεν μπόρεσαν να προβληθούν τα αποτελέσματα. Παρακαλώ προσπαθήστε να ανανεώσετε την σελίδα.",
        "recentchanges-feed-description": "Παρακολούθηση των πιο πρόσφατων αλλαγών στο wiki σε αυτή τη ροή.",
        "recentchanges-label-newpage": "Αυτή η επεξεργασία δημιούργησε μια νέα σελίδα",
        "recentchanges-label-minor": "Αυτή είναι μια μικροεπεξεργασία",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Προβολή",
+       "rcfilters-tag-remove": "Διαγράψετε το '$1'",
+       "rcfilters-other-review-tools": "Άλλα εργαλεία ελέγχου",
+       "rcfilters-group-results-by-page": "Ομαδοποίηση αποτελεσμάτων ανά σελίδα",
+       "rcfilters-grouping-title": "Ομαδοποίηση",
        "rcfilters-activefilters": "Ενεργά φίλτρα",
        "rcfilters-advancedfilters": "Σύνθετα Φίλτρα",
        "rcfilters-limit-title": "Αλλαγές για εμφάνιση",
+       "rcfilters-limit-shownum": "Εμφάνιση {{{{PLURAL:$1|τελευταίας επεξεργασίας|τελευταίων $1 επεξεργασιών}}",
        "rcfilters-days-title": "Πρόσφατες ημέρες",
        "rcfilters-hours-title": "Πρόσφατες ώρες",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|μέρα|μέρες}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ώρα|ώρες}}",
+       "rcfilters-highlighted-filters-list": "Επισημασμένες: $1",
        "rcfilters-quickfilters": "Αποθηκευμένα φίλτρα",
        "rcfilters-savedqueries-defaultlabel": "Αποθηκευμένα φίλτρα",
        "rcfilters-savedqueries-rename": "Μετονομασία",
        "rcfilters-savedqueries-setdefault": "Ορισμός ως προεπιλογή",
        "rcfilters-savedqueries-remove": "Αφαίρεση",
        "rcfilters-savedqueries-new-name-label": "Όνομα",
+       "rcfilters-savedqueries-apply-label": "Δημιουργία φίλτρου",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Δημιουργία προεπιλεγμένου φίλτρου",
        "rcfilters-savedqueries-cancel-label": "Ακύρωση",
+       "rcfilters-savedqueries-add-new-title": "Αποθήκευση τρεχουσών ρυθμίσεων φίλτρων",
+       "rcfilters-savedqueries-already-saved": "Αυτά τα φίλτρα έχουν ήδη αποθηκευτεί. Αλλάξετε τις παραμέτρους για να δημιουργήσετε ένα νέο Αποθηκευμένο Φίλτρο.",
        "rcfilters-restore-default-filters": "Επαναφορά προεπιλεγμένων φίλτρων",
        "rcfilters-clear-all-filters": "Εκκαθάριση όλων των φίλτρων",
+       "rcfilters-show-new-changes": "Προβολή νεότερων αλλαγών",
        "rcfilters-search-placeholder": "Φιλτράρισμα πρόσφατων αλλαγών (περιηγηθείτε ή αρχίστε να πληκτρολογείτε)",
        "rcfilters-invalid-filter": "Μη έγκυρο φίλτρο",
        "rcfilters-empty-filter": "Χωρίς ενεργά φίλτρα. Εμφανίζονται όλες οι συνεισφορές.",
        "rcfilters-filterlist-title": "Φίλτρα",
-       "rcfilters-filterlist-whatsthis": "Τι ÎµÎ¯Î½Î±Î¹ Î±Ï\85Ï\84Ï\8c;",
-       "rcfilters-filterlist-feedbacklink": "Î\94Ï\8eÏ\83Ï\84ε Î±Î½Î±Ï\84Ï\81οÏ\86οδÏ\8cÏ\84ηÏ\83η Î³Î¹Î± Ï\84α Î½Î­Î± Ï\86ίλÏ\84Ï\81α (beta)",
+       "rcfilters-filterlist-whatsthis": "ΠÏ\89Ï\82 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γοÏ\8dν Î±Ï\85Ï\84ά;",
+       "rcfilters-filterlist-feedbacklink": "ΠείÏ\84ε Î¼Î±Ï\82 Ï\84ι Ï\83κέÏ\86Ï\84εÏ\83Ï\84ε Î³Î¹Î± Î±Ï\85Ï\84ά Ï\84α (νέα) ÎµÏ\81γαλεία Ï\86ιλÏ\84Ï\81αÏ\81ίÏ\83μαÏ\84οÏ\82",
        "rcfilters-highlightbutton-title": "Επισήμανση αποτελεσμάτων",
        "rcfilters-highlightmenu-title": "Επιλέξτε ένα χρώμα",
        "rcfilters-highlightmenu-help": "Επιλέξτε ένα χρώμα για να επισημάνετε αυτή την ιδιότητα",
        "rcfilters-filter-editsbyself-description": "Οι δικές σας συνεισφορές.",
        "rcfilters-filter-editsbyother-label": "Αλλαγές από άλλους",
        "rcfilters-filter-editsbyother-description": "Όλες οι αλλαγές εκτός από τις δικές σας.",
-       "rcfilters-filtergroup-userExpLevel": "Επίπεδο εμπειρίας (για εγγεγραμμένους χρήστες μόνο)",
+       "rcfilters-filtergroup-userExpLevel": "Εγγραφή χρήστη και εμπειρία",
        "rcfilters-filter-user-experience-level-registered-label": "Εγγεγραμμένοι",
        "rcfilters-filter-user-experience-level-registered-description": "Συνδεδεμένοι συντάκτες.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Μη εγγεγραμμένοι",
        "rcfilters-filter-user-experience-level-unregistered-description": "Συντάκτες που δεν είναι συνδεδεμένοι.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Νεοφερμένοι",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Î\9bιγότερες από 10 επεξεργασίες και 4 ημέρες δραστηριότητας.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Î\95γγεγÏ\81αμμένοι Ï\83Ï\85νÏ\84άκÏ\84εÏ\82 Î¼Îµ Î»ιγότερες από 10 επεξεργασίες και 4 ημέρες δραστηριότητας.",
        "rcfilters-filter-user-experience-level-learner-label": "Μαθητευόμενοι",
-       "rcfilters-filter-user-experience-level-learner-description": "ΠεÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Î·Î¼Î­Ï\81εÏ\82 Î´Ï\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 ÎºÎ±Î¹ ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82 Î±Ï\80Ï\8c Ï\84οÏ\85Ï\82 Â«Î½ÎµÎ¿Ï\86εÏ\81μένοÏ\85Ï\82» Î±Î»Î»Î¬ Î»Î¹Î³Ï\8cÏ\84εÏ\81εÏ\82 Î±Ï\80Ï\8c Ï\84οÏ\85Ï\82 Â«Î­Î¼Ï\80ειÏ\81οÏ\85Ï\82 Ï\87Ï\81ήÏ\83Ï\84εÏ\82».",
+       "rcfilters-filter-user-experience-level-learner-description": "Î\95γγεγÏ\81αμμένοι Ï\83Ï\85νÏ\84άκÏ\84εÏ\82 Ï\84Ï\89ν Î¿Ï\80οίÏ\89ν Î· ÎµÎ¼Ï\80ειÏ\81ία ÎµÎ¼Ï\80ίÏ\80Ï\84ει ÎºÎ¬Ï\80οÏ\85 Î¼ÎµÏ\84αξÏ\8d Â«Î½ÎµÎ¿Ï\86εÏ\81μένοÏ\85» ÎºÎ±Î¹ Â«Î­Î¼Ï\80ειÏ\81οÏ\85 Ï\87Ï\81ήÏ\83Ï\84η».",
        "rcfilters-filter-user-experience-level-experienced-label": "Έμπειροι χρήστες",
-       "rcfilters-filter-user-experience-level-experienced-description": "ΠεÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Î±Ï\80Ï\8c 30 Î·Î¼Î­Ï\81εÏ\82 Î´Ï\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 ÎºÎ±Î¹ 500 Î±Î»Î»Î±Î³Î­ς.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Î\95γγεγÏ\81αμμένοι Ï\83Ï\85νÏ\84άκÏ\84εÏ\82 Î¼Îµ Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Î±Ï\80Ï\8c 500 ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82 ÎºÎ±Î¹ 30 Î·Î¼Î­Ï\81εÏ\82 Î´Ï\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84ας.",
        "rcfilters-filtergroup-automated": "Αυτοματοποιημένες συνεισφορές",
        "rcfilters-filter-bots-label": "Ρομπότ",
        "rcfilters-filter-bots-description": "Επεξεργασίες που έγιναν από αυτοματοποιημένα εργαλεία.",
        "rcfilters-filter-humans-label": "Ανθρώπινες (όχι από ρομπότ)",
        "rcfilters-filter-humans-description": "Επεξεργασίες που έγιναν από ανθρώπους συντάκτες.",
+       "rcfilters-filter-patrolled-label": "Ελεγμένες",
        "rcfilters-filtergroup-significance": "Σημαντικότητα",
        "rcfilters-filter-minor-label": "Μικροεπεξεργασίες",
        "rcfilters-filter-minor-description": "Επεξεργασίες που ο συντάκτης χαρακτήρισε ως μικροεπεξεργασίες.",
        "rcfilters-filter-major-description": "Επεξεργασίες μη χαρακτηρισμένες ως μικροεπεξεργασίες.",
        "rcfilters-filtergroup-changetype": "Τύπος αλλαγής",
        "rcfilters-filter-pageedits-label": "Επεξεργασίες σελίδων",
-       "rcfilters-filter-pageedits-description": "Επεξεργασίες σε περιεχόμενο του wiki, συζητήσεις, περιγραφές κατηγοριών....",
+       "rcfilters-filter-pageedits-description": "Επεξεργασίες σε περιεχόμενο του wiki, συζητήσεις, περιγραφές κατηγοριών",
        "rcfilters-filter-newpages-label": "Δημιουργίες σελίδων",
        "rcfilters-filter-newpages-description": "Επεξεργασίες που δημιουργούν νέες σελίδες.",
        "rcfilters-filter-categorization-label": "Αλλαγές κατηγοριών",
        "rcfilters-filter-categorization-description": "Καταγραφές σελίδων που προστίθενται ή αφαιρούνται από κατηγορίες.",
        "rcfilters-filter-logactions-label": "Καταγραφόμενες ενέργειες",
-       "rcfilters-filter-logactions-description": "Διαχειριστικές ενέργειες, δημιουργίες λογαριασμών, διαγραφές σελίδων, ανεβάσματα αρχείων....",
+       "rcfilters-filter-logactions-description": "Διαχειριστικές ενέργειες, δημιουργίες λογαριασμών, διαγραφές σελίδων, ανεβάσματα αρχείων…",
+       "rcfilters-exclude-button-off": "Εξαίρεση επιλεγμένων",
+       "rcfilters-view-tags": "Επεξεργασίες με ετικέτες",
+       "rcfilters-view-namespaces-tooltip": "Φιλτράρισμα αποτελεσμάτων κατά ονοματοχώρο",
        "rcnotefrom": "Παρακάτω {{PLURAL:$5|είναι η αλλαγή|είναι οι αλλαγές}} από <strong>$3, $4</strong> (έως <strong>$1</strong> που εμφανίζεται).",
        "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2",
        "rcshowhideminor": "$1 μικροεπεξεργασιών",
        "uploadstash-errclear": "Η εκκαθάριση των αρχείων απέτυχε.",
        "uploadstash-refresh": "Ανανεώσετε τη λίστα των αρχείων",
        "uploadstash-thumbnail": "προβολή μικρογραφίας",
+       "uploadstash-bad-path": "Δεν υπάρχει τρόπος",
+       "uploadstash-bad-path-invalid": "Ο τρόπος δεν είναι έγκυρος.",
+       "uploadstash-bad-path-unknown-type": "Άγνωστος τύπος ''$1''.",
+       "uploadstash-bad-path-bad-format": "Ο κωδικός ''$1' δεν έχει τον κατάλληλο τύπο.",
+       "uploadstash-file-not-found-no-thumb": "Δεν μπόρεσε να αποκτήσει το ''thumbnail''.",
+       "uploadstash-file-not-found-no-object": "Δεν μπόρεσε να δημιουργήσει τοπικό φάκελλο ''thumbnail''.",
+       "uploadstash-file-not-found-no-remote-thumb": "Η προσκόμιση του ''thumnail'' απέτυχε:$1\nURL=$2",
+       "uploadstash-file-not-found-missing-content-type": "Λείπει τίτλος περιεχομένου",
+       "uploadstash-file-not-found-not-exists": "Δεν μπορεί να βρει τον τρόπο, ή όχι έναν κανονικό φάκελλο.",
+       "uploadstash-file-too-large": "Δεν δέχεται έναν φάκελλο μεγαλύτερο από $1 bytes.",
+       "uploadstash-not-logged-in": "Δεν υπάρχει συνδεδεμένος χρήστης,οι φάκελλοι πρέπει να ανήκουν σε χρήστες.",
+       "uploadstash-wrong-owner": "Αυτός ο φάκελλος ($1) δεν ανήκει στον παρόντα χρήστη.",
+       "uploadstash-no-such-key": "Δε υπάρχει τέτοιος κωδικός ($1), δεν μπορεί να αφαιρέσει.",
+       "uploadstash-no-extension": "Καμία προέκταση",
+       "uploadstash-zero-length": "Ο φάκελλος είναι κενός.",
        "invalid-chunk-offset": "Άκυρο κομμάτι όφσετ",
        "img-auth-accessdenied": "Δεν επετράπη η πρόσβαση",
        "img-auth-nopathinfo": "Λείπει το PATH_INFO.\nΟ διακομιστής σας δεν είναι ρυθμισμένος για να περάσει αυτές τις πληροφορίες.\nΜπορεί να είναι βασισμένος σε CGI και να μην υποστηρίζει img_atuh.\nΔείτε https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "version-libraries-description": "Περιγραφή",
        "version-libraries-authors": "Δημιουργοί",
        "redirect": "Ανακατεύθυνση κατά αρχείο, χρήστη, σελίδα, αναγνωριστικό αναθεώρησης ή αρχείο καταγραφής ID",
+       "redirect-summary": "Αυτή η ειδική σελίδα ανακατευθύνει προς ένα αρχείο (αν δοθεί όνομα αρχείου), μια σελίδα (αν δοθεί ID αναθεώρησης ή ID σελίδας), μια σελίδα χρήστη (αν δοθεί αριθμητικό ID χρήστη), ή μια καταχώρηση μητρώου (αν δοθεί ID καταχώρησης). Χρήση: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Μετάβαση",
        "redirect-lookup": "Αναζήτηση:",
        "redirect-value": "Τιμή:",
index 282b906..5083bed 100644 (file)
        "nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
        "nouserspecified": "You have to specify a username.",
        "login-userblocked": "This user is blocked. Login not allowed.",
-       "wrongpassword": "Incorrect password entered.\nPlease try again.",
+       "wrongpassword": "Incorrect username or password entered.\nPlease try again.",
        "wrongpasswordempty": "Password entered was blank.\nPlease try again.",
        "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
        "passwordtoolong": "Passwords cannot be longer than {{PLURAL:$1|1 character|$1 characters}}.",
        "anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
        "missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"$1\" again, your edit will be saved without one.",
        "selfredirect": "<strong>Warning:</strong> You are redirecting this page to itself.\nYou may have specified the wrong target for the redirect, or you may be editing the wrong page.\nIf you click \"$1\" again, the redirect will be created anyway.",
-       "missingcommenttext": "Please enter a comment below.",
+       "missingcommenttext": "Please enter a comment.",
        "missingcommentheader": "<strong>Reminder:</strong> You have not provided a subject for this comment.\nIf you click \"$1\" again, your edit will be saved without one.",
        "summary-preview": "Preview of edit summary:",
        "subject-preview": "Preview of subject:",
        "searchall": "all",
        "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
        "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
-       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1  $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "There were no results matching the query.",
        "search-nonefound-thiswiki": "There were no results matching the query in this site.",
        "powersearch-legend": "Advanced search",
        "timezoneregion-europe": "Europe",
        "timezoneregion-indian": "Indian Ocean",
        "timezoneregion-pacific": "Pacific Ocean",
-       "allowemail": "Enable email from other users",
-       "email-blacklist-label": "Prohibit these users from sending emails to me:",
+       "allowemail": "Allow other users to email me",
+       "email-blacklist-label": "Prohibit these users from emailing me:",
        "prefs-searchoptions": "Search",
        "prefs-namespaces": "Namespaces",
        "default": "default",
        "recentchanges-summary": "Track the most recent changes to the wiki on this page.",
        "recentchangestext": "-",
        "recentchanges-noresult": "No changes during the given period match these criteria.",
+       "recentchanges-timeout": "This search has timed out. You may wish to try different search parameters.",
+       "recentchanges-network": "Due to a technical error, no results could be loaded. Please try refreshing the page.",
        "recentchanges-feed-description": "Track the most recent changes to the wiki in this feed.",
        "recentchanges-label-newpage": "This edit created a new page",
        "recentchanges-label-minor": "This is a minor edit",
        "recentchanges-submit": "Show",
        "rcfilters-tag-remove": "Remove '$1'",
        "rcfilters-legend-heading": "<strong>List of abbreviations:</strong>",
-       "rcfilters-other-review-tools": "<strong>Other review tools</strong>",
+       "rcfilters-other-review-tools": "Other review tools",
        "rcfilters-group-results-by-page": "Group results by page",
        "rcfilters-grouping-title": "Grouping",
        "rcfilters-activefilters": "Active filters",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hour|hours}}",
        "rcfilters-highlighted-filters-list": "Highlighted: $1",
        "rcfilters-quickfilters": "Saved filters",
-       "rcfilters-quickfilters-placeholder-title": "No links saved yet",
+       "rcfilters-quickfilters-placeholder-title": "No filters saved yet",
        "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active Filter area, below.",
        "rcfilters-savedqueries-defaultlabel": "Saved filters",
        "rcfilters-savedqueries-rename": "Rename",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Create default filter",
        "rcfilters-savedqueries-cancel-label": "Cancel",
        "rcfilters-savedqueries-add-new-title": "Save current filter settings",
+       "rcfilters-savedqueries-already-saved": "These filters are already saved. Change your settings to create a new Saved Filter.",
        "rcfilters-restore-default-filters": "Restore default filters",
        "rcfilters-clear-all-filters": "Clear all filters",
        "rcfilters-show-new-changes": "View newest changes",
-       "rcfilters-search-placeholder": "Filter recent changes (browse or start typing)",
+       "rcfilters-search-placeholder": "Filter changes (use menu or search for filter name)",
        "rcfilters-invalid-filter": "Invalid filter",
        "rcfilters-empty-filter": "No active filters. All contributions are shown.",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filter-user-experience-level-unregistered-label": "Unregistered",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editors who aren't logged-in.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Newcomers",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registered editors with fewer than 10 edits and 4 days of activity.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registered editors who have fewer than 10 edits or 4 days of activity.",
        "rcfilters-filter-user-experience-level-learner-label": "Learners",
        "rcfilters-filter-user-experience-level-learner-description": "Registered editors whose experience falls between \"Newcomers\" and \"Experienced users.\"",
        "rcfilters-filter-user-experience-level-experienced-label": "Experienced users",
        "rcfilters-tag-prefix-tags": "#$1",
        "rcfilters-exclude-button-off": "Exclude selected",
        "rcfilters-exclude-button-on": "Excluding selected",
-       "rcfilters-view-advanced-filters-label": "Advanced filters",
        "rcfilters-view-tags": "Tagged edits",
        "rcfilters-view-namespaces-tooltip": "Filter results by namespace",
        "rcfilters-view-tags-tooltip": "Filter results using edit tags",
        "rcfilters-view-return-to-default-tooltip": "Return to main filter menu",
-       "rcfilters-view-tags-help-icon-tooltip": "Learn more about Tagged Edits",
+       "rcfilters-view-tags-help-icon-tooltip": "Learn more about Tagged edits",
        "rcfilters-liveupdates-button": "Live updates",
        "rcfilters-liveupdates-button-title-on": "Turn off live updates",
        "rcfilters-liveupdates-button-title-off": "Display new changes as they happen",
        "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
        "uploaded-hostile-svg": "Found unsafe CSS in the style element of uploaded SVG file.",
        "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
-       "uploaded-href-attribute-svg": "href attributes in SVG files are only allowed to link to http:// or https:// targets, found <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> elements can only link (href) to data: (embedded file), http:// or https://, or fragment (#, same-document) targets.  For other elements, such as <image>, only data: and fragment are allowed.  Try embedding images when exporting your SVG.  Found <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Found href to unsafe data: URI target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-animate-svg": "Found \"animate\" tag that might be changing href, using the \"from\" attribute <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-setting-event-handler-svg": "Setting event-handler attributes is blocked, found <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploadstash-refresh": "Refresh the list of files",
        "uploadstash-thumbnail": "view thumbnail",
        "uploadstash-exception": "Could not store upload in the stash ($1): \"$2\".",
+       "uploadstash-bad-path": "Path doesn't exist.",
+       "uploadstash-bad-path-invalid": "Path is not valid.",
+       "uploadstash-bad-path-unknown-type": "Unknown type \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Unrecognized thumb name.",
+       "uploadstash-bad-path-no-handler": "No handler found for mime $1 of file $2.",
+       "uploadstash-bad-path-bad-format": "Key \"$1\" is not in a proper format.",
+       "uploadstash-file-not-found": "Key \"$1\" not found in stash.",
+       "uploadstash-file-not-found-no-thumb": "Could not obtain thumbnail.",
+       "uploadstash-file-not-found-no-local-path": "No local path for scaled item.",
+       "uploadstash-file-not-found-no-object": "Couldn't create local file object for thumbnail.",
+       "uploadstash-file-not-found-no-remote-thumb": "Fetching thumbnail failed: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Missing content-type header.",
+       "uploadstash-file-not-found-not-exists": "Cannot find path, or not a plain file.",
+       "uploadstash-file-too-large": "Cannot serve a file larger than $1 bytes.",
+       "uploadstash-not-logged-in": "No user is logged in, files must belong to users.",
+       "uploadstash-wrong-owner": "This file ($1) doesn't belong to the current user.",
+       "uploadstash-no-such-key": "No such key ($1), cannot remove.",
+       "uploadstash-no-extension": "Extension is null.",
+       "uploadstash-zero-length": "File is zero length.",
        "invalid-chunk-offset": "Invalid chunk offset",
        "img-auth-accessdenied": "Access denied",
        "img-auth-nopathinfo": "Missing PATH_INFO.\nYour server is not set up to pass this information.\nIt may be CGI-based and cannot support img_auth.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "magiclink-tracking-pmid-desc": "This page uses PMID magic links. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] on how to migrate.",
        "magiclink-tracking-isbn": "Pages using ISBN magic links",
        "magiclink-tracking-isbn-desc": "This page uses ISBN magic links. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] on how to migrate.",
-       "rfcurl": "//tools.ietf.org/html/rfc$1",
+       "rfcurl": "https://tools.ietf.org/html/rfc$1",
        "pubmedurl": "//www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract",
        "specialloguserlabel": "Performer:",
        "speciallogtitlelabel": "Target (title or {{ns:user}}:username for user):",
index 2b63f64..391fbbe 100644 (file)
                        "Jnistal12",
                        "Javier",
                        "Luisangelrg",
-                       "Pierpao"
+                       "Pierpao",
+                       "Ohlila",
+                       "KATRINE1992"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "tog-minordefault": "Marcar todas las ediciones como menores de manera predeterminada",
        "tog-previewontop": "Mostrar previsualización antes del cuadro de edición",
        "tog-previewonfirst": "Mostrar previsualización en la primera edición",
-       "tog-enotifwatchlistpages": "Enviarme un correo electrónico cuando se modifique una página o un archivo de mi lista de seguimiento",
-       "tog-enotifusertalkpages": "Enviarme un mensaje de correo electrónico cuando se modifique mi página de discusión",
+       "tog-enotifwatchlistpages": "Enviarme un mensaje de correo cuando se modifique una página o un archivo de mi lista de seguimiento",
+       "tog-enotifusertalkpages": "Enviarme un mensaje de correo cuando se modifique mi página de discusión",
        "tog-enotifminoredits": "Notificarme también por correo electrónico los cambios menores de las páginas y archivos",
        "tog-enotifrevealaddr": "Revelar mi dirección de correo electrónico en los correos de notificación",
        "tog-shownumberswatching": "Mostrar el número de usuarios que la vigilan",
        "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos de la lista de seguimiento",
        "tog-watchlisthidepatrolled": "Ocultar las ediciones verificadas de la lista de seguimiento",
        "tog-watchlisthidecategorization": "Ocultar la categorización de páginas",
-       "tog-ccmeonemails": "Recibir copias de los correos electrónicos que envíe a otros usuarios",
+       "tog-ccmeonemails": "Recibir copias de los mensajes de correo que envíe a otros usuarios",
        "tog-diffonly": "No mostrar el contenido de la página debajo de la lista de diferencias",
        "tog-showhiddencats": "Mostrar categorías ocultas",
        "tog-norollbackdiff": "No mostrar la lista de diferencias después de revertir",
        "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> en 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, usa [https://translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "editinginterface": "<strong>Advertencia:</strong> estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
-       "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [https://translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [https://translatewiki.net/ translatewiki.net], el proyecto de regionalización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida contra edición porque está transcluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} con la opción de «cascada» activa:\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.",
        "previewconflict": "Esta previsualización muestra cómo aparecerá el texto en el área de edición superior una vez guardados los cambios.",
        "session_fail_preview": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.\n\nPuede que se haya cerrado tu sesión. <strong> Verifica que hayas accedido e inténtalo de nuevo</strong>.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder. Y verifica que tu navegador permita las cookies de este sitio.",
        "session_fail_preview_html": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de datos de sesión.\n\n<em>La previsualización está oculta como prevención frente a ataques JavaScript, puesto que este wiki tiene habilitado el HTML en bruto.</em>\n\n<strong>Si se trata de un intento legítimo de modificación, inténtalo de nuevo.</strong>\nSi aún así no funcionase, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder, y verifica que tu navegador acepte cookies de este sitio.",
-       "token_suffix_mismatch": "<strong>Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en la clave de edición.</strong>\nSe rechazó la edición para evitar la corrupción del texto de la página.\nEsto sucede en ocasiones si se usa un servicio de proxy anónimo defectuoso.",
+       "token_suffix_mismatch": "<strong>Se rechazó tu edición porque el cliente utilizado estropeó los caracteres de puntuación de la ficha de edición.</strong>\nEl rechazo se realizó para evitar daños en el texto de la página.\nEsto sucede a veces cuando se utiliza un servicio web de <em>proxy</em> anónimo defectuoso.",
        "edit_form_incomplete": "<strong>Una parte del formulario de edición no ha llegado al servidor. Comprueba que tus cambios están intactos e inténtalo de nuevo.</strong>",
        "editing": "Edición de «$1»",
        "creating": "Creación de «$1»",
        "yourtext": "Tu texto",
        "storedversion": "Versión guardada",
        "editingold": "<strong>Advertencia: estás editando sobre una revisión antigua de esta página.</strong>\nSi la guardas, se perderá cualquier otro cambio realizado desde esa revisión.",
+       "unicode-support-fail": "Parece que tu navegador no es compatible con Unicode. Como esta codificación es necesaria para editar las páginas, no se guardó tu edición.",
        "yourdiff": "Diferencias",
        "copyrightwarning": "Ten en cuenta que todas las contribuciones a {{SITENAME}} se consideran publicadas bajo la $2 (véase $1 para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre. <strong>¡No uses textos con copyright sin permiso!</strong>",
        "copyrightwarning2": "Ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase $1 para más detalles).\n<strong>¡No uses textos con copyright sin permiso!</strong>",
        "parser-template-loop-warning": "Se ha detectado un bucle de plantilla: [[$1]]",
        "template-loop-category": "Páginas con bucles de plantillas",
        "template-loop-category-desc": "Esta página contiene un bucle de plantillas, es decir, una plantilla que se llama a sí misma recursivamente.",
+       "template-loop-warning": "<strong>Atención:</strong> esta página llama a [[:$1]], lo que provoca un bucle en las plantillas (una llamada recurrente infinita).",
        "parser-template-recursion-depth-warning": "Se ha superado el límite de profundidad de la recursividad de plantillas ($1)",
        "language-converter-depth-warning": "Se ha superado el límite de profundidad del convertidor de idioma ($1)",
        "node-count-exceeded-category": "Páginas que sobrepasan la cantidad de nodos",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Océano Índico",
        "timezoneregion-pacific": "Océano Pacífico",
-       "allowemail": "Aceptar correo electrónico de otros usuarios",
+       "allowemail": "Permitir que otros usuarios me envíen mensajes de correo",
        "email-blacklist-label": "Prohibir a estos usuarios enviarme mensajes de correo:",
        "prefs-searchoptions": "Buscar",
        "prefs-namespaces": "Espacios de nombres",
        "prefs-editor": "Editor",
        "prefs-preview": "Previsualización",
        "prefs-advancedrc": "Opciones avanzadas",
+       "prefs-opt-out": "Renunciar a las mejoras",
        "prefs-advancedrendering": "Opciones avanzadas",
        "prefs-advancedsearchoptions": "Opciones avanzadas",
        "prefs-advancedwatchlist": "Opciones avanzadas",
        "right-userrights-interwiki": "Modificar los permisos de usuario en otros wikis",
        "right-siteadmin": "Bloquear y desbloquear la base de datos",
        "right-override-export-depth": "Exportar páginas, incluidas aquellas enlazadas hasta una profundidad de 5",
-       "right-sendemail": "Enviar correo electrónico a otros usuarios",
+       "right-sendemail": "Enviar mensajes de correo a otros usuarios",
        "right-managechangetags": "Crear y (des)activar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] junto con los cambios propios",
        "right-changetags": "Agregar y quitar [[Special:Tags|etiquetas]] arbitrarias a revisiones individuales y entradas del registro",
        "grant-privateinfo": "Acceder a información privada",
        "grant-protect": "Proteger y desproteger páginas",
        "grant-rollback": "Revertir cambios a páginas",
-       "grant-sendemail": "Enviar un correo electrónico a otros usuarios",
+       "grant-sendemail": "Enviar mensajes de correo a otros usuarios",
        "grant-uploadeditmovefile": "Subir, reemplazar y renombrar archivos",
        "grant-uploadfile": "Subir archivos nuevos",
        "grant-basic": "Permisos básicos",
        "recentchanges-legend": "Opciones sobre cambios recientes",
        "recentchanges-summary": "Sigue los cambios más recientes del wiki en esta página.",
        "recentchanges-noresult": "No hubo cambios que respondan a esos criterios durante el período seleccionado.",
+       "recentchanges-timeout": "Se agotó el tiempo de espera de esta búsqueda. Puede que quieras probar con otros parámetros de búsqueda.",
+       "recentchanges-network": "No se cargó ningún resultado debido a un problema técnico. Prueba a volver a cargar la página.",
        "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki con este canal.",
        "recentchanges-label-newpage": "Esta edición creó una página",
        "recentchanges-label-minor": "Esta es una edición menor",
        "recentchanges-submit": "Mostrar",
        "rcfilters-tag-remove": "Quitar «$1»",
        "rcfilters-legend-heading": "<strong>Lista de abreviaturas:</strong>",
-       "rcfilters-other-review-tools": "<strong>Otras herramientas de revisión</strong>",
+       "rcfilters-other-review-tools": "Otras herramientas de revisión",
        "rcfilters-group-results-by-page": "Agrupar resultados por página",
        "rcfilters-grouping-title": "Agrupación",
        "rcfilters-activefilters": "Filtros activos",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "rcfilters-highlighted-filters-list": "Destacados: $1",
        "rcfilters-quickfilters": "Filtros guardados",
-       "rcfilters-quickfilters-placeholder-title": "Ningún enlace guardado aún",
+       "rcfilters-quickfilters-placeholder-title": "No se guardó ningún filtro aún",
        "rcfilters-quickfilters-placeholder-description": "Para guardar tus ajustes de filtro y reutilizarlos más tarde, pulsa en el icono del marcador en el área de Filtro activo que se encuentra a continuación.",
        "rcfilters-savedqueries-defaultlabel": "Filtros guardados",
        "rcfilters-savedqueries-rename": "Cambiar nombre",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Crear filtro predeterminado",
        "rcfilters-savedqueries-cancel-label": "Cancelar",
        "rcfilters-savedqueries-add-new-title": "Guardar ajustes de filtro actuales",
+       "rcfilters-savedqueries-already-saved": "Estos filtros son ja almacenados",
        "rcfilters-restore-default-filters": "Restaurar filtros predeterminados",
        "rcfilters-clear-all-filters": "Borrar todos los filtros",
        "rcfilters-show-new-changes": "Ver cambios más recientes",
-       "rcfilters-search-placeholder": "Filtrar cambios recientes (navega o empieza a escribir)",
+       "rcfilters-search-placeholder": "Filtrar cambios (usa el menú o buscar para aplicar filtro)",
        "rcfilters-invalid-filter": "Filtro no válido",
        "rcfilters-empty-filter": "No hay filtros activos. Se muestran todas las contribuciones.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>Estado:</strong> $1",
        "rcfilters-exclude-button-off": "Excluir los seleccionados",
        "rcfilters-exclude-button-on": "Excluyendo los seleccionados",
-       "rcfilters-view-advanced-filters-label": "Filtros avanzados",
        "rcfilters-view-tags": "Ediciones etiquetadas",
        "rcfilters-view-namespaces-tooltip": "Filtrar resultados por espacio de nombres",
        "rcfilters-view-tags-tooltip": "filtrado de resultados usando etiquetas de edición",
        "rcfilters-view-return-to-default-tooltip": "Volver al menú de filtro principal",
+       "rcfilters-view-tags-help-icon-tooltip": "Más información sobre las ediciones etiquetadas",
        "rcfilters-liveupdates-button": "Actualizaciones en directo",
        "rcfilters-liveupdates-button-title-on": "Apagar actualizaciones en directo",
        "rcfilters-liveupdates-button-title-off": "Mostar los cambios en tiempo real",
        "rcfilters-watchlist-edit-watchlist-button": "Edita tu lista de seguimiento",
        "rcfilters-watchlist-showupdated": "Los cambios hechos a páginas que no has visitado desde que se efectuaron aparecen en <strong>negrita</strong>, acompañados de marcadores sólidos.",
        "rcfilters-preference-label": "Ocultar la versión mejorada de Cambios recientes",
+       "rcfilters-preference-help": "Revierte el rediseño de interfaz de 2017 y desactiva todas las herramientas añadidas desde entonces.",
        "rcnotefrom": "Debajo {{PLURAL:$5|aparece el cambio|aparecen los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
        "rclistfromreset": "Restablecer selección de fecha",
        "rclistfrom": "Mostrar cambios nuevos desde las $2 del $3",
        "uploadbtn": "Subir un archivo",
        "reuploaddesc": "Cancelar subida y volver al formulario",
        "upload-tryagain": "Enviar la descripción modificada del archivo",
+       "upload-tryagain-nostash": "Enviar el archivo cargado de nuevo y la descripción modificada",
        "uploadnologin": "No has iniciado sesión",
        "uploadnologintext": "Tienes que $1 para subir archivos.",
        "upload_directory_missing": "El directorio de subida de archivos ($1) no existe, y el servidor no ha podido crearlo.",
        "upload_directory_read_only": "El servidor web no puede escribir en el directorio de subida de archivos ($1).",
        "uploaderror": "Error al intentar subir",
-       "upload-recreate-warning": "<strong>Aviso: Un archivo con ese nombre ha sido eliminado o renombrado.</strong>\n\nA continuación se muestra el registro de borrados y traslados de esta página:",
+       "upload-recreate-warning": "<strong>Atención: se ha borrado o cambiado el nombre de un archivo con ese nombre.</strong>\n\nA continuación se muestra el registro de borrados y traslados de esta página:",
        "uploadtext": "Utiliza el siguiente formulario para subir archivos.\nPara ver o buscar archivos subidos con anterioridad, ve a la [[Special:FileList|lista de archivos subidos]].\nLos archivos subidos también quedarán registrados en el [[Special:Log/upload|registro de archivos subidos]], y los borrados en el [[Special:Log/delete|registro de borrados]].\n\nPara incluir un archivo en una página, usa un enlace como los mostrados a continuación:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> para usar la versión a tamaño completo del archivo\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|texto alternativo]]</nowiki></code></strong> para una versión de 200 píxeles de ancho situada en una caja en el margen izquierdo con \"texto alternativo\" como descripción\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> para enlazar directamente al archivo sin mostrarlo.",
        "upload-permitted": "{{PLURAL:$2|Tipo de archivo permitido|Tipos de archivo permitidos}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Tipo de archivo preferido|Tipos de archivo preferidos}}: $1.",
        "file-deleted-duplicate-notitle": "Un archivo idéntico a este ha sido borrado con anterioridad, y el título ha sido suprimido. Deberías contactar con alguien capaz de ver los datos de archivos borrados para que revise esta situación antes de proceder a subir de nuevo este archivo.",
        "uploadwarning": "Advertencia de subida de archivo",
        "uploadwarning-text": "Modifica la descripción del archivo abajo indicada e inténtalo de nuevo.",
+       "uploadwarning-text-nostash": "Carga el archivo una vez más, modifica la descripción siguiente e inténtalo de nuevo.",
        "savefile": "Guardar archivo",
        "uploaddisabled": "Se desactivó la subida de archivos.",
        "copyuploaddisabled": "Se desactivó la subida de archivos mediante URL.",
        "uploaded-script-svg": "Se encontró el elemento habilitado para secuencias de órdenes «$1» en el archivo SVG cargado.",
        "uploaded-hostile-svg": "Se encontró código CSS no seguro en el elemento de estilo del archivo SVG cargado.",
        "uploaded-event-handler-on-svg": "No está permitido configurar atributos controladores de eventos <code>$1=\"$2\"</code> en los archivos SVG.",
-       "uploaded-href-attribute-svg": "Los atributos <code>href</code> en archivos SVG sólo tienen permitido enlazar a objetivos http:// o https://, se encontró <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Los elementos <a> solo tienen permitido enlazar (href) con objetivos «data:» (archivo incrustado), «http://», «https://» o de fragmento («#», «same-document»). Prueba a incrustar las imágenes al exportar el SVG. Se encontró <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Se encontró un <code>href</code> hacia un destino inseguro <code><$1 $2=\"$3\"></code> en el archivo SVG cargado.",
        "uploaded-animate-svg": "Se encontró un etiqueta \"animate\" que puede estar cambiando \"href\", mediante el atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> en el archivo SVG cargado.",
        "uploaded-setting-event-handler-svg": "Está bloqueada la configuración de atributos controladores de eventos. Se encontró <code>&lt;$1 $2=\"$3\"&gt;</code> en el archivo SVG cargado.",
        "uploadstash-refresh": "Actualizar la lista de archivos",
        "uploadstash-thumbnail": "ver miniatura",
        "uploadstash-exception": "No se pudo almacenar la carga en el área provisional ($1): «$2».",
+       "uploadstash-bad-path": "La ruta no existe.",
+       "uploadstash-bad-path-invalid": "La ruta no es válida.",
+       "uploadstash-bad-path-unknown-type": "El tipo «$1» es desconocido.",
+       "uploadstash-bad-path-no-handler": "No se encontró ningún manejador para el MIME $1 del archivo $2.",
+       "uploadstash-bad-path-bad-format": "El formato de la clave «$1» es incorrecto.",
+       "uploadstash-file-not-found-no-thumb": "No se pudo obtener la miniatura.",
+       "uploadstash-file-not-found-no-local-path": "Ningun mood local para objeto escalado.",
+       "uploadstash-file-not-found-no-object": "No se pudo crear el objeto del archivo local para la miniatura.",
+       "uploadstash-file-not-found-missing-content-type": "Una etiqueta de contenido falta",
+       "uploadstash-file-not-found-not-exists": "No puede encontrar el camino, o no un fichero simple.",
+       "uploadstash-file-too-large": "No puede contenir un fichero mas ggrande que $ bytes",
+       "uploadstash-not-logged-in": "No ha accedido ningún usuario; los archivos deben pertenecer a un usuario.",
+       "uploadstash-wrong-owner": "Este archivo ($1) no pertenece al usuario actual.",
+       "uploadstash-no-such-key": "No existe esta clave ($1); no se puede eliminar.",
+       "uploadstash-no-extension": "No hay ninguna extension",
+       "uploadstash-zero-length": "El fichero esta vacio",
        "invalid-chunk-offset": "Desplazamiento inválido del fragmento",
        "img-auth-accessdenied": "Acceso denegado",
        "img-auth-nopathinfo": "Falta PATH_INFO.\nEl servidor no está configurado para proporcionar esta información.\nEs posible que esté basado en CGI y que no sea compatible con img_auth.\nConsulte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "delete-legend": "Borrar",
        "historywarning": "<strong>Atención:</strong> la página que estás a punto de borrar tiene un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
        "historyaction-submit": "Mostrar",
-       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nConfirma que realmente quieres hacer esto, que entiendes las consecuencias y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
+       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nConfirma que realmente quieres hacer esto, que entiendes las consecuencias y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las normativas]].",
        "actioncomplete": "Se ha realizado la acción",
        "actionfailed": "Ha fallado la acción",
        "deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.",
        "sp-contributions-newonly": "Mostrar solo ediciones que son creaciones de páginas",
        "sp-contributions-hideminor": "Ocultar ediciones menores",
        "sp-contributions-submit": "Buscar",
+       "sp-contributions-outofrange": "No se pudo mostrar ningún resultado. El intervalo de IP seleccionado es mayor que el límite de CIDR de /$1.",
        "whatlinkshere": "Lo que enlaza aquí",
        "whatlinkshere-title": "Páginas que enlazan con «$1»",
        "whatlinkshere-page": "Página:",
        "block-log-flags-nousertalk": "no puede editar su propia página de discusión",
        "block-log-flags-angry-autoblock": "autobloqueo avanzado habilitado",
        "block-log-flags-hiddenname": "nombre de usuario ocultado",
-       "range_block_disabled": "La facultad de administrador de crear bloqueos por rangos está deshabilitada.",
+       "range_block_disabled": "La facultad administrativa de crear bloqueos por intervalos está desactivada.",
        "ipb_expiry_invalid": "El tiempo de caducidad no es válido.",
        "ipb_expiry_old": "El tiempo de expiración está en el pasado.",
        "ipb_expiry_temp": "Los bloqueos a nombres de usuario ocultos deben ser permanentes.",
        "ipb_cant_unblock": "Error: no se encuentra el identificador de bloque $1. Pudo haber sido desbloqueado ya.",
        "ipb_blocked_as_range": "Error: la dirección IP $1 no está bloqueada directamente y no puede ser desbloqueada.\nSin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado.",
        "ip_range_invalid": "El intervalo de IP no es válido.",
-       "ip_range_toolarge": "Los bloqueos de rango superiores a /$1 no están permitidos.",
+       "ip_range_toolarge": "Los bloqueos por intervalo superiores a /$1 no están permitidos.",
+       "ip_range_exceeded": "El intervalo de IP sobrepasa el límite máximo. Intervalo permitido: /$1.",
+       "ip_range_toolow": "En la práctica, no se permiten los intervalos de IP.",
        "proxyblocker": "Bloqueador de proxies",
        "proxyblockreason": "Tu dirección IP ha sido bloqueada porque es un proxy abierto.\nContacta con tu proveedor de servicios de Internet o con tu servicio de asistencia técnica e infórmales de este grave problema de seguridad.",
        "sorbsreason": "Su dirección IP está listada como proxy abierto en DNSBL.",
        "newtitle": "Título nuevo:",
        "move-watch": "Vigilar páginas de origen y destino",
        "movepagebtn": "Trasladar la página",
-       "pagemovedsub": "Renombrado realizado con éxito",
+       "pagemovedsub": "Traslado realizado con éxito",
        "movepage-moved": "<strong>«$1» ha sido trasladada a «$2»</strong>",
        "movepage-moved-redirect": "Se ha creado una redirección.",
        "movepage-moved-noredirect": "Se ha suprimido la creación de la redirección.",
        "movetalk": "Renombrar la página de discusión asociada",
        "move-subpages": "Intentar trasladar las subpáginas (hasta $1)",
        "move-talk-subpages": "Intentar trasladar las subpáginas de discusión (hasta $1)",
-       "movepage-page-exists": "La página $1 ya existe, por lo que no puede ser renombrada automáticamente.",
+       "movepage-page-exists": "La página $1 ya existe, por lo que no se puede cambiarle el nombre automáticamente.",
        "movepage-page-moved": "La página $1 ha sido trasladada a $2.",
        "movepage-page-unmoved": "La página $1 no se ha podido trasladar a $2.",
        "movepage-max-pages": "Se {{PLURAL:$1|ha trasladado un máximo de una página|han trasladado un máximo de $1 páginas}}, y no van a trasladarse más automáticamente.",
        "exif-preferredattributionname": "Al volver a utilizar este trabajo, por favor da crédito",
        "exif-pngfilecomment": "Comentario de archivo PNG",
        "exif-disclaimer": "Exoneración de responsabilidad",
-       "exif-contentwarning": "Advertencia de contenido",
+       "exif-contentwarning": "Alerta de contenido",
        "exif-giffilecomment": "Comentario de archivo GIF",
        "exif-intellectualgenre": "Tipo de elemento",
        "exif-subjectnewscode": "Código de asunto",
        "recreate": "Recrear",
        "confirm-purge-title": "Purgar esta página",
        "confirm_purge_button": "Aceptar",
-       "confirm-purge-top": "¿Limpiar la caché de esta página?",
+       "confirm-purge-top": "¿Quieres vaciar la antememoria de esta página?",
        "confirm-purge-bottom": "Purgar una página limpia la antememoria y fuerza a que aparezca la versión más actual.",
        "confirm-watch-button": "Aceptar",
        "confirm-watch-top": "¿Añadir esta página a tu lista de seguimiento?",
        "compare-title-not-exists": "El título especificado no existe.",
        "compare-revision-not-exists": "La revisión especificada no existe.",
        "diff-form": "Diferencias",
+       "diff-form-oldid": "Id. de revisión anterior (opcional)",
+       "diff-form-revid": "Identificador de revisión de las diferencias",
+       "diff-form-submit": "Mostrar diferencias",
        "permanentlink": "Enlace permanente",
+       "permanentlink-revid": "Id. de revisión",
+       "permanentlink-submit": "Ir a la revisión",
        "dberr-problems": "Lo sentimos. Este sitio está experimentando dificultades técnicas.",
        "dberr-again": "Prueba a recargar dentro de unos minutos.",
        "dberr-info": "(No se puede acceder a la base de datos: $1)",
index e3e7cac..a59a059 100644 (file)
        "readonly": "Andmebaas lukustatud",
        "enterlockreason": "Sisesta lukustamise põhjus ning juurdepääsu taastamise ligikaudne aeg",
        "readonlytext": "Andmebaas on praegu lukustatud. Uusi sissekandeid ja muid muudatusi ei saa teha. Tõenäoliselt toimub andmebaasi plaanipärane hooldus, mille järel tavaline olukord taastub.\nSüsteemiadministraator, kes andmebaasi lukustas, andis järgmise selgituse: $1",
-       "missing-article": "Andmebaas ei leidnud küsitud lehekülje \"$1\" $2 teksti.\n\nPõhjuseks võib olla võrdlus- või ajaloolink kustutatud leheküljele.\n\nKui tegemist ei ole nimetatud olukorraga, võib tegu olla ka süsteemi veaga.\nSellisel juhul tuleks teavitada [[Special:ListUsers/sysop|administraatorit]], edastades talle ka käesoleva lehe internetiaadressi.",
+       "missing-article": "Andmebaasist ei leidnud päritud lehekülje \"$1\" $2 teksti.\n\nPõhjuseks võib olla võrdlus- või ajaloolink kustutatud leheküljele.\n\nKui asi ei ole selles, võib tegu olla süsteemi veaga.\nPalun teata sellest [[Special:ListUsers/sysop|administraatorile]], edastades ka lehekülje internetiaadressi.",
        "missingarticle-rev": "(redaktsioon: $1)",
        "missingarticle-diff": "(redaktsioonid: $1, $2)",
        "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni sekundaarsed andmebaasiserverid on primaarserveriga samal järjel.",
        "password-login-forbidden": "Selle kasutajanime ja parooli kasutamine on keelatud.",
        "mailmypassword": "Lähtesta parool",
        "passwordremindertitle": "{{SITENAME}} – ajutine parool",
-       "passwordremindertext": "Keegi IP-aadressiga $1, tõenäoliselt sa ise, palus, et talle saadetaks {{GRAMMAR:elative|{{SITENAME}}}} uus parool ($4). Kasutaja \"$2\" ajutiseks paroolis seati \"$3\". Kui soovid tõepoolest uut parooli, pead sisse logima ja uue parooli valima. Ajutine parool aegub {{PLURAL:$5|ühe päeva|$5 päeva}} pärast.\n\nKui uut parooli palus keegi teine või sulle meenus vana parool ja sa ei soovi seda enam muuta, võid käesolevat teadet eirata ning jätkata endise parooli kasutamist.",
+       "passwordremindertext": "Keegi IP-aadressiga $1, tõenäoliselt sa ise, palus, et talle\nsaadetaks {{GRAMMAR:elative|{{SITENAME}}}} uus parool ($4).\nKasutaja \"$2\" ajutiseks paroolis seati \"$3\". Kui soovid tõepoolest\nuut parooli, pead sisse logima ja uue parooli valima.\nAjutine parool aegub {{PLURAL:$5|ühe|$5}} päeva pärast.\n\nKui uut parooli palus keegi teine või sulle meenus vana parool\nja sa ei soovi seda enam muuta, võid seda teadet eirata ning\njätkata senise parooli kasutamist.",
        "noemail": "Kasutaja $1 e-posti aadressi meil kahjuks pole.",
        "noemailcreate": "Pead sisestama korrektse e-posti aadressi",
        "passwordsent": "Uus parool on saadetud kasutaja $1 registreeritud e-postiaadressil.\nPärast parooli saamist logige palun sisse.",
        "accountcreated": "Konto loodud",
        "accountcreatedtext": "Kasutaja [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) konto on loodud.",
        "createaccount-title": "{{GRAMMAR:illative|{{SITENAME}}}} konto loomine",
-       "createaccount-text": "Keegi on loonud {{GRAMMAR:illative|{{SITENAME}}}} ($4) sinu e-posti aadressile vastava kasutajatunnuse \"$2\". Parooliks seati \"$3\". Logi sisse ja muuda oma parool.\n\nKui kasutajakonto loomine on eksitus, võid käesolevat sõnumit lihtsalt eirata.",
+       "createaccount-text": "Keegi on loonud {{GRAMMAR:illative|{{SITENAME}}}} ($4) sinu e-posti aadressile vastava kasutajatunnuse \"$2\". Parooliks seati \"$3\". Peaksid sisse logima ja parooli muutma.\n\nKui kasutajakonto loomine oli eksitus, võid seda sõnumit lihtsalt eirata.",
        "login-throttled": "Oled lühikese aja jooksul proovinud liiga palju kordi sisse logida.\nPalun oota $1, enne kui uuesti proovid.",
        "login-abort-generic": "Sisselogimine ebaõnnestus – Katkestatud",
        "login-migrated-generic": "Sinu konto on migreeritud ja sinu kasutajanime pole enam selles vikis.",
        "anonpreviewwarning": "''Sa pole sisse logitud. Selle lehe redigeerimislogisse salvestatakse su IP-aadress.''",
        "missingsummary": "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.\nKui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
        "selfredirect": "<strong>Hoiatus:</strong> Suunad selle lehekülje iseeneda juurde.\nVõimalik, et oled määranud ümbersuunamise jaoks vale sihtleheküljeks või redigeerid vale lehekülge.\nÜmbersuunamine luuakse sellest hoolimata, kui klõpsad uuesti \"$1\".",
-       "missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
+       "missingcommenttext": "Palun sisesta kommentaar.",
        "missingcommentheader": "<strong>Meeldetuletus:</strong> Sa pole kirjutanud kommentaarile teemat.\nKui klõpsad uuesti \"$1\", salvestatakse su kommentaar ilma teemata.",
        "summary-preview": "Resümee eelvaade:",
        "subject-preview": "Resümee eelvaade:",
        "newarticle": "(Uus)",
        "newarticletext": "Lehekülge, kuhu link sind suunas, pole veel.\nEt lehekülg luua, alusta allolevas kastis kirjutamist (lisateave [$1 juhendist]).\nKui sattusid siia kogemata, klõpsa brauseri ''tagasi''-nupule.",
        "anontalkpagetext": "----''See on anonüümse kasutaja arutelulehekülg. See kasutaja pole kontot loonud või ei kasuta seda. Sellepärast tuleb meil kasutaja tuvastamiseks kasutada tema IP-aadressi. Sellist IP-aadressi võib kasutada mitu kasutajat. Kui oled osutatud IP-aadressi kasutaja ning leiad, et siinsed kommentaarid ei puutu kuidagi sinusse, [[Special:CreateAccount|loo palun kasutajakonto]] või [[Special:UserLogin|logi sisse]], et sind edaspidi teiste anonüümsete kasutajatega segi ei aetaks.''",
-       "noarticletext": "Käesoleval leheküljel hetkel teksti ei ole.\nVõid [[Special:Search/{{PAGENAME}}|otsida pealkirjaks olevat fraasi]] teistelt lehtedelt,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} uurida asjassepuutuvaid logisid] või [{{fullurl:{{FULLPAGENAME}}|action=edit}} puuduva lehekülje ise luua]</span>.",
+       "noarticletext": "Siin leheküljel puudub praegu tekst.\nSaad [[Special:Search/{{PAGENAME}}|otsida pealkirjateksti]] teistelt lehekülgedelt,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} uurida asjassepuutuvaid logisid]\nvõi [{{fullurl:{{FULLPAGENAME}}|action=edit}} puuduva lehekülje luua]</span>.",
        "noarticletext-nopermission": "Sellel leheküljel pole praegu teksti.\nSaad [[Special:Search/{{PAGENAME}}|otsida selle lehekülje pealkirja]] teistelt lehekülgedelt või <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} otsida seonduvatest logidest]</span>, aga sul pole õigust seda lehekülge alustada.",
        "missing-revision": "Lehekülje \"{{FULLPAGENAME}}\" redaktsiooni $1 pole.\n\nHarilikult tähendab see seda, et sind siia juhatanud link on vananenud ja siin asunud lehekülg on kustutatud.\nÜksikasjad leiad [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} kustutamislogist].",
        "userpage-userdoesnotexist": "Kasutajakontot \"<nowiki>$1</nowiki>\" pole olemas.\nPalun mõtle järele, kas soovid seda lehte luua või muuta.",
        "recentchanges-legend": "Viimaste muudatuste seaded",
        "recentchanges-summary": "Jälgi sellel leheküljel viimaseid muudatusi.",
        "recentchanges-noresult": "Selles ajavahemikus pole tehtud neile kriteeriumitele vastavaid muudatusi.",
+       "recentchanges-timeout": "See otsing aegus. Võid proovida teisi otsiparameetreid.",
+       "recentchanges-network": "Tehnilise tõrke tõttu ei õnnestunud tulemusi laadida. Palun proovi lehekülge värskendada.",
        "recentchanges-feed-description": "Jälgi vikisse tehtud viimaseid muudatusi.",
        "recentchanges-label-newpage": "Uus lehekülg",
        "recentchanges-label-minor": "Pisiparandus",
        "recentchanges-submit": "Näita",
        "rcfilters-tag-remove": "Eemalda \"$1\"",
        "rcfilters-legend-heading": "<strong>Lühendite loetelu:</strong>",
-       "rcfilters-other-review-tools": "<strong>Muud ülevaatusriistad</strong>",
+       "rcfilters-other-review-tools": "Muud ülevaatusriistad",
        "rcfilters-group-results-by-page": "Rühmita tulemused lehekülje kaupa",
        "rcfilters-grouping-title": "Rühmitamine",
        "rcfilters-activefilters": "Aktiivsed filtrid",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|tund|tundi}}",
        "rcfilters-highlighted-filters-list": "Esile tõstetud: $1",
        "rcfilters-quickfilters": "Salvestatud filtrid",
-       "rcfilters-quickfilters-placeholder-title": "Linke pole veel salvestatud",
+       "rcfilters-quickfilters-placeholder-title": "Filtreid pole veel salvestatud",
        "rcfilters-quickfilters-placeholder-description": "Et filtri sätted salvestada ja et neid hiljem uuesti kasutada, klõpsa alloleva aktiivsete filtrite loendi juures järjehoidjaikooni.",
        "rcfilters-savedqueries-defaultlabel": "Salvestatud filtrid",
        "rcfilters-savedqueries-rename": "Nimeta ümber",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Koosta vaikefilter",
        "rcfilters-savedqueries-cancel-label": "Loobu",
        "rcfilters-savedqueries-add-new-title": "Salvesta filtri praegused sätted",
+       "rcfilters-savedqueries-already-saved": "Need filtrid on juba salvestatud. Muuda sätteid, et koostada uus salvestatud filter.",
        "rcfilters-restore-default-filters": "Taasta vaikefiltrid",
        "rcfilters-clear-all-filters": "Eemalda kõik filtrid",
        "rcfilters-show-new-changes": "Vaata uusimaid muudatusi",
-       "rcfilters-search-placeholder": "Filtri viimaseid muudatusi (sirvi või alusta tippimist)",
+       "rcfilters-search-placeholder": "Filtri muudatusi (kasuta menüüd või otsi filtri nime)",
        "rcfilters-invalid-filter": "Vigane filter",
        "rcfilters-empty-filter": "Aktiivsed filtrid puuduvad. Näidatakse kogu kaastööd.",
        "rcfilters-filterlist-title": "Filtrid",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:mitte</strong> $1",
        "rcfilters-exclude-button-off": "Jäta valitud välja",
        "rcfilters-exclude-button-on": "Valitud välja jäetud",
-       "rcfilters-view-advanced-filters-label": "Täpsemad filtrid",
        "rcfilters-view-tags": "Märgistatud muudatused",
        "rcfilters-view-namespaces-tooltip": "Filtri tulemusi nimeruumide lõikes",
        "rcfilters-view-tags-tooltip": "Filtri tulemusi muudatusmärgiste lõikes",
        "rcfilters-view-return-to-default-tooltip": "Naase filtri peamenüüsse",
+       "rcfilters-view-tags-help-icon-tooltip": "Uuri veel märgistatud muudatuste kohta",
        "rcfilters-liveupdates-button": "Uuendused reaalajas",
        "rcfilters-liveupdates-button-title-on": "Lülita reaalajas uuendamine välja",
        "rcfilters-liveupdates-button-title-off": "Näita uusi muudatusi kohe nende tegemise järel",
        "uploaded-script-svg": "Üleslaaditud SVG-failist leiti skriptitav element \"$1\".",
        "uploaded-hostile-svg": "Üleslaaditud SVG-faili laadielemendist leiti ebaturvaline CSS.",
        "uploaded-event-handler-on-svg": "Sündmuse halduse atribuutide <code>$1=\"$2\"</code> seadmine pole SVG-failis lubatud.",
-       "uploaded-href-attribute-svg": "SVG-failis on lubatud href-atribuudiga viidata ainult sihtkohta skeemiga http:// või https://. Leiti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Element <a> saab href-atribuudi väärtuses linkida ainult sihtobjektile data: (manusfail), http:// või https:// või fragmendile (#, sama-dokument).  Teistes elementides, nagu <image>, on lubatud ainult data: ja fragment. Proovi SVG-faili eksportimisel faile manustada. Leiti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Üleslaaditud SVG-failist leiti href, mis viitab ebaturvalistele andmetele: URI sihtkoht <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Üleslaaditud SVG-failist leiti silt \"animate\", mis võib href-i muuta, kasutades from-atribuuti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Sündmuse halduse atribuutide seadmine on keelatud, üleslaaditud SVG-failist leiti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadstash-refresh": "Värskenda faililoendit",
        "uploadstash-thumbnail": "vaata pisipilti",
        "uploadstash-exception": "Üleslaaditavat faili ei õnnestunud peithoidlas talletada ($1): \"$2\".",
+       "uploadstash-bad-path": "Teed pole olemas.",
+       "uploadstash-bad-path-invalid": "Tee pole sobiv.",
+       "uploadstash-bad-path-unknown-type": "Tundmatu tüüp \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Tundmatu pisipildi nimi.",
+       "uploadstash-bad-path-no-handler": "Faili $2 MIME tüübile $1 ei leitud töötlejat.",
+       "uploadstash-bad-path-bad-format": "Võti \"$1\" pole sobivas vormingus.",
+       "uploadstash-file-not-found": "Peithoidlas ei leidu võtit \"$1\".",
+       "uploadstash-file-not-found-no-thumb": "Pisipilti ei õnnestu hankida.",
+       "uploadstash-file-not-found-no-local-path": "Mastaabitud elemendi kohalikku teed ei leitud.",
+       "uploadstash-file-not-found-no-object": "Pisipildi kohalikku failiobjekti ei õnnestunud luua.",
+       "uploadstash-file-not-found-no-remote-thumb": "Pisipilti ei õnnestunud hankida: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Sisutüübi päis puudub.",
+       "uploadstash-file-not-found-not-exists": "Ei õnnestunud leida teed või faili ennast.",
+       "uploadstash-file-too-large": "$1 baidist suuremat faili ei saa töödelda.",
+       "uploadstash-not-logged-in": "Ükski kasutaja pole sisse logitud, fail peab kuuluma kasutajatele.",
+       "uploadstash-wrong-owner": "See fail ($1) ei kuulu praegusele kasutajale.",
+       "uploadstash-no-such-key": "Puudub selline võti ($1), ei saa eemaldada.",
+       "uploadstash-no-extension": "Faililaiend puudub.",
+       "uploadstash-zero-length": "Faili suurus on tühiväärtusega.",
        "invalid-chunk-offset": "Tüki vigane nihe",
        "img-auth-accessdenied": "Juurdepääs keelatud",
        "img-auth-nopathinfo": "PATH_INFO puudub.\nSinu server pole seadistatud seda teavet edastama.\nSee võib olla CGI-põhine ja ei toeta img_auth-i.\nVaata lehekülge https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "apihelp": "API abi",
        "apihelp-no-such-module": "Moodulit \"$1\" ei leitud.",
        "apisandbox": "API liivakast",
+       "apisandbox-jsonly": "API liivakasti kasutamine nõuab JavaScripti.",
        "apisandbox-api-disabled": "API on selles võrgukohas keelatud.",
        "apisandbox-intro": "Kasuta seda lehekülge <strong>MediaWiki API</strong> katsetamiseks.\nÜksikasjad API kasutamise kohta leiad [[mw:API:Main page|API dokumentatsioonist]]. Näide: [https://www.mediawiki.org/wiki/API#A_simple_example esilehe sisu hankimine]. Vali toiming, et näha veel näiteid.\n\nPane tähele, et kuigi siin on liivakast, võivad siin leheküljel tehtud toimingud vikit muuta.",
+       "apisandbox-fullscreen": "Laienda paneel",
+       "apisandbox-fullscreen-tooltip": "Laienda liivakastipaneel brauseriakna suuruseks",
+       "apisandbox-unfullscreen": "Näita lehekülge",
+       "apisandbox-unfullscreen-tooltip": "Vähenda liivakastipaneeli, nii et MediaWiki navigeerimislingid on nähtaval",
        "apisandbox-submit": "Tee päring",
        "apisandbox-reset": "Puhasta",
+       "apisandbox-retry": "Proovi uuesti",
+       "apisandbox-loading": "API mooduli \"$1\" teabe laadimine...",
+       "apisandbox-load-error": "API mooduli \"$1\" teabe laadimisel esines tõrge: $2",
+       "apisandbox-no-parameters": "Sellel API moodulil pole parameetreid.",
+       "apisandbox-helpurls": "Abilingid",
        "apisandbox-examples": "Näited",
+       "apisandbox-dynamic-parameters": "Lisaparameetrid",
+       "apisandbox-dynamic-parameters-add-label": "Lisa parameeter:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Parameetri nimi",
+       "apisandbox-dynamic-error-exists": "Parameeter nimega \"$1\" on juba olemas.",
+       "apisandbox-deprecated-parameters": "Vananenud parameetrid",
+       "apisandbox-fetch-token": "Hangi luba automaatselt",
+       "apisandbox-submit-invalid-fields-title": "Mõned väljad on vigased",
+       "apisandbox-submit-invalid-fields-message": "Palun paranda märgitud väljad ja proovi uuesti.",
        "apisandbox-results": "Tulemused",
+       "apisandbox-sending-request": "API päringu saatmine...",
+       "apisandbox-loading-results": "API tulemuste laekumine...",
+       "apisandbox-results-error": "API päringu vastuse laadimisel esines tõrge: $1.",
+       "apisandbox-results-login-suppressed": "See päring tehti välja logitud kasutajaga, mida saab kasutada selleks, et hiilida mööda brauseri sama päritolu turvafunktsioonist. Pane tähele, et sellise päringuga ei töötle API liivakast automaatset luba õigesti. Palun sisesta luba käsitsi.",
+       "apisandbox-request-selectformat-label": "Näita päringu andmeid nii:",
+       "apisandbox-request-format-url-label": "URL-päringusõne",
        "apisandbox-request-url-label": "Päringu URL:",
+       "apisandbox-request-json-label": "Päringu JSON:",
        "apisandbox-request-time": "Päringuaeg: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Paranda luba ja saada uuesti",
+       "apisandbox-results-fixtoken-fail": "$1-luba ei õnnestunud hankida.",
+       "apisandbox-alert-page": "Osa välju sellel leheküljel pole sobivad.",
+       "apisandbox-alert-field": "Selle välja väärtus pole sobiv.",
+       "apisandbox-continue": "Jätka",
+       "apisandbox-continue-clear": "Tühjenda",
+       "apisandbox-continue-help": "\"{{int:apisandbox-continue}}\" [https://www.mediawiki.org/wiki/API:Query#Continuing_queries jätkab] viimase päringuga; \"{{int:apisandbox-continue-clear}}\" tühjendab jätkuparameetrid.",
+       "apisandbox-param-limit": "Sisesta <kbd>max</kbd>, et kasutada ülemmäära.",
+       "apisandbox-multivalue-all-namespaces": "$1 (kõik nimeruumid)",
+       "apisandbox-multivalue-all-values": "$1 (kõik väärtused)",
        "booksources": "Raamatuotsimine",
        "booksources-search-legend": "Raamatuotsimine",
        "booksources-search": "Otsi",
        "protect-expiring": "aegumistähtaeg $1 (UTC)",
        "protect-expiring-local": "aegumistähtaeg $1",
        "protect-expiry-indefinite": "tähtajatu",
-       "protect-cascade": "Kaitse lehekülgi, mis on lülitatud käesoleva lehekülje koosseisu (kaskaadkaitse)",
+       "protect-cascade": "Kaitse lehekülgi, mis on siinse lehekülje koosseisus (kaskaadkaitse)",
        "protect-cantedit": "Sa ei saa lehekülje kaitsetaset muuta, sest sul puudub lehekülje redigeerimise õigus.",
        "protect-othertime": "Muu aeg:",
        "protect-othertime-op": "muu aeg",
        "ipb_blocked_as_range": "Tõrge: IP-aadressi $1 pole eraldi blokeeritud ja blokeeringut ei saa eemaldada.\nSee kuulub aga blokeeritud IP-vahemikku $2, mille blokeeringut saab eemaldada.",
        "ip_range_invalid": "Vigane IP-vahemik.",
        "ip_range_toolarge": "Suuremad aadressiblokid kui /$1 pole lubatud.",
+       "ip_range_exceeded": "See IP-aadressivahemik ületab maksimumvahemikku. Lubatud vahemik: /$1.",
+       "ip_range_toolow": "IP-aadressivahemikud on sisuliselt keelatud.",
        "proxyblocker": "Proksiblokeerija",
        "proxyblockreason": "Sinu IP-aadress on blokeeritud, sest see on avatud proksi. Palun võta ühendust oma internetiteenuse pakkujaga või tehnilise toega ja teata neile sellest probleemist.",
        "sorbsreason": "Sinu IP-aadress on {{GRAMMAR:genitive|{{SITENAME}}}} kasutatavas DNS-põhises mustas nimekirjas märgitud kui avatud proksi.",
index 73167de..2873c01 100644 (file)
        "passwordreset-domain": "Domeinua:",
        "passwordreset-email": "E-mail helbidea:",
        "passwordreset-emailtitle": "{{SITENAME}}-rako kontuaren xehetasunak",
+       "passwordreset-emailtext-ip": "Norbaitek (zuk seguruenik, $1 IP helbidetik) {{SITENAME}} ($4) web gunerako zure pasahitza berrarazi nahi du. Honako erabiltzaile {{PLURAL: $3 |kontua dago|kontuak daude}} helbide elektroniko honekin lotuta:\n\n$2\n\n{{PLURAL: $3|Aldi baterako pasahitz hau|Aldi baterako pasahitza hauek}} iraungiko d(ir)a {{PLURAL: $5 |egun batean |$5 egunetan}}.\nSaioa hasi beharko zenuke orain eta pasahitza berria aukeratu. Beste norbaitek egin badu eskaera, edo zure jatorrizko pasahitza gogoratu baduzu eta ez baduzu gehiago\naldatu nahi, mezu hau baztertu eta zure pasahitza zaharra erabiltzen jarrai dezakezu.",
+       "passwordreset-emailtext-user": "$1 wikilariak {{SITENAME}} ($4) web gunerako zure pasahitza berrarazteko eskaera egin du. Honako erabiltzaile {{PLURAL:$3|kontua dago|kontuak daude}} helbide elektroniko honekin lotuta:\n\n$2\n\n{{PLURAL:$3|Aldi baterako pasahitz hau|Aldi baterako pasahitza hauek}} iraungiko d(ir)a {{PLURAL:$5|egun batean|$5 egunetan}}.\nSaioa hasi beharko zenuke orain eta pasahitza berria aukeratu. Beste norbaitek egin badu eskaera, edo zure jatorrizko pasahitza gogoratu baduzu eta ez baduzu gehiago\naldatu nahi, mezu hau baztertu eta zure pasahitza zaharra erabiltzen jarrai dezakezu.",
        "passwordreset-emailelement": "Erabiltzaile izena: \n$1\n\nBehin-behineko pasahitza: \n$2",
        "passwordreset-emailsentemail": "Hau zure kontuarekin lotuta dagoen helbide elektronikoa baldin bada, mezu elektronikoa bidaliko da zure pasahitza berrezartzeko.",
        "passwordreset-emailsentusername": "Zure kontuarekin lotuta dagoen helbide elektronikoa baldin baduzu, zure pasahitza berrezartzeko mezu elektronikoa bidaliko da.",
        "anonpreviewwarning": "''Ez duzu saioa hasi. Gordez gero, zure IP helbidea grabatuko da orri honen edizio historian.''",
        "missingsummary": "'''Gogorarazpena:''' Ez duzu aldaketa laburpen bat zehaztu. Berriz ere gordetzeko aukeratzen baduzu, laburpen mezurik gordeko da.",
        "selfredirect": "<strong>Oharra:</strong> Orri hau orri berdinera birbideratzen ari zara.\nBaliteke birzuzenketarako helburu okerra zehaztu izatea, edo okerreko orrialdea editatzen egotea.\n\"$1\" berriro sakatzen baduzu, birbideraketa egingo da hala ere.",
-       "missingcommenttext": "Mesedez, iruzkin bat idatzi jarraian.",
+       "missingcommenttext": "Mesedez, iruzkin bat sartu.",
        "missingcommentheader": "<strong>Oharra:</strong> Ez duzu iruzkin honetarako gairik ezarri. «{{int:Savearticle}}» berriro klikatzen baduzu, gairik gabe gordeko da zure edizioa.",
        "summary-preview": "Laburpenaren aurreikuspena:",
        "subject-preview": "Gaiaren aurrebista:",
        "anontalkpagetext": "<em>Orrialde hau konturik sortu ez edo erabiltzen ez duen erabiltzaile anonimo baten eztabaida orria da.</em>\nBere IP helbidea erabili beharko da beraz identifikatzeko.\nErabiltzaile batek baino gehiagok IP bera erabil dezakete ordea.\nErabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen badituzu, mesedez [[Special:CreateAccount|Izena eman]] edo [[Special:UserLogin|saioa hasi]] etorkizunean horrelakoak gerta ez daitezen.",
        "noarticletext": "Oraindik ez dago testurik orri honetan.\nEdukiz hornitzeko, aukera hauek dituzu: beste orri batzuetan [[Special:Search/{{PAGENAME}}|orri izenburu hau bilatzea]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lotutako logak bilatzea],\nedo [{{fullurl:{{FULLPAGENAME}}|action=edit}} orri hau sortzea]</span>.",
        "noarticletext-nopermission": "Une honetan ez dago testurik orrialde honetan.\nBeste orrialdeetan [[Special:Search/{{PAGENAME}}|izenburu hau bilatu dezakezu]],\nedo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak bilatu]</span>, baina ez duzu orrialde hau sortzeko baimenik.",
+       "missing-revision": "\"{{FULLPAGENAME}}\" izeneko orriaren #$1 berrikusketa ez da existitzen.\n\n\nHau ezabatu egin den orri baten historia zaharkiturik dagoen esteka baten ondorioz sortua izaten da.\n\nXehetasunak hemen aurkitu daiteke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" lankidea ez dago erregistatuta. Mesedez, konprobatu orri hau editatu/sortu nahi duzun.",
        "userpage-userdoesnotexist-view": "\"$1\" erabiltzaile-kontua ez dago erregistraturik.",
        "blocked-notice-logextract": "Erabiltzaile hau blokeatuta dago une honetan.\nAzken blokeoaren erregistroa ageri da behean, erreferentzia gisa:",
        "content-json-empty-object": "Objetu hustua",
        "content-json-empty-array": "Matrize hutsa",
        "deprecated-self-close-category": "HTML etiketa automatikoak ez diren balioak erabiltzen ari diren oriialdeak",
+       "deprecated-self-close-category-desc": "Orriak HTML etiketa autoitxi baliogabeak dauzka, adibidez <code>&lt;b/></code> edo <code>&lt;span/></code>. Hauen jarrera HTML5 zehaztapenekin bat egiteko goiz aldatuko dira, zaharkiturik geratzen direla wikitestuan.",
        "duplicate-args-warning": "<strong>Oharra:</strong> [[:$1]]k [[:$2]] \"$3\" parametroarentzako balio bat baino gehiagorekin deitzen ari da. Emandako azken balioa bakarrik erabiliko da.",
        "duplicate-args-category": "Txantiloi-deietan argumentu bikoiztuak erabiltzen dituzten orrialdeak",
        "duplicate-args-category-desc": "Orriak argumentu bikoitzak erabiltzen dituzten txantiloien deiak ditu, hala nola <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> edo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|eztabaida]]) wikilariaren $1 berrikuspena desegin da",
        "undo-summary-username-hidden": "Deuseztatu ezkutuko erabiltzaile batek egindako $1 berrikusketa",
        "cantcreateaccount-text": "IP helbide honetatik ('''$1''') kontu berria sortzeko aukera blokeatu du [[User:$3|$3]](e)k.\n\n$3(e)k emandako arrazoia: ''$2''",
+       "cantcreateaccount-range-text": " <strong>$1</strong> IP helbide eremuetatik kontu sortzea, zure  (<strong>$4</strong>) IP helbidea daramana, [[User:$3|$3]] izenpean blokeatua izan da.\n\n$3 wikilariak emandako arrazoia <em>$2</em> da",
        "viewpagelogs": "Orrialde honen erregistroak ikusi",
        "nohistory": "Orrialde honek ez dauka aldaketa historiarik.",
        "currentrev": "Oraingo berrikuspena",
        "rev-deleted-event": "(log xehetasunak ezabatu dira)",
        "rev-deleted-user-contribs": "[lankide izena edo Ip helbidea ezabatua - aldatu ezkutapena ekarpenetatik]",
        "rev-deleted-text-permission": "Orrialdearen berrikuspen hau <strong>ezabatua</strong> izan da.\nXehetasunak [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabaketa erregistroan] ikus daitezke.",
+       "rev-suppressed-text-permission": "Orri berrikusketa hau <strong>ezabatua</strong> izan da. Xehetasunak aurkitu daitezke hemen [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
        "rev-deleted-text-unhide": "Orriaren bertsio hau '''ezabatu''' da.\nXehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabatze erregistroan].\nAdministratzailea zarenez, oraindik [$1 bertsio hau ikus dezakezu], nahi izanez gero.",
        "rev-suppressed-text-unhide": "Orriaren bertsio hau '''ezeztatu''' da.\nXehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ezeztatze erregistroan].\nAdministratzailea zarenez, oraindik [$1 bertsio hau ikus dezakezu], nahi izanez gero.",
        "rev-deleted-text-view": "Orriaren berrikuspen hau '''ezabatua''' izan da.\nZuk ikusteko aukera daukazu; xehetasunak [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabaketa erregistroan] ikus ditzakezu.",
        "mergehistory-fail-permission": "Historiala batzeko baimen nahikorik ez.",
        "mergehistory-fail-self-merge": "Iturri eta helmuga orriak berdinak dira.",
        "mergehistory-fail-timestamps-overlap": "Iturburuaren berrikusteak gainjartzen dira edo helmuga berrikusketen ondoren datoz.",
+       "mergehistory-fail-toobig": "Ezin da historia bateraketa egin $1 {{PLURAL:$1|berrikusketa|berrikusketak}} osatutako muga mugituko baitzen.",
        "mergehistory-no-source": "Ez da $1 jatorrizko orrialdea existitzen.",
        "mergehistory-no-destination": "Ez da $1 helburu orrialdea existitzen.",
        "mergehistory-invalid-source": "Jatorrizko orrialdea baliozko izenburua izan behar da.",
        "diff-empty": "(Ez dago alderik)",
        "diff-multi-sameuser": "(Erabiltzaile berdinaren {{PLURAL:$1|erdiko ekarpen bat ez da|$1 erdiko ekarpen ez dira}} erakusten)",
        "diff-multi-otherusers": "({{PLURAL:$1|Tarteko berrikusketa bat|$1 tarteko berrikusketak}}  {{PLURAL:$2|beste erabiltzaile bat|$2 erabiltzaileak}} egina ez da erakusten)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Tarteko berrikusketa bat|$1 tarteko berrikusketak}} by more than $2 {{PLURAL:$2|erabiltzaile batek|erabiltzaile batzuek}} baino gehiagok egina ez erakutsia)",
+       "difference-missing-revision": " ($1) ezberdinatasunaren  {{PLURAL:$2|Berrikusketa bat|$2 berrikusketa}} ez {{PLURAL:$2|da|dira}} aurkitu.\n\nHau, orokorrean ezabatu egin den orri batera deskonektatua dagoen esteka desegonkor baten ondorioz gertatzen da.\n\nHemen xehetasunak aurki daitezke: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "searchresults": "Bilaketaren emaitzak",
        "searchresults-title": "«$1» bilaketaren  emaitzak",
        "titlematches": "Emaitzak artikuluen izenburuetan",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Indiar Ozeanoa",
        "timezoneregion-pacific": "Ozeano Barea",
-       "allowemail": "Beste erabiltzaileengandik e-posta mezuak jasotzea gaitu",
+       "allowemail": "Beste erabiltzaileei niri posta mezuak bidaltzea gaitu",
        "email-blacklist-label": "Erabiltzaile hauei niri mezu elektronikoak bidaltzen debekatu:",
        "prefs-searchoptions": "Bilatu",
        "prefs-namespaces": "Izen-tarteak",
        "recentchanges-legend": "Azken aldaketen aukerak",
        "recentchanges-summary": "Orrialde honetan ikus ditzakezu wiki honetan egindako azken aldaketak.",
        "recentchanges-noresult": "Ez da egon aldaketarik emandako tartean irizpide hau betetzen dutenik.",
+       "recentchanges-timeout": "Bilaketa honek denbora muga gainditu du. Agian beste parametro batzuekin bilatu nahi duzu.",
        "recentchanges-feed-description": "Sindikazio honetan wikian eginiko azkeneko aldaketak jarrai daitezke.",
        "recentchanges-label-newpage": "Aldaketa honek orri berri bat sortu du",
        "recentchanges-label-minor": "Aldaketa hau txikia da",
        "recentchanges-submit": "Erakutsi",
        "rcfilters-tag-remove": "$1 ezabatu",
        "rcfilters-legend-heading": "<strong>Laburpenen zerrenda:</strong>",
-       "rcfilters-other-review-tools": "<strong>Beste berrikusketa tresnak</strong>",
+       "rcfilters-other-review-tools": "Beste berrikusketa tresnak",
        "rcfilters-group-results-by-page": "Talde emaitzak orrika",
        "rcfilters-grouping-title": "Taldekatzen",
        "rcfilters-activefilters": "Iragazki aktiboak",
        "rcfilters-days-show-hours": "{{PLURAL:$1|Ordu $1|$1 ordu}}",
        "rcfilters-highlighted-filters-list": "Azpimarratua: $1",
        "rcfilters-quickfilters": "Gordetako iragazkiak",
-       "rcfilters-quickfilters-placeholder-title": "Ez dira oraindik Link-ak gorde",
+       "rcfilters-quickfilters-placeholder-title": "Ez da oraindik iragazkirik gorde",
        "rcfilters-quickfilters-placeholder-description": "Iragazkiaren doikuntzak gordetzeko eta berrerabiltzeko geroago, egin klik lasterbide ikonoan Active Filter area eremuan, beherago.",
        "rcfilters-savedqueries-defaultlabel": "Gordetako iragazkiak",
        "rcfilters-savedqueries-rename": "Berrizendatu",
        "rcfilters-filter-user-experience-level-unregistered-label": "Ez erregistratuak",
        "rcfilters-filter-user-experience-level-unregistered-description": "Saioa hasi ez duten editoreak.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Iritsiberriak",
-       "rcfilters-filter-user-experience-level-newcomer-description": "10 aldaketa eta 4 ekintza-egun baino gutxiagoko erregistratutako editoreak.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10 aldaketa edo 4 ekintza-egun baino gutxiagoko erregistratutako editoreak.",
        "rcfilters-filter-user-experience-level-learner-label": "Ikasleak",
        "rcfilters-filter-user-experience-level-learner-description": "Erregistratutako editoreak, zeinen esperientzia \"Etorri berriak\" eta \"Erabiltzaile aurreratuen\" artean dagoena.",
        "rcfilters-filter-user-experience-level-experienced-label": "Erabiltzaile trebatuak",
        "rcfilters-tag-prefix-namespace-inverted": "$1 <strong>:ez</strong>",
        "rcfilters-exclude-button-off": "Baztertzea aukeratuta",
        "rcfilters-exclude-button-on": "Baztertzea aukeratuta",
-       "rcfilters-view-advanced-filters-label": "Iragazki aurreratuak",
        "rcfilters-view-tags": "Etiketa aldaketak",
        "rcfilters-view-namespaces-tooltip": "Emaitzak aurrikiaren arabera hautatu",
        "rcfilters-view-tags-tooltip": "Iragazi emaitzak aldaketa etiketak erabiliz",
        "uploaded-script-svg": "Igotako SVG fitxategian \"$1\" elementu aldagarria aurkitu egin da.",
        "uploaded-hostile-svg": "Igotako SVG fitxategiko estilo elementuan segurua ez den CSS-a aurkitu da.",
        "uploaded-event-handler-on-svg": "Ekitaldiaren <code>$1=\"$2\"</code> kudeatze-atributuak ezartzea ez da onartzen SVG fitxategietan.",
+       "uploaded-href-attribute-svg": "<a> elementuek soilik (href) datuei lotu diezaiekete: (fitxategi kapsulatua), http: // edo https: //, edo fragment (#, same-document) helburuak. Beste elementu batzuetarako, adibidez, <image>, soilik datuak eta zatiak onartzen dira. Saiatu zure irudiak SVG esportatzerakoan txikiagotzen. <code>&lt;$1 $2=\"$3\"&gt; </code> aurkitua.",
+       "uploaded-href-unsafe-target-svg": "Babesgabeko datuentzako aurkitutako href-a: URI <code>&lt;$1 $2=\"$3\"&gt;</code> xedea igotako SVG fitxategian.",
+       "uploaded-animate-svg": "Igotako SVG fitxategian <code>&lt;$1 $2=\"$3\"&gt;</code> atributua erabiltzen ari da, href aldatzen ari daitekeen \"animate\" aurkitu den etiketarekin.",
+       "uploaded-setting-event-handler-svg": "Ekitaldi-kudeatzailearen atributuak ezartzea blokeatuta, bilatu <code>&lt;$1 $2=\"$3\"&gt;</code> igotako SVG fitxategian.",
        "uploaded-setting-href-svg": "\"set\" etiketa \"href\" atributua guraso elementuetara gehitzeko blokeatuta dago.",
+       "uploaded-wrong-setting-svg": "\"Set\" etiketa erabiltzea urruneko/datu/script helburu bat gehitzeko edozein atributurako blokeatuta, bilatu <code>&lt;set to=\"$1\"&gt;</code> igotako SVG fitxategian.",
+       "uploaded-setting-handler-svg": "Urruneko/datu/scriptarekin \"eskuliburua\" atributua  ezartzen duen SVGa blokeatuta dago. <code>$1=\"$2\"</ code> aurkitu da SVG kargatutako fitxategian.",
+       "uploaded-remote-url-svg": "Edozein estiloko atributua kanpoko URL-arekin ezartzen duen SVGa blokeatuta dago. SVG fitxategian <code>$1=\"$2\"</code> aurkitu da.",
+       "uploaded-image-filter-svg": "Irudi iragazkia aurkitua URL-arekin: <code>&lt;$1 $2=\"$3\"&gt;</code> igotako SVG fitxategian.",
        "uploadscriptednamespace": "SVG fitxategi hau legez kanpoko \"<nowiki>$1</nowiki>\" izen eremua dauka.",
        "uploadinvalidxml": "Ezin izan da analizatu XMLa igotako fitxategian.",
        "uploadvirus": "Fitxategiak birusa dauka! Xehetasunak: $1",
        "backend-fail-create": "Ezin izan da \"$1\" fitxategia idatzi.",
        "backend-fail-maxsize": "Ezin izan da idatzi \"$1\" fitxategia {{PLURAL:$2|byte bat|$2 byte}} baino handiagoa delako.",
        "backend-fail-readonly": "$1 biltegiratze motorea irakurtzeko soilik dago orain. Emandako arrazoia: <em>$2</em>",
+       "backend-fail-synced": "\"$1\" fitxategia barneko biltegiratzeen babeskopietan dago behin behieneko egoeran",
        "backend-fail-connect": "Ezin izan da \"$1\" gordailuaren atzeko aldearekin konektatu.",
        "backend-fail-internal": "Akats ezezaguna gertatu da \"$1\" gordailuaren atzeko aldean.",
        "backend-fail-contenttype": "Ezin izan da $1n gordeko den artxiboaren eduki mota zehaztu.",
+       "backend-fail-batchsize": "Biltegiratze-euskarriari ; $1 {{PLURAL:$1|eragiketa|eragiketak}} fitxategi sorta eman zaio; muga $2 {{PLURAL:$2|eragiketa|eragiketak}} d(ir)elarik.",
+       "backend-fail-usable": "Ezin izan da \"$1\" fitxategia irakurri edo idaztzi baimen nahikorik edo direktorio/edukiontzirik ez delako aurkitzen.",
        "filejournal-fail-dbconnect": "Ezin izan da $1 biltegiratze-ataleko datu-basearen egunkarira konektatu.",
        "filejournal-fail-dbquery": "Ezin izan da egunkariaren datu-basea eguneratu $1 biltegiratze-atalerako.",
        "lockmanager-notlocked": "Ezin izan da \"$1\" askatu; ez dago itxita.",
        "img-auth-nofile": "Ez dago \"$1\" fitxategirik.",
        "img-auth-isdir": "\"$1\" direktorio batera iristen saiatzen ari zara.\nFitxategien sarbidea baino ez da onartzen.",
        "img-auth-streaming": "\"$1\" sekuentziatzen.",
+       "img-auth-public": "Img_auth.php-ren funtzioa wiki pribatuetako fitxategiak irteerazteko da.\nWiki hau wiki publiko gisa konfiguratuta dago.\nSegurtasun ezin hobea lortzeko, img_auth.php desgaituta dago.",
        "img-auth-noread": "Erabiltzaileak ez du \"$1\" irakurtzeko sarbiderik.",
        "http-invalid-url": "URL baliogabea: $1",
        "http-invalid-scheme": "\"$1\" eskema duten URLak ez dira baliagarriak.",
        "linkstoimage-redirect": "$1 (fitxategiranzko birbideratzea) $2",
        "duplicatesoffile": "Ondorengo fitxategi {{PLURAL:$1|hau beste honen berdina da|$1 hauek beste honen berdinak dira}} ([[Special:FileDuplicateSearch/$2|zehaztasun gehiago]]):",
        "sharedupload": "Elkarbanatutako fitxategi hau $1-(e)ko igoera bat da eta beste proiektuek ere erabil dezakete.",
+       "sharedupload-desc-there": "Fitxagia $1tik dator eta beste proiektu batzuk erabili ditzakete. Mesedez ikusi [$2 fitxategi deskribapen orria] informazio gehiagorako.",
        "sharedupload-desc-here": "Fitxategi hau $1-(e)koa da eta beste proeiktuetan erabilia izan liteke.\nBere [$2 fitxategiaren deskribapen orrialdea] behean dago.",
+       "sharedupload-desc-edit": "Fitxategi hau $1tik dator eta beste proiektuetatik erabili daiteke. Beharbada bere deskribapena aldatu nahi duzu bere [$2 fitxategi deskribapen orrian].",
+       "sharedupload-desc-create": "Fitxategi hau $1tik dator eta beste proiektuetatik erabili daiteke. Beharbada bere deskribapena aldatu nahi duzu bere [$2 fitxategi deskribapen orrian].",
        "filepage-nofile": "Izen horrekin ez dago fitxategirik.",
        "filepage-nofile-link": "Ez dago fitxategirik izen honekin, baina [$1 igo dezakezu].",
        "uploadnewversion-linktext": "Fitxategi honen bertsio berri bat igo",
        "uncategorizedcategories": "Kategorizatu gabeko kategoriak",
        "uncategorizedimages": "Kategorizatu gabeko irudiak",
        "uncategorizedtemplates": "Sailkatu gabeko txantiloiak",
+       "uncategorized-categories-exceptionlist": "# Kategoria zerrenda bat dauka, Special:UncategorizedCategories lekuan ez zena aipatu behar. Lerro bakoitzeko, \"*\" hasita. Beste karaktere batekin hasten diren lerroak (zuriuneak barne) ez dira kontuan hartuko. Erabili \"#\" iruzkinetarako.",
        "unusedcategories": "Erabili gabeko kategoriak",
        "unusedimages": "Erabili gabeko fitxategiak",
        "wantedcategories": "Eskatutako kategoriak",
        "wantedpages-summary": "Lotura gehien dituzten eta existitzen ez diren orrialdeen zerrenda da hau, eurengana birzuzenketak baino ez dituzten orrialdeak kenduta. Eurenganako birzuzenketak dituzten baina existitzen ez diren orrialdeen zerrenda bat ikusteko, [[{{#special:BrokenRedirects}}|apurtutako birzuzenketen zerrendara]] jo dezakezu.",
        "wantedpages-badtitle": "Izenburu okerra hautatutako emaitzetan: $1",
        "wantedfiles": "Eskatutako fitxategiak",
+       "wantedfiletext-cat": "Hurrengo fitxategiak erabiltzen dira baina ez dira existitzen. Kanpoko biltegietako fitxategiak zerrendaturik agertu daitezke nahiz eta ez existitu. Positibo faltsu hauek <del>suntsitu</del egingo dira. Gainera, existitzen ez diren fitxategiak daramatzaten orriak [[:$1]]n zerrendaturik daude.",
+       "wantedfiletext-cat-noforeign": "Hurrengo fitxategiak erabiltzen dira baina ez dira existitzen. Gainera, existitzen ez diren fitxategiak txertatzen dituzten orriak ez dira zerrendatzen [[:$1]]n.",
+       "wantedfiletext-nocat": "Hurrengo fitxategiak erabiltzen dira baina ez dira existitzen. Kanpoko biltegietako fitxategiak zerrendaturik agertu daitezke nahiz eta ez existitu. Positibo faltsu hauek <del>suntsitu</del egingo dira.",
        "wantedfiletext-nocat-noforeign": "Hurrengo artxiboak erabiltzen ari dira baina ez dira existitzen.",
        "wantedtemplates": "Eskatutako txantiloiak",
        "mostlinked": "Gehien lotutako orrialdeak",
        "deadendpagestext": "Jarraian zerrendatutako orrialdeek ez daukate wikiko beste edozein orrialdetarako loturarik.",
        "protectedpages": "Babestutako orrialdeak",
        "protectedpages-indef": "Babes mugagabeak bakarrik",
+       "protectedpages-summary": "Orrialde honetan unean babestutako orriak zerrendatzen dira. Sorkuntza babesten duten izenen zerrenda lortzeko, ikusi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Kaskada moduko babesak bakarrik",
        "protectedpages-noredirect": "Birzuzenketak ezkutatu",
        "protectedpagesempty": "Ez dago parametro horiek dituen babesturiko orrialderik oraintxe.",
        "protectedpages-unknown-timestamp": "Ezezaguna",
        "protectedpages-unknown-performer": "Erabiltzaile ezezaguna",
        "protectedtitles": "Babestutako tituluak",
+       "protectedtitles-summary": "Orrialde honetan sorkuntzatik babesturiko izenburuak zerrendatzen dira. Babestutako orrialdeen zerrenda ikusteko, ikusi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Ez dago parametro horiek dituen babesturiko izenbururik oraintxe.",
        "protectedtitles-submit": "Izenburuak erakutsi",
        "listusers": "Erabiltzaileen zerrenda",
        "apisandbox": "API proba orria",
        "apisandbox-jsonly": "API sandbox-a erabiltzeko JavaScript eskatzen da.",
        "apisandbox-api-disabled": "APIa desgaituta dago gune honetan.",
+       "apisandbox-intro": "Erabili orri hau <strong>MediaWiki web zerbitzuen APIa</ strong>rekin esperimentatzeko.\nIkusi [[mw:API:Main page|API dokumentazioa]] API erabilerari buruzko xehetasun gehiago lortzeko. Adibidez: [https://www.mediawiki.org/wiki/API#A_simple_example orri nagusiko edukia lortu]. Hautatu ekintza bat adibide gehiago ikusteko.\n\nKontuan izan, hau da sandbox bat bada ere, orri honetan egiten dituzun ekintzak wikiak alda ditzaketela.",
        "apisandbox-fullscreen": "Zabaldu panela",
        "apisandbox-fullscreen-tooltip": "Zabaldu sandbox panela arakatzailearen leihoa betetzeko.",
        "apisandbox-unfullscreen": "Erakutsi orria",
        "apisandbox-reset": "Garbitu",
        "apisandbox-retry": "Saiatu berriro",
        "apisandbox-loading": "API $1 modulorako informazioa kargatzen...",
+       "apisandbox-load-error": "\"$1\" API modulorako informazioa kargatzerakoan akats bat gertatu da: $2",
        "apisandbox-no-parameters": "API modulu honek ez du parametrorik.",
        "apisandbox-helpurls": "Laguntza estekak",
        "apisandbox-examples": "Adibideak",
        "apisandbox-sending-request": "APIari eskaera bidaltzen...",
        "apisandbox-loading-results": "APIaren emaitzak jasotzen...",
        "apisandbox-results-error": "Errore bat gertatu da API kontsulta-erantzuna kargatzean: $1",
+       "apisandbox-results-login-suppressed": "Eskaera hau erregistratu gabeko erabiltzaile bezala prozesatu da, Same-Originaren segurtasuna arakatzailean nabigatzeko erabil daitekelako bestela. Kontuan izan API sandboxeko token automatikoko manipulazioa ez dela behar bezala funtzionatzen horrelako eskaerekin, eskuz bete itzazu mesedez.",
        "apisandbox-request-selectformat-label": "Erakutsi eskaera datuak horrela:",
        "apisandbox-request-format-url-label": "URL kontsulta katea",
        "apisandbox-request-url-label": "Eskatutako URLa:",
        "apisandbox-alert-field": "Zelai honetako balioak ez du balio.",
        "apisandbox-continue": "Jarraitu",
        "apisandbox-continue-clear": "Garbitu",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continue] azken eskaera prozesatuko du; {{int:apisandbox-continue-clear}} jarraipenarekin zerikusia duten parametroak ezabatuko ditu.",
        "apisandbox-param-limit": "<kbd>max</kbd> sartu gehienezko muga erabiltzeko.",
        "apisandbox-multivalue-all-namespaces": "$1 (Izen eremu guztiak)",
        "apisandbox-multivalue-all-values": "$1 (balio guztiak)",
        "listgrouprights-namespaceprotection-namespace": "Izen-tartea",
        "listgrouprights-namespaceprotection-restrictedto": "Erabiltzaileak editatzera baimentzeko eskubidea(k)",
        "listgrants": "Diru-laguntzak",
+       "listgrants-summary": "Ondoren dagoen beken zerrendak erabiltzailearen eskubideak dituzten sarbideak erakusten ditu. Erabiltzaileek aplikazioek beraien kontua erabiltzeko baimena eska dezakete, baimen mugatuekin, erabiltzaileak eskaerari eman dion konfiantzarekin soilik. Erabiltzaile baten izenean jarduten duen aplikazio batek ezin du erabiltzaileak ez dituen eskubideak erabili. [[{{MediaWiki:Listgrouprights-helppage}}|informazio gehigarria]] egon daiteke eskubide indibidualen inguruan.",
        "listgrants-grant": "Baimena eman",
        "listgrants-rights": "Eskubideak",
        "trackingcategories": "Jarraipen kategoriak",
        "trackingcategories-name": "Mezuaren izena",
        "trackingcategories-desc": "Kategoria inklusio irizpideak",
        "restricted-displaytitle-ignored": "Bistaratze izen ezezagunak dituzten orriak",
+       "restricted-displaytitle-ignored-desc": "Orriak <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> ez du kontuan hartu orriaren oraingo izenburuarekin bat ez datorrelako.",
+       "noindex-category-desc": "Orri honek sarrera erroboten eskutik ez dauka eginda hitz magikoa daukalako <code><nowiki>__NOINDEX__</nowiki></code> barruan eta banderatxoa onartzen ez duen izen-eremuan dagoelako.",
+       "index-category-desc": "Orriak <code><nowiki>__INDEX__</nowiki></code> darama (eta banderatxoa onartua dagoen izen-eremuan dago), beraz, sarrera erroboten esku dago nahiz eta normalean horrela izan behar ez den.",
+       "post-expand-template-inclusion-category-desc": "Orri hau  <code>$wgMaxArticleSize</code> baino handiagoa txantilioi guztiak zabaldu eta gero, horregatik batzuk ez dira zabaldu.",
+       "post-expand-template-argument-category-desc": "Orrialdea <code>$wgMaxArticleSize</ code> baino handiagoa da, txantiloiaren argumentua zabaldu ondoren (triple giltza duen zerbait, <code>{{{Foo}}}</ code> bezalakoa).",
+       "expensive-parserfunction-category-desc": "Orriak analisi funtzional garesti gehiegi erabiltzen ditu (like <code>#ifexist</code>). \nIkusi [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Orriak fitxategi hautsitako esteka bat du (fitxategi bat txertatzeko esteka fitxategia ez denean existitzen).",
        "hidden-category-category-desc": "Kategoriak <code><nowiki>__HIDDENCAT__</nowiki></code> darama bere orrialde edukian, orrien esteken kutxa orrian lehenespenez erakusteko saihesten duena.",
        "trackingcategories-nodesc": "Ez dago deskribapenik eskuragarri.",
        "delete-toobig": "Orrialde honek aldaketa historia luzea du, {{PLURAL:$1|berrikuspen batetik|$1 berrikuspenetik}} gorakoa.\nOrrialde horien ezabaketa mugatua dago {{SITENAME}}n ezbeharrak saihesteko.",
        "delete-warning-toobig": "Orrialde honek aldaketa historia luzea du, {{PLURAL:$1|berrikuspen batetik|$1 berrikuspenetik}} gorakoa.\nEzabatzeak ezbeharrak eragin ditzake {{SITENAME}}ren datu-basean;\nkontu izan.",
        "deleteprotected": "Ezin dezakezu orri hau ezabatu babestu egin delako.",
+       "deleting-backlinks-warning": "<strong>Abisua:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Beste orriek]] ezabatzear zauden orrira linkatu edo doaz.",
        "deleting-subpages-warning": "<strong>Oharra:</strong> Ezabatuko duzun orrialdeak [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|a subpage|$1 subpages|51=over 50 subpages}}]] dauka.",
        "rollback": "Desegin aldaketak",
        "rollbacklink": "desegin",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) wikilariaren aldaketak deseginda, edukia [[User:$1|$1]] wikilariaren azken bertsiora itzuli da.",
        "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}}-n azken berrikuspena ezkutatutako erabiltzaile batek egindako leheneraketa aldaketak.",
        "rollback-success": "{{GENDER:$3|$1}}; wikilariaren aldaketak deseginda,\nedukia {{GENDER:$4|$2}} wikilariaren azken bertsiora itzuli da.",
+       "rollback-success-notify": "$1k leheneratutako aldaketal;\nazkenengo berrikusketara aldatu da berriz $2ren eskutik. [$3 Erakutsi aldaketak]",
        "sessionfailure-title": "Saio-akatsa",
        "sessionfailure": "Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko \"atzera\" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.",
        "changecontentmodel": "Aldatu orri bateko eduki eredua",
        "changecontentmodel-emptymodels-text": "[[:$1]] daukan edukia ezin da inolaz ere edozein motara bihurtu.",
        "log-name-contentmodel": "Log eduki eredu aldaketa",
        "log-description-contentmodel": "Orrialde honetan orrien eduki-ereduen aldaketak zerrendatzen dira, baita lehenespenez kanpoko beste eduki batzuekin sortu ziren orriak.",
+       "logentry-contentmodel-new": "$1 wikilariak $3 orria \"$5\" lehenetsirik ez dagoen eduki eredua erabiliz {{GENDER:$2|sortu}} egin du",
+       "logentry-contentmodel-change": "$1 wikilariak $3 orriko eduki eredua \"$4\"tik \"$5\"ra {{GENDER:$2|aldatu}} egin du",
        "logentry-contentmodel-change-revertlink": "desegin",
        "logentry-contentmodel-change-revert": "desegin",
        "protectlogpage": "Babes erregistroa",
        "protect-locked-blocked": "Babes-mailak ezin dira aldatu blokeatuta dagoen bitartean.\nHemen daude '''$1''' orrialdearen egungo ezarpenak:",
        "protect-locked-dblock": "Babes-mailak ezin dira aldatu, datu-basea blokeatuta baitago.\nHemen daude '''$1''' orriaren oraingo ezarpenak:",
        "protect-locked-access": "Zure kontuak ez du baimenik babes mailak aldatzeko.\nHemen daude '''$1''' orrialderako oraingo ezarpenak:",
-       "protect-cascadeon": "Orrialde hau babestuta dago orain, ondorengo orrialde {{PLURAL:$1|honek kaskada bidezko babesa aktibatua duelako|hauek kaskada bidezko babesa aktibatua dutelako}}.\nOrrialde honen babes maila alda dezakezu, baina ez du eraginik izango kaskada bidezko babesean.",
+       "protect-cascadeon": "Orrialde hau babestuta dago orain, ondorengo orrialde {{PLURAL:$1|honek kaskada bidezko babesa aktibatua duelako|hauek kaskada bidezko babesa aktibatua dutelako}}.\nOrrialde honen babes maila aldaketek kaskada bidezko babesean ez dute eraginik izango.",
        "protect-default": "Lankide guztiak baimendu",
        "protect-fallback": "\"$1\" baimena duten erabiltzaileak bakarrik baimendu",
        "protect-level-autoconfirmed": "Baimendu lankide autokonfirmatuei bakarrik",
        "undeletehistorynoadmin": "Artikulua ezabatu egin da. Ezabatzeko azalpena beheko laburpenean erakusten da, ezabatu aurretik parte hartu zuten erabiltzaileen xehetasunekin batera. Ezabatutako berrikuspenen oraingo testua administratzaileek bakarrik ikus dezakete.",
        "undelete-revision": "$1(e)n berrikuspen $3(e)k ezabatu du ($4(e)ko $5(e)tan):",
        "undeleterevision-missing": "Baliogabeko berrikuspena. Baliteke lotura ezegokia izatea, edo berriskupena leheneratu edo kendu izana.",
+       "undeleterevision-duplicate-revid": "{{PLURAL:$1|Berrikusketa bat ezin izan da|$1 berrikusketa ezin izan dira}} berregin, {{PLURAL:$1|bere|beraien}} <code>rev_id</code> erabiltzen zegoelako jada.",
        "undelete-nodiff": "Ez da aurkitu aurreko berrikuspenik.",
        "undeletebtn": "Leheneratu",
        "undeletelink": "ikusi/leheneratu",
        "import-nonewrevisions": "Ez da berrikuspenik inportatu (guztiak aurretiaz aurkeztu dira edo akatsengatik behertan behera utzi ziren).",
        "xml-error-string": "$1 $2 lerroan, $3 zutabean ($4 byte): $5",
        "import-upload": "Igo XML datuak",
-       "import-token-mismatch": "Sesio data galdu da. Saia saitez berriro ere, mesedez.",
+       "import-token-mismatch": "Saioaren datuen galera.\n\nBaliteke saioa amaituta egotea. '''Egiaztatu oraindik saioa hasita duzula eta saiatu berriro'''.\nOraindik ez badu funtzionatzen, saiatu [[Special:UserLogout|logout out]] eta saioa hasi berriro, eta egiaztatu zure nabigatzaileak gune honetako cookieak onartzen dituela.",
        "import-invalid-interwiki": "Ezin da esandako wikitik inportatu.",
        "import-error-edit": "\"$1\" orrialdea ez da inportatu aldatzeko baimenik ez duzulako.",
        "import-error-create": "\"$1\" orrialdea ez da inportatu sortzeko baimenik ez duzulako.",
        "import-error-interwiki": "\"$1\" orrialdea ez da inportatu bere izena kanpo loturetarako gordeta dagoelako (interwiki).",
        "import-error-special": "\"$1\" orrialdea ez da inportatu izen-tarte berezi bati dagokiolako eta horretan orrialderik ezin delako egon.",
        "import-error-invalid": "\"$1\" orrialdea ez da inportatu horretarako dagokion izena ez delako baliagarria wiki honetan.",
+       "import-error-unserialize": "\"$1\" orriko $2 berrikusketa ezin izan da deskategorizatu. Berrikusketa $4 bezala sailkatutako $3 eduki eredua erabiltzeko txostena bidali da.",
+       "import-error-bad-location": "$3 eduki eredua erabiltzen duen $2 berrikusketak ezin da wiki honetako $1 lekuan bildu, orri horretan eredu hori ez delako onartzen.",
        "import-options-wrong": "Aukera {{PLURAL:$2|ez-egokia|ez-egokiak}}:<nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Emandako jatorri orrialdea izenburu ez-baliagarria da.",
        "import-rootpage-nosubpage": "Jatorri orrialdearen «$1» izen-tarteak ez du baimentzen azpi-orrialderik.",
        "importlogpage": "Inportazio erregistroa",
        "importlogpagetext": "Beste wiki batzutatik historial eta guzti egindako orrialdeen inportazio administratiboak.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}}",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} $2-(e)tik",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspenak}} inportatuak",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspenak}} $2-(e)tik inportatuak",
        "javascripttest": "JavaScript frogatzen",
        "javascripttest-pagetext-unknownaction": "Ekintza ezezaguna \"$1\".",
        "javascripttest-qunit-intro": "Ikusi [$1 frogen dokumentazioa] mediawiki.org orrialdean.",
        "anonymous": "{{SITENAME}}(e)ko lankide {{PLURAL:$1|anonimoa|anonimoak}}",
        "siteuser": "{{SITENAME}}(e)ko $1 erabiltzailea",
        "anonuser": "{{SITENAME}}-(e)ko $1 erabiltzaile anonimoa",
-       "lastmodifiedatby": "Orrialdearen azken aldaketa: $2, $1. Nork: $3.",
+       "lastmodifiedatby": "Orrialde azkenik aldatua: $2, $1n $3 wikilariaren eskutik.",
        "othercontribs": "$1(r)en lanean oinarrituta.",
        "others": "besteak",
        "siteusers": "{{SITENAME}}(e)ko $1 {{PLURAL:$2|erabiltzailea|erabiltzaileak}}",
        "file-info-png-repeat": "{{PLURAL:$1|Behin|$1 aldiz}} ikusia",
        "file-info-png-frames": "{{PLURAL:$1|Frame bat|$1 frame}}",
        "file-no-thumb-animation": "'''Oharra: Muga teknikoak direla eta, fitxategi honen iruditxoak ezin dira animatu.'''",
+       "file-no-thumb-animation-gif": "<strong>Oharra: muga teknikoak direla eta, erresoluzio handiko GIF irudi hau bezalakoak ez dira animatuak izango. </strong>",
        "newimages": "Fitxategi berrien galeria",
        "imagelisttext": "Jarraian duzu $2(e)z ordenatutako {{PLURAL:$1|fitxategi baten|'''$1''' fitxategiren}} zerrenda.",
        "newimages-summary": "Orrialde berezi honek igotako azkeneko fitxategiak erakusten ditu.",
        "scarytranscludetoolong": "[URLa luzeegia da]",
        "deletedwhileediting": "'''Oharra''': Zu aldaketak egiten hasi ondoren orrialdea ezabatua izan da!",
        "confirmrecreate": "[[User:$1|$1]] erabiltzaileak ([[User talk:$1|eztabaida]]) {{GENDER:$1|deleted}} orrialde hau ezabatu zu aldatzen hasi eta gero arrazoi honekin:\n: <em>$2</em>\nMesedez, baieztatu benetan orrialde hau berriz sortu nahi duzula.",
+       "confirmrecreate-noreason": "[[User:$1|$1]] wikilariak ([[User talk:$1|talk]]) orri hau {{GENDER:$1|ezabatu}} du zuk aldatzen hasi eta gero. Mesedez, konfirmatu ezazu orri hau berregin nahi duzula.",
        "recreate": "Birsortu",
        "confirm-purge-title": "Orri hau purgatu",
        "confirm_purge_button": "Ados",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|eztabaida]])",
        "timezone-local": "Lokala",
        "duplicate-defaultsort": "Adi: Berezko \"$2\" antolatzeak aurreko berezko \"$1\" antolatzea gainditzen du.",
+       "duplicate-displaytitle": "<strong>Abisua:</strong> \"$2\" aurkezpen izenburua aurretiazko \"$1\"  aurkezpen izenburua baliogabetzen du.",
+       "restricted-displaytitle": "<strong>Abisua:</strong> \"$1\" aurkezpen izenburua ez da kontuan hartu orriak orain daukan izenburuarekin ez delako baliokidea.",
+       "invalid-indicator-name": "<strong>Akatsa:</strong> Orriaren egoera indikatzaileen atributu <code>izena</code> ezin da hutsik egon.",
        "version": "Bertsioa",
        "version-extensions": "Instalatutako luzapenak",
        "version-skins": "Instalatutako itxurak",
        "version-poweredby-others": "beste batzuk",
        "version-poweredby-translators": "translatewiki.net itzultzaileak",
        "version-credits-summary": "Hurrengo pertsonak gogoan izan nahi ditugu [[Special:Version|MediaWikiri]] egindako ekarpena dela eta.",
+       "version-license-info": "MediaWiki software librea da; birbanatu daitekena edota alda dezakezuna GNU Lizentzia Publiko Orokorraren baldintzapean, Free Software Foundation-ek argitaratutakoaren arabera; Lizentziaren 2. bertsioa edo (nahiago baduzu) bertsio berriago bat.\n\nMediaWiki partekatzen da erabilgarria izango delakoan, baina BERMERIK GABE; MERKATURATZEKO ez dela bermerik gabe edo HELBURU PARTIKULARRETARAKO izango den jakin gabe. Ikus GNU Lizentzia Publiko Orokorra xehetasun gehiagorako.\n\n{{SERVER}}{{SCRIPTPATH}}/COPYING lizentzia programa publiko orokorraren kopia bat jaso beharko zenuke honekin batera; bestela, idatzi Free Software Foundation-en, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, AEB edo [//www.gnu.org/licenses/old-licenses/gpl-2.0.html irakurri sarean].",
        "version-software": "Instalatutako softwarea",
        "version-software-product": "Produktua",
        "version-software-version": "Bertsioa",
        "tag-filter-submit": "Iragazkia",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketak}}]]: $2)",
        "tag-mw-contentmodelchange": "Eduki eredu aldaketa",
+       "tag-mw-contentmodelchange-description": "Orri baten [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] aldaketak",
        "tags-title": "Etiketak",
        "tags-intro": "Orri honek softwareak aldatzeko bezala marka ditzazkeen etiketak zerrendatzen ditu, eta berauen esanahia.",
        "tags-tag": "Etiketaren izena",
        "tags-deactivate": "desaktibatu",
        "tags-hitcount": "$1 {{PLURAL:$1|aldaketa|aldaketa}}",
        "tags-manage-no-permission": "Ez duzu etiketa aldaketak kudeatzeko baimenik.",
+       "tags-manage-blocked": "Ezin dezakezu etiketa aldaketa kudeatu {{GENDER:$1|you}} blokeatua egon bitartean.",
        "tags-create-heading": "Etiketa berria sortu",
        "tags-create-explanation": "Lehenespenez, sortutako etiketa berriak erabiltzaileek eta botek erabiltzeko eskuragarri egingo dira.",
        "tags-create-tag-name": "Etiketaren izena:",
        "tags-create-reason": "Arrazoia:",
        "tags-create-submit": "Sortu",
        "tags-create-no-name": "Etiketatutako izen bat zehaztu behar duzu.",
+       "tags-create-invalid-chars": "Etiketak izenek ezin dezakete komak (<code>,</code>), hodi (<code>|</code>), edo barruti aurreraturik (<code>/</code>) eraman.",
        "tags-create-invalid-title-chars": "Etiketa izenak ezin du orri-tituluetan erabili ezin diren karaktererik eduki.",
        "tags-create-already-exists": "\"$1\" etiketa badago.",
+       "tags-create-warnings-above": "Hurrengo {{PLURAL:$2|abisua aurkitu da|abisuak aurkitu dira}} \"$1\" etiketa sortzen saiatzerakoan:",
        "tags-create-warnings-below": "Etiketaren sorrerarekin jarraitu nahi duzu?",
        "tags-delete-title": "Etiketa ezabatu",
        "tags-delete-explanation-initial": "Datu-basetik \"$1\" etiketa ezabatzera zoaz",
+       "tags-delete-explanation-in-use": "{{PLURAL:$2|$2 berrikusketa edo erregistro sarrera kenduko da|all $2 berrikusketa edota erregistro sarrera guztiak kenduko dira}} orain aplikatutako lekutik.",
+       "tags-delete-explanation-warning": "Akzio hau <strong>atzeraezina</strong> eta <strong>desegin</strong>ezin daitekeena da, ezta datu baseak antolatzen dituzten administratzaileen partez.Ezabatu nahi duzun etiketa hau dela ziurtatu.",
+       "tags-delete-explanation-active": "<strong>\"$1\" etiketa aktibo dago oraindik, eta etorkizunean aplikatzen jarraituko da.</strong> Hau ez gertatzea nahi bada, etiketa aplikatzeko jarrita dagoen leku(eta)ra jo, bertan ezgaitutzeko.",
        "tags-delete-reason": "Arrazoia:",
        "tags-delete-submit": "Betirako ezabatu etiketa hau",
        "tags-delete-not-allowed": "Luzapen batek definitutako etiketak ezin dira ezabatu, luzapenak bereziki baimendu ezean.",
        "tags-delete-not-found": "\"$1\" etiketa  ez da existitzen.",
+       "tags-delete-too-many-uses": "\"$1\" etiketa $2 {{PLURAL:$2|berrikusketa bat|berrikusketa}} baino gehiagotan aplikatu egin denez ezingo da ezabatu",
+       "tags-delete-warnings-after-delete": "\"$1\" etiketa ezabatu egin da, baina hurrengo {{PLURAL:$2|abisua|abisuak}} aurkitu d(ir)a:",
        "tags-delete-no-permission": "Ez daukazu baimenik etiketa aldaketak ezabatzeko.",
        "tags-activate-title": "Etiketa aktibatu",
        "tags-activate-question": "\"$1\" etiketa aktibatzear zaude.",
        "tags-deactivate-not-allowed": "Ezin izan da \"$1\" etiketa desaktibatu.",
        "tags-deactivate-submit": "Desaktibatu",
        "tags-apply-no-permission": "Ez duzu etiketak aldatzeko baimen nahikorik zure aldaketa baimenetan.",
+       "tags-apply-blocked": "Ezin dituzu aldaketaren etiketak aplikatu zure aldaketekin batera, blokeaturik {{GENDER:$1|zauden}} bitartean.",
        "tags-apply-not-allowed-one": "\"$1\" etiketa ez dauka eskuz aplikatzeko baimenik.",
        "tags-apply-not-allowed-multi": "Hurrengo {{PLURAL:$2|etiketa|etiketak}} ezin d(ir)a eskuz aplikatu: $1",
        "tags-update-no-permission": "Ez duzu aldaketaren etiketak gehitzeko edo kentzeko baimenik bakarkako berrikuspen edo erregistroko sarreretatik.",
+       "tags-update-blocked": "Ezin ditzakezu etiketa aldaketak gehitu edo kendu blokeatuta  {{GENDER:$1|zauden}} bitartean.",
        "tags-update-add-not-allowed-one": "$1 etiketa ezin da eskuz gehitu.",
        "tags-update-add-not-allowed-multi": "Hurrengo {{PLURAL:$2|etiketa|etiketak}} ezin d(ir)a eskuz gehitu: $1",
        "tags-update-remove-not-allowed-one": "$1 etiketa ezabatzeko baimenik ez dago.",
        "tags-edit-revision-selected": "[[:$2]](r)en {{PLURAL:$1|aukeratutako berrikusketa|aukeratutako berrikusketak}}:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|Aukeratutako log gertakaria|Aukeratutako log gertakariak}}:",
        "tags-edit-revision-legend": "{{PLURAL:$1|Berrikusketa honetatik| $1 berrikuska guztietatik}} etiketak gehitu edo kendu",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|erregistro sarrera honetatik|$1 erregistro sarreretatik}} etiketak kendu edo gehitu",
        "tags-edit-existing-tags": "Existitzen diren etiketak:",
        "tags-edit-existing-tags-none": "<em>Bat ere ez</em>",
        "tags-edit-new-tags": "Etiketa berriak:",
        "tags-edit-chosen-placeholder": "Hautatu etiketa batzuk",
        "tags-edit-chosen-no-results": "Balio duen etiketarik ez da aurkitu",
        "tags-edit-reason": "Arrazoia:",
+       "tags-edit-revision-submit": "Aldaketak {{PLURAL:$1|berrikusketa honi|$1 berrikusketa hauei}} aplikatu",
        "tags-edit-logentry-submit": " {{PLURAL:$1|saio sarrera honetan|$1 saio sarreretan}} aldaketak aplikatu",
        "tags-edit-success": "Aldaketak ezarri dira.",
        "tags-edit-failure": "Ezin izan dira aldaketak ezarri:\n$1",
        "htmlform-user-not-exists": "<strong>$1</strong> ez da existitzen.",
        "htmlform-user-not-valid": "<strong>$1</strong> erabiltzaile izena ezin da erabili.",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
+       "logentry-delete-delete_redir": "$1k {{GENDER:$2|}} $3 birbideraketa ezabatu du gainidatziz",
        "logentry-delete-restore": "$1 administratzaileak «$3» orria {{GENDER:$2|lehengoratu}} du",
        "logentry-delete-restore-nocount": "$1-k {{GENDER:$2|leheneratutako}} $3 orria.",
        "restore-count-revisions": "{{PLURAL:$1|berrikusketa 1|$1 berrikusketa}}",
        "restore-count-files": "{{PLURAL:$1|Fitxategi 1|$1 fitxategi}}",
        "logentry-delete-event": "$1 wikilariak ikusgaitasuna {{GENDER:$2|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
        "logentry-delete-revision": "$1 wikilariak ikusgaitasuna {{GENDER:$2|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
+       "logentry-delete-event-legacy": "$1k {{GENDER:$2|}} $3ko sarrera gertaeren ikuspena aldatu egin du.",
+       "logentry-delete-revision-legacy": "$1k {{GENDER:$2|}} $3 orriko berrikusketen ikuspena aldatu egin du",
        "logentry-suppress-delete": "$1 erabiltzaileak $3 orria {{GENDER:$2|ezabatu}} du",
-       "logentry-suppress-event": "$1 wikilariak ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, «$3» orrian: $4",
+       "logentry-suppress-event": "$1 wikilariak {{GENDER:$2|}} ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerei}} $3n: $4",
+       "logentry-suppress-revision": "$1 wikilariak ikusgaitasuna aldatu {{PLURAL:$5|dio berrikusketari|$5 berrikusketei}} $3 orrian: $4",
+       "logentry-suppress-event-legacy": "$1k {{GENDER:$2|}} sekretuan $3 sarrera gertaeren ikuspena aldatu egin du",
+       "logentry-suppress-revision-legacy": "$1 wikilariak izkutuan $3 orriko berrikusketen ikuspena {{GENDER:$2|aldatu}} egin du",
        "revdelete-content-hid": "edukia ezkutatu da",
        "revdelete-summary-hid": "edizioaren laburpena ezkutatu da",
        "revdelete-uname-hid": "lankide izena ezkutatua",
        "logentry-suppress-block": "$1 {{GENDER:$2|administratzaileak}} {{GENDER:$4|$3}} blokeatu du. Iraupena: $5 $6",
        "logentry-suppress-reblock": "$1 administratzaileak {{GENDER:$4|$3}} wikilariaren blokeoa {{GENDER:$2|aldatu du}}. Blokeoaldia: $5 $6",
        "logentry-import-upload": "$1(e)k $3 {{GENDER:$2|inportatu du}} fitxategi-igoera bidez",
+       "logentry-import-upload-details": "$1 erabiltzaileak $3 {{GENDER:$2|inportatu}} du ($4 {{PLURAL:$4|berrikusketa|berrikusketak}}) fitxategia igo eginez.",
+       "logentry-import-interwiki": "$1 wikilariak {{GENDER:$2|}} $3 beste wiki batetik inportatu egin du",
+       "logentry-import-interwiki-details": "$1 wikilariak {{GENDER:$2|}} $3 inportatu egin du $5tik ($4 {{PLURAL:$4|berrikusketa|berrikusketak}})",
+       "logentry-merge-merge": "$1 wikilariak $3 $4ri {{GENDER:$2|batu}} egin dio ($5 gehienez baitan hartzen duten berrikusketak)",
        "logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
        "logentry-move-move_redir": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik",
        "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua {{GENDER:$2|sortu}} du",
        "logentry-newusers-byemail": "$1(e)k $3 erabiltzaile kontua {{GENDER:$2|sortu du}} eta pasahitza emailez bidali da",
        "logentry-newusers-autocreate": "$1 erabiltzaile kontua automatikoki {{GENDER:$2|sortu da}}",
+       "logentry-protect-move_prot": "$1 wikilariak babespen ezarpenak $4tik $3ra {{GENDER:$2|mugitu}} egin ditu",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|administratzaileak}} babesa kendu dio «$3» orriari",
+       "logentry-protect-protect": "$1 wikilariak {{GENDER:$2|}} $3 $4 babestu du",
+       "logentry-protect-protect-cascade": "$1 wikilariak  {{GENDER:$2|}} $3 $4 babestu du [korrontean]",
+       "logentry-protect-modify": "$1 wikilariak {{GENDER:$2|}} $3 $4rentzako babespen maila aldatu du",
+       "logentry-protect-modify-cascade": "$1 wikilariak $3 $4 duten babespen maila {{GENDER:$2|aldatu}} egin du [kaskada bidez]",
+       "logentry-rights-rights": "$1 wikilariak {{GENDER:$6 eta|$3 wikilarientzako}} talde bazkidetza $4tik $5ra {{GENDER:$2|aldatu}} dizkie",
+       "logentry-rights-rights-legacy": "$1 erabiltzaileak $3ren talde bazkidetza {{GENDER:$2|aldatu}} egin du",
+       "logentry-rights-autopromote": "$1 automatikoki $4tik $5ra  {{GENDER:$2|igo}} egin zaio",
        "logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
        "logentry-upload-overwrite": "$1(e)k $3(r)en bertsio berria {{GENDER:$2|igo du}}",
        "logentry-upload-revert": "$1(e)k $3 {{GENDER:$2|igo du}}",
        "log-name-managetags": "Etiketa kudeatze erregistroa",
        "log-description-managetags": "Orrialde honetan [[Special:Tags|etiketekin]] lotutako kudeaketa-zereginak zerrendatzen dira. Saioak administratzaileak eskuz egiten dituen ekintzak soilik ditu; Wiki softwarerrarekin etiketak sortu edo ezabatzeko ahalmenarekin erregistro honetan erregistratutako sarrerarik gabe.",
        "logentry-managetags-create": "$1 lankideak \"$4\" etiketa {{GENDER:$2|sortu du}}",
+       "logentry-managetags-delete": "$1 erabiltzaileak \"$4\" etiketa  {{GENDER:$2|ezabatu}} egin du ($5tik ezabatua {{PLURAL:$5|berrikusketa edo erregistro sarrera|berrikusketak edota erregistro sarrerak}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|erabiltzaileak}} \"$4\" etiketa erabiltzaile eta errobotek erabiltzeko aktibatu du",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|erabiltzaileak}} \"$4\" etiketa erabiltzaile eta errobotek erabiltzeko desaktibatu du",
        "log-name-tag": "Etiketen erregistroa",
+       "log-description-tag": "Orrialde honek erabiltzaileek [[Special:Tags|tags]] berrikuspenak bakarko edo erregistroko sarreretan gehitu edo kendu duten erakusten du. Erregistroak ez ditu zerrendatzen etiketatze-ekintzak editatzean, ezabatzean edo antzeko ekintzetan.",
+       "logentry-tag-update-add-revision": "$1 wikilariak $6 {{PLURAL:$7|etiketa|etiketak}} $3 orriko $4 berrikusketara  {{GENDER:$2|gehitu}} egin d(it)u",
+       "logentry-tag-update-add-logentry": "$1 wikilariak $6 {{PLURAL:$7|etiketa|etiketak}} $3 orriko $5 erregistro sarrerara  {{GENDER:$2|gehitu}} egin d(it)u",
+       "logentry-tag-update-remove-revision": "$1 wikilariak $8 {{PLURAL:$9|etiketa|etiketak}} $3 orriko $4 berrikusketatik  {{GENDER:$2|kendu}} egin d(it)u",
+       "logentry-tag-update-remove-logentry": "$1 wikilariak $8 {{PLURAL:$9|etiketa|etiketak}} $3 orriko $5 erregistro sarreratik  {{GENDER:$2|kendu}} egin d(it)u",
+       "logentry-tag-update-revision": "$1 wikilariak $3 orriko $4 berrikusketan etiketak  {{GENDER:$2|eguneratu}} egin ditu ({{PLURAL:$7|gehitutakoak}}$6; {{PLURAL:$9|kendutakoak}} $8)",
+       "logentry-tag-update-logentry": "$1 wikilariak etiketak {{GENDER:$2|igo}} egin ditu $3 orriko $5 sarreran. ({{PLURAL:$7|gehituak}} $6; {{PLURAL:$9|kenduak}} $8)",
        "rightsnone": "(bat ere ez)",
        "rightslogentry-temporary-group": "$1 (momentuz, $2rarte)",
        "feedback-adding": "Orriari feedbacka gehitzen...",
        "feedback-back": "Atzera",
+       "feedback-bugcheck": "Primeran! Soilik egiaztatu ez dagoela [$1 ezagututako zomorroak] barruan.",
        "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
+       "feedback-bugornote": "Arazo tekniko bat xehetasunez deskribatzeko prest bazaude [bug baten berri eman $1] mesedez. Bestela, beheko formulario erraza erabil dezakezu. Zure iruzkina \"[$3 $2]\" orrialdean gehituko da, zure erabiltzaile-izenarekin batera.",
        "feedback-cancel": "Utzi",
        "feedback-close": "Egina",
        "feedback-external-bug-report-button": "Artxibatu lan tekniko bat",
        "feedback-submit": "Bidali",
        "feedback-terms": "Ulertzen dut nire erabiltzaile agentearen informazioak nire arakatzaile zehatza eta sistema eragilearen bertsioari buruzko informazioa biltzen duela eta publikoki partekatuko dela nire iritziarekin batera.",
        "feedback-termsofuse": "Erabiltzeko Baldintzen arabera feedback-a emateko onartzen dut.",
+       "feedback-thanks": "Eskerrik asko! Zure iritiza \"[$2 $1]\" orrian argitaratu da.",
        "feedback-thanks-title": "Eskerrik asko!",
        "feedback-useragent": "Erabiltzaile agentea:",
        "searchsuggest-search": "{{SITENAME}} wikian bilatu",
        "expand_templates_generate_xml": "Erakutsi XML parse zuhaitza",
        "expand_templates_generate_rawhtml": "Erakutsi HTML gordina",
        "expand_templates_preview": "Aurreikusi",
+       "expand_templates_preview_fail_html": "<em> {{SITENAME}} HTML morroia gaituta duelako eta saio datuak galdu direnez,  aurrebista ezkutuko gisa ezkutatuta dago javascript-erasoen aurka babesteko. \n</em>\n\n<strong> Aurreikuspen saiakera bidezko bat bada, saiatu berriro mesedez. </strong>\nOraindik ez badu funtzionatzen, saiatu [[Special:UserLogout|logging out]] eta saioa berriro hasiz, eta egiaztatu zure nabigatzaileak gune honetako cookieak onartzen dituela.",
+       "expand_templates_preview_fail_html_anon": "<em> {{SITENAME}} HTML morroia gaituta duenez eta ez duzulako saioa hasi, aurrebista ezkutuan ezkutatuta dago javascript erasoen aurka. </em>\n\n<strong> Bidezkoa den aurrebista saiakera bat bada, mesedez [[Special:UserLogin|log in]] eta saiatu berriro. </strong>",
        "expand_templates_input_missing": "Gutxienez sarrera testuren bat eman behar duzu.",
        "pagelanguage": "Orriaren hizkuntza aldatu",
        "pagelang-name": "Orria",
        "pagelang-submit": "Bidali",
        "pagelang-nonexistent-page": "$1 orria ez da existitzen.",
        "pagelang-unchanged-language": "$1 orrialdea jada $2 hizkuntzan dago.",
+       "pagelang-unchanged-language-default": "$1 orria Wikiaren eduki lehenetsiaren hizkuntzarako jarrita dago jadanik.",
        "pagelang-db-failed": "Datu-base orrialdearen hizkuntza aldatu ezin izan da aldatu.",
        "right-pagelang": "Aldatu orrialdearen hizkuntza",
        "action-pagelang": "orrialdearen hizkuntza aldatu",
        "log-name-pagelang": "Hizkuntza aldatu:",
        "log-description-pagelang": "Orrialdeetako hizkuntzen aldaketa saioa da hau.",
+       "logentry-pagelang-pagelang": "$1k {{GENDER:$2|}} $3ren hizkuntza $4tik $5ra aldatu du",
+       "default-skin-not-found": "Whoops! Zure wikiaren azala lehenetsia, <code dir=\"ltr\">$wgDefaultSkin </code>n<code>$1</code> gisa definitua, ez dago erabilgarri.\n\nZure instalazioa {{PLURAL:$4|azal|azalak}} d(it)uela badirudi. Ikusi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuala: Skin konfigurazioa] {{PLURAL:$4|it|horiek gaitu eta aukeratu lehenetsia}}.\n\n$2\n\n;MediaWiki instalatu baduzu:\n:Git-etik edo beste iturri kode batetik zuzenean instalatu duzu. Hau espero da. Saiatu larruazal batzuk instalatzen [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-en azala direktorioa], honela:\n:* [Https://www.mediawiki.org/wiki/Download tarball installer] deskargatzen du, hainbat motatako eta luzapenekin dator. Kopiatu eta itsatsi dezakezu <code>skins/</code> direktorioan.\n:* Azaleko tarballs banakako deskargatzea [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git erabiliz pantaila deskargatzeko].\n: Egiteko hau ez du zure git biltegian oztopatuko MediaWiki garatzailea bada.\n\n; MediaWiki bertsioa berritua baduzu:\n: MediaWiki 1.24 eta bertsio berriagoak ez dituzte automatikoki instalatutako pantailak automatikoki gaitzen (ikus [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). {{PLURAL:$5| linea|lineak}} ondorengoa itsats dezakezu <code>LocalSettings.php</code> sisteman {{PLURAL:$5|hori|guztiak}} instalatuta izateko {{PLURAL: $5|azala|azalak}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Aldatu baduzu <code>LocalSettings.php</code>:\n: Egiaztatu erroreen azalaren izenak bi aldiz.",
+       "default-skin-not-found-no-skins": "Whoops! Zure wikierako azala lehenetsia, <code>$wgDefaultSkin</code>, <code>$1</code> gisa definituta dagoena, ez dago erabilgarri.\n\nEz dago instalatutako egiturarik.\n\n; MediaWiki instalatu edo berritu baduzu:\n: Git-etik edo beste iturri kode batetik zuzenean instalatu duzu seguruenik. Hau espero da. MediaWiki 1.24 eta berriagoak ez dira biltegi nagusiko inongo azalpenik espero. Saiatu larruazal batzuk instalatzen [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-en azala direktorioa], honela:\n: * [Https://www.mediawiki.org/wiki/Download tarball installer] deskargatzen du, hainbat motatako luzapenekin datorrena. Kopiatu eta itsatsi dezakezu <code>skins/</code> direktorioa hortik.\n: * Azaleko tarballs banaka deskargatzea [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n: * [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git erabiliz pantaila deskargatzeko].\n:Egiteko hau ez du zure git biltegian oztopatuko MediaWiki garatzailea bada. Ikusi [https://www.mediawiki.org/wiki/Manual:Skin_configuration eskuliburua: Skin konfigurazioa] larruen gaitasunak nola egin jakiteko eta lehenetsi aukeratzeko.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gaituta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desgaituta</strong>)",
        "mediastatistics": "Media estatistikak",
        "mediastatistics-summary": "Igotako fitxategien estatistikak. Hemen ikus daitekeena fitxategiaren azken bertsioa baino ez da. Fitxategiaren bertsio zahar edo ezabatuak kanpo daude.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
+       "mediastatistics-bytespertype": "Atal honetarako fitxategi tamainia totala: {{PLURAL:$1|$1 byte}} ($2; $3%).",
+       "mediastatistics-allbytes": "Fitxategi guztietarako fitxategi tamainia osoa: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
        "mediastatistics-table-mimetype": "MIME mota",
        "mediastatistics-table-extensions": "Luzapen posibleak",
        "mediastatistics-table-count": "Fitxategi kopurua",
        "mediastatistics-header-executable": "Exekutagarriak",
        "mediastatistics-header-archive": "Formatu konprimatuak",
        "mediastatistics-header-total": "Fitxategi guztiak",
+       "json-warn-trailing-comma": "Amaierako $1 {{PLURAL:$1|koma|komak}} ezabatu egin d(ir)a JSON-tik",
+       "json-error-unknown": "JSON-arekin arazo bat egon da. Akatsa: $1",
        "json-error-depth": "Multzoaren gehienezko sakonera gainditu egin da",
+       "json-error-state-mismatch": "Balio ez duen edo txarto egituratua dagoen JSON-a",
        "json-error-ctrl-char": "Kontrol-karaktere errorea, ziurrenik gaizki kodeatzeagatik.",
        "json-error-syntax": "Sintaxi-errorea",
+       "json-error-utf8": "Gaizki egituratutako UTF-8 karaktereak, ziurrenik gaizki kodeatutak",
        "json-error-recursion": "Erreferentzia errekurtsibo bat edo gehiago kodeatzeko balioan",
        "json-error-inf-or-nan": "NAN edo INF bat edo gehiago kodeatzeko balioan",
        "json-error-unsupported-type": "Kodeatu ezin daitekeen balio mota eman da",
        "authmanager-authn-no-primary": "Emandako kredentzialak ezin izan dira egiaztatu.",
        "authmanager-authn-no-local-user": "Emandako kredentzialak ez dute lotura wiki honetako erabiltzaileekin.",
        "authmanager-authn-no-local-user-link": "Hornitutako kredentzialak baliagarriak dira, baina ez dira lotzen wiki honetako erabiltzaileekin. Beste modu batean saioa hasi edo erabiltzaile berri bat sortu eta zure aurreko kredentzialak kontu horri lotzeko aukera izango duzu.",
+       "authmanager-authn-autocreate-failed": "Tokiko kontu bat automatikoki sortzerakoan huts egin du: $1",
        "authmanager-change-not-supported": "Hornitutako kredentzialak ezin dira aldatu, erabiliko ez direlako.",
        "authmanager-create-disabled": "Auto-sorkuntza ezgaituta.",
        "authmanager-create-from-login": "Zure kontua sortzeko, bete itzazu eremu guztiak.",
        "authmanager-provider-password": "Pasahitzan oinarritutako baieztapena",
        "authmanager-provider-password-domain": "Pasahitza eta domeinuan oinarritutako baieztapena",
        "authmanager-provider-temporarypassword": "Behin-behineko pasahitza",
+       "authprovider-confirmlink-message": "Zure azken saio-hasierako saiakeretan oinarrituta, hurrengo kontuak zure wiki-kontuarekin lotu daitezke. Estekatzeak kontu hauen bidez saioa hastea ahalbidetzen du. Hautatu zeintzuk diren lotu behar direnak mesedez.",
        "authprovider-confirmlink-request-label": "Linkatu beharko ziren kontuak",
        "authprovider-confirmlink-success-line": "$1: ederki linkatu egin da.",
+       "authprovider-confirmlink-failed": "Kontua linkatzea ezin izan da guztiz burutu: $1",
+       "authprovider-confirmlink-ok-help": "Jarraitu estekatze akats mezuak erakutsi ondoren.",
        "authprovider-resetpass-skip-label": "Utzi",
        "authprovider-resetpass-skip-help": "Utzi pasahitzaren berrezartzeari.",
        "authform-nosession-login": "Autentifikazioa arrakastatsua izan da, baina zure nabigatzaileak ezin du \"gogoratu\" saioa hasita izatea.\n\n$1",
        "usercssispublic": "Kontutan izan mesedez: CSS azpiorriek ez lukete datu konfidentzialik eraman behar, beste erabiltzaileek ikusi ahal dituztelako.",
        "restrictionsfield-badip": "Baliogabeko IP helbide edo eremua: $1",
        "restrictionsfield-label": "Onartutako IP eremuak:",
+       "restrictionsfield-help": "Linea bakoitzeko IP helbide edo CIDR eremu bakarra. Guztia gaitzeko, erabili: \n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "$1 berrikusi",
        "pageid": "$1 orri IDa",
        "rawhtml-notallowed": "&lt;html&gt; etiketak ezin dira orri arruntetatik kanpo erabili.",
        "gotointerwiki": "{{SITENAME}}(e)tik irteten",
        "gotointerwiki-invalid": "Zehaztutako titulua baliogabea da.",
+       "gotointerwiki-external": "{{SITENAME}} ustear zaude [[$2]] bisitatzeko, bananduta dagoen webgunea dena.\n\n'''[$1 Jarraitu hona $1]'''",
+       "undelete-cantedit": "Ezin duzu orri honen ezabaketa desegin ez daukazulako orri hau aldatzeko baimenik.",
+       "undelete-cantcreate": "Ezin duzu orri honen ezabaketa desegin ez dagoelako izen honekin existitzen den orririk eta ez daukazulako orri hau sortzeko baimenik.",
        "pagedata-title": "Orri data",
+       "pagedata-text": "Orrialde honek orrien interfaze datuak eskaintzen ditu. Eman orrialdearen izenburua URLan, azpiorri sintaxia erabiliz.\n*Edukiaren negoziazioa zure bezeroaren onarpen goiburuan oinarritzen erabiltzen da. Horrek esan nahi du orriaren datuak zure bezeroak nahiago duen formatuan emango direla.",
+       "pagedata-not-acceptable": "Bat egiten duen formaturik ez da aurkitu. Onartutako MIME motak: $1",
        "pagedata-bad-title": "Izenburu baliogabea: $1"
 }
index d211095..a0dc4c3 100644 (file)
@@ -61,7 +61,8 @@
                        "AzorAhai",
                        "Yoosef Pooranvary",
                        "DEXi",
-                       "Obzord"
+                       "Obzord",
+                       "Alp Er Tunqa"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "anonpreviewwarning": "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''",
        "missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید.\nاگر دوباره دکمهٔ «$1» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
        "selfredirect": "<strong>هشدار:</strong> شما در حال تغییرمسیر صفحه به خودش هستید.\nامکان دارد هدف اشتباهی را برای تغییرمسیر انتخاب کردید، یا ممکن است صفحهٔ اشتباهی را ویرایش می‌کنید.\n\nاگر بر روی «$1» دوباره کلیک کنید، تغییرمسیر ساخته خواهد شد.",
-       "missingcommenttext": "Ù\84Ø·Ù\81اÙ\8b ØªÙ\88ضÛ\8cØ­Û\8c Ø¯Ø± Ø²Û\8cر Ø¨Û\8cÙ\81زاÛ\8cÛ\8cد.",
+       "missingcommenttext": "لطفاً توضیحی بیفزایید.",
        "missingcommentheader": "<strong>یادآوری:</strong> شما موضوع/عنوان این یادداشت را مشخص نکرده‌اید.\nاگر دوباره دکمهٔ «$1» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
        "summary-preview": "پیش‌نمایش خلاصه:",
        "subject-preview": "پیش‌نمایش موضوع:",
        "recentchanges-legend": "گزینه‌های تغییرات اخیر",
        "recentchanges-summary": "آخرین تغییرات ویکی را در این صفحه پی‌گیری کنید.",
        "recentchanges-noresult": "در فاصله زمانی ارائه شده هیچ تغییری با این معیارهای صورت نگرفته است",
+       "recentchanges-timeout": "این جستجو زمانش تمام شد. اگر مایلید کلیدواژه‌های دیگری را جستجو کنید.",
+       "recentchanges-network": "به دلیل خطای فنی، نتیجه‌ای بدست نیامد. لطفاً برای تازه‌سازی صفحخ مجدداُ تلاش کنید.",
        "recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پی‌گیری کنید.",
        "recentchanges-label-newpage": "این ویرایش صفحه‌ای تازه ایجاد کرد",
        "recentchanges-label-minor": "این یک ویرایش جزئی است",
        "recentchanges-submit": "نمایش",
        "rcfilters-tag-remove": "حذف «$1»",
        "rcfilters-legend-heading": "<strong>فهرست کوته‌نوشت‌ها:</strong>",
-       "rcfilters-other-review-tools": "<strong>دیگر ابزارهای بازبینی</strong>",
+       "rcfilters-other-review-tools": "دیگر ابزارهای بازبینی",
        "rcfilters-group-results-by-page": "گروه‌بندی نتایج بر اساس صفحه",
        "rcfilters-grouping-title": "گروه‌بندی",
        "rcfilters-activefilters": "پالایه‌های فعال",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ساعت|ساعت}}",
        "rcfilters-highlighted-filters-list": "پررنگ شده: $1",
        "rcfilters-quickfilters": "پالایه‌های ذخیره‌شده",
-       "rcfilters-quickfilters-placeholder-title": "هنوز پیوندی ذخیره نشده‌است",
+       "rcfilters-quickfilters-placeholder-title": "هنوز پالایه‌ای ذخیره نشده‌است",
        "rcfilters-quickfilters-placeholder-description": "برای ذخیره پالایه‌هایتان و استفاده مجدد آنها، در محیط فعال پالایه در پایین بر روی دکمهٔ بوک‌مارک کلیک کنید.",
        "rcfilters-savedqueries-defaultlabel": "پالایه‌های ذخیره‌شده",
        "rcfilters-savedqueries-rename": "تغییر نام",
        "rcfilters-savedqueries-apply-and-setdefault-label": "ایجاد پالایه پیش‌فرض",
        "rcfilters-savedqueries-cancel-label": "لغو",
        "rcfilters-savedqueries-add-new-title": "ذخیره تنظیمات کنونی پالایه",
+       "rcfilters-savedqueries-already-saved": "این پالایه‌ها اکنون ذخیره شده‌اند",
        "rcfilters-restore-default-filters": "بازگردانی پالایه‌های پیش‌فرض",
        "rcfilters-clear-all-filters": "پاک‌کردن تمام پالایه‌ها",
        "rcfilters-show-new-changes": "دیدن جدیدترین تغییرات",
-       "rcfilters-search-placeholder": "پالایش تغییرات اخیر (جستجو یا شروع به تایپ)",
+       "rcfilters-search-placeholder": "پالایش تغییرات (استفاده از منو یا جستجو برای نام پالایه)",
        "rcfilters-invalid-filter": "پالایهٔ نامعتبر",
        "rcfilters-empty-filter": "پالایه‌ای فعال نیست. همهٔ مشارکت‌های دیده می‌شوند.",
        "rcfilters-filterlist-title": "پالایه‌ها",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:نه</strong> $1",
        "rcfilters-exclude-button-off": "مستثنی کردن انتخاب‌ها",
        "rcfilters-exclude-button-on": "مستثنی کردن انتخاب‌ها",
-       "rcfilters-view-advanced-filters-label": "پالایه‌های پیشرفته",
        "rcfilters-view-tags": "ویرایش‌های برچسب‌شده",
        "rcfilters-view-namespaces-tooltip": "نتیجهٔ پالایه بر پایهٔ فضای نام",
        "rcfilters-view-tags-tooltip": "نتایج پالایه با کمک برچسب‌های ویرایش",
        "uploaded-script-svg": "عنصر قابل برنامه‌ریزی «$1» در پرونده بارگذاری اس‌وی‌جی یافت شد.",
        "uploaded-hostile-svg": "سی‌اس‌اس نا امن در عنصر سبک پروندهٔ بارگذاری شدهٔ اس‌وی‌جی یافت شد.",
        "uploaded-event-handler-on-svg": "قرار دادن ویژگی‌های مدیریت رویداد <code>$1=\"$2\"</code> در پرونده‌های اس‌وی‌جی مجاز نیست.",
-       "uploaded-href-attribute-svg": "ویژگی‌های href در پرونده‌های SVG فقط برای اهدافhttp:// &lrm; وhttps:// &lrm; مجاز هستند، <code>&lt;$1 $2=\"$3\"&gt;</code> یافت شد.",
+       "uploaded-href-attribute-svg": "<a> این مورد فقط برای پیوند (href) به داده است: (فایل جاسازی‌شده)، http:// یا https://، یا بخشی از (#, same-document) هدف‌ها.  برای سایر موارد، مانند <image>، فقط داده: و بخشی از صفحه اجازه دارید.  برای تبدیل SVG تلاش کنید تصویر را جاسازی کنید. <code>&lt;$1 $2=\"$3\"&gt;</code> یافت شد.",
        "uploaded-href-unsafe-target-svg": "در پرونده SVG بارگذاری‌شده برای نشانی هدف <code>&lt;$1 $2=\"$3\"&gt;</code> برچسب href به اطلاعات ناامن یافت شد.",
        "uploaded-animate-svg": "برچسب  \"animate\" یافت شده ممکن است herf را تغییر دهد. از مشخصه \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> در پرونده SVG بارگذاری‌شده استفاده کنید.",
        "uploaded-setting-event-handler-svg": "تنظیمات مشخصه گرداننده رویداد بسته شده‌است. کد <code>&lt;$1 $2=\"$3\"&gt;</code>  در پرونده بارگذاری‌شده یافت شد.",
        "uploadstash-refresh": "تازه کردن فهرست پرونده‌ها",
        "uploadstash-thumbnail": "نمایش بندانگشتی",
        "uploadstash-exception": "ناتوان از ذخیره کردن بارگذاری در نهانگاه ($1): ''$2''.",
+       "uploadstash-bad-path": "مسر وجود ندارد.",
+       "uploadstash-bad-path-invalid": "مسیر معتبر نیست.",
+       "uploadstash-bad-path-unknown-type": "گونهٔ ناشناختهٔ \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "بندانگشتی نامعلوم.",
+       "uploadstash-bad-path-no-handler": "برای نمایش $1 پروندهٔ $2 اجراکننده‌ای یافت نشد.",
+       "uploadstash-bad-path-bad-format": "کلید «$1» ساختار درستی ندارد.",
+       "uploadstash-file-not-found": "کلید «$1» در انبار یافت نشد.",
+       "uploadstash-file-not-found-no-thumb": "امکان گرفتن بندانگشتی نیست.",
+       "uploadstash-file-not-found-no-local-path": "مسیر محلی برای آیتم مقایس‌شده وجود ندارد.",
+       "uploadstash-file-not-found-no-object": "امکان ساخت شیء پروندهٔ محلی برای بندانگشتی وجود ندارد.",
+       "uploadstash-file-not-found-no-remote-thumb": "دریافت بندانگشتی با مشکل مواجه شد:$1\nنشانی = $2",
+       "uploadstash-file-not-found-missing-content-type": "سرآیند نوع-محتوی یافت نشد.",
+       "uploadstash-file-not-found-not-exists": "امکان یافتن مسیر نیست، یا فایل ساده نیست.",
+       "uploadstash-file-too-large": "امکان ذخیرهٔ پرونده بیش از $1 بایت نیست.",
+       "uploadstash-not-logged-in": "هیچ کاربری به سامانه وارد نشده‌است، پرونده باید متعلق به یک کاربر باشد.",
+       "uploadstash-wrong-owner": "این پرونده ($1) به این کاربر تعلق ندارد.",
+       "uploadstash-no-such-key": "امکان حذف کلید ($1) نیست.",
+       "uploadstash-no-extension": "افزونه نیست.",
+       "uploadstash-zero-length": "اندازهٔ پرونده صفر است.",
        "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
        "img-auth-accessdenied": "منع دسترسی",
        "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.",
        "block-log-flags-nousertalk": "صفحهٔ بحث خود را نمی‌تواند ویرایش کند",
        "block-log-flags-angry-autoblock": "قطع دسترسی خودکار پیشرفته فعال شد",
        "block-log-flags-hiddenname": "نام کاربری پنهان",
-       "range_block_disabled": "بستن یک بازه توسط مدیران غیر فعال است.",
+       "range_block_disabled": "بستن یک بازه توسط مدیران غیرفعال است.",
        "ipb_expiry_invalid": "زمان سرآمدن نامعتبر.",
        "ipb_expiry_old": "زمان سرآمدن در گذشته‌است.",
        "ipb_expiry_temp": "قطع دسترسی کاربرهای پهنان باید همیشگی باشد.",
        "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما تعریف‌شده در <code dir=\"ltr\"<$wgDefaultSkin</code> به عنوان <code>$1</code>، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند {{PLURAL:$4|پوسته|پوسته}} از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins استفاده از گیت برای دریافت پوسته‌ها].\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا {{PLURAL:$5|همه|همه}} پوسته‌های نصب‌شده را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید.",
        "default-skin-not-found-no-skins": "پوستهٔ پیش‌فرض برای ویکی شما تعریف‌شده در<code>$wgDefaultSkin</code> به عنوان <code>$1</code>، هست موجود نیست.\n\nشما پوسته‌ها را نصب نکرده‌اید.\n\n:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کد منبع با روش‌های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دریافت [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از مخزن در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با مخزن گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (فعال)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>غیر فعال</strong>)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>غیرفعال</strong>)",
        "mediastatistics": "آمار رسانه‌ها",
        "mediastatistics-summary": "آمارها دربارهٔ نوع‌های پرونده‌ای به روزشده. این فقط شامل آخرین نسخهٔ پرونده است. نسخه‌های قدیمی یا حذف‌شده مسثنی هستند.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت}} ($2؛ $3٪)",
        "sessionmanager-tie": "نمی‌توان چندین نوع درخواست هویت‌سنجی را ترکیب کرد: $1.",
        "sessionprovider-generic": "$1 فصل",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "فصل‌های کوکی‌محور",
-       "sessionprovider-nocookies": "کوکی‌ها ممکن است غیر فعال شده باشند. اطمینان کسب کنید که کوکی‌ها را فعال کرده‌اید و دوباره آغاز کنید.",
+       "sessionprovider-nocookies": "کوکی‌ها ممکن است غیرفعال شده باشند. اطمینان کسب کنید که کوکی‌ها را فعال کرده‌اید و دوباره آغاز کنید.",
        "randomrootpage": "صفحهٔ ریشهٔ تصادفی",
        "log-action-filter-block": "نوع بسته شدن:",
        "log-action-filter-contentmodel": "نوع تغییرات مدل محتوا:",
index 293b3de..ee86a94 100644 (file)
        "actionthrottledtext": "Häiriköinnin estämiseksi tämän toiminnon suorittamista on rajoitettu niin, että sitä ei voi tehdä useita kertoja lyhyen ajan sisällä. Olet suorittanut toiminnon nyt liian monta kertaa. \nYritä uudelleen muutaman minuutin kuluttua.",
        "protectedpagetext": "Tämä sivu on suojattu muutoksilta ja muilta toiminnoilta.",
        "viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä.",
-       "viewyourtext": "Voit nähdä ja kopioida tähän sivuun <strong>tekemistäsi muutoksista</strong> syntyneen lähdekoodin.",
+       "viewyourtext": "Voit nähdä ja kopioida tähän sivuun <strong>tekemistäsi muutoksista</strong> syntyneen lähdetekstin.",
        "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ä [https://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 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 [https://translatewiki.net/ translatewiki.net].",
        "anonpreviewwarning": "''Et ole kirjautunut sisään. Tallentaminen kirjaa IP-osoitteesi tämän sivun muutoshistoriaan.''",
        "missingsummary": "Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.",
        "selfredirect": "<strong>Varoitus:</strong> Olet tekemässä uudelleenohjausta, joka johtaa tästä sivusta tähän samaan sivuun. \n\nOlet ehkä määrittänyt ohjauksen kohteen väärin tai kenties muokkaat parhaillaan väärää sivua.\n\nJos painat toimintoa \"$1\" uudestaan, tämä ohjaussivu luodaan joka tapauksessa.",
-       "missingcommenttext": "Kirjoita viesti alle.",
+       "missingcommenttext": "Kirjoita kommentti.",
        "missingcommentheader": "<strong>Muistutus:</strong> Et ole antanut aiheotsikkoa tälle kommentille. Napsauta ”$1”, jos haluat tallentaa kommenttisi ilman sellaista.",
        "summary-preview": "Yhteenvedon esikatselu:",
        "subject-preview": "Aiheotsikon esikatselu:",
        "yourtext": "Oma tekstisi",
        "storedversion": "Tallennettu versio",
        "editingold": "'''Varoitus: Olet muokkaamassa vanhaa versiota tämän sivun tekstistä. Jos tallennat sen, kaikki tämän version jälkeen tehdyt muutokset katoavat.'''",
+       "unicode-support-fail": "Vaikuttaa siltä, että selaimesi ei tue Unicodea. Sitä tarvitaan sivujen muokkaukseen, joten muokkaustasi ei tallennettu.",
        "yourdiff": "Eroavaisuudet",
        "copyrightwarning": "'''Muutoksesi astuvat voimaan välittömästi.''' Kaikki {{GRAMMAR:illative|{{SITENAME}}}} tehtävät tuotokset katsotaan julkaistuksi $2 -lisenssin mukaisesti ($1). Jos et halua, että kirjoitustasi muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi. Tallentamalla muutoksesi lupaat, että kirjoitit tekstisi itse, tai kopioit sen jostain vapaasta lähteestä. '''ÄLÄ KÄYTÄ TEKIJÄNOIKEUDEN ALAISTA MATERIAALIA ILMAN LUPAA!'''",
        "copyrightwarning2": "Huomaa, että kuka tahansa voi muokata, muuttaa ja poistaa kaikkia sivustolle tekemiäsi lisäyksiä ja muutoksia. Muokkaamalla sivustoa luovutat sivuston käyttäjille tämän oikeuden ja takaat, että lisäämäsi aineisto on joko itse kirjoittamaasi tai peräisin jostain vapaasta lähteestä. Lisätietoja sivulla $1. '''TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!'''",
        "timezoneregion-europe": "Eurooppa",
        "timezoneregion-indian": "Intian valtameri",
        "timezoneregion-pacific": "Tyynimeri",
-       "allowemail": "Salli sähköpostin lähetys osoitteeseen",
+       "allowemail": "Salli muiden käyttäjien lähettää minulle sähköpostia",
+       "email-blacklist-label": "Estä näitä käyttäjiä lähettämästä minulle sähköpostia:",
        "prefs-searchoptions": "Haku",
        "prefs-namespaces": "Nimiavaruudet",
        "default": "oletus",
        "grant-editprotected": "Muokata suojattuja sivuja",
        "grant-highvolume": "Suorittaa paljon muokkauksia",
        "grant-oversight": "Piilottaa käyttäjiä ja häivyttää yksittäisiä versioita",
-       "grant-patrol": "Partioida sivuihin tehtyjä muutoksia",
+       "grant-patrol": "Tarkastaa sivuihin tehtyjä muutoksia",
        "grant-privateinfo": "Päästä näkemään yksityiset tiedot",
        "grant-protect": "Suojata sivuja tai poistaa suojauksia",
        "grant-rollback": "Palauttaa sivuun tehtyjä muutoksia",
        "recentchanges-legend": "Tuoreiden muutosten asetukset",
        "recentchanges-summary": "Tällä sivulla voi seurata tuoreita tähän wikiin tehtyjä muutoksia.",
        "recentchanges-noresult": "Ei muutoksia, jotka täyttävät nämä kriteerit valitun ajanjakson aikana.",
+       "recentchanges-timeout": "Tämä haku aikakatkaistiin. Saatat haluta kokeilla toisia hakuehtoja.",
+       "recentchanges-network": "Teknisen virheen vuoksi tuloksia ei voitu ladata. Yritä sivun päivittämistä.",
        "recentchanges-feed-description": "Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.",
        "recentchanges-label-newpage": "Tämä muutos loi uuden sivun",
        "recentchanges-label-minor": "Tämä on pieni muutos",
        "recentchanges-submit": "Näytä",
        "rcfilters-tag-remove": "Poista '$1'",
        "rcfilters-legend-heading": "<strong>Luettelo lyhenteistä:</strong>",
-       "rcfilters-other-review-tools": "<strong>Muut arviointityökalut</strong>",
+       "rcfilters-other-review-tools": "Muut arviointityökalut",
        "rcfilters-group-results-by-page": "Ryhmitä tulokset sivujen mukaan",
        "rcfilters-grouping-title": "Ryhmitys",
        "rcfilters-activefilters": "Aktiiviset suodattimet",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|tunti|tuntia}}",
        "rcfilters-highlighted-filters-list": "Korostettu: $1",
        "rcfilters-quickfilters": "Tallennetut suodattimet",
-       "rcfilters-quickfilters-placeholder-title": "Ei vielä tallennettuja linkkejä",
+       "rcfilters-quickfilters-placeholder-title": "Ei tallennettuja suodattimia",
        "rcfilters-quickfilters-placeholder-description": "Tallentaaksesi suodatinasetuksesi ja käyttääksesi niitä myöhemmin, napsauta kirjanmerkkikuvaketta alla olevalla \"Aktiiviset suodattimet\" -alueella.",
        "rcfilters-savedqueries-defaultlabel": "Tallennetut suodattimet",
        "rcfilters-savedqueries-rename": "Nimeä uudelleen",
        "rcfilters-restore-default-filters": "Palauta oletussuodattimet",
        "rcfilters-clear-all-filters": "Tyhjennä kaikki suodattimet",
        "rcfilters-show-new-changes": "Näytä uusimmat muutokset",
-       "rcfilters-search-placeholder": "Suodata tuoreita muutoksia (selaa tai ala kirjoittaa)",
+       "rcfilters-search-placeholder": "Suodata muutoksia (käytä valikkoa tai etsi suodattimen nimeä)",
        "rcfilters-invalid-filter": "Virheellinen suodatin",
        "rcfilters-empty-filter": "Ei aktiivisia suodattimia. Kaikki muutokset näytetään.",
        "rcfilters-filterlist-title": "Suodattimet",
        "rcfilters-filter-user-experience-level-unregistered-label": "Rekisteröimätön",
        "rcfilters-filter-user-experience-level-unregistered-description": "Muokkaajat, jotka eivät ole kirjautuneet sisään.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Tulokkaat",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Rekisteröityneet muokkaajat, joilla vähemmän kuin 10 muokkausta ja 4 päivää aktiivisuutta.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Rekisteröityneet muokkaajat, joilla vähemmän kuin 10 muokkausta tai 4 päivää aktiivisuutta.",
        "rcfilters-filter-user-experience-level-learner-label": "Oppijat",
        "rcfilters-filter-user-experience-level-learner-description": "Rekisteröityneet muokkaajat, joiden kokemus on välillä \"tulokas\" ja \"kokenut käyttäjä\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Kokeneet käyttäjät",
        "rcfilters-filter-watchlist-watchednew-label": "Uudet tarkkailulistan muutokset",
        "rcfilters-filter-watchlist-watchednew-description": "Muutokset tarkkailulistalla oleviin sivuihin, joilla et ole vieraillut sen jälkeen, kun sivuille on tehty muutoksia.",
        "rcfilters-filter-watchlist-notwatched-label": "Ei tarkkailulistalla",
+       "rcfilters-filter-watchlist-notwatched-description": "Kaikki paitsi muutokset tarkkailulistallasi oleviin sivuihin.",
+       "rcfilters-filtergroup-watchlistactivity": "Tarkkailulistan aktiivisuus",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Näkemättömät muutokset",
+       "rcfilters-filter-watchlistactivity-seen-label": "Nähdyt muutokset",
        "rcfilters-filtergroup-changetype": "Muutoksen tyyppi",
        "rcfilters-filter-pageedits-label": "Sivun muokkaukset",
        "rcfilters-filter-pageedits-description": "Muokkaukset wikin sisältöön, keskusteluihin, luokkakuvauksiin…",
        "rcfilters-filter-lastrevision-label": "Viimeisin versio",
        "rcfilters-filter-lastrevision-description": "Vain viimeisin muutos sivulle.",
        "rcfilters-filter-previousrevision-label": "Ei viimeisin muutos",
+       "rcfilters-filter-previousrevision-description": "Kaikki muutokset, jotka eivät ole viimeisin versio.",
        "rcfilters-filter-excluded": "Poissuljettu",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ei</strong> $1",
        "rcfilters-exclude-button-off": "Poissulje valitut",
        "rcfilters-exclude-button-on": "Poissuljetaan valitut",
-       "rcfilters-view-advanced-filters-label": "Kehittyneet suodattimet",
+       "rcfilters-view-tags": "Merkatut muokkaukset",
        "rcfilters-view-namespaces-tooltip": "Suodata tuloksia nimiavaruuden mukaan",
        "rcfilters-view-tags-tooltip": "Suodata tuloksia käyttäen merkkauksia",
+       "rcfilters-view-return-to-default-tooltip": "Palaa suodattimien päävalikkon",
+       "rcfilters-view-tags-help-icon-tooltip": "Lue lisää merkatuista muutoksista",
        "rcfilters-liveupdates-button": "Live-päivitykset",
        "rcfilters-liveupdates-button-title-on": "Ota live-päivitykset pois käytöstä",
+       "rcfilters-liveupdates-button-title-off": "Näytä uudet muutokset niiden tapahtuessa",
        "rcfilters-watchlist-markseen-button": "Merkitse kaikki muutokset nähdyiksi",
        "rcfilters-watchlist-edit-watchlist-button": "Muokkaa tarkkailemiasi sivuja",
        "rcfilters-watchlist-showupdated": "Muutokset sivuihin, joilla et ole vieraillut sen jälkeen kun muutokset on tehty, on <strong>lihavoitu</strong> ja värimerkitty.",
+       "rcfilters-preference-label": "Piilota tuoreiden muutosten parannettu versio",
+       "rcfilters-preference-help": "Peruuttaa vuoden 2017 käyttöliittymän uudistuksen ja kaikki sen jälkeen lisätyt työkalut.",
        "rcnotefrom": "Alla ovat muutokset <strong>$3, $4</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
        "rclistfromreset": "Tyhjennä ajankohdan valinta",
        "rclistfrom": "Näytä uudet muutokset $3 kello $2 alkaen",
        "delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
        "deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
        "deleting-backlinks-warning": "<strong>Varoitus:</strong> Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], taikka sivu on sisällytetty muuhun sivuun.",
+       "deleting-subpages-warning": "<strong>Varoitus:</strong> Sivu jota olet poistamassa on [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|alasivu|$1 alasivua|51=yli 50 alasivua}}]].",
        "rollback": "palauta aiempaan versioon",
        "rollbacklink": "palauta",
        "rollbacklinkcount": "palauta $1 {{PLURAL:$1|muutos|muutosta}}",
        "undelete-search-title": "Etsi poistettuja sivuja",
        "undelete-search-box": "Etsi poistettuja sivuja",
        "undelete-search-prefix": "Näytä sivut, jotka alkavat merkkijonolla:",
+       "undelete-search-full": "Näytä sivut, joiden otsikko sisältää:",
        "undelete-search-submit": "Hae",
        "undelete-no-results": "Poistoarkistosta ei löytynyt haettuja sivuja.",
        "undelete-filename-mismatch": "Tiedoston versiota, jonka aikaleima on $1, ei voi palauttaa, koska tiedostonimi ei ole sama.",
        "blocklist": "Estetyt käyttäjät",
        "autoblocklist": "Automaattiset estot",
        "autoblocklist-submit": "Hae",
+       "autoblocklist-legend": "Automaattisten estojen lista",
        "autoblocklist-localblocks": "{{PLURAL:$1|Paikallinen automaattinen esto|Paikalliset automaattiset estot}}",
+       "autoblocklist-total-autoblocks": "Automaattisten estojen kokonaismäärä: $1",
        "autoblocklist-empty": "Automaattisten estojen lista on tyhjä.",
        "autoblocklist-otherblocks": "{{PLURAL:$1|Muu automaattinen esto|Muut automaattiset estot}}",
        "ipblocklist": "Estetyt käyttäjät",
        "fileduplicatesearch-noresults": "Tiedostoa nimeltä ”$1” ei löytynyt.",
        "specialpages": "Toimintosivut",
        "specialpages-note-top": "Merkkien selitys",
+       "specialpages-note-restricted": "* Tavalliset toimintosivut.\n* <span class=\"mw-specialpagerestricted\">Rajoitetut toimintosivut.</span>",
        "specialpages-group-maintenance": "Sivujen huoltaminen",
        "specialpages-group-other": "Muut",
        "specialpages-group-login": "Sisäänkirjautuminen ja tunnusten luonti",
        "compare-title-not-exists": "Määrittämääsi sivua ei ole.",
        "compare-revision-not-exists": "Määrittämääsi versiota ei ole.",
        "diff-form": "Eroavaisuudet",
+       "diff-form-oldid": "Vanhan sivuversion tunnistenumero (vapaaehtoinen tieto)",
+       "diff-form-revid": "Eroavan sivuversion tunnistenumero",
+       "diff-form-submit": "Näytä muutokset",
+       "permanentlink": "Pysyvä linkki",
+       "permanentlink-revid": "Versiotunniste",
+       "permanentlink-submit": "Mene sivuversioon",
        "dberr-problems": "Tällä sivustolla on teknisiä ongelmia.",
        "dberr-again": "Odota hetki ja lataa sivu uudelleen.",
        "dberr-info": "(Tietokantaan ei saada yhteyttä: $1)",
        "mw-widgets-usersmultiselect-placeholder": "Lisää enemmän...",
        "date-range-from": "Aloituspäivä:",
        "date-range-to": "Päättymispäivä:",
-       "sessionmanager-tie": "!!FYZZ!!Cannot combine multiple request authentication types: $1.",
+       "sessionmanager-tie": "Cannot combine multiple request authentication types: $1.",
        "sessionprovider-generic": "$1 istuntoa",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "istuntoja, joissa on evästeet käytössä",
        "sessionprovider-nocookies": "Evästeet on voitu poistaa käytöstä. Varmista, että sinulla on evästeet käytössä ja yritä sitten uudelleen.",
        "revid": "versio $1",
        "pageid": "sivun tunnistenumero $1",
        "gotointerwiki": "Lähdössä {{GRAMMAR:elative|{{SITENAME}}}}",
+       "gotointerwiki-invalid": "Annettu otsikko on virheellinen.",
        "gotointerwiki-external": "Olet lähdössä {{GRAMMAR:elative|{{SITENAME}}}} toiselle sivustolle [[$2]].\n\n'''[$1 Jatka osoitteeseen $1]'''",
        "undelete-cantedit": "Et voi palauttaa tätä sivua, koska sinulla ei ole oikeutta muokata tätä sivua.",
        "undelete-cantcreate": "Et voi palauttaa tätä sivua, koska tällä nimellä ei ole olemassaolevaa sivua eikä sinulla ole oikeutta luoda tätä sivua.",
+       "pagedata-title": "Sivudata",
        "pagedata-bad-title": "Virheellinen otsikko: $1."
 }
index ba4dc1b..172c0e2 100644 (file)
                        "Jona",
                        "Epok",
                        "DePlusJean",
-                       "Pierpao"
+                       "Pierpao",
+                       "Vexthedorito",
+                       "Djiboun",
+                       "Pols12"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "tog-watchuploads": "Ajouter les nouveaux fichiers que j’importe à ma liste de suivi",
        "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation",
        "tog-minordefault": "Marquer toutes mes modifications comme étant mineures par défaut",
-       "tog-previewontop": "Afficher la prévisualisation au dessus de la zone d’édition",
+       "tog-previewontop": "Afficher la prévisualisation au-dessus de la zone de modification",
        "tog-previewonfirst": "Afficher la prévisualisation lors de la première modification",
        "tog-enotifwatchlistpages": "M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifié",
        "tog-enotifusertalkpages": "M’avertir par courriel lorsque ma page de discussion est modifiée",
        "underline-always": "Toujours",
        "underline-never": "Jamais",
        "underline-default": "Valeur par défaut du thème ou du navigateur",
-       "editfont-style": "Style de police de la zone d’édition :",
+       "editfont-style": "Style de police de la zone de modification :",
        "editfont-monospace": "Police à chasse fixe",
        "editfont-sansserif": "Police sans-serif",
        "editfont-serif": "Police serif",
        "anonpreviewwarning": "<em>Vous n’êtes pas connecté{{GENDER:||e}}. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.</em>",
        "missingsummary": "<strong>Rappel :</strong> vous n’avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « $1 », vos modifications seront sauvegardées sans résumé.",
        "selfredirect": "<strong>Attention :</strong> vous êtes en train de rediriger la page vers elle-même.\nIl se peut que vous ayez spécifié la mauvaise cible pour la redirection, ou que vous modifiez peut-être la mauvaise page.\nSi vous cliquez de nouveau sur « $1 », la redirection sera tout de même créée.",
-       "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
+       "missingcommenttext": "Veuillez entrer un commentaire.",
        "missingcommentheader": "<strong>Rappel :</strong> vous n’avez pas fourni de sujet pour ce commentaire.\nSi vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans sujet.",
        "summary-preview": "Aperçu du résumé de modification :",
        "subject-preview": "Aperçu du sujet :",
        "timezoneregion-europe": "Europe",
        "timezoneregion-indian": "Océan indien",
        "timezoneregion-pacific": "Océan pacifique",
-       "allowemail": "Autoriser l'envoi de courriels venant d'autres utilisateurs",
+       "allowemail": "Autoriser les autres utilisateurs à m'envoyer des courriels",
        "email-blacklist-label": "Empêcher ces utilisateurs de m'envoyer des courriels :",
        "prefs-searchoptions": "Recherche",
        "prefs-namespaces": "Espaces de noms",
        "userrights": "Droits des utilisateurs",
        "userrights-lookup-user": "Sélectionner un utilisateur",
        "userrights-user-editname": "Entrez un nom d'utilisateur :",
-       "editusergroup": "Charger des groupes d’utilisateurs",
+       "editusergroup": "Afficher les groupes d’utilisateurs",
        "editinguser": "Modification des droits de l’{{GENDER:$1|utilisateur|utilisatrice}} <strong>[[User:$1|$1]]</strong> $2",
        "viewinguserrights": "Affichage des droits utilisateur de {{GENDER:$1|l’utilisateur|l’utilisatrice}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modifier les groupes de l'utilisat{{GENDER:$1|eur|rice}}",
        "recentchanges-legend": "Options des modifications récentes",
        "recentchanges-summary": "Suivez les changements les plus récents du wiki sur cette page.",
        "recentchanges-noresult": "Aucune modification correspondant à ces critères sur la période indiquée.",
+       "recentchanges-timeout": "Cette recherche a dépassé le délai imparti. Vous pouvez vouloir essayer avec des paramètres de recherche différents.",
+       "recentchanges-network": "Aucun résultat ne peut être affiché du fait d’une erreur technique. Veuillez actualiser la page.",
        "recentchanges-feed-description": "Suivez les dernières modifications du wiki dans ce flux.",
        "recentchanges-label-newpage": "Cette modification a créé une nouvelle page",
        "recentchanges-label-minor": "Cette modification est mineure.",
        "recentchanges-submit": "Lister",
        "rcfilters-tag-remove": "Supprimer « $1 »",
        "rcfilters-legend-heading": "<strong>Liste des abréviations :</strong>",
-       "rcfilters-other-review-tools": "<strong>Autres outils de relecture</strong>",
+       "rcfilters-other-review-tools": "Autres outils de relecture",
        "rcfilters-group-results-by-page": "Grouper les résultats par page",
        "rcfilters-grouping-title": "Regroupement",
        "rcfilters-activefilters": "Filtres actifs",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|heure|heures}}",
        "rcfilters-highlighted-filters-list": "Mis en évidence : $1",
        "rcfilters-quickfilters": "Filtres sauvegardés",
-       "rcfilters-quickfilters-placeholder-title": "Aucun lien n’a encore été sauvegardé",
+       "rcfilters-quickfilters-placeholder-title": "Aucun filtre n’a encore été sauvegardé",
        "rcfilters-quickfilters-placeholder-description": "Pour sauvegarder la configuration de vos filtres pour la réutiliser ultérieurement, cliquez sur l’icône des raccourcis dans la zone des filtres actifs, ci-dessous.",
        "rcfilters-savedqueries-defaultlabel": "Filtres sauvegardés",
        "rcfilters-savedqueries-rename": "Renommer",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Créer le filtre par défaut",
        "rcfilters-savedqueries-cancel-label": "Annuler",
        "rcfilters-savedqueries-add-new-title": "Sauvegarder la configuration du filtre courant",
+       "rcfilters-savedqueries-already-saved": "Ces filtres sont déjà enregistrés. Modifiez vos paramètres pour créer un nouveau Filtre enregistré.",
        "rcfilters-restore-default-filters": "Rétablir les filtres par défaut",
        "rcfilters-clear-all-filters": "Effacer tous les filtres",
        "rcfilters-show-new-changes": "Afficher les modifications les plus récentes",
-       "rcfilters-search-placeholder": "Filtrer les modifications récentes (naviguer ou commencer à saisir)",
+       "rcfilters-search-placeholder": "Filtrer les modifications (utiliser le menu ou rechercher le nom d'un filtre)",
        "rcfilters-invalid-filter": "Filtre non valide",
        "rcfilters-empty-filter": "Aucun filtre actif. Toutes les contributions sont affichées.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filter-user-experience-level-unregistered-label": "Non connecté",
        "rcfilters-filter-user-experience-level-unregistered-description": "Éditeurs qui ne sont pas connectés.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nouveaux arrivants",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Éditeurs connectés avec moins de 10 modifications et 4 jours d’activité.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Éditeurs connectés ayant fait moins de 10 modifications ou ayant moins de 4 jours d’activité.",
        "rcfilters-filter-user-experience-level-learner-label": "Apprentis",
        "rcfilters-filter-user-experience-level-learner-description": "Éditeurs connectés dont l’expérience se situe entre  « Nouveaux arrivants » et  « Utilisateurs expérimentés ».",
        "rcfilters-filter-user-experience-level-experienced-label": "Utilisateurs expérimentés",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Exclure les sélectionnés",
        "rcfilters-exclude-button-on": "Sélectionnés exclus",
-       "rcfilters-view-advanced-filters-label": "Filtres avancés",
        "rcfilters-view-tags": "Modifications marquées",
        "rcfilters-view-namespaces-tooltip": "Résultats du filtrage par espace de noms",
        "rcfilters-view-tags-tooltip": "Résultats du filtrage par balise d'édition",
        "rcfilters-watchlist-edit-watchlist-button": "Modifier votre liste de pages suivies",
        "rcfilters-watchlist-showupdated": "Les modifications faites aux pages que vous n’avez pas visitées depuis qu’elles ont été modifiées sont en <strong>gras</strong>, avec des balises unies.",
        "rcfilters-preference-label": "Masquer la version améliorée des modifications récentes",
-       "rcfilters-preference-help": "Restitue la version 2017 de l'interface ainsi que de tous les outils ajoutés alors et depuis.",
+       "rcfilters-preference-help": "Désactive la version 2017 de l'interface ainsi que de tous les outils ajoutés alors et depuis.",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
        "rclistfromreset": "Réinitialiser la sélection de la date",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "uploaded-script-svg": "Élément scriptable « $1 » trouvé dans le fichier SVG téléversé.",
        "uploaded-hostile-svg": "CSS non sûr trouvé dans l’élément style d’un fichier SVG téléversé.",
        "uploaded-event-handler-on-svg": "Fixer des attributs de gestionnaire d’événement <code>$1=\"$2\"</code> n’est pas autorisé dans les fichiers SVG.",
-       "uploaded-href-attribute-svg": "les attributs href dans les fichiers SVG ne sont autorisés que pour faire référence à des cibles http:// ou https://, <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé.",
+       "uploaded-href-attribute-svg": "<a> les éléments ne peuvent être liés (href) qu’aux cibles de données : (fichier inclus), http:// ou https://, ou un fragment (#, même document). Pour les autres éléments, comme <image>, seuls data: et fragment sont autorisés. Essayez les images incluses lors de l’export de votre SVG. <code>&lt;$1 $2=\"$3\"&gt;</code> obtenu.",
        "uploaded-href-unsafe-target-svg": "Un href vers des données non sûres a été trouvé dans le fichier SVG téléversé : URI cible <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Balise « animate » trouvée, qui pourrait modifier le href en utilisant l’attribut « from » <code>&lt;$1 $2=\"$3\"&gt;</code> dans le fichier SVG téléversé.",
        "uploaded-setting-event-handler-svg": "Positionner les attributs du gestionnaire d’événements n'est pas possible, <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé dans le fichier SVG téléversé.",
        "uploadstash-refresh": "Actualiser la liste des fichiers",
        "uploadstash-thumbnail": "afficher la vignette",
        "uploadstash-exception": "Impossible de stocker le téléversement dans la réserve ($1) : « $2 ».",
+       "uploadstash-bad-path": "Le chemin n’existe pas.",
+       "uploadstash-bad-path-invalid": "Le chemin n’est pas valide.",
+       "uploadstash-bad-path-unknown-type": "Type « $1 » inconnu.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nom de vignette non reconnu.",
+       "uploadstash-bad-path-no-handler": "Aucun gestionnaire trouvé pour le type MIME $1 du fichier $2.",
+       "uploadstash-bad-path-bad-format": "La clé « $1 » n’est pas dans un format correct.",
+       "uploadstash-file-not-found": "La clé « $1 » n’a pas été trouvée dans la réserve.",
+       "uploadstash-file-not-found-no-thumb": "Impossible d’obtenir une vignette.",
+       "uploadstash-file-not-found-no-local-path": "Aucun chemin local pour l’élément mis à l’échelle.",
+       "uploadstash-file-not-found-no-object": "Impossible de créer l’objet fichier local pour la vignette.",
+       "uploadstash-file-not-found-no-remote-thumb": "La récupération de la vignette a échoué : $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "Entête content-type manquant.",
+       "uploadstash-file-not-found-not-exists": "Impossible de trouver le chemin, ou bien ce n’est pas un fichier.",
+       "uploadstash-file-too-large": "Impossible de fournir un fichier plus grand que $1 octets.",
+       "uploadstash-not-logged-in": "Aucun utilisateur n’est connecté, les fichiers doivent appartenir à des utilisateurs.",
+       "uploadstash-wrong-owner": "Ce fichier ($1) n’appartient pas à l’utilisateur courant.",
+       "uploadstash-no-such-key": "Aucune clé ($1), impossible de supprimer.",
+       "uploadstash-no-extension": "L’extension est nulle.",
+       "uploadstash-zero-length": "La taille du fichier est zéro.",
        "invalid-chunk-offset": "Offset de segment non valide",
        "img-auth-accessdenied": "Accès refusé",
        "img-auth-nopathinfo": "PATH_INFO manquant.\nVotre serveur n’est pas paramétré pour transmettre cette information.\nIl fonctionne peut-être en CGI et ne prend pas en charge img_auth.\nVoir : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "tooltip-pt-watchlist": "Une liste des pages dont vous suivez les modifications",
        "tooltip-pt-mycontris": "La liste de {{GENDER:|vos}} contributions",
        "tooltip-pt-anoncontribs": "Une liste des modifications effectuées depuis cette adresse IP",
-       "tooltip-pt-login": "Vous êtes encouragé à vous connecter ; ce n’est cependant pas obligatoire.",
+       "tooltip-pt-login": "Nous vous encourageons à vous connecter ; ce n’est cependant pas obligatoire.",
        "tooltip-pt-login-private": "Vous devez vous connecter pour utiliser ce wiki",
        "tooltip-pt-logout": "Se déconnecter",
-       "tooltip-pt-createaccount": "Vous êtes encouragé à créer un compte utilisateur et vous connecter; ce n’est cependant pas obligatoire.",
+       "tooltip-pt-createaccount": "Nous vous encourageons à créer un compte utilisateur et vous connecter; ce n’est cependant pas obligatoire.",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "tooltip-ca-edit": "Modifier le wikicode",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "exif-gpsstatus": "État du récepteur",
        "exif-gpsmeasuremode": "Mode de mesure",
        "exif-gpsdop": "Précision de la mesure",
-       "exif-gpsspeedref": "Unité de vitesse du récepteur GPS",
+       "exif-gpsspeedref": "Unité de vitesse",
        "exif-gpsspeed": "Vitesse du récepteur GPS",
        "exif-gpstrackref": "Référence pour la direction du mouvement",
        "exif-gpstrack": "Direction du mouvement",
        "autoredircomment": "Page redirigée vers [[$1]]",
        "autosumm-new": "Page créée avec « $1 »",
        "autosumm-newblank": "Page vide créée",
-       "size-bytes": "$1&nbsp;o",
+       "size-bytes": "$1 {{PLURAL:$1|octet|octets}}",
        "size-kilobytes": "$1&nbsp;Kio",
        "size-megabytes": "$1&nbsp;Mio",
        "size-gigabytes": "$1&nbsp;Gio",
        "feedback-close": "Terminé",
        "feedback-external-bug-report-button": "Signaler un bogue technique",
        "feedback-dialog-title": "Soumettre un commentaire",
-       "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.",
+       "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir votre commentaire. Il sera ajouté à la page « $1 », avec votre nom d’utilisateur.",
        "feedback-error1": "Erreur : résultat de l'API non reconnu",
        "feedback-error2": "Erreur : la modification a échoué",
        "feedback-error3": "Erreur : aucune réponse de l'API",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>désactivé</strong>)",
        "mediastatistics": "Statistiques sur les médias",
        "mediastatistics-summary": "Statistiques sur les types de fichiers téléversés. Elles ne prennent en compte que la version la plus récente des fichiers. Les versions anciennes ou supprimées sont exclues.",
+       "mediastatistics-nfiles": "$1 ($2 %)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
        "mediastatistics-bytespertype": "Taille totale de fichiers pour cette section : {{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%).",
        "mediastatistics-allbytes": "Taille totale pour tous les fichiers : {{PLURAL:$1|$1 octet|$1 octets}} ($2).",
        "authprovider-confirmlink-message": "D’après vos dernières tentatives de connexion, les comptes suivants peuvent être liés à votre compte wiki. Les lier vous permettra de se connecter via ces comptes. Veuillez sélectionner lesquels doivent être liés.",
        "authprovider-confirmlink-request-label": "Comptes qui doivent être liés",
        "authprovider-confirmlink-success-line": "$1 : Liés avec succès.",
+       "authprovider-confirmlink-failed-line": "$1 : $2",
        "authprovider-confirmlink-failed": "La liaison du compte n’a pas bien réussi : $1",
        "authprovider-confirmlink-ok-help": "Continuer après l’affichage des messages d’échec de liaison.",
        "authprovider-resetpass-skip-label": "Sauter",
index cd49c62..9b055ab 100644 (file)
@@ -61,7 +61,6 @@
        "underline-never": "Nimer",
        "underline-default": "Komt üüb dan browser uun",
        "editfont-style": "Skraftoort för di tekst uun't werkfial:",
-       "editfont-default": "Hinget faan browser-iinstelangen uf",
        "editfont-monospace": "Skraft mä en fääst tiakenbreetje",
        "editfont-sansserif": "Skraft saner seriifen (fiin onerstreger)",
        "editfont-serif": "Skraft mä seriifen (fiin onerstreger)",
@@ -96,8 +95,8 @@
        "march-gen": "Marts",
        "april-gen": "April",
        "may-gen": "Mei",
-       "june-gen": "Juuni",
-       "july-gen": "Juuli",
+       "june-gen": "Jüüne",
+       "july-gen": "Jüüle",
        "august-gen": "August",
        "september-gen": "September",
        "october-gen": "Oktoober",
        "errorpagetitle": "Diar as wat skiaf gingen",
        "returnto": "Turag tu sidj $1.",
        "tagline": "Faan {{SITENAME}}",
-       "help": "MediaWiki Halep",
+       "help": "Halep",
        "search": "Schük",
        "search-ignored-headings": " #<!-- Detdiar rä ei feranre --> <pre>\n# Auerskraften, diar bi't schüken ei beaachtet wurd.\n# Jodiar feranrangen wurd seekert, wan det sidj mä det auerskraft indeksiaret wurden as.\n# Dü könst det sidjenindeksiarang föörtji, wan dü en nul-edit maagest.\n# Syntax:\n#   * Ales, wat bääft en dobelkrüs („#“) stäänt, as en komentaar.\n#   * Arke rä, wat ei leesag as, as di akeroot tiitel, diar ei beaachtet woort.\nFutnuuten\nFerwisangen\nLuke uk diar\n #</pre> <!-- Detdiar rä ei feranre -->",
        "searchbutton": "Schük",
index abf9a8a..e956dcc 100644 (file)
@@ -20,7 +20,8 @@
                        "아라",
                        "SeoMac",
                        "Macofe",
-                       "Tem"
+                       "Tem",
+                       "Nmacu"
                ]
        },
        "tog-underline": "Folínte faoi naisc:",
@@ -30,7 +31,7 @@
        "tog-extendwatchlist": "Leathnaigh an liosta faire chun gach athrú cuí a thaispeáint",
        "tog-usenewrc": "Athruithe a ghrúpáil de réir leathanaigh sna hathruithe le déanaí agus sa liosta faire",
        "tog-numberheadings": "Uimhrigh ceannteidil go huathoibríoch",
-       "tog-showtoolbar": "Taispeáin an barra uirlisí eagair",
+       "tog-showtoolbar": "Taispeáin an barra uirlisí eagarthóireachta",
        "tog-editondblclick": "Déchliceáil chun leathanaigh a chur in eagar",
        "tog-editsectiononrightclick": "Cumasaigh mír-eagarthóireacht le deaschliceáil ar cheannteidil",
        "tog-watchcreations": "Cuir ar mo liosta faire leathanaigh a chruthaím",
        "tog-watchlisthidepatrolled": "Folaigh athruithe patrólta ón liosta faire",
        "tog-ccmeonemails": "Cuir cóip chugam de gach teactaireacht r-phoist a chuirim chuig úsáideoirí eile",
        "tog-diffonly": "Ná taispeáin inneachar an leathanaigh faoi difríochteanna",
-       "tog-showhiddencats": "Taispeáin chatagóirí folaithe",
+       "tog-showhiddencats": "Taispeáin catagóirí folaithe",
        "tog-norollbackdiff": "Fág an difr ar lár tar éis athruithe a rolladh siar",
        "underline-always": "I gcónaí",
        "underline-never": "Riamh",
        "underline-default": "Mar atá réamhshocraithe sa bhrabhsálaí",
-       "editfont-default": "Réamhshocrú an bhrabhsálaí",
        "editfont-monospace": "Cló aonleithid",
        "editfont-sansserif": "Cló gan trasmhíreanna",
        "editfont-serif": "Cló le trasmhíreanna",
        "oct": "DFómh",
        "nov": "Samh",
        "dec": "Noll",
+       "january-date": "Eanáir $1",
+       "february-date": "Feabhra $1",
+       "march-date": "Márta $1",
+       "april-date": "Aibreán $1",
+       "may-date": "Bealtaine $1",
+       "june-date": "Meitheamh $1",
+       "july-date": "Iúil $1",
+       "august-date": "Lúnasa $1",
+       "september-date": "Meán Fómhair $1",
+       "october-date": "Deireadh Fómhair $1",
+       "november-date": "Samhain $1",
+       "december-date": "Nollaig $1",
        "pagecategories": "{{PLURAL:$1|Catagóir|Catagóirí}}",
        "category_header": "Ailt sa chatagóir \"$1\"",
        "subcategories": "Fo-chatagóirí",
        "anontalk": "Plé",
        "navigation": "Nascleanúint",
        "and": "&#32;agus",
-       "qbfind": "Aimsigh",
-       "qbbrowse": "Brabhsáil",
-       "qbedit": "Cuir in eagar",
-       "qbpageoptions": "An leathanach seo",
-       "qbmyoptions": "Mo chuid leathanaigh",
        "faq": "Ceisteanna Coiteanta",
-       "faqpage": "Project:Ceisteanna_Coiteanta",
        "actions": "Gníomhartha",
        "namespaces": "Ainmspásanna",
        "variants": "Leaganacha Malartacha",
        "searcharticle": "Gabh",
        "history": "Stair an lch seo",
        "history_short": "Stair",
+       "history_small": "stair",
        "updatedmarker": "leasaithe (ó shin mo chuairt dheireanach)",
        "printableversion": "Eagrán inphriontáilte",
        "permalink": "Nasc buan",
        "view": "Amharc",
        "edit": "Athraigh an lch seo",
        "create": "Cruthaigh",
-       "editthispage": "Athraigh an lch seo",
-       "create-this-page": "Cruthaigh an lch seo",
        "delete": "Scrios",
-       "deletethispage": "Scrios an lch seo",
        "undelete_short": "Díscrios {{PLURAL:$1|athrú amháin|$1 athrú}}",
        "viewdeleted_short": "Féach ar {{PLURAL:$1|athrú scriosta amháin|$1 athrú scriosta}}",
        "protect": "Glasáil",
        "protect_change": "athraigh",
-       "protectthispage": "Glasáil an lch seo",
        "unprotect": "Athraigh an chosaint",
-       "unprotectthispage": "Athraigh an chosaint atá ag an lch seo",
        "newpage": "Leathanach nua",
-       "talkpage": "Pléigh an lch seo",
        "talkpagelinktext": "Plé",
        "specialpage": "Leathanach Speisialta",
        "personaltools": "Do chuid uirlisí",
-       "articlepage": "Féach ar an alt",
        "talk": "Plé",
        "views": "Radhairc",
        "toolbox": "Uirlisí",
-       "userpage": "Féach ar lch úsáideora",
-       "projectpage": "Féach ar lch thionscadail",
        "imagepage": "Féach ar lch comhaid",
        "mediawikipage": "Féach ar lch teachtaireacht",
        "templatepage": "Féach ar leathanach an teimpléad",
        "otherlanguages": "I dteangacha eile",
        "redirectedfrom": "(Athsheolta ó $1)",
        "redirectpagesub": "Lch athdhírithe",
-       "lastmodifiedat": "Athraíodh an leathanach seo ag $2, $1.",
+       "lastmodifiedat": "Athraíodh an leathanach seo ar $1, ag $2.",
        "viewcount": "Rochtainíodh an leathanach seo {{PLURAL:$1|uair amháin|$1 uaire}}.",
        "protectedpage": "Leathanach glasáilte",
        "jumpto": "Léim go:",
        "disclaimers": "Séanadh",
        "disclaimerpage": "Project:Séanadh_ginearálta",
        "edithelp": "Cabhair eagarthóireachta",
+       "helppage-top-gethelp": "Cabhair",
        "mainpage": "Príomhleathanach",
        "mainpage-description": "Príomhleathanach",
        "policy-url": "Project:Polasaí",
        "collapsible-expand": "Leathnaigh",
        "thisisdeleted": "Breathnaigh nó cuir ar ais $1?",
        "viewdeleted": "Féach ar $1?",
-       "restorelink": "{{PLURAL:$1|athrú scriosta amháin|$1 athruithe scriosta}}",
+       "restorelink": "{{PLURAL:$1|athrú amháin scriosta|$1 athrú scriosta}}",
        "feedlinks": "Fotha:",
        "feed-invalid": "Cineál liostáil fotha neamhbhailí.",
        "feed-unavailable": "Níl fotha sindeacáitiú ar fáil",
        "nospecialpagetext": "<strong>Tá tú tar éis iarradh ar leathanach speisialta neamhbhailí.</strong>\n\nTá liosta de leathanaigh speisialta bhailí ar fáil ag [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Earráid",
        "databaseerror": "Earráid sa bhunachar sonraí",
+       "databaseerror-error": "Earráid: $1",
        "laggedslavemode": "Rabhadh: B'fhéidir nach bhfuil na nuashonrúcháin is déanaí le feiceáil ar an leathanach seo.",
        "readonly": "Bunachar sonraí faoi ghlas",
        "enterlockreason": "Iontráil cúis don glasáil, agus meastachán\nden uair a díghlasálfar an bunachar sonraí.",
        "yourname": "D'ainm úsáideora",
        "userlogin-yourname": "Ainm úsáideora",
        "userlogin-yourname-ph": "Iontráil d'ainm úsáideora",
+       "createacct-another-username-ph": "Iontráil an t-ainm úsáideora:",
        "yourpassword": "D'fhocal faire",
        "userlogin-yourpassword": "Pasfhocal",
        "userlogin-yourpassword-ph": "Iontráil do phasfhocal",
        "createacct-yourpasswordagain": "Deimhnigh an pasfhocal",
        "createacct-yourpasswordagain-ph": "Iontráil an pasfhocal arís",
        "userlogin-remembermypassword": "Coinnigh logáilte isteach mé",
+       "cannotlogin-title": "Ní féidir logáil isteach",
+       "cannotloginnow-title": "Ní féidir logáil isteach faoi láthair",
+       "cannotloginnow-text": "Ní féidir logáil isteach nuair atá $1 in úsáid",
        "yourdomainname": "D'fhearann",
        "externaldberror": "Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.",
        "login": "Logáil isteach",
        "hr_tip": "Líne cothrománach (inúsáidte go coigilteach)",
        "summary": "Achoimriú:",
        "subject": "Ábhar/ceannlíne:",
-       "minoredit": "Mionathrú é seo",
+       "minoredit": "Is mionathrú é seo",
        "watchthis": "Déan faire ar an lch seo",
        "savearticle": "Sábháil an lch",
+       "savechanges": "Sábháil athruithe",
        "publishpage": "Foilsigh leathanach",
+       "publishchanges": "Foilsigh athruithe",
        "preview": "Réamhamharc",
        "showpreview": "Taispeáin réamhamharc",
        "showdiff": "Taispeáin athruithe",
        "last": "rmh",
        "page_first": "céad",
        "page_last": "deireanach",
-       "histlegend": "Chun difríochtaí a roghnú, marcáil na cnaipíní de na heagráin atá tú ag iarraidh comparáid a dhéanamh astu, agus brúigh Iontráil nó an cnaipe ag bun an leathanaigh.<br />\nTreoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roimhe, <b>m</b> = mionathrú.",
+       "histlegend": "Rogha Difr: marcáil an dá leagan atá comparáid le déanamh eatarthu agus brúigh an eochair ENTER nó an cnaipe ag bun an lch.<br />\nTreoir: <strong>({{int:cur}})</strong> = difríocht ón leagan reatha, <strong>({{int:last}})</strong> = difríocht ón leagan roimhe, <strong>{{int:minoreditletter}}</strong> = mionathrú.",
        "history-fieldset-title": "Brabhsáil an stáir",
        "histfirst": "An ceann is luaithe",
        "histlast": "An ceann is déanaí",
        "notextmatches": "Ní bhfuarthas an téacs ar leathanach ar bith",
        "prevn": "na {{PLURAL:$1|$1}} cinn roimhe seo",
        "nextn": "an {{PLURAL:$1|$1}} i ndiadh",
-       "shown-title": "Taispeáin $1 {{PLURAL:$1|thoradh|torthaí}} an leathanach",
+       "shown-title": "Taispeáin $1 {{PLURAL:$1|toradh}} in aghaidh an leathanaigh",
        "viewprevnext": "Taispeáin ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-new": "'''Cruthaigh an leathanach \"[[:$1]]\" ar an vicí seo!'''",
        "searchprofile-articles": "Leathanaigh ábhair",
        "search-redirect": "(athsheoladh $1)",
        "search-section": "(gearradh $1)",
        "search-suggest": "An raibh $1 á lorg agat?",
+       "search-rewritten": "Ag taispeáint torthaí le haghaidh $1. Ina ionad sin, cuardaigh le haghaidh $2.",
        "search-interwiki-caption": "Comhthionscadail",
        "search-interwiki-default": "Torthaí ó $1:",
        "search-interwiki-more": "(níos mó)",
        "searchdisabled": "Tá brón orainn! Mhíchumasaíodh an cuardach téacs iomlán go sealadach chun luas an tsuímh a chosaint. Idir an dá linn, is féidir leat an cuardach Google anseo thíos a úsáid - b'fhéidir go bhfuil sé as dáta.",
        "preferences": "Sainroghanna",
        "mypreferences": "Sainroghanna",
+       "prefs-edits": "Líon na n-athruithe:",
        "prefs-skin": "Craiceann",
        "skin-preview": "Réamhamharc",
        "datedefault": "Is cuma liom",
        "prefs-personal": "Sonraí úsáideora",
        "prefs-rc": "Athruithe is déanaí",
        "prefs-watchlist": "Liosta faire",
+       "prefs-editwatchlist-label": "Athraigh iontrálacha ar do liosta faire:",
+       "prefs-editwatchlist-clear": "Glan do liosta faire",
        "prefs-watchlist-days": "Líon na laethanta le taispeáint sa liosta faire:",
        "prefs-watchlist-days-max": "$1 {{PLURAL:$1|lá}} ar a mhéad",
-       "prefs-watchlist-edits": "Líon na n-athruithe le taispeáint sa liosta leathnaithe faire:",
+       "prefs-watchlist-edits": "Uaslíon na n-athruithe le taispeáint sa liosta faire:",
        "prefs-watchlist-edits-max": "Uasmhéid: 1000",
        "prefs-misc": "Éagsúla",
        "prefs-resetpass": "Athraigh focal faire",
        "stub-threshold-disabled": "Díchumasaithe",
        "recentchangesdays": "Méid laethanta le taispeáint sna hathruithe is déanaí:",
        "recentchangesdays-max": "(uasmhéid $1 {{PLURAL:$1|lá|lá}})",
-       "recentchangescount": "Méid athrú le taispeáint:",
+       "recentchangescount": "Méid athruithe le taispeáint:",
        "savedprefs": "Sábháladh do chuid sainroghanna.",
        "timezonelegend": "Crios ama:",
        "localtime": "An t-am áitiúil:",
        "grouppage-bot": "{{ns:project}}:Róbónna",
        "grouppage-sysop": "{{ns:project}}:Riarthóirí",
        "grouppage-bureaucrat": "{{ns:project}}:Maorlathaigh",
+       "right-minoredit": "Marcáil athruithe mar mhionathruithe",
        "right-upload": "Uaslódáil comhaid",
+       "right-upload_by_url": "Uaslódáil comhaid ó URL",
        "right-delete": "Scrios leathanaigh",
        "right-undelete": "Díscrios leathanach",
        "right-userrights": "Cur gach cearta usáideoira in eagar",
+       "grant-editmywatchlist": "Athraigh do liosta faire",
+       "grant-viewmywatchlist": "Féarch ar do liosta faire",
        "newuserlogpage": "Log cruthú úsáideoira",
        "rightslog": "Log cearta úsáideoira",
        "action-edit": "an leathanach seo a athrú",
        "action-createaccount": "an cuntas seo a chruthú",
        "action-minoredit": "an athrú seo a mharcáil mar mionathrú",
        "action-upload": "uaslódáil an comhad",
-       "nchanges": "{{PLURAL:$1|Athrú amháin|$1 athruithe}}",
+       "action-editmywatchlist": "athraigh do liosta faire",
+       "nchanges": "{{PLURAL:$1|athrú amháin|$1 athrú}}",
        "enhancedrc-history": "stair",
        "recentchanges": "Athruithe is déanaí",
        "recentchanges-legend": "Roghanna do na hathruithe is déanaí",
        "recentchanges-summary": "Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.",
+       "recentchanges-noresult": "Ní dhearnadh aon athrú i rith na tréimhse seo a mheaitseálann leis na critéir seo.",
        "recentchanges-feed-description": "Rianaigh na n-athruite vicí is déanaí sa fotha seo.",
        "recentchanges-label-newpage": "Cruthaíodh lch nua leis an eagarthóireacht seo",
        "recentchanges-label-minor": "Mionathrú é seo",
        "recentchanges-label-bot": "Chomhlíon róbó an t-athrú seo",
+       "recentchanges-label-unpatrolled": "Ní dhearnadh patról ar an athrú seo go fóill",
+       "recentchanges-label-plusminus": "D'athraigh méid an leathanaigh de réir an líon bearta seo",
        "recentchanges-legend-heading": "<strong>Eochair:</strong>",
        "recentchanges-legend-newpage": "$1 - leathanach nua",
+       "recentchanges-submit": "Taispeáin",
+       "rcfilters-legend-heading": "<strong>Liosta na ngiorrúchán:</strong>",
+       "rcfilters-other-review-tools": "Uirlisí athbhreithnithe eile",
+       "rcfilters-activefilters": "Scagairí gníomhacha",
+       "rcfilters-advancedfilters": "Ardscagairí",
+       "rcfilters-limit-title": "Athruithe le taispeáint",
+       "rcfilters-limit-shownum": "Taispeáin an $1 athrú is déanaí",
+       "rcfilters-days-title": "Le líon áirithe laethanta anuas",
+       "rcfilters-hours-title": "Uaireanta is déanaí",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|lá}}",
+       "rcfilters-quickfilters": "Scagairí sábháilte",
+       "rcfilters-savedqueries-defaultlabel": "Scagairí sábháilte",
+       "rcfilters-restore-default-filters": "Cuir scagairí réamhshocraithe i bhfeidhm",
+       "rcfilters-show-new-changes": "Féach ar na hathruithe is déanaí",
+       "rcfilters-empty-filter": "Níl aon scagairí gníomhacha. Gach iarracht á thaispeáint.",
+       "rcfilters-filterlist-feedbacklink": "Inis dúinn céard a shíleann tú faoi na huirlisí scagairí (nua) seo",
+       "rcfilters-highlightbutton-title": "Aibhsigh torthaí",
+       "rcfilters-filterlist-noresults": "Níor aimsíodh aon scagairí",
+       "rcfilters-filtergroup-authorship": "Údarthacht na n-iarrachtaí",
+       "rcfilters-filter-editsbyself-label": "Athruithe déanta agatsa",
+       "rcfilters-filter-editsbyself-description": "Do chuid iarrachtaí féin",
+       "rcfilters-filter-editsbyother-label": "Athruithe déanta ag daoine eile",
+       "rcfilters-filter-editsbyother-description": "Gach athrú seachas do chinn féin.",
+       "rcfilters-filtergroup-userExpLevel": "Clárú úsáideoirí agus taithí",
+       "rcfilters-filter-user-experience-level-registered-label": "Cláraithe",
+       "rcfilters-filter-user-experience-level-registered-description": "Eagarthóirí atá logáilte isteach.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Neamhchláraithe",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Eagarthóirí nach bhfuil logáilte isteach.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Núíosaigh",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Eagarthóirí atá cláraithe ach atá níos lú ná 10 n-athrú nó 4 lá gníomhacha acu",
+       "rcfilters-filter-user-experience-level-learner-label": "Foghlaimeoirí",
+       "rcfilters-filter-user-experience-level-learner-description": "Eagarthóirí atá cláraithe le taithí idir \"Núíosaigh\" agus \"Ard-úsáideoirí\"",
+       "rcfilters-filter-user-experience-level-experienced-label": "Ard-úsáideoirí",
+       "rcfilters-filter-user-experience-level-experienced-description": "Eagarthóirí atá cláraithe le níos mó ná 500 athrú agus 30 lá gníomhacha.",
+       "rcfilters-filtergroup-automated": "Iarrachtaí uathoibríocha",
+       "rcfilters-filter-bots-label": "Bota",
+       "rcfilters-filter-bots-description": "Athruithe déanta ag uirlisí uathoibríocha.",
+       "rcfilters-filter-humans-label": "Daonna (ní bota)",
+       "rcfilters-filter-humans-description": "Athruithe déanta ag eagarthóirí daonna.",
+       "rcfilters-filter-minor-label": "Mionathruithe",
+       "rcfilters-filter-minor-description": "Mionathruithe marcáilte ag úsáideoir",
+       "rcfilters-filter-major-label": "Athruithe nach mionathruithe iad",
+       "rcfilters-filter-major-description": "Athruithe nár marcáladh mar mhionathruithe.",
+       "rcfilters-filtergroup-watchlist": "Leathanaigh ar an liosta faire",
+       "rcfilters-filter-watchlist-watched-label": "Ar an Liosta Faire",
+       "rcfilters-filter-watchlist-watched-description": "Athruithe do leathanaigh ar do Liosta Faire",
+       "rcfilters-filter-watchlist-watchednew-label": "Athruithe nua ar do Liosta Faire",
+       "rcfilters-filter-watchlist-watchednew-description": "Athruithe do leathanaigh ar an liosta faire nach raibh tú ar cuairt acu ó rinneadh athruithe dóibh.",
+       "rcfilters-filter-watchlist-notwatched-label": "Níl sé ar an Liosta Faire",
+       "rcfilters-filter-watchlist-notwatched-description": "Gach rud seachas athruithe do leathanaigh ar do liosta faire",
+       "rcfilters-filtergroup-changetype": "Cineál an athraithe",
+       "rcfilters-filter-pageedits-label": "Athruithe lch.",
+       "rcfilters-filter-pageedits-description": "Athruithe ar ábhar, ar phlé, ar chatagóirí...",
+       "rcfilters-filter-newpages-label": "Cruthuithe lch.",
+       "rcfilters-filter-newpages-description": "Athruithe a chruthaíonn leathanaigh nua.",
+       "rcfilters-filter-categorization-label": "Athruithe ar chatagóirí",
+       "rcfilters-filter-categorization-description": "Taifid de leathanaigh a cuireadh le nó a baineadh ó chatagóirí.",
+       "rcfilters-filter-logactions-label": "Gníomhartha logáilte",
+       "rcfilters-filtergroup-lastRevision": "Leaganacha reatha",
+       "rcfilters-filter-lastrevision-description": "Díreach an t-athrú is déanaí den leathanach.",
+       "rcfilters-filter-previousrevision-label": "Ní an leagan reatha é seo",
+       "rcfilters-filter-previousrevision-description": "Gach athrú nach an \"leagan reatha\" é",
+       "rcfilters-view-tags": "Athruithe clibeáilte",
        "rcnotefrom": "Is iad seo a leanas na hathruithe ó <b>$2</b> (go dti <b>$1</b> taispeánaithe).",
-       "rclistfrom": "Taispeáin athruithe nua ó $3 $2 anuas",
+       "rclistfrom": "Taispeáin athruithe nua ó ag tosú le $2, $3",
        "rcshowhideminor": "$1 mionathruithe",
        "rcshowhideminor-show": "Taispeáin",
        "rcshowhideminor-hide": "Folaigh",
        "rcshowhidebots-show": "Taispeáin",
        "rcshowhidebots-hide": "Folaigh",
        "rcshowhideliu": "$1 úsáideoir cláraithe",
+       "rcshowhideliu-show": "Taispeáin",
        "rcshowhideliu-hide": "Folaigh",
        "rcshowhideanons": "$1 úsáideoirí gan ainm",
        "rcshowhideanons-show": "Taispeáin",
        "rcshowhideanons-hide": "Folaigh",
-       "rcshowhidepatr": "$1 athruithe faoi phatról",
+       "rcshowhidepatr": "$1 athrú faoi phatról",
+       "rcshowhidepatr-show": "Taispeáin",
        "rcshowhidemine": "$1 mo chuid athruithe",
        "rcshowhidemine-show": "Taispeáin",
        "rcshowhidemine-hide": "Folaigh",
+       "rcshowhidecategorization-show": "Taispeáin",
        "rclinks": "Taispeáin an $1 athrú is déanaí sa $2 lá seo caite",
        "diff": "difr",
        "hist": "stair",
        "rc_categories_any": "Aon chatagóir",
        "rc-change-size-new": "$1 {{PLURAL:$1|bheart|beart}} tar éis an athraithe",
        "newsectionsummary": "/* $1 */ mír nua",
-       "rc-enhanced-expand": "Taispeáin mionsonraithe (JavaScript riachtanach)",
+       "rc-enhanced-expand": "Taispeáin mionsonraithe",
        "rc-enhanced-hide": "Folaigh shonraí",
        "recentchangeslinked": "Athruithe gaolmhara",
        "recentchangeslinked-feed": "Athruithe gaolmhara",
        "recentchangeslinked-toolbox": "Athruithe gaolmhara",
-       "recentchangeslinked-title": "Athruithe gaolmhara le \"$1\"",
+       "recentchangeslinked-title": "Athruithe gaolmhar le \"$1\"",
        "recentchangeslinked-summary": "Seo liosta na n-athruithe atá deanta is déanaí le leathanaigh atá naiscthe as leathanach sonraithe (nó baill an chatagóir sonraithe).\nTá na leathanaigh ar do [[Special:Watchlist|liosta faire]] i '''gcló trom'''.",
        "recentchangeslinked-page": "Ainm leathanaigh:",
        "recentchangeslinked-to": "Taispeáin athruithe do leathanaigh nasctha leis an leathanach áirithe sin ina áit.",
-       "upload": "Uaslódaigh comhad",
+       "upload": "Uaslódáil comhad",
        "uploadbtn": "Uaslódaigh comhad",
        "reuploaddesc": "Dul ar ais chuig an fhoirm uaslódála.",
        "uploadnologin": "Nil tú logáilte isteach",
        "sourcefilename": "Comhadainm foinse:",
        "destfilename": "Comhadainm sprice:",
        "upload-maxfilesize": "Méad comhad is mó: $1",
+       "upload-options": "Roghanna uaslódála",
        "watchthisupload": "Déan faire ar an leathanach seo",
        "upload-proto-error": "Prótacal mícheart",
        "upload-file-error": "Earráid inmheánach",
+       "upload-dialog-title": "Uaslódáil comhad",
+       "upload-dialog-button-upload": "Uaslódáil",
        "license": "Ceadúnas:",
        "license-header": "Ceadúnú",
        "nolicense": "Níl aon cheann roghnaithe",
        "statistics": "Staidrimh",
        "statistics-header-users": "Staidreamh úsáideora",
        "statistics-pages": "Leathanaigh",
+       "statistics-files": "Comhaid uaslódáilte",
+       "statistics-users": "Cláraithe [[Special:ListUsers|users]]",
        "doubleredirects": "Athsheoltaí dúbailte",
        "doubleredirectstext": "<b>Tabhair faoi deara:</b> B'fheidir go bhfuil toraidh bréagacha ar an liosta seo.\nDe ghnáth cíallaíonn sé sin go bhfuil téacs breise le naisc thíos sa chéad #REDIRECT no #ATHSHEOLADH.<br />\n Sa\ngach sraith tá náisc chuig an chéad is an dara athsheoladh, chomh maith le chéad líne an dara téacs athsheolaidh. De\nghnáth tugann sé sin an sprioc-alt \"fíor\".",
        "brokenredirects": "Atreoruithe briste",
        "mostimages": "Na comhaid naiscthe is mó",
        "mostrevisions": "Leathanaigh leis na leasaithe is mó",
        "prefixindex": "Gach leathanach le réimír",
+       "prefixindex-submit": "Taispeáin",
        "shortpages": "Leathanaigh ghearra",
        "longpages": "Leathanaigh fhada",
        "deadendpages": "Leathanaigh chaocha",
        "protectedpages": "Leathanaigh chosanta",
        "protectedtitles": "Teidil chosanta",
        "listusers": "Liosta úsáideoirí",
+       "listusers-editsonly": "Ná taispeáin ach úsáideoirí a rinne athruithe",
        "newpages": "Leathanaigh nua",
+       "newpages-submit": "Taispeáin",
        "newpages-username": "Ainm úsáideora:",
        "ancientpages": "Na leathanaigh is sine",
        "move": "Athainmnigh",
        "notargettext": "Níor thug tú leathanach nó úsáideoir sprice\nchun an gníomh seo a dhéanamh ar.",
        "pager-newer-n": "{{PLURAL:$1|1 níos nuaí|$1 níos nuaí}}",
        "pager-older-n": "{{PLURAL:$1|1 níos sine|$1 níos sine}}",
+       "apisandbox": "API: bosca gainimh",
+       "apisandbox-unfullscreen": "Taispeáin lch.",
        "booksources": "Leabharfhoinsí",
        "booksources-search-legend": "Cuardaigh le foinsí leabhar",
        "booksources-search": "Cuardaigh",
        "specialloguserlabel": "Úsáideoir:",
        "speciallogtitlelabel": "Teideal:",
        "log": "Logaí",
+       "logeventslist-submit": "Taispeáin",
        "all-logs-page": "Gach loga poiblí",
        "alllogstext": "Bailiúchán cuimsitheach de gach loga {{SITENAME}}.\nIs féidir leat an méid ar taispeáint a chúngú trí roghnú an saghas loga, an t-ainm úsáideora (cásíogair), nó an leathanach (cásíogair freisin) atá i gceist agat.",
        "allpages": "Gach leathanach",
        "allpagesprefix": "Taispeáin leathanaigh leis an réimír:",
        "allpages-bad-ns": "Níl an t-ainmspás \"$1\" ar {{SITENAME}}",
        "categories": "Catagóirí",
+       "categories-submit": "Taispeáin",
        "categoriespagetext": "Tá leathanaigh nó meáin {{PLURAL:$1|sa chatagóir|sna catagóirí}} seo a leanas.\nNí thaispeántar [[Special:UnusedCategories|catagóiri neamhúsáidte]] anseo.\nFéach freisin ar [[Special:WantedCategories|catagóirí faoi iarraidh]].",
-       "deletedcontributions": "Dréachtaí úsáideora scriosta",
+       "deletedcontributions": "Iarrachtaí úsáideoirí scriosta",
        "deletedcontributions-title": "Dréachtaí úsáideora scriosta",
+       "sp-deletedcontributions-contribs": "iarrachtaí",
        "linksearch": "Naisc eachtraigh",
        "linksearch-ns": "Ainmspás:",
        "linksearch-ok": "Cuardaigh",
        "nowatchlist": "Níl aon rud ar do liosta faire.",
        "watchlistanontext": "$1, le d'thoil, chun míreanna ar do liosta faire a fheiceáil ná a athrú.",
        "watchnologin": "Níl tú logáilte isteach",
+       "addwatch": "Cuir leis an liosta faire",
        "addedwatchtext": "Cuireadh an leathanach \"<nowiki>$1</nowiki>\" le do [[Special:Watchlist|liosta faire]].\nAmach anseo liostálfar athruithe don leathanach seo agus dá leathanach plé ansin,\nagus beidh '''cló trom''' ar a theideal san [[Special:RecentChanges|liosta de na hathruithe is déanaí]] sa chaoi go bhfeicfeá iad go héasca.",
+       "removewatch": "Bain ón liosta faire",
        "removedwatchtext": "Baineadh an leathanach \"[[:$1]]\" as [[Special:Watchlist|do liosta faire]].",
        "watch": "Déan faire",
        "watchthispage": "Déan faire ar an leathanach seo",
        "watchlist-details": "Tá tú ag faire ar {{PLURAL:$1|leathanach amháin|$1 leathanaigh}}, gan leathanaigh phlé a chur san áireamh.",
        "wlheader-enotif": "Cumasaíodh fógraí riomhphoist.",
        "wlheader-showupdated": "Tá '''cló trom''' ar leathanaigh a athraíodh ón uair is deireanaí a d'fhéach tú orthu.",
-       "wlnote": "Is {{PLURAL:$1|é seo thíos an t-athrú deireanach|iad seo thíos na '''$1''' athruithe deireanacha}} {{PLURAL:$2|san uair deireanach|sna '''$2''' uaire deireanacha}}.",
-       "wlshowlast": "Líon na n-uair is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2. Taispeáin .",
+       "wlnote": "Is {{PLURAL:$1|é seo thíos an t-athrú is déanaí|iad seo thíos an <strong>'''$1'''</strong> athrú is déanaí}} {{PLURAL:$2|san uair an chloig dheireanach|sa '''$2''' uair an chloig dheireanacha}}.",
+       "wlshowlast": "Líon na n-uaireanta is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2.",
+       "watchlist-submit": "Taispeáin",
+       "wlshowhideminor": "mionathruithe",
+       "wlshowhidebots": "botaí",
+       "wlshowhideliu": "Úsáideoirí cláraithe",
        "watchlist-options": "Roghanna don liosta faire",
        "watching": "Ag faire...",
        "unwatching": "Á bhaint de do liosta faire...",
        "enotif_lastvisited": "Féach ar $1 le haghaidh gach athrú a rinneadh ó thús na cuairte seo caite a rinne tú.",
        "enotif_anon_editor": "úsáideoir gan ainm $1",
        "enotif_body": "A $WATCHINGUSERNAME, a chara,\n\n$CHANGEDORCREATED $PAGEEDITOR an leathanach $PAGETITLE  ag {{SITENAME}} ar $PAGEEDITDATE, féach ar $PAGETITLE_URL chun an leagan reatha a fháil.\n\n$NEWPAGE\n\nAthchoimriú an úsáideora a rinne é: $PAGESUMMARY $PAGEMINOREDIT\n\nSonraí teagmhála an úsáideora:\nr-phost: $PAGEEDITOR_EMAIL\nvicí: $PAGEEDITOR_WIKI\n\nI gcás athruithe eile, ní bheidh aon fhógra eile muna dtéann tú go dtí an leathanach seo.\nIs féidir freisin na bratacha fógartha a athrú do gach leathanach ar do liosta faire.\n\n\t     Is mise le meas,\n\t     Fógrachóras cairdiúil {{GRAMMAR:genitive|{{SITENAME}}}}\n\n--\nChun socruithe do liosta faire a athrú, tabhair cuairt ar\n{{canonicalurl:Special:Watchlist/edit}}\n\nChun an leathanach a bhaint de do liosta faire, tabhair cuairt ar\n$UNWATCHURL\n\nAiseolas agus a thuilleadh cabhrach:\n$HELPPAGE",
+       "enotif_minoredit": "Is mionathrú é seo",
        "created": "Chruthaigh",
        "changed": "D'athraigh",
        "deletepage": "Scrios an leathanach",
        "delete-confirm": "Scrios \"$1\"",
        "delete-legend": "Scrios",
        "historywarning": "'''Rabhadh:''' Tá stair (tuairim is {{PLURAL:$1|leagan amháin|$1 leaganacha}}) ag an leathanach a bhfuil tú ar tí é a scriosadh:",
+       "historyaction-submit": "Taispeáin",
        "confirmdeletetext": "Tá tú ar tí leathanach, agus a chuid staire, a scriosadh.\nDeimhnigh, le do thoil, gur mhian leat é seo a dhéanamh, go dtuigeann tú torthaí an ghnímh seo agus go bhfuil tú dá dhéanamh de réir [[{{MediaWiki:Policy-url}}|an pholasaí]].",
        "actioncomplete": "Gníomh críochnaithe",
        "deletedtext": "scriosadh \"$1\".\nFéach ar $2 chun cuntas na scriosiadh deireanacha a fháil.",
        "deletereason-dropdown": "*Fáthanna coitianta scriosta\n** Iarratas ón údar\n** Sárú cóipchirt\n** Loitiméireacht",
        "rollback": "Athruithe a rolladh siar",
        "rollbacklink": "roll siar",
-       "rollbacklinkcount": "Roll siar $1 {{PLURAL:$1|athrú|athruithe}}",
+       "rollbacklinkcount": "Roll siar $1 {{PLURAL:$1|athrú}}",
        "rollbackfailed": "Theip an rolladh siar",
        "cantrollback": "Ní féidir an athrú a athúsáid; ba é údar an ailt an t-aon duine a rinne athrú dó.",
        "alreadyrolled": "Ní féidir eagrán níos luaí an leathanaigh [[:$1]] le [[User:$2|$2]] ([[User talk:$2|Plé]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a athúsáid; d'athraigh duine eile é cheana fein, nó d'athúsáid duine eile eagrán níos luaí cheana féin.\n\n[[User:$3|$3]] ([[User talk:$3|Plé]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) an té a rinne an athrú is déanaí.",
        "pagesize": "(bearta)",
        "restriction-edit": "Cuir in eagar",
        "restriction-create": "Cruthaigh",
-       "restriction-upload": "Uaslódaigh",
+       "restriction-upload": "Uaslódáil",
        "restriction-level-autoconfirmed": "leathghlasáil",
        "undelete": "Díscrios leathanach scriosta",
        "undeletepage": "Féach ar leathanaigh scriosta agus díscrios iad",
        "undeleteinvert": "Cuir an roghnú bun os cionn",
        "undeletecomment": "Tuairisc:",
        "undelete-search-box": "Cuardaigh leathanaigh scriosta",
+       "undelete-search-prefix": "Taispeáin leathanaigh ag tosú le:",
        "undelete-search-submit": "Cuardaigh",
        "namespace": "Ainmspás:",
        "invert": "Iompaigh rogha bunoscionn",
        "blanknamespace": "(Gnáth)",
-       "contributions": "Dréachtaí {{GENDER:$1|úsáideora}}",
+       "contributions": "Iarrachtaí {{GENDER:$1|úsáideora}}",
        "contributions-title": "Dréachtaí úsáideora do $1",
-       "mycontris": "Dréachtaí",
+       "mycontris": "Iarrachtaí",
        "anoncontribs": "Dréachtaí",
        "contribsub2": "Do $1 ($2)",
        "nocontribs": "Ní bhfuarthas aon athrú a bhí cosúil le na crítéir seo.",
        "uctop": "(reatha)",
        "month": "Ón mhí seo (agus níos luaithe):",
        "year": "Ón bhliain seo (agus níos luaithe):",
-       "sp-contributions-newbies": "Taispeáin dréachtaí ó chuntais nua amháin",
+       "sp-contributions-newbies": "Taispeáin iarrachtaí ó chuntais nua amháin",
        "sp-contributions-newbies-sub": "Le cuntais nua",
-       "sp-contributions-newbies-title": "Dréachtaí úsáideora do chuntasaí nua",
+       "sp-contributions-newbies-title": "Iarrachtaí úsáideora do chuntais nua",
        "sp-contributions-blocklog": "Log coisc",
+       "sp-contributions-suppresslog": "iarrachtaí {{GENDER:$1|user}} folaithe",
        "sp-contributions-deleted": "dréachtaí {{GENDER:$1|úsáideora}} scriosta",
        "sp-contributions-uploads": "uaslódálacha",
        "sp-contributions-logs": "logaí",
        "sp-contributions-talk": "plé",
        "sp-contributions-userrights": "bainistíocht cearta úsáideora",
-       "sp-contributions-search": "Cuardaigh dréachtaí",
+       "sp-contributions-search": "Cuardaigh iarrachtaí",
        "sp-contributions-username": "Seoladh IP nó ainm úsáideora:",
+       "sp-contributions-toponly": "Ná taispeáin ach na leaganacha is déanaí",
+       "sp-contributions-hideminor": "Folaigh mionathruithe",
        "sp-contributions-submit": "Cuardaigh",
        "whatlinkshere": "Naisc leis an lch seo",
        "whatlinkshere-title": "Naisc le $1",
        "whatlinkshere-hideimages": "$1 naisc comhad",
        "whatlinkshere-filters": "Scagairí",
        "blockip": "Coisc úsáideoir",
-       "blockip-legend": "Coisc úsáideoir",
        "blockiptext": "Úsáid an foirm anseo thíos chun bealach scríofa a chosc ó\nseoladh IP nó ainm úsáideora áirithe.\nIs féidir leat an rud seo a dhéanamh amháin chun an chreachadóireacht a chosc, de réir\nmar a deirtear sa [[{{MediaWiki:Policy-url}}|polasaí {{GRAMMAR:genitive|{{SITENAME}}}}]].\nLíonaigh cúis áirithe anseo thíos (mar shampla, is féidir leat a luaigh\nleathanaigh áirithe a rinne an duine damáiste ar).",
        "ipaddressorusername": "Seoladh IP nó ainm úsáideora:",
        "ipbexpiry": "Am éaga",
        "blockipsuccesstext": "Choisceadh [[Special:Contributions/$1|$1]].\n<br />Féach ar an g[[Special:BlockList|liosta coisc IP]] chun coisc a athbhreithniú.",
        "ipb-unblock-addr": "Díchoisc $1",
        "ipb-unblock": "Díchosc ainm úsáideora ná seoladh IP",
+       "ipb-blocklist-contribs": "Iarrachtaí le haghaidh {{GENDER:$1|$1}}",
        "unblockip": "Díchoisc úsáideoir",
        "unblockiptext": "Úsáid an foirm anseo thíos chun bealach scríofa a thabhairt ar ais do seoladh\nIP nó ainm úsáideora a raibh faoi chosc roimhe seo.",
        "ipusubmit": "Bain an chosc seo",
        "tooltip-pt-anontalk": "Plé maidir le na hathruithe a dhéantar ón seoladh IP seo",
        "tooltip-pt-preferences": "{{GENDER:|Do}}  chuid sainroghanna",
        "tooltip-pt-watchlist": "Liosta de na leathanaigh a bhfuil tú á bhfaire ar athruithe",
-       "tooltip-pt-mycontris": "Liosta do chuid dréachtaí",
+       "tooltip-pt-mycontris": "Liosta de do chuid iarrachtaí féin",
        "tooltip-pt-login": "Moltar duit logáil isteach, ach níl sé riachtanach.",
        "tooltip-pt-logout": "Logáil amach",
        "tooltip-ca-talk": "Plé maidir leis an leathanach ábhair",
-       "tooltip-ca-edit": "Is féidir leat an leathanach seo a athrú. Más é do thoil é, bain úsáid as an cnaipe réamhamhairc roimh sábháil a dhéanamh.",
+       "tooltip-ca-edit": "Athraigh an leathanach seo",
        "tooltip-ca-addsection": "Cur tús le alt nua",
        "tooltip-ca-viewsource": "Tá an leathanach seo glasáilte. Is féidir leat a fhoinse a fheiceáil.",
        "tooltip-ca-history": "Leagain stairiúla den leathanach seo.",
        "tooltip-t-recentchangeslinked": "Na hathruithe is déanaí ar leathanaigh a nascaíonn chuig an leathanach seo",
        "tooltip-feed-rss": "Fotha RSS don leathanach seo",
        "tooltip-feed-atom": "Fotha Atom don leathanach seo",
-       "tooltip-t-contributions": "Féach ar an liosta dréachtaí a rinne an t-úsáideoir seo",
+       "tooltip-t-contributions": "Féach ar liosta iarrachtaí an úsáideora seo {{GENDER:$1|this user}}",
        "tooltip-t-emailuser": "Cuir teachtaireacht chuig an úsáideoir seo",
        "tooltip-t-upload": "Comhaid íomhá nó meáin a uaslódáil",
        "tooltip-t-specialpages": "Liosta de gach leathanach speisialta",
        "tooltip-ca-nstab-template": "Féach ar an teimpléad",
        "tooltip-ca-nstab-help": "Féach ar an leathanach cabhrach",
        "tooltip-ca-nstab-category": "Féach ar an leathanach catagóire",
-       "tooltip-minoredit": "Déan mionathrú den athrú seo",
+       "tooltip-minoredit": "Marcáil mar mhionathrú",
        "tooltip-save": "Sábháil do chuid athruithe",
        "tooltip-publish": "Foilsigh do chuid athruithe",
        "tooltip-preview": "Réamhamharc ar do chuid athruithe; úsáid an gné seo roimh a shábhálaíonn tú!",
        "tooltip-diff": "Taispeáin na difríochtaí áirithe a rinne tú don téacs",
        "tooltip-compareselectedversions": "Féach na difríochtaí idir an dhá leagain roghnaithe den leathanach seo.",
        "tooltip-watch": "Cuir an leathanach seo le do liosta faire",
+       "tooltip-watchlistedit-raw-submit": "Nuashonraigh an liosta faire",
+       "tooltip-upload": "Tosaigh ag uaslódáil",
        "tooltip-rollback": "Fill ar leagan an leathanaigh seo roimh athruithe an eagarthóra dheireanaigh in aon chlic amháin",
        "tooltip-undo": "Cuirtear \"Cealaigh\" an t-athrú seo ar cheal agus osclaítear an fhoirm eagair i mód réamhamhairc. Is féidir cúis na hathruithe a chur san achoimre.",
        "tooltip-summary": "Cuir isteach achoimre ghearr",
        "newimages": "Gailearaí na n-íomhánna nua",
        "imagelisttext": "Tá liosta thíos de {{PLURAL:$1|comhad amháin|$1 comhaid $2}}.",
        "newimages-label": "Comhadainm (nó cuid de):",
+       "newimages-newbies": "Taispeáin iarrachtaí ó chuntais nua amháin",
        "noimages": "Tada le feiceáil.",
        "ilsubmit": "Cuardaigh",
        "bydate": "de réir dáta",
        "sp-newimages-showfrom": "Taispeáin íomhánna nua as $2, $1",
+       "days": "{{PLURAL:$1|$1 lá}}",
        "bad_image_list": "Is é seo a leanas an formáid:\n\nNíl ach míreanna liosta amháin (línte ag tosú le *) san áireamh.\nIs riachtanach gur nasc do dhrochchomhad é an chéad nasc ar líne.\nIs eisceachtaí iad na naisc eile ar an líne céanna, .i. leathanaigh gur féidir an comhad a bheith orthu go hinlíne.",
        "metadata": "Meiteasonraí",
        "metadata-help": "Tá breis eolais sa comhad seo, curtha, is dócha, as ceamara digiteach ná scanóir a chruthaigh ná a digitigh é.\nMá tá an comhad mionathraithe as an bunleagan, b'fhéidir nach mbeidh ceann de na sonraí fágtha sa comhad atá athruithe.",
-       "metadata-expand": "Taispeáin sonraí síneadh",
+       "metadata-expand": "Taispeáin sonraí sínte",
        "metadata-collapse": "Folaigh sonraí síneadh",
        "metadata-fields": "Beidh na meiteasonraí EXIF seo a leanas dá dtaispeáint ar an leathanach íomhá nuair atá an clár meiteasonraí ceilte.\nBeidh na cinn eile ceilte de réir réamhshocraithe.\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": "Leithead",
        "exif-source": "Foinse",
        "exif-languagecode": "Teanga",
        "exif-iimcategory": "Catagóir",
+       "exif-intellectualgenre": "Cineál na míre",
        "exif-compression-1": "Neamh-chomhbhrúite",
        "exif-unknowndate": "Dáta anaithnid",
        "exif-orientation-1": "Gnáth",
        "exif-gpsdirection-t": "Fíorthreo",
        "exif-gpsdirection-m": "Treo maighnéadach",
        "exif-dc-publisher": "Foilsitheoir",
+       "exif-dc-type": "Cineál an mheáin",
+       "exif-iimcategory-hum": "Suim daonna",
        "namespacesall": "iad uile",
        "monthsall": "gach mí",
        "confirmemail": "Deimhnigh do ríomhsheoladh",
        "recreate": "Athchruthaigh",
        "confirm_purge_button": "Tá",
        "confirm-purge-top": "An bhfuil tú cinnte go dteastaíonn uait taisce an leathanaigh seo a bhánú?",
+       "confirm-watch-top": "Cuir an leathanach seo le do liosta faire?",
+       "confirm-unwatch-top": "Bain an leathanach seo ó do liosta faire?",
        "imgmultipageprev": "'← leathanach roimhe sin",
        "imgmultipagenext": "leathanach a leanas →",
        "imgmultigoto": "Téigh go leathanach $1",
        "table_pager_prev": "Leathanach roimhe",
        "table_pager_first": "Céad leathanach",
        "table_pager_last": "Deireadh leathanach",
+       "table_pager_limit": "Taispeáin $1 mír/leathanach",
        "table_pager_limit_submit": "Gabh",
        "table_pager_empty": "Folamh",
        "autoredircomment": "Ag athdhíriú go [[$1]]",
        "watchlistedit-raw-titles": "Teideail:",
        "watchlistedit-raw-submit": "Nuashonraigh do liosta faire",
        "watchlistedit-raw-done": "Tá do liosta faire nuashonraithe.",
+       "watchlistedit-clear-title": "Glan an liosta faire",
+       "watchlistedit-clear-explain": "Bainfear gach teideal ó do liosta faire",
+       "watchlistedit-clear-submit": "Glan an liosta faire (Tá sé seo buan)",
+       "watchlisttools-clear": "Glan an liosta faire",
        "watchlisttools-view": "Féach ar na hathruithe ábhartha",
        "watchlisttools-edit": "Féach ar do liosta faire ná cuir in eagar é",
        "watchlisttools-raw": "Cuir do amhliosta faire in eagar",
        "specialpages-group-spam": "Uirlisí turscar",
        "blankpage": "Leathanach bán",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|chlib amháin|clib}}]]: $2)",
+       "diff-form-submit": "Taispeáin difríochtaí",
        "htmlform-selectorother-other": "Eile",
        "logentry-move-move": "{{GENDER:$2|Bhog}} $1 an leathanach $3 go $4",
        "feedback-cancel": "Cealaigh",
        "feedback-message": "Teachtaireacht:",
        "searchsuggest-search": "Cuardaigh {{SITENAME}}",
+       "duration-days": "$1 {{PLURAL:$1|lá}}",
        "expand_templates_remove_comments": "Scrios nótaí tráchta",
-       "expand_templates_preview": "Réamhamharc"
+       "expand_templates_preview": "Réamhamharc",
+       "log-action-filter-block": "Cineál an bhloic:",
+       "log-action-filter-delete": "Cineál an scriosta:",
+       "log-action-filter-protect": "Cineál na cosanta:",
+       "log-action-filter-suppress": "Cineál an tsochta:"
 }
index bdcf6df..e8ae8e4 100644 (file)
        "nstab-category": "Categoría",
        "mainpage-nstab": "Páxina principal",
        "nosuchaction": "Non existe esa acción",
-       "nosuchactiontext": "A acción especificada polo enderezo URL é inválida.\nPode que non o escribise ben ou que seguise unha ligazón incorrecta.\nIsto tamén podería indicar un erro en {{SITENAME}}.",
+       "nosuchactiontext": "A acción especificada polo enderezo URL non é válida.\nPode que non o escribise ben ou que seguise unha ligazón incorrecta.\nIsto tamén podería indicar un erro en {{SITENAME}}.",
        "nosuchspecialpage": "Non existe esa páxina especial",
        "nospecialpagetext": "<strong>Solicitou unha páxina especial que non está recoñecida polo wiki.</strong>\n\nPode atopar unha lista coas páxinas especiais válidas en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erro",
        "badtitle": "Título incorrecto",
        "badtitletext": "O título da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingüística ou interwiki incorrecta.\nPoida que conteña un ou máis caracteres dos que non se poden empregar nos títulos.",
        "title-invalid-empty": "O título de páxina solicitado está baleiro ou só contén o nome dun espazo de nomes.",
-       "title-invalid-utf8": "O título de páxina solicitado contén unha secuencia UTF-8 inválida.",
+       "title-invalid-utf8": "O título de páxina solicitado contén unha secuencia UTF-8 non válida.",
        "title-invalid-interwiki": "O título de páxina solicitado contén unha ligazón interwiki que non se pode utilizar nos títulos.",
        "title-invalid-talk-namespace": "O título de páxina solicitado fai referencia a unha páxina de conversa que pode non existir.",
        "title-invalid-characters": "O título de páxina solicitado contén caracteres inválidos: \"$1\".",
        "title-invalid-relative": "O título ten unha ruta relativa. Os títulos de páxina relativos (./, ../) son inválidos, porque a miúdo non son accesibles cando se consultan desde o navegador do usuario.",
-       "title-invalid-magic-tilde": "O título de páxina solicitado contén unha secuencia con tiles inválida (<nowiki>~~~</nowiki>).",
+       "title-invalid-magic-tilde": "O título de páxina solicitado contén unha secuencia con tiles non válida (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "O título de páxina solicitado é moi longo. Non pode ser maior de $1 {{PLURAL:$1|byte|bytes}} en codificación UTF-8.",
        "title-invalid-leading-colon": "O título de páxina solicitado contén un carácter de dous puntos non permitido ao comezo.",
        "perfcached": "Esta información é da memoria caché e pode ser que non estea completamente actualizada. Hai un máximo de {{PLURAL:$1|$1 resultado dispoñible|$1 resultados dispoñibles}} na caché.",
        "anonpreviewwarning": "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''",
        "missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"$1\" a súa edición gardarase sen ningunha descrición da edición.",
        "selfredirect": "<strong>Atención:</strong> Está redirixindo esta páxina a si mesma.\nQuizais especificou incorrectamente a páxina de destino ou poida que estea a editar unha páxina errónea.\nSe preme en \"$1\" de novo, crearase a redireción de calquera xeito.",
-       "missingcommenttext": "Por favor, escriba un comentario a continuación.",
+       "missingcommenttext": "Por favor, escriba un comentario.",
        "missingcommentheader": "<strong>Aviso:</strong> Non escribiu ningún texto no asunto deste comentario.\nSe preme en \"$1\" de novo, a súa edición gardarase sen el.",
        "summary-preview": "Vista previa do resumo de edición:",
        "subject-preview": "Vista previa do asunto:",
        "yourtext": "O seu texto",
        "storedversion": "Versión gardada",
        "editingold": "'''Atención: Está editando unha revisión vella desta páxina.'''\nSe a garda, perderanse os cambios realizados tras esta revisión.",
+       "unicode-support-fail": "Parece que o seu navegador non soporta Unicode. É necesario para editar páxinas, polo que a súa edición non foi gardada.",
        "yourdiff": "Diferenzas",
        "copyrightwarning": "Por favor, teña en conta que todas as contribucións feitas en {{SITENAME}} se consideran publicadas baixo a $2 (consulte $1 para obter máis detalles).\nSe non quere que os seus escritos sexan editados sen piedade e redistribuídos sen límites, entón non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba é da súa autoría ou está copiado dun recurso de dominio público ou que procede dunha fonte libre.\n<strong>Non envíe material con dereitos de autoría sen permiso!</strong>",
        "copyrightwarning2": "Por favor, teña en conta que todas as contribucións feitas en {{SITENAME}} poden ser editadas, alteradas ou eliminadas por outras persoas.\nSe non quere que os seus escritos sexan editados sen piedade, entón non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba é da súa autoría ou está copiado dun recurso de dominio público ou que procede dunha fonte libre (consulte $1 para obter máis detalles).\n<strong>Non envíe material con dereitos de autoría sen permiso!</strong>",
        "rev-delundel": "mostrar/agochar",
        "rev-showdeleted": "mostrar",
        "revisiondelete": "Borrar/restaurar revisións",
-       "revdelete-nooldid-title": "Revisión inválida",
+       "revdelete-nooldid-title": "Revisión non válida",
        "revdelete-nooldid-text": "Non indicou a revisión sobre a que realizar esta función, ou a revisión especificada non existe ou está intentando agochar a revisión actual.",
        "revdelete-no-file": "O ficheiro especificado non existe.",
        "revdelete-show-file-confirm": "Está seguro de querer ver unha revisión borrada do ficheiro \"<nowiki>$1</nowiki>\" do día $2 ás $3?",
        "recentchanges-legend": "Opcións dos cambios recentes",
        "recentchanges-summary": "Nesta páxina pode seguir as modificacións máis recentes feitas no wiki.",
        "recentchanges-noresult": "Non se produciron cambios que coincidisen con eses criterios durante o período especificado.",
+       "recentchanges-timeout": "Esta procura rematou o temo límite de consulta. Tente usar parámetros de procura diferentes.",
+       "recentchanges-network": "Debido a un erro técnico, non foi posible cargar ningún resultado. Por favor, probe refrescando a páxina.",
        "recentchanges-feed-description": "Nesta fonte de novas pode seguir as modificacións máis recentes feitas no wiki.",
        "recentchanges-label-newpage": "Esta edición creou unha nova páxina",
        "recentchanges-label-minor": "Esta é unha edición pequena",
        "recentchanges-submit": "Mostrar",
        "rcfilters-tag-remove": "Eliminar '$1'",
        "rcfilters-legend-heading": "<strong>Lista de abreviaturas:</strong>",
-       "rcfilters-other-review-tools": "<strong>Outras ferramentas de revisión</strong>",
+       "rcfilters-other-review-tools": "Outras ferramentas de revisión",
        "rcfilters-group-results-by-page": "Agrupar resultados por páxina",
        "rcfilters-grouping-title": "Agrupamento",
        "rcfilters-activefilters": "Filtros activos",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "rcfilters-highlighted-filters-list": "Destacados: $1",
        "rcfilters-quickfilters": "Filtros gardados",
-       "rcfilters-quickfilters-placeholder-title": "Aínda non se gardou ningunha ligazón",
+       "rcfilters-quickfilters-placeholder-title": "Aínda non se gardou ningún filtro",
        "rcfilters-quickfilters-placeholder-description": "Para gardar a configuración dos seus filtros e reutilizala máis tarde, prema na icona do marcador na área de Filtro activo que se atopa a abaixo.",
        "rcfilters-savedqueries-defaultlabel": "Filtros gardados",
        "rcfilters-savedqueries-rename": "Renomear",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Crear filtro por defecto",
        "rcfilters-savedqueries-cancel-label": "Cancelar",
        "rcfilters-savedqueries-add-new-title": "Gardar a configuración do filtro actual",
+       "rcfilters-savedqueries-already-saved": "Estes filtro xa están gardados",
        "rcfilters-restore-default-filters": "Restaurar os filtros por defecto",
        "rcfilters-clear-all-filters": "Borrar todos os filtros",
        "rcfilters-show-new-changes": "Mostrar os cambios máis recentes",
-       "rcfilters-search-placeholder": "Filtrar os cambios recentes (navegar ou comezar a escribir)",
+       "rcfilters-search-placeholder": "Filtrar os cambios (use o menú ou procure o nome dun filtro)",
        "rcfilters-invalid-filter": "Filtro no válido",
        "rcfilters-empty-filter": "Non hai filtros activos. Móstranse tódalas contribucións.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filter-user-experience-level-unregistered-label": "Non rexistrados",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que non están autenticados.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Chegados recentemente",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Editores rexistrados con menos de 10 edicións e 4 días de actividade.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores rexistrados con menos de 10 edicións ou 4 días de actividade.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprendices",
        "rcfilters-filter-user-experience-level-learner-description": "Editores rexistrados cuxa experiencia está entre os \"usuarios novatos\" e os \"usuarios experimentados\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Usuarios experimentados",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Excluír os seleccionados",
        "rcfilters-exclude-button-on": "Excluíndo os seleccionados",
-       "rcfilters-view-advanced-filters-label": "Filtros avanzados",
        "rcfilters-view-tags": "Edicións marcadas",
        "rcfilters-view-namespaces-tooltip": "Filtrar resultados por espazo de nomes",
        "rcfilters-view-tags-tooltip": "Filtrar resultados usando etiquetas de edición",
        "uploaded-script-svg": "Atopouse un elemento de comandos \"$1\" no ficheiro SVG subido.",
        "uploaded-hostile-svg": "Atopouse CSS non seguro no elemento de estilo do ficheiro SVG subido.",
        "uploaded-event-handler-on-svg": "Non está permitido fixar atributos de xestión de eventos <code>$1=\"$2\"</code> nos ficheiros SVG.",
-       "uploaded-href-attribute-svg": "Os atributos href nos ficheiros SVG só están autorizados a ligar con enderezos http:// ou https://, mais atopouse <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Os elementos <a> só poden ligar (href) a datos: obxectivos (ficheiro incluído), http:// ou https://, ou fragmentos (#, mesmo-documento). Para outros elementos, como <image>, datos únicos: e fragmentos están permitidos. Tenta incluír imaxes cando exportes o teu SVG. Atopouse <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Atopouse un href a datos non seguros: un enderezo URI <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-animate-svg": "Atopouse unha etiqueta \"animate\", que podería cambiar o seu href, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-setting-event-handler-svg": "Non está permitido fixar os atributos de xestión de eventos, mais atopouse <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploadstash-refresh": "Actualizar a lista de ficheiros",
        "uploadstash-thumbnail": "ver a miniatura",
        "uploadstash-exception": "Imposible gardar a subida na reserva ($1): \"$2\".",
+       "uploadstash-bad-path": "A ruta non existe.",
+       "uploadstash-bad-path-invalid": "A ruta non é válida.",
+       "uploadstash-bad-path-unknown-type": "O tipo «$1» é descoñecido.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "O nome da miniatura é desceñecido.",
+       "uploadstash-bad-path-no-handler": "Non se atopou ningunha rutina de tratamento para o tipo MIME $1 do ficheiro $2.",
+       "uploadstash-bad-path-bad-format": "O formato da clave «$1» é incorrecto.",
+       "uploadstash-file-not-found": "A chave \"$1\" non se atopou na reserva.",
+       "uploadstash-file-not-found-no-thumb": "Non se puido obter a miniatura.",
+       "uploadstash-file-not-found-no-local-path": "Non hai unha ruta local para o elemento redimensionado.",
+       "uploadstash-file-not-found-no-object": "Non se puido crear o obxecto do ficheiro local para a miniatura.",
+       "uploadstash-file-not-found-no-remote-thumb": "Fallou a obtención de miniatura: $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "Falta cabeceira de tipo de contido.",
+       "uploadstash-file-not-found-not-exists": "Non se pode atopar a ruta, ou non é un ficheiro plano.",
+       "uploadstash-file-too-large": "Non se pode servir un ficheiro máis grande de $1 bytes.",
+       "uploadstash-not-logged-in": "Non se iniciou sesión de usuario, os ficheiros deben pertencer a usuarios.",
+       "uploadstash-wrong-owner": "Este ficheiro ($1) non pertence ó usuario actual.",
+       "uploadstash-no-such-key": "No existe esta clave ($1); non se pode eliminar.",
+       "uploadstash-no-extension": "A extensión é nula.",
+       "uploadstash-zero-length": "O ficheiro ten tamaño cero.",
        "invalid-chunk-offset": "Desprazamento inválido do fragmento",
        "img-auth-accessdenied": "Acceso rexeitado",
        "img-auth-nopathinfo": "Falta a PATH_INFO.\nO seu servidor non está configurado para pasar esta información.\nPode ser que estea baseado en CGI e non soporte img_auth.\nVéxase https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "ip_range_invalid": "Rango de enderezos IP non válido.",
        "ip_range_toolarge": "Non están permitidos os rangos de bloqueo maiores que /$1.",
        "ip_range_exceeded": "O rango IP excede o rango máximo. Rango permitido: /$1.",
+       "ip_range_toolow": "Na práctica, non se permiten os intervalos de IPs.",
        "proxyblocker": "Bloqueador de proxy",
        "proxyblockreason": "O seu enderezo IP foi bloqueado porque é un proxy aberto.\nPor favor, contacte co seu fornecedor de acceso á Internet ou co seu soporte técnico e informe deste grave problema de seguridade.",
        "sorbsreason": "O seu enderezo IP está rexistrado como un proxy aberto na lista DNSBL usada por {{SITENAME}}.",
        "tags-edit-logentry-submit": "Aplicar os cambios a {{PLURAL:$1|esta entrada do rexistro|$1 entradas do rexistro}}",
        "tags-edit-success": "Aplicáronse os cambios.",
        "tags-edit-failure": "Non se puideron aplicar os cambios:\n$1",
-       "tags-edit-nooldid-title": "Revisión inválida",
+       "tags-edit-nooldid-title": "Revisión non válida",
        "tags-edit-nooldid-text": "Non indicou a revisión sobre a que realizar esta función, ou a revisión especificada non existe.",
        "tags-edit-none-selected": "Por favor, seleccione polo menos unha etiqueta que engadir ou quitar.",
        "comparepages": "Comparar páxinas",
index 3ce34b0..493e033 100644 (file)
@@ -26,7 +26,6 @@
        "underline-always": "Soddankal",
        "underline-never": "Kednach na",
        "underline-default": "Skin vo browsera pormonnem",
-       "editfont-default": "Browsera pormonnem",
        "sunday": "Aitar",
        "monday": "Somar",
        "tuesday": "Mongllar",
        "mytalk": "Bhasabhas",
        "navigation": "Dixa-niontronn",
        "and": "&#32;ani",
-       "qbfind": "Sod",
-       "qbbrowse": "Bhovndi mar",
-       "qbedit": "Bodol",
-       "qbpageoptions": "Hem pan",
-       "qbmyoptions": "Mhoji panam",
        "faq": "Porot porot vicharlele prosn",
-       "faqpage": "Project:Porot porot vicharlele prosn",
        "actions": "Kornnio",
        "namespaces": "Nanvthollam",
        "variants": "Dusre",
        "edit-local": "Thollavem vornon bodol",
        "create": "Roch",
        "create-local": "Thollavem vornon zod",
-       "editthispage": "Hem pan bodol",
-       "create-this-page": "Ho pan roch",
        "delete": "Kadun udoi",
-       "deletethispage": "Hem pan kad",
-       "undeletethispage": "Hem pan punorsthapit kor",
        "undelete_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} portun had",
        "viewdeleted_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} dakhoi",
        "protect": "Rakh",
        "protect_change": "bodol",
-       "protectthispage": "Hem pan rakh",
        "unprotect": "Surokxechem sthor bodol",
-       "unprotectthispage": "Hem panachem surokxechem sthor bodol",
        "newpage": "Novem pan",
-       "talkpage": "Hea panachem bhasabhas kor",
        "talkpagelinktext": "Bhasabhas",
        "specialpage": "Vixex pan",
        "personaltools": "Khasgi avtam",
-       "articlepage": "Vixoi sombondhi pan poloi",
        "talk": "Bhasabhas",
        "views": "Drishya",
        "toolbox": "Avtam",
-       "userpage": "Vangddiacho pan poloi",
-       "projectpage": "Prokolpachem pan poloi",
        "imagepage": "Imazichem pan poloi",
        "mediawikipage": "Sondexachem pan polloi",
        "templatepage": "Sanchechem pan polloi",
        "hiddencategories": "Hem pan {{PLURAL:$1|1 lipoilelea vorgacho vangddi|$1 lipoileleam vorgancho vangddi}}:",
        "permissionserrorstext-withaction": "$2, hem korpak tuka porvangi na, {{PLURAL:$1|hea karnnak lagon|hea karnnank lagun}}:",
        "recreate-moveddeleted-warn": "<strong>Xittkavnni: Tum ek pan porot rochtai jem fattim kadun udoilelem.<strong>\n\nPanacho sudar korop sarkem zalear dhean di.\nPan kadoupachem ani halovpachem sotr, sovloti khatir hangasor dilelem asa:",
-       "moveddeleted-notice": "Hem pan kadun udoilelem asa.\nPanachea kadun udounechi ani hallovnechi sotr sondorba khatir sokoil dilea.",
+       "moveddeleted-notice": "Hem pan kadun udoilelem asa.\nPanachea kadun udounechi, rakhpachi, ani hallovnechi sotr sondorba khatir sokoil dilea.",
        "content-model-wikitext": "wikimozkur",
        "content-model-text": "Sado mozkur",
        "post-expand-template-inclusion-warning": "'''Chotrai:''' Sacho zoddpacho akar chod vhodlem asa.\nThodde sache zoddchenant",
        "imagelinks": "Failicho vapor",
        "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hea failik {{PLURAL:$1|zoddtta|zoddttat}}",
        "nolinkstoimage": "Hea failik zoddpi panam nant",
-       "sharedupload-desc-here": "Hi fail $1, hachi ani dusreo projectanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
+       "sharedupload-desc-here": "Hi fail $1, hachi ani dusrea prokolpanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
        "upload-disallowed-here": "Tu hea faili voir borounk xokonai",
        "filedelete-otherreason": "Dusrem/aniki karon:",
        "randompage": "Khoincheim adlem modlem pan",
index a3173ea..71e1c0d 100644 (file)
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
        "recentchanges-submit": "બતાવો",
        "rcfilters-legend-heading": "<strong>સંક્ષેપોની યાદી:</strong>",
-       "rcfilters-other-review-tools": "<strong>અન્ય ચકાસણી સાધનો</strong>",
+       "rcfilters-other-review-tools": "અન્ય ચકાસણી સાધનો",
        "rcfilters-activefilters": "સક્રિય ગાળકો",
        "rcfilters-limit-title": "દર્શાવવાના ફેરફારો",
        "rcfilters-limit-shownum": "છેલ્લા {{PLURAL:$1|ફેરફાર|$1 ફેરફારો}} દર્શાવો",
index bde25c2..c691277 100644 (file)
        "anonpreviewwarning": "<em>אתם לא מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.</em>",
        "missingsummary": "<strong>תזכורת:</strong> לא הזנת תקציר עריכה.\nלחיצה חוזרת על הכפתור \"$1\" תגרום לעריכה שלך להישמר בלעדיו.",
        "selfredirect": "<strong>אזהרה:</strong> ניסית ליצור הפניה מדף זה לעצמו.\nאולי כתבת יעד שגוי להפניה, ואולי ערכת את הדף הלא־נכון.\nלחיצה חוזרת על הכפתור \"$1\" תגרום להפניה להיווצר בכל זאת.",
-       "missingcommenttext": "×\99ש ×\9c×\94ק×\9c×\99×\93 ×\90ת ×\94×\94×\95×\93×¢×\94 ×\9c×\9e×\98ה.",
+       "missingcommenttext": "×\99ש ×\9c×\94ק×\9c×\99×\93 ×\94ערה.",
        "missingcommentheader": "<strong>תזכורת:</strong> לא הזנת נושא להודעה זו.\nלחיצה חוזרת על הכפתור \"$1\" תגרום לעריכה שלך להישמר ללא נושא.",
        "summary-preview": "תצוגה מקדימה של תקציר העריכה:",
        "subject-preview": "תצוגה מקדימה של הנושא:",
        "searchall": "הכול",
        "showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
        "showingresultsinrange": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו־<strong>$3</strong>:",
-       "search-showingresults": "{{PLURAL:$4|תוצאה <strong>$1</strong> מתוך <strong>$3</strong>|תוצאות <strong>$1 - $2</strong> מתוך <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|תוצאה <strong>$1</strong> מתוך <strong>$3</strong>|תוצאות <strong>$1  $2</strong> מתוך <strong>$3</strong>}}",
        "search-nonefound": "לא נמצאו תוצאות המתאימות לחיפוש.",
        "search-nonefound-thiswiki": "לא נמצאו תוצאות המתאימות לחיפוש באתר זה.",
        "powersearch-legend": "חיפוש מתקדם",
        "timezoneregion-europe": "אירופה",
        "timezoneregion-indian": "האוקיינוס ההודי",
        "timezoneregion-pacific": "האוקיינוס השקט",
-       "allowemail": "לאפשר למשתמשים לשלוח לי דואר אלקטרוני",
+       "allowemail": "×\9c×\90פשר ×\9c×\9eשת×\9eש×\99×\9d ×\90×\97ר×\99×\9d ×\9cש×\9c×\95×\97 ×\9c×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99",
        "email-blacklist-label": "חסימת המשתמשים הבאים משליחת דואר אלקטרוני אליי:",
        "prefs-searchoptions": "חיפוש",
        "prefs-namespaces": "מרחבי שם",
        "recentchanges-legend": "אפשרויות בשינויים האחרונים",
        "recentchanges-summary": "ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.",
        "recentchanges-noresult": "לא היו בתקופה זו שינויים המתאימים לאפשרויות שנבחרו.",
+       "recentchanges-timeout": "נגמר זמן ההמתנה לקבלת תוצאות החיפוש. ניתן לנסות פרמטרים אחרים לחיפוש.",
+       "recentchanges-network": "בשל תקלה טכנית, לא ניתן היה לטעון את התוצאות. אפשר לנסות לרענן את הדף.",
        "recentchanges-feed-description": "ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.",
        "recentchanges-label-newpage": "בעריכה זו נוצר דף חדש",
        "recentchanges-label-minor": "זוהי עריכה משנית",
        "recentchanges-submit": "הצגה",
        "rcfilters-tag-remove": "הסרת \"$1\"",
        "rcfilters-legend-heading": "<strong>רשימת קיצורים:</strong>",
-       "rcfilters-other-review-tools": "<strong>כלי סקירה אחרים</strong>",
+       "rcfilters-other-review-tools": "כלי סקירה אחרים",
        "rcfilters-group-results-by-page": "חלוקה התוצאות לקבוצות לפי דף",
        "rcfilters-grouping-title": "חלוקה לקבוצות",
        "rcfilters-activefilters": "מסננים פעילים",
        "rcfilters-days-show-hours": "{{PLURAL:$1|שעה אחת|שעתיים|$1 שעות}}",
        "rcfilters-highlighted-filters-list": "מובלט: $1",
        "rcfilters-quickfilters": "מסננים שמורים",
-       "rcfilters-quickfilters-placeholder-title": "×\98ר×\9d × ×©×\9eר×\95 ×§×\99ש×\95רים",
+       "rcfilters-quickfilters-placeholder-title": "×\98ר×\9d × ×©×\9eר×\95 ×\9eסננים",
        "rcfilters-quickfilters-placeholder-description": "כדי לשמור את הגדרות המסננים שלך ולהשתמש בהן מאוחר יותר, יש ללחוץ על סמל הסימנייה באזור המסנן הפעיל להלן.",
        "rcfilters-savedqueries-defaultlabel": "מסננים שמורים",
        "rcfilters-savedqueries-rename": "שינוי שם",
        "rcfilters-savedqueries-apply-and-setdefault-label": "יצירת מסנן התחלתי",
        "rcfilters-savedqueries-cancel-label": "ביטול",
        "rcfilters-savedqueries-add-new-title": "שמירת הגדרות המסננים הנוכחיות",
+       "rcfilters-savedqueries-already-saved": "מסננים אלה כבר נשמרו. באפשרותך לשנות את ההגדרות שלך כדי ליצור ולשמור מסנן חדש.",
        "rcfilters-restore-default-filters": "שחזור למסנני ברירת המחדל",
        "rcfilters-clear-all-filters": "מחיקת כל המסננים",
        "rcfilters-show-new-changes": "הצגת השינויים החדשים ביותר",
-       "rcfilters-search-placeholder": "סינון שינויים אחרונים (עיינו או התחילו להקליד)",
+       "rcfilters-search-placeholder": "סינון שינויים (ניתן להשתמש בתפריט או לחפש שם מסנן)",
        "rcfilters-invalid-filter": "מסנן בלתי־תקין",
        "rcfilters-empty-filter": "אין מסננים פעילים. כל התרומות מוצגות.",
        "rcfilters-filterlist-title": "מסננים",
        "rcfilters-filter-user-experience-level-unregistered-label": "לא רשומים",
        "rcfilters-filter-user-experience-level-unregistered-description": "עורכים שלא נכנסו לחשבון.",
        "rcfilters-filter-user-experience-level-newcomer-label": "חדשים",
-       "rcfilters-filter-user-experience-level-newcomer-description": "×¢×\95ר×\9b×\99×\9d ×¨×©×\95×\9e×\99×\9d ×¢×\9d ×¤×\97×\95ת ×\9eÖ¾10 ×¢×¨×\99×\9b×\95ת ×\95×\9eÖ¾4 ימים של פעילות.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "×¢×\95ר×\9b×\99×\9d ×¨×©×\95×\9e×\99×\9d ×¢×\9d ×¤×\97×\95ת ×\9eÖ¾10 ×¢×¨×\99×\9b×\95ת ×\90×\95 4 ימים של פעילות.",
        "rcfilters-filter-user-experience-level-learner-label": "לומדים",
        "rcfilters-filter-user-experience-level-learner-description": "עורכים רשומים שרמת הניסיון שלהם היא בין \"חדשים\" לבין \"מנוסים\".",
        "rcfilters-filter-user-experience-level-experienced-label": "משתמשים מנוסים",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:לא</strong> $1",
        "rcfilters-exclude-button-off": "להחריג את המסומנים",
        "rcfilters-exclude-button-on": "ללא המסומנים",
-       "rcfilters-view-advanced-filters-label": "מסננים מתקדמים",
        "rcfilters-view-tags": "עריכות מתויגות",
        "rcfilters-view-namespaces-tooltip": "סינון התוצאות לפי מרחב שם",
        "rcfilters-view-tags-tooltip": "סינון התוצאות לפי תגיות עריכה",
        "uploaded-script-svg": "נמצא אלמנט שאפשר לכתוב בו תסריט \"$1\" בקובץ ה־SVG שהועלה.",
        "uploaded-hostile-svg": "נמצא CSS בלתי־מאובטח באלמנט style בקובץ ה־SVG שהועלה.",
        "uploaded-event-handler-on-svg": "אסור להגדיר מאפייני טיפול באירועים <code dir=\"ltr\">$1=\"$2\"</code> בקובצי SVG.",
-       "uploaded-href-attribute-svg": "×\9c×\9e×\90פ×\99×\99× ×\99 href ×\91ק×\95×\91צ×\99 SVG ×\9e×\95תר ×\9cקשר ×¨×§ ×\9c×\99×¢×\93×\99 http ×\90×\95 https, ×\95נמצא <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "ר×\9b×\99×\91×\99 <a> ×\99×\9b×\95×\9c×\99×\9d ×\9cקשר (href) ×¨×§ ×\9c×\99×¢×\93×\99 data:â\80\8e (ק×\95×\91×¥ ×\9e×\95×\98×\9e×¢), http://â\80\8e ×\90×\95 https://â\80\8e, ×\90×\95 ×\9eק×\98×¢ (×¢×\9d #, ×\91×\90×\95ת×\95 ×\9eס×\9e×\9a). ×\91ר×\9b×\99×\91×\99×\9d ×\90×\97ר×\99×\9d, ×\9b×\92×\95×\9f <image>, ×\9e×\95תר×\99×\9d ×¨×§ ×\99×¢×\93×\99 data:â\80\8e ×\95×\9eק×\98×¢. ×\91×\90פשר×\95ת×\9a ×\9cנס×\95ת ×\9c×\94×\98×\9e×\99×¢ ×ª×\9e×\95× ×\95ת ×\91עת ×\99×\99צ×\95×\90 ×§×\95×\91×¥ ×\94Ö¾SVG ×©×\9c×\9aנמצא <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "נמצא href לנתונים לא מאובטחים <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploaded-animate-svg": "נמצא תג \"animate\" שיכול לשנות href באמצעות מאפיין \"from\"  בצורת <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploaded-setting-event-handler-svg": "הגדרת מאפייני טיפול באירועים חסומה, נמצא <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploadstash-refresh": "רענון רשימת הקבצים",
        "uploadstash-thumbnail": "הצגת תמונה ממוזערת",
        "uploadstash-exception": "לא ניתן לאחסן את ההעלאה בסליק ($1): \"$2\".",
+       "uploadstash-bad-path": "הנתיב אינו קיים.",
+       "uploadstash-bad-path-invalid": "הנתיב אינו תקין.",
+       "uploadstash-bad-path-unknown-type": "הסוג \"$1\" אינו מוכר.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "שם הקובץ הממוזער אינו מוכר.",
+       "uploadstash-bad-path-no-handler": "לא נמצא רכיב המטפל ב־MIME מסוג $1 המתאים לקובץ $2.",
+       "uploadstash-bad-path-bad-format": "המפתח \"$1\" אינו בפורמט המתאים.",
+       "uploadstash-file-not-found": "המפתח \"$1\" לא נמצא בסליק הקבצים.",
+       "uploadstash-file-not-found-no-thumb": "לא ניתן לייצר קובץ ממוזער.",
+       "uploadstash-file-not-found-no-local-path": "אין נתיב מקומי לפריט בגודל שונה.",
+       "uploadstash-file-not-found-no-object": "לא ניתן היה לייצר אובייקט של קובץ מקומי עבור הקובץ הממוזער.",
+       "uploadstash-file-not-found-no-remote-thumb": "מציאת הקובץ הממוזער נכשלה: $1\nכתובת ה־URL היא $2",
+       "uploadstash-file-not-found-missing-content-type": "חסרה כותרת Content-type.",
+       "uploadstash-file-not-found-not-exists": "לא ניתן היה למצוא את הנתיב, או שהנתיב אינו קובץ פשוט.",
+       "uploadstash-file-too-large": "לא ניתן להעביר קובץ שגודלו מעל {{PLURAL:$1|בית אחד|$1 בתים}}.",
+       "uploadstash-not-logged-in": "המשתמש אינו מחובר לחשבון, אך קבצים חייבים להשתייך למשתמשים.",
+       "uploadstash-wrong-owner": "הקובץ ($1) אינו שייך למשתמש הנוכחי.",
+       "uploadstash-no-such-key": "אין מפתח כזה ($1), לא ניתן להסירו.",
+       "uploadstash-no-extension": "הסיומת ריקה.",
+       "uploadstash-zero-length": "הקובץ באורך אפס.",
        "invalid-chunk-offset": "היסט גוש לא תקין",
        "img-auth-accessdenied": "הגישה נדחתה",
        "img-auth-nopathinfo": "PATH_INFO חסר.\nהשרת אינו מוגדר להעברת מידע זה.\nייתכן שהוא מבוסס על CGI ולכן אינו יכול לתמוך ב־img_auth.\nראו https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 6ab714d..0049864 100644 (file)
        "recentchanges-legend": "हाल के परिवर्तन संबंधी विकल्प",
        "recentchanges-summary": "इस विकि पर हाल में हुए बदलाव इस पन्ने पर देखे जा सकते हैं।",
        "recentchanges-noresult": "इस अवधि के दौरान इन मापदंडों को पूर्ण करते कोई परिवर्तन नहीं किए गए हैं।",
+       "recentchanges-timeout": "इस खोज का समय समाप्त हो गया है आप विभिन्न खोज मापदंडों की कोशिश करना चाहेंगे।",
        "recentchanges-feed-description": "इस विकि पर हाल में हुए बदलाव इस फ़ीड में देखे जा सकते हैं।",
        "recentchanges-label-newpage": "इस संपादन से नया पृष्ठ बना",
        "recentchanges-label-minor": "यह एक छोटा सम्पादन है",
        "recentchanges-submit": "दिखाएँ",
        "rcfilters-tag-remove": "निकालें$1",
        "rcfilters-legend-heading": "<strong>संकेतों की सूची:</strong>",
-       "rcfilters-other-review-tools": "<strong>दूसरे समीक्षा उपकरण</strong>",
+       "rcfilters-other-review-tools": "दूसरे समीक्षा उपकरण",
        "rcfilters-group-results-by-page": "पेज द्वारा समूह परिणाम",
        "rcfilters-grouping-title": "समूहीकरण",
        "rcfilters-activefilters": "सक्रिय फिल्टर",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|घंटा|घंटे}}",
        "rcfilters-highlighted-filters-list": "पर प्रकाश डाला:$1",
        "rcfilters-quickfilters": "सुरक्षित फ़िल्टर",
-       "rcfilters-quickfilters-placeholder-title": "à¤\95à¥\8bà¤\88 à¤\95ड़à¥\80 à¤\85भà¥\80 à¤¤à¤\95 à¤¸à¤¹à¥\87à¤\9cा à¤¨à¤¹à¥\80à¤\82 à¤\97या",
+       "rcfilters-quickfilters-placeholder-title": "à¤\95à¥\8bà¤\88 à¤«à¤¼à¤¿à¤²à¥\8dà¤\9fर à¤\85भà¥\80 à¤¤à¤\95 à¤¸à¤¹à¥\87à¤\9cà¥\87 à¤¨à¤¹à¥\80à¤\82 à¤\97à¤\8f",
        "rcfilters-quickfilters-placeholder-description": "अपने फ़िल्टर सेटिंग को सहेजने और बाद में उपयोग करने के लिए नीचे दिये बूकमार्क छवि पर क्लिक करें।",
        "rcfilters-savedqueries-defaultlabel": "सहेजे फ़िल्टर",
        "rcfilters-savedqueries-rename": "नाम बदलें",
        "rcfilters-filter-user-experience-level-unregistered-label": "अपंजीकृत",
        "rcfilters-filter-user-experience-level-unregistered-description": "संपादक जो लॉग-इन नहीं हैं।",
        "rcfilters-filter-user-experience-level-newcomer-label": "अपरिचित",
-       "rcfilters-filter-user-experience-level-newcomer-description": "4 दिनों की गतिविधि और 10 सम्पादन से कम वाले पंजीकृत संपादक।",
+       "rcfilters-filter-user-experience-level-newcomer-description": "पंजीकृत संपादकों, जिनके कम से कम 10 संपादन या 4 दिन की गतिविधि हो।",
        "rcfilters-filter-user-experience-level-learner-label": "शिक्षार्थियों",
        "rcfilters-filter-user-experience-level-learner-description": "पंजीकृत संपादक जिनका अनुभव \"नये संपादक\" और \"अनुभवी संपादक\" के बीच का है।",
        "rcfilters-filter-user-experience-level-experienced-label": "अनुभवी सदस्य",
        "rcfilters-tag-prefix-namespace-inverted": " $1 <strong>:नहीं</strong>",
        "rcfilters-exclude-button-off": "चयनित निकालें",
        "rcfilters-exclude-button-on": "चयनित को छोड़कर",
-       "rcfilters-view-advanced-filters-label": "उन्नत फ़िल्टर",
        "rcfilters-view-tags": "टैग वाले सम्पादन",
        "rcfilters-view-namespaces-tooltip": "नाम स्थान द्वारा फिल्टर परिणाम",
        "rcfilters-view-tags-tooltip": "संपादन टैग का उपयोग करके फ़िल्टर परिणाम",
        "rcfilters-view-return-to-default-tooltip": "मुख्य फ़िल्टर मेनू पर लौटें",
+       "rcfilters-view-tags-help-icon-tooltip": "टैग किए गए संपादन के बारे में और जानें",
        "rcfilters-liveupdates-button": "जीवंत अद्यतन",
        "rcfilters-liveupdates-button-title-on": "जीवंत अद्यतन बंद करें",
        "rcfilters-liveupdates-button-title-off": "नये परिवर्तन प्रदर्शित करें जैसे ही वे घटित होते हैं",
        "ipb_blocked_as_range": "गलती: $1 यह आइपी सीधे बाधित नहीं है और अबाध्य नहीं किया जा सकता।\nफिर भी, $2 प्रकार को बाध्य किया जा सकता है, जिनको अबाध्य किया जा सकता है।",
        "ip_range_invalid": "गलत आईपी रेंज",
        "ip_range_toolarge": "/$1 से अधिक बड़े रेञ्ज ब्लॉकों की अनुमति नहीं है।",
+       "ip_range_exceeded": "आईपी श्रेणी इसकी अधिकतम सीमा से अधिक है अनुमत रेंज: / $1",
+       "ip_range_toolow": "आईपी रेंज प्रभावी रूप से अनुमति नहीं है",
        "proxyblocker": "प्रॉक्सी ब्लॉकर",
        "proxyblockreason": "आपका IP पता बाधित किया जा चुका है क्योंकि यह एक मुक्त प्रतिनिधि है।\nकृपया आप अपने इंटरनेट सेवा प्रदान करने वाले से या तकनीकी सहायक से सम्पर्क करें अथवा उन्हें इस भयावह सुरक्षा समस्या के बारे में सूचित करें।",
        "sorbsreason": "{{SITENAME}} द्वारा इस्तेमालमें लाये जाने वाले DNSBL में आपके आईपी एड्रेसको ओपन प्रॉक्सीमें दर्शाया गया हैं।",
index b25c266..4c45688 100644 (file)
@@ -68,7 +68,6 @@
        "underline-never": "Kabhi nai",
        "underline-default": "Skin nai to browser ke default",
        "editfont-style": "Badlao waala jagah ke font:",
-       "editfont-default": "Browser ke sadharan setting",
        "editfont-monospace": "Font jiske sab akcchar ke ekke chaurrai hae",
        "editfont-sansserif": "Sans-serif font",
        "editfont-serif": "Serif font",
        "explainconflict": "Aap ke ii panna ke badle ke suruu kare ke baad, aur koi ii panna ke badal diis hai.\nUppar ke text area panna ke text jaise abhi hai ke dekhawa jae hai.\nAap ke badlao ke lower text area me dekawa jae hai.\nAap ke aapan badlao ke existing text me merge kare ke parri.\n'''Khali''' text in the upper text area  ke save karaa jai jab aap \"$1\" ke press karega.",
        "yourtext": "Aap ke text",
        "storedversion": "Bachawa gais version",
-       "nonunicodebrowser": "'''CHETAUNI: Aap ke browser unicode ke nai maane hae.\nEk workaround uu jagah hae jahan pe aap thik se panna ke badle sakta hae: non-ASCII akchhar edit box me hexadecimal codes dekhai.'''",
        "editingold": "'''WARNING: Aap ii panna ke purana version ke badalata hae.'''\nAgar aap iske save kar lia tab last badlao se abi tak ke changes will be lost.",
        "yourdiff": "Antar",
        "copyrightwarning": "Dhyann me rakho ki {{SITENAME}} ke sab yog daan $2 ($1 ke dekho aur kaankari khatir) ke niche dewa gae hai. Agar aap nai mangtaa ki aap ke likha gae koi chij ke duusra logan badle tab hain par nahii likho.<br />\nAap ii bhi waada kartaa hai ki iske aap likha hai aur koi duusra jagah se copy nahi karaa hai.\n'''COPYRIGHT CHIJ KE BINA ANUMATI KE HIAN PAR NAHI SUBMIT KARNA!'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
        "recentchanges-submit": "Dekhao",
        "rcfilters-legend-heading": "<strong>Abbreviations ke suchi:</strong>",
-       "rcfilters-other-review-tools": "<strong>Duusra review kare waala tool:</strong>",
+       "rcfilters-other-review-tools": "Duusra review kare waala tool:",
        "rcfilters-activefilters": "Active filters",
        "rcfilters-advancedfilters": "Advanced filters",
        "rcfilters-limit-title": "Jon badlao ke dekhae ke hai",
        "block": "Sadasya ke roko",
        "unblock": "Sadasya ke rukawat k khalaas karo",
        "blockip": "{{GENDER:$1|sadasya}} ke roko",
-       "blockip-legend": "Sadasya ke roko",
        "blockiptext": "Niche ke form ke use kar ke koi khaas IP address nai to username ke write access ke roko.\nIske khaali vandalism ke roke ke khatir kaam me laae ke chaahi [[{{MediaWiki:Policy-url}}|policy]] ke niche.\nFill in a specific reason below (for example, citing particular pages that were vandalized).\nYou can block IP address ranges using the [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.",
        "ipaddressorusername": "IP Address nai to username:",
        "ipbexpiry": "Expiry:",
        "compare-invalid-title": "Jon title ke aap specify karaa hae, valid nai hae",
        "compare-title-not-exists": "Chuna gais title abhi nai banawa gais hai.",
        "compare-revision-not-exists": "Chuna gais revision abhi nai banawa gais hai.",
+       "diff-form": "ek '''form'''",
        "dberr-problems": "Maaf karna! Ii site technical difficulties experience kare hae.",
        "dberr-again": "Thora deri wait kar ke fir se load kare ke try karo",
        "dberr-info": "(Cannot access the database: $1)",
index a9576e8..9ab3efa 100644 (file)
        "go": "Kreni",
        "searcharticle": "Kreni",
        "history": "Povijest stranice",
-       "history_short": "Stare izmjene",
-       "history_small": "stare izmjene",
+       "history_short": "Povijest",
+       "history_small": "povijest",
        "updatedmarker": "obnovljeno od posljednjeg posjeta",
        "printableversion": "Inačica za ispis",
        "permalink": "Trajna poveznica",
        "nosuchusershort": "Ne postoji suradnik s imenom \"$1\". Provjerite Vaš unos.",
        "nouserspecified": "Molimo navedite suradničko ime.",
        "login-userblocked": "Ovaj je suradnik blokiran. Prijava nije dopuštena.",
-       "wrongpassword": "Zaporka koju ste unijeli nije ispravna. Pokušajte ponovno.",
+       "wrongpassword": "Zaporka koju ste unijeli nije ispravna. Molimo Vas, pokušajte ponovo.",
        "wrongpasswordempty": "Niste unijeli zaporku. Pokušajte ponovno.",
        "passwordtooshort": "Zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
        "password-name-match": "Vaša zaporka mora biti različita od Vašeg suradničkog imena.",
        "permissionserrorstext": "Nemate ovlasti za tu radnju iz sljedećih {{PLURAL:$1|razlog|razloga}}:",
        "permissionserrorstext-withaction": "Nemate dopuštenje za $2, iz {{PLURAL:$1|navedenog|navedenih}} razloga:",
        "recreate-moveddeleted-warn": "<strong>Upozorenje: Ponovo stvarate stranicu koja je prethodno bila izbrisana.</strong>\n\nRazmotrite je li prikladno nastaviti s uređivanje ove stranice.\nZa Vašu informaciju slijedi evidencija brisanja i premještanja ove stranice:",
-       "moveddeleted-notice": "Ova stranica je bila izbrisana.\nEvidencija brisanja i evidencija premještanja za ovu stranicu je prikazana niže.",
+       "moveddeleted-notice": "Ova je stranica izbrisana.\nEvidencije brisanja, zaštićivanja i premještanja za ovu stranicu prikazane su niže za uputu.",
        "moveddeleted-notice-recent": "Žao nam je, ova stranica je izbrisana u prošla 24 sata. \nNiže je navedena evidencija brisanja i premještanja.",
        "log-fulllog": "Prikaži cijelu evidenciju",
        "edit-hook-aborted": "Uređivanje prekinuto kukom.\nRazlog nije ponuđen.",
        "undo-summary-username-hidden": "Uklanjanje izmjene $1 suradnika skrivenoga suradničkoga imena",
        "cantcreateaccount-text": "Otvaranje suradničkog računa ove IP adrese ('''$1''') blokirao/la je [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je ''$2''",
        "viewpagelogs": "Vidi evidencije za ovu stranicu",
-       "nohistory": "Ova stranica nema starijih izmjena.",
+       "nohistory": "Ne postoji povijest izmjena za ovu stranicu.",
        "currentrev": "Trenutačna inačica",
        "currentrev-asof": "Trenutačna izmjena od $1",
        "revisionasof": "Inačica od $1",
        "history-feed-item-nocomment": "$1 u (test) $2",
        "history-feed-empty": "Tražena stranica ne postoji.\nStranica je vjerojatno prethodno izbrisana s wikija, ili preimenovana.\nPokušajte [[Special:Search|pretražiti]] važnije nove stranice na wikiju.",
        "history-edit-tags": "Uredi oznake označenih izmjena",
-       "rev-deleted-comment": "(komentar uklonjen)",
+       "rev-deleted-comment": "(sažetak izmjene uklonjen)",
        "rev-deleted-user": "(suradničko ime uklonjeno)",
        "rev-deleted-event": "(zapis uklonjen)",
        "rev-deleted-user-contribs": "[suradničko ime ili IP adresa uklonjeni - izmjena skrivena u doprinosima]",
        "showhideselectedversions": "Otkrij/sakrij odabrane izmjene",
        "editundo": "ukloni ovu izmjenu",
        "diff-empty": "Nema razlike inačica",
-       "diff-multi-sameuser": "{{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} istog suradnika",
+       "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} istog suradnika)",
        "diff-multi-otherusers": "({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} {{PLURAL:$2|jednog|$2}} suradnika)",
        "diff-multi-manyusers": "({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} više od {{PLURAL:$2|jednog|$2|$2}} suradnika)",
        "difference-missing-revision": "{{PLURAL:$2|Uređivanje|$2 uređivanja}} sljedeće šifre ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "search-redirect": "(preusmjeravanje s $1)",
        "search-section": "(odlomak $1)",
        "search-category": "(kategorija $1)",
+       "search-file-match": "(podudara se sa sadržajem datoteke)",
        "search-suggest": "Mislili ste: $1",
        "search-rewritten": "Prikazuju se rezultati za $1. Umjesto toga pretraži $2.",
        "search-interwiki-caption": "Rezultati sa sestrinskih projekata",
        "prefs-email": "Mogućnosti e-maila",
        "prefs-rendering": "Izgled",
        "saveprefs": "Spremi",
-       "restoreprefs": "Vrati sve postavke na prvotno zadane",
+       "restoreprefs": "Vrati sve postavke na prvobitno zadane (u svim odjeljcima)",
        "prefs-editing": "Uređivanje",
        "searchresultshead": "Prikaz rezultata pretrage",
        "stub-threshold": "Prag za formatiranje poveznice na mrve ($1):",
        "email-blacklist-label": "Zabrani sljedećim suradnicima da mi šalju e-poruke:",
        "prefs-searchoptions": "Način traženja",
        "prefs-namespaces": "Imenski prostori",
-       "default": "prvotno",
+       "default": "predodređeno",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođen CSS",
        "prefs-custom-js": "Prilagođen JS",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Prikaži",
        "rcfilters-legend-heading": "<strong>Popis kratica:</strong>",
-       "rcfilters-other-review-tools": "<strong>Ostali alati za pregledavanje:</strong>",
+       "rcfilters-other-review-tools": "Ostali alati za pregledavanje:",
        "rcfilters-group-results-by-page": "Grupiranje rezultata po stranici",
        "rcfilters-grouping-title": "Grupiranje",
        "rcfilters-activefilters": "Aktivni filtri",
        "rcfilters-savedqueries-add-new-title": "Spremi trenutačne postavke filtra",
        "rcfilters-restore-default-filters": "Vrati zadane filtre",
        "rcfilters-clear-all-filters": "Očisti sve filtre",
-       "rcfilters-show-new-changes": "Prikaži najnovije promjene",
+       "rcfilters-show-new-changes": "Vidi najnovije izmjene",
        "rcfilters-search-placeholder": "Filtriraj nedavne promjene (pretražite ili počnite unositi)",
        "rcfilters-invalid-filter": "Filter nije valjan",
        "rcfilters-empty-filter": "Nema aktivnih filtra. Prikazani su svi doprinosi.",
        "rcfilters-filter-watchlist-notwatched-label": "Izvan popisa praćenja",
        "rcfilters-filter-watchlist-notwatched-description": "Sve izmjene na stranicama osim onih na popisu praćenja.",
        "rcfilters-filtergroup-changetype": "Vrste promjena",
-       "rcfilters-filter-pageedits-label": "Uređivanja stranice",
+       "rcfilters-filter-pageedits-label": "Uređivanja stranica",
        "rcfilters-filter-pageedits-description": "Uređivanja wikisadržaja, rasprave, opisi kategorija...",
        "rcfilters-filter-newpages-label": "Stvaranje stranica",
        "rcfilters-filter-newpages-description": "Uređivanja kojima su stvorene nove stranice.",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
        "rcfilters-exclude-button-off": "Izuzmi izabrane",
        "rcfilters-exclude-button-on": "Izuzimanje označenoga",
-       "rcfilters-view-advanced-filters-label": "Napredni filtri",
        "rcfilters-view-tags": "Označena uređivanja",
        "rcfilters-view-namespaces-tooltip": "Filtriranje prema imenskom prostoru",
        "rcfilters-view-tags-tooltip": "Filtriranje rezultata po oznakama uređivanja",
        "rcfilters-preference-label": "Skrij poboljšanu inačicu nedavnih promjena",
        "rcfilters-preference-help": "Vraća natrag stanje prije redizajna sučelja 2017., te svih oruđa dodanih tada i poslije toga.",
-       "rcnotefrom": "Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).",
+       "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (prikazano ih do <strong>$1</strong>).",
        "rclistfromreset": "Vrati na zadano izbor datuma",
        "rclistfrom": "Prikaži nove promjene počevši od $3 $2",
        "rcshowhideminor": "$1 manje promjene",
        "statistics-files": "Postavljene datoteke",
        "statistics-edits": "Broj uređivanja od nastanka projekta {{SITENAME}}",
        "statistics-edits-average": "Prosječan broj uređivanja po stranici",
-       "statistics-users": "Prijavljeni [[Special:ListUsers|suradnici]]",
+       "statistics-users": "Registrirani [[Special:ListUsers|suradnici]]",
        "statistics-users-active": "Aktivni suradnici",
        "statistics-users-active-desc": "Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}",
        "pageswithprop": "Stranice s određenim osobinama",
        "mailnologin": "Nema adrese pošiljatelja",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]\nda bi mogli slati poštu drugim suradnicima.",
        "emailuser": "Pošalji e-poruku suradnici – suradniku",
-       "emailuser-title-target": "Pošalji poruku {{GENDER:$1|suradniku|suradnici|suradniku}}",
+       "emailuser-title-target": "Pošalji e-poruku {{GENDER:$1|suradniku|suradnici}}",
        "emailuser-title-notarget": "Pošalji e-poštu suradniku",
-       "emailpagetext": "Možete koristiti ovaj obrazac za slanje elektroničke pošte {{GENDER:$1|suradniku|suradnici}}.\nE-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u \"From\" polju poruke i primatelj će Vam moći izravno odgovoriti.",
+       "emailpagetext": "Možete rabiti donji obrazac za slanje elektroničke poruke {{GENDER:$1|ovom suradniku|ovoj suradnici}}.\nAdresa e-pošte iz Vaših [[Special:Preferences|postavki]] nalazit će se u »From« polju e-poruke i {{GENDER:$1|primatelj|primateljica}} će Vam moći izravno odgovoriti.",
        "defemailsubject": "{{SITENAME}} e-mail od suradnika \"$1\"",
        "usermaildisabled": "Suradnička e-pošta je onemogućena",
        "usermaildisabledtext": "Ne možete slati e-poštu drugim suradnicima na ovom wikiju",
        "emailtarget": "Unesite suradničko ime primatelja",
        "emailusername": "Suradničko ime:",
        "emailusernamesubmit": "Pošalji",
-       "email-legend": "Pošalji elektroničku poštu drugom suradniku projekta {{SITENAME}}",
+       "email-legend": "Pošalji elektroničku poruku drugom suradniku projekta {{SITENAME}}",
        "emailfrom": "Od:",
        "emailto": "Za:",
        "emailsubject": "Tema:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi e-mailom kopiju moje poruke.",
+       "emailccme": "Pošalji mi presliku moje poruke e-poštom.",
        "emailccsubject": "Kopija Vaše poruke za $1: $2",
        "emailsent": "E-poruka je poslana!",
        "emailsenttext": "Vaša poruka je poslana.",
        "removedwatchtext-short": "Stranica \"$1\" uklonjena je s Vašeg popisa praćenja.",
        "watch": "Prati",
        "watchthispage": "Prati ovu stranicu",
-       "unwatch": "Prekini praćenje",
-       "unwatchthispage": "Prekini praćenje",
-       "notanarticle": "Nije članak",
+       "unwatch": "Prestani pratiti",
+       "unwatchthispage": "Prestani pratiti stranicu",
+       "notanarticle": "Nije stranica sa sadržajem",
        "notvisiblerev": "Izmjena je obrisana",
-       "watchlist-details": "{{PLURAL:$1|$1 stranica se nalazi|$1 stranice se nalaze|$1 stranica se nalazi}} na popisu praćenja, ne brojeći stranice za razgovor.",
+       "watchlist-details": "Na Vašem popisu praćenja imate {{PLURAL:$1|$1 stranicu|$1 stranice|$1 stranica}} (plus stranice za razgovor).",
        "wlheader-enotif": "Uključeno je izvješćivanje e-poštom.",
        "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''.",
        "wlnote": "Niže {{PLURAL:$1|0=nema ijedna izmjena načinjena|je posljednja izmjena načinjena|su <strong>$1</strong> posljednje izmjene načinjene|su <strong>$1</strong> posljednjih izmjena načinjenih}} {{PLURAL:$2|0=u zadanom roku|posljednjega sata|u posljednja <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, zaključno do $3 u $4.",
        "revertpage-nouser": "Vraćene izmjene suradnika (suradničko ime uklonjeno) na posljednju inačicu suradnika [[User:$1|$1]]",
        "rollback-success": "uklonjeno uređivanje {{GENDER:$1|suradnika|suradnice}} $1\nvraćeno na posljednju inačicu {{GENDER:$2|suradnika|suradnice}} $2.",
        "sessionfailure-title": "Prekid sesije",
-       "sessionfailure": "Uočili smo problem s Vašom prijavom. Zadnja naredba nije izvršena kako bi se izbjegla zloupotreba. Molimo Vas da se u pregledniku vratite natrag na prethodnu stranicu, ponovno je učitate i zatim pokušate opet.",
+       "sessionfailure": "Izgleda da postoji problem s uspostavom sjednice kod Vašega prijavljivanja; ta radnja otkazana je kao način sprječavanja krađe sjednice. Molimo Vas da se u pregledniku vratite natrag na prethodnu stranicu, ponovo ju učitate i zatim pokušate opet.",
        "changecontentmodel": "Promjena modela sadržaja stranice",
        "changecontentmodel-legend": "Promijeni model sadržaja",
        "changecontentmodel-title-label": "Naziv stranice",
        "unprotectedarticle": "uklonjena zaštita članka \"[[$1]]\"",
        "movedarticleprotection": "premještene postavke zaštite s \"[[$2]]\" na \"[[$1]]\"",
        "protectedarticle-comment": "{{GENDER:$2|$2 je zaštitio|$2 je zaštitila}} \"[[$1]]\"",
-       "modifiedarticleprotection-comment": "{{GENDER:$2|$2 je promijenio nivo zaštite|$2 je promijenila nivo zaštite}} za \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|$2 je promijenio razinu zaštite|$2 je promijenila razinu zaštite}} za »[[$1]]«",
        "unprotectedarticle-comment": "{{GENDER:$2|$2 je uklonio zaštitu|$2 je uklonila zaštitu}} za \"[[$1]]\"",
        "protect-title": "Zaštićujem \"$1\"",
        "protect-title-notallowed": "Vidi stupanj zaštite stranice \"$1\"",
        "whatlinkshere-hideredirs": "$1 preusmjeravanja",
        "whatlinkshere-hidetrans": "$1 transkluzije",
        "whatlinkshere-hidelinks": "$1 poveznice",
-       "whatlinkshere-hideimages": "$1 poveznice slike",
+       "whatlinkshere-hideimages": "$1 poveznica prema datoteci",
        "whatlinkshere-filters": "Filtri",
        "whatlinkshere-submit": "Idi",
        "autoblockid": "Automatsko blokiranje #$1",
        "move-watch": "Prati ovu stranicu",
        "movepagebtn": "Premjesti stranicu",
        "pagemovedsub": "Premještanje uspjelo",
-       "movepage-moved": "'''\"$1\" je premješteno na \"$2\"'''",
-       "movepage-moved-redirect": "Napravljeno je preusmjeravanje.",
-       "movepage-moved-noredirect": "Stvaranje preusmjeravanja je izostavljeno.",
+       "movepage-moved": "<strong>Stranica »$1« premještena je na »$2«</strong>.",
+       "movepage-moved-redirect": "Načinjeno je preusmjeravanje.",
+       "movepage-moved-noredirect": "Stvaranje preusmjeravanja bilo je izostavljeno.",
        "articleexists": "Stranica pod tim imenom već postoji ili ime koje ste odabrali nije u skladu s pravilima.\nMolimo odaberite drugo ime.",
        "cantmove-titleprotected": "Ne možete premjestiti ovu stranicu na ovo mjesto, jer je novi naslov zaštićen od kreiranja",
        "movetalk": "Premjesti i njezinu stranicu za razgovor ako je moguće.",
        "exif-urgency-low": "Nisko ( $1 )",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Suradnički definiran prioritet ($1)",
-       "namespacesall": "sve",
+       "namespacesall": "svi",
        "monthsall": "sve",
        "confirmemail": "Potvrdite adresu e-pošte",
        "confirmemail_noemail": "Niste unijeli važeću e-mail adresu u Vaše [[Special:Preferences|suradničke postavke]].",
        "version-libraries-description": "Opis",
        "version-libraries-authors": "Autori",
        "redirect": "Preusmjerenje prema datoteci, odnosno ID-u suradnika, stranice, izmjene ili ID-u u evidenciji",
+       "redirect-summary": "Ova posebna stranica preusmjerava na datoteku (danog imena), stranicu (dane oznake izmjene ili identifikatora stranice), suradničku stranicu (danoga numeričkog identifikatora suradnika) ili zapis u evidenciji (danog numeričkog identifikatora evidencije). Oznake se rabe na sljedeći način: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ili [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Idi",
+       "redirect-lookup": "Tip vrijednosti:",
        "redirect-value": "Vrijednost:",
        "redirect-user": "ID suradnika",
        "redirect-page": "ID stranice",
+       "redirect-revision": "Inačica stranice",
        "redirect-file": "Datotečno ime",
        "fileduplicatesearch": "Traži kopije datoteka",
        "fileduplicatesearch-summary": "Traži kopije datoteka na temelju njihove hash vrijednosti.",
        "htmlform-int-toolow": "Vrijednost koju ste naveli je ispod minimuma od $1",
        "htmlform-int-toohigh": "Vrijednost koju ste naveli je iznad maksimuma od $1",
        "htmlform-required": "Ova je vrijednost potrebna",
-       "htmlform-submit": "Pošalji",
+       "htmlform-submit": "Unesi",
        "htmlform-reset": "Poništi izmjene",
        "htmlform-selectorother-other": "Drugi",
        "htmlform-no": "Ne",
        "logentry-suppress-event-legacy": "$1 je tajno {{GENDER:$2|promijenio|promijenila}} vidljivost zapisa u evidenciji na $3",
        "logentry-suppress-revision-legacy": "$1 je tajno {{GENDER:$2|promijenio|promijenila}} vidljivost uređivanja na stranici $3",
        "revdelete-content-hid": "sadržaj je sakriven",
-       "revdelete-summary-hid": "sažetak uređivanja je sakriven",
+       "revdelete-summary-hid": "sažetak uređivanja je skriven",
        "revdelete-uname-hid": "suradničko ime skriveno",
        "revdelete-content-unhid": "sadržaj uređivanja je otkriven",
        "revdelete-summary-unhid": "sažetak uređivanja je otkriven",
        "log-action-filter-managetags-delete": "Brisanje oznake",
        "log-action-filter-managetags-activate": "Aktiviranje oznake",
        "log-action-filter-managetags-deactivate": "Deaktiviranje oznake",
-       "log-action-filter-move-move": "premještanje bez prepisivanja preko preusmjeravanja",
-       "log-action-filter-move-move_redir": "premještanje s prepisivanjem preko preusmjeravanja",
+       "log-action-filter-move-move": "Premještanje bez presnimavanja preko preusmjeravanja",
+       "log-action-filter-move-move_redir": "Premještanje s presnimavanjem preko preusmjeravanja",
        "log-action-filter-newusers-create": "stvorio anonimni suradnik",
        "log-action-filter-newusers-create2": "stvorio registrirani suradnik",
        "log-action-filter-newusers-autocreate": "automatski stvoren",
index 0f654a5..3c6e441 100644 (file)
@@ -58,7 +58,6 @@
        "underline-never": "Jamè",
        "underline-default": "Dekorasyon ou navigatè pa defo",
        "editfont-style": "Estil karaktè yo nan zòn modifikasyon:",
-       "editfont-default": "Selon paramèt navigatè",
        "editfont-monospace": "Estil karaktè Monospaced (espas fiks)",
        "editfont-sansserif": "Estil karaktè Sans-serif",
        "editfont-serif": "Estil karaktè Serif",
        "anontalk": "Diskite",
        "navigation": "Navigasyon",
        "and": "&#32;epi",
-       "qbfind": "Chache",
-       "qbbrowse": "Bouske",
-       "qbedit": "Modifye",
-       "qbpageoptions": "Paj sa a",
-       "qbmyoptions": "Paj mwen yo",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Aksyon yo",
        "namespaces": "Espas non yo",
        "variants": "Varyant yo",
        "edit-local": "Chanje on deskripsyon lokal",
        "create": "Kreye",
        "create-local": "Ajoute on deskription lokal",
-       "editthispage": "Modifye paj sa a",
-       "create-this-page": "Kreye paj sa",
        "delete": "Efase",
-       "deletethispage": "Efase paj sa",
-       "undeletethispage": "Retabli paj sa a",
        "undelete_short": "Restore {{PLURAL:$1|Yon modifikasyon| $1 modifikasyon yo}}",
        "viewdeleted_short": "Gade {{PLURAL:$1|yon modifikasyon ki te efase|$1 modifikasyon yo ki te efase}}",
        "protect": "Pwoteje",
        "protect_change": "Chanje pwoteksyon paj sa",
-       "protectthispage": "Pwoteje paj sa",
        "unprotect": "Chanje nivo pwoteksyon",
-       "unprotectthispage": "Chanje nivo pwoteksyon",
        "newpage": "Nouvo paj",
-       "talkpage": "Diskite paj sa a",
        "talkpagelinktext": "Diskite",
        "specialpage": "Paj Espesyal",
        "personaltools": "Zouti pèsonèl yo",
-       "articlepage": "Wè paj atik",
        "talk": "Diskisyon",
        "views": "Afichay yo",
        "toolbox": "Bwat zouti",
-       "userpage": "Wè paj itilizatè",
-       "projectpage": "Wè paj pwojè",
        "imagepage": "Wè paj fichye",
        "mediawikipage": "Wè paj mesaj",
        "templatepage": "Wè paj modèl",
        "explainconflict": "Yon lòt moun te anrejistre paj sa apre ou te komanse modifye l.\nW ap jwenn teks jan li ye kounye a nan zòn modifikasyon an ki anlè.\nModifikasyon ou pòte yo parèt anba.\nOu dwe fè modifikasyon ou yo nan tèks ki te deja anrejistre a ki anlè.\nSe tèks ki nan pati anlè a sèlman k ap anrejistre toutbon lè ou klike sou « $1 ».",
        "yourtext": "Tèks ou an",
        "storedversion": "Vèsyon ki anrejistre",
-       "nonunicodebrowser": "'''Atansyon: Navigatè ou an pa ka mache ak Unicode lan.'''\nNou fè yon jan pou pèmèt ou fè modifikasyon nan paj yo: karaktè ki pa nan ASCII yo pral ekri ak kòd ekzadesimal.",
        "editingold": "'''Avètisman : Ou ap edite yon vye vèsyon paj sa a.''' \nSi ou anrejistre li, tout chanjman yo depi vèsyon sa a pral pèdi.",
        "yourdiff": "Diferans",
        "copyrightwarning": "Tanpri sonje tout piblikasyon ki fèt nan {{SITENAME}} piblye anba kontra $2 an (wè $1 pou konnen plis). Si ou pa vle sa ou ekri pataje oubyen modifye, ou pa dwe soumèt yo isit.<br />\nW ap pwomèt tou ke sa w ap ekri a se ou menm menm ki ekri li oubyen ke ou kopye li de yon sous ki nan domèn piblik, ou byen you sous ki lib. '''PA ITILIZE TRAVAY KI ANBA DWA DOTÈ SI OTÈ PA T BAY OTORIZASYON LI TOUTBON !'''",
        "prevn": "{{PLURAL:$1|$1}} anvan yo",
        "nextn": "{{PLURAL:$1|$1}} swivan yo",
        "nextn-title": "Pwochen $1 rezilta",
+       "shown-title": "Montre {{PLURAL:$1|result|rezilta yo}} pou chak paj",
        "viewprevnext": "Wè ($1 {{int:pipe-separator}} $2) ($3).",
+       "searchmenu-new": "<strong>Fè nouvo paj sa a  \"[[:$1]]\" sou wiki sa a</strong> {{PLURAL:$2|0=|epi wè paj ki te jwenn ak rechèch ou an|epi wè paj ki te jwenn ak rechèch ou an.}}",
        "searchprofile-articles": "Paj kontni",
        "searchprofile-images": "Miltimedya",
        "searchprofile-everything": "Tout",
        "search-interwiki-default": "Rezilta yo pou $1 :",
        "search-interwiki-more": "(plis)",
        "searchall": "tout",
+       "search-nonefound": "Rezilta yo nan rechèch ou an pa ka jwenn",
        "powersearch-legend": "Fouye fon",
        "powersearch-ns": "Chache nan espas non sa yo:",
        "preferences": "Preferans yo",
        "undeletelink": "gade/retabli",
        "namespace": "Espas non :",
        "invert": "Envèse seleksyon an",
+       "namespace_association": "Non menm jan an",
        "blanknamespace": "(Prensipal)",
        "contributions": "Kontribisyon $1",
        "contributions-title": "Lis tout kontribisyon itilizatè ki rele $1",
        "tooltip-t-recentchangeslinked": "Lis modifikasyon ki fèk fèt pou paj yo ki genyen lyen nan paj sa a",
        "tooltip-feed-rss": "Fil RSS pou paj sa a",
        "tooltip-feed-atom": "Fil Atom pou paj sa a",
-       "tooltip-t-contributions": "Wè lis kontribisyon itilizatè sa a",
+       "tooltip-t-contributions": "Wè lis kontribisyon itilizatè sa a {{GENDER:$1|this user}}",
        "tooltip-t-emailuser": "Voye yon imèl pou itilizatè sa a",
        "tooltip-t-upload": "Chaje yon fichye",
        "tooltip-t-specialpages": "Lis tout paj espesyal yo",
        "tooltip-rollback": "« Revoke » ap anile ak yon sèl klik modifikasyon dènye kontribitè te fè sou paj sa a",
        "tooltip-undo": "« Revoke » ap efase modifikasyon sa epi li ap ouvri fenèt modifikasyon an nan mòd kote ou kapab wè sa sa ou fè a ap bay.\nLi pèmèt retabli vèsyon ki te anvan li epi ajoute yon rezon ki esplike poukisa ou revoke modifikasyon sa nan bwat rezime a.",
        "tooltip-summary": "Ekri yon ti rezime",
-       "simpleantispam-label": "Verifikasyon antispam.\n<strong>PA</strong> ranpli sa a!",
+       "simpleantispam-label": "Tcheke enfòmasyon\n<strong>PA</strong> ranpli oswa antre nan tèks!",
        "pageinfo-toolboxlink": "Enfòmasyon sou paj la",
        "previousdiff": "← Modifikasyon presedan",
        "nextdiff": "Modifikasyon swivan →",
        "metadata-help": "Fichye sa genyen enfòmasyon adisyonèl, petèt ki soti nan yon kamera dijital oubyen yon nimerizè itilize pou kreye oubyen dijitalize li.  Si fichye sa te modifye depi kreyasyon li, kèk detay ka pa menm avèk original la.",
        "metadata-expand": "Montre detay konplè yo",
        "metadata-collapse": "Kache enfòmasyon ak tout detay yo",
-       "metadata-fields": "Chan metadone EXIF ki liste nan mesaj sa a ap parèt nan paj deskripsyon imaj la lè tab metadone a ap pi piti. Lòt chan yo ap kache pa defo.\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": "Ou ka wè imaj sa a nan paj ki dekri imaj la. Gen kèk enfòmasyon ki pa toujou vizib.\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-xresolution": "Rezolisyon orizontal",
        "exif-yresolution": "Rezolisyon vètikal",
        "exif-datetime": "Dat ak lè chanjman fichye a",
        "exif-make": "Mak kamera a",
        "exif-model": "Modèl kamera a",
        "exif-exifversion": "Vèsyon EXIF",
+       "exif-colorspace": "Espas la pou koulè",
        "exif-orientation-1": "Nòmal",
        "exif-contrast-0": "Nòmal",
        "namespacesall": "Tout",
        "htmlform-reset": "Revoke chanjman yo",
        "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
        "logentry-newusers-create": "Kont itilizatè $1 a kreye",
-       "searchsuggest-search": "Chèche"
+       "searchsuggest-search": "Jwenn"
 }
index 687e4ad..7744632 100644 (file)
@@ -86,6 +86,7 @@
        "tog-watchlisthideminor": "Apró változtatások elrejtése",
        "tog-watchlisthideliu": "Bejelentkezett szerkesztők módosításainak elrejtése a figyelőlistáról",
        "tog-watchlistreloadautomatically": "A figyelőlista automatikus újratöltése bármelyik szűrő megváltoztatása esetén (JavaScript szükséges)",
+       "tog-watchlistunwatchlinks": "Közvetlen olvasottnak/olvasatlannak jelölő link hozzáadása a figyelőlista elemeihez (JavaScript szükséges)",
        "tog-watchlisthideanons": "Névtelen szerkesztések elrejtése",
        "tog-watchlisthidepatrolled": "Az ellenőrzött szerkesztések elrejtése",
        "tog-watchlisthidecategorization": "Lapok kategorizálásának elrejtése",
        "databaseerror-query": "Lekérdezés: $1",
        "databaseerror-function": "Függvény: $1",
        "databaseerror-error": "Hiba: $1",
+       "transaction-duration-limit-exceeded": "A nagy késleltetési idő elkerülése érdekében ez a művelet megszakadt, mert az írási idő ($1) meghaladta a $2 másodperces korlátot.\nAmennyiben sok elemet szeretnél egyszerre megváltoztatni, próbálkozz inkább többször kisebb műveletekkel.",
        "laggedslavemode": "'''Figyelem:''' Ez a lap nem feltétlenül tartalmazza a legfrissebb változtatásokat!",
        "readonly": "Az adatbázis le van zárva",
        "enterlockreason": "Add meg a lezárás okát, valamint egy becslést, hogy mikor lesz a lezárásnak vége",
        "yourtext": "A te változatod",
        "storedversion": "A tárolt változat",
        "editingold": "'''FIGYELMEZTETÉS: A lap egy elavult változatát szerkeszted.\nHa elmented, akkor az ezen változat után végzett összes módosítás elvész.'''",
+       "unicode-support-fail": "Úgy tűnik, hogy a böngésződ nem támogatja az Unicode-kódolást. Ez viszont szükséges a lapok szerkesztéséhez, ezért a szerkesztésed nem lett elmentve.",
        "yourdiff": "Eltérések",
        "copyrightwarning": "Vedd figyelembe, hogy a {{SITENAME}} wikin végzett összes módosítás a(z) $2 alatt jelenik meg (lásd a(z) $1 lapot a részletekért). Ha nem akarod, hogy az írásodat módosítsák vagy továbbterjesszék, akkor ne küldd be.<br />\nAzt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más szabad forrásból másoltad.\n'''NE KÜLDJ BE JOGVÉDETT MUNKÁT ENGEDÉLY NÉLKÜL!'''",
        "copyrightwarning2": "Vedd figyelembe, hogy a {{SITENAME}} wikin végzett összes módosítást szerkeszthetik, módosíthatják vagy eltávolíthatják más szerkesztők.\nHa nem akarod, hogy az írásodat módosítsák, akkor ne küldd be.<br />\nAzt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más szabad forrásból másoltad (lásd a(z) $1 lapot a részletekért).\n'''NE KÜLDJ BE JOGVÉDETT MUNKÁT ENGEDÉLY NÉLKÜL!'''",
        "prefs-editor": "Szerkesztő",
        "prefs-preview": "Előnézet",
        "prefs-advancedrc": "Haladó beállítások",
+       "prefs-opt-out": "Fejlesztések kikapcsolása",
        "prefs-advancedrendering": "Haladó beállítások",
        "prefs-advancedsearchoptions": "Haladó beállítások",
        "prefs-advancedwatchlist": "Haladó beállítások",
        "recentchanges-legend": "A friss változtatások beállításai",
        "recentchanges-summary": "Ezen a lapon a wikiben történt legutóbbi fejleményeket lehet nyomon követni.",
        "recentchanges-noresult": "A megadott időszakban nincs a feltételeknek megfelelő szerkesztés.",
+       "recentchanges-timeout": "A keresés időtúllépés miatt leállt. Próbálkozz más keresési paraméterekkel.",
        "recentchanges-feed-description": "Kövesd a wiki friss változtatásait ezzel a hírcsatornával.",
        "recentchanges-label-newpage": "Ezzel a szerkesztéssel egy új lap jött létre",
        "recentchanges-label-minor": "Ez egy apró szerkesztés",
        "recentchanges-submit": "Megjelenítés",
        "rcfilters-tag-remove": "$1 eltávolítása",
        "rcfilters-legend-heading": "<strong>Rövidítések listája:</strong>",
-       "rcfilters-other-review-tools": "<strong>Egyéb hasznos hivatkozások</strong>",
+       "rcfilters-other-review-tools": "Egyéb hasznos hivatkozások",
        "rcfilters-group-results-by-page": "Csoportosítás eredményei lapok szerint",
        "rcfilters-grouping-title": "Csoportosítás",
        "rcfilters-activefilters": "Aktív szűrők",
        "rcfilters-days-show-hours": "$1 óra",
        "rcfilters-highlighted-filters-list": "Kiemelve: $1",
        "rcfilters-quickfilters": "Mentett szűrők",
-       "rcfilters-quickfilters-placeholder-title": "Nincs mentett hivatkozás",
+       "rcfilters-quickfilters-placeholder-title": "Nincs mentett szűrő",
        "rcfilters-quickfilters-placeholder-description": "Hogy elmentsd szűrőid beállításait és később újra használhasd őket, kattints a könyvjelző ikonra az „aktív szűrők” mezőben, feljebb.",
        "rcfilters-savedqueries-defaultlabel": "Mentett szűrők",
        "rcfilters-savedqueries-rename": "Átnevezés",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Alapértelmezett szűrő készítése",
        "rcfilters-savedqueries-cancel-label": "Mégse",
        "rcfilters-savedqueries-add-new-title": "Szűrők mentése gyors hivatkozásként",
+       "rcfilters-savedqueries-already-saved": "Ezek a szűrők már el lettek mentve",
        "rcfilters-restore-default-filters": "Alapértelmezett szűrők visszaállítása",
        "rcfilters-clear-all-filters": "Összes szűrő kikapcsolása",
        "rcfilters-show-new-changes": "Legfrissebb változtatások megtekintése",
-       "rcfilters-search-placeholder": "Friss változtatások szűrése (böngéssz vagy kezdj el gépelni)",
+       "rcfilters-search-placeholder": "Változtatások szűrése (használd a menüt vagy keress szűrőkre)",
        "rcfilters-invalid-filter": "Érvénytelen szűrő",
        "rcfilters-empty-filter": "Nincs aktív szűrő. Minden közreműködés látható.",
        "rcfilters-filterlist-title": "Szűrők",
        "rcfilters-filter-user-experience-level-unregistered-label": "Nem regisztrált",
        "rcfilters-filter-user-experience-level-unregistered-description": "Nem bejelentkezett szerkesztők.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Újoncok",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Regisztrált szerkesztők kevesebb mint 10 szerkesztéssel és 4 nap aktivitással.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Regisztrált szerkesztők kevesebb mint 10 szerkesztéssel vagy 4 nap aktivitással.",
        "rcfilters-filter-user-experience-level-learner-label": "Tanulók",
        "rcfilters-filter-user-experience-level-learner-description": "Regisztrált szerkesztők „újonc” és „tapasztalt szerkesztő” közé eső tapasztalattal.",
        "rcfilters-filter-user-experience-level-experienced-label": "Tapasztalt szerkesztők",
        "rcfilters-filter-watchlistactivity-unseen-label": "Még nem látott változtatások",
        "rcfilters-filter-watchlistactivity-unseen-description": "A figyelőlistádon szereplő lapokon az utolsó látogatásod után történt változtatások.",
        "rcfilters-filter-watchlistactivity-seen-label": "Változtatások megtekintése",
+       "rcfilters-filter-watchlistactivity-seen-description": "A lapokon az utolsó látogatásod után történt változtatások.",
        "rcfilters-filtergroup-changetype": "Változtatás típusa",
        "rcfilters-filter-pageedits-label": "Lapszerkesztések",
        "rcfilters-filter-pageedits-description": "A wiki tartalom szerkesztése, beszélgetések, kategória leírások...",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nem</strong> $1",
        "rcfilters-exclude-button-off": "A kiválasztottak kizárása",
        "rcfilters-exclude-button-on": "A kiválasztottak kizárva",
-       "rcfilters-view-advanced-filters-label": "Haladó szűrők",
        "rcfilters-view-tags": "Megjelölt szerkesztések",
        "rcfilters-view-namespaces-tooltip": "Találatok szűrése névtér szerint",
        "rcfilters-view-tags-tooltip": "Találatok szűrése címkék használatával",
        "rcfilters-view-return-to-default-tooltip": "Vissza a főszűrőmenübe.",
+       "rcfilters-view-tags-help-icon-tooltip": "Tudj meg többet a jelölt szerkesztésekről",
        "rcfilters-liveupdates-button": "Élő frissítések",
        "rcfilters-liveupdates-button-title-on": "Élő frissítések kikapcsolása",
        "rcfilters-liveupdates-button-title-off": "A legfrissebb változtatások mutatása, amint megtörténnek",
        "rcfilters-watchlist-edit-watchlist-button": "A figyelőlistád szerkesztése",
        "rcfilters-watchlist-showupdated": "Az újabb változtatások amiket még nem néztél meg, <strong>vastaggal jelöltük</strong>",
        "rcfilters-preference-label": "A friss változtatások fejlesztett változatának elrejtése",
+       "rcfilters-preference-help": "A 2017-es felületátdolgozás és minden azóta hozzáadott eszköz visszaállítása.",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfromreset": "Dátumválasztás visszaállítása",
        "rclistfrom": "$3, $2 után történt változtatások megtekintése",
        "uploadbtn": "Fájl feltöltése",
        "reuploaddesc": "Visszatérés a feltöltési űrlaphoz.",
        "upload-tryagain": "Módosított fájl-leírás elküldése",
+       "upload-tryagain-nostash": "Újra-feltöltött fájl és módosított leírás küldése",
        "uploadnologin": "Nem vagy bejelentkezve",
        "uploadnologintext": "{{UCFIRST:$1}} fájlok feltöltéséhez.",
        "upload_directory_missing": "A feltöltési könyvtár ($1) nem létezik vagy nem tudja létrehozni a kiszolgáló.",
        "uploadstash-errclear": "A fájlok törlése nem sikerült.",
        "uploadstash-refresh": "Fájlok listájának frissítése",
        "uploadstash-thumbnail": "bélyegkép megjelenítése",
+       "uploadstash-exception": "Nem sikerült eltárolni a feltöltést a stash-ben ($1): „$2”",
+       "uploadstash-bad-path": "Útvonal nem létezik",
+       "uploadstash-bad-path-invalid": "Érvénytelen útvonal",
+       "uploadstash-bad-path-unknown-type": "Ismeretlen típus: „$1”",
        "invalid-chunk-offset": "Érvénytelen darab eltolás",
        "img-auth-accessdenied": "Hozzáférés megtagadva",
        "img-auth-nopathinfo": "Hiányzó PATH_INFO.\nA szerver nincs beállítva, hogy továbbítsa ezt az információt.\nLehet, hogy CGI-alapú, és nem támogatja az img_auth-ot.\nLásd https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization!",
index 1c091bf..a615909 100644 (file)
        "jumptosearch": "որոնում",
        "view-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։\n\n$1",
        "generic-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։",
-       "pool-timeout": "Արգելափակման ժամկետը սպառվաց է",
+       "pool-timeout": "Արգելափակման ժամկետը սպառված է",
        "pool-errorunknown": "Անհայտ սխալ",
        "poolcounter-usage-error": "Օգտագործման սխալ՝ $1",
        "aboutsite": "{{grammar:genitive|{{SITENAME}}}} մասին",
        "missingcommentheader": "'''Հիշեցում.''' Դուք չեք նշել մեկնաբանության վերնագիրը։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում ձեր մեկնաբանությունը կհիշվի առանց վերնագրի։",
        "summary-preview": "Ամփոփման նախադիտում:",
        "subject-preview": "Վերնագրի նախադիտում:",
-       "blockedtitle": "Õ\84Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¨ արգելափակված է",
+       "blockedtitle": "Õ\84Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ արգելափակված է",
        "blockedtext": "'''Ձեր մասնակցի անունը կամ IP-հասցեն արգելափակված է։'''\n\nԱրգելափակումը կատարվել է $1 ադմինիստրատորի կողմից։\nՏրված պատճառն է. ''«$2»''\n\n* Արգելափակման սկիզբ՝ $8\n* Արգելափակման մարում՝ $6\n* Արգելափակվել է՝ $7\n\nԴուք կարող եք կապվել $1 մասնակցի կամ մեկ այլ [[{{MediaWiki:Grouppage-sysop}}|ադմինիստրատորի]] հետ՝ ձեր արգելափակումը քննարկելու նպատակով։ Դա նաև հնարավոր է անել ձեր քննարկման էջում։\nԴուք չեք կարող օգտվել` «էլ-նամակ ուղարկել այս մասնակցին» հնարավորությունից, քանի դեռ ինքներդ գործող էլ-փոստի հասցե չեք  նշել ձեր [[Special:Preferences|մասնակցի նախընտրություններում]] և չեք արգելափակվել այս հնարավորւությունը օգտագործելուց։\n\nՁեր ընթացիկ IP-հասցեն է` $3, արգելափակման իդենտիֆիկատորը՝ #$5։\nԽնդրում ենք նշել այս տվյալները ձեր հարցումների ժամանակ։",
        "autoblockedtext": "Ձեր IP-հասցեն ավտոմատիկ արգելափակված է, քանի որ այն օգտագործվել է այլ մասնակցի կողմից, որը արգելափակվել է $1 ադմինիստրատորի կողմից։\n\nՏրված պատճառն է.\n:''«$2»''\n\n* Արգելափակման սկիզբ՝ $8\n* Արգելափակման մարում՝ $6\n* Արգելափակվել է՝ $7\n\nԴուք կարող եք կապվել $1 մասնակցի կամ մեկ այլ [[{{MediaWiki:Grouppage-sysop}}|ադմինիստրատորի]] հետ՝ ձեր արգելափակումը քննարկելու նպատակով։\n\nԴուք չեք կարող օգտվել «էլ-նամակ ուղարկել այս մասնակցին» հնարավորությունից քանի դեռ ինքներդ գործող էլ-փոստի հասցե չեք  նշել ձեր [[Special:Preferences|մասնակցի նախընտրություններում]] և չեք արգելափակվել այս հնարավորությից օգտվելուց։\n\nՁեր ընթացիկ IP-հասցեն է $3, արգելափակման իդենտիֆիկատորը՝ $5։\nԽնդրում ենք նշել այս տվյալները ձեր հարցումների ժամանակ։",
        "blockednoreason": "պատճառ չի տրվել",
        "rev-deleted-event": "(գրությունը հեռացված է)",
        "rev-deleted-user-contribs": "[մասնակցի անունը կամ ԱյՊի հասցեն հեռացված է, խմբագրումը թաքցված է ներդրումներից]",
        "rev-deleted-text-permission": "Էջի այս տարբերակը հեռացված է։\nՀնարավոր է մանրամասնություններ լինեն [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} ջնջման տեղեկամատյանում]։",
-       "rev-deleted-text-view": "Էջի այս տարբերակը '''ջնջված''' է։\nՈրպես ադմինիստրատոր դուք կարող եք դիտել այն։\nՀնարավոր է ջնջման մանրամասնություններ լինեն [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։",
+       "rev-deleted-text-view": "Էջի այս տարբերակը '''ջնջված''' է։\nՈրպես ադմինիստրատոր՝ Դուք կարող եք դիտել այն։\nՀնարավոր է ջնջման մանրամասնություններ լինեն [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։",
        "rev-deleted-no-diff": "Դուք չեք կարող դիտել տարբերությունը, քանի որ խմբագրումների մեկը '''ջնջվել''' է։ Մանրամասները կարող եք գտնել [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]",
        "rev-suppressed-no-diff": "Դուք չեք կարող դիտել տարբերությունը, քանի որ խմբագրումների մեկը '''ջնջվել''' է։",
        "rev-deleted-unhide-diff": "Խմբագրումներից մեկը '''ջնջվել''' է։\nԳործողության մանրամասները կարելի է գտնել [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։\nԴուք կարող եք դիտել [$1 տարբերությունը], եթե ցանկանում եք շարունակել։",
        "revdelete-reasonotherlist": "Ուրիշ պատճառ",
        "revdelete-edit-reasonlist": "Խմբագրել ջնջման պատճառների ցանկը",
        "revdelete-offender": "Էջի տարբերակի հեղինակ՝",
+       "mergehistory-from": "Աղբյուր էջ.",
+       "mergehistory-into": "Նպատակային էջ.",
        "mergehistory-reason": "Պատճառ՝",
        "revertmerge": "Անջատել",
        "history-title": "«$1» էջի փոփոխումների պատմություն",
        "search-interwiki-caption": "Կից նախագծեր",
        "search-interwiki-default": "$1 արդյունք.",
        "search-interwiki-more": "(էլի)",
+       "search-interwiki-more-results": "ավելի շատ արդյունքներ",
        "search-relatedarticle": "Հարակից",
        "searchrelated": "հարակից",
        "searchall": "բոլոր",
        "newuserlogpagetext": "Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.",
        "rightslog": "Մասնակցի իրավունքների տեղեկամատյան",
        "rightslogtext": "Սա մասնակիցների իրավունքների փոփոխությունների տեղեկամատյանն է։",
+       "action-read": "կարդալ այս էջը",
        "action-edit": "խմբագրել այս էջը",
        "action-createpage": "Ստեղծել էջ",
        "action-move": "տեղափոխել այս էջը",
        "enhancedrc-history": "պատմություն",
        "recentchanges": "Վերջին փոփոխություններ",
        "recentchanges-legend": "Վերջին փոփոխությունների նախընտրություններ",
-       "recentchanges-summary": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։",
+       "recentchanges-summary": "Հետևե՛ք Հայերեն Վիքիպեդիայում կատարված վերջին փոփոխություններին այս էջում։",
        "recentchanges-noresult": "Տրված ժամանակահատվածում այս կարգավորումներով փոփոխություն չի եղել։",
        "recentchanges-feed-description": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս սնուցման մեջ։",
        "recentchanges-label-newpage": "Այս խմբագրմամբ ստեղծվել է նոր էջ",
        "recentchanges-legend-heading": "<strong>Լեգենդ՝</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
        "recentchanges-submit": "Ցույց տալ",
+       "rcfilters-tag-remove": "Հեռացնել '$1'",
+       "rcfilters-legend-heading": "<strong>Հապավումների ցանկ.</strong>",
        "rcfilters-limit-shownum": "Ցուցադրել վերջին $1 փոփոխությունները",
+       "rcfilters-days-title": "Վերջին օրերին",
+       "rcfilters-hours-title": "Վերջին ժամերը",
        "rcfilters-savedqueries-rename": "Վերանվանել",
        "rcfilters-savedqueries-remove": "Ջնջել",
        "rcfilters-savedqueries-new-name-label": "Անուն",
        "rcfilters-savedqueries-cancel-label": "Չեղարկել",
        "rcfilters-filterlist-title": "Զտիչներ",
        "rcfilters-filterlist-whatsthis": "Ինչպե՞ս է սա աշխատում:",
+       "rcfilters-highlightmenu-title": "Ընտրեք գույնը",
        "rcfilters-filter-editsbyself-label": "Ձեր խմբագրումներ",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Նորեկներ",
        "rcfilters-filter-user-experience-level-newcomer-description": "Գրանցված խմբագիրներ՝ ոչ պակաս քան 10 խմբագրումով և 4 օր ակտիվությամբ:",
        "rcfilters-filtergroup-lastRevision": "Ընթացիկ տարբերակ",
        "rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
        "emailsend": "Ուղարկել",
        "emailccme": "Ուղարկել ինձ իմ նամակի պատճեն։",
        "emailccsubject": "Ձեր՝ $1 մասնակցին նամակի պատճեն. $2",
-       "emailsent": "Էլ-նամակը ուղարկված է",
+       "emailsent": "Էլեկտրոնային նամակն ուղարկված է",
        "emailsenttext": "Ձեր էլ-ուղերձն ուղարկված է։",
        "watchlist": "Իմ հսկողության ցանկը",
        "mywatchlist": "Հսկացանկ",
        "undeleteinvert": "Շրջել ընտրությունը",
        "undeletecomment": "Մեկնաբանություն.",
        "cannotundelete": "Վերականգնումը ձախողվեց։ Հնարավոր է մեկ ուրիշն արդեն վերականգնել է այս էջը։",
-       "undeletedpage": "'''«$1» Õ§Õ»Õ¨ Õ¾Õ¥Ö\80Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¾Õ¡Õ® Õ§Ö\89'''\n\nÕ\8fÕ¥Õ½ [[Special:Log/delete|Õ»Õ¶Õ»Õ´Õ¡Õ¶ Õ¿Õ¥Õ²Õ¥Õ¯Õ¡Õ´Õ¡Õ¿ÕµÕ¡Õ¶Õ¨]]` վերջին ջնջումների և վերականգնումների համար։",
+       "undeletedpage": "'''«$1» Õ§Õ»Õ¨ Õ¾Õ¥Ö\80Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¾Õ¡Õ® Õ§Ö\89'''\n\nÕ\8fÕ¥Õ\9bÕ½ [[Special:Log/delete|Õ»Õ¶Õ»Õ´Õ¡Õ¶ Õ¿Õ¥Õ²Õ¥Õ¯Õ¡Õ´Õ¡Õ¿ÕµÕ¡Õ¶Õ¨]] վերջին ջնջումների և վերականգնումների համար։",
        "undelete-header": "Տես [[Special:Log/delete|ջնջման տեղեկամատյանը]]՝ վերջին ջնջումների և վերականգնումների համար։",
        "undelete-search-title": "Որոնել ջնջված էջեր",
        "undelete-search-box": "Որոնել ջնջված էջերը",
        "undelete-show-file-submit": "Այո",
        "namespace": "Անվանատարածք.",
        "invert": "Շրջել ընտրությունը",
-       "tooltip-invert": "Նշեք` տվյալ անվանատարածքի և կից անվանատարածքների (եթե նշված է) էջերի փոփոխությունները թաքցնելու համար։",
+       "tooltip-invert": "Նշե՛ք տվյալ անվանատարածքի և կից անվանատարածքների (եթե նշված է) էջերի փոփոխությունները թաքցնելու համար։",
        "namespace_association": "Կից անվանատարածք",
        "tooltip-namespace_association": "Նշեք տվյալ անվանատարածքի հետ կապված քննարկումների անվանատարածքը նույնպես ներառելու համար։",
        "blanknamespace": "(Գլխավոր)",
        "infiniteblock": "ընդմիշտ",
        "expiringblock": "կմարվի $1 $2",
        "anononlyblock": "միայն անանուն",
-       "noautoblockblock": "Õ¡Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ¨ անջատված է",
+       "noautoblockblock": "Õ¡Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ անջատված է",
        "createaccountblock": "մասնակցային հաշվի ստեղծումը արգելափակված է",
        "emailblock": "էլ-փոստը արգելափակված",
        "blocklist-nousertalk": "չի կարող խմբագրել իր քննարկման էջը",
        "unblocklogentry": "արգելափակումից հանված է $1",
        "block-log-flags-anononly": "միայն անանուն մասնակիցներ",
        "block-log-flags-nocreate": "մասնակցային հաշվի ստեղծումը արգելված է",
-       "block-log-flags-noautoblock": "Õ¡Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ¨ անջատված է",
-       "block-log-flags-noemail": "էլ-փոստը արգելափակված է",
+       "block-log-flags-noautoblock": "Õ¡Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ¡Ö\80Õ£Õ¥Õ¬Õ¡Ö\83Õ¡Õ¯Õ¸Ö\82Õ´Õ անջատված է",
+       "block-log-flags-noemail": "էլփոստն արգելափակված է",
        "block-log-flags-nousertalk": "չի կարող խմբագրել իր քննարկման էջը",
        "block-log-flags-hiddenname": "թաքցնել մասնակցի անունը",
        "range_block_disabled": "Ադմինիստրատորների կողմից լայնույթի արգելափակման հնարավորությունը անջատված է։",
        "ipb_expiry_invalid": "Մարման ժամկետը անթույլատրելի է",
-       "ipb_already_blocked": "«$1» Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¨ արդեն արգելափակված է",
+       "ipb_already_blocked": "«$1» Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ արդեն արգելափակված է",
        "ipb_cant_unblock": "Սխալ. համար «$1» արգելափակումը չի գտնվել։ Հնարավոր է, որ արգելափակումն արդեն հանված է։",
        "ip_range_invalid": "IP-հասցեների անթույլատրելի լայնույթ։",
        "proxyblocker": "Փոխանորդի արգելափակում",
        "movepagetext-noredirectfixer": "Օգտագործելով ներքևի ձևը, դուք կարող եք վերանավանել էջը։ Այդ դեպքում էջի ողջ պատմությունը կտեղափոխվի նոր վերնագրի ներքո։ Հին վերնագիրը կդառնա ավտոմատ վերահղում նոր վերնագրին։ Ստուգե՛ք, արդյոք վերանվանման պատճառով չե՞ն առաջացել [[Special:DoubleRedirects|կրկնակի]] կամ [[Special:BrokenRedirects|կոտրված վերահղումներ]]։ Դուք պատասխանատու եք, որ այլ էջերի հղումները այս անվանափոխությունից հետո շարունակեն ճիշտ գործել։\n\nԷջը հնարավոր '''չի''' լինի վերանվանել, եթե նոր վերնագրով արդեն էջ գոյութուն ունի, բացի այն դեպքից, երբ այն դատարկ է կամ վերահղում է առանց պատմության։ Այսինքն սխալ անուն ընտրելու դեպքում դուք կարող եք վերադարձնել էջի նախկին անվանումը, սակայն դուք չեք կարող օգտագործել գոյություն ունեցող էջի վերնագիր։\n\n'''Ուշադրությո՛ւն'''\nԱնվանափոխությունը կարող է լուրջ խնդիրներ առաջացնել հաճախակի խմբագրվող էջի դեպքում։\nԽնդրում ենք շարունակել միայն, եթե գիտակցում եք կատարվող փոփոխության հետևանքները։",
        "movepagetalktext": "Կցված քննարկման էջը ավտոմատ կտեղափոխվի էջի հետ՝ '''բացառությամբ այն դեպքերի, երբ'''.\n*Գոյություն ունի ոչ-դատարկ քննարկման էջ նոր անվանման տակ\n*Դուք հանել եք նշումը ստորև արկղից\n\nԱյսպիսի դեպքերում հարկավոր է տեղափոխել կամ միաձուլել էջերը ձեռքով, եթե դա ցանկանաք։",
        "moveuserpage-warning": "'''Զգուշացո՜ւմ՝ '''You are about to move a user page. Please note that only the page will be moved and the user will ''not'' be renamed.",
-       "movenologintext": "Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]]՝ էջը տեղափոխելու համար։",
+       "movenologintext": "Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]] էջը տեղափոխելու համար։",
        "movenotallowed": "Դուք չունեք էջերի տեղափոխման իրավունք։",
        "newtitle": "Նոր անվանում.",
        "move-watch": "Հսկել էջը",
        "confirmemail_oncreate": "Վավերացման կոդով նամակը ուղարկվել է ձեր նշված էլ-հասցեով։\nԱյս կոդը պարտադիր չէ համակարգ մտնելու համար, սակայն այն անհրաժեշտ է տրամադրել այս վիքիում էլ-փոստի վրա հիմնված հնարավորությունները ակտիվացնելու համար։",
        "confirmemail_sendfailed": "Վավերացման նամակի ուղարկումը չհաջողվեց։ Ստուգեք հասցեի ճշտությունը։\n\nՍերվերի պատասխանն էր. $1",
        "confirmemail_invalid": "Սխալ վավերացման կոդ։ Հնարավոր է կոդի ժամկետն անցած լինի։",
-       "confirmemail_needlogin": "Ձեզ անհրաժեշտ է $1՝ ձեր էլ-փոստի հասցեն վավերացնելու համար։",
+       "confirmemail_needlogin": "Ձեզ անհրաժեշտ է $1 ձեր էլ-փոստի հասցեն վավերացնելու համար։",
        "confirmemail_success": "Ձեր էլ-փոստի հասցեն վավերացված է։ Դուք կարող եք մտնել համակարգ և օգտվել վիքիից։",
        "confirmemail_loggedin": "Ձեր էլ-փոստի հասցեն վավերացված է։",
        "confirmemail_subject": "{{SITENAME}}. էլ-հասցեի վավերացման հայց",
index e676f76..cb8d5ec 100644 (file)
        "anonpreviewwarning": "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''",
        "missingsummary": "<strong>Rememoration:</strong> Tu non ha scribite un summario de modification.\nSi tu clicca sur \"$1\" de novo, le modification essera publicate sin summario.",
        "selfredirect": "<strong>Attention:</strong> Tu redirige iste pagina verso se mesme.\nTu pote haber specificate le mal destination pro le redirection, o tu modifica forsan le mal pagina.\nSi tu clicca sur \"$1\" de novo, le redirection essera create in despecto de isto.",
-       "missingcommenttext": "Per favor entra un commento infra.",
+       "missingcommenttext": "Per favor entra un commento.",
        "missingcommentheader": "<strong>Rememoration:</strong> Tu non ha fornite un subjecto pro iste commento.\nSi tu clicca super \"$1\" de novo, le modification essera publicate sin subjecto.",
        "summary-preview": "Previsualisation del summario de modification:",
        "subject-preview": "Previsualisation del subjecto:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceano Indian",
        "timezoneregion-pacific": "Oceano Pacific",
-       "allowemail": "Activar reception de e-mail de altere usatores",
+       "allowemail": "Permitter que altere usatores me invia e-mail",
        "email-blacklist-label": "Prohibir a iste usatores de inviar me e-mail:",
        "prefs-searchoptions": "Recerca",
        "prefs-namespaces": "Spatios de nomines",
        "recentchanges-submit": "Monstrar",
        "rcfilters-tag-remove": "Remover '$1'",
        "rcfilters-legend-heading": "<strong>Lista de abbreviationes:</strong>",
-       "rcfilters-other-review-tools": "<strong>Altere instrumentos de revision</strong>",
+       "rcfilters-other-review-tools": "Altere instrumentos de revision",
        "rcfilters-group-results-by-page": "Gruppar resultatos per pagina",
        "rcfilters-grouping-title": "Gruppamento",
        "rcfilters-activefilters": "Filtros active",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "rcfilters-highlighted-filters-list": "Mittite in evidentia: $1",
        "rcfilters-quickfilters": "Filtros salveguardate",
-       "rcfilters-quickfilters-placeholder-title": "Nulle ligamine salveguardate ancora",
+       "rcfilters-quickfilters-placeholder-title": "Nulle filtro salveguardate ancora",
        "rcfilters-quickfilters-placeholder-description": "Pro salveguardar tu filtros pro uso posterior, clicca sur le icone marcapaginas in le area Filtro Active hic infra.",
        "rcfilters-savedqueries-defaultlabel": "Filtros salveguardate",
        "rcfilters-savedqueries-rename": "Renominar",
        "rcfilters-filter-user-experience-level-unregistered-label": "Non registrate",
        "rcfilters-filter-user-experience-level-unregistered-description": "Redactores que non ha aperite session.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Novicios",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Redactores registrate con minus de 10 modificationes e 4 dies de activitate.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Redactores registrate que ha minus de 10 modificationes o 4 dies de activitate.",
        "rcfilters-filter-user-experience-level-learner-label": "Apprentisses",
        "rcfilters-filter-user-experience-level-learner-description": "Redactores registrate con experientia inter \"Novicios\" e \"Usatores con experientia\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Usatores con experientia",
        "rcfilters-view-namespaces-tooltip": "Filtrar le resultatos per spatio de nomines",
        "rcfilters-view-tags-tooltip": "Filtrar le resultatos usante etiquettas de version",
        "rcfilters-view-return-to-default-tooltip": "Retornar al menu principal de filtros",
+       "rcfilters-view-tags-help-icon-tooltip": "Leger plus sur le modification con etiquettas",
        "rcfilters-liveupdates-button": "Fluxo continue",
        "rcfilters-liveupdates-button-title-on": "Disactivar actualisation in directo",
        "rcfilters-liveupdates-button-title-off": "Monstrar cambiamentos in tempore real",
        "uploaded-script-svg": "Un elemento de script \"$1\" se trova in le file SVG incargate.",
        "uploaded-hostile-svg": "Certe codice CSS insecur se trova in le elemento de stilo del file SVG incargate.",
        "uploaded-event-handler-on-svg": "Fixar attributos de gestion de eventos <code>$1=\"$2\"</code> non es permittite in files SVG.",
-       "uploaded-href-attribute-svg": "Le attributos href in files SVG pote solmente ligar a adresses http:// o https://, ma un adresse <code>&lt;$1 $2=\"$3\"&gt;</code> ha essite trovate.",
+       "uploaded-href-attribute-svg": "Le elementos <a> in files SVG pote solmente ligar (href) a datos: files incastrate, adresses http:// o https:// o marcatores de fragmento (#, same-document). Pro altere elementos, solmente data: e fragmentos es permittite. Essaya a incastrar imagines quando tu exporta tu SVG. Trovate: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Un href a datos non secur: le URI <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
        "uploaded-animate-svg": "Un etiqueta \"animate\" que poterea cambiar le href, usante le attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, se trova in le file SVG incargate.",
        "uploaded-setting-event-handler-svg": "Fixar le attributos de gestion de eventos non es permittite, ma le codice <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
        "ipb_blocked_as_range": "Error: Le IP $1 non es blocate directemente e non pote esser disblocate.\nIllo es, nonobstante, blocate como parte del intervallo $2, le qual pote esser disblocate.",
        "ip_range_invalid": "Intervallo de adresses IP invalide.",
        "ip_range_toolarge": "Non es permittite blocar un gamma de adresses IP plus grande que /$1.",
+       "ip_range_exceeded": "Le rango IP excede le rango maxime. Le rango permittite es: /$1.",
+       "ip_range_toolow": "Le rangos IP ha essite effectivemente disactivate.",
        "proxyblocker": "Blocator de proxy",
        "proxyblockreason": "Tu adresse IP ha essite blocate proque illo es un proxy aperte.\nPer favor contacta tu providitor de servicio internet o supporto technic e informa les de iste problema grave de securitate.",
        "sorbsreason": "Tu adresse IP es listate como proxy aperte in le DNSBL usate per {{SITENAME}}.",
index 439edb6..08414e7 100644 (file)
@@ -55,7 +55,8 @@
                        "MF-Warburg",
                        "Rachmat04",
                        "Arifpedia",
-                       "Uchup19"
+                       "Uchup19",
+                       "Archd"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "underline-never": "Tidak pernah",
        "underline-default": "Kulit atau penjelajah bawaan",
        "editfont-style": "Gaya tulisan komputer pada kotak penyuntingan:",
-       "editfont-default": "Bawaan penjelajah web",
        "editfont-monospace": "Tulisan Monospace",
        "editfont-sansserif": "Tulisan Sans-serif",
        "editfont-serif": "Tulisan Serif",
        "anonpreviewwarning": "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''",
        "missingsummary": "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
        "selfredirect": "<strong>Peringatan:</strong> Anda mengalihkan halaman ini kembali ke halaman semula.\nAnda bisa jadi telah memberikan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"$1\" sekali lagi, halaman pengalihan akan dibuat.",
-       "missingcommenttext": "Harap masukkan komentar di bawah ini.",
+       "missingcommenttext": "Tolong masukkan komentar.",
        "missingcommentheader": "'''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"$1\", suntingan Anda akan disimpan tanpa komentar tersebut.",
        "summary-preview": "Pratayang ringkasan suntingan:",
        "subject-preview": "Pratayang subjek:",
        "explainconflict": "Orang lain telah menyunting halaman ini sejak Anda mulai menyuntingnya.\nBagian atas teks ini mengandung teks halaman saat ini.\nPerubahan yang Anda lakukan ditunjukkan pada bagian bawah teks.\nAnda hanya perlu menggabungkan perubahan Anda dengan teks yang telah ada.\n'''Hanya''' teks pada bagian atas halamanlah yang akan disimpan apabila Anda menekan \"$1\".",
        "yourtext": "Teks Anda",
        "storedversion": "Versi tersimpan",
-       "nonunicodebrowser": "'''Peringatan: Penjelajah web Anda tidak mendukung unicode.'''\nTelah terdapat sebuah solusi agar Anda dapat menyunting halaman dengan aman: karakter non-ASCII akan muncul dalam kotak edit sebagai kode heksadesimal.",
        "editingold": "'''Peringatan:\nAnda menyunting revisi lama suatu halaman.\nJika Anda menyimpannya, perubahan-perubahan yang dibuat sejak revisi ini akan hilang.'''",
+       "unicode-support-fail": "Tampaknya peramban Anda tidak mendukung Unicode, yang menjadi syarat penyuntingan halaman. Jadi suntingan Anda tidak disimpan.",
        "yourdiff": "Perbedaan",
        "copyrightwarning": "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dianggap dilisensikan sesuai dengan $2 (lihat $1 untuk informasi lebih lanjut). Jika Anda tidak ingin tulisan Anda disunting dan disebarkan ke halaman web yang lain, jangan kirimkan ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain. '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''",
        "copyrightwarning2": "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dapat disunting, diubah, atau dihapus oleh penyumbang lainnya. Jika Anda tidak ingin tulisan Anda disunting orang lain, jangan kirimkan ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain (lihat $1 untuk informasi lebih lanjut). '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''",
        "parser-template-loop-warning": "Hubungan berulang templat terdeteksi: [[$1]]",
        "template-loop-category": "Halaman dengan templat berulang",
        "template-loop-category-desc": "Halaman ini mengandung templat melingkar, yaitu templat yang memanggil dirinya sendiri secara bolak-balik.",
+       "template-loop-warning": "<strong>Peringatan:</strong> Halaman ini memanggil [[:$1]] yang menyebabkan <i>template loop</i> (panggilan rekursif tak hingga).",
        "parser-template-recursion-depth-warning": "Limit kedalaman hubungan berulang templat terlampaui ($1)",
        "language-converter-depth-warning": "Batas kedalaman pengonversi bahasa terlampaui ($1)",
        "node-count-exceeded-category": "Halaman dimana hitungan-node terlampaui",
        "timezoneregion-europe": "Eropa",
        "timezoneregion-indian": "Samudera Hindia",
        "timezoneregion-pacific": "Samudera Pasifik",
-       "allowemail": "Izinkan pengguna lain mengirim surel",
+       "allowemail": "Izinkan pengguna lain mengirim surel kepada saya",
+       "email-blacklist-label": "Cegah para pengguna ini mengirim saya surel:",
        "prefs-searchoptions": "Cari",
        "prefs-namespaces": "Ruang nama",
        "default": "baku",
        "prefs-editor": "Penyunting",
        "prefs-preview": "Pratayang",
        "prefs-advancedrc": "Opsi lanjutan",
+       "prefs-opt-out": "Memilih keluar dari perbaikan",
        "prefs-advancedrendering": "Opsi lanjutan",
        "prefs-advancedsearchoptions": "Opsi lanjutan",
        "prefs-advancedwatchlist": "Opsi lanjutan",
        "recentchanges-legend": "Opsi perubahan terbaru",
        "recentchanges-summary": "Temukan perubahan terbaru dalam wiki di halaman ini.<br />\n;Keterangan:(<span style=\"color:blue;\">beda</span>) perubahan, (<span style=\"color:blue;\">versi</span>) sejarah revisi, '''B''' halaman baru, '''b''' suntingan bot, '''k''' suntingan kecil, <span class=\"unpatrolled\">!</span> perubahan belum dipatroli,<br /><span style=\"color:green;\">'''(+ ''bita'')'''</span> isi konten bertambah, <span style=\"color:red;\">(- ''bita'')</span> isi konten berkurang, (← Ringkasan otomatis), (→ <span style=\"color:grey;\">Suntingan bagian</span>)",
        "recentchanges-noresult": "Tidak ada perubahan dalam rentang waktu ini yang cocok dengan kriteria.",
+       "recentchanges-timeout": "Waktu pencarian ini telah habis. Anda mungkin ingin mencoba parameter pencarian lain.",
        "recentchanges-feed-description": "Temukan perubahan terbaru dalam wiki di umpan ini.",
        "recentchanges-label-newpage": "Suntingan ini membuat halaman baru",
        "recentchanges-label-minor": "Ini adalah suntingan kecil",
        "recentchanges-legend-heading": "<strong>Keterangan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "recentchanges-submit": "Tampilkan",
+       "rcfilters-tag-remove": "Hapus '$1'",
        "rcfilters-legend-heading": "<strong>Daftar singkatan:</strong>",
-       "rcfilters-other-review-tools": "<strong>Peralatan peninjauan lainnya</strong>",
+       "rcfilters-other-review-tools": "Peralatan peninjauan lainnya",
        "rcfilters-group-results-by-page": "Kelompokkan hasil menurut halaman",
        "rcfilters-grouping-title": "Kelompokkan",
        "rcfilters-activefilters": "Filter aktif",
        "rcfilters-hours-title": "Jam-jam terakhir",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|hari|hari}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|jam|jam}}",
+       "rcfilters-highlighted-filters-list": "Disorot: $1",
        "rcfilters-quickfilters": "Saringan tersimpan",
-       "rcfilters-quickfilters-placeholder-title": "Tidak ada pranala tersimpan sekarang",
+       "rcfilters-quickfilters-placeholder-title": "Tidak ada penyaring yang disimpan",
        "rcfilters-quickfilters-placeholder-description": "Untuk menyimpan pengaturan saringan dan menggunakannya kembali, klik ikon penanda halaman di area Penyaringan Aktif, di bawah.",
        "rcfilters-savedqueries-defaultlabel": "Saringan tersimpan",
        "rcfilters-savedqueries-rename": "Ubah nama",
        "rcfilters-restore-default-filters": "Kembalikan filter bawaan",
        "rcfilters-clear-all-filters": "Hapus semua penyaringan",
        "rcfilters-show-new-changes": "Tampilkan perubahan terbaru",
-       "rcfilters-search-placeholder": "Filter perubahan terbaru (jelajahi atau masukan input)",
+       "rcfilters-search-placeholder": "Filter perubahan terbaru (jelajahi atau masukkan input)",
        "rcfilters-invalid-filter": "Penyqringan tidak sah",
        "rcfilters-empty-filter": "Tidak ada filter aktif. Semua kontribusi ditampilkan.",
        "rcfilters-filterlist-title": "Penyaringan",
        "rcfilters-filterlist-whatsthis": "Bagaimana hal ini bekerja?",
-       "rcfilters-filterlist-feedbacklink": "Berikan umpan balik untuk filter uji coba baru",
+       "rcfilters-filterlist-feedbacklink": "Berikan umpan balik untuk alat-alat filter (baru) ini",
        "rcfilters-highlightbutton-title": "Sorot hasil",
        "rcfilters-highlightmenu-title": "Pilih warna",
        "rcfilters-highlightmenu-help": "Pilihlah warna untuk menyorot atribut ini",
        "rcfilters-filter-categorization-description": "Rekam jejak halaman yang telah ditambahkan atau dihapus dari kategori.",
        "rcfilters-filter-logactions-label": "Tindakan tercatat",
        "rcfilters-filter-logactions-description": "Tindakan administratif, pembuatan akun, penghapusan halaman, pengunggahan...",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Tapis \"Suntingan kecil\" konflik dengan satu atau lebih jenis tapis perubahan lain, karena jenis perubahan tertentu tidak dapat ditandai sebagai \"kecil\".Tapis yang berkonflik ditandai di area Tapis aktif, di atas.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Jenis perubahan tertentu tidak dapat ditandai sebagai \"kecil\", jadi tapis ini berkonflik dengan tapis Jenis Perubahan ini: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Tapis Jenis perubahan ini berkonflik dengan tapis \"Suntingan kecil\". Jenis perubahan tertentu tidak dapat ditandai sebagai \"kecil\".",
        "rcfilters-filtergroup-lastRevision": "Revisi terbaru",
        "rcfilters-filter-lastrevision-label": "Revisi terbaru",
        "rcfilters-filter-lastrevision-description": "Hanya perubahan terbaru pada halaman ini.",
        "rcfilters-filter-previousrevision-description": "Semua perubahan yang bukan merupakan \"revisi terbaru\".",
        "rcfilters-filter-excluded": "Tidak termasuk",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:bukan</strong> $1",
-       "rcfilters-view-advanced-filters-label": "Penyaringan lebih lanjut",
+       "rcfilters-exclude-button-off": "Kecuali yang terpilih",
+       "rcfilters-exclude-button-on": "Kecuali yang terpilih",
        "rcfilters-view-tags": "Suntingan ditandai",
        "rcfilters-view-namespaces-tooltip": "Saring hasil menurut ruangnama",
        "rcfilters-view-tags-tooltip": "Saring hasil menggunakan tag penyuntingan",
        "rcfilters-view-return-to-default-tooltip": "Kembali ke menu penyaringan utama",
+       "rcfilters-view-tags-help-icon-tooltip": "Pelajari lebih lanjut tentang suntingan dengan TAG",
        "rcfilters-liveupdates-button": "Perubahan langsung",
        "rcfilters-liveupdates-button-title-on": "Matikan perubahan langsung",
        "rcfilters-liveupdates-button-title-off": "Tampilkan perubahan baru ketika perubahan tersebut terjadi",
        "rcfilters-watchlist-markseen-button": "Tandai semua perubahan sebagai terlihat",
+       "rcfilters-watchlist-edit-watchlist-button": "Sunting daftar pantauan Anda",
+       "rcfilters-watchlist-showupdated": "Perubahan di halaman-halaman yang belum Anda kunjungi sejak perubahan terjadi ditampilkan dalam <strong>huruf terbal</strong>, dan tanda titik tebal di daftar.",
+       "rcfilters-preference-label": "Sembunyikan versi terkini dari Perubahan Terbaru",
+       "rcfilters-preference-help": "Kembalikan perubahan antarmuka 2017 dan semua peralatan yang ditambahkan sejak saat itu.",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfromreset": "Atur ulang pilihan tanggal",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "uploadbtn": "Muatkan berkas",
        "reuploaddesc": "Kembali ke formulir pemuatan",
        "upload-tryagain": "Kirim perubahan keterangan berkas",
+       "upload-tryagain-nostash": "Kirim berkas yang diunggah ulang dan deskripsi yang terubah",
        "uploadnologin": "Belum masuk log",
        "uploadnologintext": "Anda harus $1 untuk dapat mengunggah berkas.",
        "upload_directory_missing": "Direktori pemuatan ($1) tidak ditemukan dan tidak dapat dibuat oleh server web.",
        "file-deleted-duplicate-notitle": "Sebuah berkas yang identik dengan berkas ini sebelumnya telah dihapus, dan judul yang digunakan telah ditahan.\nAnda harus meminta bantuan seseorang dengan kemampuan untuk melihat data berkas yang ditahan untuk meninjau situasi sebelum anda mengunggah kembali.",
        "uploadwarning": "Peringatan pemuatan",
        "uploadwarning-text": "Mohon perbaiki keterangan berkas di bawah dan coba lagi.",
+       "uploadwarning-text-nostash": "Silakan unggah ulang berkas ini, ubah deskripsi di bawah ini, dan coba lagi.",
        "savefile": "Simpan berkas",
        "uploaddisabled": "Maaf, fasilitas pemuatan dimatikan.",
        "copyuploaddisabled": "Pengunggahan dengan URL dimatikan.",
        "uploaded-script-svg": "Terdapat elemen terskrip \"$1\" dalam berkas SVG yang diunggah.",
        "uploaded-hostile-svg": "Terdapat CSS yang tidak aman dalam elemen gaya berkas SVG yang diunggah.",
        "uploaded-event-handler-on-svg": "Penetapan atribut <i>event-handler</i> $1=\"$2\" tidak diizinkan dalam berkas SVG.",
-       "uploaded-href-attribute-svg": "Atribut href pada berkas SVG hanya dibolehkan untuk ditautkan ke target http:// atau https://, ditemukan <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Elemen <a> hanya dibolehkan untuk ditautkan (href) ke target data: (berkas tertanam), http:// atau https://, atau fragmen (#, dokumen yang sama). Untuk element lainnya, seperti <image>, hanya data: dan fragmen yang diperbolehkan. Coba masukkan gambar ketika mengekspor SVG. Ditemukan <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Menemukan href ke data tidak aman: URI menarget <code>&lt;$1 $2=\"$3\"&gt;</code> dalam berkas SVG yang diunggah.",
        "uploaded-animate-svg": "Ditemukan tag \"animasi\" yang mungkin dapat mengubah href, menggunakan atribut \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> dalam berkas SVG yang diunggah.",
        "uploaded-setting-event-handler-svg": "Penyetelan atribut event-handler diblokir, menemukan <code>&lt;$1 $2=\"$3\"&gt;</code> dalam berkas SVG yang diunggah.",
        "listfiles_size": "Ukuran",
        "listfiles_description": "Deskripsi",
        "listfiles_count": "Versi",
-       "listfiles-show-all": "Termasuk versi lama gambar",
+       "listfiles-show-all": "Masukkan versi lama berkas",
        "listfiles-latestversion": "Versi terkini",
        "listfiles-latestversion-yes": "Ya",
        "listfiles-latestversion-no": "Tidak",
        "pageswithprop-legend": "Halaman dengan halaman properti",
        "pageswithprop-text": "Halaman ini berisi daftar halaman yang menggunakan properti halaman tertentu.",
        "pageswithprop-prop": "Nama properti:",
+       "pageswithprop-reverse": "Urutkan dalam urutan terbalik",
+       "pageswithprop-sortbyvalue": "Urutkan berdasarkan nilai properti",
        "pageswithprop-submit": "Lanjut",
        "pageswithprop-prophidden-long": "nilai properti teks panjang tersembunyi ($1)",
        "pageswithprop-prophidden-binary": "nilai properti biner tersembunyi ($1)",
        "unwatchthispage": "Batal pantau halaman ini",
        "notanarticle": "Bukan sebuah halaman isi",
        "notvisiblerev": "Revisi telah dihapus",
-       "watchlist-details": "Terdapat {{PLURAL:$1|$1 halaman|$1 halaman}} di daftar pantauan Anda, tidak termasuk halaman pembicaraan.",
+       "watchlist-details": "Terdapat {{PLURAL:$1|$1 halaman|$1 halaman}} di daftar pantauan Anda, (termasuk halaman pembicaraan).",
        "wlheader-enotif": "Notifikasi surel diaktifkan.",
        "wlheader-showupdated": "Halaman-halaman yang telah berubah sejak kunjungan terakhir Anda ditampilkan dengan '''huruf tebal'''.",
        "wlnote": "Di bawah ini adalah {{PLURAL:$1|perubahan|<strong>$1</strong> perubahan}} terakhir dalam {{PLURAL:$2|jam|<strong>$2</strong> jam}}, per $3, $4.",
        "block": "Blokir pengguna",
        "unblock": "Buka blokir pengguna",
        "blockip": "Blokir {{GENDER:$1|pengguna}}",
-       "blockip-legend": "Blokir pengguna",
        "blockiptext": "Gunakan formulir di bawah untuk memblokir akses penulisan dari sebuah alamat IP atau pengguna tertentu.\nIni hanya boleh dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan]].\nMasukkan alasan Anda di bawah (contoh, menuliskan nama halaman yang telah divandalisasi).\nAnda dapat memblok rentang IP menggunakan [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.",
        "ipaddressorusername": "Alamat IP atau nama pengguna:",
        "ipbexpiry": "Kedaluwarsa:",
        "ipb_blocked_as_range": "Kesalahan: IP $1 tidak diblokir secara langsung dan tidak dapat dilepaskan. IP $1 diblok sebagai bagian dari pemblokiran kelompok IP $2, yang dapat dilepaskan.",
        "ip_range_invalid": "Blok IP tidak sah.",
        "ip_range_toolarge": "Rentang blok lebih besar dari /$1 tidak diperbolehkan.",
+       "ip_range_toolow": "Rentang IP secara efektif tidak diizinkan.",
        "proxyblocker": "Pemblokir proxy",
        "proxyblockreason": "Alamat IP Anda telah diblokir karena alamat IP Anda adalah ''proxy'' terbuka. Silakan hubungi penyedia jasa internet Anda atau dukungan teknis dan beritahukan mereka masalah keamanan serius ini.",
        "sorbs": "DNSBL",
        "delete_and_move_text": "Halaman yang dituju, \"[[:$1]]\", telah berisi.\nApakah Anda ingin menghapusnya untuk memberikan ruang bagi pemindahan?",
        "delete_and_move_confirm": "Ya, hapus halaman tersebut",
        "delete_and_move_reason": "Dihapus untuk mengantisipasikan pemindahan halaman dari \"[[$1]]\"",
-       "selfmove": "Pemindahan halaman tidak dapat dilakukan karena judul sumber dan judul tujuan sama.",
+       "selfmove": "Tidak dapat memindahkan halaman, karena judul sumber dan judul tujuan sama.",
        "immobile-source-namespace": "Tidak dapat memindahkan halaman dalam ruang nama \"$1\"",
        "immobile-target-namespace": "Tidak dapat memindahkan halaman ke ruang nama \"$1\"",
        "immobile-target-namespace-iw": "Pranala interwiki bukanlah target yang valid untuk pemindahan halaman.",
index 293138f..f444927 100644 (file)
@@ -59,7 +59,6 @@
        "underline-never": "Saan uray kaanoman",
        "underline-default": "Kudil wenno kasisigud a pagbasabasa",
        "editfont-style": "Estilo ti kita ti letra ti pagurnosan a lugar:",
-       "editfont-default": "Kasisigud a pagbasabasa",
        "editfont-monospace": "Monospaced a kita ti letra",
        "editfont-sansserif": "Sans-serif a kita ti letra",
        "editfont-serif": "Serif a kita ti letra",
        "explainconflict": "Adda sabali a nagsukat iti daytoy a panid idi nangrugika a nagurnos.\nTi akinngato a lugar ti teksto ket aglaon ti teksto ti panid iti agdama kaaddana.\nDagiti sinukatam ket maipakita iti akinbaba a lugar ti teksto.\nNasken nga itiponmonto dagiti sinukatam iti adda a teksto.\nTi <strong>laeng</strong> teksto iti akinngato a lugar ti teksto ti maidulinto no talmegam ti \"$1\".",
        "yourtext": "Ti tekstom",
        "storedversion": "Rebision a naidulin",
-       "nonunicodebrowser": "<strong>Ballaag: Ti pabasabasam ket saan a maitunos iti Unicode .</strong>\nAdda sabali a mausar tapno makaurnoska kadagiti panid: Ti saan nga-ASCII a karakter ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
        "editingold": "<strong>Ballag: Ur-urnosem ti daan a rebision iti daytoy a panid.</strong>\nNo idulinmo, mapukawto ti ania man a naaramid a binaliwan manipud iti daytoy a rebision.",
        "yourdiff": "Paggigiddiatan",
        "copyrightwarning": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket naikeddeng a naipablaak babaen ti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). \nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan.\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
        "recentchanges-submit": "Ipakita",
        "rcfilters-legend-heading": "<strong>Listaan dagiti pangyababaan:</strong>",
-       "rcfilters-other-review-tools": "<strong>Dagiti sabali pay a pangrepaso a ramit</strong>",
+       "rcfilters-other-review-tools": "Dagiti sabali pay a pangrepaso a ramit",
        "rcfilters-group-results-by-page": "Igrupo dagiti resulta babaen ti panid",
        "rcfilters-grouping-title": "Pannakaigrupo",
        "rcfilters-activefilters": "Dagiti aktibo a sagat",
        "rcfilters-liveupdates-button": "Dagiti agdama a panagpabaro",
        "rcfilters-liveupdates-button-title-on": "Iddepen dagiti agdama a panagpabaro",
        "rcfilters-liveupdates-button-title-off": "Ipakita dgaiti baro a sinuksukatan bayatda a mapaspasamak",
-       "rcfilters-watchlist-markSeen-button": "Markaan amin a sinuksukatan a kas nakitan",
+       "rcfilters-watchlist-markseen-button": "Markaan amin a sinuksukatan a kas nakitan",
        "rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
        "rclistfromreset": "Isaad manen ti panagpili ti petsa",
        "rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $2, $3",
        "block": "Serraan ti agar-aramat",
        "unblock": "Ikkaten ti serra ti agar-aramat",
        "blockip": "Serraan ti {{GENDER:$1|agar-aramat}}",
-       "blockip-legend": "Serraan ti agar-aramat",
        "blockiptext": "Usaren ti porma dita baba tapno maserraan ti panagserrek ti panagsurat manipud iti naisangayan nga adres ti IP wenno nagan ti agar-aramat.\nDaytoy ket nasken laeng a maaramid tapno mapawilan ti bandalismo, ken segun iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkabil ti naisangayan a rason dita baba (kas pagarigan, ti panagdakamat kadagiti naisangayan a panid a nabandalismo).\nMabalinmo a serraan dagiti sakup ti adres ti IP babaen ti panagusar ti sintaksis ti [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; ti kadakkelan a maipalubos a sakup ket /$1 para iti IPv4 ken /$2 para iti IPv6.",
        "ipaddressorusername": "Adres ti IP wenno nagan ti agar-aramat:",
        "ipbexpiry": "Agpaso:",
index abe2639..1c3ef02 100644 (file)
@@ -68,7 +68,7 @@
        "friday": "пӀаьраска",
        "saturday": "шоатта",
        "sun": "КIиранди",
-       "mon": "Ор",
+       "mon": "Орш",
        "tue": "Шин",
        "wed": "Кх",
        "thu": "Ер",
        "december-date": "Чан-тар $1",
        "period-am": "ДЦ",
        "period-pm": "ДТ",
-       "pagecategories": "{{PLURAL:$1|1=Ð\9aаÑ\82егоÑ\80и|Ð\9aаÑ\82егоÑ\80еш}}",
-       "category_header": "«$1» категори чура оагIонаш",
-       "subcategories": "Ð\9aIалкаÑ\82егоÑ\80еш",
-       "category-media-header": "\"$1\" Категори чура файлаш",
-       "category-empty": "''Ð\95Ñ\80 ÐºÐ°Ñ\82егоÑ\80и хӀанза яьсса я (цхьаккха оагIонаш е файлаш йоацаш).''",
-       "hidden-categories": "{{PLURAL:$1|1=Ð\9aÑ\8aайла ÐºÐ°Ñ\82егоÑ\80и|Ð\9aÑ\8aайла ÐºÐ°Ñ\82егоÑ\80еш}}",
+       "pagecategories": "{{PLURAL:$1|1=Ð\9eагIаÑ\82\9eагIаÑ\82аш}}",
+       "category_header": "«$1» яхача оагIата чура оагIонаш",
+       "subcategories": "Ð\9aIалоагIаÑ\82аш",
+       "category-media-header": "\"$1\" яхача оагIата чура файлаш",
+       "category-empty": "''Ð\95Ñ\80 Ð¾Ð°Ð³IаÑ\82 хӀанза яьсса я (цхьаккха оагIонаш е файлаш йоацаш).''",
+       "hidden-categories": "{{PLURAL:$1|1=Ð\9aÑ\8aайла Ð¾Ð°Ð³IаÑ\82\9aÑ\8aайла Ð¾Ð°Ð³IаÑ\82аш}}",
        "hidden-category-category": "Къайла категореш",
-       "category-subcat-count": "{{PLURAL:$2|УкÑ\85 ÐºÐ°Ñ\82егоÑ\80и Ñ\87Ñ\83 Ñ\8f Ð°Ð»Ñ\85Ñ\85а ÐµÑ\80 ÐºIалÑ\85аÑ\80а ÐºÐ°Ñ\82егоÑ\80и.|УкÑ\85 ÐºÐ°Ñ\82егоÑ\80и Ñ\87Ñ\83 $2-нен Ñ\8eкÑ\8aе $1 {{PLURAL:$1|кIалÑ\85аÑ\80а ÐºÐ°Ñ\82егоÑ\80и|кIалÑ\85аÑ\80а ÐºÐ°Ñ\82егоÑ\80еÑ\88}} Ñ\8f}}",
+       "category-subcat-count": "{{PLURAL:$2|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ñ\8f Ð°Ð»Ñ\85Ñ\85а ÐµÑ\80 ÐºIалоагIаÑ\82.|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ð³Ñ\83Ñ\88 Ñ\8f $2-нен Ñ\8eкÑ\8aеÑ\80а $1 {{PLURAL:$1|кIалоагIаÑ\82}} }}",
        "category-subcat-count-limited": "Укх категори чу {{PLURAL:$1|кIалхара категори|$1 кIалхара категореш}} я.",
-       "category-article-count": "{{PLURAL:$2|УкÑ\85 ÐºÐ°Ñ\82егоÑ\80и Ñ\87Ñ\83 Ñ\86аI Ð¼Ð°Ñ\80а Ð¾Ð°Ð³IÑ\83в Ñ\8fÑ\86.|УкÑ\85 ÐºÐ°Ñ\82егоÑ\80и Ñ\87Ñ\83 Ñ\8f $2 Ð¾Ð°Ð³Ó\80Ñ\83в, Ñ\86аÑ\80еÑ\85 Ð¾Ð°Ð³Ó\80онгаÑ\85Ñ\8c {{PLURAL:$1|Ñ\85Ñ\8cагойÑ\82а $1 оагӀув}}}}",
+       "category-article-count": "{{PLURAL:$2|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ñ\86аI Ð¼Ð°Ñ\80а Ð¾Ð°Ð³IÑ\83в Ñ\8fÑ\86.|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ñ\8f $2 Ð¾Ð°Ð³Ó\80Ñ\83в, Ñ\86аÑ\80еÑ\85 Ð¾Ð°Ð³Ó\80онгаÑ\85Ñ\8cа {{PLURAL:$1|Ñ\85Ñ\8cагойÑ\82 $1 оагӀув}}}}",
        "category-article-count-limited": "Укх категори чу {{PLURAL:$1|$1 оагӀув я|1=цаI оагӀув мара яц}}.",
-       "category-file-count": "{{PLURAL:$2|УкÑ\85 ÐºÐ°Ñ\82агоÑ\80и Ñ\87Ñ\83 Ñ\86аI Ð¼Ð°Ñ\80а Ñ\84айл Ñ\8fÑ\86.|{{PLURAL:$1|1=$1 Ñ\84айл Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85аÑ\88 Ñ\8f|$1 Ñ\84айл Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85аÑ\88 Ñ\8f}} Ñ\83кÑ\85 ÐºÐ°Ñ\82егоÑ\80и $2 Ð´Ð¾Ð»Ð°Ñ\87аÑ\80\85.}}",
+       "category-file-count": "{{PLURAL:$2|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ñ\86аI Ð¼Ð°Ñ\80а Ñ\84айл Ñ\8fÑ\86.|УкÑ\85 Ð¾Ð°Ð³IаÑ\82а Ñ\87Ñ\83 Ð´Ð¾Ð»Ñ\87а $2 Ñ\84айлаÑ\85 {{PLURAL:$1|1=Ñ\85Ñ\8cагойÑ\82 $1 Ñ\84айл}} }}",
        "category-file-count-limited": "Укх категори чу {{PLURAL:$1|$1 файл|$1 файлаш|1=цаI мара файл яц}}.",
        "listingcontinuesabbrev": "(дIахо)",
        "index-category": "Индекс оттаеш оагIонаш",
        "faq": "КТХ",
        "actions": "Ардамаш",
        "namespaces": "ЦIерий аренаш",
-       "variants": "Ð\92аÑ\80ианÑ\82аш",
+       "variants": "ЭÑ\80Ñ\88аш",
        "navigation-heading": "Навигацен меню",
        "errorpagetitle": "ГӀалат",
        "returnto": "Укх $1 оагIона тIа юхагӀо.",
        "ok": "Мега",
        "retrievedfrom": "Хьаст — «$1»",
        "youhavenewmessages": "{{PLURAL:$3|Хьога денад}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Хьога кхаьчад}} $1 {{PLURAL:$3|1=$3 доакъашхочунгара|$3 доакъашхоштагара|1=кхыволча доакъашхочунгара}} ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|керда хоам|999=керда хоамаш}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|тӀехьара хувцам|999=тӀехьара хувцамаш}}",
        "youhavenewmessagesmulti": "Хьога кхаьчад керда хоамаш $1 чу",
        "nstab-mediawiki": "Хоамбар",
        "nstab-template": "Ло",
        "nstab-help": "Новкъостал",
-       "nstab-category": "Ð\9aаÑ\82егоÑ\80и",
+       "nstab-category": "Ð\9eагIаÑ\82",
        "mainpage-nstab": "Керттера",
        "nosuchaction": "Цу тайпара ардам дац",
        "nosuchspecialpage": "Изза мо гIулакха оагӀув яц",
+       "nospecialpagetext": "<strong>Iа леха белха оагӀо йолаш яц.</strong>\n\nЙолаш йолча белха оагӀонай хьаяьзъяр: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "ГӀалат",
        "databaseerror-query": "ДIадехар: $1",
        "databaseerror-function": "Функци: $1",
        "viewsource-title": "Оагӏон $1 духхьара текстага хьажар",
        "actionthrottled": "Сухалах доазув дар",
        "protectedpagetext": "Ер оагIув лораяь я цу тIа хувцамаш е кхы дола ардамаш дергдоацаш.",
+       "viewsourcetext": "Укх оагIон доладалара (чура) текста бIаргатоха а кеп яьккха а йиш я хьа.",
        "virus-unknownscanner": "йовзанза антивирус:",
        "welcomeuser": "Маьрша воагIалва, доакъашхо $1!",
        "yourname": "Дагара йоазон цIи:",
        "summary-preview": "Хувцама сурт оттадара хьалхе бIаргтохар:",
        "subject-preview": "Теман/кортбара хьалххе бIаргтохар:",
        "blockedtitle": "Доакъашхочун чIега техаб",
+       "blockedtext": "<strong>Хьа дагара йоазон е IP-адреса блоктехай.</strong>\n\nБлоктохар даьд $1 яхача администраторо.\nБелгалдаьд ер бахьан: «<em>$2</em>».\n\n* Блоктохара дух: $8\n* Блоктохара чаккхе: $6\n* Блоктохара дагалоаттам: $7\n\nХьа аьттув ба $1-ца е моллагIа кхыволча [[{{MediaWiki:Grouppage-sysop}}|администраторца]] бувзаме вала блоктохар тахкар духьа.\nТеркал делахь, хьа йиш хургьяц «письмо участнику» яхача функцех пайда эца, нагахьа санна хьай [[Special:Preferences|персональни настройкаш]] чу нийса дола электронни поштан адрес белгалдаькха деце, е нагахьа санна хьона теха блока чу цу тайпара каьхат дахьийтар могадаь деце.\nХьа IP-адрес — $3, блоктохара идентификатор — $5.\nБоккъала, белгалдаха уж хоамаш (дараш) Iайха моллагIа каьхат дохьийтача хана.",
        "blockednoreason": "бахьан белгалдаьккха дац",
        "loginreqlink": "довзийта",
        "loginreqpagetext": "Оаш шоаш $1 деза кхыйола оагIонашка хьожаргдолаш.",
        "accmailtitle": "КъайладIоагӀа дӀадахьийтад",
        "newarticle": "(Kерда)",
        "newarticletext": "Шо тIахьожаяргаца дехьадаьннад йоаца оагӀон тӀа.\nИз хьакхолларгьйолаш кӀалхагӀа доала корачу текст Iочуязде (нагахьа санна кхетаде хала дале [$1 новкъосталара оагӀонга] хьажа).\nЦа ховш укхаза нийсденнадале, шоай браузера '''Юха''' (назад) тоIаер тӀа пӀелг тоӀабе.",
+       "anontalkpagetext": "----\n<em>Ер я дагара йоазув кхы а хьакхолланза вовзаш воацача доакъашхочун дувца оттадара оагIув.</em>\nПоэтому мы вынуждены для его/её идентификации использовать цифровой IP-адрес.\nЭтот же адрес может использоваться нескольким другим участникам.\nЕсли вы анонимный участник и полагаете, что получили сообщения, адресованные не вам, пожалуйста, [[Special:CreateAccount|создайте учётную запись]] или [[Special:UserLogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими анонимными участниками.",
        "noarticletext": "ХIанза укх оагӀон тӀа текст яц.\nШун аьттув ба [[Special:Search/{{PAGENAME}}|цу тайпара цӀи хьоаяр кораде]] кхыйола оагIонаш тIа, иштта\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола тептарий дIаяздаьраш], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув хьакхолла]'''</span>.",
        "noarticletext-nopermission": "ХIанз укх оагӀон тӀа текст яц.\nШун аьттув ба [[Special:Search/{{PAGENAME}}|цу тайпара цӀи белгалъяр хьалаха]] кхыйола оагIонаш тIа, иштта\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола тептарай дIаяздаьраш].</span> Ер оагӀув хьакхолла Хьа бокъо яц.",
        "userpage-userdoesnotexist-view": "«$1» яха дагара йоазув дац.",
+       "clearyourcache": "<strong>Теркал де.</strong> Хетаргахьа, оагIув дIаязъяь яьлча шоай браузера кэш IоцIанъе езаргья шун, даь хувцамаш гургдолаш.\n* <strong>Firefox / Safari:</strong> <em>Shift</em> яха лак тоIояь лоаттаеш инструментий цхьа дакъа тIа тоIае <em>Обновить</em> е <em>Ctrl-F5</em> тоIае е <em>Ctrl-R</em> (<em>⌘-R</em> Mac тIа)\n* <strong>Google Chrome:</strong> ТоIае <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> Mac тIа)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> яха лак тоIояь лоаттаеш, тоIае <em>Обновить</em> е <em>Ctrl-F5</em> тоIае\n* <strong>Opera:</strong> ДехьагIо <em>Menu → Настройки</em> (<em>Opera → Настройки</em> Mac тIа), тIаккха <em>Безопасность → Очистить историю посещений → Кэшированные изображения и файлы</em>",
        "note": "'''Белгалдоахар:'''",
        "previewnote": "'''Теркам бе, ер хьалххе бIаргтохар мара бац.'''\nХьа хувцамаш хIанза а дIаяздаь дац!",
        "continue-editing": "Хувцар кхы дIахо де",
        "template-protected": "(лорадаь да)",
        "template-semiprotected": "(цхьа долча даькъе гIо оттадаь да)",
        "hiddencategories": "Ер оагIув {{PLURAL:$1|$1 къайла категориех|1=цаI къайла категорех}} я:",
+       "permissionserrors": "ТӀакхоачилга бокъоний гӀалат",
        "permissionserrorstext-withaction": "Ер $2 де Хьа бокъо яц {{PLURAL:$1|1=из бахьан долаш|из бахьанаш долаш}}:",
        "recreate-moveddeleted-warn": "'''Теркам бе. Хьо юхакхолла гӀерта хьалха дIаяьккха хинна оагӀув.'''\n\nДIатахка, боккъонца эший хьона из оагIув юхакхолла.\nКӀалхагIа хьекха да укх оагӀон дӀадаккхари цӀи хувцари тептараш.",
-       "moveddeleted-notice": "Ер оагӀув дӀаяккха хиннай.\nНовкъостала, кӀалха хьахьекха да дӀадаккхама а хувцама а тептарашкара дIаяздаьраш.",
+       "moveddeleted-notice": "Ер оагӀув дӀаяьккха хиннай.\nШоана новкъостала кӀалха хьахьекха да укх оагIонца дувзаденна тептараш.",
        "log-fulllog": "БIаргтоха таптарага бIарчча",
        "edit-conflict": "Хувцама вIашдухьалъоттам.",
+       "content-model-wikitext": "вики-текст",
        "post-expand-template-inclusion-warning": "<strong>Хьалхдаккхар:</strong> юкъебаьккха лерий жамIа боарам сов боккха ба. Цхьаццабола лераш хьалсага хургбац.",
        "post-expand-template-inclusion-category": "Ший чулоацача лерий мегаш бола боарам совбаьнна йола оагӀонаш",
        "post-expand-template-argument-warning": "'''Теркам бе:''' укх оагIон чу даржар сов доккха дола белгало (аргумент) йолаш тешаме цаI ло ба.\nЦу тайпара белгалонаш гучадаьккха дац.",
        "post-expand-template-argument-category": "Лерий теркал яь йоаца белгалонаш (аргументаш) чулоацаш оагӀонаш",
+       "undo-failure": "Ер нийсдар юхадаккха йиш яц юкъе даь хувцамаш бахьане",
        "viewpagelogs": "Укх оагӀон тептараш хьахьокха",
        "currentrev-asof": "тӀеххьара верси $1",
        "revisionasof": "Верси $1",
        "mergehistory-submit": "ВIашагIхотта нийсдараш",
        "mergehistory-empty": "Корадинзар нийсдараш вIашагIхоттадерглолаш.",
        "mergehistory-reason": "Бахьан:",
+       "mergelog": "ВIашагIтеха хиннарий тептар",
        "revertmerge": "Дéкъа",
        "history-title": "\"$1\" — хувцамай истори",
        "difference-title": "$1 — версешта юкъе йола башхало",
        "editundo": "юхадаккха",
        "diff-empty": "(башхалонаш яц)",
        "diff-multi-sameuser": "({{PLURAL:$1|цхьа юкъ хулаш йола верси|$1 юкъ хулаш йола версеш}} гуш яц цу доакъашхочун)",
+       "diff-multi-otherusers": "(Укх {{PLURAL:$2|цхьан доакъашхочун|$2 доакъашхой}} \n{{PLURAL:$1|юккъера верси гайтаяц|юккъера версеш гайтаяц}})",
        "searchresults": "Лахар чакхдоалаш корадаьр",
        "searchresults-title": "«$1» лахар",
        "notextmatches": "ОагIонай тексташта юкъе цхьатара хилар дац",
        "nextn-title": "{{PLURAL:$1|ТIадоагIа $1 яздар|ТIадоагIа $1 яздараш}}",
        "shown-title": "Гойта $1 {{PLURAL:$1|яздаьр|яздаьраш}} укх оáгIон тIа",
        "viewprevnext": "ДIахьажа ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''Укх вики чу йолаш я оагӀув «[[:$1]]».'''",
+       "searchmenu-exists": "<strong>Укх вики чу йолаш я оагӀув «[[:$1]]».</strong> {{PLURAL:$2|0=|Иштта хьажа кхы а кораяьча оагIонашка.}}",
        "searchmenu-new": "<strong>Хьакхолла оагIув «[[:$1]]» укх вики-проекте!</strong>\n{{PLURAL:$2|0=|Иштта хьажа Iайха лийха оагIонга.|Иштта хьажа хьай лахара хьахиннарашка.}}",
        "searchprofile-articles": "Кертера оагIонаш",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything-tooltip": "Массайола оагIонаш тIа лахар (дувцар оттадара оагIонаш чулоацаш)",
        "searchprofile-advanced-tooltip": "Iочуязаяь цIерий аренашка лаха",
        "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешаш}})",
-       "search-result-category-size": "$1 {{PLURAL:$1|Ñ\8eкÑ\8aедаÑ\85аÑ\80}} ($2 {{PLURAL:$2|кIалкаÑ\82егоÑ\80и}}, $3 {{PLURAL:$3|файл}})",
+       "search-result-category-size": "$1 {{PLURAL:$1|Ñ\8eкÑ\8aедаÑ\85аÑ\80}} ($2 {{PLURAL:$2|кIалоагIаÑ\82}}, $3 {{PLURAL:$3|файл}})",
        "search-redirect": "(дIа-хьахьожадар $1 тIара)",
        "search-section": "(дáкъа «$1»)",
        "search-file-match": "(цхьатара хул файла чударца)",
        "rightslog": "Доакъашхочун бокъоний тéптар",
        "action-read": "ер оагӀув éшар",
        "action-edit": "ер оагIув хувцар",
+       "action-createaccount": "ер дагара йоазув кхоллар",
        "nchanges": "$1 {{PLURAL:$1|хувцам}}",
        "enhancedrc-history": "истори",
        "recentchanges": "Керда хувцамаш",
        "recentchanges-legend": "Керда хувцамий гIирсаш тоаяраш",
        "recentchanges-summary": "КIалхагIа ханашца нийсдаь дIаяьздаь да {{grammar:genitive|{{SITENAME}}}}  оагIонай тIеххьара хувцамаш.",
+       "recentchanges-noresult": "Белгалъяьча хана цхьаккха хувцамаш даь хинна дац.",
        "recentchanges-feed-description": "Хьéжа укх потоке вики чу тIехьара хувцамашка.",
        "recentchanges-label-newpage": "Укх хувцамаца керда оагIув кхелла хиннай",
        "recentchanges-label-minor": "Ер зIамига хувцам ба",
        "rc-change-size-new": "Хувцам баьнначул тӀехьагIа бола боарам: $1 {{PLURAL:$1|байт}}",
        "rc-enhanced-expand": "Хьахьокха ма дарра",
        "rc-enhanced-hide": "Къайладаккха ма дарра дар",
+       "rc-old-title": "духхьара кхелла хиннай «$1» цӀи йолаш",
        "recentchangeslinked": "ВIашагIдувзаденна нийсдараш",
        "recentchangeslinked-feed": "ВIашагIдувзаденна нийсдараш",
        "recentchangeslinked-toolbox": "ВIашагIдувзаденна хувцамаш",
        "filehist-datetime": "Таьрахь/Ха",
        "filehist-thumb": "ЗIамигасурт",
        "filehist-thumbtext": "ЗIамига сурт укх версин $1",
+       "filehist-nothumb": "Миниатюра яц",
        "filehist-user": "Доакъашхо",
        "filehist-dimensions": "Файла боарам",
        "filehist-filesize": "Файла боарам",
        "filehist-comment": "Белгалдаккхар",
        "imagelinks": "Файлах пайда эцар",
        "linkstoimage": "{{PLURAL:$1|1=ТIехьайоагIача $1 оагIо тIахьожаву|ТIехьайоагIача $1 оагIонаш тIахьожаву}} укх файла тIа:",
+       "linkstoimage-more": "$1-ннел дуккхагIа {{PLURAL:$1|оагIув}} я укх файла тIахьожавеш.\nУкх хьаязъяьра чу белгалъяй цу файла {{PLURAL:$1|алхха $1 тIахьожаярг}}.\nТIакхача йиш я иштта [[Special:WhatLinksHere/$2|бIарчча хьаязъяьра]].",
        "nolinkstoimage": "Укх файла тIахьожавеш йола оагIонаш яц.",
+       "linkstoimage-redirect": "$1 (файлан дӀа-сахьожадар) $2",
        "sharedupload": "Ер файл $1 чура я, из пайда эцаш лелае мегаш я кхыйола проекташ чу.",
        "sharedupload-desc-here": "Ер файл $1 чура я, иштта кхыйола проекташ чу пайда эца аьттув болаш я.\nЦун [$2 сурт оттадара оагIон] хоам кIалхахь хьабоалабаьб.",
        "filepage-nofile": "Ишта цӀи йола файл йоацаш я.",
        "statistics": "Статистика",
        "statistics-articles": "Статьяш",
        "statistics-pages": "ОагIонаш",
+       "double-redirect-fixer": "ДӀа-сахьожадараш тоадер",
        "brokenredirects-edit": "нийсъе",
        "brokenredirects-delete": "дӀаяккха",
        "withoutinterwiki-submit": "Хьахьокха",
        "shortpages": "Лоаца оагIонаш",
        "longpages": "ЙIаьха оагIонаш",
        "protectedpages-page": "ОагIув",
+       "listusers": "Доакъашхой хьаязъяьр",
        "usercreated": "{{GENDER:$3|система чу дӀаязвеннав|система чу дӀаязъяннай}} $1 $2",
        "newpages": "Керда оагIонаш",
        "move": "ЦIи хувца",
        "booksources": "Джейнай хьасташ (источники)",
        "booksources-search-legend": "Джейнах лаьца хоам лахар",
        "booksources-search": "Хьалáха",
+       "specialloguserlabel": "Доакъашхо:",
+       "speciallogtitlelabel": "Эшар (цӀи е доакъашхо):",
        "log": "Тептараш",
        "all-logs-page": "Деррига тIакхача йиш йола тептараш",
+       "alllogstext": "{{SITENAME}} сайта тептарий юкъара хьаязъяьр.\nХьа йиш я хьахиннар хьахаржа тептара тайпах, доакъашхочун цIера тайпах (регистр лоархIаш я) е хьахаяьча оагIон тайпах (регистр лоархIаш я).",
        "logempty": "Укх оагӀон дӀаяздаьраш тептара чу дац.",
        "allpages": "Еррига оагIонаш",
        "prevpage": "Хьалха йоагIа оагIув ($1)",
        "allpagesto": "Араяккхар соцадé укх тӀа:",
        "allarticles": "Еррига оагIонаш",
        "allpagessubmit": "Кхоачашде",
-       "categories": "Категореш",
+       "allpages-hide-redirects": "Къайладаха дӀа-сахьожадараш",
+       "categories": "ОагIаташ",
        "linksearch": "Арахьара тIахьожаяргаш лахар",
        "linksearch-ns": "ЦIерий аренаш:",
        "linksearch-ok": "Хьалáха",
        "listgrouprights-members": "(доакъашхой хьаязъяьр)",
        "listgrouprights-namespaceprotection-namespace": "ЦIерий аре",
        "emailuser": "Доакъашхочоа каьхат",
+       "usermessage-editor": "Системан дIакхоачадар",
        "watchlist": "Зем бара хьаязъяьр",
        "mywatchlist": "Зем бара хьаязъяьр",
        "watchlistfor2": "Цунна $1 $2",
        "watchthispage": "Зем бе укх оагӀон",
        "unwatch": "Ма бе зем",
        "notanarticle": "Статья яц",
-       "watchlist-details": "Хьа зем бара хьаязъяьр чу $1 {{PLURAL:$1|оагIув}} я, дувца оттадара оагIонаш ца лоархIаш.",
+       "watchlist-details": "Хьа зем бара хьаязъяьр чу $1 {{PLURAL:$1|оагIув}} я (иштта дувца оттадара оагIонаш а).",
+       "wlheader-showupdated": "Хувцаенна оагIонаш '''сома''' шрифтаца белгалъяьй.",
+       "wlnote": "КIалха хьагойт {{PLURAL:$2|тIехьарча сахьата|тIехьарча <strong>$2</strong> сахьата}} даь хинна {{PLURAL:$1|тIеххьара хувцам|тIеххьара <strong>$1</strong> хувцам}} ($3 $4).",
        "wlshowlast": "Хьахьокха тIехьара $1 сахьатах $2 дийнахь",
        "watchlist-options": "Зем бара хьаязъяьра тоадараш",
        "watching": "Зем бара хьаязъяьр чу тIатохар",
        "unwatching": "Зем бара хьаязъяьр чура дIадаккхар",
+       "enotif_reset": "Белгалъе еррига оагӀонаш бIаргтеха санна",
        "deletepage": "ДIаяккха оагIув",
        "confirmdeletetext": "Оаш дIадийхад бIарчча дIадаккхар оагIон а (е сурта), цун деррига хувцара истори а. '''Дехар да''', бакъде шоай из бокъонца де безам болаш долга а, из дича хургдар кхеташ долга а, из дар укх [[{{MediaWiki:Policy-url}}|бокъонашца]] долга.",
        "actioncomplete": "Ардам кхоачашдаьд",
        "mycontris": "Са къахьегам",
        "anoncontribs": "Къахьегам",
        "contribsub2": "Къахьегам {{GENDER:$3|$1}} ($2)",
+       "nocontribs": "ДIадийха хувцамаш корадаьдац",
        "uctop": "(карара)",
        "month": "Укх бетт (кхы хьалхагIа)",
        "year": "Укх шер (кхы хьалхагIа):",
        "sp-contributions-search": "Къахьегама лахар",
        "sp-contributions-username": "IP-адрес е доакъашхочун цӀи:",
        "sp-contributions-toponly": "Гойта алхха тIехьара версеш санна лоархIаш дола нийсдараш",
+       "sp-contributions-newonly": "ОагIонаш кхоллара мара хувцамаш ма гойта.",
        "sp-contributions-submit": "Хьалáха",
        "whatlinkshere": "ТIахьожаяргаш укхаза",
        "whatlinkshere-title": "\"$1а\" тIахьожавеш йола оагIонаш",
        "ipboptions": "2 сахьат:2 hours,1 ди:1 day,3 ди:3 days,1 кIира:1 week,2 кIира:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шу:1 year,хоадаяь ха йоаца:infinite",
        "ipblocklist": "ЧIега теха доакъашхой",
        "ipblocklist-submit": "Хьалáха",
+       "infiniteblock": "хайоацаш",
        "blocklink": "чIегa тоха",
        "unblocklink": "чIега баста",
        "change-blocklink": "ЧIега тохар хувца",
        "contribslink": "къахьегам",
        "blocklogpage": "ЧIегаш тoхара таптар",
        "blocklogentry": "укхан [[$1]] чIега техаб $2 чакхдалалца $3",
+       "reblock-logentry": "[[$1]] доакъашхочун теха блок хийцай $2 даллалца $3",
        "unblocklogentry": "чIега баьстаб $1",
        "block-log-flags-nocreate": "дагара йоазонаш кхоллар пурам деннадац",
+       "proxyblocker": "Проксинна блок тохар",
        "move-page-legend": "ОагIон цIи хувцар",
        "movepagetext": "КIалха белгаляьча формах пайда ийца Iа оагIон цIи хувцаргья, цун хувцамий тептар кхыйола моттиге оттаярца цхьанна.\nКъаьнарча цIерах хургья кердача цIера дIа-сахьожадар.\nХьа аьттув ба къаьнарча цIера хинна дIа-сахьожадараш ше-ше кердадаккха.\nНагахьа санна Iа из ца дой, дехар ду, [[Special:DoubleRedirects|шолха]]  а [[Special:BrokenRedirects|хеттанза дIа-сахьожадараш]] долаш дий тахка.\nХьо бехктокхаме ва тIахьожаяргаш шоаш тIахьожаде дезача нийса хилар.\n\nТеркам бе, оагIон цIи <strong>хувцалургьйоацалга</strong> нагахьа санна изза мо цIи йола оагIув йолаш яле. Чу хIама доацача оагIонашта е дIа-сахьожадарашта, кхы а цар хувцамий истори йице, из новкъа дац. Из яхилга да, нагахьа Iа харца цIи хувцар даь дале, ше хинна цIи юхадIахувца йиш я, амма бакъда йолаш йола оагIув ца ховш дIаяккха аьттув бац. \n\n<strong>Белгалдоахар:</strong>\nГIоряьннача оагIонай цIи хувцаро тIехдоккхеи цIаьххеи хувцамаш доаладе мега.\nБоккъала, дIахо хье дIавахалехьа, кхета, хила мегаш дар хургдолга.",
        "movepagetalktext": "Нагахьа санна Iа ер пункт белгалъйой, цунца бувзам бола дувца оттадара оагIув иштта ше-ше цIи хийца хургья, нагахьа санна изза мо цIи йола яьсса йоаца дувца оттадара оагIув йолаш йице.\n\nИз иштта дале, нагахьа из эшаш дале, Iайха оагIон  цIи дIахувца.",
        "thumbnail-more": "Хьадоаккхаде",
        "thumbnail_error": "ЗIамига сурт кхоллара гIалат: $1",
        "import-upload-filename": "Файла цӀи:",
+       "importlogpage": "Импорта тептар",
        "tooltip-pt-userpage": "{{GENDER:|Хьа}} доакъашхочун оагIув",
        "tooltip-pt-mytalk": "{{GENDER:|Хьа}} дувца оттадара оагIув",
        "tooltip-pt-preferences": "{{GENDER:|Хьа гIирсаш}}",
        "tooltip-ca-nstab-special": "Ер гIулакха оагIув я, из хувца бокъо яц",
        "tooltip-ca-nstab-project": "Проектан оагIув",
        "tooltip-ca-nstab-image": "Файла оагӀув",
+       "tooltip-ca-nstab-mediawiki": "MediaWiki хоамбара оагIув",
        "tooltip-ca-nstab-template": "Лера оагIув",
        "tooltip-ca-nstab-help": "Новкъостала оагIув",
-       "tooltip-ca-nstab-category": "Ð\9aаÑ\82егоÑ\80ен оагӀув",
+       "tooltip-ca-nstab-category": "Ð\9eагIаÑ\82а оагӀув",
        "tooltip-minoredit": "Ер хувцар кIезига дар санна белгалде",
        "tooltip-save": "Хьа хувцамаш лорадеш дIаязде",
        "tooltip-preview": "Дехар да, оагӀув лораешь дIаязъелехь из мишта я тахка хьалххе бIаргтохарах пайда эцаш!",
        "tooltip-undo": "Даь хувцар дIадаьккха, хьалххе бIаргтохар хьахьокха, дIадаккхара бахьан Iочуязде аьттув болаш.",
        "tooltip-summary": "Лоаца сурт оттадар Iочуязде",
        "simpleantispam-label": "Анти-спам тахкар.\n<strong>Цхьа</strong> хIама ма язъе укхаз!",
-       "pageinfo-hidden-categories": "{{PLURAL:$1|1=Къайла категори|Къайла категореш}} ($1)",
+       "pageinfo-title": "«$1» оагIонах лаьца дар",
+       "pageinfo-header-basic": "Кертера дараш",
+       "pageinfo-header-edits": "Хувцамий истори",
+       "pageinfo-header-restrictions": "ОагӀув лораяр",
+       "pageinfo-header-properties": "ОагӀон белгалонаш",
+       "pageinfo-display-title": "Гуш бола корта",
+       "pageinfo-default-sort": "Долча тайпара цхьалхадаккхара дIоагӀа",
+       "pageinfo-length": "ОагӀон йIоахал (байтах)",
+       "pageinfo-article-id": "ОагӀон ID",
+       "pageinfo-language": "ОагӀон мотт",
+       "pageinfo-content-model": "ОагӀон чудара модель",
+       "pageinfo-robot-policy": "Лахара роботашца йола индексаци",
+       "pageinfo-robot-index": "Могадаьд",
+       "pageinfo-robot-noindex": "Могадаьдац",
+       "pageinfo-watchers": "Зем беш болчар дуккхал",
+       "pageinfo-few-watchers": "{{PLURAL:$1|Зем бер}} $1-ннел кIезигагIа ба",
+       "pageinfo-redirects-name": "Укх оагӀонна дӀа-сахьожадарий дуккхал",
+       "pageinfo-subpages-name": "Укх оагӀон кIалоагӀонаш",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|дIа-сахьожадар}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})",
+       "pageinfo-firstuser": "ОагӀув кхеллар",
+       "pageinfo-firsttime": "ОагӀув кхелла хинна таьрахь",
+       "pageinfo-lastuser": "ТӀехьара хувцам баьр",
+       "pageinfo-lasttime": "ТӀехьара нийсдар даь хинна таьрахь",
+       "pageinfo-edits": "Дерригача нийсдарий дукхал",
+       "pageinfo-authors": "Башха авторий дукхал",
+       "pageinfo-recent-edits": "ТӀехьарча хана даь нийсдар (укх хана юкъе: $1)",
+       "pageinfo-recent-authors": "ТӀехьарча хана бола башха автораш",
+       "pageinfo-magic-words": "{{PLURAL:$1|1=Тамашийна дош|Тамашийна дешаш}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|1=Къайла оагIат}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|1=Ло|Лераш}} ($1)",
        "pageinfo-toolboxlink": "ОагIонах бола хоам",
+       "pageinfo-contentpage": "Счётчико чулацаме оагIув санна лоархI",
+       "pageinfo-contentpage-yes": "XIаа",
+       "patrol-log-page": "ТӀахьожама тептар",
        "previousdiff": "← Хьалхара нийсдар",
        "nextdiff": "ТIайоагIа нийсъар",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|оагӀув}}",
        "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель}}, файла боарам: $3, MIME-тайпа: $4",
+       "file-info-size-pages": "$1 × $2 пиксель, файлан боарам: $3, MIME-тайп: $4, $5 {{PLURAL:$5|1=оагӀув}}",
        "file-nohires": "Укхал дуккхагIа доккхал долаш верси яц",
        "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель}}, файлан боарам: $3",
        "show-big-image": "ДIадолалу файл",
        "namespacesall": "деррига",
        "monthsall": "деррига",
        "confirm_purge_button": "Мега",
+       "imgmultipagenext": "тӀехьайоагӀа оагӀув →",
        "imgmultigo": "Дехьавала!",
        "imgmultigoto": "$1 оагIон тIа дехьавала",
        "table_pager_limit_submit": "Кхоачашде",
+       "watchlisttools-clear": "IоцIанъе зем бара хьаязъяьр",
        "watchlisttools-view": "Хьаязъяьр чура оагIонаш тIа дола хувцамаш",
        "watchlisttools-edit": "Хьажа а хувца а хьаязъяьр",
        "watchlisttools-raw": "Массаза йола текст санна хувца",
        "version-specialpages": "ГIулакха оагӀонаш",
        "version-version": "($1)",
        "version-software-version": "Верси",
+       "redirect": "Файла идентификатора тIара, доакъашхочун тIара, оагIон тIара, версин е тептара тIара дIа-сахьожадар",
+       "redirect-summary": "Укх белха оагIо дIа-сахьожаву файла (файлан цIера тIара), оагIонна (оагIон тIара е оагIон эрша идентификатора тIара), доакъашхочун оагIонна (доакъашхочун таьрахьа идентификатора тIара) е тептара йоазонна (тептара идентификатора тIара). Пайда эцар: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] или [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Дехьавала",
        "redirect-lookup": "Лахар:",
        "redirect-value": "Боарам:",
        "tags-title": "Белгалонаш",
        "tags-tag": "Белгалон цӀи",
        "tags-hitcount-header": "Белгалдаь нийсдараш",
+       "tags-active-yes": "XIаа",
+       "tags-active-no": "A",
        "tags-edit": "нийсде",
        "tags-hitcount": "$1 {{PLURAL:$1|1=хувцам|хувцамаш}}",
        "tags-create-submit": "Хьакхолла",
        "htmlform-reset": "Хувцамаш юхадаккха",
        "htmlform-selectorother-other": "Кхыдар",
        "logentry-delete-delete": "$1 {{GENDER:$2|дIаяккхай}} оагIув $3",
+       "logentry-delete-restore": "$1 доакъашхочо {{GENDER:$2|юхаметтаоттаяьй}} $3 яха оагIув ($4)",
+       "logentry-delete-revision": "$1 цIи йолча доакъашхочо {{GENDER:$2|хийцай}} $3 яхача оагIон {{PLURAL:$5|$5 версин|1=версин}} гуш хилар: $4",
+       "revdelete-content-hid": "чулоацам къайлабаьккхаб",
        "logentry-move-move": "$1 {{GENDER:$2|цӀи хийцай}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀи хийцай}} $3 → $4 дӀа-сахьожадар ца дуташ.",
+       "logentry-move-move_redir": "$1 доакъашхочо $3 яхача оагIон {{GENDER:$2|цIи хийцай}} укхунах → $4 дӀа-сахьожадара тIагIолла.",
        "logentry-patrol-patrol-auto": "$1 ше-ше {{GENDER:$2|ха даь техкай}} $3 оагIон верси $4",
        "logentry-newusers-create": "{{GENDER:$2|Доакъашхочо хьакхеллад}} дагара йоазув $1",
+       "logentry-newusers-autocreate": "Ше-ше кхеллай {{GENDER:$2|доакъашхочун}} $1 дагара йоазув",
        "logentry-upload-upload": "$1 {{GENDER:$2|чуяьккхай}} $3",
+       "logentry-upload-overwrite": "$1 доакъашхочо {{GENDER:$2|чуяьккхай}} керда верси $3",
        "rightsnone": "(яц)",
        "searchsuggest-search": "Хьалаха {{grammar:prepositional|{{SITENAME}}}} чу",
+       "duration-days": "{{PLURAL:$1|ди}}",
        "expand_templates_preview": "Хьалххе бIаргтохар",
        "pagelang-name": "ОагIув",
        "special-characters-group-latin": "Латиной",
        "special-characters-group-cyrillic": "Кириллица",
        "special-characters-group-arabic": "Iарбий",
        "special-characters-group-persian": "Фаьрсий",
-       "special-characters-group-hebrew": "Жугтий"
+       "special-characters-group-hebrew": "Жугтий",
+       "randomrootpage": "Цаховш нийсъенна овлан оагӀув"
 }
index 8d3816e..4972ff4 100644 (file)
        "anonpreviewwarning": "<em>Non hai effettuato l'accesso. Salvando, il tuo indirizzo IP sarà registrato nella cronologia della pagina.</em>",
        "missingsummary": "<strong>Attenzione:</strong> non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"$1\" la modifica verrà salvata senza.",
        "selfredirect": "<strong>Attenzione:</strong> stai reindirizzando questa pagina a se stessa.\nPotresti aver indicato la destinazione errata per il redirect, o stai modificando la pagina sbagliata.\nSe fai clic nuovamente su \"$1\", il redirect sarà creato comunque.",
-       "missingcommenttext": "Inserire un commento qui sotto.",
+       "missingcommenttext": "Inserisci un commento.",
        "missingcommentheader": "<strong>Attenzione:</strong> non è stato specificato l'oggetto di questo commento. Premendo di nuovo \"$1\" la modifica verrà salvata senza.",
        "summary-preview": "Anteprima dell'oggetto della modifica:",
        "subject-preview": "Anteprima dell'oggetto:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceano Indiano",
        "timezoneregion-pacific": "Oceano Pacifico",
-       "allowemail": "Abilita la ricezione di messaggi email da altri utenti",
+       "allowemail": "Consenti ad altri utenti di inviarmi email",
        "email-blacklist-label": "Impedisci a questi utenti di inviarmi email:",
        "prefs-searchoptions": "Ricerca",
        "prefs-namespaces": "Namespace",
        "recentchanges-legend": "Opzioni ultime modifiche",
        "recentchanges-summary": "Questa pagina presenta le modifiche più recenti ai contenuti del sito.",
        "recentchanges-noresult": "Nessuna modifica durante il periodo inserito che soddisfa questi criteri.",
+       "recentchanges-network": "A causa di un errore tecnico, non è possibile caricare alcun risultato. Aggiorna la pagina.",
        "recentchanges-feed-description": "Questo feed riporta le modifiche più recenti ai contenuti del sito.",
        "recentchanges-label-newpage": "Creazione di una nuova pagina",
        "recentchanges-label-minor": "Modifica minore",
        "recentchanges-submit": "Mostra",
        "rcfilters-tag-remove": "Rimuovi '$1'",
        "rcfilters-legend-heading": "<strong>Elenco di abbreviazioni:</strong>",
-       "rcfilters-other-review-tools": "<strong>Altri strumenti di revisione</strong>",
+       "rcfilters-other-review-tools": "Altri strumenti di revisione",
        "rcfilters-group-results-by-page": "Raggruppa risultati per pagina",
        "rcfilters-grouping-title": "Raggruppamento",
        "rcfilters-activefilters": "Filtri attivi",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ora|ore}}",
        "rcfilters-highlighted-filters-list": "Evidenziato: $1",
        "rcfilters-quickfilters": "Filtri salvati",
-       "rcfilters-quickfilters-placeholder-title": "Nessun collegamento salvato ancora",
+       "rcfilters-quickfilters-placeholder-title": "Nessun filtro salvato ancora",
        "rcfilters-quickfilters-placeholder-description": "Per salvare le impostazioni del tuo filtro e riutilizzarle dopo, clicca l'icona segnalibro nell'area \"Filtri attivi\" qui sotto",
        "rcfilters-savedqueries-defaultlabel": "Filtri salvati",
        "rcfilters-savedqueries-rename": "Rinomina",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Crea filtro predefinito",
        "rcfilters-savedqueries-cancel-label": "Annulla",
        "rcfilters-savedqueries-add-new-title": "Salva le impostazioni attuali del filtro",
+       "rcfilters-savedqueries-already-saved": "Questi filtri sono già salvati. Modifica le impostazioni per creare un nuovo filtro salvato.",
        "rcfilters-restore-default-filters": "Ripristina i filtri predefiniti",
        "rcfilters-clear-all-filters": "Pulisci tutti i filtri",
        "rcfilters-show-new-changes": "Visualizza le modifiche più recenti",
-       "rcfilters-search-placeholder": "Filtra le ultime modifiche (naviga o inizia a digitare)",
+       "rcfilters-search-placeholder": "Filtra le modifiche (usa il menu o cerca il nome del filtro)",
        "rcfilters-invalid-filter": "Filtro non valido",
        "rcfilters-empty-filter": "Nessun filtro attivo. Sono mostrati tutti i contributi.",
        "rcfilters-filterlist-title": "Filtri",
        "rcfilters-filter-user-experience-level-unregistered-label": "Non registrato",
        "rcfilters-filter-user-experience-level-unregistered-description": "Contributori che non hanno effettuato l'accesso.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nuovi utenti",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Utenti registrati con meno di 10 modifiche e 4 giorni di attività.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Utenti registrati che hanno fatto meno di 10 modifiche o 4 giorni di attività.",
        "rcfilters-filter-user-experience-level-learner-label": "Principianti",
        "rcfilters-filter-user-experience-level-learner-description": "Utenti registrati il cui livello di esperienza è compreso tra \"Nuovi arrivati\" e \"Utenti esperti\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Utenti con esperienza",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Escludi selezionati",
        "rcfilters-exclude-button-on": "Escludendo selezionati",
-       "rcfilters-view-advanced-filters-label": "Filtri avanzati",
        "rcfilters-view-tags": "Modifiche etichettate",
        "rcfilters-view-namespaces-tooltip": "Filtra risultati per namespace",
        "rcfilters-view-tags-tooltip": "Filtra risultati per etichette di modifica",
        "uploaded-script-svg": "Trovato elemento di script \"$1\" nel file caricato in formato SVG.",
        "uploaded-hostile-svg": "Trovato CSS non sicuro nell'elemento di stile del file in formato SVG caricato.",
        "uploaded-event-handler-on-svg": "Impostazione gestione eventi ed attributi <code>$1=\"$2\"</code> non è consentito in file SGV",
-       "uploaded-href-attribute-svg": "attributi href in file SVG sono consentiti collegamenti solo verso destinazioni http:// o https://, trovato <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> elementi possono solo collegare (href) a data: (file incorporato), http:// o https://, o destinazioni fragment (#, stesso documento).  Per altri elementi, come <image>, solo data: e fragment sono consentiti. Prova ad incorporare le immagini quando esporti il tuo SVG. Trovato <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Trovati href a dati non sicuri: destinazione URI <code>&lt;$1 $2=\"$3\"&gt;</code> caricato nel file SVG",
        "uploaded-animate-svg": "Trovato il tag \"animate\" che potrebbe cambiare href, usando l'attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel file SVG caricato.",
        "uploaded-setting-event-handler-svg": "La configurazione di attributi per il gestore di eventi è bloccata, trovato <code>&lt;$1 $2=\"$3\"&gt;</code> nel file SVG caricato.",
        "uploadstash-refresh": "Aggiorna l'elenco dei file",
        "uploadstash-thumbnail": "vedi miniatura",
        "uploadstash-exception": "Impossibile memorizzare il caricamento in stash ($1): \"$2\".",
+       "uploadstash-bad-path-unknown-type": "Tipo sconosciuto \"$1\".",
+       "uploadstash-zero-length": "Il file ha lunghezza zero.",
        "invalid-chunk-offset": "Offset della parte non valido.",
        "img-auth-accessdenied": "Accesso negato",
        "img-auth-nopathinfo": "PATH_INFO mancante.\nIl server non è impostato per passare questa informazione.\nPotrebbe essere basato su CGI e non può supportare img_auth.\nVedi https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti a questo file:",
        "linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina punta|pagine puntano}} a questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che punta|le prime $1 pagine che puntano}} a questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
        "nolinkstoimage": "Nessuna pagina contiene collegamenti al file.",
-       "morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|altri link]] a questo file.",
+       "morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|altri collegamenti]] a questo file.",
        "linkstoimage-redirect": "$1 (reindirizzamento file) $2",
        "duplicatesoffile": "{{PLURAL:$1|Il seguente file è un duplicato|I seguenti $1 file sono duplicati}} di questo file ([[Special:FileDuplicateSearch/$2|ulteriori dettagli]]):",
        "sharedupload": "Questo file proviene da $1 e può essere utilizzato da altri progetti.",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Video",
        "mediastatistics-header-multimedia": "Contenuti multimediali",
-       "mediastatistics-header-office": "Ufficio",
+       "mediastatistics-header-office": "Documenti",
        "mediastatistics-header-text": "Testuali",
        "mediastatistics-header-executable": "File eseguibili",
        "mediastatistics-header-archive": "Formati compressi",
index ade5a16..cb1ff60 100644 (file)
@@ -85,7 +85,8 @@
                        "Thibaut120094",
                        "Translatealcd",
                        "Delim",
-                       "Hinaloe"
+                       "Hinaloe",
+                       "Phantomize"
                ]
        },
        "tog-underline": "リンクの下線:",
        "nocookieslogin": "{{SITENAME}}ではログインに Cookie を使用します。\nCookie を無効にしているようです。\nCookie を有効にしてから、もう一度試してください。",
        "nocookiesfornew": "発信元を確認できなかったため、アカウントは作成されませんでした。\nCookieを有効にしていることを確認して、このページを再読込してもう一度試してください。",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "createacct-loginerror": "アカウントは正常に作成されましたが、自動的にログインすることができませんでした。[[Special:UserLogin|手動でログイン]]をしてください。",
+       "createacct-loginerror": "アカウントは作成されましたが、自動的にログインできませんでした。[[Special:UserLogin|手動でログイン]]をしてください。",
        "noname": "有効な利用者名が指定されていません。",
        "loginsuccesstitle": "ログイン済み",
        "loginsuccess": "<strong>{{SITENAME}}に「$1」としてログインしました。</strong>",
        "passwordreset-nosuchcaller": "送信者が存在しません: $1",
        "passwordreset-ignored": "パスワードのリセットが処理されませんでした。プロバイダーが設定されていない可能性があります。",
        "passwordreset-invalidemail": "無効なメールアドレスです",
-       "passwordreset-nodata": "å\88©ç\94¨è\80\85å\90\8dã\82\82ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\82\82入力されていません",
+       "passwordreset-nodata": "å\88©ç\94¨è\80\85å\90\8dã\81¨ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81\8c入力されていません",
        "changeemail": "メールアドレスの変更または除去",
        "changeemail-header": "あなたのメールアドレスを変更するには、このフォームを完成させます。もし、あなたのアカウントから任意のメールアドレスの関連付けを削除したい場合は、フォームの送信時に、新しいメールアドレスを空白のままにします。",
        "changeemail-no-info": "このページに直接アクセスするためにはログインしている必要があります。",
        "anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
        "missingsummary": "<strong>注意:</strong> 編集内容の要約が空欄です。\n「$1」をもう一度クリックすると、編集内容は要約なしで保存されます。",
        "selfredirect": "<strong>警告:</strong> あなたはこのページを自身に転送させようとしています。\n転送先の設定を間違ったか、あるいは間違ったページを編集しているかもしれません。\n「$1」を再度クリックすると、そのままの転送ページが作成されます。",
-       "missingcommenttext": "以下にコメントを入力してください。",
+       "missingcommenttext": "コメントを入力してください。",
        "missingcommentheader": "<strong>注意:</strong> このコメントに対する題名が空欄です。\n「$1」ボタンをもう一度押すと、空のまま編集が保存されます。",
        "summary-preview": "要約のプレビュー:",
        "subject-preview": "題名のプレビュー:",
        "action-deleterevision": "版の削除",
        "action-deletelogentry": "記録項目の削除",
        "action-deletedhistory": "ページの削除履歴の閲覧",
-       "action-deletedtext": "å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fç\89\88ã\81®æ\9c¬æ\96\87ã\82\92é\96²è¦§ã\81\99ã\82\8b",
+       "action-deletedtext": "å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fç\89\88ã\81®æ\9c¬æ\96\87ã\81®é\96²è¦§",
        "action-browsearchive": "削除されたページの検索",
        "action-undelete": "ページの復元",
        "action-suppressrevision": "隠された版の確認と復元",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|時間}}",
        "rcfilters-highlighted-filters-list": "強調表示中: $1",
        "rcfilters-quickfilters": "保存したフィルター",
-       "rcfilters-quickfilters-placeholder-title": "ã\83ªã\83³ã\82¯はまだ保存されていません",
+       "rcfilters-quickfilters-placeholder-title": "ã\83\95ã\82£ã\83«ã\82¿ã\83¼はまだ保存されていません",
        "rcfilters-quickfilters-placeholder-description": "フィルターの設定を保存し、後で再び使用するためには、下のアクティブフィルター内のブックマークアイコンをクリックしてください。",
        "rcfilters-savedqueries-defaultlabel": "保存したフィルター",
        "rcfilters-savedqueries-rename": "名称を変更",
        "rcfilters-savedqueries-new-name-label": "名称",
        "rcfilters-savedqueries-new-name-placeholder": "このフィルターの目的を説明してください",
        "rcfilters-savedqueries-apply-label": "フィルターを作成",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "既定フィルターを作成",
        "rcfilters-savedqueries-cancel-label": "キャンセル",
        "rcfilters-savedqueries-add-new-title": "現在のフィルター設定を保存する",
        "rcfilters-restore-default-filters": "標準設定の絞り込み条件を適用",
        "rcfilters-filter-user-experience-level-unregistered-label": "未登録",
        "rcfilters-filter-user-experience-level-unregistered-description": "ログインしていない利用者。",
        "rcfilters-filter-user-experience-level-newcomer-label": "新規利用者",
-       "rcfilters-filter-user-experience-level-newcomer-description": "ç\99»é\8c²ã\81\8bã\82\89\97¥ä»¥å\86\85ã\80\81ã\81\8bã\81¤10ç·¨é\9b\86以下の利用者",
+       "rcfilters-filter-user-experience-level-newcomer-description": "ç\99»é\8c²ã\81\8bã\82\89\97¥ä»¥å\86\85ã\80\81ã\81¾ã\81\9fã\81¯ç·¨é\9b\86å\9b\9eæ\95°ã\81\8c10å\9b\9e以下の利用者",
        "rcfilters-filter-user-experience-level-learner-label": "初学者",
        "rcfilters-filter-user-experience-level-learner-description": "「新規利用者」よりも編集経験があり、「経験者」より編集経験が少ない利用者",
        "rcfilters-filter-user-experience-level-experienced-label": "経験者",
        "rcfilters-tag-prefix-namespace-inverted": "$1 <strong>ではない</strong>",
        "rcfilters-exclude-button-off": "選択済みを除外",
        "rcfilters-exclude-button-on": "選択済みを除外中",
-       "rcfilters-view-advanced-filters-label": "詳細フィルター",
        "rcfilters-view-tags": "タグ付けされた編集",
-       "rcfilters-view-namespaces-tooltip": "名前空間別のフィルター結果",
+       "rcfilters-view-namespaces-tooltip": "名前空間で絞り込む",
        "rcfilters-view-tags-tooltip": "編集タグを利用した絞込み",
        "rcfilters-view-return-to-default-tooltip": "メインフィルターメニューに戻る",
        "rcfilters-view-tags-help-icon-tooltip": "タグ付けされた編集とは",
        "deletepage": "ページを削除",
        "confirm": "確認",
        "excontent": "内容:「$1」",
-       "excontentauthor": "内容:「$1」、投稿者は「[[Special:Contributions/$2|$2]]」のみ ([[User talk:$2|talk]])",
+       "excontentauthor": "内容:「$1」、投稿者は「[[Special:Contributions/$2|$2]]」のみ ([[User talk:$2|トーク]])",
        "exbeforeblank": "白紙化前の内容:「$1」",
        "delete-confirm": "「$1」の削除",
        "delete-legend": "削除",
        "delete_and_move_text": "移動先「[[:$1]]」は既に存在します。\n移動のためにこのページを削除しますか?",
        "delete_and_move_confirm": "はい、ページを削除します",
        "delete_and_move_reason": "「[[$1]]」からの移動に伴う削除",
-       "selfmove": "移動元と移動先のページ名が同じです。\n自分自身には移動できません。",
+       "selfmove": "ページ名が同じです。\n自分自身には移動できません。",
        "immobile-source-namespace": "「$1」名前空間のページは移動できません",
        "immobile-target-namespace": "「$1」名前空間にはページを移動できません",
        "immobile-target-namespace-iw": "ウィキ間リンクは、ページの移動先には指定できません。",
        "tooltip-pt-mycontris": "自分の投稿の一覧",
        "tooltip-pt-anoncontribs": "このIPアドレスからなされた編集の一覧",
        "tooltip-pt-login": "ログインすることを推奨します。ただし、必須ではありません。",
-       "tooltip-pt-login-private": "ã\81\93ã\81®ã\82¦ã\82£ã\82­ã\82\92å\88©ç\94¨ã\81\99ã\82\8bã\81«ã\81¯ã\83­ã\82°ã\82¤ã\83³ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99",
+       "tooltip-pt-login-private": "ã\81\93ã\81®ã\82¦ã\82£ã\82­ã\82\92å\88©ç\94¨ã\81\99ã\82\8bã\81«ã\81¯ã\83­ã\82°ã\82¤ã\83³ã\82\92ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84",
        "tooltip-pt-logout": "ログアウト",
        "tooltip-pt-createaccount": "アカウントを作成してログインすることをお勧めしますが、必須ではありません",
        "tooltip-ca-talk": "本文ページについての議論",
        "newimages-newbies": "新規利用者の投稿のみ表示",
        "newimages-showbots": "ボットによるアップロードを表示",
        "newimages-hidepatrolled": "巡回済みのアップロードを隠す",
+       "newimages-mediatype": "メディアの種類:",
        "noimages": "表示できるものがありません。",
        "gallery-slideshow-toggle": "トグルサムネイル",
        "ilsubmit": "検索",
        "bydate": "日付順",
        "sp-newimages-showfrom": "$1の$2以降の新しいファイルを表示",
        "video-dims": "$1、 $2 × $3",
-       "seconds-abbrev": "$1 s",
-       "minutes-abbrev": "$1 m",
+       "seconds-abbrev": "$1",
+       "minutes-abbrev": "$1",
        "hours-abbrev": "$1 h",
        "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|$1 秒}}",
        "months": "{{PLURAL:$1|$1 か月}}",
        "years": "{{PLURAL:$1|$1 年}}",
        "ago": "$1前",
-       "just-now": "ã\81¡ã\82\87ã\81\86ã\81©今",
+       "just-now": "ã\81\9fã\81£ã\81\9f今",
        "hours-ago": "$1 {{PLURAL:$1|時間}}前",
        "minutes-ago": "$1 {{PLURAL:$1|分}}前",
        "seconds-ago": "$1 {{PLURAL:$1|秒}}前",
        "variantname-shi-tfng": "シルハ語 (ティフィナグ文字)",
        "variantname-shi-latn": "シルハ語 (ラテン文字)",
        "variantname-shi": "シルハ語",
-       "variantname-uz": "uz",
-       "variantname-uz-latn": "uz-Latn",
-       "variantname-uz-cyrl": "uz-Cyrl",
+       "variantname-uz": "ウズベク語",
+       "variantname-uz-latn": "ウズベク語 (ラテン文字)",
+       "variantname-uz-cyrl": "ウズベク語 (キリル文字)",
        "metadata": "メタデータ",
        "metadata-help": "このファイルには、追加情報があります (おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)。\nこのファイルが元の状態から変更されている場合、修正されたファイルを完全に反映していない項目がある場合があります。",
        "metadata-expand": "拡張項目を表示",
        "confirmrecreate-noreason": "あなたが編集を開始した後、[[User:$1|$1]] ([[User talk:$1|トーク]]) がこのページを{{GENDER:$1|削除しました}}。このページを本当に再作成していいかご確認ください。",
        "recreate": "再作成する",
        "unit-pixel": "ピクセル",
-       "confirm-purge-title": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ã\83\91ã\83¼ã\82¸ã\81\99ã\82\8b",
+       "confirm-purge-title": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\82­ã\83£ã\83\83ã\82·ã\83¥ç ´æ£\84",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "このページのキャッシュを破棄しますか?",
        "confirm-purge-bottom": "ページのキャッシュを破棄し、強制的に最新版を表示します。",
        "logentry-delete-delete_redir": "$1 がリダイレクト「$3」を上書きにより{{GENDER:$2|削除しました}}",
        "logentry-delete-restore": "$1 がページ「$3 ($4)」を{{GENDER:$2|復元しました}}",
        "logentry-delete-restore-nocount": "$1 がページ「$3」を{{GENDER:$2|復元しました}}",
-       "restore-count-revisions": "$1{{PLURAL:$1|版}}",
-       "restore-count-files": "{{PLURAL:$1|$1ファイル}}",
+       "restore-count-revisions": "{{PLURAL:$1|1|$1}}件の版",
+       "restore-count-files": "{{PLURAL:$1|$1件のファイル}}",
        "logentry-delete-event": "$1 が $3 の{{PLURAL:$5|記録項目|記録項目$5件}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4",
        "logentry-delete-revision": "$1 がページ「$3」の{{PLURAL:$5|版|$5件の版}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4",
        "logentry-delete-event-legacy": "$1 が $3 の記録項目の閲覧レベルを{{GENDER:$2|変更しました}}",
        "pagelang-reason": "理由",
        "pagelang-submit": "変更",
        "pagelang-nonexistent-page": "ページ $1 は存在しません。",
-       "pagelang-unchanged-language": "ページ「$1」の言語はに$2に設定されています。",
-       "pagelang-unchanged-language-default": "ã\80\8c$1ã\80\8dã\81¯ã\81\99ã\81§ã\81«ã\82¦ã\82£ã\82­ã\81®æ\97¢å®\9aã\81®ã\82³ã\83³ã\83\86ã\83³ã\83\84言語に設定されています。",
+       "pagelang-unchanged-language": "ページ「$1」の言語はすでに$2に設定されています。",
+       "pagelang-unchanged-language-default": "ã\83\9aã\83¼ã\82¸ã\80\8c$1ã\80\8dã\81¯ã\81\99ã\81§ã\81«ã\82¦ã\82£ã\82­ã\81®æ\97¢å®\9aã\81®言語に設定されています。",
        "pagelang-db-failed": "データベースがページの言語を変更できませんでした。",
        "right-pagelang": "ページの言語を変更",
        "action-pagelang": "ページの言語の変更",
        "date-range-to": "終了日:",
        "sessionmanager-tie": "複数の要求の認証方法を組み合わせることはできません: $1。",
        "sessionprovider-generic": "$1 セッション",
-       "sessionprovider-mediawiki-session-cookiesessionprovider": "クッキーベースのセッション",
-       "sessionprovider-nocookies": "クッキーが無効になっている可能性があります。クッキーが有効になっていることを確認し、もう一度お試しください。",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "Cookie ベースのセッション",
+       "sessionprovider-nocookies": "Cookie が無効になっている可能性があります。有効になっていることを確認し、もう一度お試しください。",
        "randomrootpage": "おまかせルートページ",
        "log-action-filter-block": "ブロックの種類",
        "log-action-filter-contentmodel": "コンテンツモデルの変更の種類",
        "log-action-filter-contentmodel-change": "コンテンツモデルの変更",
        "log-action-filter-contentmodel-new": "標準でないコンテンツ・モデルによるページの作成",
        "log-action-filter-delete-delete": "ページの削除",
-       "log-action-filter-delete-delete_redir": "リダイレクトを上書き",
+       "log-action-filter-delete-delete_redir": "転送の上書き",
        "log-action-filter-delete-restore": "ページの復帰",
        "log-action-filter-delete-event": "記録の削除",
        "log-action-filter-delete-revision": "版指定削除",
        "log-action-filter-newusers-create": "匿名利用者による作成",
        "log-action-filter-newusers-create2": "登録利用者による作成",
        "log-action-filter-newusers-autocreate": "自動的な作成",
-       "log-action-filter-newusers-byemail": "メールによるパスワード送信を伴う作成",
+       "log-action-filter-newusers-byemail": "メール送信されるパスワードによる作成",
        "log-action-filter-patrol-patrol": "手動巡回",
        "log-action-filter-patrol-autopatrol": "自動巡回",
        "log-action-filter-protect-protect": "保護",
        "authmanager-authplugin-create-fail": "アカウントの作成は、認証プラグインによって拒否されました。",
        "authmanager-authplugin-setpass-denied": "パスワードの変更は、認証プラグインによって許可されていません。",
        "authmanager-authplugin-setpass-bad-domain": "無効なドメインです。",
-       "authmanager-autocreate-noperm": "自動アカウント作成は許可されていません。",
+       "authmanager-autocreate-noperm": "アカウントの自動作成は許可されていません。",
        "authmanager-autocreate-exception": "自動アカウント作成は、以前のエラーにより一時的に無効になっています。",
        "authmanager-userdoesnotexist": "利用者アカウント「$1」は登録されていません。",
        "authmanager-userlogin-remembermypassword-help": "パスワードはセッションの長さよりも長いため、忘れないようにしてください。",
        "authform-newtoken": "トークンがありません。$1",
        "authform-notoken": "トークンがありません",
        "authform-wrongtoken": "不正なトークンです",
-       "specialpage-securitylevel-not-allowed-title": "許可されていません",
-       "specialpage-securitylevel-not-allowed": "申し訳ありませんが、あなたが同一人であるか確認できないため、このページを使用することはできません。",
+       "specialpage-securitylevel-not-allowed-title": "このページは利用できません",
+       "specialpage-securitylevel-not-allowed": "あなたが同一人であるか確認できないため、このページを利用することはできません。",
        "authpage-cannot-login": "ログインを開始できません。",
        "authpage-cannot-login-continue": "ログインを続行できません。セッションがタイムアウトした可能性が高いです。",
        "authpage-cannot-create": "アカウントの作成を開始できません。",
index 20c87ab..0a9e9ea 100644 (file)
        "privacypage": "Project:Pranatan bab privasi",
        "badaccess": "Aksès ora olèh",
        "badaccess-group0": "Panjenengan ora pareng nglakokaké tindhakan sing panjenengan gayuh.",
-       "badaccess-groups": "Pratingkah panjenengan diwatesi tumrap panganggo ing {{PLURAL:$2|klompoké|klompoké}}: $1.",
+       "badaccess-groups": "Tumindak sing panjenengan péngini winates marang panganggo ing {{PLURAL:$2|golongan|golongan}}: $1.",
        "versionrequired": "Dibutuhaké MediaWiki vèrsi $1",
        "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]",
        "ok": "Oké",
        "filenotfound": "Ora bisa nemokaké berkas \"$1\".",
        "unexpected": "Biji (''nilai'') ing njabaning jangkauan: \"$1\"=\"$2\".",
        "formerror": "Masalah: Ora bisa ngirim formulir",
-       "badarticleerror": "Pratingkah iku ora bisa katindhakaké ing kaca iki.",
+       "badarticleerror": "Tumindak iki ora bisa diayahi ing kaca iki.",
        "cannotdelete": "Kaca utawa berkas \"$1\" ora bisa dibusak.\nManawa wis dibusak déning wong liya.",
        "cannotdelete-title": "Ora bisa mbusak kaca \"$1\"",
        "delete-hook-aborted": "Pambusakan dibatalaké déning ''hook''.\nOra ana alesané.",
        "welcomecreation-msg": "Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.",
        "yourname": "Jeneng panganggo:",
        "userlogin-yourname": "Jeneng panganggo",
-       "userlogin-yourname-ph": "Isinen jeneng panganggoné panjenengan",
+       "userlogin-yourname-ph": "Isi jeneng-panganggo panjenengan",
        "createacct-another-username-ph": "Isi jeneng panganggo",
        "yourpassword": "Tembung wadi:",
        "userlogin-yourpassword": "Tembung wadi",
        "createacct-yourpassword-ph": "Isi tembung wadi",
        "yourpasswordagain": "Tik manèh tembung wadiné:",
        "createacct-yourpasswordagain": "Konfirmasi tembung wadi",
-       "createacct-yourpasswordagain-ph": "Lebokaké manèh tembung wadiné",
+       "createacct-yourpasswordagain-ph": "Isi manèh tembung wadi mau",
        "userlogin-remembermypassword": "Gawé supaya panggah mlebu log",
        "userlogin-signwithsecure": "Nganggo koneksi aman",
        "cannotlogin-title": "Ora bisa mlebu log",
        "userlogin-createanother": "Gawé akun liya",
        "createacct-emailrequired": "Alamat layang-èl",
        "createacct-emailoptional": "Alamat layang-èl (manasuka)",
-       "createacct-email-ph": "Isinen layang-èlé panjenengan",
+       "createacct-email-ph": "Isi layang-èl panjenengan",
        "createacct-another-email-ph": "Isi alamat layang-èl",
-       "createaccountmail": "Anggonen tembung wadi sembarang sauntara lan kirimen iku menyang alamat layang-èl sing dikarepaké",
+       "createaccountmail": "Nganggo tembung wadi sauntara sing dikirimaké menyang alamat layang-èl",
        "createacct-realname": "Jeneng asli (manasuka)",
        "createacct-reason": "Alesan",
        "createacct-reason-ph": "Alesané panjenengan nggawé akun liya",
-       "createacct-submit": "Gawé akuné panjenengan",
+       "createacct-submit": "Gawé akun panjenengan",
        "createacct-another-submit": "Gawé akun",
        "createacct-continue-submit": "Banjuraké gawé akun",
        "createacct-another-continue-submit": "Banjuraké gawé akun",
        "createacct-benefit-body1": "{{PLURAL:$1|besutan}}",
        "createacct-benefit-body2": "{{PLURAL:$1|kaca}}",
        "createacct-benefit-body3": "{{PLURAL:$1|sing nyumbang}} mentas waé",
-       "badretype": "Sandhi panjenengan ora gathuk",
+       "badretype": "Tembung wadi sing panjenengan isèkaké ora gathuk.",
        "usernameinprogress": "Panggawéning akun tumrap jeneng panganggo iki tembé lumaku.\nEntèni sadhéla.",
        "userexists": "Jeneng panganggo sing dilebokaké lagi dianggo.\nMangga pilih jeneng liya.",
        "loginerror": "Masalah mlebu log",
        "nouserspecified": "Panjenengan kudu milih jeneng panganggo.",
        "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
        "wrongpassword": "Tembung wadi sing diisèkaké salah.\nMangga jajalen manèh.",
-       "wrongpasswordempty": "Panjenengan ora milih tembung sandhi. Mangga dicoba manèh.",
+       "wrongpasswordempty": "Tembung wadi kosong.\nJajalen manèh.",
        "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.",
        "passwordtoolong": "Tembung wadi ora kena munjuli {{PLURAL:$1|1 pralambang|$1 pralambang}}.",
        "passwordtoopopular": "Tembung wadi sing wis kaprah ora kena dianggo. Mangga pilih tembung wadi liya sing mbédani.",
        "password-name-match": "Tembung wadiné panjenengan kudu béda saka jeneng panganggoné panjenengan.",
        "password-login-forbidden": "Panganggoning jeneng panganggo lan tembung wadi iki dilarang.",
        "mailmypassword": "Balèni gawé tembung wadi",
-       "passwordremindertitle": "Pèngetan tembung sandhi saka {{SITENAME}}",
-       "passwordremindertext": "Ana wong (mbokmanawa panjenengan dhéwé, saka alamat IP $1) nyuwun supaya dikirimi tembung sandhi anyar kanggo {{SITENAME}} ($4). Tembung sandi sawetara kanggo panganggo \"$2\" wis digawé lan saiki \"$3\". Yèn panjenengan pancèn nggayuh iki, mangga énggal mlebu log lan ngganti tembung sandi saiki.\nTembung sandi sawetara mau bakal kadaluwarsa ing {{PLURAL:$5|sadina|$5 dina}}.\nYèn wong liya sing nglakoni panyuwunan iki, utawa panjenengan éling tembung sandi panjenengan, lan ora kepéngin ngowahi, panjenengan ora usah nggubris pesen iki lan bisa tetep nganggo tembung sandi lawas.",
+       "passwordremindertitle": "Tembung wadi sauntara kanggo {{SITENAME}}",
+       "passwordremindertext": "Ana wong (mbokmanawa panjenengan dhéwé, saka alamat IP $1) nyuwun supaya dikirimi tembung wadi anyar kanggo {{SITENAME}} ($4). Tembung wadi sawetara kanggo panganggo \"$2\" wis digawé lan saiki \"$3\". Yèn panjenengan pancèn nggayuh iki, mangga énggal mlebu log lan ngganti tembung wadi saiki.\nTembung wadi sawetara mau bakal kadaluwarsa ing {{PLURAL:$5|sadina|$5 dina}}.\nYèn wong liya sing nglakoni panyuwunan iki, utawa panjenengan éling tembung wadi panjenengan, lan ora kepéngin ngowahi, panjenengan ora usah nggubris pesen iki lan bisa tetep nganggo tembung wadi lawas.",
        "noemail": "Ora ana alamat layang-èl sing kacathet tumrap ing panganggo \"$1\".",
        "noemailcreate": "Panjenengan kudu maringi alamat e-mail sing absah",
        "passwordsent": "Tembung sandi anyar wis dikirim menyang alamat layang èlèktronik tumrap \"$1\". \nMangga mlebu log manèh sawisé panjenengan nampa iku.",
        "blocked-mailpassword": "Alamat IP-né panjenengan diblokir saka mbesut. Kanggo ngéndhani tumindak salah-guna, ora diparengaké nganggo pamulihan tembung wadi saka alamat IP iki.",
        "eauthentsent": "Layang-èl konfirmasi wis dikirim menyang alamat layang-èl sing diisèkaké. Sadurungé ana layang-èl liyané sing dikirim menyang akun iku, panjenengan kudu nuruti arahan ana ing layang-èl iku saperlu ngonfirmasi yèn akun iku pancèn duwèké panjenengan.",
-       "throttled-mailpassword": "Layang kanggo mbalèkaké tembung sandhi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung sandhi sing bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.",
+       "throttled-mailpassword": "Layang kanggo mbalèkaké tembung wadi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung wadi sing bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Masalah pangirim layang: $1",
        "acct_creation_throttle_hit": "Para neneka menyang wiki iki sing nganggo alamat IP-né panjenengan wis gawé {{PLURAL:$1|akun cacah 1|akun cacah $1}} sajeroné $2 pungkasan, sing cacahé nyandhak cacah maksimum sing diidinaké.\nTemahané, para neneka sing nganggo alamat IP iki ora bisa gawé akun manèh sauntara iki.",
        "emailauthenticated": "Alamat layang-èlé panjenengan wis dikonfirmasi ing tanggal $2 pukul $3.",
        "accountcreatedtext": "Akun panganggo [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|rembug]]) wis digawé.",
        "createaccount-title": "Gawé akun kanggo {{SITENAME}}",
        "createaccount-text": "Ana sing nggawé akun nganggo alamat layang-èlé panjenengan ing {{SITENAME}} ($4) kanthi aran \"$2\", mawa tembung wadi \"$3\".\nPanjenengan kudu mlebu log lan ngowahi tembung wadiné panjenengan saiki.\n\nPanjenengan kena nglirwakaké layang iki, manawa akun iki digawé awit kaluputan.",
-       "login-throttled": "Panjenengan wis kakèhan njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
+       "login-throttled": "Panjenengan wis ping akèh njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
        "login-abort-generic": "Panjenengan ora bisa mlebu log - Kawurungan",
        "login-migrated-generic": "Akuné panjenengan wis dimigrasi, lan jeneng panganggoné wis ora ana manèh ing wiki iki.",
        "loginlanguagelabel": "Basa: $1",
        "resetpass_header": "Ganti tembung wadining akun",
        "oldpassword": "Tembung wadi lawas:",
        "newpassword": "Tembung wadi anyar:",
-       "retypenew": "Tik manèh tembung wadi anyaré:",
+       "retypenew": "Isi manèh tembung wadi anyaré:",
        "resetpass_submit": "Setèl tembung wadi lan mlebu log",
        "changepassword-success": "Tembung wadiné panjenengan kasil diowah!",
        "changepassword-throttled": "Panjenengan wis kakèhan njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
        "resetpass-submit-cancel": "Wurung",
        "resetpass-wrong-oldpass": "Tembung wadi saiki utawa sauntara ora trep.\nPanjengen bokmanawa wis ngganti tembung wadiné panjenengan utawa nyuwun tembung wadi sauntara sing anyar.",
        "resetpass-temp-password": "Tembung wadi sauntara:",
-       "resetpass-abort-generic": "Ngowah tembung sandhi diwurungaké déning èkstènsi.",
-       "passwordreset": "Balèni setèl tembung sandhi",
-       "passwordreset-text-one": "Lengkapana formulir iki kanggo nampa tembung sandhi sementara lewat layang elektronik.",
-       "passwordreset-text-many": "{{PLURAL:$1|Isinen salah sijine kotak ing ngisor iki kanggo nampa tembung sandhi sementara lewat layang elektronik.}}",
+       "resetpass-abort-generic": "Ngowahi tembung wadi kawurungaké déning èkstènsi.",
+       "passwordreset": "Balèni gawé tembung wadi",
+       "passwordreset-text-one": "Isi formulir iki kanthi jangkep kanggo nampa tembung wadi sauntara lumantar layang-èl.",
+       "passwordreset-text-many": "{{PLURAL:$1|Isi salah siji babagan ing ngisor iki supaya bisa nampa tembung wadi sauntara lumantar layang-èl.}}",
        "passwordreset-disabled": "Setèl ulang tembung wadi dipatèni ing wiki iki.",
        "passwordreset-emaildisabled": "Fitur layang elektronik wis dipateni ing wiki iki.",
        "passwordreset-username": "Jeneng panganggo:",
        "passwordreset-email": "Alamat layang-èl:",
        "passwordreset-emailtitle": "Rerincèné akun ing {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ana wong (bokmanawa panjenengan, saka alamat IP $1) nyuwun tembung wadiné panjenengan disetèl ulang mungguh ing {{SITENAME}} ($4). {{PLURAL:$3|Akun}} ing ngisor iki ana gayutané karo layang-èl iki:\n\n$2\n\n{{PLURAL:$3|Tembung wadi sauntara iki}} bakal kadaluwarsa sawisé {{PLURAL:$5|sadina|$5 dina}}.\nPanjenengan kudu mlebu log lan milih tembung wadi anyar saiki. Yèn wong liya sing nyuwun iki, utawa yèn panjenengan pranyata wis kèlingan tembung wadiné panjenengan sing lawas banjur panjenengan ora nedya ngganti, panjenengan bisa nglirwakaké layang iki lan mbanjuraké nganggo tembung wadiné panjenengan sing lawas.",
-       "passwordreset-emailtext-user": "Panganggo $1 seka {{SITENAME}} njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
+       "passwordreset-emailtext-user": "Panganggo $1 saka {{SITENAME}} nyuwun ganti tembung wadi panjenengan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} ngisor iki magepokan karo alamat layang-èl iki:\n\n$2\n\n{{PLURAL:$3|Tembung-wadi-sauntara}} iki bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\npanjenengan kudu mlebu log lan milih siji tembung wadi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn panjenengan jebul wis kèlingan tembung wadi sing lawas saéngga ora ana niyat kanggo ngganti, panjenengan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung wadi lawas panjenengan.",
        "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung wadi sauntara: \n$2",
        "passwordreset-emailsentemail": "Yèn layang èlèktronik iki nggayut akuning sampéyan, layang kanggo salin tembung wadi bakal dikirim.",
        "passwordreset-emailsentusername": "Manawa ana alamat layang-èl sing ana gayutané karo jeneng panganggo iki, layang-èl kanggo nyetèl ulang tembung wadi bakal dikirim.",
        "changeemail": "Owah utawa busak alamat layang-èl",
-       "changeemail-header": "Isinen formulir iki saperlu salin alamat layang-èlé panjenengan. Manawa panjenengan péngin ngilangi gegayutané alamat layang-èl saka akuné panjenengan, kosongaké waé babagan layang-èl anyar nalika ngirim formuliré.",
+       "changeemail-header": "Isi formulir iki saperlu salin alamat layang-èl panjenengan. Manawa panjenengan péngin ngilangi gegayutané alamat layang-èl saka akuné panjenengan, kosongaké waé babagan layang-èl anyar nalika ngirim formuliré.",
        "changeemail-no-info": "Sampéyan kudu mlebu log kanggo ngaksès kaca iki langsung.",
        "changeemail-oldemail": "Alamat layang-èl saiki:",
        "changeemail-newemail": "Alamat layang-èl anyar:",
        "changeemail-none": "(ora ana)",
        "changeemail-password": "Sandi {{SITENAME}} panjenengan:",
        "changeemail-submit": "Ganti layang-èl",
-       "changeemail-nochange": "Mangga isinen mawa alamat layang-èl sing anyar tur béda.",
+       "changeemail-nochange": "Mangga isi mawa alamat layang-èl sing anyar tur béda.",
        "resettokens": "Reset token",
        "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
        "resettokens-no-tokens": "Ora ana token sing bisa direset.",
        "newarticle": "(Anyar)",
        "newarticletext": "Panjenengan ngetuti pranala sing durung ana.\nKanggo nggawé kaca, gagéa ngetik ing kothak ngisor iki (deleng [$1 kaca pitulung] ngenani katerangané).\nManawa panjenengan tekan kéné awit ora sengaja, kliken tumbul <strong>balik</strong> ana ing pangluruné panjenengan.",
        "anontalkpagetext": "----\n<em>Iki kaca parembugané panganggo anonim sing durung gawé akun, utawa sing ora nganggo akuné.</em>\nMula, awak dhéwé kudu nganggo alamat IP-né awujud angka kanggo nglacak dhèwèké.\nAlamat IP mangkono bisa dianggo déning sawenèh panganggo.\nManawa panjenengan panganggo anonim lan rumasa yèn ana tanggepan sing ora ilok dieneraké marang panjenengan, mangga [[Special:CreateAccount|gawéa akun]] utawa [[Special:UserLogin|mlebua log]] kanggo ngéndhani salah pangira karo panganggo anonim liyané ing tembé buri.",
-       "noarticletext": "Kala saiki kaca iki durung ana tulisané.\nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] sajeroning kaca liya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki]</span>.",
+       "noarticletext": "Saiki kaca iki durung ana tulisané.\nPanjenengan bisa (1) [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] ing kaca liyané, (2)\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa (3) [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki]</span>.",
        "noarticletext-nopermission": "Saiki lagi ora ana tèks ing kaca iki. \nPanjenengan bisa [[Special:Search/{{PAGENAME}}|nggolèk sesirah kaca iki]] ing kaca liyané, \nutawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{urlencode:{{FULLPAGENAME}}}}}} nggolèk ing log sing gegayutan]</span>, nanging panjenengan ora kawogan nggawé kaca iki.",
        "missing-revision": "Révisi #$1 saka kaca ajeneng \"{{FULLPAGENAME}}\" ora ana.\n\nIki biyasané kasababaké awit nututi pranala sajarah sing wis lawas saka sawijiné kaca sing wis dibusak.\nRerincèné bisa digolèki ing [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].",
        "userpage-userdoesnotexist": "Akun panganggo \"$1\" ora kadhaftar.\nMangga pesthèkaké dhisik yèn panjenengan péngin nggawé/mbesut kaca iki.",
        "sectioneditnotsupported-text": "Ora bisa mbesut sapérangan ana ing kaca iki.",
        "permissionserrors": "Masalah idin",
        "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
-       "permissionserrorstext-withaction": "Panjenengan ora duwé hak aksès kanggo $2, amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
+       "permissionserrorstext-withaction": "Panjenengan ora diidinaké $2 amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
        "recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:",
        "moveddeleted-notice": "Kaca iki wis dibusak.\nLog busak, reksa, lan alih bab kacané cumepak ing ngisor minangka rujukan.",
        "log-fulllog": "Deleng cathetan wutuh",
        "rev-delundel": "owah pakatonan",
        "rev-showdeleted": "tuduhaké",
        "revisiondelete": "Busak/wurung busak révisi",
-       "revdelete-nooldid-title": "Rèvisi tujuan ora sah",
+       "revdelete-nooldid-title": "Révisi tujuan ora trep",
        "revdelete-nooldid-text": "Panjenengan durung mènèhi target revisi kanggo nglakoni fungsi iki.",
        "revdelete-no-file": "Barkas sing dipéngini ora ana.",
        "revdelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi sing wis kabusak saka berkas \"<nowiki>$1</nowiki>\" ing $2, jam $3?",
        "revdelete-log": "Alesan:",
        "revdelete-submit": "Trapna ing {{PLURAL:$1|révisi|révisi}} kapilih",
        "revdelete-success": "Kekatonan owahan wis dianyari.",
-       "revdelete-failure": "'''Panampakan rèvisi ora bisa dianyari:'''\n$1",
+       "revdelete-failure": "Pakatonané révisiné ora bisa dianyari:\n$1",
        "logdelete-success": "Kekatonan log wis disetèl.",
        "logdelete-failure": "'''Aturan pandhelikan ora bisa disèt:'''\n$1",
        "revdel-restore": "Ngowahi visiblitas (pangatonan)",
        "mergehistory-fail": "Ora bisa nggabung sajarah, coba dipriksa manèh kacané lan paramèter wektuné.",
        "mergehistory-fail-invalid-source": "Kaca sumber ora trep.",
        "mergehistory-fail-invalid-dest": "Kaca paran ora trep.",
-       "mergehistory-fail-no-change": "Panggabung sajarah ora nggabungaké rèvisi. Mangga priksanen kaca lan paramèter wektuné.",
+       "mergehistory-fail-no-change": "Panggabung ing kala kawuri ora kasil nggabungaké révisi babar blas. Mangga priksanen manèh kaca lan paramèter wektuné.",
        "mergehistory-fail-self-merge": "Kaca asal lan kaca paran padha.",
-       "mergehistory-fail-timestamps-overlap": "Rèvisi asal tumpuk-undhung utawa njedhul sawisé révisi paran.",
+       "mergehistory-fail-timestamps-overlap": "Révisi asal tumpuk-undhung utawa njedhul sawisé révisi tujuan.",
        "mergehistory-fail-toobig": "Ora bisa nggabungaké sajarah amarga {{PLURAL:$1|révisi}} sing arep dilih munjuli $1.",
        "mergehistory-no-source": "Kaca sumber $1 ora ana.",
        "mergehistory-no-destination": "Kaca paran $1 ora ana.",
        "difference-title-multipage": "Béda antarané kaca \"$1\" lan \"$2\"",
        "difference-multipage": "(Prabédhan antar kaca)",
        "lineno": "Larik $1:",
-       "compareselectedversions": "Bandhingaké rèvisi sing kapilih",
+       "compareselectedversions": "Bandhingaké révisi sing kapilih",
        "showhideselectedversions": "Tampilaké/dhelikaké révisi kapilih",
        "editundo": "wurung",
        "diff-empty": "(Ora ana béda)",
        "diff-multi-sameuser": "({{PLURAL:$1|Sarévisi antara|$1 révisi antara}} déning panganggo sing padha sing ora katuduhaké)",
        "diff-multi-otherusers": "({{PLURAL:$1|Siji révisi langsung|$1 révisi langsung}} déning {{PLURAL:$2|siji panganggo liyané|$2 panganggo}} ora dituduhaké)",
-       "diff-multi-manyusers": "({{PLURAL:$1Siji rèvisi sedhengan|$1 rèvisi sedhengan}} déning luwih saka $2 {{PLURAL:$2|panganggo|panganggo}} ora dituduhaké)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Siji révisi langsung|$1 révisi langsung}} déning {{PLURAL:$2|panganggo|panganggo}} $2 ora katuduhaké)",
        "difference-missing-revision": "{{PLURAL:$2|Sak pambenahan|$2 pambenahan}} saka prabédan iki ($1) {{PLURAL:$2|ora ditemokaké|ora ditemokaké}}.\n\nIki biasané kasebab pranala prabedan sing wis ora kanggo saka kaca isi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].",
        "searchresults": "Kasiling golèk",
        "searchresults-title": "Kasiling golèk \"$1\"",
        "searchall": "kabèh",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
        "showingresultsinrange": "Nuduhaké nganti {{PLURAL:$1|<strong>1</strong> kasil|<strong>$1</strong> kasil}} sajeroning penthangan #<strong>$2</strong> tekan #<strong>$3</strong>.",
-       "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> dari <strong>$3</strong>|Asil <strong>$1 - $2</strong> saking <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> saka <strong>$3</strong>|Asil <strong>$1 – $2</strong> saka <strong>$3</strong>}}",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "search-nonefound-thiswiki": "Ora ana kasil sing jumbuh karo panjalukan ing situs iki.",
        "powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
        "prefs-help-gender": "Setèlané pilalan iki sipaté manasuka.\nPiranti alusé nganggo ajiné saperlu nyeluk lan nyebut panjenengan tumraping liyan sarana tembung gèndher sing patut sacara paramasastra.\nKaterangan iki bakal kanton marang umum.",
        "email": "Layang-èl",
        "prefs-help-realname": "Jeneng asli ora kudu diisi.\nYèn diisi, jeneng asliné panjenengan bakal kanggo atribusi awit karyané panjenengan.",
-       "prefs-help-email": "Alamat layang èlèktronik sipaté mung pilihan, nanging dibutuhaké kanggo nyetèl ulang tembung sandhi yèn Sampéyan lali.",
+       "prefs-help-email": "Alamat layang-èl sipaté mung pilihan, nanging dibutuhaké kanggo nyetèl ulang tembung wadi yèn panjenengan lali.",
        "prefs-help-email-others": "Sampéyan uga bisa milih kanggo ngidinaké wong liya ngubungi Sampéyan liwat layang èlèktronik sing ana ing kaca panganggo utawa kaca guneman.\nAlamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi Sampéyan.",
        "prefs-help-email-required": "Butuh alamat layang-èl.",
        "prefs-info": "Katerangan pokok",
        "action-move-rootuserpages": "ngalih kaca panganggo oyod",
        "action-move-categorypages": "alih kaca kategori",
        "action-movefile": "alih barkas iki",
-       "action-upload": "unggah barkas iki",
+       "action-upload": "ngunggah barkas iki",
        "action-reupload": "nindhih berkas sing wis ana",
        "action-reupload-shared": "nindhih berkas sing wis ana ing papan panyimpanan berkas sing dianggo bebarengan",
        "action-upload_by_url": "unggahna berkas iki saka sawijining alamat URL",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Tuduhaké",
        "rcfilters-legend-heading": "<strong>Pratélané cekakan:</strong>",
-       "rcfilters-other-review-tools": "<strong>Piranti pamriksa liyané</strong>",
+       "rcfilters-other-review-tools": "Piranti pamriksa liyané",
        "rcfilters-group-results-by-page": "Golongaké kasilé miturut kacané",
        "rcfilters-grouping-title": "Panggegolong",
        "rcfilters-activefilters": "Saringan murub",
        "rcfilters-filter-lastrevision-description": "Mung owahan paling anyar marang kacané.",
        "rcfilters-filter-previousrevision-label": "Dudu révisi pungkasan",
        "rcfilters-filter-previousrevision-description": "Kabèh owahan sing dudu \"révisi pungkasan\".",
-       "rcfilters-view-advanced-filters-label": "Saringan lanjutan",
        "rcfilters-view-tags": "Besutan sing tinengeran",
        "rcfilters-view-namespaces-tooltip": "Saring kasilé miturut mandala-arané",
        "rcfilters-view-tags-tooltip": "Saring kasilé nganggo tengering besutan",
        "rcshowhidecategorization": "$1 kategorisasi kaca",
        "rcshowhidecategorization-show": "Tuduhaké",
        "rcshowhidecategorization-hide": "Dhelikaké",
-       "rclinks": "Tuduhaké $1 owahan pungkasan kawit $2 dina kapungkur.",
+       "rclinks": "Tuduhaké $1 owahan pungkasan ing dalem $2 dina pungkasan.",
        "diff": "béd",
        "hist": "saj",
        "hide": "Dhelikaké",
        "randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Sembarang kaca ing kategori",
-       "randomincategory-submit": "Tumuju",
+       "randomincategory-submit": "Menyang",
        "randomredirect": "Pangalihan sembarang",
        "randomredirect-nopages": "Ora ana alih-alihan ing mandala aran \"$1\".",
        "statistics": "Statistik",
        "emailuser-title-notarget": "Kirimi panganggo layang-èl",
        "emailpagetext": "Panjenengan bisa migunakaké formulir ing ngisor kanggo ngirim layang-e marang {{GENDER:$1|panganggo}} iki.\nAlamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi panjenengan]] bakal dadi alamat \"Saka\" jroning layang-e kasebut, mula panampa layang-e bakal bisa mbalesi langsung menyang panjenengan.",
        "defemailsubject": "{{SITENAME}} layang èlèktronik saka panganggo \"$1\"",
-       "usermaildisabled": "Layang-èlé panganggo dipatèni",
+       "usermaildisabled": "Layang-èl panganggo dipatèni",
        "usermaildisabledtext": "Sampéyan ora bisa ngirim layang èlèktronik nèng panganggo liya nèng wiki iki",
        "noemailtitle": "Ora ana alamat layang-èl",
        "noemailtext": "Panganggo iki ora mènèhi alamat layang-e sing absah.",
        "emailccme": "Kirimana aku salinan pesenku.",
        "emailccsubject": "Salinan pesen panjenengan kanggo $1: $2",
        "emailsent": "Layang-èl dikirim",
-       "emailsenttext": "Layang-èlé panjenengan wis dikirim.",
+       "emailsenttext": "Layang-èl panjenengan wis dikirim.",
        "emailuserfooter": "Layang-e iki dikirimaké déning $1 marang $2 migunakaké fungsi \"Layangpanganggo\" ing {{SITENAME}}.",
        "usermessage-summary": "Tinggalaké layang sistem.",
        "usermessage-editor": "Pawartaning layang sistem",
        "cantrollback": "Ora bisa mbalèkaké suntingan; panganggo pungkasan iku siji-sijiné penulis artikel iki.",
        "alreadyrolled": "Ora bisa mulihaké besutan pungkasan [[:$1]] déning [[User:$2|$2]] ([[User talk:$2|rembug]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ana wong liya sing wis mbesut utawa mulihaké kaca iki.\n\nBesutan pungkasan kaca iku garapané [[User:$3|$3]] ([[User talk:$3|rembug]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Ringkesan suntingan yaiku: <em>$1</em>.",
-       "revertpage": "Besutané [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]]) dipulihaké ing révisi pungkasan déning [[User:$1|$1]]",
-       "revertpage-nouser": "Besutané panganggo peteng dipulihaké ing révisi pungkasan déning {{GENDER:$1|[[User:$1|$1]]}}",
+       "revertpage": "Besutané [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]]) dipulihaké ing révisi pungkasan garapané [[User:$1|$1]]",
+       "revertpage-nouser": "Besutané panganggo peteng dipulihaké ing révisi pungkasan garapané {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Suntingan dibalèkaké déning $1;\ndiowahi bali menyang vèrsi pungkasan déning $2.",
        "sessionfailure-title": "Sèsi gagal",
-       "sessionfailure": "Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol \"back\" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.",
+       "sessionfailure": "Katoné ana masalah nalika panjenengan mlebu log; \ntumindak iki diwurungaké kanggo jaga-jaga yèn ana sing mbajag.\nBalia menyang kaca sadurungé, momota manèh kacané lan tumuli jajalen manèh.",
        "changecontentmodel-title-label": "Sesirahé kaca",
        "changecontentmodel-model-label": "Modhèl kontèn anyar",
        "changecontentmodel-reason-label": "Alesan:",
        "undeletepagetitle": "'''Ing ngisor iki kapacak daftar révisi sing dibusak saka [[:$1]]'''.",
        "viewdeletedpage": "Deleng kaca sing wis dibusak",
        "undeletepagetext": "{{PLURAL:$1|kaca iki wis dibusak nanging isih|$1 kaca iki wis dibusak nanging isih}} ana ing arsip lan bisa dibalèkaké.\nArsip bisa diresiki sakala-kala.",
-       "undelete-fieldset-title": "Mulihaké rèvisi",
+       "undelete-fieldset-title": "Pulihaké révisi",
        "undeleteextrahelp": "Saperlu mulihaké kabèh surajah kaca, jaraké kothak cèk kosong banjur klik <strong><em>{{int:undeletebtn}}</em></strong>.\nSaperlu ngayahi réstorasi sèlèktif, cèk kothak sing magepokan karo révisi sing arep dipulihaké, banjur klik <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|révisi|révisi}} diarsipaké",
        "undeletehistory": "Yèn panjenengan mbalèkaké kaca, kabèh révisi bakal dibalèkaké jroning sajarah.\nYèn sawijining kaca anyar kanthi jeneng sing padha wis digawé wiwit nalika pambusakan, révisi sing wis dibalèkaké bakal katon jroning sajarah sadurungé.",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 tanpa ninggal alihan",
        "logentry-move-move_redir": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 kanthi nindhihi alihan",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 kanthi nindhihi alihan tanpa nginggal alihan",
-       "logentry-patrol-patrol": "$1 {{GENDER:$2|nengeri}} rèvisi $4 saka kaca $3 sing diawasi",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|nengeri}} révisi $4 saka kaca $3 sing diawasi",
        "logentry-patrol-patrol-auto": "$1 otomatis {{GENDER:$2|nandhani}} benahan $4 saka kaca $3 kaawasake",
        "logentry-newusers-newusers": "Akun panganggo $1 {{GENDER:$2|digawé}}",
        "logentry-newusers-create": "Akun panganggo $1 {{GENDER:$2|digawé}}",
        "logentry-newusers-create2": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1",
-       "logentry-newusers-byemail": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1 lan tembung sandhine dikirim lewat layang elektronik",
+       "logentry-newusers-byemail": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1 lan tembung wadi dikirim lumantar layang-èl",
        "logentry-newusers-autocreate": "Akun panganggo $1 otomatis {{GENDER:$2|digawé}}",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|ngalih}} setèlan rereksan saka $4 dadi $3",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|njabud}} payomané $3",
        "authmanager-authn-not-in-progress": "Otèntifikasi ora lumaku utawa dhata sèsiné ilang. Mangga ambali kanthi miwiti saka pisanan.",
        "authmanager-authn-autocreate-failed": "Gawéan otomatis akun lokal wurung: $1",
        "authmanager-create-disabled": "Gawéan akun dipatèni.",
-       "authmanager-create-from-login": "Saperlu nggawé akuné panjenengan, mangga isinen babagané.",
+       "authmanager-create-from-login": "Saperlu nggawé akun, panjenengan mangga ngisi babagan-babagan ing ngisor iki.",
        "authmanager-authplugin-setpass-bad-domain": "Dhomain ora trep.",
        "authmanager-autocreate-noperm": "Gawéan akun otomatis ora diidinaké.",
        "authmanager-autocreate-exception": "Gawéan akun otomatis sawetara dipatèni amarga masalah sadurungé.",
index 02ffc58..0eae5d3 100644 (file)
        "anonpreviewwarning": "''თქვენ არ შესულხართ სისტემაში. თქვენი IP მისამართი შეინახება გვერდის ისტორიაში. ''",
        "missingsummary": "'''შეხსენება:''' თქვენ არ მიგითითებიათ რედაქტირების რეზიუმე.\nთუ ისევ დააწკაპუნებთ შენახვაზე, თქვენი რედაქტირება რეზიუმეს გარეშე დამახსოვრდება.",
        "selfredirect": "გაფრთხილება: თქვენ გადამისამართებას იმავე გვერდზე ქმნით. შესაძლოა, თქვენ გადამისამართებისთვის აირჩიეთ არასწორი სამიზნე გვერდი ან არედაქტირებთ არასამიზნე გვერდს. \n\nთუ თქვენ კიდევ ერთხელ დააჭერთ ღილაკს \"$1\", გადამისამართება შეიქმნება.",
-       "missingcommenttext": "á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97 á\83\99á\83\9dá\83\9bá\83\94á\83\9cá\83¢á\83\90á\83 á\83\98 á\83¨á\83\94á\83\98á\83§á\83\95á\83\90á\83\9cá\83\9dá\83\97 á\83¥á\83\95á\83\94á\83\9bá\83\9dá\83\97.",
+       "missingcommenttext": "á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97 á\83¨á\83\94á\83\98á\83§á\83\95á\83\90á\83\9cá\83\9dá\83\97 á\83\99á\83\9dá\83\9bá\83\94á\83\9cá\83¢á\83\90á\83 á\83\98.",
        "missingcommentheader": "<strong>შეხსენება:</strong> თქვენ ამ კომენტარისთვის თემა არ მიგითითებიათ. თუ შენახვაზე \"$1\" დააწკაპუნებთ, თქვენი ცვლილება მის გარეშე იქნება შენახული.",
        "summary-preview": "რეზიუმეს წინასწარი გადახედვა:",
        "subject-preview": "თემის გადახედვა:",
        "timezoneregion-europe": "ევროპა",
        "timezoneregion-indian": "ინდოეთის ოკეანე",
        "timezoneregion-pacific": "წყნარი ოკეანე",
-       "allowemail": "á\83¡á\83®á\83\95á\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\92á\83\90á\83\9c á\83\94á\83\9a. á\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¦á\83\94á\83\91á\83\98á\83¡ á\83\9cá\83\94á\83\91ართვა",
+       "allowemail": "á\83¡á\83®á\83\95á\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\92á\83\90á\83\9c á\83\94á\83\9a. á\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¦á\83\94á\83\91á\83\98á\83¡ á\83©ართვა",
        "email-blacklist-label": "აუკრძალე შემდეგ მომხმარებლებს ჩემთვის მეილების გამოგზავნა:",
        "prefs-searchoptions": "ძიების პარამეტრები",
        "prefs-namespaces": "სახელთა სივრცეები",
        "recentchanges-legend": "ბოლო ცვლილებების პარამეტრები",
        "recentchanges-summary": "ამ გვერდზე შეგიძლიათ თვალი ადევნოთ ვიკის ბოლო ცვლილებებს.",
        "recentchanges-noresult": "მითითებულ პერიოდსა და სახელთა სივრცეში ცვლილებები არ არის.",
+       "recentchanges-timeout": "ძიებას ვადა გაუვიდა. შეგიძლიათ სცადოთ ძიების სხვა პარამეტრები.",
        "recentchanges-feed-description": "ვიკის უახლესი ცვლილებების მეთვალყურეობა ამ არხში.",
        "recentchanges-label-newpage": "ამ რედაქტირებით შეიქმნა ახალი გვერდი",
        "recentchanges-label-minor": "ეს არის მცირე შესწორება",
        "recentchanges-submit": "ჩვენება",
        "rcfilters-tag-remove": "'$1'-ის წაშლა",
        "rcfilters-legend-heading": "<strong>აბრევიატურების წაშლა:</strong>",
-       "rcfilters-other-review-tools": "<strong>შემოწმების სხვა ხელსაწყოები</strong>",
+       "rcfilters-other-review-tools": "შემოწმების სხვა ხელსაწყოები",
        "rcfilters-group-results-by-page": "ჯგუფის შედეგები გვერდების მიხედვით",
        "rcfilters-grouping-title": "დაჯგუფება",
        "rcfilters-activefilters": "აქტიური ფილტრები",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|საათი|საათი}}",
        "rcfilters-highlighted-filters-list": "ნაჩვენებია: $1",
        "rcfilters-quickfilters": "შენახული ფილტრები",
-       "rcfilters-quickfilters-placeholder-title": "á\83¨á\83\94á\83\9cá\83\90á\83®á\83£á\83\9aá\83\98 á\83\91á\83\9bá\83£á\83\9aá\83\94á\83\91á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83¯á\83\94á\83 ",
+       "rcfilters-quickfilters-placeholder-title": "á\83¨á\83\94á\83\9cá\83\90á\83®á\83£á\83\9aá\83\98 á\83¤á\83\98á\83\9aá\83¢á\83 á\83\94á\83\91á\83\98 á\83¯á\83\94á\83  á\83\90á\83  á\83\90á\83 á\83\98á\83¡",
        "rcfilters-quickfilters-placeholder-description": "ფილტრის პარამეტრების შენახვისთვის და მოგვიანებით მათი გამოყენებისთვის, დააჭირეთ ჩანართის ხატულას აქტიური ფილტრის არეში, ქვემოთ.",
        "rcfilters-savedqueries-defaultlabel": "შენახული ფილტრები",
        "rcfilters-savedqueries-rename": "გადარქმევა",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:არა</strong> $1",
        "rcfilters-exclude-button-off": "მონიშნულის გარდა",
        "rcfilters-exclude-button-on": "მონიშნულის გარდა",
-       "rcfilters-view-advanced-filters-label": "გაფართოებული ფილტრები",
        "rcfilters-view-tags": "ტეგირებული რედაქტირებები",
        "rcfilters-view-namespaces-tooltip": "ფილტრის შედეგები სახელთა სივრცეების მიხედვით",
        "rcfilters-view-tags-tooltip": "ფილტრის შედეგები, რომლებც იყენებენ რედაქტირების ტეგებს",
        "uploaded-script-svg": "ნაპოვნია \"$1\" ელემენტი ატვირთულ SVG ფაილში.",
        "uploaded-hostile-svg": "ატვირთულ SVG-ფაილის style ელემენტში ნაპოვნია საფრთხის შემცვლელი CSS-ის კოდი.",
        "uploaded-event-handler-on-svg": "event-handler ატრიბუტების <code>$1=\"$2\"</code> დანიშნვნა არ არის დაშვებული SVG ფაილებში.",
-       "uploaded-href-attribute-svg": "href ატრიბუტებისთვის SVG ფაილებში დაშვებულია ბმულის გაკეთება http:// და https:// მისამართებზე, ნაპოვნია <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a>ელემნტები შესაძლოა დაუკავშირდნენ (href) მონაცემებს: (embedded file), http://, https://, ან ფრანგემენტს (#, same-document). სხვა ელემენტებისათვის, როგორიცაა <image>, მხოლოდ მონაცემი: და ფრანგმენტი არის ნებადართული. სცადეთ გამოიყენოთ embedding images, როდესაც აკეთებთ თქვენი SVG-ის ექსპორტს.  ნაპოვნია <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "ნაპოვნია href საშიშ მონაცემში: URI <code>&lt;$1 $2=\"$3\"&gt;</code> ატვირთულ SVG ფაილში.",
        "uploaded-animate-svg": "ნაპოვნია \"animate\" ტეგი, რომელიც შესაძლოა ცვლის href-ს, \"from\" ატრიბუტის, <code>&lt;$1 $2=\"$3\"&gt;</code>, გამოყენებით ატვირთულ SVG ფაილში.",
        "uploaded-setting-event-handler-svg": "event-handler ატრიბუტების დანიშვნა დაბლოკილია, ნაპოვნია <code>&lt;$1 $2=\"$3\"&gt;</code> ატვირთულ SVG ფაილში.",
        "booksources-invalid-isbn": "თქვენს მიერ მითითებული ISBN, შეცდომას შეიცავს.  შეამოწმეთ, თუ თავდაპირველი წყარო სწორადაა აკრეფილი.",
        "magiclink-tracking-rfc": "გვერდები, რომლებიც იყენებენ RFC magic ბმულებს",
        "magiclink-tracking-rfc-desc": "ეს გვერდი იყენებს RFC magic ბმულებს. იხილეთ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org], თუ გსურთ წაიკითხოთ მიგრაციის ინსტრუქცია.",
-       "magiclink-tracking-pmid": "გვერდები, რომლებიც იყენებენ PMID magic ბმულებს",
+       "magiclink-tracking-pmid": "გვერდები PMID-ის ჯადოსნური ბმულებით",
        "magiclink-tracking-pmid-desc": "ეს გვერდი იყენებს PMID magic ბმულებს. იხილეთ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org], თუ გსურთ წაიკითხოთ მიგრაციის ინსტრუქცია.",
        "magiclink-tracking-isbn": "გვერდები, რომლებიც იყენებენ ISBN magic ბმულებს",
        "magiclink-tracking-isbn-desc": "ეს გვერდი იყენებს ISBN magic ბმულებს. იხილეთ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org], თუ გსურთ წაიკითხოთ მიგრაციის ინსტრუქცია.",
index 4673106..089896b 100644 (file)
        "parser-template-recursion-depth-warning": "Talast n lqay n tiɣriwin n tilɣatin tefel ($1)",
        "language-converter-depth-warning": "Talast n lqay n uselkat n tutlayt tefel ($1)",
        "node-count-exceeded-category": "Isebtar anda amḍa n tikerwas yefel",
-       "node-count-exceeded-warning": "Asebter yefelen amḍan n tikerwas",
+       "node-count-exceeded-warning": "Asebter iɛedda amḍan afellay n tkerras",
        "expansion-depth-exceeded-category": "Isebtar anda lqay n uderrec yefel",
+       "expansion-depth-exceeded-category-desc": "Asebter iɛedda talqayt n temɣer tafellayt.",
        "expansion-depth-exceeded-warning": "Isebtar yefelen lqay n uderrec",
        "parser-unstrip-loop-warning": "Tifin n tineddict ur nezmer ara an sentuter",
        "parser-unstrip-recursion-limit": "Talast n usniles ur nezmer ara an sentuter tefel ($1)",
        "undo-success": "Tzemreḍ ad tessefsuḍ abeddil. Ssenqed asidmer akken ad tessneḍ ayen tebɣiḍ ad txdmeḍ d ṣṣeḥ, umbeɛd smekti ibeddlen u tkemmleḍ ad tessefsuḍ abeddil.",
        "undo-failure": "Ur yezmir ara ad issefu abeddel axaṭer yella amennuɣ abusari deg ubeddel.",
        "undo-norev": "Abeddel ur yezmer ara ad yetwekkes acku ulac-itt naɣ tetwekkes yakan",
+       "undo-nochange": "Ad yettban d akken abeddel yettwasefsex yakan.",
        "undo-summary": "Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])",
        "undo-summary-username-hidden": "Semmewet tacaggart $1 sɣur amseqdac yeffren",
        "cantcreateaccount-text": "Asnulfu n umiḍan seg tansa IP (<b>$1</b>) tekyef sɣur [[User:$3|$3]].\n\nTaɣẓint n $3 : ''$2''",
        "page_last": "aneggaru",
        "histlegend": "Axtiri n umgerrad: rcem tankulin akken ad teẓreḍ imgerraden ger tisiwal u wekki ɣef enter/entrée neɣ ɣef taqeffalt deg ukessar.<br />\nTabadut: (tura) = amgirred akk d tasiwelt n tura,\n(amgirred) = amgirred akk d tasiwelt ssabeq, M = abeddel afessas.",
        "history-fieldset-title": "Nadi iceggiren",
-       "history-show-deleted": "Ekkes kan",
+       "history-show-deleted": "Aceggir yettwakksen kan",
        "histfirst": "tiqdimin",
        "histlast": "timaynutin",
        "historysize": "({{PLURAL:$1|1 atamḍan|$1 itamḍanen}})",
        "history-feed-description": "Amezruy n tsiwelt n usebter-agi deg wiki",
        "history-feed-item-nocomment": "$1 deg $2",
        "history-feed-empty": "Asebter i tebɣiḍ ulac-it.\nAhat yettumḥa neɣ yettbeddel isem-is.\nƐreḍ [[Special:Search|ad tnadiḍ deg wiki]] ɣef isebtar imaynuten.",
+       "history-edit-tags": "Ẓreg tirekkizin n ileqman yettwafernen",
        "rev-deleted-comment": "(agzul n taẓrigt yettwakes)",
        "rev-deleted-user": "(isem n wemseqdac yettwakes)",
-       "rev-deleted-event": "(asekcem yettwakkes)",
+       "rev-deleted-event": "(talqayt n umazray tettwakkes)",
        "rev-deleted-user-contribs": "[isem n useqdac naɣ tansa IP yetwemḥa - abeddel yeffer deg tiwsitin]",
        "rev-deleted-text-permission": "Lqem n usebter agi '''tetwesfeḍ'''.\nTilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].",
        "rev-deleted-text-unhide": "Lqem n usebter agi '''tetwesfeḍ'''.\nTilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].\nTzemreḍ meqqar [$1 ad ẓṛeḍ lqem agi]  ma tebɣiḍ",
        "recentchanges-submit": "Sken",
        "rcfilters-tag-remove": "Kkes '$1'",
        "rcfilters-legend-heading": "<strong>Tabdart n isegzilen:</strong>",
-       "rcfilters-other-review-tools": "<strong>Ifecka-nniḍen n ucegger</strong>",
+       "rcfilters-other-review-tools": "Ifecka-nniḍen n ucegger",
        "rcfilters-group-results-by-page": "Sdukkel igmaḍ s usebter",
        "rcfilters-grouping-title": "Asdukkel",
        "rcfilters-activefilters": "Imzizdigen urmiden",
index 6c0ddb0..5b6976b 100644 (file)
@@ -65,7 +65,6 @@
        "underline-never": "កុំឲ្យសោះ",
        "underline-default": "តាមលំនាំដើមនៃ​កម្មវិធី​រុករក​",
        "editfont-style": "​រចនាបថ​ពុម្ព​អក្សរ​ក្នុងប្រអប់កែប្រែ​៖",
-       "editfont-default": "លំនាំដើមនៃ​កម្មវិធី​រុករក​",
        "editfont-monospace": "ពុម្ព​អក្សរ​ដែល​ដក​ឃ្លា​តែមួយ​",
        "editfont-sansserif": "ពុម្ពអក្សរ​​គ្មានកន្ទុយ (Sans-serif font)",
        "editfont-serif": "ពុម្ពអក្សរ​​មានកន្ទុយ (Serif font)",
        "searcharticle": "ទៅ",
        "history": "ប្រវត្តិទំព័រ",
        "history_short": "ប្រវត្តិ",
+       "history_small": "ប្រវត្តិ",
        "updatedmarker": "ត្រូវបានបន្ទាន់សម័យបន្ទាប់ពីពេលខ្ញុំចូលមើលចុងក្រោយ",
        "printableversion": "ទម្រង់​សម្រាប់បោះពុម្ភ",
        "permalink": "តំណភ្ជាប់អចិន្ត្រៃយ៍",
        "explainconflict": "ចាប់តាំងពីអ្នកបានបង្កើតទំព័រនេះមក មានអ្នកដទៃបានកែប្រែវាហើយ។ ផ្នែកខាងលើនៃទំព័រអត្ថបទ គឺជាកំណែប្រែថ្មី។ កំណែប្រែរបស់អ្នក គឺនៅផ្នែកខាងក្រោម។ ចូរដាក់កំណែប្រែរបស់អ្នកបញ្ចូលគ្នាជាមួយអត្ថបទដែលមាននៅផ្នែកខាងលើ។​\n<strong>អត្ថបទនៅផ្នែកខខាងលើ</strong> នឹងត្រូវរក្សាទុក នៅពេលអ្នក ចុច\"រក្សាទំព័រ\"។",
        "yourtext": "អត្ថបទរបស់អ្នក",
        "storedversion": "កំណែដែលបានស្តារឡើងវិញ",
-       "nonunicodebrowser": "​'''ប្រយ័ត្ន​៖ កម្មវិធី​រុករក​របស់​អ្នក​មិន​គាំ​ទ្រ​ដល់​អក្សរ​ពុម្ព​យូនីកូដ​ទេ​។'''\nមាន​ដំណោះ​ស្រាយ​មួយ​ដែល​អនុញ្ញាត​ឲ្យ​អ្នក​កែ​ប្រែ​ទំព័រ​ដោយ​សុវត្ថិភាព​៖ តួ​អក្សរមិន​មែន​ ASCII ​(non-ASCII) នឹង​បង្ហាញ​នៅ​ក្នុង​ប្រអប់​កែ​ប្រែ​ជា​កូដ​គោល១៦ ។",
        "editingold": "'''បម្រាម:អ្នកកំពុងតែកែកំណែប្រែដែលហួសសម័យរបស់ទំព័រនេះ។\n\nប្រសិនបើអ្នករក្សាវាទុក កំណែប្រែពីមុនទាំងប៉ុន្មាននឹងត្រូវបាត់បង់។'''",
        "yourdiff": "ចំណុចខុសគ្នា",
        "copyrightwarning": "សូមធ្វើការកត់សម្គាល់​ថា គ្រប់ការរួមចំណែក​របស់អ្នក​នៅលើ{{SITENAME}} ត្រូវបាន​ផ្សព្វផ្សាយ​តាម​លិខិតអនុញ្ញាត $2 (សូម​មើល $1 សម្រាប់​ព័ត៌មាន​លម្អិត) ។ បើអ្នកមិនចង់ឱ្យ​​ត្រូវបានអ្នកដទៃធ្វើការកែប្រែ ផ្សព្វផ្សាយបន្តសំណេរ​របស់អ្នកទេនោះ សូមអ្នកកុំដាក់​ស្នើវា​នៅទីនេះអី។<br />\nអ្នកត្រូវសន្យាថា ​អ្នកសរសេរវា​ដោយខ្លួនអ្នក ឬបានចម្លងវា​ពី​កម្មសិទ្ធិសាធារណៈឬពីប្រភពសេរី ។\n'''មិនត្រូវ​ដាក់ស្នើ​ការងារមានជាប់កម្មសិទ្ឋិបញ្ញាដោយគ្មានការអនុញ្ញាតទេ!'''",
        "block": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockip": "ហាមឃាត់{{GENDER:$1|អ្នកប្រើប្រាស់}}",
-       "blockip-legend": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockiptext": "សូម​ប្រើប្រាស់​សំណុំ​បែបបទ​ខាងក្រោម​ដើម្បី​ហាមឃាត់ការសរសេរ​ពី​អាសយដ្ឋាន IP ឬ​ឈ្មោះ​អ្នកប្រើប្រាស់ណាមួយ​។\nការ​ធ្វើ​បែបនេះ​គួរតែ​ធ្វើឡើង​ក្នុង​គោលបំណង​បង្ការ​ការប៉ុនប៉ង​បំផ្លាញ(vandalism)ដូច​ដែល​មាន​ចែង​ក្នុង[[{{MediaWiki:Policy-url}}|គោលការណ៍]]។\nសូមបំពេញមូលហេតុច្បាស់លាស់មួយខាងក្រោម (ឧទាហរណ៍៖ រាយឈ្មោះទំព័រនានាដែលត្រូវបានគេបំផ្លាញ)។",
        "ipaddressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "ipbexpiry": "រយៈពេលផុតកំណត់៖",
index d0c572b..8a586da 100644 (file)
        "anonpreviewwarning": "<em>로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서의 편집 역사에 남게 됩니다.</em>",
        "missingsummary": "'''알림:''' 편집 요약을 적지 않았습니다.\n\"$1\" 버튼을 다시 클릭하면 편집 요약 없이 편집이 저장됩니다.",
        "selfredirect": "<strong>경고:</strong> 자기 자신으로 문서를 넘겨주고 있습니다.\n넘겨줄 대상을 잘못 입력했거나, 잘못된 문서를 편집하고 있을 수 있습니다.\n\"$1\" 버튼을 다시 클릭하면, 넘겨주기 문서가 생성됩니다.",
-       "missingcommenttext": "아래에 내용을 채워 넣어 주세요.",
+       "missingcommenttext": "댓글을 입력해 주십시오.",
        "missingcommentheader": "<strong>알림:</strong> 이 댓글에 제목을 입력하지 않았습니다.\n\"$1\" 버튼을 다시 클릭하면 제목 없이 편집이 저장됩니다.",
        "summary-preview": "편집 요약 미리 보기:",
        "subject-preview": "주제 미리 보기:",
        "missing-revision": "\"{{FULLPAGENAME}}\"이라는 문서의 #$1판이 존재하지 않습니다.\n\n이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.",
        "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하기 전에 계정이 존재하는지 확인해주세요.",
        "userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
-       "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최 차단 기록을 참조하십시오:",
+       "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최 차단 기록을 참조하십시오:",
        "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>파이어폭스 / 사파리</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em>을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>구글 크롬</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>인터넷 익스플로러</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>오페라:</strong> <em>메뉴 → 설정</em>(맥의 경우 <em>오페라 → 환경 설정</em>)으로 이동한 다음 <em>개인 정보 보호 및 보안 → 검색 데이터 지우기 → 캐시한 이미지 및 파일</em>을 누름.",
        "usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "editpage-cannot-use-custom-model": "이 문서의 콘텐츠 모델은 변경될 수 없습니다.",
        "longpageerror": "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''\n저장할 수 없습니다.",
        "readonlywarning": "<strong>경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.</strong>\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n데이터베이스를 잠근 시스템 관리자가 남긴 설명은 다음과 같습니다: $1",
-       "protectedpagewarning": "<strong>경고: ì\9d´ ë¬¸ì\84\9cë\8a\94 ê´\80리ì\9e\90 ê¶\8cí\95\9cì\9d´ ì\9e\88ë\8a\94 ì\82¬ì\9a©ì\9e\90ë§\8c í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.</strong>\nì\9d´ ë¬¸ì\84\9cì\9d\98 ìµ\9cê·¼ ê¸°ë¡\9dì\9d\84 ì°¸ì¡°í\95\98ì\8b­ì\8b\9cì\98¤:",
-       "semiprotectedpagewarning": "<strong>참고:</strong> ì\9d´ ë¬¸ì\84\9cë\8a\94 ê³\84ì \95ì\9d\84 ë\93±ë¡\9dí\95\9c ì\82¬ì\9a©ì\9e\90ë§\8cì\9d´ í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nì\9d´ ë¬¸ì\84\9cì\9d\98 ìµ\9cê·¼ ê¸°ë¡\9dì\9d\84 ì°¸ì¡°í\95\98ì\8b­ì\8b\9cì\98¤:",
+       "protectedpagewarning": "<strong>경고: ì\9d´ ë¬¸ì\84\9cë\8a\94 ê´\80리ì\9e\90 ê¶\8cí\95\9cì\9d´ ì\9e\88ë\8a\94 ì\82¬ì\9a©ì\9e\90ë§\8c í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.</strong>\nìµ\9cì\8b  ê¸°ë¡\9dì\9d\80 ì°¸ì¡°ë¥¼ ì\9c\84í\95´ ì\95\84ë\9e\98ì\97\90 ì \9cê³µë\90©ë\8b\88ë\8b¤:",
+       "semiprotectedpagewarning": "<strong>참고:</strong> ì\9d´ ë¬¸ì\84\9cë\8a\94 ê³\84ì \95ì\9d\84 ë\93±ë¡\9dí\95\9c ì\82¬ì\9a©ì\9e\90ë§\8cì\9d´ í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nìµ\9cì\8b  ê¸°ë¡\9dì\9d\80 ì°¸ì¡°ë¥¼ ì\9c\84í\95´ ì\95\84ë\9e\98ì\97\90 ì \9cê³µë\90©ë\8b\88ë\8b¤:",
        "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 보호되어 있어 [[Special:ListGroupRights|특정 권한]]이 있는 사용자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
-       "titleprotectedwarning": "<strong>경고: ì\9d´ ë¬¸ì\84\9cë\8a\94 ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\96´, ë¬¸ì\84\9c를 ë§\8cë\93\9c려면 [[Special:ListGroupRights|í\8a¹ì \95í\95\9c ê¶\8cí\95\9c]]ì\9d´ í\95\84ì\9a\94í\95©ë\8b\88ë\8b¤.</strong>\nì\95\84ë\9e\98 ë¬¸ì\84\9cì\9d\98 ìµ\9cê·¼ ê¸°ë¡\9dì\9d\84 ì°¸ì¡°í\95\98ì\8b­ì\8b\9cì\98¤:",
+       "titleprotectedwarning": "<strong>경고: ì\9d´ ë¬¸ì\84\9cë\8a\94 ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\96´, ë¬¸ì\84\9c를 ë§\8cë\93\9c려면 [[Special:ListGroupRights|í\8a¹ì \95í\95\9c ê¶\8cí\95\9c]]ì\9d´ í\95\84ì\9a\94í\95©ë\8b\88ë\8b¤.</strong>\nìµ\9cì\8b  ê¸°ë¡\9dì\9d\80 ì°¸ì¡°ë¥¼ ì\9c\84í\95´ ì\95\84ë\9e\98ì\97\90 ì \9cê³µë\90©ë\8b\88ë\8b¤:",
        "templatesused": "이 문서에서 사용한 {{PLURAL:$1|틀}}:",
        "templatesusedpreview": "이 미리 보기에서 사용하고 있는 {{PLURAL:$1|틀}}:",
        "templatesusedsection": "이 문단에서 사용하고 있는 {{PLURAL:$1|틀}}:",
        "timezoneregion-europe": "유럽",
        "timezoneregion-indian": "인도양",
        "timezoneregion-pacific": "태평양",
-       "allowemail": "ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ê°\80 ë³´ë\82¸ ì\9d´ë©\94ì\9d¼ì\9d\84 ë°\9bì\9d\8c",
+       "allowemail": "ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ê°\80 ë\82´ê²\8c ì\9d´ë©\94ì\9d¼ì\9d\84 ë³´ë\82¼ ì\88\98 ì\9e\88ê²\8c í\97\88ì\9a©",
        "email-blacklist-label": "이 사용자들이 내게 이메일을 보내는 것을 금지합니다:",
        "prefs-searchoptions": "검색",
        "prefs-namespaces": "이름공간",
        "recentchanges-legend": "최근 바뀜 설정",
        "recentchanges-summary": "이 페이지에서 위키의 최근 바뀜을 추적합니다.",
        "recentchanges-noresult": "지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.",
+       "recentchanges-timeout": "이 검색의 시간이 초과되었습니다. 다른 검색 변수를 사용할 수 있습니다.",
+       "recentchanges-network": "기술적인 문제로 결과를 불러올 수 없습니다. 페이지를 다시 새로 고침해 주십시오.",
        "recentchanges-feed-description": "이 피드에 위키의 최근 바뀜을 추적합니다.",
        "recentchanges-label-newpage": "새 문서",
        "recentchanges-label-minor": "사소한 편집",
        "recentchanges-submit": "보기",
        "rcfilters-tag-remove": "'$1' 제거",
        "rcfilters-legend-heading": "<strong>약어 목록:</strong>",
-       "rcfilters-other-review-tools": "<strong>다른 검토 도구</strong>",
+       "rcfilters-other-review-tools": "다른 검토 도구",
        "rcfilters-group-results-by-page": "문서별로 묶음",
        "rcfilters-grouping-title": "묶기",
        "rcfilters-activefilters": "사용 중인 필터",
        "rcfilters-days-show-hours": "$1{{PLURAL:$1|시간}}",
        "rcfilters-highlighted-filters-list": "강조됨: $1",
        "rcfilters-quickfilters": "저장된 필터",
-       "rcfilters-quickfilters-placeholder-title": "저장된 링크가 아직 없습니다",
+       "rcfilters-quickfilters-placeholder-title": "저장된 필터가 아직 없습니다",
        "rcfilters-quickfilters-placeholder-description": "필터 설정을 저장하고 나중에 다시 사용하려면 아래의 사용 중인 필터 영역의 북마크 아이콘을 클릭하십시오.",
        "rcfilters-savedqueries-defaultlabel": "저장된 필터",
        "rcfilters-savedqueries-rename": "이름 바꾸기",
        "rcfilters-savedqueries-apply-and-setdefault-label": "기본 필터 만들기",
        "rcfilters-savedqueries-cancel-label": "취소",
        "rcfilters-savedqueries-add-new-title": "현재의 필터 설정 저장",
+       "rcfilters-savedqueries-already-saved": "이 필터는 이미 저장되어 있습니다. 새로운 저장된 필터를 만들려면 설정을 변경하십시오.",
        "rcfilters-restore-default-filters": "기본 필터 복구",
        "rcfilters-clear-all-filters": "필터 모두 지우기",
        "rcfilters-show-new-changes": "최신 변경사항 보기",
-       "rcfilters-search-placeholder": "최근 바뀜 필터 (둘러보거나 입력을 시작하세요)",
+       "rcfilters-search-placeholder": "필터 바뀜 (메뉴를 사용하거나 필터 이름을 검색하세요)",
        "rcfilters-invalid-filter": "유효하지 않은 필터",
        "rcfilters-empty-filter": "활성화된 필터가 없습니다. 모든 기여가 표시됩니다.",
        "rcfilters-filterlist-title": "필터",
        "rcfilters-filter-user-experience-level-unregistered-label": "등록 안 됨",
        "rcfilters-filter-user-experience-level-unregistered-description": "로그인하지 않은 편집자.",
        "rcfilters-filter-user-experience-level-newcomer-label": "신규 사용자",
-       "rcfilters-filter-user-experience-level-newcomer-description": "10í\9a\8c ë¯¸ë§\8cì\9d\98 í\8e¸ì§\91 ë°\8f 4ì\9d¼ ë¯¸ë§\8cì\9d\98 í\99\9cë\8f\99.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10í\9a\8c ë¯¸ë§\8cì\9d\98 í\8e¸ì§\91 ë\98\90ë\8a\94 4ì\9d¼ ë¯¸ë§\8cì\9d\98 í\99\9cë\8f\99ì\9d\84 í\95\9c ë\93±ë¡\9dë\90\9c í\8e¸ì§\91ì\9e\90.",
        "rcfilters-filter-user-experience-level-learner-label": "학습자",
        "rcfilters-filter-user-experience-level-learner-description": "\"신규 사용자\" 보다 경험이 더 많지만 \"능숙한 사용자\" 보다는 적습니다.",
        "rcfilters-filter-user-experience-level-experienced-label": "능숙한 사용자",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:아님</strong> $1",
        "rcfilters-exclude-button-off": "선택 제외",
        "rcfilters-exclude-button-on": "선택 제외",
-       "rcfilters-view-advanced-filters-label": "고급 필터",
        "rcfilters-view-tags": "태그된 편집",
        "rcfilters-view-namespaces-tooltip": "이름공간으로 결과 필터",
        "rcfilters-view-tags-tooltip": "편집 태그를 사용하여 결과 필터",
        "uploaded-script-svg": "업로드된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.",
        "uploaded-hostile-svg": "업로드된 SVG 파일의 스타일 요소에 안전하지 않은 CSS가 있습니다.",
        "uploaded-event-handler-on-svg": "이벤트 핸들러 속성 <code>$1=\"$2\"</code> 설정은 SVG 파일에서 사용할 수 없습니다.",
-       "uploaded-href-attribute-svg": "SVG 파일의 href 속성은 http:// 또는 https:// 대상의 링크만 허용되지만 <code>&lt;$1 $2=\"$3\"&gt;</code>를 발견했습니다.",
+       "uploaded-href-attribute-svg": "<a> 요소는 data: (내장 파일), http://, https://, 문서의 부분 (#, 동일 문서) 타겟만을 링크(href)할 수 있습니다. <image>와 같은 그 외 요소는 data:와 부분 타겟만 허용됩니다. SVG 파일을 내보낼 때 사진을 포함해 보세요. <code>&lt;$1 $2=\"$3\"&gt;</code>를 발견했습니다.",
        "uploaded-href-unsafe-target-svg": "안전하지 않은 데이터를 가리키는 href를 발견했습니다: 업로드된 SVG 파일의 URI 대상 <code>&lt;$1 $2=\"$3\"&gt;</code>",
        "uploaded-animate-svg": "업로드된 SVG 파일에서 \"from\" 특성 <code>&lt;$1 $2=\"$3\"&gt;</code>을 이용 중 \"animate\" 태그가 href를 변경할 수 있음을 발견했습니다.",
        "uploaded-setting-event-handler-svg": "이벤트 핸들러 속성을 차단으로 설정한 상태에서 <code>&lt;$1 $2=\"$3\"&gt;</code>가 업로드된 SVG 파일에서 발견되었습니다.",
        "uploadstash-refresh": "파일 목록을 새로 고침",
        "uploadstash-thumbnail": "섬네일 보기",
        "uploadstash-exception": "비공개로 업로드할 수 없습니다 ($1): \"$2\".",
+       "uploadstash-bad-path": "경로가 존재하지 않습니다.",
+       "uploadstash-bad-path-invalid": "경로가 유효하지 않습니다.",
+       "uploadstash-bad-path-unknown-type": "알 수 없는 유형 \"$1\".",
+       "uploadstash-bad-path-no-handler": "파일 $2의 mime $1에 대한 핸들러를 찾을 수 없습니다.",
+       "uploadstash-bad-path-bad-format": "\"$1\" 키는 적절한 포맷이 아닙니다.",
+       "uploadstash-file-not-found-no-thumb": "섬네일을 가져오지 못했습니다.",
+       "uploadstash-file-not-found-no-object": "섬네일을 위한 로컬 파일 객체를 만들 수 없습니다.",
+       "uploadstash-file-not-found-no-remote-thumb": "섬네일 가져오기를 실패했습니다: $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "content-type 헤더가 없습니다.",
+       "uploadstash-file-not-found-not-exists": "경로를 찾을 수 없거나 단순 파일이 아닙니다.",
+       "uploadstash-file-too-large": "$1 바이트를 초과하는 파일을 처리할 수 없습니다.",
+       "uploadstash-not-logged-in": "로그인한 사용자가 없습니다. 파일은 사용자에 속해야 합니다.",
+       "uploadstash-wrong-owner": "이 파일($1)은 현재 사용자에 속해있지 않습니다.",
+       "uploadstash-no-such-key": "해당 키($1)가 없으므로 제거할 수 없습니다.",
+       "uploadstash-no-extension": "확장자가 비어 있습니다.",
+       "uploadstash-zero-length": "파일 길이가 0입니다.",
        "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.",
        "img-auth-accessdenied": "접근이 거부됨",
        "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization을 참조하십시오.",
        "allpages-hide-redirects": "넘겨주기 숨기기",
        "cachedspecial-viewing-cached-ttl": "이 문서의 캐시된 판을 보고 있으며, 최대 $1만큼 지난 판일 수 일 수 있습니다.",
        "cachedspecial-viewing-cached-ts": "현재 이 문서는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.",
-       "cachedspecial-refresh-now": "최신 버전 보기.",
+       "cachedspecial-refresh-now": "최신판을 봅니다.",
        "categories": "분류 목록",
        "categories-submit": "보이기",
        "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참조하세요.",
        "imageinvalidfilename": "대상 파일 이름이 잘못되었습니다.",
        "fix-double-redirects": "원래 제목을 가리키는 넘겨주기를 새로 고침",
        "move-leave-redirect": "이동한 뒤 넘겨주기를 남기기",
-       "protectedpagemovewarning": "<strong>경고:</strong> 이 문서는 관리자ë§\8c ì\9d´ë\8f\99í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nìµ\9cê·¼ ê¸°ë¡\9dì\9d\84 ì°¸ì¡°ë¥¼ ì\9c\84í\95´ ì\95\84ë\9e\98ì\97\90 ì \9cê³µí\95©ë\8b\88ë\8b¤:",
-       "semiprotectedpagemovewarning": "<strong>참고:</strong> 이 문서는 등록된 사용자만이 이동할 수 있도록 보호되어 있습니다.\n최근 기록 내용이 참조를 위해 아래에 제공됩니다:",
+       "protectedpagemovewarning": "<strong>경고:</strong> 이 문서는 관리자 ê¶\8cí\95\9cì\9d´ ì\9e\88ë\8a\94 ì\82¬ì\9a©ì\9e\90ë§\8c ì\9d´ë\8f\99í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d ë³´í\98¸ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nìµ\9cì\8b  ê¸°ë¡\9dì\9d\80 ì°¸ì¡°ë¥¼ ì\9c\84í\95´ ì\95\84ë\9e\98ì\97\90 ì \9cê³µë\90©ë\8b\88ë\8b¤:",
+       "semiprotectedpagemovewarning": "<strong>참고:</strong> 이 문서는 등록된 사용자만이 이동할 수 있도록 보호되어 있습니다.\n최신 기록은 참조를 위해 아래에 제공됩니다:",
        "move-over-sharedrepo": "== 파일이 존재함 ==\n[[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 이동하면 공용의 파일을 덮어쓰게 될 것입니다.",
        "file-exists-sharedrepo": "선택한 파일 이름은 공용 저장소에서 사용 중입니다.\n다른 이름을 선택하세요.",
        "export": "문서 내보내기",
        "tooltip-minoredit": "이 편집을 사소한 편집으로 표시하기",
        "tooltip-save": "바뀐 내용 저장하기",
        "tooltip-publish": "변경사항 게시",
-       "tooltip-preview": "ë°\94ë\80\9cì\9d\84 ë¯¸ë¦¬ ë´\85ë\8b\88ë\8b¤. ì \80ì\9e¥í\95\98기 ì \84ì\97\90 ë¯¸ë¦¬ ë³´ê¸°ë¥¼ í\95´ì£¼ì\84¸ì\9a\94!",
+       "tooltip-preview": "ë°\94ë\80\90 ë\82´ì\9a©ì\9d\84 ë¯¸ë¦¬ ë´\85ë\8b\88ë\8b¤. ì \80ì\9e¥í\95\98기 ì \84ì\97\90 ë¯¸ë¦¬ ë³´ê¸°ë¥¼ í\95´ì£¼ì\84¸ì\9a\94.",
        "tooltip-diff": "자신이 바꾼 내용 보기",
        "tooltip-compareselectedversions": "이 문서에서 선택한 두 판 간의 차이를 비교",
        "tooltip-watch": "이 문서를 주시문서 목록에 추가",
        "pageinfo-firstuser": "문서 작성자",
        "pageinfo-firsttime": "문서 작성 날짜",
        "pageinfo-lastuser": "마지막 편집자",
-       "pageinfo-lasttime": "최근 편집 날짜",
+       "pageinfo-lasttime": "마지막으로 편집한 날짜",
        "pageinfo-edits": "총 편집 수",
        "pageinfo-authors": "총 서로 다른 편집자 수",
        "pageinfo-recent-edits": "최근 편집 수 (지난 $1 이내)",
index 28867f5..431a2b0 100644 (file)
@@ -56,7 +56,6 @@
        "underline-never": "Бир заманда да",
        "underline-default": "Браузерни джарашдырыуларын хайырландыр",
        "editfont-style": "Тюрлендириу джерни шрифтини тиби:",
-       "editfont-default": "Браузерни джарашдырыуларындан шрифт",
        "editfont-monospace": "Кенгленнген шрифт",
        "editfont-sansserif": "Sans-serif шрифт",
        "editfont-serif": "Сериф шрифт",
        "explainconflict": "Сиз тюрлендире тургъан сагъатда, ким эседа бы бетни тюрлендирген этгенди.\nБаш терезеде сиз бусагъатдагъы текстни кёресиз.\nТюбюнде терезеде сизни варинтды.\nСиз этген тюрлениулени тюб терезеден баш терезеге кёчюрюгюз.\n«$1» басылса баш терезеде текст сакъланныкъды.",
        "yourtext": "Сизни текстигиз",
        "storedversion": "Сакъланнган версия",
-       "nonunicodebrowser": "'''Эсгертиу: сизни браузеригиз Юникод кодировканы танымайдв.'''\nБетлени тюрлендирген сагъатда ASCII болмагъан символла оналтылыкъ кодларына алышдырыллыкъдыла.",
        "editingold": "'''Эсгертиу: сиз бу бетни эскирген версиясын тюрлендиресиз.'''\nСакълатхан тиекге басхан сагъатда, джангы версиялада этилген тюрлендириуле тас боллукъдула.",
        "yourdiff": "Айырмала",
        "copyrightwarning": "Статьяны текстинде бютеу къошуула, тюрлендириуле $2 лицензияны тамалында (къарагъыз: $1) чыкъгъаннга саналгъанына эс бёлюгюз!\nСизни текстлеригизни хар излегеннге эркин джайыллыгъын эмда тюрлендириллигин излеймей эсегиз, аланы бери салмагъыз.<br />\nДагъыда сиз, этилген тюрлениулени автору болгъаныгъызгъа, неда аланы эркин джайылыргъа эмда тюрлендирирге эркинлик берген джерледен алыннганына шагъатлыкъ этесиз.<br />\n'''АВТОР ХАКЪ БЛА ДЖАКЪЛАННГАН МАТЕРИАЛЛАНЫ ЭРКИНЛИКСИЗ САЛМАГЪЫЗ!'''",
        "recentchanges-legend-heading": "<strong>Легенда:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcfilters-other-review-tools": "<strong>Башха тинтиу адырла</strong>",
+       "rcfilters-other-review-tools": "Башха тинтиу адырла",
        "rcfilters-activefilters": "Актив фильтрле",
        "rcfilters-limit-shownum": "Ахыр {{PLURAL:$1|тюрлениуню}} кёргюзт",
        "rcfilters-quickfilters-placeholder-title": "Сакъланнган джибериуле алкъын джокъдула",
        "block": "Къошулуучуну блокла",
        "unblock": "Къошулуучуну блок этилиуюн алыу",
        "blockip": "Бу къошулуучуну блок эт",
-       "blockip-legend": "Къошулуучуну блокга салыу",
        "blockiptext": "Тюбюндеги форманы хайырланыб белгили бир IP-ден неда регистрация этилген къошулуучуну тюрлениу этиуюню тыяллыкъсыз. Бу, джангыз вандализмни тыяр ючюн эм [[{{MediaWiki:Policy-url}}|джорукълагъа]] келишиулю этилирге керекди. Тюбюрек тыйыу бла байламлы ангылатыу джазыгъыз. (юлгю: -Бу- бетледе вандализм этилгенди).",
        "ipaddressorusername": "IP-адрес неда къошулуучу ат:",
        "ipbexpiry": "Бошаллыкъды (ётсе):",
index 736e5cf..bc18355 100644 (file)
        "mytalk": "Pakinat",
        "navigation": "Navigacija",
        "and": "&#32;ta",
-       "qbfind": "Eči",
-       "qbedit": "Kohenna",
-       "qbpageoptions": "Tämä šivu",
-       "qbmyoptions": "Omat šivut",
        "namespaces": "Nimitilat",
        "variants": "Variantit",
        "navigation-heading": "Navigacija",
        "edit": "Kohentele",
        "create": "Luaji šivu",
        "create-local": "Lisyä paikallini kuvauš",
-       "editthispage": "Kohentele tätä šivuo",
-       "create-this-page": "Luaji tämä šivu",
        "delete": "Poistua",
-       "deletethispage": "Poissa tämä šivu",
        "newpage": "Uuši šivu",
        "talkpagelinktext": "pakina",
        "personaltools": "Henkilökohtaset ruatokalut",
        "otherlanguages": "Muilla kielillä",
        "redirectedfrom": "(Šiirretty sivulta $1)",
        "redirectto": "Ohjauš šivulla:",
-       "lastmodifiedat": "Viimesekši tätä šivuo on kohenneltu $1, $2 aikah.",
+       "lastmodifiedat": "Viimekši tätä šivuo on kohenneltu $1, $2 aikah.",
        "jumpto": "Šiirry:",
        "jumptonavigation": "navigacija",
        "jumptosearch": "eči",
        "nstab-template": "Malli",
        "nstab-category": "Luokka",
        "mainpage-nstab": "Piäšivu",
+       "nosuchspecialpage": "Tätä erityistä šivuo ei ole löytyn",
+       "nospecialpagetext": "<strong>Erityišivuo ei ole löytyn.</strong>\n\nErityisšivujen luvettelo löytyy tiältä [[Special:SpecialPages|{{int:specialpages}}]]",
        "error": "Hairahuš",
        "databaseerror-query": "Kyšely: $1",
        "databaseerror-error": "Hairahuš: $1",
        "template-semiprotected": "(ošittain šuojattu)",
        "hiddencategories": "Tämä šivu kuuluu {{PLURAL:$1|1 peitettyh kategorijah|$1 peitettylöih kategorijoih}}:",
        "permissionserrorstext-withaction": "Šiula ei ole oikeutta {{lcfirst:$2}} {{PLURAL:$1|šeuruavašta šyyštä|šeuruavista šyistä}}:",
-       "moveddeleted-notice": "Tämä šivu on poistettu.\nAlla on tämän šivun poisto- ta šiirtoistorija.",
+       "moveddeleted-notice": "Tämä šivu on poissettu.\nAlla on tämän šivun poisto- ta šiirtoistorija.",
        "viewpagelogs": "Näytä tämän šivun lokit",
        "currentrev-asof": "Nykyni versija $1",
        "revisionasof": "Versija $1",
        "cur": "nyk.",
        "last": "iell.",
        "page_last": "iell.",
+       "histfirst": "vanhin",
+       "histlast": "uušin",
        "rev-delundel": "muuta näkyvyttä",
        "history-title": "Šivun ”$1” muutošistorija",
        "difference-title": "Ero šivun ”$1” versijien välillä",
        "searchresultshead": "Ečindy",
        "right-writeapi": "Käyttyä kirjutuš-APIe",
        "newuserlogpage": "Uušien käyttäjien luvettelo",
+       "action-edit": "kohentele tätä šivuo",
        "enhancedrc-history": "istorija",
        "recentchanges": "Uuvvet muutokšet",
        "recentchanges-legend": "Verekšien kohennukšien ašetukšet",
        "rcshowhidebots-show": "Näytä",
        "rcshowhidebots-hide": "Peitä",
        "rcshowhideliu": "$1 rekisteröitynyöt käyttäjät",
+       "rcshowhideliu-show": "Näytä",
        "rcshowhideliu-hide": "Peitä",
        "rcshowhideanons": "$1 anonimiset käyttäjät",
        "rcshowhideanons-show": "Näytä",
        "allpagessubmit": "Mäne",
        "categories": "Kategorijat",
        "linksearch-ok": "Ečindy",
-       "watchlist": "Kaččuolistu",
+       "watchlist": "Tarkkailulista",
        "mywatchlist": "Valvontaluvettelo",
        "watch": "Valvo",
+       "unwatch": "Lopeta tarkkailu",
        "dellogpage": "Poistoloki",
        "rollbacklink": "Tuo entini versija",
        "rollbacklinkcount": "palauta $1 {{PLURAL:$1|muutoš|muutošta}}",
        "anoncontribs": "Omat kohennukšet",
        "month": "Kuukauši",
        "year": "Vuosi",
+       "sp-contributions-blocklog": "šalpaušloki",
+       "sp-contributions-uploads": "Lataukšet",
+       "sp-contributions-logs": "lokit",
+       "sp-contributions-talk": "pakina",
+       "sp-contributions-search": "Eči kohentukšia",
+       "sp-contributions-username": "IP-ošoiteh tahi käyttäjän nimi:",
+       "sp-contributions-toponly": "Näytä vain kohentukšet, kumpasissa näkyy uušin versijo.",
        "sp-contributions-submit": "Ečindy",
        "whatlinkshere": "Linkit tänne",
        "whatlinkshere-title": "Šivut, kumpaset viitatah šivulla \"$1\"",
index f6c63b5..7b3dc6b 100644 (file)
        "timezoneregion-europe": "Ewropa",
        "timezoneregion-indian": "Okyanûsa Hindî",
        "timezoneregion-pacific": "Okyanûsa Mezin",
-       "allowemail": "Ji bikarhênerên dî e-nameyan qebûl bike",
+       "allowemail": "Ji bikarhênerên din e-peyaman bistîne",
        "prefs-searchoptions": "Lê bigere",
        "prefs-namespaces": "Valahiyên nav",
        "default": "asayî",
        "recentchanges-legend-heading": "<strong>Ravekirina kurtenavan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Special:NewPages|lîsteya rûpelên nû]])",
        "recentchanges-submit": "Nîşan bide",
+       "rcfilters-legend-heading": "<strong>Lîsteya kurtenavan:</strong>",
        "rcfilters-activefilters": "Parzûnên çalak",
        "rcfilters-limit-shownum": "{{PLURAL:$1|Guherandina dawî|$1 guherandinên dawî}} nîşan bide",
-       "rcfilters-filter-editsbyself-label": "Guhêrandinên ji yaliyê te",
+       "rcfilters-days-show-days": "{{PLURAL:$1|rojek|$1 roj}}",
+       "rcfilters-days-show-hours": "{{PLURAL:$1|saetek|$1 saet}}",
+       "rcfilters-quickfilters": "Parzûnên tomarkirî",
+       "rcfilters-savedqueries-defaultlabel": "Parzûnên tomarkirî",
+       "rcfilters-savedqueries-rename": "Nav biguherîne",
+       "rcfilters-savedqueries-remove": "Jê bibe",
+       "rcfilters-savedqueries-new-name-label": "Nav",
+       "rcfilters-savedqueries-cancel-label": "Betal bike",
+       "rcfilters-filterlist-title": "Parzûn",
+       "rcfilters-filter-editsbyself-label": "Guhêrandinên ji aliyê te",
        "rcfilters-filter-editsbyother-label": "Guherandinên ji aliyên kesên din",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Mirov (ne bot)",
        "rcfilters-filter-categorization-label": "Guherandinên kategoriyan",
        "rcfilters-view-advanced-filters-label": "Parzûnên pêşketî",
        "rclistfrom": "Guherandinên ji $3 $2 şûnde nîşan bide",
        "recentchangeslinked-feed": "Guherandinên peywend",
        "recentchangeslinked-toolbox": "Guherandinên peywend",
        "recentchangeslinked-title": "Guherandinên têkildarî \"$1\"",
-       "recentchangeslinked-summary": "Ev lîste, ji rûpela destnîşankirî (an jî endamên destnîşankirî) re rûpelê lîsteya guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di [[Special:Watchlist|lîsteya te ya şopandinê]] da bi nivîsa <strong>estûr<strong> tên nîşandan.",
+       "recentchangeslinked-summary": "Ev lîste, ji rûpela destnîşankirî (an jî endamên destnîşankirî) re rûpelê lîsteya guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di [[Special:Watchlist|lîsteya te ya şopandinê]] da bi nivîsa <strong>stûr</strong> tên nîşandan.",
        "recentchangeslinked-page": "Navê rûpelê:",
        "recentchanges-page-added-to-category": "[[:$1]] li kategoriyê hate zêdekirin",
        "recentchanges-page-removed-from-category": "[[:$1]] ji kategoriyê hate jêbirin",
index 0c52fb4..a70c190 100644 (file)
@@ -73,7 +73,6 @@
        "underline-never": "Numquam",
        "underline-default": "Defalta navigatri interretialis",
        "editfont-style": "Stilus:",
-       "editfont-default": "iuxta navigatrum",
        "editfont-sansserif": "Fons Sans-serif",
        "editfont-serif": "Fons Serif",
        "sunday": "dies Solis",
        "anontalk": "Disputatio",
        "navigation": "Navigatio",
        "and": "&#32;et",
-       "qbfind": "Invenire",
-       "qbbrowse": "Perspicere",
-       "qbedit": "Recensere",
-       "qbpageoptions": "Optiones paginae",
-       "qbmyoptions": "Paginae meae",
        "faq": "Quaestiones frequentes",
-       "faqpage": "Project:Quaestiones frequentes",
        "actions": "Actiones",
        "namespaces": "Spatia nominalia",
        "variants": "Variantes",
        "view-foreign": "Legere apud {{grammar:accusative|$1}}",
        "edit": "Recensere",
        "create": "Creare",
-       "editthispage": "Recensere hanc paginam",
-       "create-this-page": "Creare hanc paginam",
        "delete": "Delere",
-       "deletethispage": "Delere hanc paginam",
-       "undeletethispage": "Hanc paginam restituere",
        "undelete_short": "{{PLURAL:$1|Unam recensionem|$1 recensiones}} restituere",
        "viewdeleted_short": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}} inspicere",
        "protect": "Protegere",
        "protect_change": "mutare",
-       "protectthispage": "Protegere hanc paginam",
        "unprotect": "Protectionem mutare",
-       "unprotectthispage": "Protectionem huius paginae mutare",
        "newpage": "Nova pagina",
-       "talkpage": "Disputare hanc paginam",
        "talkpagelinktext": "Disputatio",
        "specialpage": "Pagina specialis",
        "personaltools": "Instrumenta personalia",
-       "articlepage": "Videre rem",
        "talk": "Disputatio",
        "views": "Visae",
        "toolbox": "Arca ferramentorum",
-       "userpage": "Videre paginam usoris",
-       "projectpage": "Videre consilium",
        "imagepage": "Videre paginam fasciculi",
        "mediawikipage": "Videre nuntium",
        "templatepage": "Videre formulam",
        "explainconflict": "Alius hanc paginam mutavit postquam eadem recensere incipiebas.\nCapsa superior paginae verba recentissima continet.\nMutationes tuae in capsa inferiore monstrantur.\nMutationes tuae in verba superiora adiungare debes.\n'''Solum''' verba capsae superioris servabuntur quando \"$1\" premes.",
        "yourtext": "Tua redactio",
        "storedversion": "Redactio modo servata",
-       "nonunicodebrowser": "'''CAVETO: Navigatorium retiale tuum systemati UNICODE morem non gerit. Modum habemus quo commentationes sine damno recenseas: litterae non-ASCII in capsa sub veste hexadecimali ostendentur.'''",
        "editingold": "'''CAVE, ne huius paginae redactionem recenses obsoletam!\nQua servata omnes recensiones abhinc factas peribunt.'''",
        "yourdiff": "Differentia",
        "copyrightwarning": "Nota bene omnia contributa divulgari sub ''$2'' (vide singula apud $1).\nNisi vis verba tua crudelissime recenseri, mutari, et ad libidinem redistribui, noli ea submittere.<br />\nNobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in \"dominio publico\" exscripsisse.\n'''NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!'''",
        "sp-contributions-username": "Locus IP aut nomen usoris:",
        "sp-contributions-submit": "Quaerere",
        "whatlinkshere": "Nexus ad paginam",
-       "whatlinkshere-title": "Paginae quae ad \"$1\" nectunt",
+       "whatlinkshere-title": "Paginae quae ad \"$1\" nectuntur",
        "whatlinkshere-page": "Pagina:",
        "linkshere": "Paginae sequentes ad '''[[:$1]]''' nectunt:",
        "nolinkshere": "Nullae paginae ad '''[[:$1]]''' nectunt.",
        "whatlinkshere-hideimages": "$1 nexus fasciculi",
        "whatlinkshere-filters": "Filtra",
        "blockip": "Usorem obstruere",
-       "blockip-legend": "Usorem vel locum IP obstruere",
        "blockiptext": "Forma infra data utere, ut quendam usorem vel locum IP arceas a scribendo.\nQuod non nisi secundum [[{{MediaWiki:Policy-url}}|hoc consilium]] fiat, ut vandalismus supprimatur.\nRationem certam da (exempli gratia titulos paginarum, quibus iste usor more vandalico nocuit)!",
        "ipaddressorusername": "Locus IP aut nomen usoris:",
        "ipbexpiry": "Exitus:",
        "compare-page2": "Pagina 2",
        "compare-rev1": "Redactio una",
        "compare-rev2": "Redactio altera",
+       "diff-form": "'''forma'''",
        "htmlform-submit": "Submittere",
        "htmlform-reset": "Mutationes abrogare",
        "htmlform-selectorother-other": "Aliud",
index bb39b02..159d808 100644 (file)
        "underline-never": "Nunca",
        "underline-default": "Aspekto o opsyon prederminada del navegador",
        "editfont-style": "Modo de tipografía de la rējión de trocamiento",
-       "editfont-default": "Modo supozado del navigador",
        "editfont-monospace": "Tipografía que cuvre lugar fikso",
        "editfont-sansserif": "Tipografía sans-serif",
        "editfont-serif": "Tipografía serif",
        "sunday": "Alhadh",
        "monday": "Lunes",
-       "tuesday": "Martes",
+       "tuesday": "martes",
        "wednesday": "Miércoles",
        "thursday": "Juğeves",
        "friday": "Viernes",
        "thu": "Juğ",
        "fri": "Vie",
        "sat": "Shab",
-       "january": "Jenero",
-       "february": "Febrero",
-       "march": "Março",
-       "april": "Abril",
-       "may_long": "Mayo",
-       "june": "Junio",
-       "july": "Julio",
-       "august": "Agosto",
-       "september": "Setiembre",
-       "october": "Ochobre",
-       "november": "Noviembre",
-       "december": "Diziembre",
+       "january": "jenero",
+       "february": "febrero",
+       "march": "março",
+       "april": "abril",
+       "may_long": "mayo",
+       "june": "junio",
+       "july": "julio",
+       "august": "agosto",
+       "september": "septembre",
+       "october": "oktobre",
+       "november": "novembre",
+       "december": "decembre",
        "january-gen": "Jenero",
        "february-gen": "Febrero",
        "march-gen": "Março",
        "october-gen": "Ochobre",
        "november-gen": "Noviembre",
        "december-gen": "Diziembre",
-       "jan": "Jen",
-       "feb": "Feb",
-       "mar": "Mar",
-       "apr": "Abr",
-       "may": "May",
-       "jun": "Jun",
-       "jul": "Jul",
-       "aug": "Ago",
-       "sep": "Set",
-       "oct": "Ocho",
-       "nov": "Nov",
-       "dec": "Diz",
+       "jan": "jen",
+       "feb": "feb",
+       "mar": "mar",
+       "apr": "abr",
+       "may": "may",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "ago",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "dec",
        "january-date": "Jenero $1",
        "february-date": "Fevrero $1",
        "march-date": "Marso $1",
        "mytalk": "Diskusyón",
        "anontalk": "Diskusyón para este adresso de IP",
        "navigation": "Navigación",
-       "and": "&#32;i",
-       "qbfind": "Topar",
-       "qbbrowse": "Navigar",
-       "qbedit": "Trocar",
-       "qbpageoptions": "Esta hoja",
-       "qbmyoptions": "Mis hojas",
+       "and": "&#32;y",
        "faq": "DDS",
-       "faqpage": "Project:DDS",
        "actions": "Aksiones",
        "namespaces": "Espacios de nombres",
        "variants": "Variantes",
-       "navigation-heading": "Menu de navigasyon",
+       "navigation-heading": "Menű de navigación",
        "errorpagetitle": "Yerro",
        "returnto": "Tornar a $1.",
        "tagline": "De {{SITENAME}}",
        "search": "Buxcar",
        "searchbutton": "Buxcar",
        "go": "Ir",
-       "searcharticle": "Ir",
+       "searcharticle": "Yir",
        "history": "La istoria de la hoja",
        "history_short": "Istoria",
        "updatedmarker": "trocado desde mi visita de alcavo",
-       "printableversion": "La forma parâ imprimir",
+       "printableversion": "Forma imprimivle",
        "permalink": "Atamiento permanente",
        "print": "Imprimir",
        "view": "Ver",
        "edit": "Trocar",
        "create": "Criar",
-       "editthispage": "Trocar esta hoja",
-       "create-this-page": "Criar esta hoja",
        "delete": "Efaçar",
-       "deletethispage": "Efassar esta hoja",
-       "undeletethispage": "Restorar esta pajina",
        "undelete_short": "Traer atrás $1 {{PLURAL:$1|trocamientos|trocamientos}}",
        "viewdeleted_short": "Ver {{PLURAL:$1|un trocamiento efassado|$1 trocamientos efassados}}",
        "protect": "Guadrar",
        "protect_change": "trocar",
-       "protectthispage": "Guardar esta hoja",
        "unprotect": "Trocar guardadijo",
-       "unprotectthispage": "Trocar el guardadijo desta hoja",
        "newpage": "Hoja mueva",
-       "talkpage": "Diskutir la hoja",
-       "talkpagelinktext": "Messaje",
+       "talkpagelinktext": "diskutir",
        "specialpage": "Hoja Especial",
        "personaltools": "Aparates personales",
-       "articlepage": "Ver el artícůlo de contenido",
        "talk": "Diskusyón",
        "views": "Vistas",
        "toolbox": "Aparates",
-       "userpage": "Ver la hoja del usador",
-       "projectpage": "Ver la hoja del projeto",
        "imagepage": "Ver la hoja de la dosya",
        "mediawikipage": "Ver la hoja de messaje",
        "templatepage": "Ver la hoja del xablón",
        "otherlanguages": "En otras linguas",
        "redirectedfrom": "(Redirijado de $1)",
        "redirectpagesub": "Hoja redirigida",
-       "lastmodifiedat": "Esta hoja fue trocada por la vez dalcavo en el $1, a las $2 la ora.",
+       "lastmodifiedat": "Esta hoja la vez dalcavo se trocó enel $1, a las $2 la ora.",
        "viewcount": "Este pajina fue vijitado {{PLURAL:$1|una vez|$1 vezes}}.",
        "protectedpage": "Hoja guardada",
        "jumpto": "Saltar a:",
        "copyrightpage": "{{ns:project}}:Derechos del otor",
        "currentevents": "Novedades",
        "currentevents-url": "Project:Novedades",
-       "disclaimers": "Refuzo de responsabilitá",
-       "disclaimerpage": "Project:Refuzo de responsabilitá jeneral",
+       "disclaimers": "Refuso de responsabilidad",
+       "disclaimerpage": "Project:Refuso de responsabilidad jeneral",
        "edithelp": "¿Cómo se la troca?",
        "mainpage": "La Primera Hoja",
        "mainpage-description": "La Primera Hoja",
        "feed-invalid": "Tipo de kanal de subskripsyon es invalido.",
        "feed-unavailable": "Kanales de subskripsyon no estan disponibles",
        "site-rss-feed": "Fuente de RSS de $1",
-       "site-atom-feed": "Canal Atomo de $1",
+       "site-atom-feed": "Corriente Atomo de $1",
        "page-rss-feed": "\"$1\" Fuente RSS",
        "page-atom-feed": "Canal Atomo de $1",
        "red-link-title": "$1 (la hoja no egziste)",
        "newpageletter": "M",
        "boteditletter": "b",
        "rc_categories_any": "Kualkyer",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bayt|baytes}} dospués del trocamiento",
        "rc-enhanced-expand": "Amostrar los detalios",
        "rc-enhanced-hide": "Esconder los detalios",
        "recentchangeslinked": "Trocamientos atados",
        "tooltip-pt-preferences": "Mis preferencias",
        "tooltip-pt-watchlist": "Una lista de trocamientos en las hojas que escojites parâ cudiar u süivar (seguir)",
        "tooltip-pt-mycontris": "La lista de tus kontribüsyones",
-       "tooltip-pt-login": "Te encorajamos de entrar ma no estás obligado",
+       "tooltip-pt-login": "Te consejamos de entrar a tu cuento, portanto no sos obligado",
        "tooltip-pt-logout": "Sal de tu cuento",
-       "tooltip-ca-talk": "Diskusyón encima del artíkolo",
-       "tooltip-ca-edit": "Puedes trocar esta hoja. Ma te rogamos para que eches una ojada (previsteo) antes de enrejistrarla.",
+       "tooltip-pt-createaccount": "Te consejamos de avrir un cuento y hazer entrada allá, portanto no sos obligado",
+       "tooltip-ca-talk": "Diskusyón encima del contènido desta hoja",
+       "tooltip-ca-edit": "Troca esta hoja",
        "tooltip-ca-addsection": "Ajusta un kapítolo muevo",
        "tooltip-ca-viewsource": "Esta hoja está guadrada.\nPuedes ver su manadero",
        "tooltip-ca-history": "Enderechamientos passados desta hoja",
        "tooltip-ca-watch": "Ajusta esta hoja a tu lista de acavidamientos",
        "tooltip-ca-unwatch": "Quita esta hoja de tu lista de acavidamientos",
        "tooltip-search": "Buxca en {{SITENAME}}",
-       "tooltip-search-go": "Vate a la hoja con este nombre egzakto, si egziste.",
+       "tooltip-search-go": "Entra a la hoja con el mismo nombre, si la hoja egziste",
        "tooltip-search-fulltext": "Buxca este teksto en las hojas",
        "tooltip-p-logo": "Vijita la primera hoja",
        "tooltip-n-mainpage": "Vijita la primera hoja",
        "tooltip-n-mainpage-description": "Vijita la primera hoja",
-       "tooltip-n-portal": "Encima del projeto, lo que puedes hazer y ande topar todo",
+       "tooltip-n-portal": "Encima del projeto, lo que se puede hazer y ande se topa las cosas",
        "tooltip-n-currentevents": "Jhaberes de oy día en ancho",
-       "tooltip-n-recentchanges": "Lista de los trocamientos dalcavo en el viki",
-       "tooltip-n-randompage": "Carga una hoja por azardo",
-       "tooltip-n-help": "Ambézate y topa ayudo",
-       "tooltip-t-whatlinkshere": "Una lista de todas las hojas del viki que tienen atamientos a esta hoja",
+       "tooltip-n-recentchanges": "La lista de los trocamientos dalcavo enel viki",
+       "tooltip-n-randompage": "Avre una hoja por azardo",
+       "tooltip-n-help": "Para saver mas y tomar ayudo",
+       "tooltip-t-whatlinkshere": "La lista de todas las hojas del viki que tienen atamientos a esta hoja",
        "tooltip-t-recentchangeslinked": "Los trocamientos dalcavo en las hojas atadas a la ésta",
        "tooltip-feed-rss": "Sindicación RSS de esta hoja",
        "tooltip-feed-atom": "Canal Atomo parâ esta hoja",
        "tooltip-t-contributions": "Lista de kontribüsyón (ajustamientos) deste usador",
        "tooltip-t-emailuser": "A este usuario, mándale una letra electrόnica (ímey)",
        "tooltip-t-upload": "Suve dosyas",
-       "tooltip-t-specialpages": "Lista de todas las hojas especiales",
-       "tooltip-t-print": "La forma apropiada parâ imprimir esta hoja",
+       "tooltip-t-specialpages": "La lista de todas las hojas especiales",
+       "tooltip-t-print": "La vista desta hoja apropiada para imprimir",
        "tooltip-t-permalink": "Atamiento permanente (fikso) a este enderechamiento de la hoja",
        "tooltip-ca-nstab-main": "Ve el artíkolo",
        "tooltip-ca-nstab-user": "Ver la hoja del usador",
        "tooltip-undo": "«Des-hazer» abolta este trocamiento y lo avre en el modo de previsteo. Permete escrivir una razón en el rezümé.",
        "tooltip-summary": "Esplica en pocos biervos",
        "anonymous": "{{PLURAL:$1|Uzuario anonimo|Uzuarios anonimos}} de {{SITENAME}}",
+       "pageinfo-toolboxlink": "Información encima de la hoja",
        "pageinfo-contentpage-yes": "Si",
        "pageinfo-protect-cascading-yes": "Si",
        "previousdiff": "← Trocamiento más antiguo",
        "feedback-cancel": "Anular",
        "feedback-message": "Messaje",
        "feedback-subject": "Sujeto",
-       "searchsuggest-search": "Bushkar",
+       "searchsuggest-search": "Buxca en {{SITENAME}}",
        "duration-seconds": "$1{{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1{{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1{{PLURAL:$1|ora|oras}}",
index 35cb2db..ad5a415 100644 (file)
        "subject-preview": "Sujet kucken ouni ze späicheren:",
        "previewerrortext": "Beim Versuch fir Är Ännerungen ze weisen, ass e Feeler geschitt.",
        "blockedtitle": "Benotzer ass gespaart",
-       "blockedtext": "Äre Benotzernumm oder Är IP-Adress gouf gespaart.\n\nD'Spär gouf vum $1 gemaach. Als Grond gouf ''$2'' uginn.\n\n* Ufank vun der Spär: $8\n* Enn vun der Spär: $6\n* Spär betrëfft: $7\n\nDir kënnt den/d' $1 kontaktéieren oder ee vun den aneren [[{{MediaWiki:Grouppage-sysop}}|Administrateure]] fir iwwer d'Spär ze schwätzen.\n\nDëst sollt Der besonnesch maachen, wann Der d'Gefill hutt, datt de Grond fir d'Spären net bei Iech läit.\nD'Ursaach dofir ass an deem Fall, datt der eng dynamesch IP hutt, iwwer en Access-Provider, iwwer deen och aner Leit fueren.\nAus deem Grond ass et recommandéiert, sech e Benotzernumm zouzeleeën, fir all Mëssverständnes z'evitéieren.\n\nDir kënnt d'Funktioun \"Dësem Benotzer eng E-Mail schécken\" nëmme benotzen, wann Dir eng gëlteg E-Mail Adress bei Ären [[Special:Preferences|Astellungen]] aginn hutt.\nÄr aktuell IP-Adress ass $3 an d'Nummer vun der Spär ass #$5.\nSchreift all dës Informatioune w.e.g. bei all Ufro derbäi.",
+       "blockedtext": "Äre Benotzernumm oder Är IP-Adress gouf gespaart.\n\nD'Spär gouf vum $1 gemaach. Als Grond gouf ''$2'' uginn.\n\n* Ufank vun der Spär: $8\n* Enn vun der Spär: $6\n* Spär betrëfft: $7\n\nDir kënnt den/d' $1 kontaktéieren oder ee vun den aneren [[{{MediaWiki:Grouppage-sysop}}|Administrateure]] fir iwwer d'Spär ze schwätzen.\n\nDëst sollt Dir besonnesch maachen, wann Dir d'Gefill hutt, datt de Grond fir d'Spären net bei Iech läit.\nD'Ursaach dofir ass an deem Fall, datt Dir eng dynamesch IP hutt, iwwer en Access-Provider, iwwer deen och aner Leit fueren.\nAus deem Grond ass et recommandéiert, sech e Benotzernumm zouzeleeën, fir all Mëssverständnes z'evitéieren.\n\nDir kënnt d'Funktioun \"Dësem Benotzer eng E-Mail schécken\" nëmme benotzen, wann Dir eng gëlteg E-Mail Adress bei Ären [[Special:Preferences|Astellungen]] aginn hutt.\nÄr aktuell IP-Adress ass $3 an d'Nummer vun der Spär ass #$5.\nSchreift all dës Informatioune w.e.g. bei all Ufro derbäi.",
        "autoblockedtext": "Är IP-Adress gouf automatesch gespaart, well se vun engem anere Benotzer gebraucht gouf, an dee vum $1 gespaart gouf.\nDe Grond dofir war:\n\n:''$2''\n\n* Ufank vun der Spär: $8\n* Dauer vun der Spär: $6\n* D'Spär leeft of: $7\n\nDir kënnt de(n) $1 oder soss een [[{{MediaWiki:Grouppage-sysop}}|Administrateur]] kontaktéieren, fir iwwer déi Spär ze diskutéieren.\n\nBedenkt datt Dir d'Funktioun \"Dësem Benotzer eng E-Mail schécken\" benotze kënnt wann Dir eng gëlteg E-Mail-Adress an Ären [[Special:Preferences|Astellungen]] uginn hutt a wann dat net fir Iech gespaart gouf.\n\nÄr aktuell IP-Adress ass $3 an d'Nummer vun Ärer Spär ass $5.\nGitt dës Donnéeë w.e.g bei allen Ufroen zu dëser Spär un.",
        "blockednoreason": "Kee Grond uginn",
        "whitelistedittext": "Dir musst Iech $1, fir Säiten änneren ze kënnen.",
        "userpage-userdoesnotexist": "De Benotzerkont \"<nowiki>$1</nowiki>\" ass net registréiert.\nIwwerpréift w.e.g. op Dir dës Säit uleeën/ännere wëllt.",
        "userpage-userdoesnotexist-view": "De Benotzerkont \"$1\" ass net registréiert.",
        "blocked-notice-logextract": "Dëse Benotzer ass elo gespaart.\nDéi lescht Entrée am Logbuch vun de Späre steet als Referenz hei drënner:",
-       "clearyourcache": "<strong>Opgepasst - Nom Späichere muss der Ärem Browser seng Cache eidel maachen, fir d'Ännerungen ze gesinn.</strong>\n* <strong>Firefox / Safari:</strong> Halt <em>Shift</em> während Dir <em>Reload</em> klickt oder dréckt entweder <em>Ctrl-F5</em> oder <em>Ctrl-R</em> (<em>⌘-R</em> op engem Mac);\n* <strong>Google Chrome:</strong> Dréckt <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> op engem Mac)\n* <strong>Internet Explorer:</strong> dréckt <em>Ctrl</em> während Dir op <em>Refresh</em> klickt oder dréckt <em>Ctrl-F5.</em>\n* <strong>Opera:</strong> Gitt op de <em>Menu → Settings</em> (<em>Opera → Preferences</em> op engem  Mac) an dann op <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
+       "clearyourcache": "<strong>Opgepasst - Nom Späichere musst Dir Ärem Browser seng Cache eidel maachen, fir d'Ännerungen ze gesinn.</strong>\n* <strong>Firefox / Safari:</strong> Halt <em>Shift</em> während Dir <em>Reload</em> klickt oder dréckt entweder <em>Ctrl-F5</em> oder <em>Ctrl-R</em> (<em>⌘-R</em> op engem Mac);\n* <strong>Google Chrome:</strong> Dréckt <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> op engem Mac)\n* <strong>Internet Explorer:</strong> dréckt <em>Ctrl</em> während Dir op <em>Refresh</em> klickt oder dréckt <em>Ctrl-F5.</em>\n* <strong>Opera:</strong> Gitt op de <em>Menu → Settings</em> (<em>Opera → Preferences</em> op engem  Mac) an dann op <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "usercssyoucanpreview": "'''Tipp:''' Benotzt de \"{{int:showpreview}}\"-Knäppchen, fir Ären neien CSS virum Späicheren ze testen.",
        "userjsyoucanpreview": "'''Tipp:''' Benotzt de ''{{int:showpreview}}''-Knäppchen, fir Ären neie JavaScript virum Späicheren ze testen.",
        "usercsspreview": "'''Bedenkt: Dir kuckt just är Benotzer CSS.\nSi gouf nach net gespäichert!'''",
        "parser-template-loop-warning": "Endlos Schleef an der Schabloun: [[$1]] entdeckt",
        "template-loop-category": "Säite mat Endlos-Schleefe vu Schablounen",
        "template-loop-category-desc": "An der Säit ass eng Endlos-Schabloun, z. Bsp. eng Schabloun déi sech selwer rekursiv oprifft.",
+       "template-loop-warning": "<strong>Opgepasst:</strong> Dës Säit benotzt [[:$1]] déi eng Endlooschleef vu Schabloune generéiert (deng onendlech Zuel vum selwechten Opruff)",
        "parser-template-recursion-depth-warning": "D'Limit vun der Zuel vun de Verschachtelunge vu Schabloune gouf iwwerschratt ($1)",
        "language-converter-depth-warning": "D'Limite vun der déift vun der Sproochëmwandlung gouf iwwerschratt ($1)",
        "node-count-exceeded-category-desc": "D'Säit huet méi wéi déi maximal Zuel vu Kniet (Node-count).",
        "recentchanges-legend": "Optioune vun de rezenten Ännerungen",
        "recentchanges-summary": "Op dëser Säit kënnt Dir déi rezent Ännerungen op dëser Wiki gesinn.",
        "recentchanges-noresult": "Keng Ännerunge während der Period déi ugi gouf passen op de Critère.",
+       "recentchanges-network": "Duerch en technesche Feeler konnte keng Resultater geluede ginn. Probéiert d'Säit nei ze lueden.",
        "recentchanges-feed-description": "Verfollegt mat dësem Feed déi rezent Ännerungen op {{SITENAME}}.",
        "recentchanges-label-newpage": "Mat dëser Ännerung gouf eng nei Säit ugeluecht",
        "recentchanges-label-minor": "Dëst ass eng kleng Ännerung",
        "recentchanges-submit": "Weisen",
        "rcfilters-tag-remove": "'$1' ewechhuelen",
        "rcfilters-legend-heading": "<strong>Lëscht vun Ofkierzungen:</strong>",
-       "rcfilters-other-review-tools": "<strong>Aner Méiglechkeete fir z'iwwerliesen</strong>",
+       "rcfilters-other-review-tools": "Aner Méiglechkeete fir z'iwwerliesen",
        "rcfilters-group-results-by-page": "Resultater no de Säite gruppéieren",
        "rcfilters-grouping-title": "Gruppéieren",
        "rcfilters-activefilters": "Aktiv Filteren",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|Stonn|Stonnen}}",
        "rcfilters-highlighted-filters-list": "Ervirgehuewen: $1",
        "rcfilters-quickfilters": "Gespäichert Filteren",
-       "rcfilters-quickfilters-placeholder-title": "Nach keng Linke gespäichert",
+       "rcfilters-quickfilters-placeholder-title": "Nach keng Filtere gespäichert",
        "rcfilters-quickfilters-placeholder-description": "Fir Är Filterastellungen z'änneren a méi spéit nees ze benotzen, klickt op d'Zeeche  fir Lieszeechen (bookmark) am Beräich vun den Aktive Filteren hei drënner.",
        "rcfilters-savedqueries-defaultlabel": "Gespäichert Filteren",
        "rcfilters-savedqueries-rename": "Ëmbenennen",
        "rcfilters-savedqueries-new-name-label": "Numm",
        "rcfilters-savedqueries-new-name-placeholder": "Den Zweck vum Filter beschreiwen",
        "rcfilters-savedqueries-apply-label": "Filter uleeën",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Standardfilter uleeën",
        "rcfilters-savedqueries-cancel-label": "Ofbriechen",
        "rcfilters-savedqueries-add-new-title": "Aktuell Filter-Astellunge späicheren",
+       "rcfilters-savedqueries-already-saved": "Dës Filtere si scho gespäichert",
        "rcfilters-restore-default-filters": "Standardfiltere restauréieren",
        "rcfilters-clear-all-filters": "All Filteren eidelmaachen",
        "rcfilters-show-new-changes": "Rezentst Ännerunge weisen",
-       "rcfilters-search-placeholder": "Rezent Ännerunge filteren (navigéieren oder ufänke mat tippen)",
+       "rcfilters-search-placeholder": "Ännerunge filteren (benotzt de Menü oder sicht nom Numm vum Filter)",
        "rcfilters-invalid-filter": "Net valabele Filter",
        "rcfilters-empty-filter": "Keen aktive Filter. All Kontributioune gi gewisen.",
        "rcfilters-filterlist-title": "Filteren",
        "rcfilters-filter-user-experience-level-unregistered-label": "Net-ugemellt",
        "rcfilters-filter-user-experience-level-unregistered-description": "Auteuren déi net ageloggt sinn.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Neier",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Manner wéi 10 Ännerungen a manner wéi 4 Deeg Aktivitéit.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registréiert Auteure mat manner wéi 10 Ännerungen a manner wéi 4 Deeg Aktivitéit.",
        "rcfilters-filter-user-experience-level-learner-label": "Ufänger",
        "rcfilters-filter-user-experience-level-learner-description": "Méi Erfarung wéi ''Nei Benotzer'' awer manner wéi ''Erfuere Benotzer''.",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfuere Benotzer.",
        "rcfilters-filter-pageedits-label": "Säitenännerungen",
        "rcfilters-filter-pageedits-description": "Ännerungen um Wikiinhalt, an Diskussiounen, a Beschreiwunge vu Kategorien, ...",
        "rcfilters-filter-newpages-label": "Ugeluecht Säiten",
-       "rcfilters-filter-newpages-description": "Ännerunge mat deene nei Säiten ugeluecht ginn.",
+       "rcfilters-filter-newpages-description": "Ännerunge mat deenen nei Säiten ugeluecht ginn.",
        "rcfilters-filter-categorization-label": "Ännerunge vun de Kategorien:",
        "rcfilters-filter-logactions-label": "Protokolléiert Aktiounen",
        "rcfilters-filter-logactions-description": "Administrativ Aktiounen, Uleeë vu Benotzerkonten, Läsche vu Säiten, Eropgeluede Fichieren, ...",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:net</strong> $1",
        "rcfilters-exclude-button-off": "Déi Ausgewielt ausschléissen",
        "rcfilters-exclude-button-on": "Déi Ausgewielt ausschléissen",
-       "rcfilters-view-advanced-filters-label": "Erweidert Filteren",
        "rcfilters-view-tags": "Markéiert Ännerungen",
        "rcfilters-view-namespaces-tooltip": "Resultater no Nummraum filteren",
+       "rcfilters-view-tags-tooltip": "Resultater filteren, déi Ännerungsmarkéierunge benotzen",
        "rcfilters-view-return-to-default-tooltip": "Zréck op den Haaptmenü vum Filteren",
        "rcfilters-view-tags-help-icon-tooltip": "Méi iwwer Ännerunge mat Markéierunge gewuer ginn",
        "rcfilters-liveupdates-button": "Live-Aktualiséierungen",
        "rcfilters-liveupdates-button-title-on": "Live-Aktualiséierungen ausschalten",
        "rcfilters-liveupdates-button-title-off": "Nei Ännerunge weisen esoubal wéi se gemaach ginn",
        "rcfilters-watchlist-markseen-button": "All Ännerungen als gesi markéieren",
-       "rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte säiten",
+       "rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte Säiten",
        "rcfilters-watchlist-showupdated": "Ännerungen op Säiten déi Dir net besicht hutt zanter d'Ännerunge gemaach goufen si <strong>fett</strong> geschriwwen.",
        "rcfilters-preference-label": "Déi verbessert Versioun vun de rezenten Ännerunge verstoppen",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "uploadstash-errclear": "D'Läsche vun de Fichieren huet net funktionéiert.",
        "uploadstash-refresh": "Lëscht vun de Fichieren aktualiséieren",
        "uploadstash-thumbnail": "Miniaturbild weisen",
+       "uploadstash-bad-path": "Wee (path) gëtt et net.",
+       "uploadstash-bad-path-unknown-type": "Onbekannten Typ \"$1\".",
+       "uploadstash-no-extension": "Erweiderung ass eidel (null).",
+       "uploadstash-zero-length": "Fichier huet d'Gréisst null.",
        "img-auth-accessdenied": "Zougang refuséiert",
        "img-auth-nopathinfo": "PATH_INFO feelt.\nÄre Server ass net agestallt fir déi Informatioun weiderzeginn.\nEt kann u CGI leien an datt imag_auth net ënnerstëtzt gëtt.\nKuckt https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "img-auth-notindir": "De gefrote Pad ass net am Upload-Repertoire agestallt.",
        "log": "Logbicher",
        "logeventslist-submit": "Weisen",
        "all-logs-page": "All ëffentlech Logbicher",
-       "alllogstext": "Dëst ass eng kombinéiert Lëscht vu Logbicher op {{SITENAME}}.\nDir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrote Säit (och case-senisitive) agitt.",
+       "alllogstext": "Dëst ass eng kombinéiert Lëscht vu Logbicher op {{SITENAME}}.\nDir kënnt d'Siche limitéiere wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrot Säit (och case-senisitive) agitt.",
        "logempty": "Näischt fonnt.",
        "log-title-wildcard": "Titel fänkt mat dësem Text un",
        "showhideselectedlogentries": "Déi erausgesicht Entréeën am Logbuch weisen/verstoppen",
        "undelete-search-title": "Geläscht Säite sichen",
        "undelete-search-box": "Sichen no geläschte Säiten",
        "undelete-search-prefix": "Weis Säiten déi sou ufänken:",
+       "undelete-search-full": "Säitentitele weisen, wou dëst dran ass:",
        "undelete-search-submit": "Sichen",
        "undelete-no-results": "Et goufen am Archiv keng Säite fonnt déi op är Sich passen.",
        "undelete-filename-mismatch": "D'Dateiversioun vum $1 konnt net restauréiert ginn: De Fichier gouf net fonnt.",
        "cant-move-category-page": "Dir hutt net déi néideg Rechter fir Kategorie-Säiten ze réckelen.",
        "cant-move-to-category-page": "Dir hutt net déi néideg Rechter fir eng Säit op eng Kategoriesäit ze réckelen.",
        "cant-move-subpages": "Dir hutt net d'Recht fir Ënnersäiten ze réckelen.",
+       "namespace-nosubpages": "Den Nummraum \"$1\" erlaabt keng Ënnersäiten.",
        "newtitle": "Neien Titel:",
        "move-watch": "Dës Säit iwwerwaachen",
        "movepagebtn": "Säit réckelen",
        "pageinfo-recent-edits": "Zuel vun de rezenten Ännerungen (an de leschten $1)",
        "pageinfo-recent-authors": "Zuel vun de verschiddenen Auteuren",
        "pageinfo-magic-words": "{{PLURAL:$1|Magescht Wuert|Magesch Wierder}} ($1)",
-       "pageinfo-hidden-categories": "Verstoppte {{PLURAL:$1|Kategorie|Kategorien}} ($1)",
-       "pageinfo-templates": "Agebonne {{PLURAL:$1|Schabloun|Schabloune}} ($1)",
+       "pageinfo-hidden-categories": "Verstoppt {{PLURAL:$1|Kategorie|Kategorien}} ($1)",
+       "pageinfo-templates": "Agebonn {{PLURAL:$1|Schabloun|Schablounen}} ($1)",
        "pageinfo-transclusions": "Agebonnen {{PLURAL:$1|an eng Säit|a(n) $1 Säiten}}",
        "pageinfo-toolboxlink": "Informatiounen iwwer d'Säit",
        "pageinfo-redirectsto": "Viruleedung op",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tag-mw-contentmodelchange": "Ännerung vum Modell vum Inhalt",
+       "tag-mw-contentmodelchange-description": "Ännerungen, déi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel de Modell vum Inhalt] vun enger Säit änneren",
        "tags-title": "Markéierungen",
        "tags-intro": "Op dëser Säit stinn all déi Taggen, déi vun dëser Software fir Ännerungen unzeweise benotzt ginn, an hir Bedeitung.",
        "tags-tag": "Numm vun der Markéierung",
        "compare-title-not-exists": "Den Titel deen Dir uginn hutt gëtt et net.",
        "compare-revision-not-exists": "D'Versioun déi Dir uginn hutt gëtt et net.",
        "diff-form": "Ënnerscheeder",
+       "diff-form-oldid": "Al Versiounsnummer (fakultativ)",
+       "diff-form-revid": "Versiounsnummer vum Ënnerscheed",
        "diff-form-submit": "Ënnerscheeder weisen.",
+       "permanentlink": "Permanente Link",
        "permanentlink-revid": "Nummer (ID) vun der Versioun",
        "permanentlink-submit": "Op d'Versioun goen",
        "dberr-problems": "Pardon! Dëse Site huet technesch Schwieregkeeten.",
index 07c6971..832a9ec 100644 (file)
@@ -43,7 +43,6 @@
        "underline-never": "Садрани",
        "underline-default": "Браузердин низамарунар кардик кутун",
        "editfont-style": "Дуьзар хъувунин чкадин шрифтдин жуьре",
-       "editfont-default": "Браузердин низамарунрикай шрифт",
        "editfont-monospace": "Моногьяркьуьвилер авай шрифт",
        "editfont-sansserif": "КьацӀ авачир шрифт",
        "editfont-serif": "КьацӀ авай кхьин",
        "anontalk": "И IP-адресдиз талукь веревирд.",
        "navigation": "Навигация",
        "and": "&#32;ва",
-       "qbfind": "Жугъун",
-       "qbbrowse": "Килигун",
-       "qbedit": "Дегишарун",
-       "qbpageoptions": "Ччинин низамарунар",
-       "qbmyoptions": "Зи ччинар",
        "faq": "Фад-фад гузвай жузунар (ФГЖ)",
-       "faqpage": "Project:ФГС",
        "actions": "Крар",
        "namespaces": "ТӀварарин генгвилер",
        "variants": "Жуьреяр",
        "view": "Килигун",
        "edit": "Дуьзар хъувун",
        "create": "ТуькӀуьрун",
-       "editthispage": "И ччин дуьзар хъувун",
-       "create-this-page": "И ччин туькӀуьрун",
        "delete": "Алудун",
-       "deletethispage": "И ччин алудун",
        "undelete_short": "$1 {{PLURAL:$1|1=дуьзар хъувун|дуьзар хъувунар}} туьхкӀуьрун",
        "viewdeleted_short": "{{PLURAL:$1|1=дуьзар хъувуниз|$1 дуьзар хъувунриз}} килигун",
        "protect": "Xуьн",
        "protect_change": "масакӀа авун",
-       "protectthispage": "И ччин блокарун",
        "unprotect": "Хуьн дегишарун",
-       "unprotectthispage": "И ччинин хуьн дегишарун",
        "newpage": "ЦӀийи ччин",
-       "talkpage": "И ччин веревирдун",
        "talkpagelinktext": "Рахун",
        "specialpage": "Куьмекчи ччин",
        "personaltools": "Кьилди вичин алатар",
-       "articlepage": "Къене авайбурун ччиндиз килигун",
        "talk": "Веревирд авун",
        "views": "Килигунар",
        "toolbox": "Алатар",
-       "userpage": "Уртахдин ччиниз килигун",
-       "projectpage": "Проектдин ччиниз килигун",
        "imagepage": "Файлдин ччиниз килигун",
        "mediawikipage": "Чардин ччиниз килигун",
        "templatepage": "Чешнедин ччиниз килигун",
        "action-deleterevision": "ччинин и жуьре алудун",
        "action-undelete": "и ччин туькIуьр хъувун",
        "nchanges": "$1 {{PLURAL:$1|1=масакIавал|масакIавилер}}",
+       "enhancedrc-history": "тарих",
        "recentchanges": "Mукьвара хьайи масакӀавилер",
        "recentchanges-legend": "Цlийи масакIавилерин низамарунар",
        "recentchanges-summary": "Викида хьанвай эхиримжи масакIавилер и ччина гуьзетун",
index 4e94bef..88c447d 100644 (file)
@@ -60,7 +60,6 @@
        "underline-never": "Nunca",
        "underline-default": "Implicada par pel o surfador",
        "editfont-style": "Stilo de leteras en la caxa de edita",
-       "editfont-default": "Implicada par surfador",
        "editfont-monospace": "Leteras monospasida",
        "editfont-sansserif": "Leteras sin serif",
        "editfont-serif": "Leteras con serif",
        "anonpreviewwarning": "<em>Tu no es autenticida. Si tu fisa cambias, tua adirije IP va es rejistrada en la istoria de esta paje.</em>",
        "missingsummary": "<strong>Avisa:</strong> Tu no ia furni un resoma de la edita.\nSi tu clica \"$1\" denova, tua edita va es fisada sin resoma.",
        "selfredirect": "<strong>Avisa:</strong> Tu redirije esta paje a se.\nCisa tu no ia spesifa coreta la gol de la redirije, o cisa tu no edita la paje intendeda.\nSi tu clica \"$1\" denova, la redirije va es creada an tal.",
-       "missingcommenttext": "Tape un comenta a su, per favore.",
+       "missingcommenttext": "Presenta un comenta, per favore.",
        "missingcommentheader": "<strong>Avisa:</strong> Tu no ia furni un tema per esta comenta.\nSi tu clica \"$1\" denova, tua edita va es fisada sin tema.",
        "summary-preview": "Previde de resoma:",
        "subject-preview": "Previde de tema:",
        "yourtext": "Tua testo",
        "storedversion": "Testo esistente",
        "editingold": "<strong>Avisa: Tu edita un revisa nonfresca de esta paje.</strong>\nSi tu fisa lo, cualce cambias fada pos esta revisa va es perdeda.",
+       "unicode-support-fail": "Lo pare ce tua surfador no suporta Unicode. Lo es nesesada per edita pajes, donce tua edita no ia es fisada.",
        "yourdiff": "Diferes",
        "copyrightwarning": "Per favore, nota ce tota contribuis a {{SITENAME}} es regardada como relasada su la $2 (vide $1 per detalias). Si tu no desira ce on edita tua scrives sin compatia e redistribui libre los, alora no ajunta los asi.<br />\nTu promete ance a nos ce tu mesma ia scrive esta, o ia copia lo de un recurso de domina publica o simil libre.\n<strong>No ajunta testo restrinjeda par direto de autor sin permete!</strong>",
        "copyrightwarning2": "Per favore, nota ce tota contribuis a {{SITENAME}} pote es editada, alterada o sutraeda par otra contribuores.\nSi tu no desira ce on edita tua scrives sin compatia, alora no ajunta los asi.<br />\nTu promete ance a nos ce tu mesma ia scrive esta, o ia copia lo de un recurso de domina publica o simil libre (vide $1 per detalias).\n<strong>No ajunta testo restrinjeda par direto de autor sin permete!</strong>",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Mar Indian",
        "timezoneregion-pacific": "Mar Pasifica",
-       "allowemail": "Permete epostas de otra usores",
-       "email-blacklist-label": "Proibi esta usores de envia epostas a me:",
+       "allowemail": "Permete ce otra usores pote eposta me",
+       "email-blacklist-label": "Proibi esta usores de eposta a me:",
        "prefs-searchoptions": "Xerca",
        "prefs-namespaces": "Spasios de nom",
        "default": "inisial",
        "recentchanges-legend": "Elejes per cambias resente",
        "recentchanges-summary": "Segue asi la cambias la plu resente a la vici.",
        "recentchanges-noresult": "No cambias en la periodo spesifada coresponde a esta criterios.",
+       "recentchanges-timeout": "Esta xerca ia es abandonada. Posible, tu desira atenta otra parametres de xerca.",
        "recentchanges-feed-description": "Segue la cambias la plu resente a la vici en esta flue.",
        "recentchanges-label-newpage": "Esta edita ia crea un paje nova",
        "recentchanges-label-minor": "Esta es un edita minor",
        "recentchanges-submit": "Mostra",
        "rcfilters-tag-remove": "Sutrae '$1'",
        "rcfilters-legend-heading": "<strong>Lista de cortis:</strong>",
-       "rcfilters-other-review-tools": "<strong>Otra utiles de revisa</strong>",
+       "rcfilters-other-review-tools": "Otra utiles de revisa",
        "rcfilters-group-results-by-page": "Grupi resultas par paje",
        "rcfilters-grouping-title": "Grupi",
        "rcfilters-activefilters": "Filtros ativa",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ora|oras}}",
        "rcfilters-highlighted-filters-list": "Marcada: $1",
        "rcfilters-quickfilters": "Filtros fisada",
-       "rcfilters-quickfilters-placeholder-title": "No lias es fisada",
+       "rcfilters-quickfilters-placeholder-title": "No filtreos es fisada ancora",
        "rcfilters-quickfilters-placeholder-description": "Per fisa tua ajustas de filtro e reusa los en la futur, clica la icon de sinta de libro en la area \"Filtros ativa\", a su.",
        "rcfilters-savedqueries-defaultlabel": "Filtros fisada",
        "rcfilters-savedqueries-rename": "Renomi",
        "rcfilters-filter-user-experience-level-unregistered-label": "Anonim",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores ci no ia autentici",
        "rcfilters-filter-user-experience-level-newcomer-label": "Comensores",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Editores autenticida con min ca 10 editas e 4 dias de ativia.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores autenticida ci ave min ca 10 editas o 4 dias de ativia.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprendores",
        "rcfilters-filter-user-experience-level-learner-description": "Editores autenticida de ci sua esperia es entre \"Comensores\" e \"Usores esperiosa\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Usores esperiosa",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:no</strong> $1",
        "rcfilters-exclude-button-off": "Esclui elejedas",
        "rcfilters-exclude-button-on": "Escluinte elejedas",
-       "rcfilters-view-advanced-filters-label": "Filtros avansada",
        "rcfilters-view-tags": "Editas eticetida",
        "rcfilters-view-namespaces-tooltip": "Filtri resultas par spasio de nom",
        "rcfilters-view-tags-tooltip": "Filtri resultas par eticetas de edita",
        "rcfilters-view-return-to-default-tooltip": "Revade a menu xef de filtros",
+       "rcfilters-view-tags-help-icon-tooltip": "Aprende plu sur editas edicetida",
        "rcfilters-liveupdates-button": "Refrescis automata",
        "rcfilters-liveupdates-button-title-on": "Descomuta refrescis automata",
        "rcfilters-liveupdates-button-title-off": "Mostra cambias nova, direta cuando los aveni",
        "uploaded-script-svg": "Elemento automatable \"$1\" ia es trovada en la fix SVG cargada.",
        "uploaded-hostile-svg": "CSS nonsecur ia es trovada en la stilo de la fix SVG cargada.",
        "uploaded-event-handler-on-svg": "On no permete defini atribuidas per trata avenis <code>$1=\"$2\"</code> en fixes de SVG.",
-       "uploaded-href-attribute-svg": "Atribuidas href en fixes SVG es sola permeteda a lia a adirijes http:// o https://, ma <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada.",
+       "uploaded-href-attribute-svg": "elementos de <a> pote lia (href) sola a datos: (arcivo caxida), http:// o https://, o ojetos fratal (#, mesma-testo). Per otra elementos, com <imaje>, sola datos e fratas es permeteda. Atenta caxi imajes cuando on esporta sua SVG. <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada.",
        "uploaded-href-unsafe-target-svg": "Un href a datos nonsecur ia es trovada en la fix SVG cargada: adirije destinal <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Un eticeta \"animate\" cual ta pote cambia href, usante la atribuida \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, ia es trovada en la fix SVG cargada.",
        "uploaded-setting-event-handler-svg": "On proibi la defini de atribuidas per trata avenis, ma <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada en la fix SVG cargada.",
        "block": "Impedi usor",
        "unblock": "Desimpedi usor",
        "blockip": "Impedi {{GENDER:$1|usor}}",
-       "blockip-legend": "Impedi usor",
        "blockiptext": "Usa la formulario a su per impedi asedes scrivente de un adirije IP o nom de usor spesifada.\nOn debe fa esta sola per preveni vandalsime, e longo la [[{{MediaWiki:Policy-url}}|politica]].\nSpesifa un razona a su (per esemplo, indicante pajes individua cual ia es vandalida).\nPer impedi adirijes IP, on pote usa la sintatica [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; la estende la plu grande permeteda es /$1 per IPv4 e /$2 per IPv6.",
        "ipaddressorusername": "Adirije IP o nom de usor:",
        "ipbexpiry": "Desvalidi:",
        "ipb_blocked_as_range": "Era: La adirije IP $1 no es direta impedida e no pote es desimpedida.\nMa lo es impedida como parte de la estende $2, cual pote es desimpedida.",
        "ip_range_invalid": "Estende nonvalida de adirijes IP.",
        "ip_range_toolarge": "Impedis de estendes IP plu grande ca /$1 no es permeteda.",
+       "ip_range_exceeded": "La estende de IP surpasa sua estenda masima. Estenda permeteda: /$1.",
+       "ip_range_toolow": "estendes de IP no es valida permeteda.",
        "proxyblocker": "Impedador de proxis",
        "proxyblockreason": "Tua adirije IP es impedida car lo es un proxi abrida.\nPer favore, contata tua furnor de servi de interede o la suporta tecnical de tua organiza e informa los de esta problem major de securia.",
        "sorbsreason": "Tua adirije IP es listada como un proxi abrida en la DNSBL usada par {{SITENAME}}.",
        "delete_and_move_text": "La paje destinal \"[[:$1]]\" esiste ja.\nEsce tu vole sutrae lo per crea un spasio per la move?",
        "delete_and_move_confirm": "Si, sutrae la paje",
        "delete_and_move_reason": "Sutraeda per crea un spasio per move de \"[[$1]]\"",
-       "selfmove": "Titulos fontal e destinal es la mesma;\nun paje no pote moveda a la mesma paje.",
+       "selfmove": "La titulo es la mesma; on no pote move un paje sur sua mesma.",
        "immobile-source-namespace": "Pajes en spasio de nom \"$1\" no pote es moveda.",
        "immobile-target-namespace": "Pajes no pote es moveda a en spasio de nom \"$1\".",
        "immobile-target-namespace-iw": "Lia intervical no es un destina valida per move de paje.",
index 7a55d01..f984762 100644 (file)
        "sectioneditnotsupported-text": "Doe kèns hie gein köpkes bewèrke",
        "permissionserrors": "Foute inne rèchter",
        "permissionserrorstext": "Doe höbs gein rèchter om det te daon om de volgende {{PLURAL:$1|reje|rejer}}:",
-       "permissionserrorstext-withaction": "Geer höb gein rech óm $2 óm de volgende {{PLURAL:$1|raej|raej}}:",
+       "permissionserrorstext-withaction": "Dich höbs gein rech óm $2 óm de volgende {{PLURAL:$1|raej|raej}}:",
        "contentmodelediterror": "Doe kans dees versie neet bewirke, went 't inhawdsmodel daovan is <code>$1</code> en 't hujig inhawdsmodel van de pagina is <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Waarsjoewing: de bis bezig mit 't aanmake van 'n pagina die in 't verleje eweggesjaf is.'''\n\nBedink of 't terech is dets te wiejer wirks aan dees pagina. Veur dien gemaak sjteit hiejónger 't wislogbook en 't logbook verplaatste pagina's veur dees pagina:",
        "moveddeleted-notice": "Dees pagina is eweggesjaf.\nTer infermasie weurt 't wislogbook, 't beveiligingslogbook en 't logbook verplaatsjde pagina's van dees pagina hiejónger weergegaeve.",
        "right-editinterface": "De gebroekersinterface bewerke",
        "right-editusercss": "De CSS-bestande van angere gebroekers bewerke",
        "right-edituserjs": "De JS-bestande van angere gebroekers bewerke",
+       "right-viewmywatchlist": "Betrach dien eige volglies",
        "right-editmyoptions": "Bewirk dien eige veurkäöre",
        "right-rollback": "Snel de letste bewerking(e) van 'n gebroeker van 'n pagina terugdraaie",
        "right-markbotedits": "Teruggedraaide bewerkinge markere es botbewerkinge",
        "action-writeapi": "via de API te bewirke",
        "action-delete": "dees pagina eweg te sjaffe",
        "action-deleterevision": "dees versie eweg te sjaffe",
+       "action-deletelogentry": "logbeukregels eweg te sjaffe",
        "action-deletedhistory": "de eweggesjafte versies van dees pagina te bekieke",
        "action-browsearchive": "eweggesjafte pagina's te zeuke",
-       "action-undelete": "dees pagina trökzètte",
-       "action-suppressrevision": "dees verborge versie betrachte en trök plaatse",
+       "action-undelete": "dees pagina trök te zètte",
+       "action-suppressrevision": "dees verborge versie te betrachte en trök te plaatse",
        "action-suppressionlog": "dit besjirmp logbook betrachte",
        "action-block": "deze gebroeker 'n bewirkingsblokkaad op lèkge",
        "action-protect": "'t beveiligingsniveau van dees pagina aan passe",
        "action-rollback": "drej bewèrkinge vanne lèste bewèrkendje gebroeker snel trögk",
-       "action-import": "dees pagina van 'n angere wiki importere",
-       "action-importupload": "dees pagina van 'n besjtandsupload importere",
+       "action-import": "dees pagina van 'n angere wiki te importere",
+       "action-importupload": "dees pagina van 'n besjtandsupload te importere",
        "action-patrol": "bewerkinge van angere es gecontroleerd te markere",
        "action-autopatrol": "eige bewerkinge as gecontroleerd te laote markere",
        "action-unwatchedpages": "de lies met pagina's die neet op 'n volglies staon  te bekieke",
        "action-userrights-interwiki": "gebroekersrechte van gebroekers van anger wiki's te bewerke",
        "action-siteadmin": "de database aaf te sloete of aope te stelle",
        "action-sendemail": "Sjik e-mails",
+       "action-editmyoptions": "dien eige veurkäöre te bewirke",
+       "action-editmywatchlist": "dien eige volglies te bewirke",
+       "action-viewmywatchlist": "dien eige volglies te betrachte",
+       "action-viewmyprivateinfo": "dien eige privégegaeves te betrachte",
+       "action-editmyprivateinfo": "dien eige privégegaeves te bewirke",
+       "action-editcontentmodel": "'t paginainhawdmodel te bewirke",
+       "action-managechangetags": "labels aan te make en te (de)aktivere",
+       "action-applychangetags": "labels aan dien bewirkinge bie te doon",
+       "action-changetags": "willekäörige labels bie te doen en eweg te sjaffe van versies en logbeukregels",
+       "action-deletechangetags": "labels oet de database eweg te sjaffe",
        "action-purge": "sjoean dees pagina op",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkinge}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|saer die litste bezeuk}}",
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zuuch ouch [[Special:NewPages|de nuuj pagina's]])",
        "recentchanges-submit": "Tuin",
+       "rcfilters-tag-remove": "Sjaf '$1' weg",
        "rcfilters-legend-heading": "<strong>Lies mit aafkórtinge:</strong>",
+       "rcfilters-other-review-tools": "Angere kentrolhölpmiddele",
+       "rcfilters-group-results-by-page": "Resultate per pagina groepere",
        "rcfilters-grouping-title": "Groepeer",
        "rcfilters-activefilters": "Aktief filters",
        "rcfilters-advancedfilters": "Geavanceerde filters",
        "rcfilters-hours-title": "Recènte oere",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|daag}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|oer}}",
-       "rcfilters-quickfilters": "Opgeslage filters",
+       "rcfilters-highlighted-filters-list": "Oetgeleech: $1",
+       "rcfilters-quickfilters": "Opgesjlage filters",
        "rcfilters-quickfilters-placeholder-title": "Nag gein opgeslage links",
        "rcfilters-savedqueries-defaultlabel": "Opgesjlage filters",
        "rcfilters-savedqueries-rename": "Herneum",
        "rcfilters-savedqueries-new-name-label": "Naam",
        "rcfilters-savedqueries-new-name-placeholder": "Besjrief 't doel van de filter",
        "rcfilters-savedqueries-apply-label": "Maak filter aan",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Sjtandaard filter aanmake",
        "rcfilters-savedqueries-cancel-label": "Braek aaf",
        "rcfilters-savedqueries-add-new-title": "Hujige filterinstèllinge opsjlaon",
        "rcfilters-restore-default-filters": "Zèt sjtanderd filters trögk",
        "rcfilters-clear-all-filters": "Sjaf alle filters eweg",
+       "rcfilters-show-new-changes": "Tuin nuujste wieziginge",
        "rcfilters-search-placeholder": "Filter recènte verangeringe (blajer of begin mit intikke)",
        "rcfilters-invalid-filter": "Óngeljige filter",
        "rcfilters-empty-filter": "Gein aktief filters. Alle biedrage waere waergegaeve.",
index 581e409..137a1bc 100644 (file)
@@ -15,7 +15,7 @@
        },
        "tog-underline": "خط کیشائن ژێر پیوندەل:",
        "tog-hideminor": "آشاردن دەسکاریەل گؤجەر  إژ گؤەڕیال(تغییرات) ایسە(اخیر)",
-       "tog-hidepatrolled": "دسکاریۀل گه دیار بینۀ ئژ فئرست-رزگ تغییرات اخیر بشارا",
+       "tog-hidepatrolled": "ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شود",
        "tog-newpageshidepatrolled": "وڵگۀل گه دیار بینۀ ئژ فئرست-رزگ ولگۀل تازۀ بشارا",
        "tog-hidecategorization": "فهرست بالا سی ئی صفحه",
        "tog-extendwatchlist": " کؤل رزگ-فئرست الؤن(آلشت)کریال-تغیرات نیشان دۀ،نۀ هر تنیا دؤمائنۀل",
        "tog-minordefault": "کؤڵ دسکاری بیۀل به عنؤان پئش فرض عڵامت بۀرن",
        "tog-previewontop": "پیش نمایش وهِ رئ جعبۀ نمایش نیشؤن به",
        "tog-previewonfirst": "پێش دئین وە اوەڵێن دەسکاری نیشۆن دە",
-       "tog-enotifwatchlistpages": "ئÛ\80ر Ù\88ÚµÚ¯Û\80 Û\8cا Ù¾Ø±Ø¤Ù\86دئÙ\87 Ø¦Ú\98 Ù\81ئرست-رزگ Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÛ\80Ù\84Ù\85 Ø¯Ø³Ú©Ø§Ø±Û\8c Ø¨Û\8c Ù\86اÙ\85Ù\87 Ø¦Û\80را Ù\85Ù\87 Ú©Ù\90Ù\84Ù\91 Ú©Û\80",
-       "tog-enotifusertalkpages": "Ù\87Û\80Ù\86ئگÙ\87\88ختئ Ú¯Ù\87 Ø¦Û\80 Ù\88ÚµÚ¯Û\80 Ú¯Ù¾ Ú©Ø§Ø¨Ø±Û\8cÙ\85 ØªØºÛ\8cÛ\8cر Ú©Ø±Û\8cا Ù\86اÙ\85Ù\87 Ø¦Û\80را Ù\85Ù\87 Ú©Ù\90Ù\84 Ú©Û\80",
-       "tog-enotifminoredits": "ئÛ\80ر ØªØºÛ\8cÛ\8cرÛ\80Ù\84-آڵؤÙ\86Û\80Ù\84(Ø¢Ù\84شتÛ\80Ù\84)گؤجÛ\80رÛ\8cجÛ\8c Ø¦Û\80ر Ù\88ÚµÚ¯Û\80Ù\84 Ø¤ Ù¾Ø±Ø¤Ù\86دÛ\80Ù\84Ù\85 Ú©Ø±Û\8cا Ù\86اÙ\85Ù\87 Ø¦Û\80را Ù\85Ù\87 Ú©Ù\90Ù\84 Ú©Û\80",
+       "tog-enotifwatchlistpages": "ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95Û\8e Û\8cا Ú¤Û\95ÚµÚ¯Û\95Û\8e Ø¦Û\95Ú\98 Ù¾Û\95Û\8eÚ¯Û\8cرÛ\8cÛ\95Ù\84Ù\85 Ú¯Ù\88Ù\88Û\95Ú\95Û\8cا(تغÛ\8cرÛ\8cاÙ\81ت)ئÛ\8cÙ\85Û\95Û\8cÙ\84Û\8e Ø¦Û\95Ú\95اÙ\86Ù\85 Ú©Ù\84 Ú©Û\95",
+       "tog-enotifusertalkpages": "Ù\87Û\95Ù\86Û\8e(Ú¤Û\95Ù\82تÛ\8e)Ù¾Û\95Ú\95Û\95Û\8e Ø¦Û\95Ú\98 Ú¤Û\95ÚµÚ¯Û\95 Ú¯Û\95Ù¾(Ù\82سÛ\95)Ú¯Ù\88Ù\88Û\95Ú\95Û\8cا Ø¦Û\8cÙ\85Û\95Ù\84Û\8e Ø¦Û\95Ú\95اÙ\86Ù\85 Ú©Ù\84 Ú©Û\95",
+       "tog-enotifminoredits": "ئÛ\95Ú\95ا Ú¯Ù\88Ù\88Û\95Ú\95اÙ\86Ù\86Û\95Ù\84(تغÛ\8cرات)Ú¯Ù\88Ù\88جÛ\95ر Ø¦Û\95 Ú¤Û\95ÚµÚ¯Û\95Ù\84/Ù¾Û\95Ú\95Û\95Ù\84 Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Û\8e Ø¦Û\95Ú\95اÙ\86Ù\85 Ú©Ù\84 Ú©Û\95",
        "tog-enotifrevealaddr": "نیشانی ایمیل مه ئۀر ایمیل‌ل حاوواڵ رۀسن نیشؤن دۀ",
        "tog-shownumberswatching": "گلۀ شؤماری-شؤمار کاربۀل پی‌گیر نیشان دۀ",
        "tog-oldsig": ":امضاێ موجود ایوه",
        "tog-fancysig": "(امضا چؤی ویکی‌متن بوو(بدون پئؤن خودکار نیائن",
-       "tog-uselivepreview": "استفاده از پیش‌نمایش زنده",
+       "tog-uselivepreview": "پێش سەیرکەر بدون گرەک(نیاز)ڤە بروز رسانی ڤەڵگە",
        "tog-forceeditsummary": "هۀنئ گه-وختئ که خؤلاصۀ دسکاریم نَنیؤیسائۀ خۀؤۀ رم کۀ",
        "tog-watchlisthideown": "دسکاریۀل ووژم ئژ فئرست سئرکردن بشارآ",
        "tog-watchlisthidebots": "دسکاریۀل ربات ئژ فئرست سئرکردن بشآرا",
        "tog-watchlisthideminor": "دسکاریۀل گؤجۀر ئژ فئرست سئرکردن بشارآ",
        "tog-watchlisthideliu": "دەسکاری کاربرەل إنۆم هەتێ سیستم وە لیست پیگیریەل بشارآ",
        "tog-watchlistreloadautomatically": "Reload the watchlist automatically whenever a filter is changed (JavaScript required)",
+       "tog-watchlistunwatchlinks": "افزودن پیوندهای مستقیم خروج از پی‌گیری به فهرست پی‌گیری (جاواسکریپت ممکن است نیاز شود)",
        "tog-watchlisthideanons": "دةسکاری کاربرةل ناشنا ئة لیست نمائش بشارآ",
        "tog-watchlisthidepatrolled": "دسکاریۀل گشت خورده-سئرکریا ئژ فئرست سئرکردن بشآرا",
        "tog-watchlisthidecategorization": "نهفتن رده‌بندی صفحه‌ها",
@@ -60,7 +61,6 @@
        "underline-never": "هؤیچ وخت",
        "underline-default": "پوسته یا مِنِی کەر پیش‌فرض",
        "editfont-style": ":شئؤۀ قلم جعبهٔ دسکاری",
-       "editfont-default": "پیشفرض مِنِی کەر",
        "editfont-monospace": "قلم وە فاصلۀ ثابت",
        "editfont-sansserif": "قلم بئ گوشۀ",
        "editfont-serif": "قلم گوشۀ دار",
        "index-category": "صفحه‌های نمایه‌شده",
        "noindex-category": "صفحه‌های نمایه‌نشده",
        "broken-file-category": "صفحه‌های دارای پیوند خراب به پرونده",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "دۀربارۀ",
        "article": "وەڵگە نۆم چێنە",
        "newwindow": "(واز کردن ئۀر دۀروۀچۀ جدید)",
        "faq": "پرسش‌های متداول",
        "actions": "کارۀل",
        "namespaces": "فضای نامۀل",
-       "variants": "قصۀ کِرۀل",
+       "variants": "گەپ دێەل(قسەکرەل)",
        "navigation-heading": "منوی ناوبری",
        "errorpagetitle": "خطا",
        "returnto": "بازگشت به $1",
        "redirectedfrom": "(تغییرمسیر إژ $1)",
        "redirectpagesub": "وةڵگة تغییرمسیر",
        "redirectto": ":تغییر مسیر به",
-       "lastmodifiedat": ".اێ وەڵگەآخرین گِل وە $1 سات $2 گؤەڕیائە(تغییریافته)",
+       "lastmodifiedat": "ئێ ڤەڵگەئاخرێن گِل ڤە $1 سات $2 گووەڕیائە(تغییریافته)",
        "viewcount": "إژ ئئ وةڵگة  {{PLURAL:$1|یإ گِل|$1$1چةن گِل}} بازدید بیة.",
        "protectedpage": "وەڵگە پڵۆم بیە",
        "jumpto": ":وازآ کردن/پریدن وۀ",
        "versionrequired": "نسخهٔ $1 از نرم‌افزار مدیاویکی لازم است",
        "versionrequiredtext": "برای دیدن این صفحه به نسخهٔ $1 از نرم‌افزار مدیاویکی نیاز دارید.\nبه [[Special:Version|این صفحه]] مراجعه کنید.",
        "ok": "خوو/ باشد",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
        "retrievedfrom": "إژ \"$1\" گیریائۀ",
        "youhavenewmessages": "{{PLURAL:$3|درین}}$1$2",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|هؤمة}} $1 د {{PLURAL:$3|کاربةرێ تِر|$3 کاربةر}}دِرین($2).",
        "youhavenewmessagesmulti": ".پیغامةل جدیدی ئة $1 درین",
        "editsection": "دةسکاری",
        "editold": "دةسکاری",
-       "viewsourceold": "سئرکردÙ\86 Ø¨Ù\90Ù\86Ú\86Û\80Ú©/Ù\85Û\80Ù\86بÛ\80ع",
+       "viewsourceold": "بÙ\86Ú\86Û\95Ú©(Ù\85Ù\86بع) Ø¨Û\8aÙ\86(سÛ\95Û\8cرکÛ\95)",
        "editlink": "دەسکاری",
-       "viewsourcelink": "سئرکردÙ\86 Ø¨Ù\90Ù\86Ú\86Û\80Ú©/Ù\85Û\80Ù\86بÛ\80ع",
+       "viewsourcelink": "بÙ\86Ú\86Û\95Ú©(Ù\85Ù\86بع) Ø¨Û\8aÙ\86(سÛ\95Û\8cرکÛ\95)",
        "editsectionhint": "دۀسکاری بۀخش: $1",
        "toc": "محتویات",
        "showtoc": "نیشان دائن",
        "perfcached": "داده‌های زیر از حافظهٔ نهانی فراخوانی شده‌اند و ممکن است کاملاً به‌روز نباشند. حداکثر {{PLURAL:$1|یک نتیجه| $1 نتیجه}} در حافظهٔ نهانی قابل دسترس است.",
        "perfcachedts": "داده‌های زیر از حافظهٔ نهانی فراخوانی شده‌اند و آخرین بار در $1 به‌روزرسانی شدند. حداکثر {{PLURAL:$4|یک نتیجه|$4 نتیجه}} در حافظهٔ نهانی قابل دسترس است.",
        "querypage-no-updates": "امکان به‌روزرسانی این صفحه فعلاً غیرفعال شده‌است.\nاطلاعات این صفحه ممکن است به‌روز نباشد.",
-       "viewsource": "سئرکردÙ\86 Ø¨Ù\90Ù\86Ú\86Û\80Ú©/Ù\85Û\80Ù\86بÛ\80ع",
+       "viewsource": "بÙ\86Ú\86Û\95Ú©(Ù\85Ù\86بع) Ø¨Û\8aÙ\86(سÛ\95Û\8cرکÛ\95)",
        "viewsource-title": "نمایش بِنچةک ئةرا $1",
        "actionthrottled": "جلوی عمل شما گرفته شد",
        "actionthrottledtext": "به منظور جلوگیری از انتشار خرابکاری، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.\nلطفاً پس از چند دقیقه دوباره تلاش کنید.",
        "yourdomainname": ":دامنهٔ شما",
        "password-change-forbidden": ".شما نمی‌توانید گذرواژه‌ها را در این ویکی تغییر دهید",
        "externaldberror": "خطایی در ارتباط با پایگاه داده رخ داده است یا اینکه شما اجازهٔ به‌روزرسانی حساب خارجی خود را ندارید.",
-       "login": "إ نۆم هەتن سیستم",
+       "login": "ڤە نۆم هەتن",
        "login-security": "وژت معرفی‌که",
        "nav-login-createaccount": " إ نؤم هةتن سیستم/ حساوو کاربةری سازین",
        "logout": "دەرچێن|خروج",
        "badretype": "گذرواژةلێ گإ نۆیساتة چؤِی یةک نیِن",
        "usernameinprogress": ". دِرێ حساوو دؤرسة مةکإ . خواهشا صبر کةن",
        "userexists": ".نام کاربةری‌ گإ واردت کردئة قبلاً استفاده بیة\n.خواهشا نامێ تر استفادة کةن",
-       "loginerror": "خطای إ نام هةتن سیستم",
+       "loginerror": "نادوەرستی ڤە نۆم هەتن",
        "createacct-error": "خطای  حساوو کاربةری سازین",
        "createaccounterror": "نمآوو ئئ حساووة بِسازین: $1",
        "nocookiesnew": "حساوو کاربةری سازیا، اما هؤمة أ سیستم نهةتینة/نهاتینة.\n{{SITENAME}} برای ورود کاربران به سامانه از کوکی استفاده می‌کند.\nشما کوکی‌ها را از کار انداخته‌اید.\nلطفاً کوکی‌ها را به کار بیندازید، و سپس با نام کاربری و گذرواژهٔ جدیدتان به سامانه وارد شوید.",
        "suspicious-userlogout": "درخواست هؤمة ئةرا  دةرچئن إژ سیستم  رد بیة زیرا به نظر می‌رسد که این  .درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر کل/ارسال بیة",
        "createacct-another-realname-tip": "نام راسکانی/واقعی دڵ بخواهیة.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.",
        "pt-login": "إنۆم هەتِن.",
-       "pt-login-button": "إ نۆم هەتن سیستم",
+       "pt-login-button": "ڤە نۆم هەتن",
        "pt-login-continue-button": "ادامه سی ورود سیستم",
        "pt-createaccount": "حساووئ أرا ووژتان بِسازِن",
        "pt-userlogout": "دەرچێن|خروج",
        "resetpass-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
        "resetpass-submit-loggedin": "تغییردائن رمز",
        "resetpass-submit-cancel": "ئآهووسانن/لغو",
-       "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا Ø§Ø®Û\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø±Ø§ Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد Û\8cا Ø¯Ø±Ø®Ù\88است Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت ØªØ§Ø²Ù\87 Ú©Ø±Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد.",
+       "resetpass-wrong-oldpass": "گذرواژهٔ موقت یا اخیر نامعتبر.\nممکن است که شما همینک گذرواژه‌تان را تغییر داده باشید یا درخواست یک گذرواژهٔ موقت تازه کرده باشید.",
        "resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
        "resetpass-temp-emailed": "شما با یک کد ایمیل شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
        "resetpass-temp-password": ":رمز عبور موقت",
        "passwordreset-emailsentusername": "اگر نشانی پست الکترونیکی مرتبطی موجود باشد، یک نامه برای بازنشانی گذرواژه به آن ارسال خواهد شد.",
        "passwordreset-nocaller": "زنگ مجبور نییه به تأمین کردن",
        "passwordreset-nosuchcaller": "زنگ موجود نییه: $1",
+       "passwordreset-ignored": "به بازنشانی گذرواژه پرداخته نشد. آیا ممکن است که هيچ مهياکننده‌ای برای این کار تنظيم نشده باشد؟",
        "passwordreset-invalidemail": "آدرس ایمیل نامعتبره",
+       "passwordreset-nodata": "یک نام کاربری و یا یک آدرس ايميل، هيچکدام ارائه نشده",
        "changeemail": "تغییر یا حذف نشانی ایمیل",
        "changeemail-header": "برای تغییر ایمیلتان این فرم را کامل کنید. برای حذف ایملیتان کافی است بخش ایمیل را خالی رها کنید و فرم را ارسال کنید.",
        "changeemail-no-info": ".برای دسترسی مستقیم به این صفحه شما باید به سیستم وارد شده باشید",
        "headline_tip": "عنوان سطح ۲",
        "nowiki_sample": "متن قالب‌بندی‌نشده اینجا وارد شود",
        "nowiki_tip": "نادیده‌گرفتن قالب‌بندی ویکی",
+       "image_sample": "نموونە.jpg",
        "image_tip": "تصویر داخل متن",
+       "media_sample": "نموونە.ogg",
        "media_tip": "پیوند پرونده",
        "sig_tip": "امضای هومۀ و برچسب زۀمان",
        "hr_tip": " )خط افقی(از آن کم استفاده کنید",
        "preview": "پیش‌نمایش",
        "showpreview": "پیش‌نمایش",
        "showdiff": "گؤەڕیال(تغییرات) بۆین",
-       "blankarticle": "<strong>هوشدار:</strong> هۆمە وەڵگەتۆن سازیە پەتیە(حالیە).\nأڕ «$1» دۆِ گِل کلیک کِین ، وەڵگە بێ  نۆم جِک(محتوا) مەسازێ.",
+       "blankarticle": "<strong>ئاگاتۆ داشتوو:</strong> هۆمە ڤەڵگەتۆن سازیە پەتیە(خالیە).\nئەڕ «$1» دۆِ گِل کلیک کِین ، ڤەڵگە بێ  نۆمجِک(محتوا) مەسازێ.",
        "anoneditwarning": "<strong>هشدار:</strong> شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر <strong>[$1 وارد شوید]</strong> یا <strong>[$2 یک حساب کاربری بسازید]</strong>، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.",
        "anonpreviewwarning": "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''",
        "missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید.\nاگر دوباره دکمهٔ «$1» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
        "updated": "(تازة سازی بیة)",
        "note": "'''نکته:'''",
        "previewnote": "'''به یاد داشته باشید که این فقط پیش‌نمایش است.'''\nتغییرات شما هنوز ذخیره نشده‌است!",
-       "continue-editing": "بچۆإ بةخش دةکاری",
+       "continue-editing": "بچۆ ئەڕا بەش دەسکاریکردن",
        "previewconflict": "این پیش‌نمایش منعکس‌کنندهٔ متن ناحیهٔ ویرایش متن بالایی است، به شکلی که اگر متن را ذخیره کنید نمایش خواهد یافت.",
        "session_fail_preview": "'''شرمنده! به علت از دست رفتن اطلاعات نشست کاربری نمی‌توانیم ویرایش شما را پردازش کنیم.'''\nلطفاً دوباره سعی کنید.\nاگر دوباره به همین پیام برخوردید از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.",
        "session_fail_preview_html": "'''متأسفانه امکان ثبت ویرایش شما به خاطر از دست رفتن اطلاعات نشست کاربری وجود ندارد.'''\n\n''با توجه به این که در {{SITENAME}} امکان درج اچ‌تی‌ام‌ال خام فعال است، پیش‌نمایش صفحه پنهان شده تا امکان حملات مبتنی بر جاوااسکریپت وجود نداشته باشد.''\n\n'''اگر مطمئن هستید که این پیش‌نمایش یک ویرایش مجاز است، آن را تکرار کنید.'''\nاگر تکرار پیش‌نمایش نتیجه نداد، از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.",
        "explainconflict": "از وقتی ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شده‌است.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «$1» <strong>فقط</strong> متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
        "yourtext": "متن شما",
        "storedversion": "نسخهٔ ذخیره شده",
-       "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
        "editingold": "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.'''\nاگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.",
        "yourdiff": "تفاوت‌ها",
        "copyrightwarning": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} منتشرشده تحت $2 در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر $1 را ببینید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر $1 را ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
        "yourgender": "ترجیح می‌دهید چگونه توصیف شوید؟",
        "gender-unknown": "هنگام ذکر شما، نرم‌افزار تا جای ممکن از کلمات خنثی از نظر جنسیت استفاده خواهد",
        "gender-male": "پیا",
-       "gender-female": "ژن",
+       "gender-female": "ئافرەت(ژەن)",
        "prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
        "email": "ایمیل",
        "prefs-help-realname": "نام واقعی اختیاری است.\nاگر وارد شده است هنگام ارجاع به آثارتان و انتساب آن‌ها به شما ممکن است از نام واقعی‌تان استفاده شود.",
        "userrights-changeable-col": "گروه‌هایی که می‌توانید تغییر دهید",
        "userrights-unchangeable-col": "گروه‌هایی که نمی‌توانید تغییر دهید",
        "userrights-conflict": "تعارض دسترسی‌های کاربری! لطفاً بررسی کنید و تغییرات را تأیید کنید.",
-       "group": "گروه:",
+       "group": "داکووکە(گروو):",
        "group-user": "کاربۀر",
        "group-autoconfirmed": "کاربران تأییدشدهٔ خودکار",
        "group-bot": "ربات‌ها",
        "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید):",
        "rc_categories_any": "هر کدام از منتخب‌ها",
        "rc-change-size-new": " $1دؤما تۀقیر دائن{{PLURAL:$1|بایت|بایتل}}",
-       "newsectionsummary": "/* $1 */ بةخش جدید",
+       "newsectionsummary": "/* $1 */ بەخش نوو",
        "rc-enhanced-expand": "نمایش جزئیات",
        "rc-enhanced-hide": "نهفتن جزئیات",
        "rc-old-title": "ایجادشده با عنوان اصلی «$1»",
        "recentchangeslinked-toolbox": "تغییرۀ مرتبط",
        "recentchangeslinked-title": "تغییرات مرتبط با $1",
        "recentchangeslinked-summary": "در زیر فهرستی از تغییرات اخیر صفحه‌های پیوند داده شده از این صفحه (یا اعضای رده مورد نظر) را می‌بینید.\nصفحه‌هایی که در [[Special:Watchlist|فهرست پی‌گیری‌هایتان]] باشند به صورت '''پررنگ''' نشان داده می‌شوند.",
-       "recentchangeslinked-page": ":نام وةڵگة",
+       "recentchangeslinked-page": "نۆم ڤەڵگە:",
        "recentchangeslinked-to": "نمایش تغییرات صفحه‌هایی که به صفحهٔ داده‌شده پیوند دارند",
        "recentchanges-page-added-to-category": "[[:$1]] اضاف بیە ڕِزگ",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] و {{PLURAL:$2|یک صفحه|$2 صفحه}}ٔ دیگر به رده اضافه شدند",
        "fileuploadsummary": "خلاصه:",
        "filereuploadsummary": "تغییرات پرونده:",
        "filestatus": "وضعیت حق تکثیر:",
-       "filesource": ":بِنچۀک/مۀنبۀع",
+       "filesource": "بنچەک(منبع)",
        "ignorewarning": "چشم‌پوشی از هشدار و ذخیرهٔ پرونده.",
        "ignorewarnings": "چشم‌پوشی از همهٔ هشدارها",
        "minlength1": "نام پرونده دست کم باید یک حرف باشد.",
        "listgrouprights": "اختیارات گروه‌های کاربری",
        "listgrouprights-summary": "فهرست زیر شامل گروه‌های کاربری تعریف شده در این ویکی و اختیارات داده شده به آن‌ها است.\nاطلاعات بیشتر در مورد هر یک از اختیارات را در [[{{MediaWiki:Listgrouprights-helppage}}]] بیابید.",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">اختیارات داده‌شده</span>\n* <span class=\"listgrouprights-revoked\">اختیارات گرفته‌شده</span>",
-       "listgrouprights-group": "گروه",
+       "listgrouprights-group": "داکووکە(گروو)",
        "listgrouprights-rights": "دسترسی‌ها",
        "listgrouprights-helppage": "Help:دسترسی‌های گروهی",
        "listgrouprights-members": "(فهرست اعضا)",
        "blanknamespace": "(سەر/اصلی)",
        "contributions": "هؤمکاریۀل{{GENDER:$1|کاربۀر}}",
        "contributions-title": "مشارکت‌های کاربری $1",
-       "mycontris": "هؤمکاری کِرۀل",
-       "anoncontribs": "هؤمکاری کِرۀل",
+       "mycontris": "بەشاکرەل(هام بێرەل)",
+       "anoncontribs": "بەشاکرەل(هام بێرەل)",
        "contribsub2": "برای {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب کاربری «$1» ثبت نشده‌است.",
        "nocontribs": "هیچ تغییری با این مشخصات یافت نشد.",
        "block": "بستن کاربر.",
        "unblock": "بازکردن کاربر",
        "blockip": "بستن {{GENDER:$1|کاربر}}",
-       "blockip-legend": "بستن کاربر",
        "blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آی‌پی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحه‌های به‌خصوصی که مورد خرابکاری واقع شده‌اند).",
        "ipaddressorusername": "نشانی آی‌پی یا نام کاربری:",
        "ipbexpiry": "زمان سرآمدن:",
        "exif-sublocationdest": "بخش شهر نمایش داده شده",
        "exif-objectname": "عنوان کوتاه",
        "exif-specialinstructions": "دستورالعمل‌های ویژه",
-       "exif-headline": "سةر Ù\88ةڵگة",
+       "exif-headline": "عÙ\86Ù\88اÙ\86",
        "exif-credit": "صاحب امتیاز/ارائه کننده",
-       "exif-source": "بÙ\90Ù\86Ú\86Û\80Ú©/Ù\85Û\80Ù\86بÛ\80ع",
+       "exif-source": "بÙ\86Ú\86Û\95Ú©(Ù\85Ù\86بع)",
        "exif-editstatus": "وضعیت تحریریه تصویر",
        "exif-urgency": "فوریت/هڵةپڵة",
        "exif-fixtureidentifier": "نام ستون نشریه",
        "exif-gpsdirection-m": "جهت مغناطیسی",
        "exif-ycbcrpositioning-1": "وسط‌چین‌شده",
        "exif-ycbcrpositioning-2": "اشتراکی/هام بةشی",
-       "exif-dc-contributor": "هؤمکاری کِرۀل",
+       "exif-dc-contributor": "بەشاکرەل(هام بێرەل)",
        "exif-dc-coverage": "محدوده مکانی و یا زمانی رسانه",
        "exif-dc-date": "تاریخ(ها)",
        "exif-dc-publisher": "بۀشا کۀر-ناشر",
        "tags-tag": "نام برچسب",
        "tags-display-header": "نمایش در فهرست‌های تغییرات",
        "tags-description-header": "توضیح کامل معنی",
-       "tags-source-header": "بÙ\90Ù\86Ú\86Û\80Ú©/Ù\85Û\80Ù\86بÛ\80ع",
+       "tags-source-header": "بÙ\86Ú\86Û\95Ú©(Ù\85Ù\86بع)",
        "tags-active-header": "فعال(کارکةر)؟",
        "tags-hitcount-header": "تغییرهای برچسب‌دار",
        "tags-actions-header": "کارۀل",
index f61d797..a29f1ad 100644 (file)
@@ -86,7 +86,6 @@
        "underline-never": "Niekada",
        "underline-default": "Pagal naršyklės nustatymus",
        "editfont-style": "Redagavimo srities šrifto stilius:",
-       "editfont-default": "Naršyklės numatytasis",
        "editfont-monospace": "Lygiaplotis šriftas",
        "editfont-sansserif": "Šriftas be užraitų",
        "editfont-serif": "Šriftas su užraitais",
        "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 „$1“, bus įrašytas '''tik''' tekstas viršutiniame tekstiniame lauke.",
        "yourtext": "Jūsų tekstas",
        "storedversion": "Išsaugota versija",
-       "nonunicodebrowser": "'''ĮSPĖJIMAS: Jūsų naršyklė nepalaiko unikodo. Kad būtų saugu redaguoti puslapį, ne ASCII simboliai redagavimo lauke bus rodomi kaip šešioliktainiai kodai.'''",
        "editingold": "'''ĮSPĖJIMAS: Jūs keičiate ne naujausią puslapio versiją.\nJei išsaugosite savo keitimus, po to daryti pakeitimai pradings.'''",
        "yourdiff": "Skirtumai",
        "copyrightwarning": "Primename, kad viskas, kas patenka į {{SITENAME}}, yra laikoma paskelbtu pagal $2 (detaliau - $1). Jei nenorite, kad jūsų indėlis būtų be gailesčio redaguojamas ir platinamas, čia nerašykite.<br />\nJūs taip pat pasižadate, kad tai jūsų pačių rašytas turinys arba kopijuotas iš viešų ar panašių nemokamų šaltinių.\n'''NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!'''",
        "timezoneregion-indian": "Indijos vandenynas",
        "timezoneregion-pacific": "Ramusis vandenynas",
        "allowemail": "Leisti kitiems naudotojams siųsti man el. laiškus",
+       "email-blacklist-label": "Neleisti šiems vartotojams siųsti man el. laiškų:",
        "prefs-searchoptions": "Paieška",
        "prefs-namespaces": "Vardų sritys",
        "default": "pagal nutylėjimą",
        "rcfilters-filter-lastrevision-description": "Naujausias puslapio keitimas.",
        "rcfilters-filter-previousrevision-description": "Visi keitimai, kurie nėra naujausi puslapio keitimai.",
        "rcfilters-view-tags": "Pažymėti keitimai",
+       "rcfilters-view-tags-help-icon-tooltip": "Sužinoti daugiau apie Pažymėtus pakeitimus",
        "rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
        "rclistfromreset": "Nustatyti duomenų pasirinkimą iš naujo",
        "rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
        "movedarticleprotection": "perkelti apsaugos nustatymai iš „[[$2]]“ į „[[$1]]“",
        "protectedarticle-comment": "{{GENDER:$2|Užrakino}} „[[$1]]“",
        "modifiedarticleprotection-comment": "{{GENDER:$2|Pakeitė „[[$1]]“ apsaugos lygį}}",
-       "unprotectedarticle-comment": "{{GENDER:$2|Pašalino apsaugą}} iš „[[$1]]“",
+       "unprotectedarticle-comment": "{{GENDER:$2|Atrakino}} „[[$1]]“",
        "protect-title": "Nustatomas apsaugos lygis puslapiui „$1“",
        "protect-title-notallowed": "Peržiūrėti \"$1\" apsaugos lygį",
        "prot_1movedto2": "[[$1]] pervadintas į [[$2]]",
        "block": "Blokuoti naudotoją",
        "unblock": "Atblokuoti naudotoją",
        "blockip": "Blokuoti naudotoją",
-       "blockip-legend": "Blokuoti naudotoją",
        "blockiptext": "Naudokite šią formą, kad uždraustumėte redagavimo prieigą pasirinktam IP adresui ar naudotojui. Tai turėtų būti atliekama tik tam, kad sustabdytumėte vandalizmą, ir neprieštarauti [[{{MediaWiki:Policy-url}}|projekte galiojančioms taisyklėms]].\nŽemiau pateikite tikslią priežastį (pavyzdžiui, nurodydami sugadintus puslapius).\nJūs galite blokuoti IP intervalus pasinaudodami [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] sintakse; didžiausias leidžiamas intervalas yra /$1 IPv4 ir /$2 IPv6.",
        "ipaddressorusername": "IP adresas arba naudotojo vardas",
        "ipbexpiry": "Galiojimo laikas",
index 35b15ae..5003d46 100644 (file)
@@ -24,7 +24,8 @@
                        "Macofe",
                        "Nitalynx",
                        "Silraks",
-                       "Zuiks"
+                       "Zuiks",
+                       "Martinsdzerve"
                ]
        },
        "tog-underline": "Pasvītrot saites:",
@@ -54,7 +55,7 @@
        "tog-shownumberswatching": "Rādīt uzraudzītāju skaitu",
        "tog-oldsig": "Esošais paraksts:",
        "tog-fancysig": "Vienkāršs paraksts (bez automātiskās saites)",
-       "tog-uselivepreview": "Lietot tūlītējo priekšskatījumu",
+       "tog-uselivepreview": "Rādīt priekšskatījumu bez lapas pārlādēšanas",
        "tog-forceeditsummary": "Atgādināt man, ja kopsavilkuma ailīte ir tukša",
        "tog-watchlisthideown": "Paslēpt manus labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthidebots": "Paslēpt botu labojumus uzraugāmo lapu sarakstā",
        "virus-scanfailed": "skenēšana neizdevās (kods $1)",
        "virus-unknownscanner": "nezināms antivīruss:",
        "logouttext": "'''Tu esi izgājis no {{grammar:ģenitīvs|{{SITENAME}}}}.'''\n\nVari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezties]</span> kā cits lietotājs vai varbūt tas pats.\nŅem vērā, ka arī pēc iziešanas, dažas lapas var tikt parādītas tā, it kā tu vēl būtu iekšā, līdz tiks iztīrīta pārlūka kešatmiņa.",
+       "cannotlogoutnow-title": "Šobrīd iziet nav iespējams",
        "welcomeuser": "Laipni lūgts, $1!",
        "yourname": "Tavs lietotājvārds",
        "userlogin-yourname": "Lietotājvārds",
        "changeemail-none": "(nav)",
        "changeemail-password": "Jūsu {{SITENAME}} parole:",
        "changeemail-submit": "Mainīt e-pastu",
+       "changeemail-nochange": "Lūdzu, ievadi atšķirīgu jauno e-pasta adresi.",
        "resettokens-tokens": "Marķieri:",
        "resettokens-token-label": "$1 (šībrīža vērtība: $2)",
        "bold_sample": "Teksts treknrakstā",
        "accmailtext": "Nejauši ģenerēta parole lietotājam [[User talk:$1|$1]] tika nosūtīta uz $2.\n\nŠī konta paroli pēc ielogošanās varēs nomainīt ''[[Special:ChangePassword|šeit]]''.",
        "newarticle": "(Jauns raksts)",
        "newarticletext": "Šajā projektā vēl nav lapas ar šādu nosaukumu.\nLai izveidotu lapu, sāc rakstīt teksta logā apakšā (par teksta formatēšanu un sīkākai informācija skatīt [$1 palīdzības lapu]).\nJa tu šeit nonāci kļūdas pēc, vienkārši uzspied <strong>back</strong> pogu pārlūkprogrammā.",
-       "anontalkpagetext": "----''Šī ir diskusiju lapa anonīmam dalībniekam, kurš vēl nav kļuvis par reģistrētu dalībnieku vai arī neizmanto savu dalībnieka vārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem dalībniekiem.\nJa tu esi anonīms dalībnieks un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:CreateAccount|kļūsti par dalībnieku]] vai arī [[Special:UserLogin|izmanto jau izveidotu dalībnieka vārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem dalībniekiem.''",
+       "anontalkpagetext": "----\n<em>Šī ir anonīma dalībnieka, kurš vēl nav izveidojis lietotāja kontu vai to nelieto, diskusiju lapa.</em>\nTādēļ mums ir jāizmanto IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem dalībniekiem.\nJa tu esi anonīms dalībnieks un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:CreateAccount|izveido kontu]] vai [[Special:UserLogin|pieslēdzies]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem dalībniekiem.",
        "noarticletext": "Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu]</span>.",
        "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot šo lapu.",
        "userpage-userdoesnotexist": "Lietotājs \"<nowiki>$1</nowiki>\" nav reģistrēts.\nLūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.",
        "permissionserrorstext": "Tev nav atļauts veikt šo darbību {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
        "permissionserrorstext-withaction": "Tev nav atļauts $2 {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
        "recreate-moveddeleted-warn": "'''Brīdinājums: Tu atjauno lapu, kas ir tikusi izdzēsta'''\n\nTev vajadzētu pārliecināties, vai ir lietderīgi turpināt izmainīt šo lapu.\nTe var apskatīt dzēšanas un pārvietošanas reģistrus, kuros jābūt datiem par to kas, kad un kāpēc šo lapu izdzēsa.",
-       "moveddeleted-notice": "Šī lapa ir tikusi izdzēsta.\nTe var apskatīt dzēšanas un pārvietošanas reģistru fragmentus, lai noskaidrotu kurš, kāpēc un kad to izdzēsa.",
+       "moveddeleted-notice": "Šī lapa ir tikusi izdzēsta.\nDzēšanas, aizsargāšanas un pārvietošanas reģistru ieraksti ir pieejami zemāk.",
        "log-fulllog": "Paskatīties pilnu reģistru",
        "edit-hook-aborted": "Aizķere pārtrauca labojumu.\nNetika sniegts paskaidrojums.",
        "edit-gone-missing": "Nevar atjaunināt lapu.\nIzskatās, ka lapa ir dzēsta.",
        "page_first": "pirmā",
        "page_last": "pēdējā",
        "histlegend": "Atšķirību izvēle: atzīmē vajadzīgo versiju apaļās pogas un spied \"Salīdzināt izvēlētās versijas\".<br />\nApzīmējumi:\n\"ar pašreizējo\" = salīdzināt ar pašreizējo versiju,\n\"ar iepriekšējo\" = salīdzināt ar iepriekšējo versiju,\nm = maznozīmīgs labojums.",
-       "history-fieldset-title": "Meklēt hronoloģijā",
+       "history-fieldset-title": "Versiju meklēšana",
        "history-show-deleted": "Tikai dzēstās",
        "histfirst": "Senākās",
        "histlast": "Jaunākās",
        "timezoneregion-europe": "Eiropa",
        "timezoneregion-indian": "Indijas okeāns",
        "timezoneregion-pacific": "Klusais okeāns",
-       "allowemail": "Atļaut saņemt e-pastus no citiem dalībniekiem",
+       "allowemail": "Atļaut citiem dalībniekiem sūtīt man e-pastus",
+       "email-blacklist-label": "Aizliegt šiem dalībniekiem man sūtīt e-pastus:",
        "prefs-searchoptions": "Meklēšana",
        "prefs-namespaces": "Vārdtelpas",
        "default": "pēc noklusējuma",
        "gender-female": "Viņa labo viki lapas",
        "prefs-help-gender": "Dzimums nav obligāti jānorāda (šo parametru programmatūra izmanto, lai ģenerētu paziņojumus, kas atkarīgi no dalībnieka dzimuma). Šī informācija būs publiski pieejama.",
        "email": "E-pasts",
-       "prefs-help-realname": "Īstais vārds nav obligāti jānorāda.\nJa tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}}).",
+       "prefs-help-realname": "Īstais vārds nav obligāti jānorāda.\nJa tas būs norādīts, to izmantos, lai identificētu tavu devumu.",
        "prefs-help-email": "E-pasta adrese nav obligāta, bet ir nepieciešama nozaudētas paroles atjaunošanai.",
        "prefs-help-email-others": "Tu arī vari izvēlēties, ka citi var sazināties ar tevi ar saites tavā dalībnieka lapā vai dalībnieka diskusijas lapā palīdzību. Citiem dalībniekiem netiek atklāta tava e-pasta adrese, kad viņi sazinās ar tevi.",
        "prefs-help-email-required": "E-pasta adrese ir obligāta.",
        "prefs-editor": "Redaktors",
        "prefs-preview": "Priekšskatījums",
        "prefs-advancedrc": "Papildu iespējas",
+       "prefs-opt-out": "Atteikties no uzlabojumiem",
        "prefs-advancedrendering": "Papildu iespējas",
        "prefs-advancedsearchoptions": "Papildu iespējas",
        "prefs-advancedwatchlist": "Papildu iespējas",
        "action-userrights-interwiki": "mainīt dalībnieku tiesības citās Vikipēdijās",
        "action-siteadmin": "bloķēt vai atbloķēt datubāzi",
        "action-sendemail": "sūtīt e-pastus",
+       "action-editmyoptions": "labot savas izvēles",
+       "action-deletechangetags": "dzēst iezīmes no datubāzes",
        "nchanges": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|kopš pēdējā apmeklējuma}}",
        "enhancedrc-history": "vēsture",
        "recentchanges-submit": "Rādīt",
        "rcfilters-tag-remove": "Noņemt \"$1\"",
        "rcfilters-legend-heading": "<strong>Saīsinājumu saraksts:</strong>",
-       "rcfilters-other-review-tools": "<strong>Citi pārskatīšanas rīki</strong>",
+       "rcfilters-other-review-tools": "Citi pārskatīšanas rīki",
        "rcfilters-group-results-by-page": "Grupēt rezultātus pēc lapas",
        "rcfilters-grouping-title": "Grupēšana",
        "rcfilters-activefilters": "Aktīvie filtri",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|stundas|stunda|stundas}}",
        "rcfilters-highlighted-filters-list": "Izcelts: $1",
        "rcfilters-quickfilters": "Saglabātie filtri",
-       "rcfilters-quickfilters-placeholder-title": "Vēl nav saglabāto saišu",
+       "rcfilters-quickfilters-placeholder-title": "Vēl nav saglabāto filtru",
        "rcfilters-savedqueries-defaultlabel": "Saglabātie filtri",
        "rcfilters-savedqueries-rename": "Pārsaukt",
        "rcfilters-savedqueries-setdefault": "Uzstādīt kā noklusēto",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Izveidot noklusēto filtru",
        "rcfilters-savedqueries-cancel-label": "Atcelt",
        "rcfilters-savedqueries-add-new-title": "Saglabāt esošos filtra iestatījumus",
+       "rcfilters-savedqueries-already-saved": "Šie filtri jau ir saglabāti",
        "rcfilters-restore-default-filters": "Atjaunot noklusētos filtrus",
        "rcfilters-clear-all-filters": "Noņemt visus filtrus",
-       "rcfilters-show-new-changes": "Rādīt jaunās izmaiņas",
+       "rcfilters-show-new-changes": "Skatīt jaunās izmaiņas",
        "rcfilters-search-placeholder": "Filtrēt pēdējās izmaiņas (pārlūko vai sāc rakstīt)",
        "rcfilters-invalid-filter": "Nederīgs filtrs",
        "rcfilters-empty-filter": "Nav aktīvu filtru. Tiek rādītas visas izmaiņas.",
        "rcfilters-filter-lastrevision-description": "Nesenākā lapas izmaiņa.",
        "rcfilters-filter-previousrevision-label": "Agrākas versijas",
        "rcfilters-filter-previousrevision-description": "Visas izmaiņas, kuras nav pēdējā lapas izmaiņa.",
-       "rcfilters-view-advanced-filters-label": "Paplašinātie filtri",
        "rcfilters-view-tags": "Iezīmētie labojumi",
        "rcfilters-view-namespaces-tooltip": "Filtrēt rezultātus pēc vārdtelpas",
+       "rcfilters-view-tags-help-icon-tooltip": "Uzzināt vairāk par iezīmētajiem labojumiem",
+       "rcfilters-liveupdates-button": "Tūlītēji atjauninājumi",
+       "rcfilters-liveupdates-button-title-on": "Atslēgt tūlītējos atjauninājumus",
        "rcfilters-watchlist-markseen-button": "Atzīmēt visas izmaiņas kā apskatītas",
        "rcfilters-watchlist-edit-watchlist-button": "Labot manu uzraugāmo lapu sarakstu",
+       "rcfilters-preference-label": "Paslēpt uzlaboto pēdējo izmaiņu versiju",
        "rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
        "rclistfromreset": "Atiestatīt datuma izvēli",
        "rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2",
        "uploaddisabledtext": "Failu augšupielāde ir atslēgta.",
        "php-uploaddisabledtext": "Failu augšupielāde ir atslēgta PHP.\nLūdzu, pārbaudi file_uploads uzstādījumu.",
        "uploadscripted": "Šis fails satur HTML vai skriptu kodu, kuru, interneta pārlūks, var kļūdas pēc, mēģināt interpretēt (ar potenciāli sliktām sekām).",
+       "uploadinvalidxml": "Nevarēja apstrādāt augšupielādētā faila XML saturu.",
        "uploadvirus": "Šis fails satur vīrusu! Sīkāk: $1",
        "uploadjava": "Fails ir ZIP fails, kas satur Java .class failu.\nJava failu augšupielāde nav atļauta, jo tas var radīt iespējas apiet drošības ierobežojumus.",
        "upload-source": "Augšuplādējamais fails",
        "backend-fail-writetemp": "Nevar ierakstīt pagaidu failu.",
        "backend-fail-closetemp": "Nevar aizvērt pagaidu failu.",
        "backend-fail-read": "Nevar lasīt failu $1.",
-       "backend-fail-create": "Nevar izveidot failu $1.",
+       "backend-fail-create": "Nevar rakstīt failā \"$1\".",
        "zip-wrong-format": "Norādītais fails nebija ZIP fails.",
        "uploadstash-errclear": "Failu tīrīšana neizdevās.",
        "uploadstash-refresh": "Atsvaidzināt failu sarakstu",
        "listfiles-delete": "dzēst",
        "listfiles-summary": "Šajā īpašajā lapā ir redzami visi augšupielādētie faili.",
        "listfiles_search_for": "Meklēt failu pēc vārda:",
+       "listfiles-userdoesnotexist": "Dalībnieks \"$1\" nav reģistrēts.",
        "imgfile": "fails",
        "listfiles": "Attēlu uzskaitījums",
        "listfiles_thumb": "Sīktēls",
        "listfiles_size": "Izmērs",
        "listfiles_description": "Apraksts",
        "listfiles_count": "Versijas",
-       "listfiles-show-all": "Iekļaut attēlus vecās versijas",
+       "listfiles-show-all": "Iekļaut failu vecās versijas",
        "listfiles-latestversion": "Pašreizējā versija",
        "listfiles-latestversion-yes": "Jā",
        "listfiles-latestversion-no": "Nē",
        "filerevert-defaultcomment": "Atjaunots uz $2, $1 versiju",
        "filerevert-submit": "Atjaunot",
        "filerevert-success": "Fails '''[[Media:$1|$1]]''' tika atjaunots uz [$4 versiju, kāda tā bija $3, $2].",
-       "filerevert-badversion": "Šajam failam nav iepriekšējās versijas, kas atbilstu norādītajam datumam un laikam.",
+       "filerevert-badversion": "Šim failam nav iepriekšējās versijas, kas atbilstu norādītajam datumam un laikam.",
        "filedelete": "Dzēst $1",
        "filedelete-legend": "Dzēst failu",
        "filedelete-intro": "Tu taisies izdzēst '''[[Media:$1|$1]]''', kopā ar visu tā hronoloģiju.",
        "apisandbox-dynamic-parameters-add-placeholder": "Parametra nosaukums",
        "apisandbox-deprecated-parameters": "Novecojuši parametri",
        "apisandbox-results": "Rezultāti",
+       "apisandbox-sending-request": "Sūta API pieprasījumu...",
+       "apisandbox-loading-results": "Saņem API rezultātus...",
+       "apisandbox-request-selectformat-label": "Rādīt pieprasījuma datus kā:",
        "apisandbox-request-format-url-label": "URL vaicājuma teksts",
        "apisandbox-request-url-label": "Pieprasījuma URL:",
        "apisandbox-request-json-label": "Pieprasījuma JSON:",
        "watchlist-details": "(Tu uzraugi $1 {{PLURAL:$1|lapu|lapas}}, neieskaitot diskusiju lapas.)",
        "wlheader-enotif": "E-pasta paziņojumi ir ieslēgti.",
        "wlheader-showupdated": "Lapas, kuras ir tikušas izmainītas, kopš tu tās pēdējoreiz apskatījies, te rādās ar '''pustrekniem''' burtiem",
-       "wlshowlast": "Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī .",
+       "wlshowlast": "Rādīt pēdējās $1 stundas $2 dienas",
        "watchlist-hide": "Slēpt",
        "watchlist-submit": "Rādīt",
        "wlshowhideminor": "maznozīmīgos labojumus",
        "protectexpiry": "Beidzas:",
        "protect_expiry_invalid": "Beigu termiņš ir nederīgs.",
        "protect_expiry_old": "Beigu termiņs ir pagātnē.",
+       "protect-unchain-permissions": "Pieslēgt papildu aizsargāšanas iespējas",
        "protect-text": "Šeit var apskatīt un izmainīt lapas <strong>$1</strong> aizsardzības līmeni.",
        "protect-locked-access": "Jūsu kontam nav atļaujas mainīt lapas aizsardzības pakāpi.\nPašreizējie lapas '''$1''' iestatījumi ir:",
        "protect-cascadeon": "Šī lapa pašlaik ir aizsargāta, jo tā ir iekļauta {{PLURAL:$1|šajās lapās|šajā lapā|šajās lapās}} (mainot šīs lapas aizsardzības līmeni aizsardzība netiks noņemta):",
        "protect-default": "Atļaut visiem lietotājiem",
        "protect-fallback": "Atļaut tikai lietotājiem ar \"$1\" atļauju",
-       "protect-level-autoconfirmed": "Atļaut tikai autoapstiprinātiem lietotājiem",
+       "protect-level-autoconfirmed": "Atļaut tikai pašpārbaudītajiem",
        "protect-level-sysop": "Atļaut tikai administratoriem",
        "protect-summary-cascade": "kaskāde",
        "protect-expiring": "līdz $1 (UTC)",
        "protect-expiring-local": "beidzas $1",
        "protect-expiry-indefinite": "bezgalīgs",
-       "protect-cascade": "Aizsargāt šajā lapā iekļautās lapas (veidnes) ''(cascading protection)''",
+       "protect-cascade": "Aizsargāt šajā lapā iekļautās lapas un veidnes (kaskādes aizsardzība)",
        "protect-cantedit": "Tu nevari izmainīt šīs lapas aizsardzības līmeņus, tāpēc, ka tur nevari izmainīt šo lapu.",
        "protect-othertime": "Cits laiks:",
        "protect-othertime-op": "cits laiks",
        "undelete-show-file-submit": "Jā",
        "namespace": "Vārdtelpa:",
        "invert": "Izvēlēties pretēji",
+       "tooltip-invert": "Atzīmē šo rūtiņu, lai paslēptu izmaiņas lapās izvēlētajā vārdtelpā (un saistītajā vārdtelpā, ja tā atzīmēts)",
        "namespace_association": "Saistītā vārdtelpa",
        "tooltip-namespace_association": "Atzīmē šo rūtiņu, lai iekļautu diskusijas vai temata vārdtelpu, kas saistīta ar izvēlēto vārdtelpu",
        "blanknamespace": "(Pamatlapa)",
        "pageinfo-header-edits": "Labojumu vēsture",
        "pageinfo-header-restrictions": "Lapas aizsardzība",
        "pageinfo-header-properties": "Lapas parametri",
+       "pageinfo-display-title": "Attēlojamais nosaukums",
+       "pageinfo-default-sort": "Noklusējuma kārtošanas atslēga",
        "pageinfo-length": "Lapas garums (baitos)",
        "pageinfo-article-id": "Lapas ID",
        "pageinfo-language": "Lappuses satura valoda",
        "pageinfo-content-model": "Lapas satura modelis",
+       "pageinfo-content-model-change": "mainīt",
        "pageinfo-robot-policy": "Indeksācija ar robotiem",
        "pageinfo-robot-index": "Atļauta",
        "pageinfo-robot-noindex": "Aizliegta",
        "pageinfo-watchers": "Lapas uzraudzītāju skaits",
+       "pageinfo-visiting-watchers": "Lapas uzraudzītāju skaits, kuri apskatījuši pēdējos labojumus",
+       "pageinfo-few-watchers": "Mazāk kā $1 {{PLURAL:$1|uzraudzītāju|uzraudzītājs|uzraudzītāju}}",
        "pageinfo-redirects-name": "Pāradresāciju skaits uz šo lapu",
        "pageinfo-subpages-name": "Šīs lapas apakšlapas",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|pāradresācijas|pāradresācija|pāradresācijas}}; $3 {{PLURAL:$3|nav pāradresācijas|nav pāradresācija|nav pāradresācijas}})",
        "pageinfo-firstuser": "Lapas izveidotājs",
        "pageinfo-firsttime": "Lapas izveides datums",
        "pageinfo-lastuser": "Pēdējais labotājs",
        "pageinfo-lasttime": "Pēdējā labojuma datums",
        "pageinfo-edits": "Kopējais izmaiņu skaits",
        "pageinfo-authors": "Kopējais atsevišķu autoru skaits",
+       "pageinfo-recent-edits": "Izmaiņu skaits (pēdējās $1)",
+       "pageinfo-recent-authors": "Neseno lapas labotāju skaits",
        "pageinfo-magic-words": "{{PLURAL:$1|Maģiskie vārdi|Maģiskais vārds|Maģiskie vārdi}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Slēptas kategorijas|Slēpta kategorija|Slēptas kategorijas}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Iekļautās veidnes|Iekļautā veidne|Iekļautās veidnes}} ($1)",
        "pageinfo-toolboxlink": "Lapas informācija",
        "pageinfo-redirectsto": "Pāradresē uz",
        "pageinfo-redirectsto-info": "info",
        "exif-disclaimer": "Atruna",
        "exif-contentwarning": "Brīdinājums par saturu",
        "exif-giffilecomment": "GIF faila komentārs",
+       "exif-subjectnewscode": "Temata kods",
+       "exif-scenecode": "IPTC ainas kods",
        "exif-event": "Attēlotais notikums",
        "exif-organisationinimage": "Attēlotā organizācija",
        "exif-personinimage": "Attēlotā persona",
        "version-libraries-license": "Licence",
        "version-libraries-description": "Apraksts",
        "version-libraries-authors": "Autori",
+       "redirect": "Pāradresēt pēc faila, lietotāja, lapas, versijas vai žurnāla ieraksta ID",
        "redirect-submit": "Aiziet",
+       "redirect-lookup": "Meklēt:",
        "redirect-value": "Vērtība:",
        "redirect-user": "Lietotāja ID",
        "redirect-page": "Lapas ID",
        "tag-filter": "[[Special:Tags|Iezīmju]] filtrs:",
        "tag-filter-submit": "Filtrs",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Iezīmes|Iezīme|Iezīmes}}]]: $2)",
+       "tag-mw-contentmodelchange": "satura modeļa izmaiņa",
        "tags-title": "Iezīmes",
        "tags-intro": "Šajā lapā uzskaitītas iezīmes, ar kurām programmatūra var atzīmēt labojumus, un to nozīme.",
        "tags-tag": "Iezīmes nosaukums",
        "compare-invalid-title": "Norādītais nosaukums nav derīgs.",
        "compare-title-not-exists": "Norādītais nosaukums neeksistē.",
        "compare-revision-not-exists": "Norādītā versija neeksistē.",
+       "diff-form": "Atšķirības",
        "dberr-problems": "Atvainojiet!\nŠai vietnei ir radušās tehniskas problēmas.",
        "dberr-again": "Uzgaidiet dažas minūtes un pārlādējiet šo lapu.",
        "dberr-info": "(Nevar piekļūt datubāzei: $1)",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|izdzēsa}} pāradresāciju $3 pārrakstot",
        "logentry-delete-restore": "$1 {{GENDER:$2|atjaunoja}} lapu $3 ($4)",
        "restore-count-files": "{{PLURAL: $1|$1 faili|$1 fails|$1 faili}}",
+       "logentry-delete-revision": "$1 {{GENDER:$2|nomainīja}} $5 {{PLURAL:$5|versiju|versijas|versiju}} redzamību lapai $3: $4",
        "logentry-suppress-delete": "$1 {{GENDER:$2|cenzēja}} lapu $3",
        "revdelete-content-hid": "saturs slēpts",
        "revdelete-summary-hid": "labojuma kopsavilkums slēpts",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, neatstājot pāradresāciju",
        "logentry-move-move_redir": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, atstājot pāradresāciju",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4 ar pāradresāciju, neatstājot pāradresāciju",
+       "logentry-patrol-patrol-auto": "$1 automātiski {{GENDER:$2|atzīmēja}} lapas $3 versiju $4 kā pārbaudītu",
        "logentry-newusers-newusers": "Lietotāja konts $1 tika {{GENDER:$2|izveidots}}",
        "logentry-newusers-create": "Lietotāja konts $1 tika {{GENDER:$2|izveidots}}",
        "logentry-newusers-create2": "$1 {{GENDER:$2|izveidoja}} lietotāja kontu $3",
index d4f0ae1..84b95f6 100644 (file)
        "history-feed-description": "維基誌審",
        "history-feed-item-nocomment": "$1於$2",
        "history-feed-empty": "此頁不存,或刪、或更。類由此[[Special:Search|尋]]",
+       "history-edit-tags": "修訂標識",
        "rev-deleted-comment": "(此註刪矣)",
        "rev-deleted-user": "(此簿刪矣)",
        "rev-deleted-event": "(此誌刪矣)",
index 507d04f..2186a3b 100644 (file)
@@ -8,7 +8,8 @@
                        "Bennylin",
                        "아라",
                        "Macofe",
-                       "Mbrt"
+                       "Mbrt",
+                       "Empu"
                ]
        },
        "tog-underline": "Garisen ngisoré pranala:",
@@ -36,9 +37,9 @@
        "tog-enotifminoredits": "Kirimna imel maring inyong uga nek ana suntingan cilik nang kaca lan berkas",
        "tog-enotifrevealaddr": "Tidokna alamat imel-e inyong nang imel notifikasi",
        "tog-shownumberswatching": "Tidhokna jumlah pangawas",
-       "tog-oldsig": "Tapak asma sekiye:",
+       "tog-oldsig": "Tapak asma:",
        "tog-fancysig": "Tapak asma dianggep dadi teks wiki (ora nganggo pranala otomatis)",
-       "tog-uselivepreview": "Gunakna pratayang langsung",
+       "tog-uselivepreview": "Tonton kaca sedurungé tapi aja dimuat ulang",
        "tog-forceeditsummary": "Emutna inyong anggere durung ngisi kotak ringkesan suntingan",
        "tog-watchlisthideown": "Umpetna suntingane inyong sekang daftar pangawasan",
        "tog-watchlisthidebots": "Umpetna suntingane bot sekang daftar pangawasan",
        "tog-showhiddencats": "Tidokna kategori sing diumpetna",
        "tog-norollbackdiff": "Aja ndeleng perbedaane seuwise nglakokna pambalikan",
        "tog-useeditwarning": "Elingna inyong angger ninggalna kaca panyuntingan sing durung disimpen owahane",
-       "tog-prefershttps": "Gunakna koneksi aman terus angger mlebu log",
+       "tog-prefershttps": "Kudu nganggo koneksi sing aman terus angger mlebu log",
        "underline-always": "Saben",
        "underline-never": "Ora tau",
-       "underline-default": "Gawane kulitutawa peramban",
+       "underline-default": "Kulit utawa gawan peramban",
        "editfont-style": "Modhèl aksara (font) nang kotak suntingan:",
-       "editfont-default": "Gawane peramban",
        "editfont-monospace": "Aksara (font) Monospace",
        "editfont-sansserif": "Aksara (font) Sans-serif",
        "editfont-serif": "Aksara (font) Serif",
        "newwindow": "(buka nang jendhéla anyar)",
        "cancel": "Ora Sida",
        "moredotdotdot": "Liyané...",
-       "morenotlisted": "Daftar kiye ora kumplit.",
+       "morenotlisted": "Daftar kiyé ora kumplit.",
        "mypage": "Kaca",
        "mytalk": "Dopokan",
        "anontalk": "Dhiskusi IP kiye",
        "navigation": "pandhu arah",
        "and": "&#32;lan",
-       "qbfind": "Goleti",
-       "qbbrowse": "Jelajahi",
-       "qbedit": "Sunting",
-       "qbpageoptions": "Kaca kiye",
-       "qbmyoptions": "Kaca-ne inyong",
        "faq": "FAQ (Pitakonan sing sering ditakokna)",
-       "faqpage": "Project:FAQ",
        "actions": "Tindakan",
        "namespaces": "Bilik jeneng",
        "variants": "Varian",
        "edit-local": "Sunting deskripsi lokal",
        "create": "Gawe",
        "create-local": "Tambahna pawedharan lokal",
-       "editthispage": "Sunting kaca kiye",
-       "create-this-page": "Gawe kaca kiye",
        "delete": "Busek",
-       "deletethispage": "Busak kaca kiye",
-       "undeletethispage": "Batalna pembusekan kaca kiye",
        "undelete_short": "Batalna pambusakan $1 {{PLURAL:$1|suntingan|suntingan}}",
        "viewdeleted_short": "Deleng {{PLURAL:$1|siji suntingan|$1 suntingan}} sing wis dibusak",
        "protect": "Direksa",
        "protect_change": "owahi",
-       "protectthispage": "Reksa kaca kiye",
        "unprotect": "Owahi pangreksan",
-       "unprotectthispage": "Owahi pangreksane kaca kiye",
        "newpage": "Kaca anyar",
-       "talkpage": "Dhiskusikna kaca kiye",
        "talkpagelinktext": "Dopokan",
        "specialpage": "Kaca khusus",
        "personaltools": "Piranti pribadi",
-       "articlepage": "Deleng isi tulisan",
        "talk": "bahas",
        "views": "Tampilan",
        "toolbox": "Pekakas",
-       "userpage": "Ndeleng kaca panganggo",
-       "projectpage": "Deleng kaca proyèk",
        "imagepage": "Deleng kaca berkas",
        "mediawikipage": "Ndeleng kaca pesen sistem",
        "templatepage": "Ndeleng kaca cithakan",
        "redirectedfrom": "(Dialihna sekang $1)",
        "redirectpagesub": "Kaca pangalihan",
        "redirectto": "Dialihna maring:",
-       "lastmodifiedat": "Kaca kiye nembe diowahi dong jam $2, tanggal $1.",
+       "lastmodifiedat": "Kaca kiyé nembé diowahi jam $2, tanggal $1.",
        "viewcount": "Kaca kiye uwis diakses ping {{PLURAL:$1|sepisan|$1}}",
        "protectedpage": "Kaca sing direksa",
        "jumpto": "Mlumpat maring:",
        "perfcached": "Data kiye dijikot sekang singgahan (''cache'') lan ndeyane dudu data pungkasan. Paling akeh {{PLURAL:$1|siji asil|$1 asil}} disediakna nang papan singgahan.",
        "perfcachedts": "Data kiye dijikot sekang singgahan (''cache''), lan dianyarna keri dhewek dong $1. Paling akeh ana  {{PLURAL:$4|siji asil|$4 asil}} disediakna nang papan singgahan.",
        "querypage-no-updates": "Update nggo kaca kiye lagi dipateni.\nData sing ana nang kene sekiye ora teyeng dibaleni unggah maning.",
-       "viewsource": "Deleng sumbere",
+       "viewsource": "Deleng sumberé",
        "viewsource-title": "Deleng sumbere nggo $1",
        "actionthrottled": "Tindakan diwatesi",
        "actionthrottledtext": "Kanggo ngukur anti-spam, Rika diwatesi gole nglakoni tikdakan kiye keseringen nang wektu sing cendhak, lan Rika uwis nglewati watese kuwe.\nMonggo dijajal maning nang sawetara menit.",
        "nocookieslogin": "{{SITENAME}} nggunakna ''cookies'' nggo log panganggone.\n''Cookies'' nang panjlajah web Rika dipateni.\nMonggo diaktfna lan jajal maning.",
        "nocookiesfornew": "Akun panganggo ora digawe, jalaran inyong ora teyeng mastikna sumbere.\nPastekna Rika uwis ngaktifna ''cookies'', trus baleni muat kaca kiye maning lan jajal sepisan maning.",
        "noname": "Jeneng panganggo sing Rika lebokna ora sah.",
-       "loginsuccesstitle": "Sukses mlebu log",
+       "loginsuccesstitle": "Mlebu log",
        "loginsuccess": "'''Rika sekiye mlebu log nang {{SITENAME}} nganggo jeneng \"$1\".'''",
        "nosuchuser": "Ora ana panganggo sing jenenge \"$1\".\nJeneng panganggo kuwe dibedakna nang kapitalisasi.\nPriksa maning ejaane Rika, utawa [[Special:CreateAccount|gawe akun anyar]]",
        "nosuchusershort": "Ora ana panganggo sing jenenge \"$1\".\nJajal dipriksa maning ejaane Rika.",
        "createaccount-title": "Gawe akun kanggo {{SITENAME}}",
        "createaccount-text": "Ana wong sing gawe akun nggo alamat imel-e Rika nang {{SITENAME}} ($4) nganggo jeneng \"$2\", lan tembung sandhi \"$3\".\nRika mendingan mlebu log disit lan ganti tembung sandine sekiye.\n\nRika teyeng nglirwakna pesen kiye anggere akun kiye kuwe jebule anu salah gawe.",
        "login-throttled": "Rika wis kakehan gole njajal mlebu log.\nTulung ngenteni $1 sedurunge njajal maning.",
-       "login-abort-generic": "Proses mlebu log Rika ora gagal - Dibatalna",
+       "login-abort-generic": "Rika gagal mlebu log - Dibatalna",
        "login-migrated-generic": "Akune rika uwis dipindahna, lan jeneng panganggone rika wis ora ana maning nang wiki kiye.",
        "loginlanguagelabel": "Basa: $1",
        "suspicious-userlogout": "Panjalukan Rika nggo metu log ditolak jalarak ketone dikirim nang panjlajah sing rusak utawa proksi panyinggah (''caching proxy'').",
        "newpassword": "Tembung sandi anyar:",
        "retypenew": "Ketik maning tembung sandhi:",
        "resetpass_submit": "Nata tembung sandhi lan mlebu log",
-       "changepassword-success": "Tembung sandhi Rika wis sukses diowahi!",
+       "changepassword-success": "Sandhiné Rika uwis diganti!",
        "changepassword-throttled": "Rika wis kakehan gole njajal mlebu log.\nTulung ngenteni $1 sedurunge njajal maning.",
        "resetpass_forbidden": "Tembung sandhi ora teyeng diganti",
        "resetpass-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
        "resetpass-submit-loggedin": "Ganti tembung sandhi",
        "resetpass-submit-cancel": "Batal",
-       "resetpass-wrong-oldpass": "Tembung sandhi ora sah.\nRika ndeyan  uwis kasil ngganti tembung sandhine Rika utawa wis njaluk tembung sandhi sauntara sing anyar.",
+       "resetpass-wrong-oldpass": "Sandhi siki utawa sementara ora sah.\nRika ndeyan  uwis kasil ngganti tembung sandhiné Rika utawa wis njaluk tembung sandhi sementara sing anyar.",
        "resetpass-recycled": "Monggo diganti tembung sandhine rika nganggo sing sejen sekang tembung sandhi sekiye.",
        "resetpass-temp-emailed": "Rika mlebu long nganggo kode sawetara sing ana nang surel.\nKanggo ngrampungna gole mlebu log, rika kudu ngatur tembung sandhi anyar nang kene:",
        "resetpass-temp-password": "Tembung sandhi sauntara:",
        "changeemail": "Ganti alamat imel",
        "changeemail-header": "Ganti alamat imel-e akun",
        "changeemail-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
-       "changeemail-oldemail": "Alamat imel sekiye:",
+       "changeemail-oldemail": "Alamat imel sekiyé:",
        "changeemail-newemail": "Alamat imel anyar:",
        "changeemail-none": "(ora ana)",
        "changeemail-password": "Tembung sandhi {{SITENAME}} Rika:",
        "changeemail-submit": "Ganti imel",
        "resettokens-no-tokens": "Ora ana token sing arep disetel maning.",
-       "resettokens-token-label": "$1 (biji sekiye:$2)",
+       "resettokens-token-label": "$1 (siki bijiné:$2)",
        "resettokens-done": "Token wis disetel maning.",
        "resettokens-resetbutton": "Nyetel maning token sing dipilih",
        "bold_sample": "Tèks kiye bakal dicithak kandel",
        "sig_tip": "Tapak astane Rika nganggo tandha wektu",
        "hr_tip": "Garis horisontal",
        "summary": "Ringkesan:",
-       "subject": "Subyek/judhul:",
+       "subject": "Subyèk:",
        "minoredit": "Kiye suntingan cilik",
        "watchthis": "Awasi kaca kiyé",
        "savearticle": "Terbitna Kaca",
        "cantcreateaccount-text": "Ngawe akun sekang alamat IP kiye ('''$1''') wis diblokir nang [[User:$3|$3]].\n\nAlesane miturut $3 yakuwe ''$2''",
        "viewpagelogs": "Deleng log-e kaca kiye",
        "nohistory": "Ora ana sajarah panyuntingan kanggo kaca kiye.",
-       "currentrev": "Revisi sekiye",
+       "currentrev": "Revisi sekiyé",
        "currentrev-asof": "Revisi paling anyar nang tanggal $1",
        "revisionasof": "Revisi per $1",
        "revision-info": "Revisi per $1; $2",
        "previousrevision": "Revisi sedurunge",
        "nextrevision": "Revisi lewih anyar",
-       "currentrevisionlink": "Revisi sekiye",
-       "cur": "sekiye",
+       "currentrevisionlink": "Revisi sekiyé",
+       "cur": "siki",
        "next": "Lanjutane",
        "last": "sedurunge",
        "page_first": "kapisan",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Kabèh",
        "searchprofile-advanced": "Lanjutan",
-       "searchprofile-articles-tooltip": "Panggolèkan nang $1",
+       "searchprofile-articles-tooltip": "Nggoléti neng $1",
        "searchprofile-images-tooltip": "Panggolèkan berkas",
        "searchprofile-everything-tooltip": "Goleti kabeh isi (termasuke kaca dhiskusi)",
        "searchprofile-advanced-tooltip": "Goleti nang bilik jeneng biasa",
        "rightslogtext": "Kiye log pangowahan maring hak-hak panganggo.",
        "action-read": "maca kaca kiye",
        "action-edit": "nyunting kaca kiye",
-       "action-createpage": "gawe kaca",
-       "action-createtalk": "nggawé kaca dhiskusi",
+       "action-createpage": "gawé kaca kiyé",
+       "action-createtalk": "gawé kaca dhiskusiné",
        "action-createaccount": "nggawé akun panganggo kiye",
        "action-minoredit": "nandani suntingan minangka suntingan cilik",
        "action-move": "mindahna kaca kiye",
        "filehist-deleteall": "busek kabeh",
        "filehist-deleteone": "busek",
        "filehist-revert": "balekna",
-       "filehist-current": "Sekiye",
+       "filehist-current": "siki",
        "filehist-datetime": "Tanggal/Wektu",
        "filehist-thumb": "Miniatur (''thumbnail'')",
        "filehist-thumbtext": "Miniatur nggo versi dong $1",
        "emailsenttext": "Pesen imele Rika wis dikirim.",
        "emailuserfooter": "Layang kiye dikirimna sekang $1 ming $2 nggunakna fungsi \"Layangpanganggo\" nang {{SITENAME}}.",
        "watchlist": "Daftar pangawasan",
-       "mywatchlist": "Daftar sawangané inyong",
+       "mywatchlist": "Daftar sawangan",
        "watchlistfor2": "Kanggo $1 $2",
        "watch": "Pantau",
        "unwatch": "Batalna pantauan",
        "contributions-title": "Kontribusi panganggo kanggo $1",
        "mycontris": "Kontribusi",
        "contribsub2": "Kanggo $1 ($2)",
-       "uctop": "(sekiye)",
+       "uctop": "(siki)",
        "month": "Sekang sasi (lan sadurungé):",
        "year": "Sekang taun (lan sadurunge):",
        "sp-contributions-newbies": "Tidokna kontribusine panganggo anyar thok",
index 6f3463a..da240ab 100644 (file)
        "title-invalid-too-long": "Бараниот наслов е предолг. Не смее да биде поголем од  $1 {{PLURAL:$1|бајт|бајти}} шифриран според UTF-8.",
        "title-invalid-leading-colon": "Бараниот наслов содржи неважечки две точки на почетокот.",
        "perfcached": "Следните податоци се меѓускладирани и може да не се тековни. Во меѓускладот {{PLURAL:$1|е достапен највеќе еден запис|се достапни највеќе $1 записи}}.",
-       "perfcachedts": "СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е Ð¼ÐµÑ\93Ñ\83Ñ\81кладиÑ\80ани, Ð¿Ð¾Ñ\81леден Ð¿Ð°Ñ\82 Ð¿Ð¾Ð´Ð½Ð¾Ð²ÐµÐ½Ð¸ Ð½Ð° $1. Во меѓускладот {{PLURAL:$4|е достапен највеќе еден запис|се достапни највеќе $4 записи}}.",
+       "perfcachedts": "СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е Ð¼ÐµÑ\93Ñ\83Ñ\81кладиÑ\80ани, Ð¿Ð¾Ñ\81леден Ð¿Ð°Ñ\82 Ð¿Ð¾Ð´Ð½Ð¾Ð²ÐµÐ½Ð¸ Ð²Ð¾ $1. Во меѓускладот {{PLURAL:$4|е достапен највеќе еден запис|се достапни највеќе $4 записи}}.",
        "querypage-no-updates": "Подновите на оваа страница моментално се оневозможени.\nПодатоците овде во моментов нема да се подновуваат.",
        "viewsource": "Преглед",
        "viewsource-title": "Преглед на кодот на $1",
        "anonpreviewwarning": "''Не сте најавени. Ако ја зачувате, Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.''",
        "missingsummary": "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.",
        "selfredirect": "<strong>Предупредување:</strong> Создавате пренасочување кон истата статија.\nМоже да сте укажале грешна целна страница, или пак уредувате погрешна страница.\nАко стиснете на „$1“ повторно, тогаш пренасочувањето бездруго ќе се создаде.",
-       "missingcommenttext": "Ð\92е Ð¼Ð¾Ð»Ð¸Ð¼Ðµ Ð²Ð½ÐµÑ\81еÑ\82е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80 Ð¿Ð¾Ð´Ð¾Ð»Ñ\83.",
+       "missingcommenttext": "Ð\92неÑ\81еÑ\82е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80.",
        "missingcommentheader": "<strong>Потсетување:</strong> Не внесовте наслов за овој коментар.\nАко повторно стиснете на „$1“, уредувањето ќе биде зачувано без наслов.",
        "summary-preview": "Преглед на описот:",
        "subject-preview": "Преглед на насловот:",
        "timezoneregion-indian": "Индиски Океан",
        "timezoneregion-pacific": "Тихи Океан",
        "allowemail": "Дозволи е-пошта од други корисници",
-       "email-blacklist-label": "Ð\97абÑ\80ани Ð¸Ð¼ Ð½Ð° Ñ\81ледниве ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð´Ð° Ð¼Ð¸ Ð¿Ñ\80аÑ\9cааÑ\82 Ðµ-поÑ\88Ñ\82а:",
+       "email-blacklist-label": "Ð\97абÑ\80ани Ðµ-поÑ\88Ñ\82а Ð¾Ð´ Ñ\81ледниве ÐºÐ¾Ñ\80иÑ\81ниÑ\86и:",
        "prefs-searchoptions": "Пребарување",
        "prefs-namespaces": "Именски простори",
        "default": "по основно",
        "recentchanges-legend": "Нагодувања за скорешни промени",
        "recentchanges-summary": "На оваа страница ги следите скорешните промени на викито.",
        "recentchanges-noresult": "Нема промени од дадениот период што одговараат на бараното.",
+       "recentchanges-timeout": "Ова пребарување истече. Пробајте со поинакви параметри.",
+       "recentchanges-network": "Поради техничка грешка, не можев да го вчитам исходот. Превчитајте ја страницата.",
        "recentchanges-feed-description": "Следење на најскорешните промени на викито во овие емитувања.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Ова е ситна промена",
        "recentchanges-submit": "Прикажи",
        "rcfilters-tag-remove": "Отстрани го „$1“",
        "rcfilters-legend-heading": "<strong>Список на кратенки:</strong>",
-       "rcfilters-other-review-tools": "<strong>Други алатки за проверка</strong>",
+       "rcfilters-other-review-tools": "Други алатки за проверка",
        "rcfilters-group-results-by-page": "Групен исход по страница",
        "rcfilters-grouping-title": "Групирање",
        "rcfilters-activefilters": "Активни филтри",
        "rcfilters-days-show-hours": "{{PLURAL:$1|еден час|$1 часа}}",
        "rcfilters-highlighted-filters-list": "Истакнато: $1",
        "rcfilters-quickfilters": "Зачувани филтри",
-       "rcfilters-quickfilters-placeholder-title": "Засега нема зачувани врски",
+       "rcfilters-quickfilters-placeholder-title": "Засега нема зачувани филтри",
        "rcfilters-quickfilters-placeholder-description": "За да ги зачувате вашите филтерски псотавки за да ги употребите другпат, стиснете на иконката за бележник во подрачјето „Активен филтер“ подолу.",
        "rcfilters-savedqueries-defaultlabel": "Зачувани филтри",
        "rcfilters-savedqueries-rename": "Преименувај",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Создај стандарден филтер",
        "rcfilters-savedqueries-cancel-label": "Откажи",
        "rcfilters-savedqueries-add-new-title": "Зачувај тековни филтерски поставки",
+       "rcfilters-savedqueries-already-saved": "Овие филтри се веќе зачувани",
        "rcfilters-restore-default-filters": "Поврати основни филтри",
        "rcfilters-clear-all-filters": "Тргни ги сите филтри",
        "rcfilters-show-new-changes": "Погл. најнови промени",
-       "rcfilters-search-placeholder": "ФилÑ\82Ñ\80иÑ\80аÑ\98 Ñ\81коÑ\80еÑ\88ни Ð¿Ñ\80омени (пÑ\80елиÑ\81Ñ\82аÑ\98Ñ\82е Ð¸Ð»Ð¸ Ð¿Ð¾Ñ\87неÑ\82е Ñ\81о Ð¿Ð¸Ñ\88Ñ\83ваÑ\9aе)",
+       "rcfilters-search-placeholder": "ФилÑ\82Ñ\80иÑ\80аÑ\9aе Ð½Ð° Ð¿Ñ\80омени (Ñ\81о Ð¼ÐµÐ½Ð¸Ñ\82о Ð¸Ð»Ð¸ Ð¿Ñ\80ебаÑ\80аÑ\98Ñ\82е Ð½Ð°Ð·Ð¸Ð² Ð½Ð° Ñ\84илÑ\82еÑ\80)",
        "rcfilters-invalid-filter": "Неважечки филтер",
        "rcfilters-empty-filter": "Нема активни филтри. Прикажани се сите придонеси.",
        "rcfilters-filterlist-title": "Филтри",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
        "rcfilters-exclude-button-off": "Изземи избрано",
        "rcfilters-exclude-button-on": "Изземи избрано",
-       "rcfilters-view-advanced-filters-label": "Напредни филтри",
        "rcfilters-view-tags": "Означени уредувања",
        "rcfilters-view-namespaces-tooltip": "Филтрирај исход по именски постор",
        "rcfilters-view-tags-tooltip": "Филтрирај исход по уредувачки ознаки",
        "uploaded-script-svg": "Пронајдов скриптен елемент „$1“ во подигнатата SVG-податотека.",
        "uploaded-hostile-svg": "Пронајдов небезбеден CSS во стилскиот елемент на подигнатата SVG-податотека.",
        "uploaded-event-handler-on-svg": "Задавањето на атрибути <code>$1=\"$2\"</code> за работа со настани не е дозволено за SVG-податотеки.",
-       "uploaded-href-attribute-svg": "На href-атрибутите во SVG-податотеки им е дозволено да водат само до цели со претставки http:// или https://, кои се наоѓаат на <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> елементите може да водат (href) само до data: (вметната податотека), http:// или https://, или пак одредишта кои се fragment (#, ист документ). За останатите елементи како <image>, се допуштаат само data: и fragment. Вметнете слики кога извезувате SVG. Најдено е <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Пронајдов href кон небезбедни податоци: URI-цел <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "uploaded-animate-svg": "Пронајдов ознака „animate“ што може да го менува href, користејќи го атрибутот „from“ <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "uploaded-setting-event-handler-svg": "Задавањето на атрибути за работа со настани е спречено. Пронајдов <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "uploadstash-refresh": "Превчитај го списокот на податотеки",
        "uploadstash-thumbnail": "погл. минијатура",
        "uploadstash-exception": "Не можев да го складирам подигнатото во складиштето ($1): „$2“.",
+       "uploadstash-bad-path": "Патеката не постои.",
+       "uploadstash-bad-path-invalid": "Патеката е неважечка.",
+       "uploadstash-bad-path-unknown-type": "Непознат вид „$1“.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Непрепознаено име на минијатурата.",
+       "uploadstash-bad-path-no-handler": "Не најдов ракувач за MIME-типот $1 на податотеката $2.",
+       "uploadstash-bad-path-bad-format": "Клучот „$1“ не е соодветен формат.",
+       "uploadstash-file-not-found": "Клучот „$1“ не е пронајден во складот.",
+       "uploadstash-file-not-found-no-thumb": "Не можев да ја добијам минијатурата.",
+       "uploadstash-file-not-found-no-local-path": "Нема месна патека за размеруван елемент.",
+       "uploadstash-file-not-found-no-object": "Не можам да создадам месен податотечен објект за минијатурата.",
+       "uploadstash-file-not-found-no-remote-thumb": "Не успеа добивањето на минијатурата: $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "Недостасува заглавието за содржински тип.",
+       "uploadstash-file-not-found-not-exists": "Не можав да ја најдам патеката или простата податотека.",
+       "uploadstash-file-too-large": "Не можам да послужам податотека поголема од $1 бајти.",
+       "uploadstash-not-logged-in": "Нема најавен корисник. Податотеките мора да припаѓаат на корисници.",
+       "uploadstash-wrong-owner": "Оваа податотека ($1) не му припаѓа на тековниот корисник.",
+       "uploadstash-no-such-key": "Нема таков клуч ($1). Не можам да отстранам.",
+       "uploadstash-no-extension": "Наставката е празна.",
+       "uploadstash-zero-length": "Податотеката има нулта должина.",
        "invalid-chunk-offset": "Неважечка појдовна точка",
        "img-auth-accessdenied": "Оневозможен пристап",
        "img-auth-nopathinfo": "Недостасува PATH_INFO.\nВашиот опслужувач не е нагоден за да ја предаде оваа информација.\nМожеби се заснова на CGI, и така не подржува img_auth.\nПогл. https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 1bf8407..236f8f3 100644 (file)
        "timezoneregion-indian": "ഇന്ത്യൻ മഹാസമുദ്രം",
        "timezoneregion-pacific": "ശാന്തസമുദ്രം",
        "allowemail": "എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക",
+       "email-blacklist-label": "ഈ ഉപയോക്താക്കൾ എനിക്ക് ഇമെയിൽ അയയ്ക്കുന്നത് തടയുക:",
        "prefs-searchoptions": "തിരച്ചിൽ",
        "prefs-namespaces": "നാമമേഖലകൾ",
        "default": "സ്വതേ",
        "recentchanges-legend-heading": "<strong>സൂചന:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)",
        "recentchanges-submit": "പ്രദർശിപ്പിക്കുക",
+       "rcfilters-tag-remove": "'$1' നീക്കംചെയ്യുക",
        "rcfilters-legend-heading": "<strong>ചുരുക്കെഴുത്തുകളുടെ പട്ടിക:</strong>",
-       "rcfilters-other-review-tools": "<strong>മറ്റ് സംശോധന ഉപകരണങ്ങൾ</strong>",
+       "rcfilters-other-review-tools": "മറ്റ് സംശോധന ഉപകരണങ്ങൾ",
        "rcfilters-group-results-by-page": "ഫലങ്ങൾ താളനുസരിച്ച് ഗണങ്ങളാക്കുക",
        "rcfilters-grouping-title": "ഗണങ്ങളാക്കൽ",
-       "rcfilters-activefilters": "à´¸à´\95àµ\8dà´°à´¿à´¯ അരിപ്പകൾ",
+       "rcfilters-activefilters": "à´¸à´\9càµ\80à´µ അരിപ്പകൾ",
        "rcfilters-advancedfilters": "വിപുല അരിപ്പകൾ",
        "rcfilters-limit-title": "പ്രദർശിപ്പിക്കേണ്ട മാറ്റങ്ങൾ",
        "rcfilters-limit-shownum": "അവസാന {{PLURAL:$1|മാറ്റം|$1 മാറ്റങ്ങൾ}} പ്രദർശിപ്പിക്കുക",
        "rcfilters-days-title": "സമീപദിവസങ്ങൾ",
-       "rcfilters-hours-title": "സമീപ മണിക്കൂറുകൾ",
+       "rcfilters-hours-title": "സമീപമണിക്കൂറുകൾ",
        "rcfilters-days-show-days": "{{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}",
        "rcfilters-days-show-hours": "{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}",
        "rcfilters-highlighted-filters-list": "പ്രമുഖമാക്കിയവ: $1",
-       "rcfilters-quickfilters": "à´¸àµ\82à´\95àµ\8dà´·à´¿à´\9aàµ\8dà´\9aിട്ടുള്ള അരിപ്പകൾ",
-       "rcfilters-quickfilters-placeholder-title": "à´\95à´£àµ\8dണിà´\95à´³àµ\8aà´¨àµ\8dà´¨àµ\81à´\82 à´¸àµ\82à´\95àµ\8dà´·à´¿à´\9aàµ\8dà´\9aàµ\8d à´µàµ\86à´\9aàµ\8dà´\9aിട്ടില്ല",
-       "rcfilters-quickfilters-placeholder-description": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\85à´°à´¿à´ªàµ\8dà´ªà´\95à´³àµ\81à´\9fàµ\86 à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´£à´\82 à´¸àµ\82à´\95àµ\8dà´·à´¿à´\9aàµ\8dà´\9aàµ\8d à´µàµ\86à´\9aàµ\8dà´\9aàµ\8d à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\81പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95ാനായി, à´¤à´¾à´´àµ\86à´¯àµ\81à´³àµ\8dà´³ à´¸à´\95àµ\8dà´°à´¿à´¯ അരിപ്പകളുടെ ഭാഗത്തെ ബുക്ക്‌മാർക്ക് ഐകോണിൽ അമർത്തുക.",
-       "rcfilters-savedqueries-defaultlabel": "à´¸àµ\82à´\95àµ\8dà´·à´¿à´\9aàµ\8dà´\9aിട്ടുള്ള അരിപ്പകൾ",
+       "rcfilters-quickfilters": "à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ിട്ടുള്ള അരിപ്പകൾ",
+       "rcfilters-quickfilters-placeholder-title": "à´\95à´£àµ\8dണിà´\95à´³àµ\8aà´¨àµ\8dà´¨àµ\81à´\82 à´\87à´¤àµ\81വരàµ\86 à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ിട്ടില്ല",
+       "rcfilters-quickfilters-placeholder-description": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\85à´°à´¿à´ªàµ\8dà´ªà´\95à´³àµ\81à´\9fàµ\86 à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´£à´\82 à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¤àµ\8d à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\81പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95ാനായി, à´¤à´¾à´´àµ\86à´¯àµ\81à´³àµ\8dà´³ à´¸à´\9càµ\80à´µ അരിപ്പകളുടെ ഭാഗത്തെ ബുക്ക്‌മാർക്ക് ഐകോണിൽ അമർത്തുക.",
+       "rcfilters-savedqueries-defaultlabel": "à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ിട്ടുള്ള അരിപ്പകൾ",
        "rcfilters-savedqueries-rename": "പേരുമാറ്റുക",
        "rcfilters-savedqueries-setdefault": "സ്വതേയുള്ളതാക്കുക",
        "rcfilters-savedqueries-unsetdefault": "സ്വതേയുള്ളതെന്നത് ഒഴിവാക്കുക",
        "rcfilters-savedqueries-apply-label": "അരിപ്പ സൃഷ്ടിക്കുക",
        "rcfilters-savedqueries-apply-and-setdefault-label": "സ്വതേയുള്ള അരിപ്പ സൃഷ്ടിക്കുക",
        "rcfilters-savedqueries-cancel-label": "റദ്ദാക്കുക",
-       "rcfilters-savedqueries-add-new-title": "നിലവിലàµ\81à´³àµ\8dà´³ à´\85à´°à´¿à´ªàµ\8dà´ª à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´£à´\82 à´¸àµ\82à´\95àµ\8dà´·à´¿à´\9aàµ\8dà´\9aàµ\8d à´µàµ\86à´¯àµ\8dà´\95àµ\8dà´\95ുക",
+       "rcfilters-savedqueries-add-new-title": "നിലവിലàµ\81à´³àµ\8dà´³ à´\85à´°à´¿à´ªàµ\8dà´ª à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´£à´\82 à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¯ുക",
        "rcfilters-restore-default-filters": "സ്വതേയുള്ള അരിപ്പകൾ പുനഃസ്ഥാപിക്കുക",
        "rcfilters-clear-all-filters": "എല്ലാ അരിപ്പകളും ഒഴിവാക്കുക",
        "rcfilters-show-new-changes": "ഏറ്റവും പുതിയ മാറ്റങ്ങൾ കാണുക",
        "rcfilters-search-placeholder": "സമീപകാലമാറ്റങ്ങൾ അരിച്ചെടുക്കുക (ബ്രൗസ് ചെയ്യുക അല്ലെങ്കിൽ ടൈപ്പ് ചെയ്ത് തുടങ്ങുക)",
        "rcfilters-invalid-filter": "അസാധുവായ അരിപ്പ",
-       "rcfilters-empty-filter": "à´¸à´\95àµ\8dà´°à´¿à´¯à´\99àµ\8dà´\99ളായ അരിപ്പകൾ ഇല്ല. എല്ലാ സംഭാവനകളും പ്രദർശിപ്പിക്കുന്നു.",
+       "rcfilters-empty-filter": "à´¸à´\9càµ\80à´µ അരിപ്പകൾ ഇല്ല. എല്ലാ സംഭാവനകളും പ്രദർശിപ്പിക്കുന്നു.",
        "rcfilters-filterlist-title": "അരിപ്പകൾ",
        "rcfilters-filterlist-whatsthis": "ഇതെങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്?",
        "rcfilters-filterlist-feedbacklink": "ഈ (പുതിയ) അരിച്ചെടുക്കൽ ഉപകരണങ്ങൾ എങ്ങനെയുണ്ടെന്ന് ഞങ്ങളോട് പറയുക",
        "rcfilters-highlightmenu-help": "ഈ ഇനം പ്രമുഖമാക്കി കാട്ടാൻ ഒരു നിറം തിരഞ്ഞെടുക്കുക",
        "rcfilters-filterlist-noresults": "അരിപ്പകളൊന്നും കണ്ടെത്താനായില്ല",
        "rcfilters-noresults-conflict": "തിരച്ചിൽ മാനദണ്ഡങ്ങൾ സമരസപ്പെടാത്തതിനാൽ ഫലങ്ങൾ ഒന്നും കണ്ടെത്താനായില്ല",
+       "rcfilters-state-message-subset": "ഇനി കൊടുത്തിരിക്കുന്ന വിശാല {{PLURAL:$2|അരിപ്പയിൽ|അരിപ്പകളിൽ}} ഫലങ്ങൾ ഉൾപ്പെട്ടിട്ടുള്ളതിനാൽ, ഈ അരിപ്പ യാതൊരു പ്രഭാവവും ഉണ്ടാക്കുന്നതല്ല (തിരിച്ചറിയാനായി ഇത് പ്രമുഖമാക്കി കാണിക്കുക):$1",
+       "rcfilters-state-message-fullcoverage": "ഈ ഗണത്തിലെ എല്ലാ അരിപ്പകളും തിരഞ്ഞെടുക്കുന്നത്, ഒരു അരിപ്പയും തിരഞ്ഞെടുക്കാത്തതിന് തുല്യമാണ്, അതിനാൽ ഈ അരിപ്പ യാതൊരു പ്രഭാവവും ഉണ്ടാക്കുന്നതല്ല. ഗണത്തിൽ ഉൾപ്പെടുന്നവ: $1",
        "rcfilters-filtergroup-authorship": "ലേഖകരുടെ സംഭാവനകൾ",
        "rcfilters-filter-editsbyself-label": "താങ്കൾ ചെയ്ത മാറ്റങ്ങൾ",
        "rcfilters-filter-editsbyself-description": "താങ്കളുടെ സ്വന്തം സംഭാവനകൾ.",
        "rcfilters-filter-newpages-label": "താൾ സൃഷ്ടിക്കലുകൾ",
        "rcfilters-filter-newpages-description": "പുതിയ താളുകൾ ഉണ്ടാക്കിയ മാറ്റങ്ങൾ",
        "rcfilters-filter-categorization-label": "വർഗ്ഗത്തിലെ മാറ്റങ്ങൾ",
+       "rcfilters-filter-categorization-description": "വർഗ്ഗത്തിൽ ചേർത്തതും ഒഴിവാക്കിയതുമായ താളുകളുടെ വിവരങ്ങൾ.",
+       "rcfilters-filter-logactions-label": "രേഖപ്പെടുത്തിയ പ്രവൃത്തികൾ",
+       "rcfilters-filter-logactions-description": "കാര്യനിർവാഹക പ്രവർത്തനങ്ങൾ, അംഗത്വസൃഷ്ടികൾ, താൾ മായ്ക്കലുകൾ, അപ്‌ലോഡുകൾ...",
+       "rcfilters-filtergroup-lastRevision": "ഏറ്റവും പുതിയ നാൾപ്പതിപ്പുകൾ",
+       "rcfilters-filter-lastrevision-label": "ഏറ്റവും പുതിയ നാൾപ്പതിപ്പ്",
+       "rcfilters-filter-lastrevision-description": "താളിലെ ഏറ്റവും പുതിയ മാറ്റം മാത്രം.",
+       "rcfilters-filter-previousrevision-label": "ഒടുവിലത്തെ നാൾപ്പതിപ്പ് അല്ലാത്തവ",
+       "rcfilters-filter-previousrevision-description": "\"ഒടുവിലത്തെ നാൾപ്പതിപ്പ്\" അല്ലാത്ത എല്ലാ മാറ്റങ്ങളും.",
+       "rcfilters-filter-excluded": "ഒഴിച്ചുള്ളവ",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:ഇവയല്ലാത്തവ -</strong> $1",
+       "rcfilters-exclude-button-off": "തിരഞ്ഞെടുത്തവ ഒഴിച്ചുനിർത്തുക",
+       "rcfilters-exclude-button-on": "തിരഞ്ഞെടുത്തവ ഒഴിവാക്കുക",
+       "rcfilters-view-tags": "ടാഗ് ചെയ്തിട്ടുള്ള തിരുത്തുകൾ",
+       "rcfilters-view-namespaces-tooltip": "നാമമേഖല അനുസരിച്ച് ഫലങ്ങൾ അരിച്ചെടുക്കുക",
+       "rcfilters-liveupdates-button": "നിലവിലുള്ള പുതുക്കലുകൾ",
        "rcnotefrom": "<strong>$3, $4</strong> മുതലുള്ള {{PLURAL:$5|മാറ്റം|മാറ്റങ്ങൾ}} ആണ് താഴെയുള്ളത്  (<strong>$1</strong> എണ്ണം വരെ കൊടുക്കുന്നതാണ്).",
+       "rclistfromreset": "തീയതി എടുത്തത് പുനഃസജ്ജീകരിക്കുക",
        "rclistfrom": "$3 $2 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "rcshowhideminor": "ചെറുതിരുത്തലുകൾ $1",
        "rcshowhideminor-show": "പ്രദർശിപ്പിക്കുക",
        "uploadstash-badtoken": "പ്രവൃത്തി വിജയകരമായിരുന്നില്ല, താങ്കളുടെ തിരുത്തുവാനുള്ള അവകാശങ്ങൾ ചിലപ്പോൾ കാലഹരണപ്പെട്ടിട്ടുണ്ടാകാം. വീണ്ടും ശ്രമിക്കുക.",
        "uploadstash-errclear": "പ്രമാണങ്ങൾ ശൂന്യമാക്കൽ വിജയകരമായിരുന്നില്ല.",
        "uploadstash-refresh": "പ്രമാണങ്ങളുടെ പട്ടിക പുതുക്കുക",
+       "uploadstash-thumbnail": "ലഘുചിത്രം കാണുക",
        "img-auth-accessdenied": "പ്രവേശനമില്ല",
        "img-auth-nopathinfo": "PATH_INFO ലഭ്യമല്ല.\nതാങ്കളുടെ സെർവർ ഈ വിവരം കൈമാറ്റം ചെയ്യാൻ തയ്യാറാക്കിയിട്ടില്ല.\nഅത് img_auth പിന്തുണയില്ലാത്ത സി.ജി.ഐ. അധിഷ്ഠിതമായ ഒന്നായിരിക്കാം.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization കാണുക.",
        "img-auth-notindir": "ആവശ്യപ്പെട്ട പാത അപ്‌‌ലോഡ് ഡയറക്റ്ററിയിൽ സജ്ജീകരിച്ചു നൽകിയിട്ടില്ല.",
        "sp-contributions-username": "ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:",
        "sp-contributions-toponly": "ഒടുവിലത്തെ നാൾപ്പതിപ്പുകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
        "sp-contributions-newonly": "താളുകൾ സൃഷ്ടിച്ച തിരുത്തുകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
+       "sp-contributions-hideminor": "ചെറുതിരുത്തുകൾ മറയ്ക്കുക",
        "sp-contributions-submit": "തിരയൂ",
        "whatlinkshere": "ഈ താളിലേക്കുള്ള കണ്ണികൾ",
        "whatlinkshere-title": "\"$1\" എന്ന താളിലേക്കുള്ള കണ്ണികൾ",
        "mw-widgets-dateinput-no-date": "തീയതി ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല",
        "mw-widgets-titleinput-description-new-page": "താൾ ഇപ്പോൾ നിലവിലില്ല",
        "mw-widgets-titleinput-description-redirect": "$1 എന്ന താളിലേക്കുള്ള തിരിച്ചുവിടൽ",
+       "mw-widgets-usersmultiselect-placeholder": "കൂടുതൽ ചേർക്കുക...",
+       "date-range-from": "ഈ തീയതി മുതൽ:",
+       "date-range-to": "ഈ തീയതി വരെ:",
        "sessionmanager-tie": "വ്യത്യസ്ത തരത്തിലുള്ള അനുമതി നൽകൽ തരങ്ങൾ സംയോജിപ്പിക്കാനാവില്ല: $1.",
        "sessionprovider-generic": "$1 സെഷനുകൾ",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "കൂക്കി-അധിഷ്ഠിത സെഷനുകൾ",
index 1d0f148..8cd54d1 100644 (file)
        "pool-errorunknown": "अपरिचित त्रुटी",
        "pool-servererror": "पूल काउंटर सेवा उपलब्ध नाही($1).",
        "poolcounter-usage-error": "वापर त्रुटी:$1",
-       "aboutsite": "{{SITENAME}} बद्दल",
+       "aboutsite": "{{SITENAME}}बद्दल",
        "aboutpage": "Project:माहितीपृष्ठ",
        "copyright": "येथील मजकूर $1च्या अंतर्गत उपलब्ध आहे जोपर्यंत इतर नोंदी केलेल्या नाहीत.",
        "copyrightpage": "{{ns:project}}:प्रताधिकार",
        "showdiff": "बदल दाखवा",
        "blankarticle": "<strong>ईशारा:</strong>आपण तयार करीत असलेले पान कोरे आहे.जर आपण पुन्हा \"$1\" टिचकले तर,कोणताही आशय/मजकूर नसलेले पान तयार होईल.",
        "anoneditwarning": "<strong>इशारा:</strong> तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेले नाही.आपण काही संपादन केले तर, तुमचा अंकपत्ता (आयपी) सार्वजनिक रित्या दृष्य होईल. जर आपण <strong>[$1 सनोंद प्रवेश केला]</strong> किंवा <strong>[$2 खाते उघडले]</strong>,तर आपण केलेली संपादने ही आपल्या नांवाशी संलग्न होतील, त्याशिवाय याचे इतरही फायदे आहेत.",
-       "anonpreviewwarning": "\"'''सावधान:''' à¤¤à¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपà¥\80डियाà¤\9aà¥\87 à¤¸à¤¦à¤¸à¥\8dय à¤®à¥\8dहणà¥\82न à¤¸à¤¨à¥\8bà¤\82द-पà¥\8dरवà¥\87श (लà¥\89à¤\97-à¤\87न) à¤\95à¥\87लà¥\87ला à¤¨à¤¾à¤¹à¥\80. à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\8dया à¤¸à¤\82पादन à¤\87तिहासात à¤¤à¥\81मà¤\9aा à¤\85à¤\82à¤\95पतà¥\8dता (à¤\86य.पà¥\80. à¥²ड्रेस) नोंदला जाईल.\"",
+       "anonpreviewwarning": "\"'''सावधान:''' à¤¤à¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपà¥\80डियाà¤\9aà¥\87 à¤¸à¤¦à¤¸à¥\8dय à¤®à¥\8dहणà¥\82न à¤¸à¤¨à¥\8bà¤\82द-पà¥\8dरवà¥\87श (लà¥\89à¤\97-à¤\87न) à¤\95à¥\87लà¥\87ला à¤¨à¤¾à¤¹à¥\80. à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\8dया à¤¸à¤\82पादन à¤\87तिहासात à¤¤à¥\81मà¤\9aा à¤\85à¤\82à¤\95पतà¥\8dता (à¤\86य.पà¥\80. à¤\85à¥\85ड्रेस) नोंदला जाईल.\"",
        "missingsummary": "'''आठवण:''' आपण संपादन सारांश पुरवलेला नाही.आपण 'जतन करा' वर पुन्हा टिचकी मारली तर, ते त्याशिवायच जतन होईल.",
        "selfredirect": "<strong>ईशारा:</strong>आपण या पानास, त्याच पानावर पुनर्निर्देशित करीता आहात.\nआपण पुनर्निर्देशनासाठी चूकिचे लक्ष्य नमूद केले आहे किंवा आपण चूकिच्या पानाचे संपादन करीत आहात.\nजर आपण पुन्हा \"$1\" टिचकले तर, कसेहीकरुन ते पुनर्निर्देशन तयार होईल.",
        "missingcommenttext": "कृपया खाली प्रतिक्रिया भरा.",
        "action-rollback": "या आधीच्या सदस्याने नुकतेच संपादन केलेले एखादे विशिष्ट पानाचे बदल लवकर पूर्वस्थितीत न्या",
        "action-import": "दुसऱ्या विकीवरुन पाने आयात करा",
        "action-importupload": "अपभारीत संचिकेतून पाने आयात करा",
-       "action-patrol": "à¤\87तराà¤\82à¤\9aà¥\80 संपादनांवर 'पहारा दिला' म्हणून खूण करा",
+       "action-patrol": "à¤\87तराà¤\82à¤\9aà¥\8dया संपादनांवर 'पहारा दिला' म्हणून खूण करा",
        "action-autopatrol": "आपल्या संपादनांवर पहारा दिल्याची खूण करा",
        "action-unwatchedpages": "पहारा न दिलेल्या पानांची यादी पहा",
        "action-mergehistory": "पानाचा इतिहास विलीन करा",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "recentchanges-submit": "दाखवा",
        "rcfilters-legend-heading": "<strong>लघुरूपांची यादी:</strong>",
-       "rcfilters-other-review-tools": "<strong>पुनरावलोकनाची इतर साधने</strong>",
+       "rcfilters-other-review-tools": "पुनरावलोकनाची इतर साधने",
        "rcfilters-group-results-by-page": "पानानुसार गट निकाल",
        "rcfilters-grouping-title": "गट करणे",
        "rcfilters-activefilters": "सक्रिय गाळण्या",
        "rcfilters-filter-previousrevision-label": "अद्यतनीत आवृत्ती नाही",
        "rcfilters-filter-previousrevision-description": "\"अद्यतनीत आवृत्ती\" नसलेले सर्व बदल",
        "rcfilters-exclude-button-off": "निवडलेले वगळा",
-       "rcfilters-view-advanced-filters-label": "प्रगत गाळण्या",
        "rcfilters-view-tags": "खूण केलेली संपादने",
        "rcfilters-view-namespaces-tooltip": "नामविश्वांनुसार गाळण्यांचे निकाल",
        "rcfilters-view-tags-tooltip": "संपादन खूण वापरुन गाळण्यांचे निकाल",
        "apisandbox-results": "निकाल",
        "apisandbox-request-url-label": "'यूआरएल'ची विनंती करा:",
        "apisandbox-request-time": "विनंती वेळ:{{PLURAL:$1|$1 मिलीसेकंद}}",
+       "apisandbox-multivalue-all-namespaces": "$1 (सर्व नामविश्वे)",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत शोधा",
        "booksources-search": "शोधा",
        "unblocked-range": "$1 याच्यावरील प्रतिबंधन काढले आहे",
        "unblocked-id": "प्रतिबंध $1 काढले",
        "blocklist": "प्रतिबंधित केलेले सदस्य",
+       "autoblocklist": "स्वयंचलितरोध",
+       "autoblocklist-legend": "स्वयंचलितरोध यादी",
+       "autoblocklist-localblocks": "स्थानिक {{PLURAL:$1|स्वयंचलितरोध}}",
+       "autoblocklist-total-autoblocks": "स्वयंचलित रोधांची एकूण संख्या:$1",
+       "autoblocklist-otherblocks": "इतर {{PLURAL:$1|स्वयंचलितरोध}}",
        "ipblocklist": "प्रतिबंधित केलेले सदस्य",
        "ipblocklist-legend": "प्रतिबंधीत सदस्य शोधा",
        "blocklist-userblocks": "खाते प्रतिबंधन लपवा",
        "cant-move-to-user-page": "तुम्हाला एखाद्या पानास सदस्य पानांवर (सदस्य उप-पाने सोडून) घेऊन जाण्यास परवानगी नाही.",
        "cant-move-category-page": "आपणास वर्गपाने स्थानांतराची परवानगी नाही.",
        "cant-move-to-category-page": "आपणास एखादे पान वर्गपानात स्थानांतरणाची परवानगी नाही.",
+       "namespace-nosubpages": "नामविश्व \"$1\" हे उपपानांस परवानगी देत नाही.",
        "newtitle": "नवीन शीर्षक:",
        "move-watch": "स्रोत पान व लक्ष  पानांवर निगराणी ठेवा",
        "movepagebtn": "स्थानांतरण करा",
        "timezone-local": "स्थानिक",
        "duplicate-defaultsort": "'''ताकिद:''' डिफॉल्ट सॉर्ट की \"$2\" ओवर्राइड्स अर्लीयर डिफॉल्ट सॉर्ट की \"$1\".",
        "version": "आवृत्ती",
-       "version-extensions": "सà¥\8dथापित à¤µà¤¿à¤¸à¥\8dतार",
-       "version-skins": "à¤\87à¤\82सà¥\8dà¤\9fà¥\89ल à¤\95à¥\87लà¥\8dया à¤\97à¥\87लà¥\87लà¥\8dया à¤¤à¥\8dवà¤\9aा",
+       "version-extensions": "यà¥\87थà¥\87 à¤¸à¥\8dथापलà¥\87लà¥\80 à¤µà¤¿à¤¸à¥\8dतारà¤\95à¥\87",
+       "version-skins": "सà¥\8dथापित à¤¤à¥\8dवà¤\9aा (à¤\87à¤\82सà¥\8dà¤\9fà¥\89लà¥\8dड à¤¸à¥\8dà¤\95िनà¥\8dस)",
        "version-specialpages": "विशेष पाने",
-       "version-parserhooks": "पृथकक अंकुश",
+       "version-parserhooks": "पृथकक अंकुश (पार्सर हूक्स)",
        "version-variables": "चल",
        "version-antispam": "उत्पात प्रतिबंधन",
+       "version-api": "एपीआय (API)",
        "version-other": "इतर",
        "version-mediahandlers": "मिडिया हँडलर",
        "version-hooks": "अंकुश",
-       "version-parser-extensiontags": "पृथकक विस्तारीत खूणा",
-       "version-parser-function-hooks": "पृथकक कार्य अंकुश",
+       "version-parser-extensiontags": "पृथकक विस्तारीत खूणा (पार्सर एक्स्टेंशन टॅग्ज)",
+       "version-parser-function-hooks": "पृथकक कार्य अंकुश (पार्सर फंक्शन हूक्स)",
        "version-hook-name": "अंकुश नाव",
        "version-hook-subscribedby": "वर्गणीदार",
        "version-version": "($1)",
        "version-poweredby-translators": "ट्रांसलेटविकि.नेट वरील भाषांतरकार",
        "version-credits-summary": "आम्ही खालील व्यक्तींना, [[Special:Version|मिडियाविकि]]वर त्यांनी दिलेल्या योगदानामुळे, मान्यता देऊ ईच्छितो.",
        "version-license-info": "मिडियाविकि हे  मुक्त संगणक प्रणाली विकि पॅकेज आहे.Free Software Foundation प्रकाशित  GNU General Public परवान्याच्या अटीस अनुसरून तुम्ही त्यात बदल आणि/अथवा त्याचे  पुर्नवितरण  करू शकता.\n\nमिडियाविकि  संगणक प्रणाली उपयुक्त ठरेल या आशेने वितरित केली जात असली तरी;कोणत्याही वितरणास अथवा विशिष्ट उद्देशाकरिता योग्यतेची अगदी कोणतीही अप्रत्यक्ष अथवा उपलक्षित   अथवा  निहित अशा अथवा कोणत्याही प्रकारच्या केवळ  कोणत्याही प्राश्वासनाशिवायच (WITHOUT ANY WARRANTY) उपलब्ध आहे.अधिक माहिती करिता   GNU General Public License पहावे.\n\nतुम्हाला या प्रणाली सोबत [{{SERVER}}{{SCRIPTPATH}}/COPYING  GNU General Public License परवान्याची प्रत] मिळालेली असावयास हवी, तसे नसेल तर,[//www.gnu.org/licenses/old-licenses/gpl-2.0.html  येथे ऑनलाईन वाचा] किंवा the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ला लिहा.",
-       "version-software": "स्थापित संगणक प्रणाली (Installed software)",
+       "version-software": "स्थापित संगणक प्रणाली (इंस्टॉल्ड सॉफ्टवेअर)",
        "version-software-product": "उत्पादन",
        "version-software-version": "आवृत्ती",
-       "version-entrypoints": "à¤\86त à¤¯à¥\87णारà¥\80 à¤¯à¥\82॰à¤\86र॰à¤\8fल",
+       "version-entrypoints": "पà¥\8dरवà¥\87श-बिà¤\82दà¥\82 à¤¯à¥\82.à¤\86र.à¤\8fल.",
        "version-entrypoints-header-entrypoint": "आत येण्याचा मार्ग",
        "version-entrypoints-header-url": "यू॰आर॰एल",
        "version-libraries-library": "ग्रंथालय",
        "compare-invalid-title": "तुम्ही नमूद केलेले शीर्षक अग्राह्य आहे.",
        "compare-title-not-exists": "या नावाने काहीही अस्तित्वात नाही.",
        "compare-revision-not-exists": "आपण नमूद करत असलेली आवृत्ती अस्तित्वात नाही.",
+       "diff-form": "फरक",
+       "diff-form-oldid": "जुन्या आवृत्तीची ओळखण (ऐच्छिक)",
+       "diff-form-revid": "फरकाची आवृत्ती ओळखण",
+       "diff-form-submit": "फरक दाखवा",
+       "permanentlink": "कायम दुवा",
        "dberr-problems": "माफ करा, हे संकेतस्थळ सध्या तांत्रिक अडचणींना सामोरे जात आहे.",
        "dberr-again": "थोडा वेळ थांबून पुन्हा पहा.",
        "dberr-info": "(विदादातापर्यंत पोहोचण्यास असमर्थ: $1)",
index ece02ae..4a3ecee 100644 (file)
@@ -24,8 +24,8 @@
        "tog-editsectiononrightclick": "Posseblitar l'eidiçon de cachos por clique cul boton dreito ne l títalo de la seçon",
        "tog-watchcreations": "Ajuntar las páiginas que you criar a las mies páiginas begiadas",
        "tog-watchdefault": "Ajuntar las páiginas que you eiditar a las mies páiginas begiadas",
-       "tog-watchmoves": "Ajuntar las páiginas que you mober a las mies páiginas begiadas",
-       "tog-watchdeletion": "Ajuntar las páiginas que you eileminar a las mies páiginas begiadas",
+       "tog-watchmoves": "Ajuntar las páiginas que you arrastrar a las mies páiginas begiadas",
+       "tog-watchdeletion": "Ajuntar las páiginas que you botar fuora a las mies páiginas begiadas",
        "tog-minordefault": "Por oumisson, marcar todas las eidiçones cumo menores",
        "tog-previewontop": "Amostrar l'antebison antes de la caixa d'eidiçon",
        "tog-previewonfirst": "Amostrar l'antebison na purmeira eidiçon",
        "badaccess": "Erro de premisson",
        "versionrequired": "Ye percisa la beson $1 de l MediaWiki",
        "ok": "OK",
+       "pagetitle": "$1 - {{SITENAME}}",
        "retrievedfrom": "Sacado an \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Tu tenes}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Ten}} $1 de {{PLURAL:$3|outro outelizador|$3 outelizadores}} ($2).",
        "minoredit": "Marcar cumo eidiçon pequerrixa",
        "watchthis": "Begiar esta páigina",
        "savearticle": "Grabar páigina",
+       "publishpage": "Publicar páigina",
        "publishchanges": "Publicar altaraçones",
        "preview": "Ber cumo queda",
        "showpreview": "Ber cumo queda",
        "yourtext": "L tou testo",
        "storedversion": "berson guardada",
        "yourdiff": "Defréncias",
-       "copyrightwarning": "Por fabor, bei que todas las tues cuntribuiçones an {{SITENAME}} son cunsideradas cumo feitas ne ls termos de la lhicença $2 (bei $1 pa detailhes).\nSe nun quieres que l tou testo seia eiditado sin piedade i reçtribuído cunsante la gana, nun l ambies.<br />\nTu stás, al mesmo tiempo, a garantir-mos qu'esto ye algo screbido por ti, ó algo copiado d'ua fuonte de testos an domínio público ó parecido de teor lhibre.\n<strong>Nun ambies trabalho portegido por dreitos d'outor sien l debido permisso!</strong>",
+       "copyrightwarning": "Por fabor, bei que todas las tues cuntrebuiçones an {{SITENAME}} son cunsideradas cumo feitas ne ls termos de la licença $2 (bei $1 pa detailhes).\nSe nun quieres que l tou testo seia eiditado sin piedade i reçtribuído cunsante la gana, nun l ambies.<br />\nTu stás, al mesmo tiempo, a garantir-mos que esto ye algo screbido por ti, ó algo copiado dua fuonte de testos an domínio público ó parecido de teor lhibre.\n<strong>Nun ambies trabalho portegido por dreitos de outor sien l debido permisson!</strong>",
        "templatesused": "{{PLURAL:$1|Modelo ousado|Modelos ousados}} nesta páigina:",
        "templatesusedpreview": "{{PLURAL:$1|Modelo outelizado|Modelos outelizados}} neste amostra:",
        "template-protected": "(portegida)",
        "template-semiprotected": "(semi-protegida)",
        "hiddencategories": "Esta páigina faç parte {{PLURAL:$1|dua catadorie scundida|$1 duas catadories scundidas}}:",
+       "edittools": "<!-- L testo quelocado eiqui será amostrado ambaixo de ls formulairos de eidiçon i de ambio de fexeiros. -->",
        "nocreatetext": "{{SITENAME}} restringe la possibilidade de criar nuobas páiginas.\nPuode buoltar atrás i eiditar ua páigina yá eisistente, ó [[Special:UserLogin|outenticar-se ó criar ua cuonta]].",
        "permissionserrors": "Erro de permisson",
        "permissionserrorstext-withaction": "Tu nun tenes premisson pa $2, {{PLURAL:$1|pula seguinte rezon|pulas seguintes rezones}}:",
        "recentchangeslinked-to": "Amostrar antes altaraçones a páiginas que téngan a ber cula páigina dada",
        "upload": "Cargar fexeiro",
        "uploadbtn": "Cargar fexeiro",
+       "uploadtext": "Outelize l formulairo ambaixo pa cargar nuobos fexeiros.\nPa ber ó percurar fexeiros ambiados antes, cunsulte la [[Special:FileList|lhista de fexeiros]]. Las (re)cargaduras dun fexeiro son tamien registradas ne l [[Special:Log/upload|registro de cargaduras]], i ls fexeiros botados fuora ne l [[Special:Log/delete|registro de páiginas botadas fuora]].\n\nPa outelizar un fexeiro nua páigina, adepuis de cargar el, ansira ua lhigaçon cun un de ls seguintes formatos:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fexeiro.jpg]]</nowiki></code></strong> pa amostrar ua eimaige nas sues dimensones oureginales;\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fexeiro.png|200px|thumb|left|testo]]</nowiki></code></strong> pa amostrar ua eimaige cula dimenson hourizuntal de 200 píxeles, drento dua caixa, na marge squierda, amostrando \"testo\" cumo çcriçon;\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fexeiro.ogg]]</nowiki></code></strong> pa ua lhigaçon direta al fexeiro sien que el seia amostrado.",
        "uploadlogpage": "Registro de carregamientos",
        "filename": "Nome de l fexeiro",
        "filedesc": "Çcriçon de l fexeiro",
        "categories": "Catadories",
        "categories-submit": "Amostrar",
        "deletedcontributions": "Eidiçones botadas fuora",
-       "deletedcontributions-title": "Cuntribuiçones botadas fuora",
+       "deletedcontributions-title": "Cuntrebuiçones botadas fuora",
        "linksearch": "Percura de lhigaçones sternas",
        "linksearch-ok": "Percurar",
        "listusers-submit": "Amostrar",
        "listgrouprights-members": "(lista de nembros)",
        "listgrants": "Cuncessones de permissones a las aplicaçones lhigadas",
        "trackingcategories": "Catadories de monitorizaçon",
+       "trackingcategories-summary": "Esta páigina lhista las catadories de monitorizaçon geradas outomaticamente pul software Biqui (MediaWiki). Ls nomes de las catadories puoden ser altarados modificando las mensaiges de sistema relebantes ne l domínio {{ns:8}}.",
+       "trackingcategories-msg": "Catadorie monitorada",
+       "trackingcategories-name": "Nome de la mensaige",
+       "trackingcategories-desc": "Critérios de ancluson de la catadorie",
        "restricted-displaytitle-ignored": "Páiginas cun títalos de apersentaçon eignorados",
        "emailuser": "Ambiar carta eiletrónica a {{GENDER:{{BASEPAGENAME}}|este outelizador|esta outelizadora|este(a) outelizador(a)}}",
        "emailfrom": "De:",
        "removedwatchtext": "La páigina \"[[:$1]]\" i la sue páigina de cumbersa fúrun botadas fuora de la [[Special:Watchlist|tue lista de páiginas begiadas]].",
        "watch": "Begiar",
        "watchthispage": "Begiar esta páigina",
-       "unwatch": "Zantressar-se",
+       "unwatch": "Deixar de begiar",
        "watchlist-details": "{{PLURAL:$1|Eisiste $1 páigina|Eisisten $1 páiginas}} na sue lhista de páiginas begiadas (mais las páiginas de cumbersa).",
        "wlheader-enotif": "La notificaçon por correio eiletrónico stá atiba.",
        "wlheader-showupdated": "Las páiginas altaradas zde la redadeira beç que las besitou aparecen çtacadas an <strong>negrito</strong>.",
        "deletecomment": "Rezon:",
        "deleteotherreason": "Rezon adicional:",
        "deletereasonotherlist": "Outra rezon",
-       "deletereason-dropdown": "* Motibos d'eliminaçon quemuns\n** Spam\n** Bandalismo\n** Biolaçon de dreitos d'outor\n** Pedido de l'outor\n** Ancaminamiento ambálido",
+       "deletereason-dropdown": "* Motibos quemuns pa botar fuora\n** Spam\n** Bandalismo\n** Biolaçon de dreitos d'outor\n** Pedido de l outor\n** Ancaminamiento ambálido",
        "delete-edit-reasonlist": "Eiditar rezones de botar fuora",
        "deleting-backlinks-warning": "<strong>Abiso:</strong> Eisisten [[Special:WhatLinksHere/{{FULLPAGENAME}}|páiginas]] que cunténen lhigaçones ó que ancaminan pa la páigina que stá pristes a botar fuora.",
        "rollbacklink": "retornar",
        "namespace_association": "Domínio associado",
        "tooltip-namespace_association": "Marque esta caixa pa ancluir tamien l domínio de cuntenido ó de cumbersa associado a la sue seleçon",
        "blanknamespace": "(Percipal)",
-       "contributions": "Cuntribuiçones {{GENDER:$1|de l outelizador|de la outelizadora|de l(a) outelizador(a)}}",
+       "contributions": "Cuntrebuiçones {{GENDER:$1|de l outelizador|de la outelizadora|de l(a) outelizador(a)}}",
        "contributions-title": "Upas {{GENDER:$1|de l outelizador|de la outelizadora}} $1",
        "mycontris": "Las mies upas",
        "anoncontribs": "Cuntrebuiçones",
        "uctop": "(rebison atual)",
        "month": "De l més (i atrasados):",
        "year": "De l anho (i atrasados):",
-       "sp-contributions-newbies": "Percurar solo an las cuntribuiçones de nuobas cuontas",
+       "sp-contributions-newbies": "Amostrar solo las cuntrebuiçones de cuontas recientes",
        "sp-contributions-newbies-sub": "Pa cuontas nuobas",
+       "sp-contributions-newbies-title": "Cuntrebuiçones de cuontas nuobas",
        "sp-contributions-blocklog": "registro de bloqueios",
        "sp-contributions-uploads": "cargaduras",
        "sp-contributions-logs": "registros",
        "sp-contributions-talk": "cumbersa",
-       "sp-contributions-search": "Percurar cuntribuiçones",
+       "sp-contributions-search": "Percurar cuntrebuiçones",
        "sp-contributions-username": "Morada de IP ó outelizador:",
        "sp-contributions-toponly": "Amostrar solo las eidiçones mais recientes",
        "sp-contributions-newonly": "Amostrar solo eidiçones que son criaçones de páiginas",
        "nolinkshere": "Nun eisisten lhigaçones pa '''[[:$1]]'''.",
        "isredirect": "páigina de ancaminamiento",
        "istemplate": "ancluson",
-       "isimage": "lhigaçon d'eimaige",
+       "isimage": "lhigaçon pa l fexeiro",
        "whatlinkshere-prev": "{{PLURAL:$1|pa trás|$1 pa trás}}",
        "whatlinkshere-next": "{{PLURAL:$1|próssimo|próssimos $1}}",
        "whatlinkshere-links": "← lhigaçones",
        "blocklink": "bloquiar",
        "unblocklink": "zbloquiar",
        "change-blocklink": "altarar bloqueio",
-       "contribslink": "cuntribs",
+       "contribslink": "cuntrebuiçones",
        "blocklogpage": "Registro de bloqueios",
        "blocklogentry": "\"[[$1]]\" fui bloquiado cun un tiempo de balidade de $2 $3",
        "reblock-logentry": "modificou ls parámetros de l bloqueio de [[$1]] cun spiraçon de $2, $3",
        "tooltip-t-recentchangeslinked": "Redadeiras altaraçones an páiginas que ténen a ber cun esta",
        "tooltip-feed-rss": "Feed RSS pa esta páigina",
        "tooltip-feed-atom": "Feed Atom pa esta páigina",
-       "tooltip-t-contributions": "Ber las cuntribuiçones {{GENDER:$1|deste outelizador|desta outelizadora|deste(a) outelizador(a)}}",
+       "tooltip-t-contributions": "Ber las cuntrebuiçones {{GENDER:$1|deste outelizador|desta outelizadora|deste(a) outelizador(a)}}",
        "tooltip-t-emailuser": "Ambiar ua carta eiletrónica a {{GENDER:$1|este outelizador|esta outelizadora|este(a) outelizador(a)}}",
        "tooltip-t-upload": "Cargar eimaiges ó fexeiros",
        "tooltip-t-specialpages": "Todas las páiginas speciales",
        "tooltip-rollback": "\"{{int:rollbacklink}}\" çfazer, cun un solo clique, las eidiçones de l redadeiro eiditor desta páigina.",
        "tooltip-undo": "\"Çfazer\" çfaç esta eidiçoni abre ls campos de eidiçon ne l modo \"ber cumo queda\".\nPremite ajuntar la rezon de la eidiçon ne l sumário.",
        "tooltip-summary": "Screba un resumo brebe",
+       "common.css": "/* L código CSS quelocado eiqui será aplicado an todas las maçcarilhas */",
+       "common.js": "/* Qualquiera código JavaScript quelocado eiqui será cargado pa todos ls outelizadores an cada cargadura de páigina. */",
        "lastmodifiedatby": "Esta páigina fui eiditada pula redadeira beç a la(s) $2 de $1 por $3.",
        "simpleantispam-label": "Berificaçon contra spam.\n<strong>Nun</strong> poner nada nesto!",
        "pageinfo-title": "Anformaçones subre \"$1\"",
        "tag-filter": "Filtrar las [[Special:Tags|etiquetas]]:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eitiqueta|Eitiquetas}}]]: $2)",
        "tags-title": "Eitiquetas",
+       "tags-source-header": "Ourige",
        "tags-active-yes": "Si",
        "tags-active-no": "Nó",
        "tags-edit": "eiditar",
index 0548e66..e7527c6 100644 (file)
        "action-sendemail": "အီးမေးများ ပို့ရန်",
        "action-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "action-viewmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို ကြည့်ရန်",
+       "action-purge": "ဤစာမျက်နှာကို ရှင်းသန့်ရန်",
        "nchanges": "ပြောင်းလဲချက် $1 {{PLURAL:$1|ခု|ခု}}",
        "enhancedrc-history": "ရာဇဝင်",
        "recentchanges": "လတ်တလော အပြောင်းအလဲများ",
        "recentchanges-legend-heading": "<strong>အညွှန်း:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|စာမျက်နှာသစ်များ စာရင်း]]ကိုလည်း ကြည့်ရန်)",
        "recentchanges-submit": "ပြသရန်",
+       "rcfilters-tag-remove": "'$1' ကို ဖယ်ရှားရန်",
        "rcfilters-legend-heading": "<strong>အတိုကောက်များ စာရင်း:</strong>",
+       "rcfilters-other-review-tools": "အခြား ဆန်းစစ်ကိရိယာများ",
+       "rcfilters-group-results-by-page": "စာမျက်နှာအလိုက် ရလဒ်များ အုပ်စုဖွဲ့ရန်",
+       "rcfilters-grouping-title": "အုပ်စုဖွဲ့ခြင်း",
        "rcfilters-activefilters": "သက်ဝင်နေသာ filter များ",
+       "rcfilters-advancedfilters": "အဆင့်မြင့် filter များ",
+       "rcfilters-limit-title": "ပြသမည့် ပြောင်းလဲမှုများ",
        "rcfilters-limit-shownum": "နောက်ဆုံး {{PLURAL:$1|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ $1 ခု}}ကို ကြည့်ရန်",
+       "rcfilters-days-title": "မကြာသေးမီက ရက်များ",
+       "rcfilters-hours-title": "မကြာသေးမီက နာရီများ",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|ရက်|ရက်}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|နာရီ|နာရီ}}",
+       "rcfilters-quickfilters": "သိမ်းထားသော filter များ",
+       "rcfilters-quickfilters-placeholder-title": "မည်သည့် လင့်ခ်မှ မသိမ်းရသေးပါ",
+       "rcfilters-savedqueries-defaultlabel": "သိမ်းထားသော filter များ",
        "rcfilters-savedqueries-rename": "အမည်ပြန်ပြောင်းရန်",
+       "rcfilters-savedqueries-setdefault": "မူလပုံသေအဖြစ် သတ်မှတ်ရန်",
+       "rcfilters-savedqueries-unsetdefault": "မူလပုံသေအဖြစ်မှ ဖယ်ရှားရန်",
        "rcfilters-savedqueries-remove": "ဖယ်ရှားရန်",
        "rcfilters-savedqueries-new-name-label": "အမည်",
+       "rcfilters-savedqueries-new-name-placeholder": "filter ၏ ရည်ရွယ်ချက်ကို ဖော်ပြရန်",
+       "rcfilters-savedqueries-apply-label": "filter ဖန်တီးရန်",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "မူလပုံသေ filter ဖန်တီးရန်",
        "rcfilters-savedqueries-cancel-label": "မလုပ်တော့ပါ",
+       "rcfilters-savedqueries-add-new-title": "လက်ရှိ filter အပြင်အဆင်များ သိမ်းရန်",
+       "rcfilters-restore-default-filters": "မူလပုံသေ filter များအတိုင်း ပြန်ထားရန်",
+       "rcfilters-clear-all-filters": "filter များအားလုံး ရှင်းလင်းရန်",
        "rcfilters-show-new-changes": "နောက်ဆုံး ပြောင်းလဲမှုများကို ကြည့်ရန်",
+       "rcfilters-invalid-filter": "မရေရာသော filter",
+       "rcfilters-highlightmenu-title": "အရောင်တစ်ခု ရွေးချယ်ပါ",
+       "rcfilters-filter-editsbyself-label": "သင်၏ ပြောင်းလဲမှုများ",
        "rcfilters-filter-editsbyself-description": "သင်၏ ဆောင်ရွက်ချက်များ။",
        "rcfilters-filter-editsbyother-label": "အခြားသူများ၏ ပြောင်းလဲမှုများ",
        "rcfilters-filter-editsbyother-description": "သင့်ဆောင်ရွက်ချက်များမှ လွဲ၍ ပြောင်းလဲမှုများ အားလုံး။",
        "rcfilters-filtergroup-userExpLevel": "အသုံးပြုသူ မှတ်ပုံတင်ထားခြင်းနှင့် အတွေ့အကြုံ",
+       "rcfilters-filter-user-experience-level-registered-label": "မှတ်ပုံတင်ထားသူ",
+       "rcfilters-filter-user-experience-level-registered-description": "အကောင့်ဝင်ထားသည့် တည်းဖြတ်သူများ။",
+       "rcfilters-filter-user-experience-level-unregistered-label": "မှတ်ပုံမတင်ထားသူ",
+       "rcfilters-filter-user-experience-level-unregistered-description": "အကောင့်မဝင်ထားသည့် တည်းဖြတ်သူများ။",
+       "rcfilters-filter-user-experience-level-newcomer-label": "လူသစ်များ",
+       "rcfilters-filter-user-experience-level-newcomer-description": "တည်းဖြတ်မှု ၁၀ ကြိမ်အောက်နှင့် လုပ်ကိုင်မှု ၄ ရက်အောက်ရှိသော မှတ်ပုံတင်ထားသည့် တည်းဖြတ်သူများ။",
+       "rcfilters-filter-user-experience-level-learner-label": "လေ့လာသူများ",
+       "rcfilters-filter-user-experience-level-learner-description": "\"လူသစ်များ\" နှင့် \"အတွေ့အကြုံရှိ အသုံးပြုသူများ\" အကြားရှိ မှတ်ပုံတင်ထားသော တည်းဖြတ်သူများ။",
+       "rcfilters-filter-user-experience-level-experienced-label": "အတွေ့အကြုံရှိ အသုံးပြုသူများ",
+       "rcfilters-filter-user-experience-level-experienced-description": "တည်းဖြတ်မှု ၅၀၀ အထက်နှင့် လုပ်ဆောင်မှု ရက် ၃၀ ကျော်သည့် မှတ်ပုံတင်ထားသော တည်းဖြတ်သူများ။",
+       "rcfilters-filtergroup-automated": "အလိုအလျောက် ဆောင်ရွက်ချက်များ",
        "rcfilters-filter-bots-label": "ဘော့",
        "rcfilters-filter-bots-description": "အလိုအလျောက် ကိရိယာများ၏ တည်းဖြတ်မှုများ။",
        "rcfilters-filter-humans-label": "လူ (ဘော့မဟုတ်)",
+       "rcfilters-filter-humans-description": "လူတည်းဖြတ်သူများ၏ တည်းဖြတ်မှုများ။",
+       "rcfilters-filtergroup-reviewstatus": "အခြေအနေ သုံးသပ်ရန်",
+       "rcfilters-filter-patrolled-label": "စောင့်ကြပ်စစ်ဆေးပြီး",
+       "rcfilters-filter-patrolled-description": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားထားသည့် တည်းဖြတ်မှုများ။",
        "rcfilters-filter-unpatrolled-label": "မစောင့်ကြည့်မစစ်ဆေးရသေး",
        "rcfilters-filter-unpatrolled-description": "စောင့်ကြည့်စစ်ဆေးပြီးကြောင်း မမှတ်သားရသေးသည့် တည်းဖြတ်မှုများ။",
        "rcfilters-filter-minor-label": "အရေးမကြီးသည့် တည်းဖြတ်မှုများ",
        "rcfilters-filter-minor-description": "အရေးမကြီးဟု မှတ်သားလိုက်သော တည်းဖြတ်မှုများ။",
        "rcfilters-filter-major-label": "အရေးမကြီး မဟုတ်သော တည်းဖြတ်မှုများ",
        "rcfilters-filter-major-description": "အရေးမကြီးဟု မသတ်မှတ်ထားသော တည်းဖြတ်မှုများ။",
+       "rcfilters-filtergroup-watchlist": "စောင့်ကြည့်စာရင်းဝင် စာမျက်နှာများ",
+       "rcfilters-filter-watchlist-watched-label": "စောင့်ကြည့်စာရင်းပေါ်ရှိ",
+       "rcfilters-filter-watchlist-watched-description": "သင့်စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများ၏ ပြောင်းလဲမှုများ။",
+       "rcfilters-filter-watchlist-watchednew-label": "စောင့်ကြည့်စာရင်း ပြောင်းလဲမှုအသစ်များ",
+       "rcfilters-filter-watchlist-watchednew-description": "ပြောင်းလဲမှုဖြစ်ပြီးနောက် ဝင်ရောက် မကြည့်ရှုရသေးသော စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများ၏ ပြောင်းလဲမှုများ။",
+       "rcfilters-filter-watchlist-notwatched-label": "စောင့်ကြည့်စာရင်းတွင် မရှိ",
+       "rcfilters-filter-watchlist-notwatched-description": "သင့်စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများမှလွဲ၍ ကျန်ပြောင်းလဲမှုများ အားလုံး။",
+       "rcfilters-filtergroup-watchlistactivity": "စောင့်ကြည့်စာရင်း လှုပ်ရှားမှု",
+       "rcfilters-filter-watchlistactivity-unseen-label": "မကြည့်ရှုရသေးသော ပြောင်းလဲမှုများ",
+       "rcfilters-filter-watchlistactivity-unseen-description": "ပြောင်းလဲမှု ဖြစ်ပြီးနောက် ဝင်ရောက်မကြည့်ရှုရသေးသော စာမျက်နှာများ၏ ပြောင်းလဲမှုများ။",
+       "rcfilters-filter-watchlistactivity-seen-label": "ကြည့်ရှုပြီးသော ပြောင်းလဲမှုများ",
+       "rcfilters-filter-watchlistactivity-seen-description": "ပြောင်းလဲမှု ဖြစ်ပြီးနောက် ဝင်ရောက်ကြည့်ရှုပြီးသော စာမျက်နှာများ၏ ပြောင်းလဲမှုများ။",
        "rcfilters-filtergroup-changetype": "ပြောင်းလဲမှု အမျိုးအစား",
        "rcfilters-filter-pageedits-label": "စာမျက်နှာ တည်းဖြတ်မှုများ",
        "rcfilters-filter-pageedits-description": "ဝီကီအကြောင်းအရာများ၊ ဆွေးနွေးချက်များ၊ ကဏ္ဍဖော်ပြချက်များ စသည်တို့၏ တည်းဖြတ်မှုများ",
+       "rcfilters-filter-newpages-label": "စာမျက်နှာ ဖန်တီးမှုများ",
        "rcfilters-filter-newpages-description": "စာမျက်နှာအသစ် ဖန်တီးလိုက်သည့် တည်းဖြတ်မှုများ။",
        "rcfilters-filter-categorization-label": "ကဏ္ဍပြောင်းလဲမှုများ",
        "rcfilters-filter-categorization-description": "ကဏ္ဍများထဲသို့ စာမျက်နှာများ ပေါင်းထည့်ခြင်း သို့ ဖယ်ရှားခြင်း မှတ်တမ်းများ။",
        "rcfilters-filter-logactions-label": "အကောင့်ဝင်ထားသည့် ပြုလုပ်ချက်များ",
        "rcfilters-filter-logactions-description": "စီမံခန့်ခွဲရေး ပြုလုပ်ချက်များ၊ အကောင့် ဖန်တီးမှုများ၊ စာမျက်နှာ ဖျက်ခြင်းများ၊ ဖိုင်တင်ခြင်းများ...",
+       "rcfilters-filtergroup-lastRevision": "နောက်ဆုံး တည်းဖြတ်မူများ",
        "rcfilters-filter-lastrevision-label": "နောက်ဆုံး တည်းဖြတ်မူ",
+       "rcfilters-filter-lastrevision-description": "စာမျက်နှာတစ်ခု၏ နောက်ဆုံးအကျဆုံး ပြောင်းလဲမှုသာလျှင်။",
+       "rcfilters-filter-previousrevision-label": "နောက်ဆုံး တည်းဖြတ်မူမဟုတ်",
        "rcfilters-filter-previousrevision-description": "\"နောက်ဆုံး တည်းဖြတ်မူ\" မဟုတ်သော ပြောင်းလဲမှုများ အားလုံး။",
        "rcfilters-filter-excluded": "ချန်လှပ်",
+       "rcfilters-exclude-button-off": "ရွေးချယ်ထားသည်များ ချန်လှပ်ရန်",
+       "rcfilters-exclude-button-on": "ရွေးချယ်ထားသည်များ ချန်လှပ်နေသည်",
+       "rcfilters-view-advanced-filters-label": "အဆင့်မြင့် filter များ",
+       "rcfilters-view-tags": "စာတွဲမှတ်ထားသော တည်းဖြတ်မှုများ",
+       "rcfilters-view-namespaces-tooltip": "အမည်ညွှန်းအလိုက် ရလဒ်များ စစ်ထုတ်ရန်",
+       "rcfilters-view-tags-tooltip": "တည်းဖြတ်စာတွဲများ အသုံးပြု၍ ရလဒ်များ စစ်ထုတ်ရန်",
+       "rcfilters-view-return-to-default-tooltip": "ပင်မ filter မီနူးသို့ ပြန်သွားရန်",
+       "rcfilters-view-tags-help-icon-tooltip": "စာတွဲမှတ်ထားသော တည်းဖြတ်မှုများအကြောင်း ပိုမိုလေ့လာရန်",
+       "rcfilters-liveupdates-button-title-off": "ပြောင်းလဲမှုအသစ် ဖြစ်ပေါ်တိုင်း ပြသရန်",
+       "rcfilters-watchlist-markseen-button": "ပြောင်းလဲမှုများအားလုံးကို ကြည့်ရှုပြီးကြောင်း မှတ်သားရန်",
+       "rcfilters-watchlist-edit-watchlist-button": "သင့်စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများစာရင်းအား တည်းဖြတ်ရန်",
+       "rcfilters-watchlist-showupdated": "သင်နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို <strong>စာလုံးမဲ</strong> ဖြင့် ပြသထားသည်။",
        "rcnotefrom": "အောက်ပါတို့မှာ <strong>$3၊ $4</strong> မှစ၍ {{PLURAL:$5|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ}} ဖြစ်သည်  (<strong>$1</strong> အထိ ပြထား)။",
+       "rclistfromreset": "ရက်စွဲရွေးချယ်မှုအား ပြန်စရန်",
        "rclistfrom": "$3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန်",
        "rcshowhideminor": "အရေးမကြီးသော ပြင်ဆင်မှု $1ရန်",
        "rcshowhideminor-show": "ပြသရန်",
        "newpageletter": "အသစ်",
        "boteditletter": "ဘော့",
        "number_of_watching_users_pageview": "[စောင့်ကြည့်နေသော အသုံးပြုသူ $1 {{PLURAL:$1|ဦး|ဦး}}]",
+       "rc_categories": "ကဏ္ဍများအား ကန့်သတ်ရန် (\"|\" ဖြင့် ခွဲခြား):",
        "rc_categories_any": "ရွေးချယ်ခံရသော မည်သူမဆို",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ပြောင်းလဲပြီးနောက်",
        "newsectionsummary": "/* $1 */ အပိုင်းသစ်",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] အား ကဏ္ဍထဲသို့ ပေါင်းထည့်ခဲ့ပြီး၊ [[Special:WhatLinksHere/$1|ဤစာမျက်နှာသည် အခြားစာမျက်နှာများထဲတွင် ပါဝင်သည်]]",
        "recentchanges-page-removed-from-category": "ကဏ္ဍထဲမှ [[:$1]] ကို ဖယ်ရှားခဲ့သည်",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] အား ကဏ္ဍထဲမှ ဖယ်ရှားခဲ့ပြီး၊ [[Special:WhatLinksHere/$1|ဤစာမျက်နှာသည် အခြားစာမျက်နှာများထဲတွင် ပါဝင်သည်]]",
+       "autochange-username": "မီဒီယာဝီကီ MediaWiki အလိုအလျောက်ပြောင်းလဲမှု",
        "upload": "ဖိုင်​တင်​ရန်​",
        "uploadbtn": "ဖိုင်​တင်​ရန်​",
        "reuploaddesc": "Upload တင်နေခြင်းကို ဖျက်သိမ်းပြီး upload တင်သည့် ပုံစံသို့ ပြန်သွားရန်",
        "uploadlogpage": "Upload တင်သည့် မှတ်တမ်း",
        "uploadlogpagetext": "အောက်ပါတို့သည် မကြာမီက upload လုပ်ထားသော ဖိုင်စာရင်း ဖြစ်သည်။\nပိုမို၍ ခြုံငုံသုံးသပ်ကြည့်ရှုနိုင်ရန် [[Special:NewFiles|ဖိုင်အသစ်များ ပြခန်း]]ကို ကြည့်ပါ။",
        "filename": "ဖိုင်အမည်",
-       "filedesc": "အ​ကျဉ်း​ချုပ်​",
+       "filedesc": "အကျဉ်းချုပ်",
        "fileuploadsummary": "အ​ကျဉ်း​ချုပ်​ -",
        "filereuploadsummary": "ဖိုင်အပြောင်းအလဲများ -",
        "filestatus": "မူပိုင်ခွင့် အခြေအနေ -",
index 75ad220..77f1af4 100644 (file)
@@ -55,7 +55,6 @@
        "underline-never": "دکل",
        "underline-default": "پیش‌فرض مرورگر",
        "editfont-style": "دچی ین جعبه قلم سبک:",
-       "editfont-default": "پیش فرض مرورگر",
        "editfont-monospace": "فونت Monospaced",
        "editfont-sansserif": "فونت Sans-serif",
        "editfont-serif": "فونت Serif",
@@ -83,7 +82,7 @@
        "august": "آگوست",
        "september": "سپتامبر",
        "october": "اکتبر",
-       "november": "Ù\86Ù\80Ù\88Ù\88Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+       "november": "Ù\86Ù\88اÙ\85بر",
        "december": "دسامبر",
        "january-gen": "ژانویه",
        "february-gen": "فوریه",
        "august-gen": "آگوست",
        "september-gen": "سپتامبر",
        "october-gen": "اکتبر",
-       "november-gen": "Ù\86Ù\80Ù\88Ù\88Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+       "november-gen": "Ù\86Ù\88اÙ\85بر",
        "december-gen": "دسامبر",
-       "jan": "جانویه",
-       "feb": "Ù\81Ù\87â\80\8cÙ\88رÛ\8cÙ\87",
-       "mar": "مارچ",
+       "jan": "ژانویه",
+       "feb": "فوریه",
+       "mar": "مارس",
        "apr": "آوریل",
        "may": "مه",
        "jun": "ژوئن",
-       "jul": "جولای",
-       "aug": "ئÙ\88گوست",
-       "sep": "سÙ\87â\80\8cپتÙ\87â\80\8cمبر",
-       "oct": "ئÙ\88کتÙ\88بر",
-       "nov": "نووه‌مبر",
+       "jul": "ژوئیه",
+       "aug": "Ø¢گوست",
+       "sep": "سپتامبر",
+       "oct": "اکتبر",
+       "nov": "نوامبر",
        "dec": "دسامبر",
        "pagecategories": "{{PLURAL:$1|رج|رج‌ئون}}",
        "category_header": "\"$1\" ره دله صفحه‌ئون",
        "anontalk": "گپ بزوئن اینتا آی‌پی وسّه",
        "navigation": "بگردستن",
        "and": "&#32;و",
-       "qbfind": "پیدا هکردن",
-       "qbbrowse": "چأرخه‌سه‌ن",
-       "qbedit": "دچی‌ین",
-       "qbpageoptions": "این صفحه",
-       "qbmyoptions": "مه صفحه‌ئون",
        "faq": "معمولی سوالا",
-       "faqpage": "Project:FAQ",
        "actions": "عملکاردون",
        "namespaces": "ایسم فضائون",
        "variants": "گویش‌ئون",
        "edit": "دچی‌ین",
        "create": "بساتن",
        "create-local": "مَله‌یی توضیحات ره بی‌یشتن",
-       "editthispage": "این صفحه ره دچی‌ین",
-       "create-this-page": "این صفحه ره شِما بساجین",
        "delete": "پاک هاکردن",
-       "deletethispage": "این صفحه ره پاک هاکردن",
        "undelete_short": "احیای {{PLURAL:$1|ات دچی‌یه|$1 دچی‌یه}}",
        "viewdeleted_short": "نمایش {{PLURAL:$1|اتا دچی‌یه حذف بَیی|$1 دچی‌یه حذف بَیی}}",
        "protect": "زلفن بزوئن",
        "protect_change": "دگاردنی‌ین",
-       "protectthispage": "این صفحه ره زلفن بزن",
        "unprotect": "زلفن عوض هاکردن",
-       "unprotectthispage": "این زلفن ره عوض بدل هاکن",
        "newpage": "نو صفحه",
-       "talkpage": "این صفحه درباره گپ بَزوئِن",
        "talkpagelinktext": "گپ",
        "specialpage": "شا صفحه",
        "personaltools": "مه‌شه ابزار",
-       "articlepage": "نمایش صفحه",
        "talk": "گپ",
        "views": "هارشی‌ئون",
        "toolbox": "ابزارون",
-       "userpage": "کارور صفحه ره سِراق هدائن",
-       "projectpage": "بدی‌ین پروژه‌ی ِصفحه",
        "imagepage": "بدی‌ین ِعکس ِصفحه",
        "mediawikipage": "پیغوم ره بدی‌ین",
        "templatepage": "بدی‌ین شابلون",
        "whatlinkshere-hidelinks": "$1 لینک",
        "whatlinkshere-filters": "فیلترون",
        "blockip": "کارور ره دَوستن",
-       "blockip-legend": "کارور ره دَوستن",
        "ipbsubmit": "ای کارور دأبه‌س بأوه",
        "ipboptions": "۲ ساعت:2 hours,۱ روز:1 day,۳ روز:3 days,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایون:infinite",
        "ipblocklist": "IP نـه‌شـونـی‌ئون ئو کـارورنـوم‌ئونی کـه دأبـه‌سـتـوونـه",
index 02ec826..a0e1576 100644 (file)
@@ -39,7 +39,7 @@
        "tog-shownumberswatching": "Hián-sī tng leh khoàⁿ ê iōng-chiá sò͘-bo̍k",
        "tog-oldsig": "Lí kì-sêng ê chhiam-miâ:",
        "tog-fancysig": "共我的簽名當做文章文字,(無需要自動連結)",
-       "tog-uselivepreview": "Ēng sui khoàⁿ-māi",
+       "tog-uselivepreview": "Bián têng-lia̍h ia̍h-bīn ê preview tián-sī",
        "tog-forceeditsummary": "Pian-chi̍p khài-iàu bô thiⁿ ê sî-chūn, kā goá thê-chhéⁿ",
        "tog-watchlisthideown": "Kàm-sī-toaⁿ bián hián-sī goá ê pian-chi̍p",
        "tog-watchlisthidebots": "Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p",
        "redirectedfrom": "(Tùi $1 choán--lâi)",
        "redirectpagesub": "Choán-ia̍h",
        "redirectto": "跳去:",
-       "lastmodifiedat": "Chit ia̍h tī $1,  $2 ū kái--koè",
+       "lastmodifiedat": "Chit ia̍h siāng bóe tī $1, $2 ū pian-chi̍p--koè.",
        "viewcount": "Chit ia̍h kàu taⁿ, hō͘ lâng khoàⁿ $1 pái.",
        "protectedpage": "Siū pó-hō͘ ê ia̍h",
        "jumpto": "Thiàu khì:",
        "actionthrottled": "Tōng-chok hông tóng leh.",
        "actionthrottledtext": "Ūi tio̍h thê-hông lām-iōng, lí hông hān-chè tī té sî-kan lāi chò siuⁿ chē pái pún khoán tōng-chok, taⁿ lí í-keng chhiau-koè hān-chè.\nChhiáⁿ tī kúi hun-cheng āu chiah koh chhì.",
        "protectedpagetext": "Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit, mā bē-tàng chò kî-thaⁿ oa̍h-tāng.",
-       "viewsourcetext": "Lí ē-sái khoàⁿ ia̍h khó͘-pih chit ia̍h ê goân-sú loē-iông:",
+       "viewsourcetext": "Lí thang koan-khoàⁿ kiam khó͘-pih chit ia̍h ê goân-sú-bé.",
        "viewyourtext": "你會使看<strong>你改的</strong>原始碼,並且khop去這頁:",
        "protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [https://translatewiki.net/ translatewiki.net] hiâ.",
        "editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [https://translatewiki.net/ translatewiki.net] hiâ.",
        "recentchanges-label-plusminus": "Hit ia̍h kái liáu; cheng-chha ê ūi-goân-cho͘",
        "recentchanges-legend-heading": "<strong>Ké-soeh:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁清單]])",
+       "rcfilters-legend-heading": "<strong>Kán-siá lia̍t-toaⁿ:</strong>",
+       "rcfilters-savedqueries-cancel-label": "Chhú-siau",
        "rcnotefrom": "Ē-kha sī <b>$2</b> kàu taⁿ ê kái-piàn (ke̍k-ke hián-sī <b>$1</b> hāng).",
        "rclistfrom": "Hián-sī tùi $3 $2 kàu taⁿ ê sin kái-piàn",
        "rcshowhideminor": "$1 sió siu-kái",
        "expand_templates_input": "Su-ji̍p bûn-jī:",
        "expand_templates_output": "Kiat-kó:",
        "expand_templates_remove_comments": "Comments the̍h tiāu",
-       "mw-widgets-mediasearch-input-placeholder": "搜揣媒體"
+       "mw-widgets-mediasearch-input-placeholder": "搜揣媒體",
+       "date-range-from": "Khai-sí ji̍t-chí:",
+       "date-range-to": "Kiat-sok ji̍t-chí:"
 }
index e03c315..7687415 100644 (file)
        "anonpreviewwarning": "<em>Du er ikke logget inn. Ved lagring vil IP-adressen din lagres i sidens redigeringshistorikk.</em>",
        "missingsummary": "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.\nVelger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
        "selfredirect": "<strong>Advarsel:</strong> Du omdirigerer denne siden til seg selv. Du kan ha oppgitt feil mål for omdirigeringen, eller kanskje du redigerer feil side. Om du klikker «$1» igjen vil omdirigeringen bli opprettet uansett.",
-       "missingcommenttext": "Vennligst legg inn en kommentar under.",
+       "missingcommenttext": "Vennligst legg inn en kommentar.",
        "missingcommentheader": "<strong>Påminnelse:</strong> Du har ikke angitt et emne/overskrift for denne kommentaren.\nOm du trykker «$1» igjen vil redigeringen din bli lagret uten forklaring.",
        "summary-preview": "Forhåndsvisning av redigeringsforklaring:",
        "subject-preview": "Forhåndsvisning av overskrift:",
        "recentchanges-legend": "Alternativer for siste endringer",
        "recentchanges-summary": "På denne siden vises de siste endringene i wikien.",
        "recentchanges-noresult": "Ingen endringer i perioden passer med kriteriene.",
+       "recentchanges-timeout": "Tidsfristen for søket har løpt ut. Du bør prøve andre søkeparametere.",
+       "recentchanges-network": "På grunn av en teknisk feil kunne ikke resultatene lastes. Prøv å oppdatere siden.",
        "recentchanges-feed-description": "Følg med på siste endringer i denne wikien med denne matingen.",
        "recentchanges-label-newpage": "Denne redigeringen opprettet en ny side",
        "recentchanges-label-minor": "Dette er en mindre endring",
        "recentchanges-submit": "Vis",
        "rcfilters-tag-remove": "Fjern «$1»",
        "rcfilters-legend-heading": "<strong>Liste over forkortelser:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andre gjennomgangsverktøy</strong>",
+       "rcfilters-other-review-tools": "Andre gjennomgangsverktøy",
        "rcfilters-group-results-by-page": "Grupper resultater etter side",
        "rcfilters-grouping-title": "Gruppering",
        "rcfilters-activefilters": "Aktive filtre",
        "rcfilters-days-show-hours": "{{PLURAL:$1|Én time|$1 timer}}",
        "rcfilters-highlighted-filters-list": "Fremhevet: $1",
        "rcfilters-quickfilters": "Lagrede filtre",
-       "rcfilters-quickfilters-placeholder-title": "Ingen lenker lagret enda",
+       "rcfilters-quickfilters-placeholder-title": "Ingen filtre lagret enda",
        "rcfilters-quickfilters-placeholder-description": "For å lagre filterinnstillingene og gjenbruk dem senere, klikk på bokmerkeikonet i området Aktive Filtre under.",
        "rcfilters-savedqueries-defaultlabel": "Lagrede filtre",
        "rcfilters-savedqueries-rename": "Gi nytt navn",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Opprett standardfilter",
        "rcfilters-savedqueries-cancel-label": "Avbryt",
        "rcfilters-savedqueries-add-new-title": "Lagre de gjeldende filterinnstillingene",
+       "rcfilters-savedqueries-already-saved": "Disse filtrene er allerede lagret",
        "rcfilters-restore-default-filters": "Gjenopprett standardfiltre",
        "rcfilters-clear-all-filters": "Nullstill alle filtre",
        "rcfilters-show-new-changes": "Vis de nyeste endringene",
-       "rcfilters-search-placeholder": "Filtrer siste endringer (gå gjennom eller begynn å skrive)",
+       "rcfilters-search-placeholder": "Filtrer endringer (bruk menyen eller søk etter et filternavn)",
        "rcfilters-invalid-filter": "Ugyldig filter",
        "rcfilters-empty-filter": "Ingen aktive filtre. Alle bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filter-user-experience-level-unregistered-label": "Uregistrerte",
        "rcfilters-filter-user-experience-level-unregistered-description": "Brukere som ikke er logget inn.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nykommere",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registrerte brukere med færre enn 10 redigeringer og 4 dagers aktivitet.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrerte brukere som har gjort færre enn 10 redigeringer eller vært aktive i mindre enn 4 dager.",
        "rcfilters-filter-user-experience-level-learner-label": "Nybegynnere",
        "rcfilters-filter-user-experience-level-learner-description": "Registrerte brukere med mer erfaring enn «Nykommere», men mindre enn «Erfarne brukere».",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfarne brukere",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Ekskluder de valgte",
        "rcfilters-exclude-button-on": "Ekskluderer de valgte",
-       "rcfilters-view-advanced-filters-label": "Avanserte filtre",
        "rcfilters-view-tags": "Taggede redigeringer",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultater etter navnerom",
        "rcfilters-view-tags-tooltip": "Filtrer resultater med redigeringstagger",
        "uploaded-script-svg": "Fant et skriptelement \"$1\" i den opplastede SVG-koden.",
        "uploaded-hostile-svg": "Fant usikker CSS i stilelementet til opplastet SVG-fil",
        "uploaded-event-handler-on-svg": "Å sette event-handler-attributtene <code>$1=\"$2\"</code> tillates ikke i SVG-filer.",
-       "uploaded-href-attribute-svg": "href-attributter i SVG-filer tillates kun for http://- eller https://-mål; fant <code>&lt;$1 $2=\"$3\"%gt;</code>.",
+       "uploaded-href-attribute-svg": "<a>-elementer kan bare lenke (href) til data:- (innbygde filer), http(s)://- eller fragmentmål (#, samme dokument). For andre elementer som <image> tillates bare data:- og fragmentlenker. Prøv å bygge inn bilder når du eksporterer SVG-en din. Fant <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Fant href til usikre data: URI-mål <code>&lt;$1 $2=\"$3\"&gt;</code> i den opplastede SVG-filen.",
        "uploaded-animate-svg": "Fant en «animate»-tagg som kan endre href, bruk attributtet «from» <code>&lt;$1 $2=\"$3\"&gt;</code> i den opplastede SVG-fila.",
        "uploaded-setting-event-handler-svg": "Setting av event-handler-attributter er blokkert, fant <code>&lt;$1 $2=\"$3\"&gt;</code> i den opplastede SVG-fila.",
        "uploadstash-refresh": "Oppdater listen over filer",
        "uploadstash-thumbnail": "vis miniatyrbilde",
        "uploadstash-exception": "Kunne ikke lagre opplastingen i stashen ($1): «$2».",
+       "uploadstash-bad-path": "Stien finnes ikke.",
+       "uploadstash-bad-path-invalid": "Stien er ugyldig.",
+       "uploadstash-bad-path-unknown-type": "Ukjent type «$1».",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Ukjent miniatyrnavn.",
+       "uploadstash-bad-path-no-handler": "Ingen behandlingsmåte funnet for MIME-n $1 til fila $2.",
+       "uploadstash-bad-path-bad-format": "Nøkkelen «$1» er ikke i et korrekt format.",
+       "uploadstash-file-not-found": "Nøkkelen «$1» ble ikke funnet i stash.",
+       "uploadstash-file-not-found-no-thumb": "Kunne ikke hente miniatyrbilde.",
+       "uploadstash-file-not-found-no-local-path": "Ingen lokal sti for skalert element.",
+       "uploadstash-file-not-found-no-object": "Kunne ikke opprette lokalt filobjekt for miniatyrbilde.",
+       "uploadstash-file-not-found-no-remote-thumb": "Henting av miniatyrbilde feilet: $1\nurl = $2",
+       "uploadstash-file-not-found-missing-content-type": "Mangler content-type-header.",
+       "uploadstash-file-not-found-not-exists": "Kan ikke finne sti eller fil.",
+       "uploadstash-file-too-large": "Kan ikke tilby en fil som er større enn $1 byte.",
+       "uploadstash-not-logged-in": "Ingen bruker er logget inn, filer må tilhøre brukere.",
+       "uploadstash-wrong-owner": "Denne fila ($1) hører ikke til den gjeldende brukeren.",
+       "uploadstash-no-such-key": "Ingen slik nøkkel ($1), kan ikke fjerne.",
+       "uploadstash-no-extension": "Utvidelsen er null.",
+       "uploadstash-zero-length": "Filen har en lengde på null.",
        "invalid-chunk-offset": "Ugyldig delforskyvning",
        "img-auth-accessdenied": "Ingen tilgang",
        "img-auth-nopathinfo": "Manglende PATH_INFO.\nTjeneren din er ikke satt opp til å gi denne informasjonen.\nDen er kanskje CGI-basert og støtter ikke img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Se bildeautorisasjon.",
        "apisandbox": "API-sandkasse",
        "apisandbox-jsonly": "JavaScript kreves for å bruke API-sandkassa.",
        "apisandbox-api-disabled": "API er deaktivert på dette nettstedet.",
-       "apisandbox-intro": "Bruk denne siden for å eksperimentere med <strong>MediaWiki webtjeneste-APIet</strong>.\nSjekk [[mw:API:Main page|API-dokumentasjonen]] for mer informasjon om bruk av APIet. Eksempel: [https://www.mediawiki.org/wiki/API#A_simple_example hente innholdet til en hovedside]. Velg en handling for å se flere eksempler.\n\nMerk at du kan utføre handlinger her som fører til endringer på wikien.",
+       "apisandbox-intro": "Bruk denne siden for å eksperimentere med <strong>webtjenesteprogrammeringsgrensesnittet til MediaWiki</strong>.\nSe [[mw:API:Main page|API-dokumentasjonen]] for mer informasjon om bruk. Eksempel: [https://www.mediawiki.org/wiki/API#A_simple_example hente innholdet til en hovedside]. Velg en handling for å se flere eksempler.\n\nMerk at selv om dette er en sandkasse så kan du utføre handlinger her som fører til endringer på wikien.",
        "apisandbox-fullscreen": "Utvid panelet",
        "apisandbox-fullscreen-tooltip": "Utvid sandkassepanelet så det dekker nettleservinduet.",
        "apisandbox-unfullscreen": "Vis siden",
index fa66828..d711feb 100644 (file)
@@ -88,7 +88,8 @@
                        "Jos1950",
                        "Ooswesthoesbes",
                        "MarcoSwart",
-                       "Pahles"
+                       "Pahles",
+                       "Optilete"
                ]
        },
        "tog-underline": "Verwijzingen onderstrepen:",
        "cannotloginnow-title": "Niet mogelijk om aan te melden",
        "cannotloginnow-text": "Aanmelden is niet mogelijk bij het gebruik van $1.",
        "cannotcreateaccount-title": "Kan geen accounts aanmaken",
-       "cannotcreateaccount-text": "Direct aanmaken van een gebruiker is niet ingeschakeld op deze wiki.",
+       "cannotcreateaccount-text": "Direct aanmaken van een account is niet ingeschakeld op deze wiki.",
        "yourdomainname": "Uw domein:",
        "password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
-       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
+       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming om uw externe account bij te werken.",
        "login": "Aanmelden",
        "login-security": "Uw identiteit controleren",
        "nav-login-createaccount": "Aanmelden / registreren",
        "userlogin-helplink2": "Hulp bij aanmelden",
        "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
        "userlogin-reauth": "U moet opnieuw inloggen om te bevestigen dat u {{GENDER:$1|$1}} bent.",
-       "userlogin-createanother": "Een andere account registreren",
+       "userlogin-createanother": "Een ander account aanmaken",
        "createacct-emailrequired": "E-mailadres",
        "createacct-emailoptional": "E-mailadres (optioneel)",
        "createacct-email-ph": "Geef uw e-mailadres op",
        "createacct-another-email-ph": "Geef een e-mailadres op",
        "createaccountmail": "Gebruik een tijdelijk willekeurig wachtwoord en stuur het naar het opgegeven e-mailadres",
-       "createaccountmail-help": "Kan worden gebruikt voor het aanmaken van een gebruiker voor een andere persoon zonder het wachtwoord te leren.",
+       "createaccountmail-help": "Kan worden gebruikt voor het aanmaken van een account voor een andere persoon zonder het wachtwoord te leren.",
        "createacct-realname": "Echte naam (optioneel)",
        "createacct-reason": "Reden",
-       "createacct-reason-ph": "Waarom u een andere account aanmaakt",
+       "createacct-reason-ph": "Waarom u een ander account aanmaakt",
        "createacct-reason-help": "Weergegeven bericht in het logbestand van aangemaakte gebruikers",
        "createacct-submit": "Account aanmaken",
        "createacct-another-submit": "Account aanmaken",
        "createacct-benefit-body2": "pagina{{PLURAL:$1||'s}}",
        "createacct-benefit-body3": "recente bijdrager{{PLURAL:$1||s}}",
        "badretype": "De ingevoerde wachtwoorden verschillen van elkaar.",
-       "usernameinprogress": "Het aanmaken van een gebruiker met die naam is al bezig.\nEven geduld alstublieft.",
+       "usernameinprogress": "Het aanmaken van een account met die naam is al bezig.\nEven geduld alstublieft.",
        "userexists": "De gekozen gebruikersnaam is al in gebruik.\nKies een andere naam.",
        "loginerror": "Aanmeldfout",
        "createacct-error": "Fout tijdens aanmaken account",
-       "createaccounterror": "Het was niet mogelijk de account aan te maken: $1",
-       "nocookiesnew": "De gebruiker is geregistreerd, maar niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met uw nieuwe gebruikersnaam en wachtwoord.",
+       "createaccounterror": "Het was niet mogelijk het account aan te maken: $1",
+       "nocookiesnew": "Het gebruikersaccount is aangemaakt, maar u bent niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met uw nieuwe gebruikersnaam en wachtwoord.",
        "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in uw browser.\nSchakel deze optie in en probeer het opnieuw.",
-       "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat u cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
-       "createacct-loginerror": "De gebruiker is succesvol aangemaakt, maar u kon niet automatisch worden aangemeld. Ga naar [[Special:UserLogin|handmatig aanmelden]].",
+       "nocookiesfornew": "Het gebruikersaccount is niet aangemaakt, omdat de bron niet bevestigd kon worden.\nZorg ervoor dat u cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
+       "createacct-loginerror": "Het account is succesvol aangemaakt, maar u kon niet automatisch worden aangemeld. Ga naar [[Special:UserLogin|handmatig aanmelden]].",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
        "loginsuccesstitle": "Aangemeld",
        "loginsuccess": "<strong>U bent nu aangemeld bij {{SITENAME}} als \"$1\".</strong>",
-       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:CreateAccount|maak een nieuw gebruiker aan]].",
+       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:CreateAccount|maak een nieuw account aan]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
        "password-login-forbidden": "Het gebruik van deze gebruikersnaam met dit wachtwoord is niet toegestaan.",
        "mailmypassword": "Nieuw wachtwoord e-mailen",
        "passwordremindertitle": "Nieuw tijdelijk wachtwoord voor {{SITENAME}}",
-       "passwordremindertext": "Iemand, waarschijnlijk u, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat uw bedoeling was, meld u dan nu aan en kies een nieuw\nwachtwoord.\nUw tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.\n\nAls iemand anders dan u dit verzoek heeft gedaan of als u zich inmiddels het\nwachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht\ndan en blijf uw bestaande wachtwoord gebruiken.",
+       "passwordremindertext": "Iemand, waarschijnlijk u, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat uw bedoeling was, meld u dan nu aan en kies een nieuw\nwachtwoord.\nUw tijdelijke wachtwoord vervalt over {{PLURAL:$5|één dag|$5 dagen}}.\n\nAls iemand anders dan u dit verzoek heeft gedaan, of als u zich het\nwachtwoord inmiddels herinnert en het niet langer wilt wijzigen, negeer\ndit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "noemail": "Er is geen e-mailadres bekend voor gebruiker \"$1\".",
        "noemailcreate": "U moet een geldig e-mailadres opgeven",
        "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld u aan nadat u het hebt ontvangen.",
        "blocked-mailpassword": "Uw IP-adres is geblokkeerd voor het maken van wijzigingen. Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.",
-       "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het uw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.",
+       "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om te bevestigen dat het uw account is.\nTot die tijd wordt er geen andere e-mail naar het account gezonden.",
        "throttled-mailpassword": "In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is al een wachtwoordherinnering verzonden.\nOm misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLURAL:$1|uur|$1 uur}} verzonden.",
        "mailerror": "Fout bij het verzenden van e-mail: $1",
        "acct_creation_throttle_hit": "Bezoekers van deze wiki met hetzelfde IP-adres als u hebben de afgelopen $2 al {{PLURAL:$1|1 gebruiker|$1 gebruikers}} geregistreerd, wat het maximale toegestane aantal is voor deze periode.\nDaarom kunt u vanaf uw IP-adres op dit moment geen nieuwe gebruikers registreren.",
        "accountcreated": "Account aangemaakt",
        "accountcreatedtext": "Het gebruikersaccount [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
        "createaccount-title": "Gebruikers registreren voor {{SITENAME}}",
-       "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.",
+       "createaccount-text": "Iemand heeft een account voor uw e-mailadres op {{SITENAME}} ($4) aangemaakt genaamd \"$2\", met wachtwoord \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nU kunt dit bericht negeren als dit account zonder uw medeweten is aangemaakt.",
        "login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "login-abort-generic": "Uw aanmelding is mislukt - Afgebroken",
        "login-migrated-generic": "Uw gebruikersnaam is hernoemd, en uw gebruikersnaam bestaat niet langer op deze wiki.",
        "passwordreset-domain": "Domein:",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Accountgegevens op {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
-       "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
+       "passwordreset-emailtext-ip": "Iemand (waarschijnlijk u, vanaf IP-adres $1) heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. {{PLURAL:$3|Het volgende gebruikersaccount is|De volgende gebruikersaccounts zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
+       "passwordreset-emailtext-user": "Gebruiker $1 op {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. {{PLURAL:$3|Het volgende gebruikersaccount is|De volgende gebruikersaccounts zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTijdelijk wachtwoord: \n$2",
        "passwordreset-emailsentemail": "Als dit e-mailadres aan uw account gekoppeld is, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
        "passwordreset-emailsentusername": "Als er een e-mailadres geregistreerd is voor die gebruikersnaam, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
        "showpreview": "Bewerking ter controle bekijken",
        "showdiff": "Wijzigingen bekijken",
        "blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"$1\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
-       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong> verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
+       "anoneditwarning": "<strong>Waarschuwing:</strong> U bent niet aangemeld.\nUw IP-adres zal voor iedereen zichtbaar zijn als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 zich aanmeldt]</strong> of <strong>[$2 een account aanmaakt]</strong>, verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
        "anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
        "missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"$1\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
        "selfredirect": "<strong>Waarschuwing:</strong> U heeft een doorverwijzing gemaakt naar deze pagina. Mogelijk heeft u de verkeerde bestemming voor de doorverwijzing gebruikt, of bewerkt u de verkeerde pagina. Door nogmaals op \"$1\" te klikken word de doorverwijzing alsnog aangemaakt.",
-       "missingcommenttext": "Plaats uw reactie hieronder.",
+       "missingcommenttext": "Plaats uw reactie.",
        "missingcommentheader": "<strong>Let op:</strong> u hebt geen onderwerp/kop voor deze opmerking opgegeven.\nAls u opnieuw op \"$1\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
        "summary-preview": "Voorvertoning van de bewerkingssamenvatting:",
        "subject-preview": "Voorvertoning van het onderwerp:",
        "previewerrortext": "Er is een fout opgetreden tijdens het weergeven van uw wijzigingen.",
        "blockedtitle": "Gebruiker is geblokkeerd",
-       "blockedtext": "'''Uw gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
-       "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
-       "systemblockedtext": "Uw gebruikersnaam of IP-adres is automatisch geblokkeerd door MediaWiki.\nDe opgegeven reden is:\n\n:<em>$2</em>\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nUw huidige IP-adres is $3.\nVermeld alle bovenstaande gegevens in een query die u maakt.",
+       "blockedtext": "'''Uw gebruikersaccount of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
+       "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het gebruikt is door een andere gebruiker, die geblokkeerd is door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\n\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
+       "systemblockedtext": "Uw gebruikersaccount of IP-adres is automatisch geblokkeerd door MediaWiki.\nDe opgegeven reden is:\n\n:<em>$2</em>\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nUw huidige IP-adres is $3.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "blockednoreason": "geen reden opgegeven",
        "whitelistedittext": "U moet $1 om pagina's te bewerken.",
        "confirmedittext": "U moet uw e-mailadres bevestigen voor u kunt bewerken.\nVoer uw e-mailadres in en bevestig het via uw [[Special:Preferences|voorkeuren]].",
        "accmailtext": "Een willekeurig gegenereerd wachtwoord voor [[User talk:$1|$1]] is verzonden naar $2. Het kan worden gewijzigd op de pagina \"[[Special:ChangePassword|wachtwoord wijzigen]]\" na het aanmelden.",
        "newarticle": "(Nieuw)",
        "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [$1 hulppagina]).\nGebruik de knop <strong>Terug</strong> in uw browser als u hier per ongeluk terecht bent gekomen.",
-       "anontalkpagetext": "----\n<em>Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.</em>\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:CreateAccount|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.",
+       "anontalkpagetext": "----\n<em>Deze overlegpagina hoort bij een anonieme gebruiker die nog geen account heeft aangemaakt, of het niet gebruikt.</em>\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:CreateAccount|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.",
        "noarticletext": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina aanmaken]</span>.",
        "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.",
        "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}}\" bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-       "userpage-userdoesnotexist": "U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of u deze pagina wel wilt aanmaken of bewerken.",
-       "userpage-userdoesnotexist-view": "De gebruiker \"$1\" is niet geregistreerd.",
-       "blocked-notice-logextract": "Deze gebruiker is op het moment geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
+       "userpage-userdoesnotexist": "Gebruikersaccount \"$1\" bestaat niet.\nControleer of u deze pagina wel wilt aanmaken/bewerken.",
+       "userpage-userdoesnotexist-view": "Gebruikersaccount \"$1\" is niet geregistreerd.",
+       "blocked-notice-logextract": "Deze gebruiker is momenteel geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "clearyourcache": "<strong>Opmerking:</strong> nadat u de wijzigingen hebt opgeslagen is het wellicht nodig uw browsercache te legen.\n* <strong>Firefox / Safari:</strong> houd <em>Shift</em> ingedrukt terwijl u op <em>Vernieuwen</em> klikt of druk op <em>Ctrl-F5</em> of <em>Ctrl-R</em> (<em>⌘-Shift-R</em> op een Mac)\n* <strong>Google Chrome:</strong> druk op <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> op een Mac)\n* <strong>Internet Explorer:</strong> houd <em>Ctrl</em> ingedrukt terwijl u op <em>Vernieuwen</em> klikt of druk op <em>Ctrl-F5</em>\n* '''Opera:''' ga naar <em>Menu → Instellingen</em> (<em>Opera → Voorkeuren</em> op een Mac) en daarna naar <em>Privacy & beveiliging → Browsegegevens wissen... →  Tijdelijk opgeslgen afbeeldingen en bestanden</em>.",
        "usercssyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om uw nieuwe CSS te testen alvorens op te slaan.",
        "userjsyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om uw nieuwe JavaScript te testen alvorens op te slaan.",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Indische Oceaan",
        "timezoneregion-pacific": "Stille Oceaan",
-       "allowemail": "E-mail van andere gebruikers toestaan",
+       "allowemail": "Andere gebruikers toestaan mij e-mails te sturen",
        "email-blacklist-label": "Voorkom dat deze gebruikers e-mails naar mij kunnen sturen:",
        "prefs-searchoptions": "Zoeken",
        "prefs-namespaces": "Naamruimten",
        "yourlanguage": "Taal:",
        "yourvariant": "Taalvariant voor inhoud:",
        "prefs-help-variant": "Uw voorkeursvariant of -spelling om de inhoudspagina's van deze wiki in weer te geven.",
-       "yournick": "Tekst voor ondertekening:",
-       "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in uw ondertekening en een datum en tijd van de bewerking.",
+       "yournick": "Tekst voor handtekening:",
+       "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in uw handtekening en de datum en tijd van de bewerking.",
        "badsig": "Ongeldige ondertekening; controleer de HTML-labels.",
        "badsiglength": "Uw ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
        "yourgender": "Hoe wilt u beschreven worden?",
        "email": "E-mail",
        "prefs-help-realname": "Echte naam is optioneel.\nAls u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor uw werk.",
        "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om u uw wachtwoord te e-mailen als u het bent vergeten.",
-       "prefs-help-email-others": "U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.",
+       "prefs-help-email-others": "U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een koppeling op uw gebruikers- en overlegpagina.\nUw e-mailadres wordt niet prijsgegeven als andere gebruikers contact met u opnemen.",
        "prefs-help-email-required": "Hiervoor is een e-mailadres nodig.",
        "prefs-info": "Basisgegevens",
        "prefs-i18n": "Taalinstellingen",
-       "prefs-signature": "Ondertekening",
+       "prefs-signature": "Handtekening",
        "prefs-dateformat": "Datumopmaak",
        "prefs-timeoffset": "Tijdverschil",
        "prefs-advancedediting": "Algemene instellingen",
        "saveusergroups": "{{GENDER:$1|Gebruikersgroepen}} opslaan",
        "userrights-groupsmember": "Lid van:",
        "userrights-groupsmember-auto": "Impliciet lid van:",
-       "userrights-groups-help": "U kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat u een gebruiker niet uit een groep kunt verwijderen nadat u die hebt toegevoegd of vice versa.\n* Een \"#\" betekent dat u dit groepslidmaatschap alleen kunt verlengen. U kunt het niet verkorten.",
+       "userrights-groups-help": "U kunt de groepen wijzigen waar deze gebruiker lid van is:\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat u een gebruiker niet uit een groep kunt verwijderen nadat u die hebt toegevoegd of vice versa.\n* Een \"#\" betekent dat u dit groepslidmaatschap alleen kunt verlengen; u kunt het niet verkorten.",
        "userrights-reason": "Reden:",
        "userrights-no-interwiki": "U hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
        "userrights-nodatabase": "De database $1 bestaat niet of is geen lokale database.",
        "right-edit": "Pagina's bewerken",
        "right-createpage": "Pagina's aanmaken",
        "right-createtalk": "Overlegpagina's aanmaken",
-       "right-createaccount": "Nieuwe gebruikers aanmaken",
+       "right-createaccount": "Nieuwe gebruikersaccounts aanmaken",
        "right-autocreateaccount": "Automatisch aanmelden met een extern gebruikersaccount",
        "right-minoredit": "Bewerkingen als klein markeren",
        "right-move": "Pagina's hernoemen",
        "action-edit": "deze pagina te bewerken",
        "action-createpage": "deze pagina aan te maken",
        "action-createtalk": "deze overlegpagina aan te maken",
-       "action-createaccount": "deze gebruiker aan te maken",
-       "action-autocreateaccount": "dit externe gebruikersaccount automatisch aanmaken",
+       "action-createaccount": "dit gebruikersaccount aan te maken",
+       "action-autocreateaccount": "dit externe gebruikersaccount automatisch aan te maken",
        "action-history": "de geschiedenis van deze pagina te bekijken",
        "action-minoredit": "deze bewerking als klein te markeren",
        "action-move": "deze pagina te hernoemen",
        "recentchanges-legend": "Opties voor recente wijzigingen",
        "recentchanges-summary": "Op deze pagina kunt u de recentste wijzigingen in deze wiki bekijken.",
        "recentchanges-noresult": "Er zijn in deze periode geen wijzigingen gemaakt die aan de criteria voldoen.",
+       "recentchanges-timeout": "Deze zoekopdracht kost te veel tijd. U kunt het opnieuw proberen met andere zoekparameters.",
+       "recentchanges-network": "Vanwege een technische fout kunnen er geen resultaten worden geladen. U kunt proberen de pagina te verversen.",
        "recentchanges-feed-description": "Met deze feed kunt u de recentste wijzigingen in deze wiki bekijken.",
        "recentchanges-label-newpage": "Met deze bewerking is een nieuwe pagina aangemaakt",
        "recentchanges-label-minor": "Dit is een kleine bewerking",
        "recentchanges-submit": "Weergeven",
        "rcfilters-tag-remove": "Verwijder '$1'",
        "rcfilters-legend-heading": "<strong>Lijst met afkortingen:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andere controlehulpmiddelen</strong>",
+       "rcfilters-other-review-tools": "Andere controlehulpmiddelen",
        "rcfilters-group-results-by-page": "Resultaten per pagina groeperen",
        "rcfilters-grouping-title": "Groeperen",
        "rcfilters-activefilters": "Actieve filters",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|uur|uren}}",
        "rcfilters-highlighted-filters-list": "Uitgelicht: $1",
        "rcfilters-quickfilters": "Opgeslagen filters",
-       "rcfilters-quickfilters-placeholder-title": "Nog geen koppelingen opgeslagen",
+       "rcfilters-quickfilters-placeholder-title": "Nog geen filters opgeslagen",
        "rcfilters-quickfilters-placeholder-description": "Om uw filterinstellingen op te slaan en later te kunnen hergebruiken, klik op het bladwijzer pictogram in het Actieve Filter gebied beneden.",
        "rcfilters-savedqueries-defaultlabel": "Opgeslagen filters",
        "rcfilters-savedqueries-rename": "Hernoemen",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Standaard filter aanmaken",
        "rcfilters-savedqueries-cancel-label": "Annuleren",
        "rcfilters-savedqueries-add-new-title": "Huidige filter instellingen opslaan",
+       "rcfilters-savedqueries-already-saved": "Deze filters zijn al opgeslagen",
        "rcfilters-restore-default-filters": "Standaard filters terugzetten",
        "rcfilters-clear-all-filters": "Alle filters verwijderen",
        "rcfilters-show-new-changes": "Toon nieuwste wijzigingen",
-       "rcfilters-search-placeholder": "Filter recente wijzigingen (blader of begin met intypen)",
+       "rcfilters-search-placeholder": "Filter wijzigingen (gebruik het menu of zoek op filternaam)",
        "rcfilters-invalid-filter": "Ongeldig filter",
        "rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergegeven.",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filter-user-experience-level-unregistered-label": "Niet-geregistreerd",
        "rcfilters-filter-user-experience-level-unregistered-description": "Bewerkers die niet zijn aangemeld.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nieuwkomers",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Geregistreerde bewerkers met minder dan 10 bewerkingen en 4 dagen van activiteit.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Geregistreerde bewerkers die minder dan 10 bewerkingen hebben gemaakt of 4 dagen actief zijn geweest.",
        "rcfilters-filter-user-experience-level-learner-label": "Leerlingen",
        "rcfilters-filter-user-experience-level-learner-description": "Geregistreerde bewerkers met meer ervaring dan \"nieuwkomers\", maar minder dan \"ervaren gebruikers\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Ervaren gebruikers",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:niet</strong> $1",
        "rcfilters-exclude-button-off": "Geselecteerde uitsluiten",
        "rcfilters-exclude-button-on": "Geselecteerde uitsluiten",
-       "rcfilters-view-advanced-filters-label": "Geavanceerde filters",
        "rcfilters-view-tags": "Gelabelde bewerkingen",
        "rcfilters-view-namespaces-tooltip": "Filter resultaten op naamruimte",
        "rcfilters-view-tags-tooltip": "Filter resultaten door middel van bewerkingslabels",
        "uploaded-script-svg": "Scriptbaar element \"$1\" in het geüploade SVG-bestand gevonden.",
        "uploaded-hostile-svg": "Onveilige CSS in het \"style\"-element van het geüploade SVG-bestand gevonden.",
        "uploaded-event-handler-on-svg": "Het instellen van de event-handlereigenschappen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
-       "uploaded-href-attribute-svg": "\"href\"-kenmerken in SVG-bestanden zijn alleen toegestaan als koppeling naar http:// of https://. Aangetroffen is  <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> elementen kunnen alleen verwijzen (href) naar data: (ingebed bestand), http:// of https://, of een url-fragment (#, van het document zelf). Voor andere elementen zoals <image> zijn alleen data: en url-fragmenten toegestaan. Probeer afbeeldingen in te voegen wanneer u uw SVG exporteert. Aangetroffen is   <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "href naar onveilig gegevens: URI-doel <code>&lt;$1 $2=\"$3\"&gt;</code> in het geüploade SVG-bestand gevonden.",
        "uploaded-animate-svg": "\"animate\"-label gevonden in het geüploade svg-bestand die href zou kunnen veranderen, met behulp van het \"from\"-attribuut <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Het instellen van de event-handlereigenschappen is geblokkeerd, <code>&lt;$1 $2=\"$3\"&gt;</code> gevonden in het geüploade SVG-bestand.",
        "zip-bad": "Het bestand is een beschadigd of onleesbaar ZIP-bestand.\nDe veiligheid kan niet worden gecontroleerd.",
        "zip-unsupported": "Het bestand is een ZIP-bestand dat gebruik maakt van ZIP-mogelijkheden die MediaWiki niet ondersteunt.\nDe veiligheid kan niet worden gecontroleerd.",
        "uploadstash": "Verborgen uploads",
-       "uploadstash-summary": "Deze pagina biedt toegang tot bestanden die geüpload zijn of nog geüpload worden maar nog niet beschikbaar gemaakt zijn in de wiki. Deze bestanden zijn alleen zichtbaar voor de gebruiker die ze uploadt.",
+       "uploadstash-summary": "Deze pagina biedt toegang tot bestanden die geüpload zijn of nu geüpload worden, maar nog niet beschikbaar gemaakt zijn in de wiki. Deze bestanden zijn alleen zichtbaar voor de gebruiker die ze heeft geüpload.",
        "uploadstash-clear": "Verborgen bestanden weggooien",
        "uploadstash-nofiles": "Er zijn geen verborgen bestanden.",
        "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt, mogelijk doordat uw bewerkingsreferenties zijn verlopen. Probeer het opnieuw.",
        "uploadstash-refresh": "Lijst met bestanden bijwerken",
        "uploadstash-thumbnail": "miniatuurafbeelding weergeven",
        "uploadstash-exception": "Kon de upload niet opslaan in de opslagplaats ($1): \"$2\".",
+       "uploadstash-bad-path": "Pad bestaat niet.",
+       "uploadstash-bad-path-invalid": "Pad is ongeldig.",
+       "uploadstash-bad-path-unknown-type": "Onbekend type \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Miniatuurnaam onbekend.",
+       "uploadstash-bad-path-bad-format": "Sleutel \"$1\" is niet in het juiste formaat.",
+       "uploadstash-file-not-found": "Sleutel \"$1\" niet gevonden in de opslag.",
+       "uploadstash-file-not-found-no-thumb": "Kon geen miniatuur verkrijgen.",
+       "uploadstash-file-not-found-no-object": "Kan geen lokaal bestandsobject voor het miniatuur aanmaken.",
+       "uploadstash-file-not-found-no-remote-thumb": "Ophalen van het miniatuur mislukt: $1\nurl = $2",
+       "uploadstash-file-not-found-not-exists": "Kan het pad niet vinden, of het bestand is geen platte tekst.",
+       "uploadstash-file-too-large": "Kan geen bestand versturen dat groter is dan $1 bytes.",
+       "uploadstash-not-logged-in": "Er is geen gebruiker aangemeld, bestanden moeten van een gebruiker zijn.",
+       "uploadstash-wrong-owner": "Dit bestand ($1) is niet van de huidige gebruiker.",
+       "uploadstash-no-such-key": "Geen sleutel met deze naam ($1), kan de sleutel niet verwijderen.",
+       "uploadstash-no-extension": "Extensie ontbreekt.",
+       "uploadstash-zero-length": "Bestandsgrootte is nul.",
        "invalid-chunk-offset": "Ongeldige chunkoffset",
        "img-auth-accessdenied": "Toegang geweigerd",
        "img-auth-nopathinfo": "PATH_INFO ontbreekt.\nUw server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization voor meer informatie.",
        "log": "Logboeken",
        "logeventslist-submit": "Weergeven",
        "all-logs-page": "Alle openbare logboeken",
-       "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nU kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).",
+       "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nU kunt de lijst filteren door een specifiek logboektype te selecteren, of de gebruikersnaam (hoofdlettergevoelig) of paginatitel (tevens hoofdlettergevoelig) in te geven.",
        "logempty": "Er zijn geen regels in het logboek die voldoen aan deze criteria.",
        "log-title-wildcard": "Pagina's zoeken die met deze tekens beginnen",
        "showhideselectedlogentries": "Geselecteerde logboekregels weergeven of verbergen",
        "listgrouprights-namespaceprotection-namespace": "Naamruimte",
        "listgrouprights-namespaceprotection-restrictedto": "Recht(en) waardoor gebruiker kan bewerken",
        "listgrants": "Toestemmingen",
-       "listgrants-summary": "Hieronder staat een lijst met toestemmingen en de bijbehorende gebruikersrechten. Gebruikers kunnen toepassingen machtigen voor toegang tot hun gebruikers, maar met beperkte rechten gebaseerd op de toestemmingen die de gebruiker aan de toepassing heeft gegeven. Een toepassing die namens een gebruiker handelt, kan nooit rechten gebruiken die een gebruiker niet heeft.\nEr zijn mogelijk [[{{MediaWiki:Listgrouprights-helppage}}|aanvullende  gegevens]] over individuele rechten.",
+       "listgrants-summary": "Hieronder staat een lijst met toestemmingen en de bijbehorende gebruikersrechten. Gebruikers kunnen toepassingen machtigen voor toegang tot hun account, maar met beperkte rechten gebaseerd op de toestemmingen die de gebruiker aan de toepassing heeft gegeven. Een toepassing die namens een gebruiker handelt, kan nooit rechten gebruiken die een gebruiker niet heeft.\nEr zijn mogelijk [[{{MediaWiki:Listgrouprights-helppage}}|aanvullende  gegevens]] over individuele rechten.",
        "listgrants-grant": "Toestemming",
        "listgrants-rights": "Rechten",
        "trackingcategories": "Volgcategorieën",
        "emailuser-title-notarget": "Gebruiker e-mailen",
        "emailpagetext": "Via dit formulier kunt u een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat u hebt opgegeven bij [[Special:Preferences|uw voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar u reageren.",
        "defemailsubject": "E-mail van {{SITENAME}}-gebruiker \"$1\"",
-       "usermaildisabled": "Gebruikerse-mail uitgeschakeld",
+       "usermaildisabled": "Gebruikers-e-mail uitgeschakeld",
        "usermaildisabledtext": "U kunt geen e-mail verzenden naar andere gebruikers op deze wiki",
        "noemailtitle": "Van deze gebruiker is geen e-mailadres bekend",
        "noemailtext": "Deze gebruiker heeft geen geldig e-mailadres opgegeven.",
        "unwatchthispage": "Niet meer volgen",
        "notanarticle": "Is geen pagina",
        "notvisiblerev": "De laatste versie van een andere gebruiker is verwijderd",
-       "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst (inclusief overlegpagina's).",
+       "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst (plus overlegpagina's).",
        "wlheader-enotif": "U wordt per e-mail gewaarschuwd.",
        "wlheader-showupdated": "Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven.",
        "wlnote": "Hieronder {{PLURAL:$1|staat de laaste wijziging|staan de laatste $1 wijzigingen}} in {{PLURAL:$2|het laatste uur|de laatste $2 uur}} per $3 om $4.",
        "sp-contributions-logs": "logboeken",
        "sp-contributions-talk": "overleg",
        "sp-contributions-userrights": "{{GENDER:$1|gebruikersrechtenbeheer}}",
-       "sp-contributions-blocked-notice": "Deze gebruiker is op het moment geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
+       "sp-contributions-blocked-notice": "Deze gebruiker is momenteel geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "sp-contributions-blocked-notice-anon": "Dit IP-adres is geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "sp-contributions-search": "Zoeken naar bijdragen",
        "sp-contributions-username": "IP-adres of gebruikersnaam:",
        "ipbexpiry": "Vervalt (maak een keuze):",
        "ipbreason": "Reden:",
        "ipbreason-dropdown": "*Veelvoorkomende redenen voor blokkades\n** Foutieve informatie invoeren\n** Verwijderen van informatie uit pagina's\n** Spamkoppeling naar externe websites\n** Invoegen van nonsens in pagina's\n** Intimiderend gedrag\n** Misbruik door meerdere gebruikers\n** Onaanvaardbare gebruikersnaam",
-       "ipb-hardblock": "Voorkomen dat aangemelde gebruikers vanaf dit IP-adres kunnen bewerken",
+       "ipb-hardblock": "Aangemelde gebruikers de mogelijkheid ontnemen om vanaf dit IP-adres te bewerken",
        "ipbcreateaccount": "Registreren accounts blokkeren",
-       "ipbemailban": "Gebruiker weerhouden van het sturen van e-mail",
-       "ipbenableautoblock": "Automatisch de IP-adressen van deze gebruiker blokkeren",
+       "ipbemailban": "Gebruiker de mogelijkheid ontnemen om e-mail te versturen",
+       "ipbenableautoblock": "Automatisch het laatste IP-adres van deze gebruiker blokkeren, en alle volgende IP-adressen waarvandaan degene probeert te bewerken",
        "ipbsubmit": "Deze gebruiker blokkeren",
        "ipbother": "Andere duur:",
        "ipboptions": "2 uur:2 hours,1 dag:1 day,3 dagen:3 days,1 week:1 week,2 weken:2 weeks,1 maand:1 month,3 maanden:3 months,6 maanden:6 months,1 jaar:1 year,onbepaald:infinite",
-       "ipbhidename": "Gebruiker in bewerkingen en lijsten verbergen",
-       "ipbwatchuser": "Gebruikerspagina en overlegpagina op volglijst plaatsen",
-       "ipb-disableusertalk": "Voorkomen dat deze gebruiker tijdens de blokkade de eigen overlegpagina kan bewerken",
+       "ipbhidename": "Gebruikersnaam in bewerkingen en lijsten verbergen",
+       "ipbwatchuser": "Gebruikerspagina en overlegpagina van deze gebruiker op de volglijst plaatsen",
+       "ipb-disableusertalk": "Deze gebruiker de mogelijkheid ontnemen om tijdens de blokkade de eigen overlegpagina te bewerken",
        "ipb-change-block": "De gebruiker opnieuw blokkeren met deze instellingen",
        "ipb-confirm": "Blokkade bevestigen",
        "badipaddress": "Geen geldig IP-adres",
        "blockipsuccesssub": "De blokkering is ingesteld",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] is geblokkeerd.<br />\nZie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.",
        "ipb-blockingself": "U staat op het punt uzelf te blokkeren. Weet u zeker dat u dat wilt doen?",
-       "ipb-confirmhideuser": "U staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet u het zeker?",
+       "ipb-confirmhideuser": "U staat op het punt een verborgen gebruiker te blokkeren. Hiermee wordt de gebruikersnaam in alle lijsten en logboekregels verborgen. Weet u het zeker?",
        "ipb-confirmaction": "Weet u zeker dat u dit wilt doen? Selecteer dan het selectievakje \"{{int:ipb-confirm}}\" hieronder.",
        "ipb-edit-dropdown": "Lijst van redenen bewerken",
        "ipb-unblock-addr": "$1 deblokkeren",
        "ipb_expiry_invalid": "Ongeldige duur.",
        "ipb_expiry_old": "Vervaldatum is in het verleden.",
        "ipb_expiry_temp": "Blokkades voor verborgen gebruikers moeten permanent zijn.",
-       "ipb_hide_invalid": "Het is niet mogelijk deze gebruiker te verbergen; deze heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}} uitgevoerd.",
+       "ipb_hide_invalid": "Het is niet mogelijk dit account te verbergen; het heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}}.",
        "ipb_already_blocked": "\"$1\" is al geblokkeerd",
        "ipb-needreblock": "$1 is al geblokkeerd.\nWilt u de instellingen wijzigen?",
        "ipb-otherblocks-header": "Andere {{PLURAL:$1|blokkade|blokkades}}",
        "proxyblocker": "Proxyblocker",
        "proxyblockreason": "Uw IP-adres is geblokkeerd, omdat u gebruik maakt van een open proxyserver.\nNeem contact op met uw internetprovider of uw helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.",
        "sorbsreason": "Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.",
-       "sorbs_create_account_reason": "Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nU kunt geen gebruiker registreren.",
+       "sorbs_create_account_reason": "Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nU kunt geen account aanmaken.",
        "softblockrangesreason": "Anonieme bijdragen zijn niet toegestaan op basis van uw IP-adres ($1). Gelieve in te loggen.",
        "xffblockreason": "Een IP-adres dat u gebruikt is geblokkeerd. Dit staat de X-Forwarded-For van de header. De oorspronkelijke blokkadereden is: $1",
        "cant-see-hidden-user": "De gebruiker die u probeert te blokken is al geblokkeerd en verborgen.\nOmdat u het recht \"hideuser\" niet hebt, kunt u de blokkade van de gebruiker niet bekijken of bewerken.",
        "confirmemail": "E-mailadres bevestigen",
        "confirmemail_noemail": "U hebt geen geldig e-mailadres opgegeven in uw [[Special:Preferences|gebruikersvoorkeuren]].",
        "confirmemail_text": "{{SITENAME}} eist bevestiging van uw e-mailadres voordat u de e-mailmogelijkheden kunt gebruiken.\nKlik op de onderstaande knop om een bevestigingsbericht te ontvangen.\nDit bericht bevat een koppeling met een code.\nOpen die koppeling om uw e-mailadres te bevestigen.",
-       "confirmemail_pending": "Er is al een bevestigingsbericht aan u verzonden.\nAls u recentelijk uw gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat u opnieuw een e-mail laat sturen.",
+       "confirmemail_pending": "Er is al een bevestigingsbericht aan u verzonden.\nAls u recentelijk uw account hebt aangemaakt, wacht dan een paar minuten totdat het bericht aankomt voordat u opnieuw een e-mail laat sturen.",
        "confirmemail_send": "Een bevestigingscode verzenden",
        "confirmemail_sent": "Bevestigingscode verzonden.",
        "confirmemail_oncreate": "Er is een bevestigingscode naar uw e-mailadres verzonden.\nDeze code is niet nodig om u aan te melden, maar u dient deze wel te bevestigen voordat u de e-mailmogelijkheden van deze wiki kunt gebruiken.",
        "confirmemail_success": "Uw e-mailadres is bevestigd.\nU kunt zich nu [[Special:UserLogin|aanmelden]] en de wiki gebruiken.",
        "confirmemail_loggedin": "Uw e-mailadres is nu bevestigd.",
        "confirmemail_subject": "Bevestiging e-mailadres voor {{SITENAME}}",
-       "confirmemail_body": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-       "confirmemail_body_changed": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-       "confirmemail_body_set": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls deze gebruiker *niet* aan u toebehoort, klik dan op de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body": "Iemand, waarschijnlijk u, vanaf IP-adres $1,\nheeft met dit e-mailadres een account \"$2\" aangemaakt op {{SITENAME}}.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat dit account echt aan u toebehoort en de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls u *niet* dit account hebt aangemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_changed": "Iemand, waarschijnlijk u, vanaf IP-adres $1,\nheeft het e-mailadres van het account \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat dit account echt aan u toebehoort en de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls dit account *niet* aan u toebehoort, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_set": "Iemand, waarschijnlijk u, vanaf IP-adres $1,\nheeft het e-mailadres van het account \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat dit account echt aan u toebehoort en de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls dit account *niet* aan u toebehoort, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
        "confirmemail_invalidated": "De e-mailbevestiging is geannuleerd",
        "invalidateemail": "E-mailbevestiging annuleren",
        "notificationemail_subject_changed": "{{SITENAME}} geregistreerd e-mailadres is gewijzigd",
        "notificationemail_subject_removed": "{{SITENAME}} geregistreerd e-mailadres is verwijderd",
-       "notificationemail_body_changed": "Iemand, waarschijnlijk u, met het IP-adres $1, heeft het e-mailadres van de gebruiker \"$2\" op {{SITENAME}} gewijzigd naar \"$3\". \n\nAls u dit niet was, neem dan onmiddellijk contact op met een sitebeheerder.",
-       "notificationemail_body_removed": "Iemand, waarschijnlijk u, met het IP-adres $1, heeft het e-mailadres geregistreerd voor gebruiker \"$2\" verwijderd op {{SITENAME}}. \n\nAls u dit niet was, neem dan onmiddellijk contact op met een sitebeheerder.",
+       "notificationemail_body_changed": "Iemand, waarschijnlijk u, vanaf IP-adres $1, heeft het e-mailadres van het account \"$2\" op {{SITENAME}} gewijzigd naar \"$3\". \n\nAls u dit niet was, neem dan onmiddellijk contact op met een sitebeheerder.",
+       "notificationemail_body_removed": "Iemand, waarschijnlijk u, vanaf IP-adres $1, heeft het e-mailadres van het account \"$2\" verwijderd op {{SITENAME}}. \n\nAls u dit niet was, neem dan onmiddellijk contact op met een sitebeheerder.",
        "scarytranscludedisabled": "[Interwiki-invoeging van sjablonen is uitgeschakeld]",
        "scarytranscludefailed": "[De sjabloon $1 kon niet opgehaald worden]",
        "scarytranscludefailed-httpstatus": "[De sjabloon $1 kon niet opgehaald worden: HTTP $2]",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd",
        "logentry-newusers-newusers": "Gebruikersaccount $1 {{GENDER:$2|is}} aangemaakt",
        "logentry-newusers-create": "Gebruikersaccount $1 {{GENDER:$2|is}} aangemaakt",
-       "logentry-newusers-create2": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1",
-       "logentry-newusers-byemail": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden",
+       "logentry-newusers-create2": "Gebruikersaccount $3 is {{GENDER:$2|aangemaakt}} door $1",
+       "logentry-newusers-byemail": "Gebruikersaccount $3 is {{GENDER:$2|aangemaakt}} door $1 en het wachtwoord is per e-mail verzonden",
        "logentry-newusers-autocreate": "Gebruikersaccount $1 {{GENDER:$2|is}} automatisch aangemaakt",
        "logentry-protect-move_prot": "$1 heeft de beveiligingsinstellingen {{GENDER:$2|verplaatst}} van $4 naar $3",
        "logentry-protect-unprotect": "$1 heeft de beveiliging {{GENDER:$2|opgeheven}} van $3",
        "log-action-filter-upload-overwrite": "Herupload",
        "authmanager-authn-not-in-progress": "Verificatie is niet in uitvoering of de sessiegegevens zijn verloren gegaan. Gelieve opnieuw starten vanaf het begin.",
        "authmanager-authn-no-primary": "De meegeleverde inloggegevens kunnen niet worden geverifieerd.",
-       "authmanager-authn-no-local-user": "De ingevoerde inloggegevens zijn niet geassocieerd met een gebruiker op deze wiki.",
-       "authmanager-authn-no-local-user-link": "De meegeleverde inloggegevens zijn geldig, maar zijn niet gekoppeld aan enige gebruiker op deze wiki. Log in op een andere manier, of creëer een nieuwe gebruiker, en u heeft een optie om uw eerdere inloggegevens van te koppelen.",
+       "authmanager-authn-no-local-user": "De ingevoerde inloggegevens zijn niet gekoppeld aan een gebruiker op deze wiki.",
+       "authmanager-authn-no-local-user-link": "De ingevoerde inloggegevens zijn geldig, maar zijn niet gekoppeld aan een gebruiker op deze wiki. Meld u op een andere manier aan, of maak een nieuw account aan, en u krijgt een optie om uw eerdere inloggegevens aan dat account te koppelen.",
        "authmanager-authn-autocreate-failed": "Het automatisch aanmaken van een lokaal account is mislukt: $1",
        "authmanager-change-not-supported": "De meegeleverde inloggegevens kunnen niet worden gewijzigd, omdat niets deze zou gebruiken.",
        "authmanager-create-disabled": "Het aanmaken van accounts is uitgeschakeld.",
index 62f0c48..3f7ec0d 100644 (file)
@@ -64,7 +64,6 @@
        "underline-never": "କେବେନୁହେଁ",
        "underline-default": "ବ୍ରାଉଜର କିମ୍ବା ସ୍କିନରେ ଆଗରୁ ଥିବା ସୁବିଧା",
        "editfont-style": "ଫଣ୍ଟ ଶୈଳୀକୁ ବଦଳାଇବେ:",
-       "editfont-default": "ବ୍ରାଉଜରରେ ଆଗରୁ ଥିବା ସୁବିଧା",
        "editfont-monospace": "ମନୋସ୍ପେସ ଥିବା ଫଣ୍ଟ",
        "editfont-sansserif": "ସାନ୍ସ-ସେରିଫ ଫଣ୍ଟ",
        "editfont-serif": "ସେରିଫ ଫଣ୍ଟ",
        "savearticle": "ସାଇତିବେ [Save]",
        "savechanges": "ସାଇତିବେ [Save]",
        "publishpage": "ପୃଷ୍ଠା ପ୍ରକାଶ କରନ୍ତୁ",
-       "publishchanges": "ବଦଳଗୁଡିକ ପ୍ରକାଶ କରନ୍ତୁ",
+       "publishchanges": "ବଦଳà¬\97à­\81ଡ଼ିà¬\95 à¬ªà­\8dରà¬\95ାଶ à¬\95ରନà­\8dତà­\81",
        "preview": "ସାଇତିବା ଆଗରୁ ଦେଖନ୍ତୁ",
        "showpreview": "ଦେଖଣା [Preview]",
        "showdiff": "ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "explainconflict": "ଆପଣ ବଦଳାଇବା ଆରମ୍ଭ କରିବା ଭିତରେ କେହିଜଣେ ଏହି ପୃଷ୍ଠାକୁ ବଦଳାଇଛନ୍ତି ।\nଉପର ଲେଖା ଜାଗାଟି ଏହା ଯେମିତି ଅଛି ସେମିତି ଥିବା ଲେଖାଟି ଦେଖାଉଛି ।\nତଳ ଜାଗାଟିରେ ଆପଣ କରିଥିବା ବଦଳ ଦେଖାଉଛି ।\nଏବେ ଥିବା ଲେଖାରେ ଆପଣଙ୍କୁ ନିଜ ବଦଳକୁ ମିଶାଇବାକୁ ହେବ ।\nଯଦି ଆପଣ \"$1\" ଦବାନ୍ତି ତେବେ '''କେବଳ''' ଉପର ଲେଖାଟି ସାଇତା ହୋଇଯିବ ।",
        "yourtext": "ଆପଣଙ୍କ ଲେଖା",
        "storedversion": "ସାଇତା ସଙ୍କଳନ",
-       "nonunicodebrowser": "'''ଚେତାବନୀ: ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଇଉନିକୋଡ଼ ସଚଳ କରାଯାଇନାହିଁ ।'''\nଏକ ୱର୍କାଆରାଉଣ୍ଡ ଏକ ଏହିପରି ଜାଗା ଯାହା ଆପଣଙ୍କୁ ନିରାପଦ ଭାବରେ ପୃଷ୍ଠା ସମ୍ପାଦନ କରିବାରେ ସାହାଯ୍ୟ କରିଥାଏ: ଅଣ-ASCII ଅକ୍ଷରସମୂହ ସମ୍ପାଦନା ଘରେ ହେକ୍ସାଡେସିମାଲ କୋଡ଼ ରୂପେ ଦେଖାଯିବ ।",
        "editingold": "'''ଚେତାବନୀ: ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ଅଚଳ ପୁରାତନ ସଙ୍କଳନକୁ ବଦଳାଉଛନ୍ତି ।'''\nଯଦି ଆପଣ ଏହାକୁ ସାଇତିବେ, ନୂଆ ସଙ୍କଳନ ଯାଏଁ କରାଯାଇଥିବା ସବୁ ବଦଳ ନଷ୍ଟ ହୋଇଯିବ ।",
        "yourdiff": "ତଫାତ",
        "copyrightwarning": "ଦୟାକରି ଜାଣିରଖନ୍ତୁ ଯେ {{SITENAME}}କୁ ସବୁଯାକ ଅବଦାନ $2 ଅଧିନରେ ପ୍ରକାଶ କରାଯିବ । (ଅଧିକ ଜାଣିବା ପାଇଁ $1 ଦେଖନ୍ତୁ)\nଯଦି ଆପଣ ନିଜର ଲେଖା ନିର୍ଦୟ ଭାବେ ସମ୍ପାଦିତ ହେଉ ବୋଲି ଚାହୁଁନାହାନ୍ତି ବା ବଣ୍ଟନ କରାଯାଉ ବୋଲି ଚାହୁଁ ନାହାନ୍ତି ତେବେ ତାହା ଏଠାରେ ଦିଅନ୍ତୁ ନାହିଁ ।<br />\nଆପଣ ଆମପକ୍ଷେ ମଧ୍ୟ ପ୍ରତିଜ୍ଞା କରୁଛନ୍ତି ଯେ ଏହା ଆପଣ ନିଜେ ଲେଖିଛନ୍ତି, କିମ୍ବା ଏକ ପବ୍ଲିକ ଡୋମେନରୁ ବା ମାଗଣା ଓ ଖୋଲା ଲାଇସେନ୍ସ ଥିବା ସାଇଟରୁ ନକଲ କରି ଆଣିଛନ୍ତି ।\n'''ଅନୁମତି ବିନା ସ୍ଵତ୍ତ୍ଵାଧିକାର ଥିବା କାମ ଏଠାରେ ଦିଅନ୍ତୁ ନାହିଁ !'''",
        "block": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
        "unblock": "ବାସନ୍ଦ ହୋଇଥିବା ସଭ୍ୟଙ୍କୁ ମୁକୁଳାଇବେ",
        "blockip": "{{GENDER:$1|ଜଣ ସଭ୍ୟଙ୍କୁ}} ଅଟକାନ୍ତୁ",
-       "blockip-legend": "ସଭ୍ୟଙ୍କୁ ବାସନ୍ଦ କରିବେ",
        "blockiptext": "ଏକ ନିର୍ଦିଷ୍ଟ IP ଠିକଣା ବା ବ୍ୟବହାରକାରୀଙ୍କ ଲେଖିବା ସୁବିଧାକୁ ବାରାଁ କରିବା ନିମନ୍ତେ ଏହି ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରନ୍ତୁ ।\nଏହା କେବଳ ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କରାଯାଇଥାଏ, ଏହା [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ କରାଯାଇଥାଏ ।\nଏହା ତଳେ ଏକ ନିର୍ଦିଷ୍ଟ କାରଣ ଦିଅନ୍ତୁ (ଯଥା, ଯେଉଁସବୁ ପୃଷ୍ଠାରେ କିଛି ପ୍ରକାରର ଅପବ୍ୟବହାର କରାଯାଇଛି) ।",
        "ipaddressorusername": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
        "ipbexpiry": "ମିଆଦ:",
index 5398d0f..8884b0b 100644 (file)
        "anontalk": "Bavouér",
        "navigation": "Navigachon",
        "and": "&#32;pi",
-       "qbfind": "Trouvoèr",
-       "qbbrowse": "Trifouille",
-       "qbedit": "Editer",
-       "qbpageoptions": "Chol pache-lo",
-       "qbmyoptions": "Mes paches",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Acchons",
        "namespaces": "Éspaces d'chés noms",
        "variants": "Ércanjantes",
        "edit-local": "Modifier el déscripcion locale",
        "create": "Créer",
        "create-local": "Ajouter ène déscripcion locale",
-       "editthispage": "Éditer chl'pache-lo",
-       "create-this-page": "Créer chl'pache lo",
        "delete": "Défacer",
-       "deletethispage": "Défacer chl'pache lo",
-       "undeletethispage": "n'poin défacer chol pache",
        "undelete_short": "Déface poin {{PLURAL:$1|un édite|$1 édites}}",
        "viewdeleted_short": "{{PLURAL:$1|eune édition défacée|$1  éditions défacées}}",
        "protect": "Garantir",
        "protect_change": "canger",
-       "protectthispage": "Défènner l'pache",
        "unprotect": "Canger l'garantie",
-       "unprotectthispage": "Canger la garantie ed chol pache",
        "newpage": "Nouvèle pache",
-       "talkpage": "Alédjer l'pache-lo",
        "talkpagelinktext": "Dviser",
        "specialpage": "Pache éspéchiale",
        "personaltools": "Otis dech uzeu",
-       "articlepage": "Vir el pache ed ches étnus",
        "talk": "distchuter",
        "views": "Vues",
        "toolbox": "Boéte à otis",
        "tool-link-userrights": "Modifier chés groupes éd {{GENDER:$1|l’uzeu|l’uzeuse}}",
        "tool-link-userrights-readonly": "Vir chés {{GENDER:$1|groupes d'uzeu}}",
        "tool-link-emailuser": "Invouéyer un courriel à {{GENDER:$1|l’uzeu|l’uzeuse}}",
-       "userpage": "Vir el pache dech uzeu",
-       "projectpage": "Vir l'pache dech prodjé",
        "imagepage": "Vir el pache dech fichié",
        "mediawikipage": "Vir messache pache",
        "templatepage": "Vir el pache dech modéle",
        "recentchanges": "Darins canjemints",
        "recentchanges-legend": "Opchons éd chés nouvieus canjemints",
        "recentchanges-feed-description": "Tracher chés pus darins cangemints du wiki din chol alimintachon.",
-       "recentchanges-label-newpage": "Chol modificacion ale o créé eune nouvèle pache",
+       "recentchanges-label-newpage": "Chol modificacion al o créé eune nouvèle pache",
        "recentchanges-label-minor": "C'est un tiot canjemint",
        "recentchanges-label-bot": "Chol modificacion ale o té foaite pèr un robot.",
        "recentchanges-label-unpatrolled": "Chol modificacion ale n’o poin coèr té controlée.",
+       "recentchanges-label-plusminus": "Él taille deul pache al o cangé éd chol nombe d’octets.",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vir étou èl [[Special:NewPages|lisse des nouvèles paches]]).",
+       "rcfilters-legend-heading": "<strong>Lisse des abréviacions :</strong>",
        "rcnotefrom": "Vlo chés modificacions foaites édpuis l' '''$2''' (dousqu'à '''$1''' au plus).",
        "rclistfrom": "Montrer chés nouvieus cangemints d'puis $3 $2",
        "rcshowhideminor": "$1 tiotes éditions",
        "whatlinkshere-filters": "Filtes",
        "block": "Blotcher l'uzeu",
        "blockip": "Blotcher l'uzeu",
-       "blockip-legend": "Blotcher l'uzeu",
        "blockiptext": "Uzer dech teske-lo pour blotcher l’ahérse aux canjemints foaits dpui eune adrèche IP éspéchifique o bin d’un nom d’uzeu.\nI feut l'foaire seleumint pour inréyer ech vindalime et pi i feut ète acordant aveuc chés [[{{MediaWiki:Policy-url}}|usages intérnes]].\nDonner apré ch'motif  (pèr egzimpe chiter chés paches qu'ont té vindalisées).",
        "ipboptions": "2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 ésminne:1 week,2 ésminnes:2 weeks,1 moés:1 month,3 moés:3 months,6 moés:6 months,1 an:1 year,infini:infinite",
        "blocklist": "Uzeus blotchés",
        "version-specialpages": "Paches éspéchiales",
        "fileduplicatesearch": "Dénicher chés doublons",
        "specialpages": "Paches éspéchiales",
-       "specialpages-note": "* Paches éspéchiales conformes.\n* <span class=\"mw-specialpagerestricted\">Paches éspéchiales réstrintes.</span>\n* <span class=\"mw-specialpagecached\">Paches éspéchiales seulemint in muche (pétète des viuseries).</span>",
        "specialpages-group-maintenance": "Rapports d'maintenanche",
        "specialpages-group-other": "Eutes paches éspéchiales",
        "specialpages-group-changes": "Darins canjemints pi gazètes",
index c74c197..0caf39a 100644 (file)
@@ -92,7 +92,8 @@
                        "InternerowyGołąb",
                        "Wojtas",
                        "Kastanoto",
-                       "Sebek Adamowicz"
+                       "Sebek Adamowicz",
+                       "Cholewka"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "yourtext": "Twój tekst",
        "storedversion": "Zapisana wersja",
        "editingold": "'''Uwaga! Edytujesz starszą niż bieżąca wersję tej strony.\nJeśli ją zapiszesz, wszystkie zmiany wykonane w międzyczasie zostaną wycofane.'''",
+       "unicode-support-fail": "Wygląda na to, że Twoja przeglądarka nie obsługuje Unikodu. Jest on wymagany do edytowania stron, więc Twoja edycja nie została zapisana.",
        "yourdiff": "Różnice",
        "copyrightwarning": "Wkład na {{SITENAME}} jest udostępniany na licencji $2 (szczegóły w $1). Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />\nZapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych.\n'''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''",
        "copyrightwarning2": "Wszelki wkład na {{SITENAME}} może być edytowany, zmieniany lub usunięty przez innych użytkowników.\nJeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />\nZapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych (zobacz także $1).\n'''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Ocean Indyjski",
        "timezoneregion-pacific": "Ocean Spokojny",
-       "allowemail": "Zgadzam się, by inni użytkownicy mogli przesyłać do mnie e‐maile",
+       "allowemail": "Inni użytkownicy mogą przesyłać do mnie e‐maile",
        "prefs-searchoptions": "Wyszukiwanie",
        "prefs-namespaces": "Przestrzenie nazw",
        "default": "domyślnie",
        "prefs-editor": "Edytor",
        "prefs-preview": "Podgląd",
        "prefs-advancedrc": "Zaawansowane",
+       "prefs-opt-out": "Rezygnacja z ulepszeń",
        "prefs-advancedrendering": "Zaawansowane",
        "prefs-advancedsearchoptions": "Zaawansowane",
        "prefs-advancedwatchlist": "Zaawansowane",
        "recentchanges-legend": "Opcje ostatnich zmian",
        "recentchanges-summary": "Ta strona przedstawia historię ostatnich zmian w tej wiki.",
        "recentchanges-noresult": "Brak zmian w wybranym okresie spełniających twoje kryteria.",
+       "recentchanges-network": "Z powodu błędu technicznego nie można załadować żadnych wyników. Spróbuj odświeżyć stronę.",
        "recentchanges-feed-description": "Obserwuj najświeższe zmiany w tej wiki.",
        "recentchanges-label-newpage": "W tej edycji utworzono nową stronę",
        "recentchanges-label-minor": "To jest drobna zmiana",
        "recentchanges-submit": "Pokaż",
        "rcfilters-tag-remove": "Usuń '$1'",
        "rcfilters-legend-heading": "<strong>Wykaz skrótów:</strong>",
-       "rcfilters-other-review-tools": "<strong>Inne narzędzia do sprawdzania</strong>",
+       "rcfilters-other-review-tools": "Inne narzędzia do sprawdzania",
        "rcfilters-group-results-by-page": "Grupuj wyniki według stron",
        "rcfilters-grouping-title": "Grupowanie",
        "rcfilters-activefilters": "Aktywne filtry",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|godzina|godziny|godzin}}",
        "rcfilters-highlighted-filters-list": "Podświetlono: $1",
        "rcfilters-quickfilters": "Zapisane filtry",
-       "rcfilters-quickfilters-placeholder-title": "Nie masz jeszcze zapisanych linków",
+       "rcfilters-quickfilters-placeholder-title": "Nie masz jeszcze zapisanych filtrów",
        "rcfilters-quickfilters-placeholder-description": "Aby zapisać ustawienia filtrów i używać ich później, kliknij ikonkę zakładki w polu aktywnych filtrów znajdującym się niżej.",
        "rcfilters-savedqueries-defaultlabel": "Zapisane filtry",
        "rcfilters-savedqueries-rename": "Zmień nazwę",
        "rcfilters-restore-default-filters": "Przywróć domyślne filtry",
        "rcfilters-clear-all-filters": "Wyczyść filtry",
        "rcfilters-show-new-changes": "Zobacz nowsze zmiany",
-       "rcfilters-search-placeholder": "Filtruj ostatnie zmiany (przeglądaj lub zacznij wpisywać)",
+       "rcfilters-search-placeholder": "Filtruj zmiany (użyj menu lub wyszukaj według nazwy filtra)",
        "rcfilters-invalid-filter": "Nieprawidłowy filtr",
        "rcfilters-empty-filter": "Brak aktywnych filtrów. Wyświetlane są wszystkie zmiany.",
        "rcfilters-filterlist-title": "Filtry",
-       "rcfilters-filterlist-whatsthis": "Jak działają?",
+       "rcfilters-filterlist-whatsthis": "Jak to działa?",
        "rcfilters-filterlist-feedbacklink": "Napisz co sądzisz o tych nowych narzędziach filtrowania",
        "rcfilters-highlightbutton-title": "Podświetl wyniki",
        "rcfilters-highlightmenu-title": "Wybierz kolor",
        "rcfilters-filter-user-experience-level-unregistered-label": "Niezarejestrowani",
        "rcfilters-filter-user-experience-level-unregistered-description": "Niezalogowani",
        "rcfilters-filter-user-experience-level-newcomer-label": "Początkujący",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Zarejestrowani edytorzy z mniej niż 10 edycji i 4 dni aktywności.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Zarejestrowani edytorzy, którzy mają mniej niż 10 edycji lub 4 dni aktywności.",
        "rcfilters-filter-user-experience-level-learner-label": "Uczący się",
        "rcfilters-filter-user-experience-level-learner-description": "Zarejestrowani edytujący, których doświadczenie plasuje się między „Nowicjuszami”, a „Doświadczonymi użytkownikami”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Doświadczeni użytkownicy",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nie z</strong> $1",
        "rcfilters-exclude-button-off": "Wyklucz zaznaczone",
        "rcfilters-exclude-button-on": "Zaznaczone są wykluczone",
-       "rcfilters-view-advanced-filters-label": "Zaawansowane filtry",
        "rcfilters-view-tags": "Edycje ze znacznikami zmian",
        "rcfilters-view-namespaces-tooltip": "Przefiltruj wyniki według przestrzeni nazw",
        "rcfilters-view-tags-tooltip": "Przefiltruj wyniki według znaczników zmian",
        "rcfilters-view-return-to-default-tooltip": "Wróć do głównego menu filtra",
+       "rcfilters-view-tags-help-icon-tooltip": "Dowiedz się więcej o znacznikach zmian",
        "rcfilters-liveupdates-button": "Aktualizacje na bieżąco",
        "rcfilters-liveupdates-button-title-on": "Wyłącz aktualizacje na bieżąco",
        "rcfilters-liveupdates-button-title-off": "Wyświetlaj nowe zmiany zaraz po tym jak nastąpią",
        "rcfilters-watchlist-edit-watchlist-button": "Edytuj swoją listę obserwowanych stron",
        "rcfilters-watchlist-showupdated": "<strong>Wytłuszczono</strong> strony, których nie odwiedził{{GENDER:|e|a|e}}ś od czasu zapisania ostatnich zmian.",
        "rcfilters-preference-label": "Wyłącz ulepszenia strony Ostatnie zmiany",
+       "rcfilters-preference-help": "Wycofuje wszystkie zmiany interfejsu z 2017 i narzędzia dodane od tamtej pory.",
        "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfromreset": "Zresetuj wybór daty",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "uploadstash-refresh": "Odśwież listę plików",
        "uploadstash-thumbnail": "pokaż miniaturkę",
        "uploadstash-exception": "Nie udało się zapisać przesyłanego pliku w magazynie tymczasowym ($1): „$2”.",
+       "uploadstash-bad-path": "Ścieżka nie istnieje.",
+       "uploadstash-bad-path-invalid": "Ścieżka jest nieprawidłowa.",
        "invalid-chunk-offset": "Nieprawidłowe przesunięcie fragmentu",
        "img-auth-accessdenied": "Odmowa dostępu",
        "img-auth-nopathinfo": "Brak PATH_INFO.\nSerwer nie został skonfigurowany, tak aby przekazywał tę informację.\nMożliwe, że jest oparty na CGI i nie może obsługiwać img_auth.\nWięcej o informacji o autoryzacji grafik na https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "log": "Rejestr operacji",
        "logeventslist-submit": "Pokaż",
        "all-logs-page": "Wszystkie publiczne operacje",
-       "alllogstext": "Wspólny rejestr wszystkich typów operacji dla {{GRAMMAR:D.lp|{{SITENAME}}}}.\nMożesz zawęzić liczbę wyników poprzez wybranie typu rejestru, nazwy użytkownika albo tytułu strony.",
+       "alllogstext": "Wspólny rejestr wszystkich typów operacji dla {{GRAMMAR:D.lp|{{SITENAME}}}}.\nMożesz zawęzić liczbę wyników poprzez wybranie typu rejestru, nazwy użytkownika lub tytułu strony.",
        "logempty": "W rejestrze nie znaleziono pozycji odpowiadających zapytaniu.",
        "log-title-wildcard": "Szukaj tytułów zaczynających się od tego tekstu",
        "showhideselectedlogentries": "Zmień widoczność wybranych wpisów rejestru",
        "blocklist-timestamp": "Sygnatura czasowa",
        "blocklist-target": "Cel",
        "blocklist-expiry": "Upływa",
-       "blocklist-by": "Administrator blokujący",
+       "blocklist-by": "Blokujący administrator",
        "blocklist-params": "Parametry blokad",
        "blocklist-reason": "Powód",
        "ipblocklist-submit": "Szukaj",
index 4d2cc3d..6c15199 100644 (file)
        "databaseerror-query": "تپوس: $1",
        "databaseerror-function": "کړنه: $1",
        "databaseerror-error": "تېروتنه: $1",
+       "transaction-duration-limit-exceeded": "د لوړ عکس العمل د منځګړیتوب څخه مخنیوي لپاره، دا لیږد رد شو ځکه چې د لیک لیک ($1) د $2 دویم محدوديت څخه تیریږي.\nکه تاسو په یوه وخت کې ډیری توکي بدلولی شئ، په ځای یې د ډیرو کوچنیو عملیاتو کولو هڅه وکړئ.",
        "laggedslavemode": "'''گواښنه:''' په دې مخ کې کېدای شي تازه اوسمهالېدنې نه وي.",
        "readonly": "توکبنسټ تړل شوی",
        "enterlockreason": "د بنديز يو سبب وليکۍ، او همداراز د بنديز د ليرې کېدلو يوه اټکليزه نېټه هم څرگنده کړۍ",
+       "readonlytext": "ډیټابیس اوس مهال د نویو ثبتونو او نورو ترمیمونو سره تړلی دی، شاید د معمول ډیټابیس ساتنه لپاره، وروسته له هغې چې دا به نورمال ته راشي.\n\nد سیسټم مدیر چې چا بند کړی یې یې دا توضیحي وړاندیز کړی: $1",
        "missing-article": "توکبنسټ د \"$1\" $2 په نامه د ورکړ شوي مخ متن چې بايد موندلی يې وای، و نه موند.\n\nدا ستونزه اکثراً د يوه ړنگ شوي مخ د پېښليک يا توپير د تړنو په څارلو کې رامېنځ ته کېږي.\n\nکه چېرته داسې نه وي، نو بيا کېدای شي چې په ساوترې کې کومه تېروتنه رابرسېره شوې وي.\nلطفاً د دې چارې راپور د URL په نښه کولو سره يوه [[Special:ListUsers/sysop|پازوال]] ته ورکړۍ.",
        "missingarticle-rev": "(مخليدنه#: $1)",
        "missingarticle-diff": "(توپير: $1، $2)",
        "readonly_lag": "د اصلي توکبنسټ سره د فرعي توکبنسټ پالنگرانو د همغاړېتوب پخاطر دا توکبنسټ په خپلکاره توگه تړل شوی",
+       "nonwrite-api-promise-error": "ژمنه - غیر-لیک-API-Action 'HTTP سرپرست واستول شو مګر دا غوښتنه د API لیکل ماډل ته وه.",
        "internalerror": "کورنۍ تېروتنه",
        "internalerror_info": "کورنۍ تېروتنه: $1",
+       "internalerror-fatal-exception": "د \"$1\" ډول ډول ډول ډول استثناء",
        "filecopyerror": "د \"$1\" په نامه دوتنه مو \"$2\" ته و نه لمېسلای شوه.",
        "filerenameerror": "د \"$1\" په نامه د دوتنې نوم \"$2\" ته بدل نه شو.",
        "filedeleteerror": "د \"$1\" دوتنه ړنگه نه شوه.",
        "directorycreateerror": "د \"$1\" په نامه ليکلړ جوړ نه شو.",
+       "directoryreadonlyerror": "ډایرکټري \"$1\" یواځې لوستل دي.",
+       "directorynotreadableerror": "ډایرکټري \"$1\" د لوست وړ ندی.",
        "filenotfound": "د \"$1\" دوتنه مو و نه موندله.",
        "unexpected": "نا اټکله شمېره: \"$1\"=\"$2\".",
        "formerror": "ستونزه: فورمه مو و نه سپارل شوه",
        "badarticleerror": "په دې مخ دا کړنه نه شي ترسره کېدلای.",
        "cannotdelete": "د \"$1\" مخ يا دوتنې ړنگېدنه ترسره نه شوه.\nکېدای شي چې وار دمخې دا کوم بل چا ړنگه کړې وي.",
        "cannotdelete-title": "د \"$1\" مخ نشي ړنگېدای",
+       "delete-hook-aborted": "ړنګول د هک په واسطه وتړل شو.\nدې توضیحات نه ورکوي.",
+       "no-null-revision": "د \"$1\" مخ لپاره نوی ناباوره بیاکتنه نشي کولی",
        "badtitle": "ناسم سرليک",
        "badtitletext": "ستاسې د غوښتل شوي مخ سرليک سم نه وو، يا مو د سرليک ځای تش وو او يا هم د ژبو خپلمنځي تړنې څخه يا د ويکي گانو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.\nکېدای شي چې ستاسې په ورکړ شوي سرليک کې يو يا څو داسې توري وي چې د سرليک په توگه بايد و نه کارېږي.",
+       "title-invalid-empty": "د غوښتل شوي مخ سرلیک خالي دی یا د نوم نوم ځای یوازې نوم لري.",
+       "title-invalid-utf8": "د غوښتل شوي پاڼې سرلیک یو ناباوره UTF-8 ترتیب لري.",
        "title-invalid-interwiki": "په سرليک کې يوه ويکي خپلمنځي تړنه ده",
+       "title-invalid-talk-namespace": "د غوښتل شوي مخ عنوان د خبرو پاڼې ته اشاره کوي چې شتون نلري.",
+       "title-invalid-characters": "د غوښتل شوي مخ سرلیک غلط ډولونه لري: \"$1\".",
+       "title-invalid-relative": "سرلیک اړیکې لري. د اړیکو پاڼې سرلیکونه (./، ​​../) ناباوره دي، ځکه چې دوی به ډیری وختونه غیر فعال وي کله چې د کارن د لټونګر لخوا اداره کیږي.",
+       "title-invalid-magic-tilde": "د غوښتل شوي مخ سرلیک د ناباوره جادو ټیلډ ترتیب لري (<nowiki >~~~</ nowiki>).",
+       "title-invalid-too-long": "د غوښتل شوې پاڼې سرلیک اوږده دی. دا باید د $ 1 څخه ډیر نه وي {{PLURAL: $1 | بټی | بايټس}} په UTF-8 انکینډ کې.",
+       "title-invalid-leading-colon": "د غوښتل شوي پاڼې سرلیک په پیل کې یو ناسمه برنامه لري.",
        "perfcached": "لاندينی اومتوک په حافظه کې ساتل شوی او کېدای شي اوسمهاله شوی نه وي.  اکثر بريد له مخې {{PLURAL:$1|يوه پايله|$1 پايلې}} په حافظه کې شته.",
        "perfcachedts": "لاندې راغلی اومتوک په حافظه کې ساتل شوی او وروستی ځل په $1 هم مهاله شوی. په ساتلې حافظې کې ډېر تر ډېره {{PLURAL:$4|يوه پايله ده|$4 پايلې دي}}.",
        "querypage-no-updates": "د دې مخ اوسمهالېدنې ناچارن شوي.\nپه ښکاره توگه د دې ځای اومتوک به نه وي تازه شوي.",
        "viewsource": "سرچينه کتل",
        "viewsource-title": "د $1 سرچينه کتل",
        "actionthrottled": "د دې کړنې مخنيوی وشو",
+       "actionthrottledtext": "د ناوړه چلند ضد اقدام په توګه، تاسو د دې عمل ترسره کولو څخه لږ وخت په لنډ وخت کې محدود یاست، او تاسو له دې حد څخه تیر شوی.\nلطفا په څو دقیقو کې بیا بیا هڅه وکړئ.",
        "protectedpagetext": "دا مخ د سمون او نورو کړنو د ترسره کولو په تکل ژغورل شوی.",
        "viewsourcetext": "تاسې د دې مخ سرچينه کتلی او لمېسلی شی.",
        "viewyourtext": "په دې مخ کې <strong>تاسې د خپلو سمونونو</strong> سرچينه کتلی او لمېسلی شی.",
        "protectedinterface": "دا مخ د دې ويکي د ساوترې د ليدنمخ متن لري، او د ورانکارۍ په خاطر ژغورل شوی.\nپه ټولو ويکي گانو کې د ژباړې د ورگډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [https://translatewiki.net/ translatewiki.net] وکاروۍ.",
        "editinginterface": "<strong>گواښنه:</strong> تاسې چې په دې مخ کې بدلون راولۍ همدا مخ د يوې ساوترې د ليدنمخ متن په توگه کارېږي.\nد دې مخ بدلون به د ټولو کارنانو لپاره د ليدنمخ بڼه اغېزمنه کړي.",
+       "translateinterface": "د ټولو ويکي ګانو دژباړې لپاره لطفا  [https://translatewiki.net/ ژباړه ويکي. نيټ]، څخه کار واخلي. د ميډياويکي سيمه ييز کولو پروژه.",
+       "cascadeprotected": "دا پاڼه د سمولو څخه خوندي شوې ده، ځکه چې دا په لاندې {{PLURAL:$1 |ډول}} دی.\n$2",
        "namespaceprotected": "تاسې د '''$1''' په نوم-تشيال کې د مخونو د سمولو اجازه نه لرۍ.",
        "customcssprotected": "تاسې د دې CSS مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.",
        "customjsprotected": "تاسې د دې جاواسکرېپټ مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.",
        "mypreferencesprotected": "تاسې د خپلو غوره توبونو د سمولو اجازه نلرۍ.",
        "ns-specialprotected": "ځانگړي مخونو کې سمون او بدلون نه شی راوستلای.",
        "titleprotected": "د [[User:$1|$1]] لخوا د دې سرليک د جوړېدلو مخنيوی شوی.\nاو د دې کړنې سبب <em>$2</em> ورکړ شوی.",
+       "filereadonlyerror": "د \"$1\" دوتنې سمولو توان نلري ځکه چې د دوتنې ذخیره \"$2\" د لوستلو یواځې موډل کې ده.\n\nد سیسټم مدیر چې چا یې بند کړی دی دا توضیحي وړاندیز کړی: \"$3\".",
        "invalidtitle-knownnamespace": "ناسم سرليک د \"$2\" نومتشيال او \"$3\" متن سره",
        "invalidtitle-unknownnamespace": "ناسم سرليک د ناڅرگند نومتشيال شمېرې $1 او \"$2\" متن سره",
        "exception-nologin": "غونډال کې نه ياست ننوتي",
        "virus-unknownscanner": "ناڅرگند ضدويروس:",
        "logouttext": "'''اوس تاسې د غونډال څخه ووتلئ.'''\n\nدا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
        "cannotlogoutnow-title": "وس نسم کولاي بهر تري ووځم",
+       "cannotlogoutnow-text": "وتل ناممکنه دي تر څو چي $1 کاروي.",
        "welcomeuser": "$1، ښه راغلې!",
        "welcomecreation-msg": "گڼون مو جوړ شو.\nد [[Special:Preferences|{{SITENAME}} غوره توبونه]] بدلول مو مه هېروۍ.",
        "yourname": "کارن-نوم:",
        "createacct-yourpasswordagain-ph": "پټنوم مو بيا وټاپئ",
        "userlogin-remembermypassword": "غونډال کې مې ننوتلی وساته",
        "userlogin-signwithsecure": "خوندي اړيکتيا کارول",
+       "cannotlogin-title": "نسم کولای چې دننه سم",
+       "cannotlogin-text": "وتل ناممکنه دي",
        "cannotloginnow-title": "نسم کولای چې دننه سم",
+       "cannotloginnow-text": "ننوتل ناممکنه دي تر څو چي $1 کاروي.",
        "cannotcreateaccount-title": "گڼونونه نه شي جوړېدای",
+       "cannotcreateaccount-text": "په دې ويکي کې د مستقيم ګڼون جوړول ناممکنه دي.",
        "yourdomainname": "ستاسې شپول:",
        "password-change-forbidden": "تاسې په دې ويکي باندې خپل پټنوم نه شی بدلولی.",
+       "externaldberror": "د یا د تصدیق کولو ډیټابیس تېروتنه وه یا تاسو ته د خپل بهرني حساب نوي کولو اجازه نه لرئ.",
        "login": "ننوتل",
+       "login-security": "خپل هویت تایید کړئ",
        "nav-login-createaccount": "ننوتل / گڼون جوړول",
        "logout": "وتل",
        "userlogout": "وتل",
        "userlogin-resetpassword-link": "پټنوم مو هېر شوی؟",
        "userlogin-helplink2": "په ننوتلو کې مرسته",
        "userlogin-loggedin": "تاسې له پخوا څخه د {{GENDER:$1|$1}} په نوم ننوتلي ياست.\nد لاندينۍ فورمې په کارولو سره تاسې د بل کارن په توگه ننوتلی شی.",
+       "userlogin-reauth": "تاسو بايد ننوځي بیا تصدیق وکړئ چې تاسو {{GENDER:$1|$1}} یاست.",
        "userlogin-createanother": "بل گڼون جوړول",
        "createacct-emailrequired": "برېښليک پته",
        "createacct-emailoptional": "برېښليک پته (اختياري)",
        "createacct-email-ph": "برېښليک پته مو وټاپئ",
        "createacct-another-email-ph": "برېښليک پته مو ورکړئ",
        "createaccountmail": "يو لنډمهاله ناټاکلی پټنوم کارول او ځانگړې شوې برېښليک پتې ته ورلېږل",
+       "createaccountmail-help": "د کاروونې زده کړې پرته د بل چا لپاره د حساب جوړولو لپاره کارول کیدی شي.",
        "createacct-realname": "آر نوم (اختياري)",
        "createacct-reason": "سبب",
        "createacct-reason-ph": "تاسې ولې بل گڼون جوړوئ؟",
+       "createacct-reason-help": "پیغام د حساب جوړونې په نښه کې ښودل شوی",
        "createacct-submit": "گڼون مو جوړ کړئ",
        "createacct-another-submit": "گڼون جوړول",
        "createacct-continue-submit": "د گڼون جوړول شروع کړي.",
        "createacct-benefit-body2": "{{PLURAL:$1|مخ|مخونه}}",
        "createacct-benefit-body3": "{{PLURAL:$1|وروستنی ونډه وال|وروستني ونډه وال}}",
        "badretype": "دا پټنوم چې تاسې ليکلی د مخکني پټنوم سره ورته نه دی.",
+       "usernameinprogress": "د دې کارن نوم لپاره د حساب جوړونې کار روان دی.\nهیله کيږي لږ صبر وکړه.",
        "userexists": "کوم کارن نوم چې تاسې ورکړی هغه بل چا کارولی.\nلطفاً يو بل نوم وټاکۍ.",
        "loginerror": "د ننوتلو ستونزه",
        "createacct-error": "د گڼون جوړېدنې ستونزه",
        "createaccounterror": "گڼون مو جوړ نه شو: $1",
        "nocookiesnew": "ستاسې گڼون جوړ شو، خو تاسې لا غونډال ته نه ياست ورننوتلي.\n{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.",
        "nocookieslogin": "{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.",
+       "nocookiesfornew": "د کارن حساب نه و جوړ شوی، ځکه چې موږ د دې سرچینې تصدیق نه شو کولی.\nډاډ ترلاسه کړئ چې تاسو کوکیز فعال کړي، دا پاڼه بیاپټ کړئ او بیا هڅه وکړئ.",
+       "createacct-loginerror": "ګڼون په بریالیتوب سره جوړ شو خو تاسو په اتوماتيک ډول نشو کارولی. مهرباني وکړئ [[Special:UserLogin|ننوتلو]] ته لاړ شي.",
        "noname": "تاسې تر اوسه پورې کوم کره کارن نوم نه دی ځانگړی کړی.",
        "loginsuccesstitle": "غونډال کې ورننوتلۍ",
        "loginsuccess": "'''تاسې اوس {{SITENAME}} کې د \"$1\" په نوم ننوتي ياست.'''",
        "wrongpasswordempty": "تاسې پټنوم نه دی ليکلی. لطفاً سر له نوي يې وليکۍ.",
        "passwordtooshort": "بايد چې پټنوم مو لږ تر لږه {{PLURAL:$1|1 توری|$1 توري}} وي.",
        "passwordtoolong": "پټنوم مو بايد له {{PLURAL:$1|1 توري|$1 تورو}} څخه اوږد نه وي.",
+       "passwordtoopopular": "عموما غوره شوي پاسورډونه نشي کارولای. مهربانی وکړئ یو بل ځانګړی پاسورډ غوره کړئ.",
        "password-name-match": "ستاسې پټنوم بايد ستاسې د کارن-نوم سره توپير ولري.",
        "password-login-forbidden": "د دې کارن-نوم او پټنوم په کارېدنې بنديز دی.",
        "mailmypassword": "پټنوم بياپرځايول",
        "passwordsent": "د \"$1\" لپاره يو نوی پټنوم د اړونده کارن برېښليک پتې ته ولېږل شو.\nلطفاً کله چې پټنوم مو ترلاسه کړ نو بيا غونډال ته ننوځۍ.",
        "blocked-mailpassword": "ستاسې په IP پتې بنديز لگېدلی او تاسې نه شی کولای چې ليکنې وکړی، په همدې توگه تاسې نه شی کولای چې د پټنوم د پرځای کولو کړنې وکاروی دا ددې لپاره چې د وراني مخنيوی وشي.",
        "eauthentsent": "ستاسې برېښليک پتې ته مو يو تاييدي برېښليک درولېږه.\nتر دې دمخه چې ستاسې گڼون ته کوم بل برېښليک درولېږو، بايد تاسې په برېښليک کې درلېږل شوې لارښوونې پلي کړی او د دې پخلی وکړی چې همدا گڼون په رښتيا ستاسې خپل دی.",
+       "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
        "mailerror": "د برېښليک د لېږلو ستونزه: $1",
-       "acct_creation_throttle_hit": "د همدې ويکي کارنانو په وروستيو ورځو کې ستاسې د IP پتې په کارولو سره {{PLURAL:$1|1 گڼون|$1 گڼونونه}} جوړ کړي، چې دا په همدې مودې کې د گڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.\nنو په همدې خاطر د اوس لپاره د همدې IP پتې کارنان نه شي کولای چې نور گڼونونه جوړ کړي.",
+       "acct_creation_throttle_hit": "د همدې ويکي کارنانو په وروستيو ورځو کې ستاسې د IP پتې په کارولو سره {{PLURAL:$2|1 گڼون|$1 گڼونونه}} جوړ کړي، چې دا په همدې مودې کې د گڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.\nنو په همدې خاطر د اوس لپاره د همدې IP پتې کارنان نه شي کولای چې نور گڼونونه جوړ کړي.",
        "emailauthenticated": "ستاسې برېښليک پته په $2 په $3 بجو د منلو وړ وگرځېده.",
        "emailnotauthenticated": "لا تر اوسه ستاسې برېښليک پته د منلو وړ نه ده گرځېدلې. د لاندې ځانگړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.",
        "noemailprefs": "ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.",
        "createaccount-text": "يو چا د {{SITENAME}} په وېبځي ($4) کې ستاسې د برېښليک پتې لپاره د \"$2\" په نامه يو گڼون جوړ کړی چې پټنوم يې \"$3\" دی.\nتاسې بايد غونډال ته ورننوځۍ او همدا اوس خپل پټنوم بدل کړی.\n\nکه چېرته دا کړنه په تېروتنه کې شوی وي نو تاسې کولای شی چې دا پيغام بابېزه وگڼۍ.",
        "login-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
        "login-abort-generic": "غونډال کې مو ننوتل نابرياله شوه - ناڅاپي بند شو",
+       "login-migrated-generic": "ستاسو حساب لغوه شوی، او ستاسو کارن-نوم اوس په دې ويکي نه شتون لري.",
        "loginlanguagelabel": "ژبه: $1",
+       "suspicious-userlogout": "د ننوتلو لپاره ستاسو غوښتنه رد شوې وه ځکه چې داسې ښکاري چې دا د مات شوي براؤزر یا کیچاک پراکسي لخوا لیږل شوی.",
+       "createacct-another-realname-tip": "اصلي نوم اختیاري دی.\nکه تاسو دا وټاکئ انتخاب کړئ، دا به د دوی د کار لپاره د کارن انتفاع ورکول لپاره کارول کیږي.",
        "pt-login": "ننوتل",
        "pt-login-button": "ننوتل",
+       "pt-login-continue-button": "همداسې دننه يي پريږدي",
        "pt-createaccount": "گڼون جوړول",
        "pt-userlogout": "وتل",
        "php-mail-error-unknown": "د PHP برېښليک () کړنو کې ناڅرگنده ستونزه.",
        "user-mail-no-addy": "د يوې برېښليک پتې پرته د برېښليک لېږلو هڅه شوې.",
+       "user-mail-no-body": "تاسو هڅه کوله چې لنډ یا خالي بریښناليک ولېږئ.",
        "changepassword": "پټنوم بدلول",
        "resetpass_announce": "د ننوتلو د بشپړېدلو لپاره بايد تاسې يو نوی پټنوم وټاکئ.",
        "resetpass_text": "<!-- متن مو دلته وليکئ -->",
        "changepassword-success": "ستاسې پټنوم بدل شو!",
        "changepassword-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
        "botpasswords": "روباټ پټنومونه",
+       "botpasswords-summary": "<em>د بوټ پټنومونه</em> د اصلي پټنوم کارولو څخه پرته د ای پی ادرس سره ګڼون ته لاسرسي نه ورکول کيږی. د کاروونکي موجوده لاسرسی ممکن محدود وي کله چې د روباټ پاسورډ داخل شي.\nکه تاسو نه پوهیږئ چې څه شی کولی شئ له دې سره وکړئ، تاسو ممکن هیڅکله هم ونه کړئ. هیڅوک باید له تاسو څخه د دې د ورکولو لپاره نه وپوښتل شي.",
+       "botpasswords-disabled": "د بوټ پټنوم ناممکنه دي.",
+       "botpasswords-no-central-id": "د بوټ د پټنوم کارولو لپاره، تاسو باید په مرکزي حساب کې ننوتلي ياست.",
+       "botpasswords-existing": "د بوټ موجود پټ نومونه",
+       "botpasswords-createnew": "نوی پټنوم (پاسورډ) جوړ کړي",
+       "botpasswords-editexisting": "د بوټ موجود پاسورډ جوړ کړئ",
        "botpasswords-label-appid": "روباټ نوم:",
        "botpasswords-label-create": "جوړول",
        "botpasswords-label-update": "اوسمهالول",
        "botpasswords-label-delete": "ړنگول",
        "botpasswords-label-resetpassword": "پټوم بدل کړي",
        "botpasswords-label-grants": "تطبیق وړ ګرانټ:",
+       "botpasswords-help-grants": "هر اجازه روبوټ ته اجازه ورکوي چې هغه واک ته لاسرسۍ ومومي کوم چې ستاسو حساب ساتي. د اجازې فعالول دلته، نوې لاسرسی نشته چې ستاسو حساب اوس مهال نلري. د نورو معلوماتو لپاره [[Special:ListGrants|table of grants]] وګورئ.",
+       "botpasswords-label-grants-column": "ورکړل شو",
+       "botpasswords-bad-appid": "د بوټ نوم \"$1\" وجود نلري.",
+       "botpasswords-insert-failed": "د بوټ \"$1\" نوم په ورګډولو کي پاتې راغلې دا نوم د پخوا څخه ورګډ سوي وو?",
+       "botpasswords-update-failed": "د بوټ نوم په نوي کولو کې ناکام شوې \"$1\".ایا دا ړنګ شوی دی؟",
+       "botpasswords-created-title": "د بوټ پټنوم جوړ شو",
+       "botpasswords-created-body": "د بوټ پټنوم د بوټ \"$1\" د کارن \"$2\" لپاره جوړ شو.",
+       "botpasswords-updated-title": "د بوټ پټنوم آپډيټ سو",
+       "botpasswords-updated-body": "د بوټ پټنوم د بوټ \"$1\" د کارن \"$2\" لپاره آپډيټ شو.",
+       "botpasswords-deleted-title": "د بوټ پټنوم ړنګ شو",
+       "botpasswords-deleted-body": "د بوټ پټنوم د بوټ \"$1\" د کارن \"$2\" لپاره ړنګ شو.",
+       "botpasswords-newpassword": "<strong>$2</strong> د ګڼون سره د ننوتلو لپاره نوی پټنوم <strong>$1</strong> دی. <em>مهرباني وکړئ دا د راتلونکی لپاره وساتئ.</em> <br> (د زړو روبوټونو لپاره چې یو کارنومینر ته اړتیا لري چې خپل ګڼون سره سمون لري، تاسو کولی شئ له <strong>$3</strong> لاندې يو کارننوم او <strong>$4</strong> د پټنوم په توګه کاروئ.)",
+       "botpasswords-no-provider": "د بوټ شفر د غونډو وړاندې کول شتون نلري.",
+       "botpasswords-restriction-failed": "د بوټ پاسورډ محدودیتونه د دې ننوتنې مخه نیسي",
+       "botpasswords-invalid-name": "په کارنۍ نومول شوی کې د بوټو د پاسورډ جلا کول شامل نه دی (\"$1\").",
+       "botpasswords-not-exist": "کارن \"$1\"  يو روباټ پټنوم نه لري نوم \"$2\".",
        "resetpass_forbidden": "پټنومونه مو نه شي بدلېدلای",
+       "resetpass_forbidden-reason": "پټنومونه مو نه شي بدلېدلای: $1",
        "resetpass-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
        "resetpass-submit-loggedin": "پټنوم بدلول",
        "resetpass-submit-cancel": "ناگارل",
-       "resetpass-wrong-oldpass": "Ù\84Ù\86Ú\89Ù\85Ù\87اÙ\84 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø§Ù\88سÙ\86Û\8c Ù¾Ù¼Ù\86Ù\88Ù\85 Ù\85Ù\88 Ù\86اسÙ\85 Ø¯Û\8c",
+       "resetpass-wrong-oldpass": "Ù\86اسÙ\85 Ù\84Ù\86Ú\89Ù\85Ù\87اÙ\84Ù\87 Û\8cا Ø§Ù\88سÙ\86Û\8c Ù¾Ù¼Ù\86Ù\88Ù\85.\nتاسÙ\88 Ù\85Ù\85Ú©Ù\86Ù\86 Ù\85خکÛ\90 Ø®Ù¾Ù\84 Ù¾Ù¼Ù\86Ù\88Ù\85 Ø¨Ø¯Ù\84 Ú©Ú\93Û\8c Ù\88Ù\8a Û\8cا Ø¯ Ù\86Ù\88Ù\8a Ù\84Ù\86Ú\89Ù\85Ù\87اÙ\84Ù\87 Ù¾Ù¼Ù\86Ù\88Ù\85 ØºÙ\88Ú\9aتÙ\86Ù\87 Ú©Ú\93Û\90 Ù\88Û\8c.",
        "resetpass-recycled": "لطفاً پټنوم مو داسې وټاکئ چې له اوسني پټنوم سره يې توپير وي.",
        "resetpass-temp-emailed": "تاسې د يو لنډمهاله کوډ په مرسته چې دربرېښليک شوی و، ننوتلي ياست. \nد ننوتلو د بشپړولو لپاره بايد ځانته يو نوی پټنوم دلته وټاکئ:",
        "resetpass-temp-password": "لنډمهالی پټنوم:",
        "passwordreset-domain": "شپول:",
        "passwordreset-email": "برېښليک پته:",
        "passwordreset-emailtitle": "د {{SITENAME}} د گڼون څرگندنې",
+       "passwordreset-emailtext-ip": "یک نفر (شاید تاسو، دآی‌پی پتی سره$1) د خپل پټنوم بیا سمولو لپاره غوښتنه{{SITENAME}} ($4) کړی ده. {{PLURAL:$3|ګڼون|ګڼونونه}} لاندې کارن د دې برېښنالیک سره تړلی دی:\n\n$2\n\n{{PLURAL:$3|دا یو لنډمهاله پاسورډ دی|دا شفرونه لنډمهاله دي}} وروسته تر {{PLURAL:$5|یوه ورځ|$5 ورځی}} به باطل شي.\nتاسو باید اوس ننوځئ او نوي شفرونه غوره کړئ. که تاسو فکر کوئ چې بل چا دا غوښتنه کړې ده یا که تاسو خپل اصلي پټنوم په یاد ولرئ او تاسو نور یې نه غواړئ بدلون ومومئ، تاسو کولی شئ دا پیغام غفلت کړئ او خپل پخوانی پاسورډ کارولو ته دوام ورکړئ.",
+       "passwordreset-emailtext-user": "یک نفر (شاید تاسو، دآی‌پی پتی سره$1) د خپل پټنوم بیا سمولو لپاره غوښتنه{{SITENAME}} ($4) کړی ده. {{PLURAL:$3|ګڼون|ګڼونونه}} لاندې کارن د دې برېښنالیک سره تړلی دی:\n\n$2\n\n{{PLURAL:$3|دا یو لنډمهاله پاسورډ دی|دا شفرونه لنډمهاله دي}} وروسته تر {{PLURAL:$5|یوه ورځ|$5 ورځی}} به باطل شي.\nتاسو باید اوس ننوځئ او نوي شفرونه غوره کړئ. که تاسو فکر کوئ چې بل چا دا غوښتنه کړې ده یا که تاسو خپل اصلي پټنوم په یاد ولرئ او تاسو نور یې نه غواړئ بدلون ومومئ، تاسو کولی شئ دا پیغام غفلت کړئ او خپل پخوانی پاسورډ کارولو ته دوام ورکړئ.",
        "passwordreset-emailelement": "کارن-نوم: \n$1\n\nلنډمهاله پټنوم: \n$2",
        "passwordreset-emailsentemail": "د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.",
+       "passwordreset-emailsentusername": "که د دې کارن-نوم سره یو بریښنالیک پته شتون ولري نو بیا به د پاسورډ ری سیټ ای میل ته واستول شي.",
+       "passwordreset-nocaller": "يو اواز باید ورکړل شي",
+       "passwordreset-nosuchcaller": "کالر شتون نلري: $1",
+       "passwordreset-ignored": "د شفر بیاچالان سم نه و. کیدای شي کوم برابرونکي ترتیب نه وي؟",
        "passwordreset-invalidemail": "ناسمه برېښليک پته",
+       "passwordreset-nodata": "نه هم یو کاروونکي نوم او نه بریښنالیک پته ورکړل شوی",
        "changeemail": "برېښليک پته بدلول يا ليرې کول",
-       "changeemail-header": "د Ú¯Ú¼Ù\88Ù\86 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ø¨Ø¯Ù\84Ù\88Ù\84",
+       "changeemail-header": "د Ú¯Ú¼Ù\88Ù\86 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\86اÙ\84Ù\8aÚ© Ø¨Ø¯Ù\84Ù\88Ù\84Ù\88 Ù\84پارÙ\87 Ø¯Ø§ Ù¾Ù\88رÙ\85 Ù¾Ù\88رÙ\87 Ú©Ú\93Ù\8a. Ú©Ù\87 ØªØ§Ø³Ù\88 ØºÙ\88اÚ\93ئ Ø¯ Ø®Ù¾Ù\84 Ù\87ر Ú\89Ù\88Ù\84 Ø­Ø³Ø§Ø¨ Ú\85Ø®Ù\87 Ø¯ Ø¨Ø±Û\8cÚ\9aÙ\86اÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù\84رÛ\90 Ú©Ú\93Ù\8aØ\8c Ù\86Ù\88 Ø¯ Ø¨Ø±Ù\8aÚ\9aÙ\86اÙ\84Ù\8aÚ© Ú\81اÙ\8a Ù\85Ù\88 Ø¯ Ù¾Ù\88رÙ\85 Ø³Ù¾Ø§Ø±Ù\86Û\90 Ù¾Ù\87 Ù\88خت Ú©Û\90 Ø®Ø§Ù\84Ù\8a Ù¾Ø±Ù\8aÚ\96دÙ\8a.",
        "changeemail-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
        "changeemail-oldemail": "اوسنۍ برېښليک پته:",
        "changeemail-newemail": "نوې برېښليک پته:",
+       "changeemail-newemail-help": "که تاسو غواړئ خپل بریښنالیک لرې کړئ نو دا ساحه باید پریښودل شي. تاسو به د هیر شوي شفر بیاپټولو توان نه لرئ او د دې ويکي نه بریښنالیکونه به مو ترلاسه نکړئ که چیرې مو برېښناليک لرې کړای شو.",
        "changeemail-none": "(هېڅ)",
        "changeemail-password": "ستاسې د{{SITENAME}} پټنوم:",
        "changeemail-submit": "برېښليک بدلول",
        "changeemail-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
+       "changeemail-nochange": "مهرباني وکړئ یو بل نوی برېښناليک پته ولیکئ.",
+       "resettokens": "د ټوکنونو بیاکتنه",
+       "resettokens-text": "تاسو کولی شئ  ټوکنونه بیا ځای پرځای کړئ کوم چې دلته ستاسو د حساب سره تړلی ځینې مشخصو معلوماتو ته دلا سرسۍ اجازه ورکوي.\n\nتاسو باید دا کار وکړئ که چیرې تاسو په ناڅاپي توګه له چا سره شریک کړي یا ستاسو حساب ورسره موافق وي.",
        "resettokens-tokens": "ټوکنونه:",
        "resettokens-token-label": "$1 (اوسنی ارزښت: $2)",
        "resettokens-done": "د رایو بیا راګرځول.",
        "preview": "مخليدنه",
        "showpreview": "مخليدنه",
        "showdiff": "بدلونونه ښکاره کول",
-       "blankarticle": "<strong>خبرتÛ\8cا:</strong> ØªØ§Ø³Ù\88 Ø¯ Û\8cÙ\88 Ø®Ø§Ù\84Ù\8a Ù\85Ø® Ø¬Ù\88Ú\93Ù\84Ù\88 Ù¾Ù\87 Ø­Ø§Ù\84 Ú©Ù\8a Ù\8aاست.\nÚ©Ù\87 Â«$1» Ø±Ø§ Ø¯Ù\88Ù\87Ù\85 Ú\81Ù\84Ù\8a Ú©Ù\84Û\8cÚ© Ú©Ú\93ئØ\8c مخ به د معلوماتو بغير جوړ سي.",
+       "blankarticle": "<strong>خبرتÛ\8cا:</strong> ØªØ§Ø³Ù\88 Ø¯ Û\8cÙ\88 Ø®Ø§Ù\84Ù\8a Ù\85Ø® Ø¬Ù\88Ú\93Ù\84Ù\88 Ù¾Ù\87 Ø­Ø§Ù\84 Ú©Ù\8a Ù\8aاست.\nÚ©Ù\87 Â«$1» Ø¯Ù\88Ù\87Ù\85 Ú\81Ù\84Ù\8a Ú©Ú\9aÙ\8a Ú©Ø§Ú\96Ù\8aØ\8c Ù\86Ù\88 مخ به د معلوماتو بغير جوړ سي.",
        "anoneditwarning": "<strong>گواښنه:</strong>  تاسې غونډال کې نه ياست ننوتي. که تاسې کوم سمونونه ترسره کوۍ نو ستاسې IP پته به ټولو ته د دې مخ د سمونونو په پېښليک کې ښکاري. که تاسې په خپل نوم <strong>[$1 کې ننوځئ]</strong> يا <strong>[$2 يو گڼون جوړ کړئ]</strong>، نو ستاسې سمونونه به ستاسې کارن-نوم اړونده ثبت شي چې ډېرې نورې گټې هم لري.",
        "anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
-       "missingcommenttext": "لطفاً تبصره لاندې وليکۍ.",
+       "missingcommenttext": "لطفاً کمينټ لاندې وليکۍ.",
        "summary-preview": "د لنډيز مخليدنه:",
        "subject-preview": "د پروژې بيا ليدنه:",
        "previewerrortext": "د بدلونونو د مخليدنو په وخت کې مو يوه ستونزه رامېنځ ته شوه.",
        "newarticletext": "تاسې د يوې داسې تړنې څارنه کړې چې لا تر اوسه پورې نه شته.\nکه همدا مخ ليکل غواړۍ، نو په لانديني چوکاټ کې خپل متن وټاپئ (د لا نورو مالوماتو لپاره د [$1 لارښود مخ] وگورئ).\nکه چېرته تاسې دلته په تېروتنه راغلي ياست، نو يواځې د خپل د کتنمل '''مخ پر شا''' تڼۍ مو وټوکئ.",
        "anontalkpagetext": "----''دا د يوه ورکنومي کارن چې کارن-نوم نه لري او يا خپل کارن-نوم نه کاروي، د سکالو يوه پاڼه ده. نو د يوه کس د پېژندلو پخاطر موږ د هماغه کارن د انټرنېټ شمېره يا IP پته دلته ثبتوؤ. داسې يوه IP پته د ډېرو کارنانو لخوا هم کارېدلی شي. که تاسې يو ورکنومی کارن ياست او تاسې ته دا څرگندېږي چې تاسې ته نااړونده پېغامونه او تبصرې اشاره شوي، نو د نورو بې نومو کارنانو او ستاسې ترمېنځ د ټکنتوب د مخ نيونې لپاره لطفاً [[Special:CreateAccount|يو گڼون جوړ کړۍ]] او يا هم [[Special:UserLogin|غونډال ته ورننوځۍ]].''",
        "noarticletext": "دم مهال په دې مخ کې څه نشته.\nتاسې کولای شی چې په نورو مخونو کې [[Special:Search/{{PAGENAME}}|د دې مخ د سرليک پلټنه]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د اړوندو يادښتونو پلټنه] ،\nاو يا [{{fullurl:{{FULLPAGENAME}}|action=edit}} همدا مخ جوړ کړئ]</span>.",
-       "noarticletext-nopermission": "دم مهال په دې مخ کې متن نشته.\nتاسې کولای شی چې [[Special:Search/{{PAGENAME}}|همدا سرليک په نورو مخونو کې وپلټۍ]], يا هم <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} اړونده يادښتونه وپلټۍ]</span>، خو تاسې د دې مخ د جوړولو اجازه نه لرۍ.",
+       "noarticletext-nopermission": "دم مهال په دې مخ کې متن نشته.\nتاسې کولای شی چې [[Special:Search/{{PAGENAME}}|همدا سرليک په نورو مخونو کې وپلټۍ]]، يا هم <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} اړونده يادښتونه وپلټۍ]</span>، خو تاسې د دې مخ د جوړولو اجازه نه لرۍ.",
        "userpage-userdoesnotexist": "د \"<nowiki>$1</nowiki>\" گڼون نه دی ثبت شوی.\nلطفاً ځان ډاډه کړئ چې آيا تاسې په رښتيا همدا مخ جوړول/سمول غواړئ.",
        "userpage-userdoesnotexist-view": "د \"$1\" گڼون نه دی ثبت شوی.",
        "blocked-notice-logextract": "دم مهال په دې کارن بنديز لگېدلی.\nد بنديز يادښت تازه مالومات په لاندې توگه دي:",
        "longpageerror": "'''تېروتنه: کوم متن چې مو ليکلی {{PLURAL:$1|يو کيلوبايټه|$1 کيلوبايټه}} اوږد دی، چې دا پخپله د حد اکثر نه {{PLURAL:$2|يو کيلوبايټه|$2 کيلوبايټه}} اوږد دی.'''\nستاسې متن نه شي خوندي کېدلای.",
        "protectedpagewarning": "'''گواښنه: همدا مخ تړل شوی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي.'''\nستاسې د مالوماتو لپاره د وروستني يادښت متن دلته په دې توگه راوړل شوی:",
        "semiprotectedpagewarning": "'''پاملرنه:''' دا مخ تړل شوی او يواځې ثبت شوي کارنان کولای شي چې په دې مخ کې بدلونونه راولي.\nستاسې د مالوماتو لپاره د وروستني يادښت متن دلته په دې توگه راوړل شوی:",
-       "cascadeprotectedwarning": "'''گواښنه:''' همدا مخ تړل شوی دی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي، دا په دې خاطر چې همدا مخ د {{PLURAL:$1|لانديني مخ|لاندينيو مخونو}} په ځوړاوبيزې ژغورنې کې ورگډ دی:",
+       "cascadeprotectedwarning": "'''گواښنه:''' همدا مخ تړل شوی دی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د [[Special:ListGroupRights|د پازوالۍ د آسانتياوو]] نه برخمن دي، دا په دې خاطر چې همدا مخ د {{PLURAL:$1|لانديني مخ|لاندينيو مخونو}} په ځوړاوبيزې ژغورنې کې ورگډ دی:",
        "titleprotectedwarning": "'''گواښنه: همدا مخ تړل شوی دی او د دې د جوړولو لپاره تاسې ته د [[Special:ListGroupRights|ځانگړو رښتو]] د ترلاسه کولو اړتيا ده.'''\nستاسې د مالوماتو لپاره د وروستني يادښت متن دلته په دې توگه راوړل شوی:",
        "templatesused": "په دې مخ کارېدلې {{PLURAL:$1|کينډۍ|کينډۍ}}:",
        "templatesusedpreview": "يه دې مخليدنه کارېدلې {{PLURAL:$1|کينډۍ|کينډۍ}}:",
        "permissionserrorstext": "تاسې د لاندې {{PLURAL:$1|سبب|سببونو}} پخاطر د دې کړنې اجازه نه لرۍ:",
        "permissionserrorstext-withaction": "تاسې د $2 اجازه نه لری، دا د {{PLURAL:$1|دغه سبب|دغو سببونو}} پخاطر:",
        "recreate-moveddeleted-warn": "'''گواښنه: تاسې د يوه داسې مخ بياجوړونه کوۍ کوم چې يو ځل پخوا ړنگ شوی وو.'''\n\nپکار ده چې تاسې په دې ځان پوه کړۍ چې ايا دا تاسې ته وړ ده چې د همدې مخ جوړول په پرله پسې توگه وکړۍ.\nستاسې د اسانتياوو لپاره د همدې مخ د ړنگېدلو يادښت هم ورکړ شوی:",
-       "moveddeleted-notice": "دا مخ ړنگ شوی.\nدلته لاندې د دې مخ د ړنگېدنې او لېږدېدنې يادښت د سرچينې په توگه ورکړ شوی.",
+       "moveddeleted-notice": "دا مخ ړنگ شوی.\nدلته لاندې ددې مخ د ړنگېدنې او لېږدېدنې ياداښت د سرچينې په توگه ورکړل شوی دي.",
        "log-fulllog": "بشپړ يادښت کتل",
        "edit-gone-missing": "د دې مخ اوسمهالول و نه کړای شول.\nداسې ښکاري چې دا مخ ړنگ شوی.",
        "edit-conflict": "د سمولو خنډ",
        "page_first": "لومړنی",
        "page_last": "وروستنی",
        "histlegend": "د توپير ټاکنه: د هرې هغې بڼې پرتلنه چې تاسې غواړۍ نو د هماغې بڼې چوکاټک په نښه کړی او بيا په لاندينۍ تڼۍ وټوکۍ.<br />\nلنډيز: (اوس) = د اوسنۍ بڼې سره توپير،\n(وروست) = د وروستۍ بڼې سره توپير، و = وړه سمونه.",
-       "history-fieldset-title": "پېښليک سپړل",
+       "history-fieldset-title": "پېښليک ولټوي",
        "history-show-deleted": "يواځې ړنگ شوي",
        "histfirst": "تر ټولو زاړه",
        "histlast": "تر ټولو نوي",
        "history-feed-description": "ددي مخ د بياکتنې تاريخ په ويکي کي",
        "history-feed-item-nocomment": "$1 په $2",
        "history-feed-empty": "ستاسې غوښتلی مخ نه شته.\nکېدای شي چې دا له ويکي نه ړنگ شوی وي، او يا هم په بل نوم بدل شوی وي.\nتاسې په دې ويکي د اړوندو نوؤ مخونو لپاره [[Special:Search|د پلټنې هڅه وکړۍ]].",
+       "history-edit-tags": "د غوره بڼې سمول نښانونه",
        "rev-deleted-comment": "(د سمون لنډيز لرې شو)",
        "rev-deleted-user": "(کارن-نوم ليري شوی)",
+       "rev-deleted-event": "(د ننوتنې مالومات ړنګ شوي)",
+       "rev-deleted-user-contribs": "[د کارن-نوم یا ای پی پته لرې کړه - له مرستو څخه پټ شوی ترمیم]",
        "rev-deleted-text-permission": "د دې مخ بڼه <strong>ړنگه شوه</strong>.\nد دې مخ اړونده تفصيل په [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ړنگون يادښت] کې موندلی شی.",
+       "rev-suppressed-text-permission": "د دې مخ بڼه <strong>ړنگه شوه</strong>.\nد دې مخ اړونده تفصيل په [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ړنگون يادښت] کې موندلی شی.",
+       "rev-suppressed-text-unhide": "د دې مخ بیاکتنه روانه <strong>ماتول ده</strong>.\nتفصيلات په دې ځای کې موندل کيداى شي[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} د ماتولو يادښت].\nتاسو لا هم کولی شئ [$1 دا بیاکتنه وګورئ] که تاسو غواړئ چې پرمخ بوځي.",
+       "rev-deleted-text-view": "ددې مخ سمون ''' ړنګ شوی '''.\nتاسو کولی شئ دا وګورئ؛ دا کېدای شي اړوند معلومات [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}ړنګ شوی] په کې شامل وي.",
+       "rev-suppressed-text-view": "د دې مخ بڼه <strong>ړنگه شوه</strong>.\nد دې مخ اړونده تفصيل په [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ړنگون يادښت] کې موندلی شی.",
+       "rev-deleted-no-diff": "د دې مخ بڼه <strong>ړنگه شوه</strong>.\nد دې مخ اړونده تفصيل په [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ړنگون يادښت] کې موندلی شی.",
+       "rev-suppressed-no-diff": "تاسو دا توپیر نه شو لیدلی ځکه چې د بیاکتنې څخه یو یې <strong>ړنګ شویدی</strong>.",
+       "rev-deleted-unhide-diff": "د دې مخ بیاکتنه روانه <strong>ماتول ده</strong>.\nتفصيلات په دې ځای کې موندل کيداى شي[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} د ماتولو يادښت].\nتاسو لا هم کولی شئ [$1 دا بیاکتنه وګورئ] که تاسو غواړئ چې پرمخ بوځي.",
+       "rev-suppressed-unhide-diff": "د دې مخ بیاکتنه روانه <strong>ماتول ده</strong>.\nتفصيلات په دې ځای کې موندل کيداى شي[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} د ماتولو يادښت].\nتاسو لا هم کولی شئ [$1 دا بیاکتنه وګورئ] که تاسو غواړئ چې پرمخ بوځي.",
+       "rev-deleted-diff-view": "ددې مخ سمون ''' ړنګ شوی '''.\nتاسو کولی شئ دا وګورئ؛ دا کېدای شي اړوند معلومات [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}ړنګ شوی] په کې شامل وي.",
+       "rev-suppressed-diff-view": "د دې مخ بڼه <strong>ړنگه شوه</strong>.\nد دې مخ اړونده تفصيل په [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ړنگون يادښت] کې موندلی شی.",
        "rev-delundel": "ښکارېدنه بدلول",
        "rev-showdeleted": "ښکاره کول",
        "revisiondelete": "د ړنگولو/ناړنگولو مخکتنې",
+       "revdelete-nooldid-title": "ناباوره پيښنليک ته اشاره",
+       "revdelete-nooldid-text": "تاسو یا د کوم هدف بیا کتنه نده مشخص کړې چې دا فعالیت ترسره کړي، یا مشخص بیاکتنه شتون نلري، یا تاسو د اوسني بیاکتنې پټولو هڅه کوۍ.",
        "revdelete-no-file": "ځانگړې شوې دوتنه نشته.",
+       "revdelete-show-file-confirm": "ایا ته باوري یې چې دا دوتنه د خراب شوي څخه بیاکتنې ته واړوی\"<nowiki>$1</nowiki>\" له$2 په $3؟",
        "revdelete-show-file-submit": "هو",
        "revdelete-selected-text": "د [[:$2]] {{PLURAL:$1|ټاکلې بڼه|ټاکلې بڼې}}:",
        "revdelete-selected-file": "د [[:$2]] {{PLURAL:$1|ټاکلې دوتنې بڼه|ټاکلې دوتنې بڼې}}",
        "logdelete-selected": "{{PLURAL:$1|ټاکلي يادښت پېښه|ټاکلي يادښت پېښې}}:",
        "revdelete-text-text": "ړنگې شوې بڼې به لا تر اوسه پورې د مخ پېښليک کې ښکاري، خو د هغو ځينو برخو ته به عام خلک لاسرسی و نه لري.",
+       "revdelete-text-file": "ړنگې شوې بڼې به لا تر اوسه پورې د مخ پېښليک کې ښکاري، خو د هغو ځينو برخو ته به عام خلک لاسرسی و نه لري.",
+       "logdelete-text": "ړنگې شوې بڼې به لا تر اوسه پورې د مخ پېښليک کې ښکاري، خو د هغو ځينو برخو ته به عام خلک لاسرسی و نه لري.",
+       "revdelete-text-others": "نور پازوالان به لا هم د پټ راز محتوياتو ته لاسرسی ومومي او دا یې له منځه یوسي، مګر که نه بل ډول مشخص شوی.",
+       "revdelete-confirm": "لطفا دا تایید کړئ چې تاسو دا کار کول غواړئ، دا چې تاسو پایلې په پام کې لرئ او تاسو یې سره مطابقت کوئ[[{{MediaWiki:Policy-url}}|پالیسۍ]].",
        "revdelete-legend": "د ښکارېدنې محدوديتونه ټاکل",
        "revdelete-hide-text": "د مخکتنې متن",
        "revdelete-hide-image": "د دوتنې مېنځپانگه پټول",
        "revdelete-reasonotherlist": "بل سبب",
        "revdelete-edit-reasonlist": "د ړنگولو سببونه سمول",
        "revdelete-offender": "د مخکتنې ليکوال:",
+       "suppressionlog": "ننوتل لوستل",
        "mergehistory": "د مخ پېښليکونه سره يوځای کول",
        "mergehistory-box": "د دوه مخونو بڼې سره اخږل:",
        "mergehistory-from": "د سرچينې مخ:",
        "mergehistory-submit": "بڼې سره يوځای کول",
        "mergehistory-done": "د $1 $3 {{PLURAL:$3|بڼه|بڼې}} په برياليتوب سره و [[:$2]] کې {{PLURAL:$3|واخږل شو|واخږل شول}}.",
        "mergehistory-fail-bad-timestamp": "وخت ټاپه ناسمه ده.",
+       "mergehistory-fail-invalid-source": "د مخ سرچينې ناباوره دي.",
        "mergehistory-no-source": "د سرچينې مخ $1 نشته.",
        "mergehistory-no-destination": "د $1 موخنيز مخ نشته.",
        "mergehistory-invalid-source": "د سرچينې مخ بايد يو سم سرليک وي.",
        "editundo": "ناکړ",
        "diff-empty": "(بې توپيره)",
        "diff-multi-sameuser": "(د همدغه کارن لخوا {{PLURAL:$1|يوه منځوۍ بڼه نه ده ښکاره شوې|$1 منځوۍ بڼې نه دي ښکاره شوي}})",
-       "diff-multi-otherusers": "(د همدغه کارن لخوا {{PLURAL:$1|يوه منځوۍ بڼه نه ده ښکاره شوې|$1 منځوۍ بڼې نه دي ښکاره شوي}})",
+       "diff-multi-otherusers": "(د همدغه کارن لخوا {{{{PLURAL:$2|پلورل}}|يوه منځوۍ بڼه نه ده ښکاره شوې|$1 منځوۍ بڼې نه دي ښکاره شوي}})",
        "searchresults": "د پلټنې پايلې",
        "searchresults-title": "د \"$1\" د پلټنې پايلې",
        "titlematches": "د مخ سرليک ورسره ورته دی",
        "search-category": "(وېشنيزه $1)",
        "search-file-match": "(د دوتنو مېنځپانگې سره ورته دي)",
        "search-suggest": "آيا همدا مو موخه وه: $1",
-       "search-interwiki-caption": "Ø®Ù\88رÙ\84Ú¼Û\90 Ù¾Ø±Ù\88Ú\98ې",
+       "search-interwiki-caption": "د Ø®Ù\88رÙ\84Ú¼Ù\88 Ù¾Ø±Ù\88Ú\98Ù\88 Ù¾Ø§Û\8cÙ\84ې",
        "search-interwiki-default": "پايلې له $1 څخه:",
        "search-interwiki-more": "(نور)",
+       "search-interwiki-more-results": "نورې پايلې",
        "search-relatedarticle": "اړونده",
        "searchrelated": "اړونده",
        "searchall": "ټول",
        "showingresultsinrange": "دلته لاندې د #<strong>$2</strong> تر #<strong>$3</strong> حدونو پورې {{PLURAL:$1|<strong>1</strong> پايله|<strong>$1</strong> پايلې}} ښکارېږي.",
        "search-showingresults": "{{PLURAL:$4|<strong>$1</strong> پايله، ټولټال <strong>$3</strong>|<strong>$1 - $2</strong> پايلې، ټولټال <strong>$3</strong>}}",
        "search-nonefound": "ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.",
+       "search-nonefound-thiswiki": "ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.",
        "powersearch-legend": "ژوره پلټنه",
        "powersearch-ns": "په نوم-تشيالونو کې پلټنه:",
        "powersearch-togglelabel": "نښه کول:",
        "powersearch-togglenone": "هېڅ",
        "powersearch-remember": "د راتلونکو پلټنو لپاره همدا ټاکنې په ياد ساتل",
        "search-external": "باندنۍ پلټنه",
+       "searchdisabled": "{{SITENAME}} لټون نافعال شوی.\nتاسو کولی شئ د ګوګل له لارې په عین حال کې لټون وکړئ.\nپه ياد ولرئ چې د {{SITENAME}} منځپانګې انډول ښايي بي نېټې وي.",
+       "search-error": "د لټون په وخت کې یوه تېروتنه رامنځته شوه: $1",
+       "search-warning": "د لټون کولو په وخت کې یو خبرداری راغلی دی:$1",
        "preferences": "غوره توبونه",
        "mypreferences": "غوره توبونه",
        "prefs-edits": "د سمونو شمېر:",
        "prefs-watchlist-days": "د ورځو شمېر چې په کتنلړ کې به ښکاري:",
        "prefs-watchlist-days-max": "حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}",
        "prefs-watchlist-edits-max": "د شمېر اکثر بريد: 1000",
+       "prefs-watchlist-token": "د کتنې ټوکن:",
        "prefs-misc": "بېلابېل",
        "prefs-resetpass": "پټنوم بدلول",
        "prefs-changeemail": "برېښليک پته بدلول يا ليرې کول",
        "recentchangescount": "د هغو سمونو شمېر چې په تلواليزه بڼه ښکاره بايد شي:",
        "prefs-help-recentchangescount": "پدې کې د وروستني بدلونونو، د مخونو د پېښليکونو او يادښتونه شامل دي.",
        "savedprefs": "غوره توبونه مو خوندي شول.",
+       "savedrights": "د کاروونکو ګروپونه {{GENDER:$1|$1}} خوندي شوه.",
        "timezonelegend": "د وخت سيمه:",
        "localtime": "سيمه ايز وخت:",
        "timezoneuseserverdefault": "د ويکي تلواليزه بڼه کارول ($1)",
        "username": "{{GENDER:$1|کارن نوم}}:",
        "prefs-memberingroups": "د {{PLURAL:$1|ډله|ډلې}} {{GENDER:$2|غړی}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 (تر $2)",
        "prefs-registration": "د نومليکنې وخت:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "اصلي نوم:",
        "userrights-user-editname": "يو کارن نوم ورکړئ:",
        "editusergroup": "{{GENDER:$1|کارن}} ډلې سمول",
        "editinguser": "د <strong>[[User:$1|$1]]</strong> {{GENDER:$1|کارن}} رښتې بدلول $2",
-       "userrights-editusergroup": "کارن ډلې سمول",
+       "userrights-editusergroup": "{{GENDER:$1|کارن}} ډلې سمول",
        "userrights-viewusergroup": "د{{GENDER:$1|کارن}} ګروپونه ښکاره کړي",
        "saveusergroups": "{{GENDER:$1|کارن}} ډلې خوندي کول",
        "userrights-groupsmember": "غړی د:",
        "action-userrights-interwiki": "په نورو ويکي گانو د کارنانو رښتې سمول",
        "action-siteadmin": "توکبنسټ کولپول يا نه کولپول",
        "action-sendemail": "برېښليکونه لېږل",
+       "action-editmyoptions": "خپل غوره توبونه سمول",
        "action-editmywatchlist": "خپل کتنلړ سمول",
        "action-viewmywatchlist": "خپل کتنلړ کتل",
        "action-viewmyprivateinfo": "خپل شخصي مالومات کتل",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "ښکاره کول",
        "rcfilters-tag-remove": "لرې کړئ'$1'",
+       "rcfilters-activefilters": "فعال فيلټرونه",
+       "rcfilters-advancedfilters": "پرمختللي فلټرونه",
+       "rcfilters-limit-title": "د ښودلو لپاره بدلونونه",
+       "rcfilters-limit-shownum": "آخري ښودنه {{PLURAL:$1|changes|$1 بدلونونه}}",
+       "rcfilters-days-title": "وروستي ورځي",
+       "rcfilters-hours-title": "وروستي ساعتونه",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|day|ورځې}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hour|ساعتونه}}",
+       "rcfilters-highlighted-filters-list": "لوړ شوی: $1",
+       "rcfilters-quickfilters": "خوندي شوی فلټرونه",
+       "rcfilters-quickfilters-placeholder-title": "هيڅ فيلټر نه دي صفت سوي",
+       "rcfilters-savedqueries-defaultlabel": "خوندي شوی فيلټرونه",
        "rcfilters-savedqueries-rename": "نوم بدلول",
+       "rcfilters-savedqueries-setdefault": "د فرض په ډول کښېږدي.",
+       "rcfilters-savedqueries-unsetdefault": "د فرض په ډول لري کونه",
+       "rcfilters-savedqueries-remove": "لري کول",
+       "rcfilters-savedqueries-new-name-label": "نوم",
+       "rcfilters-savedqueries-new-name-placeholder": "د فلټر هدف بیان کړئ",
+       "rcfilters-savedqueries-apply-label": "جوړ فيلټرونه",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "د فرض په ډول د فيلټر جوړول",
+       "rcfilters-savedqueries-cancel-label": "ناگارل",
+       "rcfilters-savedqueries-add-new-title": "د امستنې اوسنۍ فيلټر خوندي کړي",
        "rcfilters-filterlist-title": "چاڼگران",
+       "rcfilters-highlightmenu-title": "يو رنګ وټاکۍ",
+       "rcfilters-filter-user-experience-level-unregistered-label": "ناثبت",
        "rcfilters-filter-user-experience-level-newcomer-label": "نوي راغلي",
        "rcfilters-filter-user-experience-level-learner-label": "زده کوونکي",
-       "rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
+       "rcnotefrom": "دلته لاندې د <strong>$3, $4</strong> (څخه <strong>$1</strong> {{PLURAL:$5|راپدېخوا پېښ شوي بدلونونه|ښکاري}}).",
        "rclistfrom": "نوي بدلونونه چې له $3، $2 څخه پيلېږي ښکاره کول",
        "rcshowhideminor": "وړې سمونې $1",
        "rcshowhideminor-show": "ښکاره کول",
        "recentchangeslinked-page": "د مخ نوم:",
        "recentchangeslinked-to": "د ورکړل شوي مخ پر ځای د اړونده تړلي مخونو بدلونونه ښکاره کول",
        "recentchanges-page-added-to-category": "[[:$1]] وېشنيزې کې ورگډ شو",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] او {{PLURAL:$2|يو مخ|$2 مخونه}} وېشنيزې کې ورگډ شول",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] له وېشنيزې وغورځول شول، [[Special:WhatLinksHere/$1|په نورو مخونو کې دا مخ موجود دی.]]",
        "recentchanges-page-removed-from-category": "[[:$1]] له وېشنيزې وغورځول شو",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] او {{PLURAL:$2|يو مخ|$2 مخونه}} له وېشنيزې وغورځول شول",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] له وېشنيزې وغورځول شول، [[Special:WhatLinksHere/$1|په نورو مخونو کې دا مخ موجود دی.]]",
        "autochange-username": "د مېډياويکي خپلکاره بدلون",
        "upload": "دوتنه پورته کول",
        "uploadbtn": "دوتنه پورته کول",
        "reuploaddesc": "پورته کېدنه ناگارل او بېرته د پورته کېدنې فورمې ته ورگرځېدل",
        "upload-tryagain": "د بدلون موندلې دوتنې څرگندونې سپارل",
+       "upload-tryagain-nostash": "د بیا رالېږل شوې دوتنې وړاندې کول او تعدیل شوی بیان وړاندې کړئ",
        "uploadnologin": "غونډال کې نه ياست ننوتي",
        "uploadnologintext": "د دوتنې پورته کولو لپاره بايد $1",
        "uploaderror": "د پورته کولو ستونزه",
        "upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
        "upload-dialog-title": "دوتنه پورته کول",
        "upload-dialog-button-cancel": "ناگارل",
+       "upload-dialog-button-back": "پر شا کېدل",
        "upload-dialog-button-done": "ترسره شو",
        "upload-dialog-button-save": "خوندي کول",
        "upload-dialog-button-upload": "پورته کول",
        "upload-form-label-infoform-categories": "وېشنيزې",
        "upload-form-label-infoform-date": "نېټه",
        "backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
+       "backend-fail-invalidpath": "\"$1\" د اعتبار وړ لاره نه ده.",
        "backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
+       "backend-fail-describe": "د $1 دوتنې لپاره مېټاډاټا نشو بدلولی",
        "backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
        "backend-fail-store": "په \"$2\" باندې د \"$1\" دوتنه نه زېرمل کېږي.",
        "backend-fail-copy": "د \"$1\" دوتنه و \"$2\" ته نه لمېسل کېږي.",
        "uploadstash-refresh": "د دوتنو لړليک بياتازه کول",
        "img-auth-accessdenied": "لاسرسی رد شو",
        "img-auth-nofile": "د $1 په نوم کومه دوتنه نشته.",
+       "img-auth-streaming": "سټريمينګ \"$1\".",
        "http-invalid-url": "ناسم URL: $1",
        "http-read-error": "د HTTP د لوستلو ستونزه.",
        "http-timed-out": "د HTTP غوښتنې وخت اوښتی.",
        "sharedupload": "دا دوتنه د $1 لخوا څخه ده او کېدای شي چې نورې پروژې به يې هم کاروي.",
        "sharedupload-desc-there": "دا دوتنه د $1 څخه ده او کېدای شي چې په نورو پروژو به هم کارېږي.\nد نورو مالوماتو لپاره لطفاً [د $2 دوتنې د څرگندونو مخ] وگورئ.",
        "sharedupload-desc-here": "دا دوتنه د $1 لخوا خپرېږې او کېدای شي چې دا په نورو پروژو هم کارېدلې وي.\nد دوتنې د کارېدنې لا نور مالومات د [$2 دوتنې د څرگندنو په مخ] کې لاندې ښودل شوی.",
+       "sharedupload-desc-edit": "دا دوتنه د $1 لخوا خپرېږې او کېدای شي چې دا په نورو پروژو هم کارېدلې وي.\nکېدای شي تاسو به غواړئ چې څرگندونې يې د دې دوتنې [د $2 دوتنې د څرگندنو په مخ] کې سمې کړئ.",
        "sharedupload-desc-create": "دا دوتنه د $1 لخوا خپرېږې او کېدای شي چې دا په نورو پروژو هم کارېدلې وي.\nکېدای شي تاسو به غواړئ چې څرگندونې يې د دې دوتنې [د $2 دوتنې د څرگندنو په مخ] کې سمې کړئ.",
        "filepage-nofile": "په دې نوم کومه دوتنه نشته.",
        "filepage-nofile-link": "په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].",
        "fewestrevisions": "لږ مخليدل شوي مخونه",
        "nbytes": "$1 {{PLURAL:$1|بايټ|بايټونه}}",
        "ncategories": "$1 {{PLURAL:$1|وېشنيزه|وېشنيزې}}",
-       "ninterwikis": "$1 {{PLURAL:$1|ويکي خپلمنځي|ويکي خپلمنځي}}",
+       "ninterwikis": "$1 {{PLURAL:$1|انټرویکی|انټرویکی}}",
        "nlinks": "$1 {{PLURAL:$1|تړنه|تړنې}}",
        "nmembers": "$1 {{PLURAL:$1|غړی|غړي}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|غړی|غړي}}",
        "booksources-search": "پلټل",
        "booksources-text": "دا لاندې د هغه وېبځايونو د تړنو لړليک دی چېرته چې نوي او زاړه کتابونه پلورل کېږي، او يا هم کېدای شي چې د هغه کتاب په هکله مالومات ولري کوم چې تاسو ورپسې لټېږۍ:",
        "booksources-invalid-isbn": "دا ISBN چې تاسې ورکړی سم نه ښکاري؛ د تېروتنو لپاره د لمېسلو اصلي سرچينه وگورئ.",
+       "magiclink-tracking-isbn": "مخونه د اي اس بي ان جادوګر لينکونو سره",
        "specialloguserlabel": "ترسره کوونکی:",
-       "speciallogtitlelabel": "موخه (سرليک يا کارن):",
+       "speciallogtitlelabel": "موخه (سرليک يا {{ns:user}}:کارن نوم د کارن لپاره):",
        "log": "يادښتونه",
        "logeventslist-submit": "ښکاره کول",
        "all-logs-page": "ټول عام يادښتونه",
        "addedwatchtext-short": "د \"$1\" مخ ستاسې کتنلړ کې ورگډ شو.",
        "removewatch": "له کتنلړ نه غورځول",
        "removedwatchtext": "د \"[[:$1]]\" مخ [[Special:Watchlist|ستاسې کتنلړ]] نه لرې شو.",
+       "removedwatchtext-talk": "د \"[[:$1]]\" په نوم يو مخ ستاسې [[Special:Watchlist|کتنلړ]] کې ورگډ شو.\nپه راتلونکې کې چې په دغه مخ او د دې د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاري.",
        "removedwatchtext-short": "د \"$1\" مخ ستاسې له کتنلړ څخه لرې شو.",
        "watch": "کتل",
        "watchthispage": "همدا مخ کتل",
        "wlshowhideanons": "ورکنومي کارنان",
        "wlshowhidepatr": "څارل شوي سمونونه",
        "wlshowhidemine": "زما سمونونه",
+       "wlshowhidecategorization": "د مخ وېشنيزې",
        "watchlist-options": "د کتنلړ خوښنې",
        "watching": "د کتلو په حال کې...",
        "unwatching": "د نه کتلو په حال کې...",
        "pageinfo-header-properties": "د مخ ځانتياوې",
        "pageinfo-display-title": "ښکارېدونکی سرليک",
        "pageinfo-default-sort": "تلواليزه اوډن کونجۍ",
-       "pageinfo-length": "مخ اوږدوالی (په بايټونو)",
+       "pageinfo-length": "د مخ اوږدوالی (د تورو له مخې)",
        "pageinfo-article-id": "د مخ پېژند",
        "pageinfo-language": "د مخ د مېنځپانگې ژبه",
        "pageinfo-content-model": "د مخ مېنځپانگې جوړښت",
        "exif-unknowndate": "ناڅرگنده نېټه",
        "exif-orientation-1": "نورمال",
        "exif-componentsconfiguration-0": "نشته دی",
-       "exif-exposureprogram-1": "Ù\84اسÙ\8a",
+       "exif-exposureprogram-1": "Ù\84ارÚ\9aÙ\88Ù\88Ù\86Ù\8aز",
        "exif-exposureprogram-2": "نورماله پروگرام",
        "exif-subjectdistance-value": "$1 متره",
        "exif-meteringmode-0": "ناجوت",
        "version-libraries-license": "منښتليک",
        "version-libraries-description": "څرگندونه",
        "version-libraries-authors": "ليکوالان",
-       "redirect": "ورگرځېدنې د دوتنې، کارن، مخ يا بڼې پېژند له مخې",
+       "redirect": "د دوتنې ورگرځېدنې، کارن، مخ يا بڼې پېژند له مخې",
        "redirect-summary": "دا ځانګړی مخ د یوې دوتنې (د فیلمین لخوا ورکړ شوی)، یو مخ (د بیاکتنې پیژند یا د پاڼې پېژندل شوی اي ډي)، د کاروونکي پاڼه (د شمېره کاروونکي اي ډي ورکړه)، او یا د ننوتلو ننوتل (د ننوتنې اي ډي ورکړل شوی). کارول:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "ورځه",
        "redirect-lookup": "وګوري:",
        "changecredentials-submit": "بدلول",
        "removecredentials-submit": "غورځول",
        "credentialsform-account": "گڼون نوم:",
+       "linkaccounts": "ورګډ سوي ګڼونونه",
+       "linkaccounts-success-text": "ګڼون ورګډ سو.",
+       "linkaccounts-submit": "لينک کڼوڼونه",
+       "unlinkaccounts": "ناخوښه ګڼونونه",
+       "unlinkaccounts-success": "ګڼون ناخوښه سو.",
+       "restrictionsfield-badip": "ناباوره آي پي  آدرس او حدود د : $1",
+       "restrictionsfield-label": "اجازه ورکړل شوي آي پي حدودونه:",
+       "revid": "بیاکتنه $1",
        "pageid": "د مخ پېژند$1",
        "rawhtml-notallowed": "لیبلونه &lt;html&gt; د منظمو ليکنو څخه بهر نشي کارول کیدی.",
        "gotointerwiki": "{{SITENAME}} پريښودل",
        "gotointerwiki-invalid": "ټاکل شوی سرلیک نامعلوم دی.",
        "gotointerwiki-external": "تاسي د  {{SITENAME}} د پريښودلو په حال کې یاست لیدلو لپاره [[$2]]، کوم یو جلا ویب پاڼه ده.\n\n'''[$1 دوام ورکونه و $1 ته]'''",
        "undelete-cantedit": "تاسو دا مخ شيه ړنګولي ځکه چې تاسو د دا پامخ د سمون اجازه نه لرئ.",
+       "pagedata-title": "د پاڼې ډاټا",
        "pagedata-not-acceptable": "د سمون نمونه ونه موندل شوه. ملاتړ شوي ميمي ډولونه: $1",
        "pagedata-bad-title": "ناسم سرليک: $1"
 }
index 2712013..f4e9e97 100644 (file)
                        "WikiUser22222",
                        "BarbaraAckles",
                        "Trigonometria87",
-                       "RadiX"
+                       "RadiX",
+                       "Fitoschido"
                ]
        },
        "tog-underline": "Link sublinhado:",
        "anonpreviewwarning": "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''",
        "missingsummary": "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.",
        "selfredirect": "<strong>Aviso:</strong> Você esta redirecionando esta pagina para ela mesmo. Você pode ter especificado o caminho errado para redirecionar, ou você pode estar editando a pagina errada. Se você clicar \"$1\" novamente, o redirecionamento será criado de qualquer modo.",
-       "missingcommenttext": "Por favor, introduzida um comentário abaixo.",
+       "missingcommenttext": "Por favor, digite um comentário.",
        "missingcommentheader": "'''Lembrete:''' Você não introduziu um assunto/título para este comentário.\nSe você clicar novamente \"$1\", a sua edição será salva sem um assunto/título.",
        "summary-preview": "Previsão do resumo de edição:",
        "subject-preview": "Previsão do assunto/título:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceano Índico",
        "timezoneregion-pacific": "Oceano Pacífico",
-       "allowemail": "Permitir que outros usuários me enviem e-mails",
-       "email-blacklist-label": "Proibir que esses usuários me enviem e-mails:",
+       "allowemail": "Permitir que outros usuários enviem-me e-mails",
+       "email-blacklist-label": "Proibir que estes usuários enviem-me e-mails:",
        "prefs-searchoptions": "Busca",
        "prefs-namespaces": "Espaços nominais",
        "default": "padrão",
        "viewinguserrights": "Visualizar os privilégios {{GENDER:$1|do usuário|da usuária}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Editar grupos {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}}",
        "userrights-viewusergroup": "Ver grupos de {{GENDER:$1|usuários}}",
-       "saveusergroups": "Salvar grupos de{{GENDER:$1|usuário}}",
+       "saveusergroups": "Salvar grupos {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
        "userrights-groups-help": "É possível alterar os grupos em que {{GENDER:$1|este usuário|esta usuária|este(a) usuário(a)}} se encontra:\n* Uma caixa de seleção selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} encontra-se no grupo.\n* Uma caixa de seleção não selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} não se encontra no grupo.\n* Um * indica que não pode remover o grupo depois de o adicionar, ou vice-versa.\n* Um # indica que você só pode atrasar o tempo de expiração dos membros deste grupo; você não pode aumentá-lo.",
        "recentchanges-legend": "Opções das mudanças recentes",
        "recentchanges-summary": "Acompanhe nesta página as mudanças mais recentes deste wiki.",
        "recentchanges-noresult": "Nenhuma alteração correspondente a esses critérios foi realizada durante o período selecionado.",
+       "recentchanges-timeout": "Esta pesquisa expirou. Você pode tentar diferentes parâmetros de pesquisa.",
+       "recentchanges-network": "Devido a um erro técnico, nenhum resultado pode ser carregado. Por favor tente atualizar a página.",
        "recentchanges-feed-description": "Acompanhe neste feed as mudanças mais recentes do wiki.",
        "recentchanges-label-newpage": "Esta edição criou uma nova página",
        "recentchanges-label-minor": "Esta é uma edição menor",
        "recentchanges-submit": "Exibir",
        "rcfilters-tag-remove": "Remover '$1'",
        "rcfilters-legend-heading": "<strong>Lista de abreviaturas:</strong>",
-       "rcfilters-other-review-tools": " <strong>Outras ferramentas de revisão:</strong>",
+       "rcfilters-other-review-tools": " Outras ferramentas de revisão:",
        "rcfilters-group-results-by-page": "Agrupar resultado por página",
        "rcfilters-grouping-title": "Agrupamento",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "rcfilters-highlighted-filters-list": "Realçado: $1",
        "rcfilters-quickfilters": "Filtros salvos",
-       "rcfilters-quickfilters-placeholder-title": "Ainda não foi gravado nenhum link",
+       "rcfilters-quickfilters-placeholder-title": "Ainda não foi salvado nenhum filtro",
        "rcfilters-quickfilters-placeholder-description": "Para gravar as suas configurações dos filtros e reutilizá-las mais tarde, clique o ícone do marcador de página, na área Filtro Ativo abaixo.",
        "rcfilters-savedqueries-defaultlabel": "Filtros salvos",
        "rcfilters-savedqueries-rename": "Renomear",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Criar filtro padrão",
        "rcfilters-savedqueries-cancel-label": "Cancelar",
        "rcfilters-savedqueries-add-new-title": "Gravar configurações atuais de filtros",
+       "rcfilters-savedqueries-already-saved": "Esses filtros já foram salvos. Altere suas configurações para criar um novo Filtro Salvo.",
        "rcfilters-restore-default-filters": "Restaurar filtros padrão",
        "rcfilters-clear-all-filters": "Limpar todos os filtros",
        "rcfilters-show-new-changes": "Veja as novas mudanças",
-       "rcfilters-search-placeholder": "Filtrar alterações recentes (procurar ou começar a digitar)",
+       "rcfilters-search-placeholder": "Filtrar mudanças (usar o menu ou procurar o nome do filtro)",
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-empty-filter": "Nenhum filtro ativo. Todas as contribuições são mostradas.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filter-user-experience-level-unregistered-label": "Não registados",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que não estão autenticados.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Recém-chegados",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Menos de 10 edições e 4 dias de atividade.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores registrados com menos de 10 edições ou 4 dias de atividade.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprendizes",
        "rcfilters-filter-user-experience-level-learner-description": "Mais experiência do que \"Novatos\", mas menos do que \"Usuários experientes\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Usuários experientes",
        "rcfilters-filtergroup-watchlistactivity": "Atividade da lista de observação",
        "rcfilters-filter-watchlistactivity-unseen-label": "Mudanças não vistas",
        "rcfilters-filter-watchlistactivity-unseen-description": "Modificações nas páginas que você não visitou desde as alterações ocorridas.",
-       "rcfilters-filter-watchlistactivity-seen-label": "Ver mudanças",
+       "rcfilters-filter-watchlistactivity-seen-label": "Mudanças vistas",
        "rcfilters-filter-watchlistactivity-seen-description": "Modificações nas páginas que visitou desde as alterações ocorridas.",
        "rcfilters-filtergroup-changetype": "Tipo de mudança",
        "rcfilters-filter-pageedits-label": "Edições em páginas",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:não</strong> $1",
        "rcfilters-exclude-button-off": "Excluir selecionado",
        "rcfilters-exclude-button-on": "Excluindo selecionados",
-       "rcfilters-view-advanced-filters-label": "Filtros avançados",
        "rcfilters-view-tags": "Edições marcadas",
        "rcfilters-view-namespaces-tooltip": "Filtrar resultados por namespace",
        "rcfilters-view-tags-tooltip": "Filtre os resultados usando edit tags",
        "uploaded-script-svg": "Encontrado elemento de script \"$1\" no arquivo SVG carregado.",
        "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.",
        "uploaded-event-handler-on-svg": "Não é permitido configurar atributos que manipulem eventos  <code>$1=\"$2\"</code> em arquivos SVG.",
-       "uploaded-href-attribute-svg": "os atributos href nos ficheiros SVG só están autorizados a ligar a direccións http:// ou https://, atopado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> os elementos só podem vincular (href) aos dados: (arquivo incorporado), http:// ou https://, ou fragmento (#, same-document) alvos.  Para outros elementos, como <image>, apenas dados: e os fragmentos são permitidos. Tente incorporar imagens ao exportar seu SVG. Encontrado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Encontrado href para dados não seguros: alvo URI <code>&lt;$1 $2=\"$3\"&gt;</code> no arquivo SVG carregado.",
        "uploaded-animate-svg": "Encontrado a tag \"animate\" que pode estar mudando \"href\", usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no arquivo SVG carregado.",
        "uploaded-setting-event-handler-svg": "A definição de atributos controladores de eventos está bloqueada. Foi detetado <code>&lt;$1 $2=\"$3\"&gt;</code> no arquivo SVG carregado.",
        "uploadstash-refresh": "Atualizar a lista de arquivos",
        "uploadstash-thumbnail": "ver miniatura",
        "uploadstash-exception": " Não foi possível armazenar o upload no cache ($1): \"$2\".",
+       "uploadstash-bad-path": "O caminho não existe.",
+       "uploadstash-bad-path-invalid": "O caminho não é válido.",
+       "uploadstash-bad-path-unknown-type": "O tipo \"$1\" é desconhecido.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "O nome da miniatura é desconhecido.",
+       "uploadstash-bad-path-no-handler": "Não foi encontrada uma rotina de tratamento para o tipo mime $1 do ficheiro $2.",
+       "uploadstash-bad-path-bad-format": "A chave \"$1\" não tem um formato apropriado.",
+       "uploadstash-file-not-found": "A chave \"$1\" não foi encontrada na área de arquivos escondidos.",
+       "uploadstash-file-not-found-no-thumb": "Não foi possível obter a miniatura.",
+       "uploadstash-file-not-found-no-local-path": "Não existe um caminho local para o elemento redimensionado.",
+       "uploadstash-file-not-found-no-object": "Não foi possível criar um objeto arquivo local para a miniatura.",
+       "uploadstash-file-not-found-no-remote-thumb": "A obtenção da miniatura falhou: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Cabeçalho content-type em falta.",
+       "uploadstash-file-not-found-not-exists": "Não é possível encontrar o caminho, ou o arquivo não é normal.",
+       "uploadstash-file-too-large": "Não é possível servir um arquivo maior do que $1 bytes.",
+       "uploadstash-not-logged-in": "Não há nenhum usuário com sessão iniciada; os arquivos têm de pertencer a usuários.",
+       "uploadstash-wrong-owner": "Este arquivo ($1) não pertence ao usuário atual.",
+       "uploadstash-no-such-key": "A chave ($1) não existe; não é possível remover.",
+       "uploadstash-no-extension": "A extensão é nula.",
+       "uploadstash-zero-length": "O arquivo tem tamanho zero.",
        "invalid-chunk-offset": "Deslocamento de fragmento inválido",
        "img-auth-accessdenied": "Acesso negado",
        "img-auth-nopathinfo": "PATH_INFO em falta.\nO seu servidor não está configurado para passar esta informação.\nPode ser baseado em CGI e não consegue suportar img_auth.\nConsulte a documentação em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Image Authorization].",
        "nopagetitle": "Página alvo não existe",
        "nopagetext": "A página alvo especificada não existe.",
        "pager-newer-n": "{{PLURAL:$1|posterior|$1 posteriores}}",
-       "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriores}}",
+       "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "suppress": "Suprimir",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
        "apihelp": "Ajuda de API",
        "ipb_blocked_as_range": "Erro: O IP $1 não se encontra bloqueado de forma direta, não podendo ser desbloqueado deste modo. Se encontra bloqueado como parte do \"range\" $2, o qual pode ser desbloqueado.",
        "ip_range_invalid": "Gama de IPs inválida.",
        "ip_range_toolarge": "Intervalos de bloqueio maiores do que /$1 não são permitidos",
-       "ip_range_exceeded": "O intervalo de IP excede o seu alcance máximo. Intervalo permitido:: /$1.",
+       "ip_range_exceeded": "O intervalo de IP excede o seu alcance máximo. Intervalo permitido: /$1.",
        "ip_range_toolow": "Os intervalos de IP não são efetivamente permitidos.",
        "proxyblocker": "Bloqueador de proxy",
        "proxyblockreason": "O seu endereço de IP foi bloqueado por ser um proxy público. Por favor contacte o seu fornecedor do serviço de Internet ou o apoio técnico e informe-os deste problema de segurança grave.",
        "thumbnail_image-failure-limit": "Houveram muitas tentativas falhas recentemente ($1 ou mais) de criação desta miniatura. Por favor, tente novamente mais tarde.",
        "import": "Importar páginas",
        "importinterwiki": "importar páginas a partir de outra wiki",
-       "import-interwiki-text": "Selecione um wiki e um título de página para importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
+       "import-interwiki-text": "Selecione uma wiki e o título de uma página que deseje importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
        "import-interwiki-sourcewiki": "Fonte wiki:",
        "import-interwiki-sourcepage": "Página de origem:",
        "import-interwiki-history": "Copiar todas as edições para esta página",
index 755b581..2861e8f 100644 (file)
        "history_small": "histórico",
        "updatedmarker": "atualizado desde a minha última visita",
        "printableversion": "Versão para impressão",
-       "permalink": "Hipeligação permanente",
+       "permalink": "Hiperligação permanente",
        "print": "Imprimir",
        "view": "Ver",
        "view-foreign": "Ver em $1",
        "title-invalid-talk-namespace": "O título da página solicitada refere-se a uma página de discussão que não existe.",
        "title-invalid-characters": "O título da página solicitada contém carateres inválidos: \"$1\".",
        "title-invalid-relative": "O título contém um caminho relativo. Os títulos relativos (./, ../) são inválidos porque estarão inacessíveis muitas vezes ao serem carregados pelo navegador do utilizador.",
-       "title-invalid-magic-tilde": "O título da página solicitada possui uma sequência de tis inválida (<nowiki>~~~</nowiki>).",
+       "title-invalid-magic-tilde": "O título da página solicitada contém uma sequência de tis inválida (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "O título da página solicitada é demasiado longo. Não deverá ser maior que $1 {{PLURAL:$1|byte|bytes}} na codificação UTF-8.",
        "title-invalid-leading-colon": "O título da página solicitada contém um erro de pontuação (:) no início.",
        "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. {{PLURAL:$1|Está disponível na ''cache'' um máximo de um resultado|Estão disponíveis na ''cache'' um máximo de $1 resultados}}.",
        "anonpreviewwarning": "<em>Não iniciou sessão. Ao gravar, registará o seu endereço IP no histórico de edições da página.</em>",
        "missingsummary": "<strong>Atenção:</strong> Não introduziu um resumo da edição.\nSe clicar novamente \"$1\", a sua edição será gravada sem resumo.",
        "selfredirect": "<strong>Aviso:</strong> Está a redirecionar esta página para si mesma.\nPode ter especificado o destino errado para o redirecionamento ou pode estar a editar a página errada.\nSe clicar novamente \"$1\", o redirecionamento será criado na mesma.",
-       "missingcommenttext": "Introduza um comentário abaixo, por favor.",
+       "missingcommenttext": "Introduza um comentário, por favor.",
        "missingcommentheader": "<strong>Atenção:</strong> Não introduziu um assunto para este comentário.\nSe clicar novamente \"$1\", a sua edição será gravada sem assunto.",
        "summary-preview": "Antevisão do resumo de edição:",
        "subject-preview": "Antevisão do assunto:",
        "sectioneditnotsupported-text": "A edição de secções não é suportada nesta página.",
        "permissionserrors": "Erro de permissão",
        "permissionserrorstext": "Não possui permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
-       "permissionserrorstext-withaction": "Não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
+       "permissionserrorstext-withaction": "Não tem permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "contentmodelediterror": "Não pode editar esta revisão porque o modelo de conteúdo é <code>$1</code>, que é diferente do modelo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Aviso: Está a recriar uma página anteriormente eliminada.</strong>\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
        "moveddeleted-notice": "Esta página foi eliminada.\nPara sua referência, é apresentado abaixo o registo de eliminação, proteção e movimentação da página.",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceano Índico",
        "timezoneregion-pacific": "Oceano Pacífico",
-       "allowemail": "Aceitar correio eletrónico de outros utilizadores",
+       "allowemail": "Permitir que outros utilizadores me enviem correio eletrónico",
        "email-blacklist-label": "Proibir estes utilizadores de me enviarem correio eletrónico:",
        "prefs-searchoptions": "Pesquisa",
        "prefs-namespaces": "Domínios",
        "recentchanges": "Mudanças recentes",
        "recentchanges-legend": "Opções das mudanças recentes",
        "recentchanges-summary": "Acompanhe nesta página as mudanças mais recentes da wiki.",
-       "recentchanges-noresult": "Não foi realizada nenhuma alteração correspondente a esses critérios durante o período selecionado.",
+       "recentchanges-noresult": "Não foi realizada nenhuma alteração que corresponda a estes critérios durante o período especificado.",
+       "recentchanges-timeout": "O tempo limite para esta pesquisa foi ultrapassado. Tente usar parâmetros de pesquisa diferentes.",
+       "recentchanges-network": "Devido a uma falha técnica, não foi possível carregar nenhum resultado. Tente atualizar a página, por favor.",
        "recentchanges-feed-description": "Acompanhe neste ''feed'' as mudanças mais recentes da wiki.",
        "recentchanges-label-newpage": "Esta edição criou uma nova página",
        "recentchanges-label-minor": "Esta é uma edição menor",
        "recentchanges-submit": "Mostrar",
        "rcfilters-tag-remove": "Remover '$1'",
        "rcfilters-legend-heading": "<strong>Lista de abreviações:</strong>",
-       "rcfilters-other-review-tools": "<strong>Outras ferramentas de revisão</strong>",
+       "rcfilters-other-review-tools": "Outras ferramentas de revisão",
        "rcfilters-group-results-by-page": "Agrupar resultados por página",
        "rcfilters-grouping-title": "Agrupamento",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "rcfilters-highlighted-filters-list": "Realçado: $1",
        "rcfilters-quickfilters": "Filtros gravados",
-       "rcfilters-quickfilters-placeholder-title": "Ainda não foi gravado nenhum link",
-       "rcfilters-quickfilters-placeholder-description": "Para gravar as suas configurações dos filtros e reutilizá-las mais tarde, clique o ícone do marcador de página, na área Filtro Ativo abaixo.",
+       "rcfilters-quickfilters-placeholder-title": "Ainda não foi gravado nenhum filtro",
+       "rcfilters-quickfilters-placeholder-description": "Para gravar as suas configurações dos filtros e reutilizá-las mais tarde, clique o ícone do marcador de página, na área dos filtros ativos abaixo.",
        "rcfilters-savedqueries-defaultlabel": "Filtros gravados",
        "rcfilters-savedqueries-rename": "Alterar o nome",
        "rcfilters-savedqueries-setdefault": "Ativar por padrão",
        "rcfilters-savedqueries-apply-label": "Criar filtro",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Criar filtro padrão",
        "rcfilters-savedqueries-cancel-label": "Cancelar",
-       "rcfilters-savedqueries-add-new-title": "Gravar configurações atuais de filtros",
+       "rcfilters-savedqueries-add-new-title": "Gravar as configurações de filtros atuais",
+       "rcfilters-savedqueries-already-saved": "Estes filtros já foram gravados",
        "rcfilters-restore-default-filters": "Restaurar os filtros padrão",
        "rcfilters-clear-all-filters": "Limpar todos os filtros",
        "rcfilters-show-new-changes": "Mostrar as mudanças mais recentes",
-       "rcfilters-search-placeholder": "Filtrar mudanças recentes (navegue ou comece a escrever)",
+       "rcfilters-search-placeholder": "Filtrar mudanças (usar o menu ou procurar o nome do filtro)",
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-empty-filter": "Não há filtros ativos. São mostradas todas as contribuições.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-state-message-subset": "Este filtro não produz efeito porque os seus resultados já estão incluídos nos {{PLURAL:$2|do seguinte filtro mais abrangente|dos seguintes filtros mais abrangentes}} (tente usar o realce para diferenciá-lo): $1",
        "rcfilters-state-message-fullcoverage": "Selecionar todos os filtros deste grupo é o mesmo que não selecionar nenhum, portanto este filtro não produz efeito. O grupo inclui: $1",
        "rcfilters-filtergroup-authorship": "Autoria da contribuição",
-       "rcfilters-filter-editsbyself-label": "Modificações feitas por si",
+       "rcfilters-filter-editsbyself-label": "Mudanças feitas por si",
        "rcfilters-filter-editsbyself-description": "As suas edições.",
-       "rcfilters-filter-editsbyother-label": "Modificações de outros",
-       "rcfilters-filter-editsbyother-description": "Todas as modificações, exceto as suas.",
+       "rcfilters-filter-editsbyother-label": "Mudanças feitas por outros",
+       "rcfilters-filter-editsbyother-description": "Todas as mudanças, exceto as feitas por si.",
        "rcfilters-filtergroup-userExpLevel": "Registo de utilizadores e experiência",
        "rcfilters-filter-user-experience-level-registered-label": "Registados",
        "rcfilters-filter-user-experience-level-registered-description": "Editores autenticados.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Não registados",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que não estão autenticados.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Novatos",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Editores registados, com menos de 10 edições e de 4 dias de atividade.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores registados, que têm menos de 10 edições ou de 4 dias de atividade.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprendizes",
        "rcfilters-filter-user-experience-level-learner-description": "Editores registados, com mais experiência do que \"Novatos\", mas menos do que \"Utilizadores experientes\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Utilizadores experientes",
        "rcfilters-filtergroup-watchlistactivity": "Atividade das páginas vigiadas",
        "rcfilters-filter-watchlistactivity-unseen-label": "Mudanças ainda não vistas",
        "rcfilters-filter-watchlistactivity-unseen-description": "Modificações de páginas que ainda não visitou depois de serem modificadas.",
-       "rcfilters-filter-watchlistactivity-seen-label": "Modificações já vistas",
+       "rcfilters-filter-watchlistactivity-seen-label": "Mudanças já vistas",
        "rcfilters-filter-watchlistactivity-seen-description": "Modificações de páginas que já visitou depois de serem modificadas.",
        "rcfilters-filtergroup-changetype": "Tipo de alteração",
        "rcfilters-filter-pageedits-label": "Edições de páginas",
        "rcfilters-typeofchange-conflicts-hideminor": "Este filtro de Tipo de Modificação entra em conflito com o filtro \"Edições menores\". Certos tipos de modificações não podem ser classificados como \"menores\".",
        "rcfilters-filtergroup-lastRevision": "Últimas revisões",
        "rcfilters-filter-lastrevision-label": "Última revisão",
-       "rcfilters-filter-lastrevision-description": "Só a modificação mais recente de uma página.",
-       "rcfilters-filter-previousrevision-label": "Revisões menos a mais recente",
-       "rcfilters-filter-previousrevision-description": "Todas as modificações que não são a \"última revisão\".",
+       "rcfilters-filter-lastrevision-description": "Só a mudança mais recente de uma página.",
+       "rcfilters-filter-previousrevision-label": "Excepto a última revisão",
+       "rcfilters-filter-previousrevision-description": "Todas as mudanças que não sejam a \"Última revisão\".",
        "rcfilters-filter-excluded": "Excluído",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:não</strong> $1",
        "rcfilters-exclude-button-off": "Excluir os selecionados",
        "rcfilters-exclude-button-on": "A excluir os selecionados",
-       "rcfilters-view-advanced-filters-label": "Filtros avançados",
        "rcfilters-view-tags": "Edições etiquetadas",
        "rcfilters-view-namespaces-tooltip": "Filtrar resultados por espaço nominal",
        "rcfilters-view-tags-tooltip": "Filtrar resultados usando etiquetas de edição",
        "rcfilters-liveupdates-button": "Atualizações instantâneas",
        "rcfilters-liveupdates-button-title-on": "Desligar atualizações ao vivo",
        "rcfilters-liveupdates-button-title-off": "Apresentar mudanças novas à medida que acontecem",
-       "rcfilters-watchlist-markseen-button": "Marcar todas as modificações como já vistas",
+       "rcfilters-watchlist-markseen-button": "Marcar todas as mudanças como já vistas",
        "rcfilters-watchlist-edit-watchlist-button": "Editar a sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As mudanças das páginas que ainda não visitou após terem sido alteradas aparecem a <strong>negrito</strong>, com marcadores sólidos.",
        "rcfilters-preference-label": "Ocultar a versão melhorada das mudanças recentes",
        "uploadnologin": "Não autenticado",
        "uploadnologintext": "Tem de $1 para enviar ficheiros.",
        "upload_directory_missing": "O diretório de carregamento de ficheiros ($1) não existe e o servidor de Internet não conseguiu criá-lo.",
-       "upload_directory_read_only": "O servidor de Internet não possui permissão de escrita no diretório de carregamento de ficheiros ($1).",
+       "upload_directory_read_only": "O servidor de Internet não tem permissão de escrita no diretório de carregamento de ficheiros ($1).",
        "uploaderror": "Erro ao carregar",
        "upload-recreate-warning": "<strong>Aviso: Um ficheiro com esse nome foi eliminado ou movido.</strong>\n\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
        "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma hiperligação com um dos seguintes formatos:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheiro.jpg]]</nowiki></code></strong> para mostrar uma imagem nas suas dimensões originais;\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheiro.png|200px|thumb|left|texto]]</nowiki></code></strong> para mostrar uma imagem com a dimensão horizontal de 200 píxeis, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ficheiro.ogg]]</nowiki></code></strong> para apresentar uma hiperligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem quer outros dados.",
        "uploaded-script-svg": "Encontrou um elemento scriptable no ficheiro \"$1\" SVG carregado.",
        "uploaded-hostile-svg": "Encontrou-se um código CSS não seguro no elemento de estilo do ficheiro SVG carregado.",
        "uploaded-event-handler-on-svg": "Não é permitido configurar atributos controladores de eventos <code>$1=\"$2\"</code> nos ficheiros SVG.",
-       "uploaded-href-attribute-svg": "Os atributos <code>href</code> em ficheiros SVG só estão autorizados a ligar a endereços http:// ou https://, mas foi encontrado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> os elementos só podem ser hiperligações (href) para destinos data: (ficheiro incorporado), http:// ou https://, ou fragment (#, mesmo documento).  Para outros elementos, tais como <image>, só são permitidos data: e fragment.  Tente incorporar imagens ao exportar o seu SVG.  Foi encontrado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Detetado <code>href</code> para dados inseguros: alvo URI <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
        "uploaded-animate-svg": "Foi detetado um elemento \"animate\" que pode estar a alterar <code>href</code>, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
        "uploaded-setting-event-handler-svg": "A definição de atributos controladores de eventos está bloqueada. Foi detetado <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
        "uploadstash-refresh": "Atualizar a lista de ficheiros",
        "uploadstash-thumbnail": "ver miniatura",
        "uploadstash-exception": "Não foi possível gravar o carregamento na área de ficheiros escondidos ($1): \"$2\".",
+       "uploadstash-bad-path": "O caminho não existe.",
+       "uploadstash-bad-path-invalid": "O caminho não é válido.",
+       "uploadstash-bad-path-unknown-type": "O tipo \"$1\" é desconhecido.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "O nome da miniatura é desconhecido.",
+       "uploadstash-bad-path-no-handler": "Não foi encontrada uma rotina de tratamento para o tipo mime $1 do ficheiro $2.",
+       "uploadstash-bad-path-bad-format": "A chave \"$1\" não tem um formato apropriado.",
+       "uploadstash-file-not-found": "A chave \"$1\" não foi encontrada na área de ficheiros escondidos.",
+       "uploadstash-file-not-found-no-thumb": "Não foi possível obter a miniatura.",
+       "uploadstash-file-not-found-no-local-path": "Não existe um caminho local para o elemento redimensionado.",
+       "uploadstash-file-not-found-no-object": "Não foi possível criar um objeto ficheiro local para a miniatura.",
+       "uploadstash-file-not-found-no-remote-thumb": "A obtenção da miniatura falhou: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Cabeçalho content-type em falta.",
+       "uploadstash-file-not-found-not-exists": "Não é possível encontrar o caminho, ou o ficheiro não é normal.",
+       "uploadstash-file-too-large": "Não é possível servir um ficheiro maior do que $1 bytes.",
+       "uploadstash-not-logged-in": "Não há nenhum utilizador com sessão iniciada; os ficheiros têm de pertencer a utilizadores.",
+       "uploadstash-wrong-owner": "Este ficheiro ($1) não pertence ao utilizador atual.",
+       "uploadstash-no-such-key": "A chave ($1) não existe; não é possível remover.",
+       "uploadstash-no-extension": "A extensão é nula.",
+       "uploadstash-zero-length": "O ficheiro tem tamanho zero.",
        "invalid-chunk-offset": "Deslocamento de fragmento inválido",
        "img-auth-accessdenied": "Acesso negado",
        "img-auth-nopathinfo": "PATH_INFO em falta.\nO seu servidor não está configurado para passar esta informação.\nPode ser baseado em CGI e não consegue suportar img_auth.\nConsulte a documentação em https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "brokenredirects-edit": "editar",
        "brokenredirects-delete": "eliminar",
        "withoutinterwiki": "Páginas sem ligações interlínguas",
-       "withoutinterwiki-summary": "As seguintes páginas não têm ligação para versões noutros idiomas.",
+       "withoutinterwiki-summary": "As seguintes páginas não contêm hiperligações para versões noutras línguas.",
        "withoutinterwiki-legend": "Prefixo",
        "withoutinterwiki-submit": "Mostrar",
        "fewestrevisions": "Páginas com menos revisões",
        "shortpages": "Páginas curtas",
        "longpages": "Páginas longas",
        "deadendpages": "Páginas sem saída",
-       "deadendpagestext": "As seguintes páginas não contêm links para outras páginas na wiki {{SITENAME}}.",
+       "deadendpagestext": "As seguintes páginas não contêm hiperligações para outras páginas na wiki {{SITENAME}}.",
        "protectedpages": "Páginas protegidas",
        "protectedpages-indef": "Apenas proteções indefinidas",
        "protectedpages-summary": "Esta página lista páginas existentes que estão protegidas. Para ver os títulos cuja criação está impossibilitada, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "nopagetitle": "A página de destino não existe",
        "nopagetext": "A página de destino que especificou não existe.",
        "pager-newer-n": "{{PLURAL:$1|posterior|$1 posteriores}}",
-       "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriores}}",
+       "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "suppress": "Suprimir",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
        "apihelp": "Ajuda da API",
        "apisandbox-retry": "Tentar novamente",
        "apisandbox-loading": "A carregar a informação do módulo API \"$1\"...",
        "apisandbox-load-error": "Ocorreu um erro ao carregar a informação do módulo API \"$1\": $2",
-       "apisandbox-no-parameters": "Este módulo API não possui parâmetros.",
+       "apisandbox-no-parameters": "Este módulo API não tem parâmetros.",
        "apisandbox-helpurls": "Ligações de ajuda",
        "apisandbox-examples": "Exemplos",
        "apisandbox-dynamic-parameters": "Parâmetros adicionais",
        "allpagessubmit": "Ver",
        "allpagesprefix": "Apresentar páginas iniciadas por:",
        "allpagesbadtitle": "O título de página fornecido era inválido ou tinha um prefixo interlínguas ou interwikis.\nTalvez contenha um ou mais caracteres que não podem ser usados nos títulos.",
-       "allpages-bad-ns": "A wiki {{SITENAME}} não possui o espaço nominal \"$1\".",
+       "allpages-bad-ns": "A wiki {{SITENAME}} não tem o espaço nominal \"$1\".",
        "allpages-hide-redirects": "Ocultar redirecionamentos",
        "cachedspecial-viewing-cached-ttl": "Está a ver uma versão desta página guardada na cache há pelo menos $1.",
        "cachedspecial-viewing-cached-ts": "Está a ver uma versão da página guardada na cache, que pode estar desatualizada.",
        "ipb_expiry_invalid": "Tempo de expiração inválido.",
        "ipb_expiry_old": "O tempo de expiração está no passado.",
        "ipb_expiry_temp": "Bloqueios com nome de utilizador oculto devem ser permanentes.",
-       "ipb_hide_invalid": "Não foi possível suprimir esta conta; ela possui mais de {{PLURAL:$1|uma edição|$1 edições}}.",
+       "ipb_hide_invalid": "Não foi possível suprimir esta conta; ela tem mais de {{PLURAL:$1|uma edição|$1 edições}}.",
        "ipb_already_blocked": "\"$1\" já se encontra bloqueado",
        "ipb-needreblock": "$1 já se encontra bloqueado. Deseja alterar as configurações?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Outro bloqueio|Outros bloqueios}}",
        "movecategorypage-warning": "<strong>Aviso:</strong> Está prestes a mover uma categoria. Note, por favor, que apenas moverá a página da categoria e que quaisquer páginas que estejam nesta categoria <em>não</em> serão recategorizadas para a nova.",
        "movenologintext": "Precisa de ser um utilizador registado e [[Special:UserLogin|ter sessão iniciada]] para poder mover uma página.",
        "movenotallowed": "Não tem permissão para mover páginas.",
-       "movenotallowedfile": "Não possui permissão para mover ficheiros.",
+       "movenotallowedfile": "Não tem permissão para mover ficheiros.",
        "cant-move-user-page": "Não tem permissão para mover páginas de utilizador (pode mover sub-páginas).",
        "cant-move-to-user-page": "Não tem permissão para mover uma página para uma página de utilizador (pode movê-la para uma subpágina de utilizador).",
-       "cant-move-category-page": "Não possui permissão para mover categorias.",
-       "cant-move-to-category-page": "Não possui permissão para mover uma página para uma categoria.",
+       "cant-move-category-page": "Não tem permissão para mover páginas de categoria.",
+       "cant-move-to-category-page": "Não tem permissão para mover uma página para uma página de categoria.",
        "cant-move-subpages": "Não tem permissão para mover subpáginas.",
        "namespace-nosubpages": "O espaço nominal \"$1\" não permite subpáginas.",
        "newtitle": "Novo título:",
        "file-no-thumb-animation": "<strong>Nota: Devido a limitações técnicas, miniaturas deste ficheiro não serão animadas.</strong>",
        "file-no-thumb-animation-gif": "<strong>Nota: Devido a limitações técnicas, miniaturas de GIFs com imagens de alta resolução como este não serão animadas.</strong>",
        "newimages": "Galeria de novos ficheiros",
-       "imagelisttext": "Abaixo está uma lista de <strong>$1</strong> {{PLURAL:$1|ficheiro|ficheiros}} ordenados $2.",
+       "imagelisttext": "Abaixo está uma lista de <strong>$1</strong> {{PLURAL:$1|ficheiro ordenado|ficheiros ordenados}} $2.",
        "newimages-summary": "Esta página especial mostra os ficheiros mais recentemente enviados.",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de ficheiro (ou parte dele):",
        "fileduplicatesearch-submit": "Pesquisar",
        "fileduplicatesearch-info": "$1 × $2 píxeis<br />Tamanho: $3<br />tipo MIME: $4",
        "fileduplicatesearch-result-1": "O ficheiro \"$1\" não tem cópias idênticas.",
-       "fileduplicatesearch-result-n": "O ficheiro \"$1\" possui {{PLURAL:$2|uma cópia idêntica|$2 cópias idênticas}}.",
+       "fileduplicatesearch-result-n": "O ficheiro \"$1\" tem {{PLURAL:$2|uma cópia idêntica|$2 cópias idênticas}}.",
        "fileduplicatesearch-noresults": "Não foi encontrado nenhum ficheiro com o nome \"$1\".",
        "specialpages": "Páginas especiais",
        "specialpages-note-top": "Legenda",
        "tags-activate": "ativar",
        "tags-deactivate": "desativar",
        "tags-hitcount": "$1 {{PLURAL:$1|modificação|modificações}}",
-       "tags-manage-no-permission": "Não possui permissão para gerir alterações de etiquetas.",
+       "tags-manage-no-permission": "Não tem permissão para gerir etiquetas de modificação.",
        "tags-manage-blocked": "Não pode gerir etiquetas de modificação enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-create-heading": "Criar nova etiqueta",
        "tags-create-explanation": "Por definição, etiquetas recém-criadas estarão disponíveis para utilização por utilizadores e robôs.",
        "tags-deactivate-reason": "Motivo:",
        "tags-deactivate-not-allowed": "Não é possível desativar a etiqueta \"$1\".",
        "tags-deactivate-submit": "Desativar",
-       "tags-apply-no-permission": "Não possui privilégios para aplicar alterações a etiquetas em conjunto com as suas modificações.",
+       "tags-apply-no-permission": "Não tem privilégios para aplicar alterações a etiquetas em conjunto com as suas modificações.",
        "tags-apply-blocked": "Não pode aplicar etiquetas de modificação nas suas alterações enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-apply-not-allowed-one": "A etiqueta \"$1\" não pode ser aplicada manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta não pode ser aplicada|As seguintes etiquetas não podem ser aplicadas}} manualmente: $1",
        "authpage-cannot-link": "Não é possível iniciar a associação da conta.",
        "authpage-cannot-link-continue": "Não é possível continuar a criação da conta. A sua sessão pode ter expirado.",
        "cannotauth-not-allowed-title": "Permissão negada",
-       "cannotauth-not-allowed": "Não possui permissão para utilizar esta página",
+       "cannotauth-not-allowed": "Não tem permissão para usar esta página",
        "changecredentials": "Alterar credenciais",
        "changecredentials-submit": "Alterar credenciais",
        "changecredentials-invalidsubpage": "$1 não é um tipo de credencial válido.",
index 4d6cf93..862f64c 100644 (file)
                        "Mazab IZW",
                        "Mainframe98",
                        "Pginer",
-                       "Wladek92"
+                       "Wladek92",
+                       "Gombang"
                ]
        },
        "sidebar": "{{notranslate}}",
        "period-pm": "Text indicating the second period of the day when using a 12-hour calendar.",
        "pagecategories": "Used in the categories section of pages.\n\nFollowed by a colon and a list of categories.\n\nParameters:\n* $1 - number of categories\n{{Identical|Category}}",
        "pagecategorieslink": "{{notranslate}}",
-       "category_header": "In category description page. Parameters:\n* $1 - category name\nSee also:\n* {{msg-mw|Category-media-header}}",
+       "category_header": "In category description page, be aware that this is not about biology, but about bibliography. Parameters:\n* $1 - category name\nSee also:\n* {{msg-mw|Category-media-header}}",
        "subcategories": "Used as a header on category pages that have subcategories.\n{{Identical|Subcategory}}",
        "category-media-header": "In category description page. Parameters:\n* $1 - category name\nSee also:\n* {{msg-mw|Category header}}",
        "category-empty": "The text displayed in category page when that category is empty",
        "recentchanges-summary": "Summary of [[Special:RecentChanges]].",
        "recentchangestext": "Text in [[Special:RecentChanges]]",
        "recentchanges-noresult": "Used in [[Special:RecentChanges]], [[Special:RecentChangesLinked]], and [[Special:Watchlist]] when there are no changes to be shown.",
+       "recentchanges-timeout": "Used in [[Special:RecentChanges]], [[Special:RecentChangesLinked]], and [[Special:Watchlist]] when a query times out.",
+       "recentchanges-network": "Used in [[Special:RecentChanges]], [[Special:RecentChangesLinked]] and [[Special:Watchlist]] when network error occurs.",
        "recentchanges-feed-description": "Used in feed of RecentChanges. See example [{{canonicalurl:Special:RecentChanges|feed=atom}} feed].",
        "recentchanges-label-newpage": "# Used as tooltip for {{msg-mw|Newpageletter}}.\n# Also used as legend. Preceded by {{msg-mw|Newpageletter}} and followed by {{msg-mw|Recentchanges-legend-newpage}}.",
        "recentchanges-label-minor": "# Used as tooltip for {{msg-mw|Minoreditletter}}\n# Also used as legend. Preceded by {{msg-mw|Minoreditletter}}",
        "recentchanges-legend-unpatrolled": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-unpatrolled}}.",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "recentchanges-submit": "Label for submit button in [[Special:RecentChanges]]\n{{Identical|Show}}",
-       "rcfilters-tag-remove": "A tooltip for the button that removes a filter from the active filters area in [[Special:RecentChanges]] and [[Special:Watchlist]] when RCFilters are enabled. \n\nParameters: $1 - Tag label",
+       "rcfilters-tag-remove": "A tooltip for the button that removes a filter from the active filters area in [[Special:RecentChanges]] and [[Special:Watchlist]] when RCFilters are enabled. \n\nParameters: $1 - Tag label\n{{Identical|Remove}}",
        "rcfilters-legend-heading": "Used as a heading for legend box on [[Special:RecentChanges]] and [[Special:Watchlist]] when RCFilters are enabled.",
        "rcfilters-other-review-tools": "Used as a heading for the community collection of other links on [[Special:RecentChanges]] when RCFilters are enabled.",
        "rcfilters-group-results-by-page": "A label for the checkbox describing whether the results in [[Special:RecentChanges]] are grouped by page when RCFilters are enabled.",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Label for the button to apply saving a new filter setting and set it as default in [[Special:RecentChanges]]. This is for a small popup, please try to use a short string.",
        "rcfilters-savedqueries-cancel-label": "Label for the button to cancel the saving of a new quick link in [[Special:RecentChanges]]\n{{Identical|Cancel}}",
        "rcfilters-savedqueries-add-new-title": "Title for the popup to add new quick link in [[Special:RecentChanges]]. This is for a small popup, please try to use a short string.",
+       "rcfilters-savedqueries-already-saved": "Title for the popup in [[Special:RecentChanges]] that indicates that current set of filters is already saved. This is for a small popup, please try to use a short string.",
        "rcfilters-restore-default-filters": "Label for the button that resets filters to defaults",
        "rcfilters-clear-all-filters": "Title for the button that clears all filters",
        "rcfilters-show-new-changes": "Label for the button to show new changes.",
-       "rcfilters-search-placeholder": "Placeholder for the filter search input.",
+       "rcfilters-search-placeholder": "Placeholder for the filter search input. The first \"Filter\" is a verb, and the second \"filter\" is a noun.",
        "rcfilters-invalid-filter": "A label for an invalid filter.",
        "rcfilters-empty-filter": "Placeholder for the filter list when no filters were chosen.",
        "rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
        "rcfilters-tag-prefix-tags": "Prefix for the edit tags in [[Special:RecentChanges]]. Edit tags use a hash (#) as prefix. Please keep this format.\n\nParameters:\n* $1 - Tag display name.",
        "rcfilters-exclude-button-off": "Title for the button that excludes selected namespaces, when it is not yet active.",
        "rcfilters-exclude-button-on": "Title for the button that excludes selected namespaces, when it is active.",
-       "rcfilters-view-advanced-filters-label": "Label for the view switch that changes between advanced filters in [[Special:RecentChanges]]",
        "rcfilters-view-tags": "Title for the tags view in [[Special:RecentChanges]]\n{{Identical|Tag}}",
        "rcfilters-view-namespaces-tooltip": "Tooltip for the button that loads the namespace view in [[Special:RecentChanges]]",
        "rcfilters-view-tags-tooltip": "Tooltip for the button that loads the tags view in [[Special:RecentChanges]]",
        "rcfilters-view-return-to-default-tooltip": "Tooltip for the button that returns to the default filter view in [[Special:RecentChanges]]",
-       "rcfilters-view-tags-help-icon-tooltip": "Tooltip for the help button that leads user to [[mw:Special:MyLanguage/Help:New_filters_for_edit_review/Advanced_filters#tags|Help page]] for Tagged Edits",
+       "rcfilters-view-tags-help-icon-tooltip": "Tooltip for the help button that leads user to Special:Tags page",
        "rcfilters-liveupdates-button": "Label for the button to enable or disable live updates on [[Special:RecentChanges]]",
        "rcfilters-liveupdates-button-title-on": "Title for the button to enable or disable live updates on [[Special:RecentChanges]] when the feature is ON.",
        "rcfilters-liveupdates-button-title-off": "Title for the button to enable or disable live updates on [[Special:RecentChanges]] when the feature is OFF.",
        "uploadstash-refresh": "Used as link text in [[Special:UploadStash]].",
        "uploadstash-thumbnail": "Used as link text in [[Special:UploadStash]].",
        "uploadstash-exception": "Error message shown when an action related to the upload stash fails unexpectedly.\n\nParameters:\n* $1 - exception name, e.g. 'UploadStashFileNotFoundException'\n* $2 - exceptions details (always in English), e.g. 'cannot find path, or not a plain file'",
+       "uploadstash-bad-path": "Error message when the upload stash path doesn't exist.",
+       "uploadstash-bad-path-invalid": "Error message when the upload stash path is invalid.",
+       "uploadstash-bad-path-unknown-type": "Error message when the upload stash key is of an invalid type.\n\nParameters:\n* $1 - the type",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Error message when the upload stash key is of an unrecognized thumbnail",
+       "uploadstash-bad-path-no-handler": "Error message when no handler can be found for the given upload stash key.\n\nParameters:\n* $1 - the mine type\n* $2 - the file path",
+       "uploadstash-bad-path-bad-format": "Error message when the upload stash key if formatted incorrectly.\n\nParameters:\n* $1 - the stash key",
+       "uploadstash-file-not-found": "Error message when a stashed file can't be found.\n\nParameters:\n* $1 - the stash key",
+       "uploadstash-file-not-found-no-thumb": "Error message when no thumbnail could be generated.",
+       "uploadstash-file-not-found-no-local-path": "Error message when no locally generated thumbnail can be found.",
+       "uploadstash-file-not-found-no-object": "Error message when no local thumbnail object can be created.",
+       "uploadstash-file-not-found-no-remote-thumb": "Error message when a thumbnail could not be retrieved from a remote server.\n\nParameters:\n* $1 - error details\n* $2 - remote url",
+       "uploadstash-file-not-found-missing-content-type": "Error message when a thumbnail from a remote server is missing the content-type header.",
+       "uploadstash-file-not-found-not-exists": "Error message when a stashed file doesn't exist.",
+       "uploadstash-file-too-large": "Error message when a too large thumbnail is requested.\n\nParameters:\n* $1 - The maximum amount of bytes",
+       "uploadstash-not-logged-in": "Error message when a logged out user tries to access a stashed upload.",
+       "uploadstash-wrong-owner": "Error message when a wrong user tries to access a stashed upload.\n\nParameters:\n* $1 - the stash key",
+       "uploadstash-no-such-key": "Error message when a stash key couldn't be found.\n\nParameters:\n* $1 - the stash key",
+       "uploadstash-no-extension": "Error message when a stashed file has no extension.",
+       "uploadstash-zero-length": "Error message when a file has no length (file size is zero).",
        "invalid-chunk-offset": "Error that can happen if chunks get uploaded out of order.\nAs a result of this error, clients can continue from an offset provided or restart the upload.\nUsed on [[Special:UploadWizard]].",
        "img-auth-accessdenied": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied\n{{Identical|Access denied}}",
        "img-auth-nopathinfo": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description\n{{Doc-important|This is plain text. Do not use any wiki syntax.}}",
        "apisandbox-dynamic-parameters-add-placeholder": "JavaScript text field placeholder for the widget to add a new arbitrary parameter.",
        "apisandbox-dynamic-error-exists": "Displayed as an error message from JavaScript when trying to add a new arbitrary parameter with a name that already exists. Parameters:\n* $1 - Parameter name that failed.",
        "apisandbox-deprecated-parameters": "JavaScript button label and fieldset legend for separating deprecated parameters in the UI.",
-       "apisandbox-fetch-token": "Tooltop for the button that fetches a CSRF token.",
+       "apisandbox-fetch-token": "Label for the button that fetches a CSRF token.",
        "apisandbox-submit-invalid-fields-title": "Title for a JavaScript error message when fields are invalid.",
        "apisandbox-submit-invalid-fields-message": "Content for a JavaScript error message when fields are invalid.",
        "apisandbox-results": "JavaScript tab label for the tab displaying the API query results.\n{{Identical|Result}}",
index 9cb2afd..0369f54 100644 (file)
@@ -32,7 +32,8 @@
                        "Nemo bis",
                        "Turbojet",
                        "Stephanecbisson",
-                       "Matrafox"
+                       "Matrafox",
+                       "Cybernenea11"
                ]
        },
        "tog-underline": "Sublinierea legăturilor:",
        "recentchanges-submit": "Afișează",
        "rcfilters-tag-remove": "Șterge '$1'",
        "rcfilters-legend-heading": "<strong>Lista abrevierilor:</strong>",
-       "rcfilters-other-review-tools": "<strong>Alte unelte de revizuire</strong>",
+       "rcfilters-other-review-tools": "Alte unelte de revizuire",
        "rcfilters-group-results-by-page": "Grupează rezultatele după pagină",
        "rcfilters-grouping-title": "Grupare",
        "rcfilters-activefilters": "Filtre active",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nu</strong> $1",
        "rcfilters-exclude-button-off": "Exclude cele selectate",
        "rcfilters-exclude-button-on": "Se exclud cele selectate",
-       "rcfilters-view-advanced-filters-label": "Filtre avansate",
        "rcfilters-view-tags": "Editări marcate",
        "rcfilters-view-namespaces-tooltip": "Filtrează rezultatele după spațiul de nume",
        "rcfilters-liveupdates-button": "Actualizări în timp real",
index c278468..81cc44d 100644 (file)
        "databaseerror-query": "Inderrogazione: $1",
        "databaseerror-function": "Funzione: $1",
        "databaseerror-error": "Errore: $1",
+       "transaction-duration-limit-exceeded": "Pe evità 'nu retarde ierte de repliche, sta operazzione ha state inderrotte peurcé 'a durate d'u tiembe de scretture ($1) ave supranate 'u limite de $2 {{PLURAL:$2|seconde}}.\n\nCe se ste cange 'nu sbuénne de vôsce jndr'à 'na botta sole, pruève a ffà cchiù operazziune cu mene vôsce a vote.",
        "laggedslavemode": "Attenzione: 'A pàgene no ge tène cangiaminde recente.",
        "readonly": "Archivie blocchete",
        "enterlockreason": "Mitte 'na raggione p'u blocche, 'ncludenne 'na stime de quanne 'u blocche avène luate.",
        "anonpreviewwarning": "''Tu non ge sì collegate. Reggistranne le cangiaminde jndr'à sta pàgene iesse l'indirizze IP tune jndr'à storie.''",
        "missingsummary": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu riepileghe de le cangiaminde.\nCe tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.",
        "selfredirect": "<strong>Attenziò:</strong> Tu ste redirezione sta pàgene da sule.\nTu puè avè specificate 'a destinazione sbagliate pe stu redirezionamende, o tu ste cange 'a pàgena sbagliate.\nCe tu cazze \"$1\" arrete, 'u redirezionamende avène ccrejate 'u stesse.",
-       "missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
+       "missingcommenttext": "Pe piacere mitte 'nu commende.",
        "missingcommentheader": "<strong>Arrecuèrdete:</strong> Tu non g'è provvedute a 'nu soggette pe stu commende.\nCe tu cazze \"$1\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
        "summary-preview": "Andeprime d'u riepileghe d'u cangiamende:",
        "subject-preview": "Andeprime de l'oggette:",
        "timezoneregion-europe": "Europe",
        "timezoneregion-indian": "Oceano Indiane",
        "timezoneregion-pacific": "Oceano Pacifiche",
-       "allowemail": "Abbilite l'e-mail da l'otre utinde",
+       "allowemail": "Abbilite l'otre utinde a mannarme 'na mail",
        "prefs-searchoptions": "Cirche",
        "prefs-namespaces": "Namespaces",
        "default": "defolt",
        "recentchanges-submit": "Fà 'ndrucà",
        "rcfilters-tag-remove": "Live '$1'",
        "rcfilters-legend-heading": "<strong>Elenghe de le abbreviazziune:</strong>",
-       "rcfilters-other-review-tools": "<strong>Otre struminde de revisione</strong>",
+       "rcfilters-other-review-tools": "Otre struminde de revisione",
        "rcfilters-group-results-by-page": "Raggruppe le resultate pe pàgene",
        "rcfilters-grouping-title": "Stoche e raggruppe",
        "rcfilters-activefilters": "Filtre attive",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ore}}",
        "rcfilters-highlighted-filters-list": "Evidenziate: $1",
        "rcfilters-quickfilters": "Filtre reggistrate",
-       "rcfilters-quickfilters-placeholder-title": "Nisciune collegamende reggistrate",
+       "rcfilters-quickfilters-placeholder-title": "Nisciune filtre reggistrate",
        "rcfilters-quickfilters-placeholder-description": "Pe reggistrà le 'mbostaziune d'u filtre tune e ausarle cchiù tarde, cazze sus a l'icone segnalibbre jndr'à l'arèe \"Fitlre attive\" aqquà sotte",
        "rcfilters-savedqueries-defaultlabel": "Filtre reggistrate",
        "rcfilters-savedqueries-rename": "Renomene",
        "rcfilters-empty-filter": "Nisciune filtre attive. Tutte le condrebbute avènene fatte 'ndrucà.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-whatsthis": "Cumme funzionane?",
+       "rcfilters-highlightbutton-title": "Evidenzie le resultate",
        "rcfilters-highlightmenu-title": "Scacchie 'nu culore",
        "rcfilters-highlightmenu-help": "Scacchie 'nu culore pe evidenzià sta probbietà",
        "rcfilters-filterlist-noresults": "Nisciune filtre acchiate",
        "rcfilters-filter-user-experience-level-unregistered-description": "Cangiature ca non g'onne trasute.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Utinde nuève",
        "rcfilters-filter-user-experience-level-learner-label": "Uecchieachiuse",
+       "rcfilters-filter-user-experience-level-experienced-label": "Utinde cu esperienze",
+       "rcfilters-filter-user-experience-level-experienced-description": "Utinde reggistrate cu cchiù de 500 cangiaminde e 30 sciurne de attivitate.",
+       "rcfilters-filtergroup-automated": "Condrebbute automatece",
        "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Cangiaminde fatte da struminde automatece.",
+       "rcfilters-filter-humans-label": "Umane (none bot)",
+       "rcfilters-filter-humans-description": "Cangiaminde fatte da condrebbuture umane.",
+       "rcfilters-filtergroup-reviewstatus": "State d'a revisione",
        "rcfilters-filter-patrolled-label": "Condrollate",
        "rcfilters-filter-patrolled-description": "Cangiaminde signate cumme condrollate.",
        "rcfilters-filter-unpatrolled-label": "Non condrollate",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Scitte le scacchiate",
        "rcfilters-exclude-button-on": "Scettanne le scacchiate",
-       "rcfilters-view-advanced-filters-label": "Filtre avanzate",
        "rcfilters-view-tags": "Cangiaminde taggate",
        "rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da <strong>$3, $4</strong> ('nzigne a <strong>$1</strong> fatte vedè).",
        "rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
index 1bc5cce..3293e4e 100644 (file)
        "nstab-template": "Шаблон",
        "nstab-help": "Справка",
        "nstab-category": "Категория",
-       "mainpage-nstab": "Ð\93лавнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а",
+       "mainpage-nstab": "Ð\97аглавнаÑ\8f",
        "nosuchaction": "Такого действия нет",
        "nosuchactiontext": "Указанное в URL действие ошибочно.\nВозможно, вы допустили опечатку при наборе URL или перешли по ошибочной ссылке.\nЭто может также указывать на ошибку в проекте {{SITENAME}}.",
        "nosuchspecialpage": "Нет такой служебной страницы",
        "anonpreviewwarning": "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''",
        "missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «$1» ваши изменения будут сохранены без комментария.",
        "selfredirect": "<strong>Внимание:</strong> Вы создаёте перенаправление на ту же самую статью.\nВозможно, Вы выбрали неправильную целевую страницу для перенаправления или редактируете не ту страницу.\nЕсли Вы нажмёте кнопку «$1» ещё раз, перенаправление всё же будет создано.",
-       "missingcommenttext": "Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ð²ÐµÐ´Ð¸Ñ\82е Ð½Ð¸Ð¶Ðµ Ð²Ð°Ñ\88е Ñ\81ообÑ\89ение.",
+       "missingcommenttext": "Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ð²ÐµÐ´Ð¸Ñ\82е ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ\82аÑ\80ий.",
        "missingcommentheader": "<strong>Напоминание.</strong> Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «$1», ваша правка будет записана без заголовка.",
        "summary-preview": "Предпросмотр описания изменения:",
        "subject-preview": "Предпросмотр темы/заголовка:",
        "parser-template-loop-warning": "Обнаружена петля в шаблонах: [[$1]]",
        "template-loop-category": "Страницы с петлями в шаблонах",
        "template-loop-category-desc": "Эта страница содержит петлю в шаблоне, т.е. шаблон, который рекурсивно вызывает сам себя.",
-       "template-loop-warning": "<strong>Предупреждение:</ strong> Эта страница вызывает [[:$1]], который приводит к возникновению цикла в шаблоне (бесконечный рекурсивный вызов).",
+       "template-loop-warning": "<strong>Предупреждение:</strong> Эта страница вызывает [[:$1]], который приводит к возникновению цикла в шаблоне (бесконечный рекурсивный вызов).",
        "parser-template-recursion-depth-warning": "Превышен предел глубины рекурсии шаблона ($1)",
        "language-converter-depth-warning": "Превышен предел глубины преобразователя языков ($1)",
        "node-count-exceeded-category": "Страницы, на которых превышено число узлов",
        "prefs-email": "Параметры электронной почты",
        "prefs-rendering": "Внешний вид",
        "saveprefs": "Сохранить",
-       "restoreprefs": "Восстановить настройки по умолчанию",
+       "restoreprefs": "Восстановить настройки по умолчанию (на всех вкладках)",
        "prefs-editing": "Редактирование",
        "searchresultshead": "Поиск",
        "stub-threshold": "Порог для определения оформления ссылок на заготовки ($1):",
        "timezoneregion-europe": "Европа",
        "timezoneregion-indian": "Индийский океан",
        "timezoneregion-pacific": "Тихий океан",
-       "allowemail": "РазÑ\80еÑ\88иÑ\82Ñ\8c Ð¿Ð¾Ð»Ñ\83Ñ\87ение Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82Ñ\8b Ð¾Ñ\82 Ð´Ñ\80Ñ\83гиÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников",
-       "email-blacklist-label": "Ð\97апÑ\80еÑ\82иÑ\82Ñ\8c Ñ\8dÑ\82им Ñ\83Ñ\87аÑ\81Ñ\82никам Ð¾Ñ\82пÑ\80авлÑ\8fÑ\82Ñ\8c Ð¼Ð½Ðµ Ñ\8dлекÑ\82Ñ\80оннÑ\8bе Ð¿Ð¸Ñ\81Ñ\8cма:",
+       "allowemail": "РазÑ\80еÑ\88иÑ\82Ñ\8c Ð´Ñ\80Ñ\83гим Ñ\83Ñ\87аÑ\81Ñ\82никам Ð¾Ñ\82пÑ\80авлÑ\8fÑ\82Ñ\8c Ð¼Ð½Ðµ Ñ\8dлекÑ\82Ñ\80оннÑ\83Ñ\8e Ð¿Ð¾Ñ\87Ñ\82Ñ\83",
+       "email-blacklist-label": "Ð\97апÑ\80еÑ\82иÑ\82Ñ\8c Ñ\8dÑ\82им Ñ\83Ñ\87аÑ\81Ñ\82никам Ð¾Ñ\82пÑ\80авлÑ\8fÑ\82Ñ\8c Ð¼Ð½Ðµ Ñ\8dлекÑ\82Ñ\80оннÑ\83Ñ\8e Ð¿Ð¾Ñ\87Ñ\82Ñ\83:",
        "prefs-searchoptions": "Поиск",
        "prefs-namespaces": "Пространства имён",
        "default": "по умолчанию",
        "yourvariant": "Вариант языка содержания:",
        "prefs-help-variant": "Предпочитаемый для отображения содержимого страниц вики вариант языка или орфография.",
        "yournick": "Новая подпись:",
-       "prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны посредством добавления символов «<nowiki>~~~~</nowiki>», которые будут преобразованы в вашу подпись и время.",
+       "prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны с помощью «<nowiki>~~~~</nowiki>», что будет преобразовано в вашу подпись и время.",
        "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
        "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символа|символов}}.",
        "yourgender": "Какое описание подходит для вас больше всего?",
-       "gender-unknown": "При упоминании вас, программное обеспечение будет по возможности использовать гендерно-нейтральные слова",
+       "gender-unknown": "При упоминании вас программное обеспечение будет по возможности использовать гендерно-нейтральные слова",
        "gender-male": "Он редактирует страницы вики",
        "gender-female": "Онa редактирует страницы вики",
        "prefs-help-gender": "Этот параметр задавать необязательно.\nЗначение будет использовано для того, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "recentchanges-legend": "Настройки свежих правок",
        "recentchanges-summary": "Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.",
        "recentchanges-noresult": "Изменений в указанный период, соответствующих указанным условиям, нет.",
+       "recentchanges-timeout": "Время ожидания этого поиска истекло. Вы можете попробовать задать другие параметры поиска.",
+       "recentchanges-network": "Из-за технической ошибки результаты не могут быть загружены. Попробуйте обновить страницу.",
        "recentchanges-feed-description": "Отслеживание последних изменений в вики.",
-       "recentchanges-label-newpage": "Этой правкой была создана новая страница.",
+       "recentchanges-label-newpage": "Этой правкой была создана новая страница",
        "recentchanges-label-minor": "Это незначительное изменение",
        "recentchanges-label-bot": "Эта правка сделана ботом",
        "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
        "recentchanges-submit": "Показать",
        "rcfilters-tag-remove": "Удалить '$1'",
        "rcfilters-legend-heading": "<strong>Список сокращений:</strong>",
-       "rcfilters-other-review-tools": "<strong>Другие инструменты проверки</strong>",
+       "rcfilters-other-review-tools": "Другие инструменты проверки",
        "rcfilters-group-results-by-page": "Группировать результаты по странице",
        "rcfilters-grouping-title": "Группировка",
        "rcfilters-activefilters": "Активные фильтры",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|час|часа|часов}}",
        "rcfilters-highlighted-filters-list": "Подсвечено: $1",
        "rcfilters-quickfilters": "Сохранённые фильтры",
-       "rcfilters-quickfilters-placeholder-title": "Сохраненных ссылок еще нет",
+       "rcfilters-quickfilters-placeholder-title": "Сохранённых фильтров ещё нет",
        "rcfilters-quickfilters-placeholder-description": "Чтобы сохранить настройки фильтра и повторно использовать их позже, щелкните значок закладки в области «Активный фильтр» ниже.",
        "rcfilters-savedqueries-defaultlabel": "Сохранённые фильтры",
        "rcfilters-savedqueries-rename": "Переименовать",
        "rcfilters-restore-default-filters": "Восстановить фильтры по умолчанию",
        "rcfilters-clear-all-filters": "Очистить все фильтры",
        "rcfilters-show-new-changes": "Последние изменения",
-       "rcfilters-search-placeholder": "Ð\9fоÑ\81ледние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ñ\84илÑ\8cÑ\82Ñ\80ов (пÑ\80оÑ\81моÑ\82Ñ\80иÑ\82е Ð¸Ð»Ð¸ Ð½Ð°Ñ\87ниÑ\82е Ð²Ð²Ð¾Ð´Ð¸Ñ\82Ñ\8c)",
+       "rcfilters-search-placeholder": "Ð\98зменениÑ\8f Ñ\84илÑ\8cÑ\82Ñ\80ов (иÑ\81полÑ\8cзÑ\83йÑ\82е Ð¼ÐµÐ½Ñ\8e Ð¸Ð»Ð¸ Ð¸Ñ\89иÑ\82е Ð¿Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8e Ñ\84илÑ\8cÑ\82Ñ\80а)",
        "rcfilters-invalid-filter": "Недопустимый фильтр",
        "rcfilters-empty-filter": "Нет активных фильтров. Показываются все правки.",
        "rcfilters-filterlist-title": "Фильтры",
        "rcfilters-filter-user-experience-level-unregistered-label": "Незарегистрированные",
        "rcfilters-filter-user-experience-level-unregistered-description": "Редакторы, которые не вошли в систему.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новички",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Зарегистрированные редакторы с менее чем 10 правками и 4 днями работы.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Зарегистрированные редакторы, у которых менее 10 правок или 4 дней работы.",
        "rcfilters-filter-user-experience-level-learner-label": "Учащиеся",
        "rcfilters-filter-user-experience-level-learner-description": "Зарегистрированные редакторы, чей опыт находится где-то между уровнями «Новичок» и «Опытные пользователи».",
        "rcfilters-filter-user-experience-level-experienced-label": "Опытные пользователи",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Исключить выбранное",
        "rcfilters-exclude-button-on": "Исключение выбранного",
-       "rcfilters-view-advanced-filters-label": "Расширенные фильтры",
        "rcfilters-view-tags": "Тегированные правки",
        "rcfilters-view-namespaces-tooltip": "Результаты фильтра по пространствам имён",
        "rcfilters-view-tags-tooltip": "Фильтровать результаты, используя метки правок",
        "uploaded-script-svg": "Найден небезопасный элемент с поддержкой сценариев «$1» в загруженном SVG-файле.",
        "uploaded-hostile-svg": "Найден небезопасный CSS-код в элементе стиля загруженного SVG-файла.",
        "uploaded-event-handler-on-svg": "Установка атрибутов обработчика событий <code>$1=\"$2\"</code> не разрешено для SVG-файлов.",
-       "uploaded-href-attribute-svg": "Ð\92 SVG-Ñ\84айлаÑ\85 href-аÑ\82Ñ\80ибÑ\83Ñ\82Ñ\8b Ð´Ð»Ñ\8f Ñ\81Ñ\81Ñ\8bлки, Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ð¾Ð¹ Ð² <code><$1 $2=\"$3\"></code>, Ñ\80азÑ\80еÑ\88енÑ\8b Ñ\82олÑ\8cко Ñ\86ели, Ð½Ð°Ñ\87инаÑ\8eÑ\89иеÑ\81Ñ\8f Ð½Ð° http:// Ð¸Ð»Ð¸ https://.",
+       "uploaded-href-attribute-svg": "ЭлеменÑ\82Ñ\8b <a> Ð¼Ð¾Ð³Ñ\83Ñ\82 Ñ\81Ñ\81Ñ\8bлаÑ\82Ñ\8cÑ\81Ñ\8f (href) Ñ\82олÑ\8cко Ð½Ð° data: (вÑ\81Ñ\82Ñ\80оеннÑ\8bй Ñ\84айл), Ñ\81Ñ\81Ñ\8bлки http:// Ð¸Ð»Ð¸ https:// Ð¸Ð»Ð¸ Ñ\84Ñ\80агменÑ\82 (#, Ð² Ñ\82ом Ð¶Ðµ Ð´Ð¾ÐºÑ\83менÑ\82е). Ð\94лÑ\8f Ð´Ñ\80Ñ\83гиÑ\85 Ñ\8dлеменÑ\82ов, Ñ\82акиÑ\85 ÐºÐ°Ðº <image>, Ñ\80азÑ\80еÑ\88енÑ\8b Ñ\82олÑ\8cко data: Ð¸ Ñ\84Ñ\80агменÑ\82. Ð\9fопÑ\80обÑ\83йÑ\82е Ð²Ð½ÐµÐ´Ñ\80иÑ\82Ñ\8c Ð¸Ð·Ð¾Ð±Ñ\80ажениÑ\8f Ð¿Ñ\80и Ñ\8dкÑ\81поÑ\80Ñ\82е SVG. Ð\9dайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "В загруженном SVG-файле найдены небезопасные данные: URI <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Найден тег «animate», который может изменять ссылку с помощью «from»-атрибута <code>&lt;$1 $2=\"$3\"&gt;</code> в загруженном SVG-файле.",
        "uploaded-setting-event-handler-svg": "Установка атрибутов обработчика событий заблокирована, в загруженном SVG-файле найден код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
index babf75c..666f91a 100644 (file)
        "rollback-success": "$1 इत्यस्य सम्पादनम् अपनयतु । \n$2 द्वारा सम्पादितां अन्तिमावृत्तिं पुनस्थापयतु ।",
        "sessionfailure-title": "सत्रस्य वैफल्यम् ।",
        "sessionfailure": "भवतः प्रवेशत्रेण सह कापि समस्या अस्ति इति भाति ।\nसत्रापहरणात् रक्षणस्य सावधानार्थं भवतः क्रियाकलापः अपनीतः ।\nनिर्गत्य पूर्वपुटं गत्वा पुनः गत्वा प्रयत्नं करोतु ।",
-       "protectlogpage": "सà¥\81रà¤\95à¥\8dषािता à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83",
+       "protectlogpage": "सà¥\81रà¤\95à¥\8dषायाà¤\83 à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83 :",
        "protectlogtext": "अधो दत्ता सुरक्षार्थं कृतपरिवर्ननानां सूचिका अस्ति । \nवरतमानस्य सुरक्षितपुटानां सूचिकार्थम् अत्र [[Special:ProtectedPages|सुरक्षितपुटानां सूचिका]] पश्यतु ।",
        "protectedarticle": "\"[[$1]]\" संरक्षितमस्ति",
        "modifiedarticleprotection": "\"[[$1]]\" इत्येतदर्थं सुरक्षा-स्तरः परिवर्तित: :",
index 2f15fc4..41fe87e 100644 (file)
        "redirectedfrom": "$1 khon ạcur heć akana",
        "redirectpagesub": "Bań sojhe sakam",
        "redirectto": "Ar hõ udugoḱakana:",
-       "lastmodifiedat": "á±±á±\9aá±­á±\9f á±¥á±\9fᱦᱴá±\9f á±¨á±®á±±á±\9fá±\9c á±\9aá±\9e á±¢á±©á±ªá±\9fᱹᱫᱫᱷá±\9fá±£ á±µá±\9aᱫá±\9aá±\9e á±\9fá± á±\9fá±±á±\9f  $1, at $2",
+       "lastmodifiedat": "á±±á±\9aᱶá±\9f á±¥á±\9fᱦᱴá±\9f á±¢á±©á±ªá±\9fᱹᱫ á±«á±·á±\9fá±£ á±µá±\9aᱫá±\9aá±\9e á±\9fá± á±\9fá±±á±\9f  $1 á±¢á±\9fᱹᱦᱤá±\9b,  $2 á±\9aá± á±\9bá±\9aᱨᱮ",
        "viewcount": "Noa sakamdo {{PLURAL:$1 dhom $1 dhom}} udug hoena.",
        "protectedpage": "Rukhíạ sakamko",
        "jumpto": "Donme :",
        "ok": "Ṭhik gea",
        "retrievedfrom": "\"$1\" khon ñam ạgui",
        "youhavenewmessages": "Amaḱ do $1 ($2) menaḱa",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|ᱟᱢ ᱫᱚ}} $1 ᱠᱷᱚᱱ {{PLURAL:$3|ᱟᱨᱢᱤᱫ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ|$3 ᱵᱷᱮᱵᱷᱟᱨᱩᱭᱟᱹ}} ($2) ᱾",
+       "newmessageslinkplural": "{{PLURAL:$1|ᱢᱤᱫ ᱱᱟᱶᱟ ᱢᱮᱥᱮᱡᱽ|999=ᱱᱟᱶᱟ ᱢᱮᱥᱮᱡᱽᱠᱚ}}",
+       "newmessagesdifflinkplural": "ᱢᱩᱪᱟᱹᱫ {{PLURAL:$1|ᱵᱚᱫᱚᱞ|999=ᱵᱚᱫᱚᱞᱠᱚ}}",
        "youhavenewmessagesmulti": "Amaḱ nãwã mesagko do $1 menaḱa",
        "editsection": "Tońge",
        "editold": "Toṅge",
        "summary-preview": "Guṭ katha unuduḱ:",
        "subject-preview": "Babot/Guṭkatha unuduḱ:",
        "blockedtitle": "Beoharić doe eset ocoakana.",
+       "blockedtext": "<strong>ᱟᱢᱟᱜ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ ᱟᱨᱵᱟᱝ IP ᱵᱩᱴᱟᱹ ᱫᱚ ᱵᱚᱸᱫᱽ ᱟᱠᱟᱱᱟ ᱾ </strong>\n\nᱱᱚᱶᱟ ᱵᱚᱸᱫᱽ ᱫᱚ $1 ᱫᱟᱨᱟᱭᱛᱮ ᱦᱩᱭᱟᱠᱱᱟ ᱾\nᱱᱚᱶᱟ ᱨᱮᱱᱟᱜ ᱚᱡᱮ ᱫᱚ ᱮᱢᱮᱱᱟ <em>$2</em>.\n\n* ᱵᱚᱸᱫᱽ ᱮᱦᱚᱵ: $8\n* ᱵᱚᱸᱫᱽ ᱢᱩᱪᱟᱹᱫ: $6\n* ᱟᱥᱟᱦᱟᱱ ᱵᱚᱸᱫᱽᱠᱚ: $7\n\nᱟᱢ $1 ᱮᱢ ᱥᱟᱹᱜᱟᱹᱭ ᱫᱟᱲᱮᱭᱟᱭᱟ ᱵᱟᱝᱠᱷᱟᱱ ᱮᱴᱟᱜ [[{{MediaWiki:Grouppage-sysop}}|ᱟᱰᱢᱤᱱᱤᱥᱴᱨᱮᱴᱚᱨ]] ᱵᱚᱸᱫᱽ ᱵᱟᱵᱚᱫᱽ ᱛᱮ ᱜᱟᱞᱚᱪ ᱞᱟᱹᱜᱤᱫ ᱾\nᱟᱢ ᱵᱟᱢ ᱵᱮᱵᱷᱟᱨ ᱫᱟᱲᱮᱭᱟᱜ \"email this user\" ᱥᱩᱵᱤᱫᱷᱟ ᱡᱚᱛᱷᱟᱛ ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ ᱛᱟᱢ ᱵᱟᱝ ᱛᱟᱦᱮᱸᱱ ᱠᱷᱟᱱ ᱟᱨ ᱱᱚᱶᱟ ᱫᱚ ᱪᱤᱱᱦᱟᱹᱣ-ᱟ [[Special:Preferences|ᱠᱷᱟᱛᱟ ᱧᱮᱞᱚᱚᱜ]] ᱠᱷᱚᱱ ᱟᱨ ᱟᱢ ᱫᱚ ᱵᱟᱢ ᱵᱚᱸᱫᱽ ᱟᱠᱟᱱᱟ ᱱᱚᱶᱟ ᱵᱮᱵᱷᱟᱨ ᱠᱷᱚᱱ ᱾\nᱟᱢᱟᱜ ᱱᱤᱛᱚᱜᱟᱜ IP ᱵᱩᱴᱟᱹ ᱫᱚ $3, ᱟᱨ ᱵᱚᱸᱫᱽ ID ᱫᱚ #$5  \nᱫᱟᱭᱟᱠᱟᱛᱮ ᱥᱮᱞᱮᱫᱽ ᱢᱮ ᱪᱮᱛᱟᱱᱟᱜ ᱠᱟᱛᱷᱟᱠᱚ ᱡᱚᱛᱚ ᱞᱮᱠᱟᱱ ᱠᱩᱠᱞᱤ ᱨᱮ ᱾",
        "blockednoreason": "jahan babot baṅ em akana",
        "whitelistedittext": "Sakamre sompadon lạgit́te $1 em hoyoḱa.",
        "nosuchsectiontitle": "Pahaṭa bȧn ńamlena",
        "storedversion": "Rukhiyạ nãwã aroe",
        "yourdiff": "Farak",
        "templatesused": "Noa sakamre beoharen {{PLURAL:$1 ṭempeleṭ ṭempeleṭko}}:",
+       "templatesusedpreview": "{{PLURAL:$1|ᱪᱷᱟᱸᱪ|ᱪᱷᱟᱸᱪᱠᱚ}} ᱵᱮᱵᱷᱟᱨ ᱟᱠᱟᱱᱟ ᱱᱟᱶᱟ ᱧᱮᱱᱮᱞᱨᱮ:",
        "template-protected": "Rukhiạ",
        "template-semiprotected": "(Kạṭic-rukhiyạ)",
        "hiddencategories": "Noa sakam do {{PLURAL:$1 1 ukuakan bhag $1 uku akan bhagkorenaḱ}} gaõtarenge:",
        "edit-no-change": "Amaḱ sompadon do baṅ hataolena, Cedaḱ je olre jahan bodol bạnuḱa.",
        "edit-already-exists": "Nãwã sakam baṅ tear lena.\nSakam do laha khon menaḱgea.",
        "defaultmessagetext": "Sedae olko",
+       "content-model-wikitext": "ᱣᱤᱠᱤ-ᱚᱞ",
        "post-expand-template-inclusion-warning": "\"Sontoroḱme\" Noa format do lạṭu geya.\nThoṛa format do noare banuḱana.",
        "post-expand-template-inclusion-category": "Sakamko oka borḍre noa tahẽna ona doe paromkeda",
        "post-expand-template-argument-warning": "'''Sontoroḱmẽ:''' Noa sakamre komse kom mitṭen forma joṛao menaḱa ạḍi lạṭute pasnao akana.\nOnate noa ạrgumenṭkodo bạgi giḍi hoena.",
        "post-expand-template-argument-category": "Bagi forma ạrgumenṭ sapdoho sakam",
+       "undo-failure": "ᱥᱟᱯᱲᱟᱣᱠᱚ ᱵᱟᱭ ᱟᱹᱪᱩᱨ ᱨᱩᱣᱟᱹᱲᱚᱜ-ᱟ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱥᱟᱯᱲᱟᱣ ᱵᱤᱨᱚᱫᱽ ᱤᱫᱤᱠᱟᱛᱮ |",
        "viewpagelogs": "Noa sakam reaḱ cạbi udukme",
        "nohistory": "Noa sakam re do jahan sompadon reaḱ jạṛ bạnuḱa.",
        "currentrev": "Mucạt nãwã aroe",
        "deletedhist": "Get giḍi jạṛ",
        "revdelete-reasonotherlist": "Eṭaḱak karon",
        "mergehistory-reason": "Babot:",
+       "mergelog": "ᱞᱚᱜᱽ ᱢᱮᱥᱟ",
        "revertmerge": "bań mit́",
        "history-title": "\"$1\": Jạṛ nãwã aroe",
+       "difference-title": "\"$1\" ᱨᱮᱱᱟᱜ ᱫᱚᱦᱲᱟᱭᱮᱱ ᱛᱟᱞᱟᱨᱮ ᱯᱷᱟᱨᱟᱠ",
        "lineno": "Sạr $1:",
        "compareselectedversions": "Noa barea nãwã bachawanaḱ talare tolonayme",
        "editundo": "ruạṛ",
+       "diff-empty": "(ᱵᱷᱮᱜᱮᱫ ᱵᱟᱹᱱᱩᱜ)",
+       "diff-multi-sameuser": "({{PLURAL:$1|ᱢᱤᱫ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟ|$1 ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟᱠᱚ}} ᱥᱚᱢᱟᱱ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱫᱟᱨᱟᱭᱛᱮ ᱵᱟᱭ ᱧᱮᱞᱚᱜ-ᱟ)",
+       "diff-multi-otherusers": "({{PLURAL:$1|ᱢᱤᱫ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟ|$1 ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟᱠᱚ}} {{PLURAL:$2|ᱢᱤᱫ ᱮᱴᱟᱜ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ|$2 ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹᱠᱚ}} ᱵᱟᱠᱚ ᱧᱮᱞᱚᱜ-ᱟ)",
        "searchresults": "Se̠ndra pho̠l",
        "searchresults-title": "\"$1\"  renaḱ Sẽndra  phol",
        "prevn": "Laha reaḱ {{PLURAL:$1|$1}}",
        "editusergroup": "Beoharićaḱ gãotako toṅgeymẽ",
        "userrights-editusergroup": "Beoharićaḱ gãotako toṅgeymẽ",
        "saveusergroups": "Beoharićaḱ gãotako rukhiyaymẽ",
+       "group-bot": "ᱵᱚᱴᱠᱚ",
+       "group-sysop": "ᱟᱰᱢᱤᱱᱤᱥᱴᱨᱮᱴᱚᱨ",
+       "grouppage-bot": "{{ns:project}}:ᱵᱚᱴᱠᱚ",
+       "grouppage-sysop": "{{ns:project}}:ᱯᱟᱨᱜᱟᱱᱟᱠᱚ",
        "right-read": "Sakamko paṛhaomẽ",
        "right-edit": "Sakamko toṅge",
        "right-createpage": "Sakamko benoamẽ (Okako do galmarao sakamko baṅkan)",
        "right-writeapi": "write API ᱵᱮᱵᱦᱟᱨ",
        "right-delete": "Sakamko get giḍiymẽ",
        "newuserlogpage": "Laṛcaṛićaḱ tear cạbi",
+       "rightslog": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱟᱹᱭᱫᱟᱹᱨ ᱞᱚᱜᱽ",
        "action-edit": "noa sakam joṛao",
+       "action-createaccount": "ᱱᱚᱶᱟ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ ᱵᱮᱱᱟᱣ",
        "nchanges": "$1 {{PLURAL:$1 bodol bodolko}}",
        "enhancedrc-history": "Jạṛ",
        "recentchanges": "Nãwã bo̠do̠lko",
        "recentchanges-legend": "Nahaḱ bodol teaḱko",
        "recentchanges-summary": "Noa sakamre wiki reaḱ joto khon nãwã bodolko paṅjaṅjaymẽ.",
+       "recentchanges-noresult": "ᱮᱢᱞᱮᱱ ᱥᱚᱢᱚᱭ ᱵᱷᱤᱛᱤᱨ ᱨᱮ ᱵᱚᱫᱚᱞᱟᱜ ᱠᱚ ᱵᱟᱭ ᱢᱤᱫᱩᱜ ᱠᱟᱱᱟ ᱾",
        "recentchanges-feed-description": "Noa feedre wiki reaḱ joto khon nãwã bodolko paṅjaymẽ",
        "recentchanges-label-newpage": "Noa sompadon do nãwã mint́ṭen sakame tearkeda",
        "recentchanges-label-minor": "Noado hudiń mạchi toṅge",
        "rc-change-size-new": "$1 {{PLURAL:$1|ᱵᱟᱭᱤᱴ|ᱵᱟᱭᱤᱴᱥ}} ᱵᱚᱫᱚᱞ ᱛᱟᱭᱚᱢ",
        "rc-enhanced-expand": "Purạote uduḱ",
        "rc-enhanced-hide": "Purạo cuku",
+       "rc-old-title": "ᱚᱥᱚᱞᱨᱮ ᱛᱮᱭᱟᱨᱟᱠᱟᱱᱟ \"$1\" ᱞᱮᱠᱟᱛᱮ",
        "recentchangeslinked": "Sãotenaḱ bodolko",
+       "recentchangeslinked-feed": "ᱥᱟᱹᱜᱟᱹᱭᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ",
        "recentchangeslinked-toolbox": "Noṛjoṛ palaṭko",
        "recentchangeslinked-title": "Bodolaḱko do \"$1\" sãote joṛao geya",
        "recentchangeslinked-summary": "Noa do ona tạlika kana oka do nebetarge bodol hoyakan oka do asokayte hatao akan sakam khon.\n\n[[Special:Watchlist|your watchlist]] renaḱ sakamko do '''bold''' .",
        "filehist-datetime": "̣Tạrikh/So̠mo̠y",
        "filehist-thumb": "Ṭip",
        "filehist-thumbtext": "$1 lekan thambnail varson",
+       "filehist-nothumb": "ᱵᱟᱹᱱᱩᱜ-ᱟ ᱴᱤᱯ-ᱨᱟᱢᱟ",
        "filehist-user": "Laṛcaṛić",
        "filehist-dimensions": "Maṕ",
        "filehist-comment": "Roṛ",
        "imagelinks": "Phayel bebohar",
        "linkstoimage": "Latar reaḱ {{PLURAL:$1 sakam $1 sakam}} khon noa rẽtre joṛao menaḱa:",
+       "linkstoimage-more": "$1 ᱠᱷᱚᱱ ᱵᱟᱹᱲᱛᱤ {{PLURAL:$1|ᱥᱟᱦᱴᱟ ᱡᱚᱯᱲᱟᱣᱠᱚ|ᱥᱟᱦᱴᱟ ᱡᱚᱯᱲᱟᱣ}} ᱢᱮᱱᱟᱜ-ᱟ ᱱᱚᱣᱟ ᱨᱮᱫ ᱥᱟᱶ ᱾\nᱱᱚᱶᱟ ᱞᱤᱥᱴᱤ ᱩᱫᱩᱜᱮᱜ-ᱟᱭ {{PLURAL:$1|ᱮᱛᱚᱦᱚᱵ ᱥᱟᱦᱴᱟ ᱡᱚᱲᱟᱣ|ᱮᱛᱚᱦᱚᱵ $1 ᱥᱟᱦᱴᱟ ᱡᱚᱲᱟᱣᱠᱚ}} ᱥᱩᱢᱩᱝ ᱱᱚᱶᱟ ᱨᱮᱫ ᱥᱟᱶ ᱾\nᱢᱤᱫ [[Special:WhatLinksHere/$2|ᱡᱚᱛᱚ ᱞᱤᱥᱴᱤ]] ᱢᱮᱱᱟᱜ-ᱟ ᱾",
        "nolinkstoimage": "Nonḍe do noa são joṛao sakam banuka",
+       "linkstoimage-redirect": "$1 (ᱨᱮᱫ ᱢᱚᱦᱰᱟᱜ-ᱟ) $2",
        "sharedupload-desc-here": "Noa rẽt do nonḍe khon-  $1 ar paseć eṭaḱaḱ porjekṭko beoharakana.\nNoa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena",
+       "filepage-nofile": "ᱱᱚᱶᱟ ᱧᱩᱛᱩᱢᱟᱜ ᱨᱮᱫ ᱵᱟᱹᱱᱩᱜ-ᱟ ᱾",
        "upload-disallowed-here": "Am do noa phayel cetanre bam ol daṛẽaḱa",
        "randompage": "Joṛao sakam",
        "statistics": "Halot",
        "statistics-pages": "Sakamko",
+       "double-redirect-fixer": "ᱢᱚᱸᱦᱟᱰᱟ ᱴᱷᱟᱹᱣᱠᱟᱹᱭᱤᱡ",
        "nbytes": "$1 {{PLURAL:$1|baiṭ|baiṭ}}",
        "nmembers": "$1 {{PLURAL:$1 Gaõtaren Gaõtarenko}}",
        "prefixindex": "Sanam sakam re joṛao menaḱ",
        "booksources": "Puthi ńamoḱ ṭhại/jayga",
        "booksources-search-legend": "Puthi reak ṭhai sendrayme",
        "booksources-search": "Sendra",
+       "specialloguserlabel": "ᱠᱟᱹᱢᱤᱭᱟᱹ:",
+       "speciallogtitlelabel": "ᱡᱚᱥ (ᱧᱩᱛᱩᱢ ᱟᱨᱵᱟᱝ {{ns:user}}:ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱞᱟᱹᱜᱩᱫ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ):",
        "log": "Cạbiko",
        "all-logs-page": "ᱡᱚᱛᱚ ᱫᱤᱥᱣᱟᱹ ᱞᱚᱜᱽ ᱠᱚ",
+       "logempty": "ᱞᱚᱜᱽ ᱨᱮ ᱚᱱᱟᱞᱮᱠᱟᱱ ᱡᱤᱱᱤᱥ ᱵᱟᱹᱱᱩᱜ-ᱟ ᱾",
        "allpages": "joto sakam",
        "allarticles": "Sanam sakam",
        "allpagessubmit": "Calaḱme",
+       "allpages-hide-redirects": "ᱢᱚᱦᱰᱟᱦᱟᱜᱠᱚ ᱫᱟᱱᱟᱝ",
        "categories": "rokom sokom",
        "linksearch-line": "$2 khon $1 re joṛao hoeakana",
        "listusers-submit": "Udugmẽ",
        "emailto": "Ńamić:",
        "emailmessage": "Mesag",
        "emailsend": "Kulmẽ",
+       "usermessage-editor": "ᱥᱤᱥᱴᱚᱢ ᱨᱟᱭᱵᱟᱨ",
        "watchlist": "Inak' n'el ko",
        "mywatchlist": "Ńeloḱgoḱ tạlika",
        "watchlistfor2": "$1 ($2) lạ̣gitte",
        "watch": "Ńelme",
        "unwatch": "bang nelok' a",
        "watchlist-details": "Baṅ purạo tạlikare {{PLURAL:$1ṭen sakam $1 ṭen sakam}} menaḱa (roṛ sakamko lekhare baṅ sapkate)",
+       "wlnote": "ᱞᱟᱛᱟᱨ ᱨᱮᱱᱟᱜ {{PLURAL:$1|ᱫᱚ ᱢᱩᱪᱟᱹᱫ ᱵᱚᱫᱚᱞ ᱠᱟᱱᱟ|ᱠᱚ ᱫᱚ ᱢᱩᱪᱟᱹᱫ <strong>$1</strong> ᱵᱚᱫᱚᱞᱠᱟᱱᱟ}} ᱢᱩᱪᱟᱹᱫ ᱨᱮ {{PLURAL:$2|ᱴᱟᱲᱟᱝ|<strong>$2</strong> ᱴᱟᱲᱟᱝ}},  $3, $4 ᱞᱮᱠᱟᱛᱮ ᱾",
        "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha",
        "watchlist-options": "Ńelok tạlika reak sonketko",
        "watching": "Ńeloḱ kana...",
+       "enotif_reset": "ᱱᱤᱱᱦᱟᱹᱭᱢᱮ ᱡᱚᱛᱚ ᱥᱟᱦᱴᱟ ᱦᱤᱨᱤᱭᱟᱠᱟᱱᱟ",
        "changed": "Bodolena",
        "deletepage": "Sakam get giḍikam",
        "delete-legend": "Get giḍi",
        "actionfailed": "Kami bang hoe-lena",
        "dellogpage": "Mãrao log",
        "rollbacklink": "Ghurlạo ạcur",
+       "rollbacklinkcount": "ᱜᱚᱰᱟᱣ ᱨᱩᱣᱟᱹᱲ $1 {{PLURAL:$1|ᱥᱟᱯᱲᱟᱣ|ᱥᱟᱯᱲᱟᱣᱠᱚ}}",
        "protectlogpage": "Rukhiyạy tala cạbi",
        "protectedarticle": "Rukhiyạgeya \"[[$1]]\"",
+       "modifiedarticleprotection": "\"[[$1]]\" ᱞᱟᱹᱜᱤᱫ ᱨᱩᱠᱷᱭᱟᱹ ᱟᱲᱮ ᱵᱚᱫᱚᱞᱮᱱᱟ",
        "protectcomment": "karon",
        "protectexpiry": "Cabaḱ",
        "protect-default": "ᱡᱚᱛᱚ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹᱠᱚ ᱫᱟᱣ ᱮᱢ",
        "undeleteviewlink": "Ńel",
        "namespace": "Ńutum reaḱ ṭhai",
        "invert": "Seć bachao",
+       "tooltip-invert": "ᱱᱚᱶᱟ ᱵᱟᱠᱥᱟ ᱴᱤᱠ ᱢᱮ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ ᱵᱚᱫᱚᱞᱟᱜᱠᱚ ᱫᱟᱱᱟᱝ ᱞᱟᱹᱜᱤᱫ  ᱵᱟᱛᱷᱚᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱥᱟᱶᱛᱮ (ᱟᱨ ᱡᱚᱯᱚᱲᱟᱣᱟᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱡᱩᱫᱤ ᱴᱤᱠ ᱟᱠᱟᱱᱟ)",
+       "namespace_association": "ᱥᱚᱦᱚᱫᱤᱭᱟᱹ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ",
+       "tooltip-namespace_association": "ᱱᱚᱶᱟ ᱵᱟᱠᱥᱟ ᱴᱤᱠ ᱢᱮ ᱨᱚᱯᱚᱲ ᱵᱟᱝᱠᱷᱟᱱ ᱥᱟᱛᱟᱢ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱵᱟᱪᱷᱚᱱ ᱟᱠᱟᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱥᱟᱶ ᱡᱚᱯᱚᱲᱟᱣ ᱟᱠᱟᱱᱟᱜ",
        "blanknamespace": "Mukhiạ̣",
        "contributions": "{{GENDER:$1|Beoharićaḱ }} Kạmiko",
        "contributions-title": "$1 Beoharićaḱ kạmiko",
        "mycontris": "Ińaḱ kạmiko",
        "anoncontribs": "Ińaḱ kạmiko",
        "contribsub2": "$1 ($2) lạgitte",
-       "uctop": "(coṭ utạr)",
+       "nocontribs": "ᱱᱚᱶᱟ ᱮᱢᱟᱜ ᱥᱟᱶ ᱡᱚᱲᱟᱣᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ ᱵᱟᱭ ᱧᱟᱢᱞᱮᱱᱟ |",
+       "uctop": "(ᱱᱤᱛᱚᱜ)",
        "month": "Cando khon (ar etohopreaḱ)",
        "year": "Nia serma reak' pahil khoch'",
        "sp-contributions-newbies": "Nãwã ekaunṭ lạgit kạmiko uduḱme",
        "sp-contributions-search": "Kạmiko emoḱ lạgitte sendrayme",
        "sp-contributions-username": "IP ṭhikạna se laṛcaṛićaḱ n̕utum",
        "sp-contributions-toponly": "Khạli nahaḱ nãwã aroyen joṛao kamiko udukme",
+       "sp-contributions-newonly": "ᱥᱩᱢᱩᱝ ᱟᱹᱨᱩᱠᱚ ᱥᱚᱫᱚᱨᱢᱮ ᱡᱟᱦᱟᱸ ᱥᱟᱦᱟᱴᱟ ᱫᱚ ᱥᱤᱨᱡᱟᱹᱣᱟᱜ ᱠᱟᱱᱟ",
        "sp-contributions-submit": "Sendra",
        "whatlinkshere": "Cet́ link ko no̠nḍe do",
        "whatlinkshere-title": "Oka sakam ko do \"$1\"-re joṛao menaḱa",
        "ipboptions": "2 Ghonṭa : 2 hours, 1 maha:1 day, 3 maha : 3 days,1 hapta :1 week, 2 hapta : 2 weeks, 1 cando :1 month, 3 cando : 3 months,6 cando :6 months,  1 serma :1 year,  Aemamaha : infinite",
        "ipblocklist": "Beoharic esetgeyay",
        "ipblocklist-submit": "Sendra",
+       "infiniteblock": "ᱚᱦᱤᱥᱟᱹᱵᱽ",
        "emailblock": "E-mail do esetgea",
        "blocklink": "Eset́",
        "unblocklink": "bań block",
        "emaillink": "E-mail kulmẽ",
        "blocklogpage": "Tala eset",
        "blocklogentry": "Eset [[$1]] sãote cabaḱ okte oka do $2 $3",
+       "reblock-logentry": "ᱵᱚᱫᱚᱞᱮᱱᱟ ᱵᱚᱸᱫ ᱥᱟᱡᱟᱣᱠᱚ [[$1]] ᱞᱟᱹᱜᱤᱫ ᱪᱟᱵᱟᱜ ᱚᱠᱛᱚ $2 $3 ᱥᱟᱶ",
        "block-log-flags-nocreate": "Ekaunṭ benao do bondogeya",
        "block-log-flags-noemail": "E-mail do esetgea",
        "block-log-flags-hiddenname": "Beoharićaḱ ńutum do ukugea",
+       "proxyblocker": "ᱯᱨᱚᱠᱥᱤ ᱮᱥᱮᱫᱤᱡ",
        "movepagebtn": "Sakam ocogmẽ, Sakam kulmẽ",
        "pagemovedsub": "Ocogoḱ do hoena",
        "movelogpage": "Tala cạbi ocoḱme",
        "thumbnail-more": "Lạṭui mẽ",
        "thumbnail_error": "Benawakan unuduḱ kạṭuṕ do baṅ ṭhika: $1",
        "import-upload-filename": "Rẽt ńutum",
+       "importlogpage": "ᱞᱚᱜᱽ ᱟᱹᱜᱩ",
        "tooltip-pt-userpage": "{{GENDER:|am beoharićaḱ}} sakam",
        "tooltip-pt-mytalk": "{{GENDER:|Amaḱ}} ro̠ṛreaḱ́ sakam",
        "tooltip-pt-preferences": "{{GENDER:|Amaḱ}} pạsindko",
        "tooltip-ca-nstab-special": "Noa do mit́ṭen bises sakam kana, ar noa do bam joṛao daṛẽaḱa",
        "tooltip-ca-nstab-project": "projeṭ sakam ńelmẽ",
        "tooltip-ca-nstab-image": "Fael sakam ńel",
+       "tooltip-ca-nstab-mediawiki": "ᱥᱤᱥᱴᱚᱢ ᱢᱮᱥᱮᱡᱽ ᱧᱮᱞ",
        "tooltip-ca-nstab-template": "Forom uduḱme",
        "tooltip-ca-nstab-help": "Goṛo sakam ńelmẽ",
        "tooltip-ca-nstab-category": "Rokom sokom sakamko udukme",
        "tooltip-summary": "Khaṭote guṭ katha bhoraome",
        "others": "Eṭagaḱko",
        "simpleantispam-label": "Enṭi espam ńel\nDo <strong>not</strong> noa purạome!",
+       "pageinfo-title": "\"$1\" ᱞᱟᱹᱜᱤᱫ ᱥᱩᱪᱱᱟ",
+       "pageinfo-header-basic": "ᱢᱩᱬ ᱥᱩᱪᱱᱟ",
        "pageinfo-header-edits": "Toṅgeko",
+       "pageinfo-header-restrictions": "ᱥᱟᱦᱴᱟ ᱵᱟᱧᱪᱟᱣ",
+       "pageinfo-header-properties": "ᱥᱟᱦᱴᱟ ᱜᱩᱱᱠᱚ",
+       "pageinfo-display-title": "ᱩᱫᱩᱜ ᱧᱩᱛᱩᱢ",
+       "pageinfo-default-sort": "ᱯᱟᱹᱦᱤᱞᱟᱜ ᱠᱷᱟᱴᱚ ᱪᱟᱹᱵᱤ",
+       "pageinfo-length": "ᱥᱟᱦᱴᱟ ᱡᱤᱞᱤᱝ (ᱵᱟᱭᱤᱴ ᱛᱮ)",
+       "pageinfo-article-id": "ᱥᱟᱦᱴᱟ ID",
+       "pageinfo-language": "ᱥᱟᱦᱴᱟ ᱩᱱᱩᱫᱩᱜ ᱯᱟᱹᱨᱥᱤ",
+       "pageinfo-content-model": "ᱥᱟᱦᱴᱟ ᱩᱱᱩᱫᱩᱜ ᱥᱟᱢᱟᱝ",
+       "pageinfo-robot-policy": "ᱨᱚᱵᱚᱴ ᱫᱟᱨᱟᱭᱛᱮ ᱩᱱᱩᱫᱩᱜ",
+       "pageinfo-robot-index": "ᱚᱪᱚᱣᱟᱜ",
+       "pageinfo-robot-noindex": "ᱵᱟᱝᱚᱪᱚ",
        "pageinfo-watchers": "Ńeńelkoaḱ nombor",
+       "pageinfo-few-watchers": "$1 ᱠᱷᱚᱱ ᱠᱚᱢ {{PLURAL:$1|ᱧᱮᱧᱮᱞᱤᱭᱟᱹ|ᱧᱮᱧᱮᱞᱤᱭᱟᱹᱠᱚ}}",
+       "pageinfo-redirects-name": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟᱛᱮ ᱢᱚᱸᱦᱰᱟᱜᱠᱟᱱ ᱮᱞ",
+       "pageinfo-subpages-name": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱪᱟᱸᱜᱟ ᱥᱟᱦᱴᱟ ᱠᱚᱣᱟᱜ ᱮᱞ",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ᱢᱚᱦᱰᱟ|ᱢᱚᱦᱰᱟᱠᱚ}}; $3 {{PLURAL:$3|ᱵᱟᱝ-ᱢᱚᱦᱰᱟ|ᱵᱟᱝ-ᱢᱚᱦᱰᱟᱠᱚ}})",
+       "pageinfo-firstuser": "ᱥᱟᱦᱴᱟ ᱛᱮᱜ-ᱭᱟᱨᱠᱚ",
+       "pageinfo-firsttime": "ᱥᱟᱦᱴᱟ ᱛᱮᱭᱟᱨ ᱨᱮᱱᱟᱜ ᱢᱟᱺᱦᱤᱛ",
        "pageinfo-lastuser": "ᱨᱚᱠᱟ ᱥᱟᱯᱲᱮᱛ",
        "pageinfo-lasttime": "ᱨᱚᱠᱟ ᱥᱟᱯᱲᱟᱣ ᱨᱮᱱᱟᱜ ᱢᱟᱹᱦᱤᱛ",
+       "pageinfo-edits": "ᱥᱟᱯᱲᱟᱣᱟᱠᱚ ᱨᱮᱱᱟᱜ ᱜᱩᱴ ᱮᱞ",
+       "pageinfo-authors": "ᱴᱷᱟᱹᱣᱠᱟᱹ ᱚᱱᱚᱞᱤᱭᱟᱹ ᱠᱚᱣᱟᱜ ᱜᱩᱴ ᱮᱞ",
+       "pageinfo-recent-edits": "ᱨᱚᱠᱟ ᱥᱟᱯᱲᱟᱣᱟᱜ ᱮᱞ (ᱢᱟᱨᱮᱭᱟᱜ ᱢᱮᱥᱟ $1)",
+       "pageinfo-recent-authors": "ᱴᱷᱟᱹᱣᱠᱟᱹ ᱚᱱᱚᱞᱤᱭᱟᱹ ᱠᱚᱣᱟᱜ ᱨᱚᱠᱟ ᱮᱞ",
+       "pageinfo-magic-words": "ᱢᱤᱡᱤᱠ {{PLURAL:$1|ᱟᱹᱲᱟ|ᱟᱹᱲᱟᱹᱠᱚ}} ($1)",
+       "pageinfo-hidden-categories": "ᱫᱟᱱᱟᱝ {{PLURAL:$1|ᱦᱟᱹᱴᱤᱧ|ᱦᱟᱹᱹᱴᱤᱧᱠᱚ}} ($1)",
+       "pageinfo-templates": "ᱚᱞᱩᱪᱟᱹᱲᱟᱜ {{PLURAL:$1|ᱪᱷᱟᱸᱪ|ᱪᱷᱟᱸᱪᱠᱚ}} ($1)",
        "pageinfo-toolboxlink": "Sakam reaḱ baḍaejońaḱko",
+       "pageinfo-contentpage": "ᱩᱱᱩᱫᱩᱜ ᱥᱟᱦᱴᱟ ᱞᱮᱠᱟᱛᱮ ᱞᱮᱠᱷᱟ ᱦᱟᱠᱟᱱᱟ",
+       "pageinfo-contentpage-yes": "ᱦᱮᱸ",
+       "patrol-log-page": "ᱛᱩᱱᱠᱷᱤᱭᱤᱡᱟᱜ ᱞᱚᱜᱽ",
        "previousdiff": "Marenaḱ toṅgeko",
        "nextdiff": "Nãwã joṛao",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ᱥᱟᱦᱴᱟ|ᱥᱟᱦᱴᱟᱠᱚ}}",
        "file-info-size": "$1 x $2 pixels, file size: $3, MIME type: $4",
+       "file-info-size-pages": "$1 × $2 ᱯᱤᱠᱥᱮᱞ, ᱨᱮᱫ ᱥᱚᱝ: $3, MIME ᱞᱮᱠᱟᱱ: $4, $5 {{PLURAL:$5|ᱥᱟᱦᱴᱟ|ᱥᱟᱦᱴᱟᱠᱚ}}",
        "file-nohires": "Aema resulation nondḍe banuḱa",
        "svg-long-desc": "SVG rẽt, normalte $1 x $2 pixels, rẽt sayej: $3",
        "show-big-image": "Mukhiạ phayel",
        "exif-orientation-1": "ᱥᱟᱫᱷᱟᱨᱚᱱ",
        "namespacesall": "sanam",
        "monthsall": "Sanamak",
+       "imgmultipagenext": "ᱫᱟᱨᱟᱭ ᱥᱟᱦᱴᱟ 'n",
+       "imgmultigo": "ᱥᱮᱱᱚᱜ!",
+       "imgmultigoto": "ᱥᱮᱱᱚᱜ ᱢᱮ ᱥᱟᱦᱴᱟ $1",
+       "watchlisttools-clear": "ᱠᱩᱥᱤᱭᱟᱜ ᱞᱤᱥᱴᱤ ᱥᱟᱯᱷᱟ",
        "watchlisttools-view": "Jońgṛao bodolaḱko ńel",
        "watchlisttools-edit": "Ńelok tạlika ńel ar joṛao",
        "watchlisttools-raw": "Baṇ purạo akan ńelok tạlika purạomẽ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|galmarao]])",
        "duplicate-defaultsort": "'''Sontoroḱmẽ:''' ḍifolṭ sajao reaḱ cạbi: $2 lahare ḍifolṭ sajao reaḱ sakam: ''$1'' e bae luturaḱ kana.",
+       "redirect": "ᱨᱮᱫ, ᱵᱮᱵᱷᱟᱨᱩᱭᱟᱹ, ᱥᱟᱦᱴᱟ, ᱧᱮᱞ-ᱟᱹᱨᱩ, ᱵᱟᱝᱠᱷᱟᱱ ᱞᱚᱜᱽ ID ᱫᱟᱨᱟᱭᱛᱮ ᱢᱚᱦᱰᱟ",
+       "redirect-submit": "ᱥᱮᱱᱚᱜ",
+       "redirect-lookup": "ᱧᱮᱞᱢᱮ",
+       "redirect-value": "ᱫᱟᱢ:",
+       "redirect-user": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ID",
+       "redirect-page": "ᱥᱟᱦᱴᱟ ID",
+       "redirect-revision": "ᱥᱟᱦᱴᱟ ᱧᱮᱞ-ᱟᱹᱨᱩ",
+       "redirect-file": "ᱨᱮᱫᱧᱩᱛᱩᱢ",
        "specialpages": "Osokayteaḱ sakamko",
        "external_image_whitelist": "#Noa sakam do cet leka menaḱa oṅkage dohoemẽ\n#Sanam okte re jạhiren kuṭrạ latar re (khạli hạtiń //talare) bạisạomẽ\n#Noako do bahre reaḱ (hotlinked) chubi reaḱ URL saõte milạo hoyoḱa\n#Okako milạḱa, onako do chubi lekate udugoḱa, baṅkhan do khali chubi joṛao udugoḱa\n#Noa layen reaḱ ehoṕre # menaḱa ona layenko menko hisapte beohar hoyoḱka\n#Noa do kas-baṅ rimjhạoaḱge\n#Noa dag cetanre regex kuṭrạ bạsạomẽ. Noa layen cetleka menaḱa oṅkage dohoemẽ</pre>",
        "tag-filter": "[[Special:Tags|Tag]] saphay:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ᱥᱟᱛᱚᱢ|ᱥᱟᱛᱚᱢᱠᱩ}}]]: $2)",
+       "tags-active-yes": "ᱦᱮᱸ",
+       "tags-active-no": "ᱵᱟᱝ",
        "logentry-delete-delete": "$3 ᱥᱟᱦᱴᱟ $1 {{GENDER:$2|ᱜᱮᱫ ᱠᱮᱜ-ᱟᱭ}}",
+       "logentry-delete-restore": "$1 {{GENDER:$2|ᱨᱟᱠᱷᱟ ᱫᱚᱲᱦᱟ}} ᱠᱮᱜ-ᱟ ᱥᱟᱦᱴᱟ $3 ($4)",
+       "logentry-delete-revision": "$1 {{GENDER:$2|ᱵᱚᱫᱚᱞᱠᱮᱜ-ᱟᱭ}} ᱧᱮᱞᱚᱜᱟᱜ {{PLURAL:$5|ᱫᱚᱦᱲᱟᱭᱮᱱᱟᱜ|$5 ᱫᱚᱦᱲᱟᱭᱮᱱᱟᱜ ᱠᱚ}} $3: $4 ᱥᱟᱦᱴᱟ ᱪᱮᱛᱟᱱᱨᱮ",
+       "revdelete-content-hid": "ᱩᱱᱩᱫᱩᱜ ᱫᱟᱱᱟᱝ",
        "logentry-move-move": "$1 beoharić $3 sakam do $4 ńutumre {{GENDER:$2|ạcạr}} akada",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|ᱩᱪᱟᱹᱲᱠᱮᱜ-ᱟᱭ}} ᱥᱟᱦᱴᱟ $3 to $4 ᱢᱚᱦᱰᱟ ᱵᱤᱱ ᱵᱟᱹᱜᱤ ᱠᱟᱛᱮ",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ᱩᱪᱟᱹᱲᱮᱱᱟ}} ᱥᱟᱦᱴᱟ $3 ᱠᱷᱚᱱ $4 ᱪᱮᱛᱟᱱ ᱢᱚᱸᱦᱰᱟ ᱦᱟᱠᱟᱱᱟ",
        "logentry-newusers-create": "Beoharićaḱ hisạb khata $1 do jhićena",
+       "logentry-newusers-autocreate": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ $1 ᱫᱚ {{GENDER:$2|ᱛᱮᱭᱟᱨᱮᱱᱟ}} ᱟᱡᱛᱮᱜᱮ",
        "logentry-upload-upload": "$1 {{GENDER:$2|rakaṕ akadae}} $3",
-       "searchsuggest-search": "ᱥᱮᱸᱫᱽᱨᱟ {{SITENAME}}"
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ᱞᱟᱫᱮᱭᱮᱱᱟ}} ᱢᱤᱫ ᱱᱟᱶᱟ ᱵᱷᱟᱨᱥᱚᱱ $3 ᱨᱮᱱᱟᱜ",
+       "searchsuggest-search": "ᱥᱮᱸᱫᱽᱨᱟ {{SITENAME}}",
+       "duration-days": "$1 {{PLURAL:$1|ᱢᱟᱦᱟᱸ|ᱢᱟᱸᱦᱟᱸ}}",
+       "randomrootpage": "ᱟᱹᱛᱷᱟᱣᱲᱤ ᱨᱮᱦᱮᱫ ᱥᱟᱦᱴᱟ"
 }
index 37f6244..c7f7ecb 100644 (file)
        "recentchanges-legend-heading": "<strong>ڪنجي:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (پڻ ڏسو [[Special:NewPages|نون صفحن جي فھرست]])",
        "recentchanges-submit": "ڏيکاريو",
-       "rcfilters-other-review-tools": "<strong>نظرثانيءَ جا ٻيا اوزار</strong>",
+       "rcfilters-other-review-tools": "نظرثانيءَ جا ٻيا اوزار",
        "rcfilters-activefilters": "سرگرم ڇاڻيون",
        "rcfilters-advancedfilters": "متقدم ڇاڻيون",
        "rcfilters-limit-shownum": "آخري {{PLURAL:$1|تبديلي|$1 تبديليون}} ڏيکاريو",
index ee8cef5..2d18707 100644 (file)
@@ -37,7 +37,7 @@
        "tog-shownumberswatching": "ၼႄတၢင်းၼမ် ၵူၼ်းတူၺ်းလႄႈ",
        "tog-oldsig": "လၢႆးမိုဝ်း ဢၼ်တိုၵ်ႉမီးဝႆႉ",
        "tog-fancysig": "ႁဵတ်းႁႂ်ႈလၢႆးမိုဝ်း ပဵၼ်ၼင်ႇပိူင်ၾၢင်ဝီႇၶီႇ (လူၺ်ႈဢမ်ႇမီးၵွင်ႉဢၼ်ဝႅၼ်ႊ)",
-       "tog-uselivepreview": "á\81¸á\82\82á\80ºá\82\89á\80\90á\80­á\80¯á\80\9dá\80ºá\80¸ á\81µá\81¢á\81¼á\80ºá\80\90á\80°á\81ºá\80ºá\80¸á\80\9cá\80°á\80\84á\80ºá\82\88á\81¼á\82\83á\82\88 á\80¢á\81¼á\80ºá\80\90á\80°á\80\84á\80ºá\82\89á\80\9dá\82\86",
+       "tog-uselivepreview": "á\80¢á\80\99á\80ºá\82\87á\81¼á\80µá\80\84á\80ºá\82\87á\80\95á\80­á\80¯á\80\90á\80ºá\82\87á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\80±á\80\9eá\80±á\81µá\80±á\82\83á\82\88 á\81¼á\82\84á\80\95á\81¼á\80ºá\81µá\81¢á\81¼á\80ºá\80\90á\80°á\81ºá\80ºá\80¸á\80\9cá\80°á\80\84á\80ºá\82\88á\81¼á\82\83á\82\88",
        "tog-forceeditsummary": "ပေႃးဝႃႈ တီႈႁုဝ်ႁူပ်ႈမႄးထတ်းၼၼ်ႉ ဢမ်ႇသႂ်ႇသင်သေ ပဵၼ်လွၵ်းပဝ်ႇဝႆ့ၼႆ ပၼ်ၽၢင်ႉၶႃႈသေၵမ်း",
        "tog-watchlisthideown": "လပ်ႉၵၢၼ်ထတ်းမႄးၵဝ်ၶႃႈ ၵႃႊတီႈသဵၼ်ႈမၢႆဝႆႉ",
        "tog-watchlisthidebots": "သိူင်ႇ ၶေႃႈထတ်းၵဝ် တမ်ႈတီႈ သဵၼ်ႈပႂ်ႉတူၺ်း",
@@ -57,7 +57,6 @@
        "underline-never": "ဢမ်ႇႁဵတ်းသေပွၵ်ႈ",
        "underline-default": "ပိူင်ၵႅဝ်ႈၾၢင်ႁၢင်ႊတၢင်းၼွၵ်ႈ ဢမ်ႇၼၼ် ပြၢဝ်းသိူဝ်ႇ",
        "editfont-style": "ဢွင်ႈတီႈဢၼ်ထတ်းမႄး ဝႅပ်ႇယၢင်ႇၾွၼ်ႉ",
-       "editfont-default": "ပၵ်းၵဝ်ႇပိူင်ၵဝ်ႇပြၢဝ်းသိူဝ်ႇ",
        "editfont-monospace": "ၾွၼ်ႉ မူဝ်ႇၼူဝ်သပဵတ်ႉ",
        "editfont-sansserif": "ၾွၼ်ႉ San-serif",
        "editfont-serif": "ၾွၼ်ႉဢၼ်သဵၼ်ႈတိူဝ်းၸႅင်ႈ",
        "recentchanges-legend-heading": "<strong>ဢပုမ်ႇ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (တူၺ်းပႃးထႅင်ႈ [[Special:NewPages|သဵၼ်ႈမၢႆ ၼႃႈလိၵ်ႈဢၼ်မႂ်ႇ]])",
        "recentchanges-submit": "ၼႄ",
+       "rcfilters-other-review-tools": "ၶိူင်ႈၶိုၼ်းတူၺ်း တၢင်ႇၸိူဝ်း",
+       "rcfilters-group-results-by-page": "ၽွတ်ႈၸုမ်းၽွၼ်းလႆႈ ၸွမ်းၼႃႈလိၵ်ႈ",
+       "rcfilters-grouping-title": "ၸုမ်း",
        "rcfilters-activefilters": "တူဝ်ထွင် ဢၼ်တူင်ႉၼိုင်",
+       "rcfilters-advancedfilters": "တူဝ်ထွင်ၶိုၵ်ႉတွၼ်း",
+       "rcfilters-limit-title": "ၸိူဝ်းလႅၵ်ႈလၢႆႈ တွၼ်ႈတႃႇၼႄ",
+       "rcfilters-limit-shownum": "ၼႄပၼ် {{PLURAL:$1|လွင်ႈလႅၵ်ႈလၢႆႈ|$1 ၸိူဝ်းလႅၵ်ႈလၢႆႈ}} ၵမ်းလိုၼ်းသုတ်း",
+       "rcfilters-days-title": "ဝၼ်းၸိူဝ်းပႆႇႁိုင်",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|ဝၼ်း|ဝၼ်း။}}",
+       "rcfilters-quickfilters": "တူဝ်ထွင်ၸိူဝ်းသိမ်းဝႆႉ",
+       "rcfilters-quickfilters-placeholder-title": "ဢမ်ႇပႆႇမီး ထူဝ်ထွင်ၸိူဝ်းသိမ်းဝႆႉ",
+       "rcfilters-quickfilters-placeholder-description": "တွၼ်ႈတႃႇသိမ်း ၵၢၼ်တင်ႈတူဝ်ထွင်ၸဝ်ႈၵဝ်ႇ လႄႈ တႃႇၶိုၼ်းၸႂ်ႉၶဝ် ဝၢႆးလင်မႃးၼၼ်ႉၼႆ ၼဵၵ်းၶလိၵ်ႉတီႈ ႁၢင်ႈႁိင်ႈ မၢႆတွင်း - bookmark ဢၼ်မီးတီႈ ဢွင်ႈတီႈတူဝ်ထွင်ၶီး၊ ၽၢႆႇတႂ်ႈၼႆႉ။",
+       "rcfilters-savedqueries-defaultlabel": "တူဝ်ထွင်ၸိူဝ်းသိမ်းဝႆႉ",
+       "rcfilters-savedqueries-new-name-placeholder": "မွၵ်ႇလၢတ်ႈၼႄ လွင်ႈယိူင်းဢၢၼ်းၶွင်တူဝ်ထွင်",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "သၢင်ႈတူဝ်ထွင်ပိူင်ၵႅဝ်ႈ",
+       "rcfilters-savedqueries-add-new-title": "သိမ်းၵၢၼ်တင်ႈတူဝ်ထွင်ဢၼ်ၸႂ်ႉဝႆႉယၢမ်းလဵဝ်",
        "rcfilters-restore-default-filters": "ဝႆႉၶိုၼ်း တူဝ်ထွင် ပိူင်ၵႅဝ်ႈ",
        "rcfilters-clear-all-filters": "ၽဵဝ်ႈလၢင်ႉ တူဝ်ထွင်တင်းမူတ်း",
-       "rcfilters-search-placeholder": "á\80\91á\80½á\80\84á\80ºá\80¢á\80\9dá\80º á\80\9cá\80½á\80\84á\80ºá\82\88á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\82\81á\80µá\80\90á\80ºá\80¸á\81µá\82\82á\82\83á\82\87 (á\80\95á\80­á\80¯á\80\90á\80ºá\82\87á\82\81á\82\83 á\80¢á\80\99á\80ºá\82\87á\81¼á\81¼á\80º á\80\90á\82\84á\82\87á\80\95á\80±á\82\83á\82\89)",
+       "rcfilters-search-placeholder": "á\80\90á\80°á\80\9dá\80ºá\80\91á\80½á\80\84á\80º á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 (á\81¸á\82\82á\80ºá\82\89á\80\9eá\80µá\81¼á\80ºá\82\88á\81µá\81¢á\81¼á\80º á\80¢á\80\99á\80ºá\82\87á\81¼á\81¼á\80º á\80\9eá\80½á\81µá\80ºá\82\88á\82\81á\82\83á\80\90á\82\83á\82\87 á\81¸á\80­á\80¯á\80\9dá\80ºá\82\88á\80\90á\80°á\80\9dá\80ºá\80\91á\80½á\80\84á\80º)",
        "rcfilters-invalid-filter": "ထွင်ႁႃ ၽိတ်းပိူင်ႈ",
        "rcfilters-empty-filter": "ဢမ်ႇမီးတူဝ်ထွင် ဢၼ်တူင်ႉၼိုင်။ ၵၢၼ်ၶဝ်ႈႁူမ်ႈတၢင်းသဵင်ႈၵေႃႈၼႄဝႆႉယူႇ။",
        "rcfilters-filterlist-title": "တူဝ်ထွင်",
+       "rcfilters-filterlist-feedbacklink": "မွၵ်ႇလၢတ်ႈၼႄႁဝ်းဝႃႈ ၸဝ်ႈၵဝ်ႇဝူၼ်ႉလွင်ႈၸိူဝ်းၼႆႉ - ၶိူင်ႈထွင်(ဢၼ်မႂ်ႇ)",
        "rcfilters-filterlist-noresults": "ဢမ်ႇႁၼ်မီးတူဝ်ထွင်",
        "rcfilters-filtergroup-authorship": "လွင်ႈၶဝ်ႈႁူမ်ႈ ၸဝ်ႈပၢႆၵမ်",
        "rcfilters-filter-editsbyself-label": "လွင်ႈ​လႅၵ်ႈလၢႆႈ ၸဝ်ႈၵဝ်ႇႁဵတ်း",
        "rcfilters-filter-newpages-label": "လွင်ႈၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ",
        "rcfilters-filter-newpages-description": "မႄးထတ်း ဢၼ်ႁဵတ်းပဵၼ် ၼႃႈလိၵ်ႈဢၼ်မႂ်ႇ",
        "rcfilters-filter-categorization-label": "လႅၵ်ႈလၢႆႈ တွၼ်ႈၵၼ်",
+       "rcfilters-filtergroup-lastRevision": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
+       "rcfilters-filter-lastrevision-label": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
+       "rcfilters-filter-lastrevision-description": "ၸိူဝ်းဢၼ်မီးလွင်ႈလႅၵ်ႈလၢႆႈၸူး ၼႃႈလိၵ်ႈ ဢၼ်ပႆႇႁိုင်ၼၼ်ႉၵူၺ်း",
+       "rcfilters-filter-previousrevision-label": "ဢမ်ႇၸႂ်ႈၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
+       "rcfilters-filter-previousrevision-description": "ၸိူဝ်းလႅၵ်ႈလၢႆႈတင်းသဵင်ႈ ဢၼ်ဢမ်ႇၸႂ်ႈ \"လွင်ႈၶူၼ်ႉၶႆႈၵမ်းလိုၼ်းသုတ်း\"။",
        "rcnotefrom": "ၽၢႆႇတႂ်ႈ {{PLURAL:$5|ၼႆႉ ပဵၼ်လွင်ႈလႅၵ်ႈလၢႆႈ|ၸိူဝ်းၼႆႉ ပဵၼ်လွင်ႈလႅၵ်ႈလၢႆႈ}} ဝႆႉ ၸဵမ်မိူဝ်ႈ <strong>$3, $4</strong> (တေႃႇထိုင် <strong>$1</strong> ဢၼ်ၼႄဝႆႉ).",
        "rclistfrom": "ၼႄ လွင်ႈ​လႅၵ်ႈလၢႆႈဢၼ်မႂ်ႇ တႄႇတီႈ $2, $3",
        "rcshowhideminor": "$1 လွင်ႈမူၼ်ႉမႄး ဢိတ်းဢီႈ",
        "block": "ႁႄႉတတ်း ၽူႈၸႂ်ႉတိုဝ်း",
        "unblock": "ပိုတ်ႇႁႄႉတတ်း ၽူႈၸႂ်ႉတိုဝ်း",
        "blockip": "ႁႄႉတတ်း {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}}",
-       "blockip-legend": "ႁႄႉတတ်း ၽူႈၸႂ်ႉတိုဝ်း",
        "ipaddressorusername": "ႁဵၼ်းလိၵ်ႈ ဢၢႆႇၽီ ဢမ်ႇၼၼ် ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း :",
        "ipbexpiry": "ၶၢဝ်းယၢမ်းသုတ်းသဵင်ႈ:",
        "ipbreason": "လွင်ႈတၢင်း :",
        "show-big-image-preview": "သႅၼ်းတႃႇတူၺ်းလူင်ႈၼႃႈ: $1.",
        "show-big-image-other": " {{PLURAL:$2|resolution|resolutions}}: $1 တၢင်ႇဢၼ်",
        "show-big-image-size": "$1 × $2 ၽိၵ်ႉသိူဝ်ႇ",
+       "newimages-legend": "တူဝ်ထွင်",
        "ilsubmit": "ၶူၼ်ႉႁႃ",
        "bydate": "ၼင်ႇ ဝၼ်းထီႉ",
        "sp-newimages-showfrom": "ၼႄ ၾၢႆႇဢၼ်မႂ်ႇ ၸိူဝ်းတႄႇ မႃးမိူဝ်ႈ $2, $1",
        "redirect-file": "ၸိုဝ်ႈၾၢႆႇ",
        "specialpages": "ၼႃႈလိၵ်ႈ ၶိုၵ်ႉတွၼ်း",
        "tag-filter": "ၶတ်းလိူၵ်ႈဢဝ်[[Special:Tags|Tag]]:",
+       "tag-filter-submit": "တူဝ်ထွင်",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-active-yes": "ၸႂ်ႈယဝ်ႉ",
        "tags-active-no": "ဢမ်ႇ",
index 30434b6..12473ae 100644 (file)
@@ -35,7 +35,8 @@
                        "Hromoslav",
                        "Matma Rex",
                        "LacoR",
-                       "Xð"
+                       "Xð",
+                       "Pmikolas44"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
@@ -72,6 +73,7 @@
        "tog-watchlisthideminor": "Skryť drobné úpravy zo zoznamu sledovaných",
        "tog-watchlisthideliu": "Skryť úpravy prihlásených používateľov zo zoznamu sledovaných stránok",
        "tog-watchlistreloadautomatically": "Po zmene nastavení automaticky aktualizovať zoznam sledovaných (vyžaduje JavaScript)",
+       "tog-watchlistunwatchlinks": "K položkám zoznamu sledovaných uvádzať odkazy pre sledovanie/nesledovanie (rýchle prepnutie vyžaduje JavaScript)",
        "tog-watchlisthideanons": "Skryť úpravy anonymných používateľov zo zoznamu sledovaných stránok",
        "tog-watchlisthidepatrolled": "Skryť preverené úpravy v zozname sledovaných stránok",
        "tog-watchlisthidecategorization": "Skryť kategorizáciu stránok",
@@ -85,7 +87,6 @@
        "underline-never": "Nikdy",
        "underline-default": "Podľa nastavení prehliadača alebo témy vzhľadu",
        "editfont-style": "Štýl písma oblasti na úpravy:",
-       "editfont-default": "Predvoľba prehliadača",
        "editfont-monospace": "S pevnou šírkou znaku",
        "editfont-sansserif": "Bezpätkové písmo",
        "editfont-serif": "Pätkové písmo",
        "anonpreviewwarning": "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''",
        "missingsummary": "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.",
        "selfredirect": "<strong>Upozornenie:</strong> Snažíte sa túto stránku presmerovať samú na seba.\nMožno ste zadali chybný cieľ presmerovania, alebo editujete nesprávnu stránku.\nAk znova kliknete na „$1“, bude presmerovanie aj napriek tomu vytvorené.",
-       "missingcommenttext": "Prosím, dolu napíšte komentár.",
+       "missingcommenttext": "Prosím, vložte komentár.",
        "missingcommentheader": "<strong>Pripomienka:</strong> Neposkytli ste predmet/hlavičku tohto komentára.\nAk znova kliknete na tlačidlo „$1“, vaša úprava sa uloží bez nej.",
        "summary-preview": "Náhľad zhrnutia:",
        "subject-preview": "Náhľad predmetu:",
        "timezoneregion-indian": "Indický oceán",
        "timezoneregion-pacific": "Tichý oceán",
        "allowemail": "Povoliť prijímanie e-mailov od iných používateľov",
+       "email-blacklist-label": "Znemožniť týmto používateľom posielať mi e-maily:",
        "prefs-searchoptions": "Vyhľadávanie",
        "prefs-namespaces": "Menné priestory",
        "default": "predvolený",
        "prefs-editor": "Používateľ",
        "prefs-preview": "Náhľad",
        "prefs-advancedrc": "Rozšírené možnosti",
+       "prefs-opt-out": "Nepoužívať vylepšenia",
        "prefs-advancedrendering": "Rozšírené možnosti",
        "prefs-advancedsearchoptions": "Rozšírené možnosti",
        "prefs-advancedwatchlist": "Rozšírené možnosti",
        "recentchanges-submit": "Zobraziť",
        "rcfilters-tag-remove": "Odstrániť '$1'",
        "rcfilters-legend-heading": "<strong>Zoznam skratiek:</strong>",
-       "rcfilters-other-review-tools": "<strong>Ďalšie kontrolné nástroje</strong>",
+       "rcfilters-other-review-tools": "Ďalšie kontrolné nástroje",
        "rcfilters-group-results-by-page": "Zoskupiť výsledky podľa stránky",
        "rcfilters-grouping-title": "Zoskupovanie",
        "rcfilters-activefilters": "Aktívne filtre",
        "rcfilters-filter-user-experience-level-unregistered-label": "Neregistrovaní",
        "rcfilters-filter-user-experience-level-unregistered-description": "Redaktori, ktorí nie sú prihlásení.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nováčikovia",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registrovaní používatelia s menej ako 10 úpravami a 4 dňami aktivity.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrovaní editori, ktorí majú menej ako 10 úprav alebo 4 dni aktivity.",
        "rcfilters-filter-user-experience-level-learner-label": "Začiatočníci",
        "rcfilters-filter-user-experience-level-learner-description": "Registrovaní používatelia, ktorých skúsenosti spadajú medzi „Nováčikmi“ a „Skúsenými používateľmi“.",
        "rcfilters-filter-user-experience-level-experienced-label": "Skúsení používatelia",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nie</strong> $1",
        "rcfilters-exclude-button-off": "Vylúčiť zvolené",
        "rcfilters-exclude-button-on": "Zvolené vylúčené",
-       "rcfilters-view-advanced-filters-label": "Pokročilé filtre",
        "rcfilters-view-tags": "Označené úpravy",
        "rcfilters-view-namespaces-tooltip": "Filtrovať výsledky podľa menného priestoru",
        "rcfilters-view-tags-tooltip": "Filtrovať výsledky pomocou značiek úprav",
        "block": "Zablokovať používateľa",
        "unblock": "Odblokovať používateľa",
        "blockip": "Zablokovať {{GENDER:$1|používateľa|používateľku}}",
-       "blockip-legend": "Zablokovať používateľa",
        "blockiptext": "Tento formulár použite na zablokovanie možnosti zápisu z konkrétnej IP adresy alebo od konkrétneho používateľa.\nMali by ste to urobiť len na zabránenie vandalizmu a v súlade so [[{{MediaWiki:Policy-url}}|zásadami a smernicami {{GRAMMAR:genitív|{{SITENAME}}}}]].\nNižšie uveďte konkrétny dôvod (napríklad uveďte konkrétne stránky, ktoré padli za obeť vandalizmu).\nRozsahy IP adreies môžete blokovať pomocou syntaxe [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; najväčší povolený rozsah je /$1 v prípade IPv4 a /$2 v prípade IPv6.",
        "ipaddressorusername": "IP adresa alebo meno používateľa:",
        "ipbexpiry": "Ukončenie:",
        "mw-widgets-mediasearch-noresults": "Neboli nájdené žiadne výsledky.",
        "mw-widgets-titleinput-description-new-page": "stránka zatiaľ neexistuje",
        "mw-widgets-titleinput-description-redirect": "presmerovanie na $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Pridať kategóriu…",
+       "mw-widgets-usersmultiselect-placeholder": "Pridať ďalšieho…",
        "date-range-from": "Od dátumu:",
        "date-range-to": "Po dátum:",
        "randomrootpage": "Náhodná koreňová stránka",
index 593980e..242f631 100644 (file)
        "editfont-sansserif": "سنس سیرف فونٹ",
        "editfont-serif": "سیرف فونٹ",
        "sunday": "اتوار",
-       "monday": "سونوار",
+       "monday": "سÙ\88Ù\86Ù\98Ù\88ار",
        "tuesday": "منگل",
-       "wednesday": "بدھ",
+       "wednesday": "ٻُدھ",
        "thursday": "خمیس",
        "friday": "جمعہ",
        "saturday": "چھݨ چھݨ",
        "sun": "اتوار",
-       "mon": "سونوار",
+       "mon": "سÙ\88Ù\86Ù\98Ù\88ار",
        "tue": "منگل",
-       "wed": "بدھ",
+       "wed": "ٻُدھ",
        "thu": "خمیس",
        "fri": "جمعہ",
        "sat": "چھݨ چھݨ",
        "internalerror": "اندر دی غلطی",
        "internalerror_info": "اندر دی غلطی:$1",
        "filedeleteerror": "مِسَل \"$1\" کوں مٹایا نی ونڄ سڳیا۔",
+       "filenotfound": "مِسَل \"$1\" کوں لبھ نی سڳیا۔",
        "formerror": "رپھڑ: فارم نی بھیج سڳے",
        "cannotdelete-title": "ورقہ\"$1\" نی مٹا سڳدے",
        "badtitle": "بھیڑا عنوان",
        "resetpass_submit": "پاس ورڈ بݨاؤ تے لاگ ان تھیوو",
        "changepassword-success": "تہاݙا پاس ورڈ تبدیل تھی ڳیا!",
        "botpasswords": "بوٹ پاس ورڈ",
+       "botpasswords-existing": "بوٹ دے موجودہ پاسورڈ",
+       "botpasswords-createnew": "بوٹ دا نواں پاسورڈ بݨاؤ",
        "botpasswords-label-appid": "بوٹ ناں:",
        "botpasswords-label-create": "بݨاؤ",
        "botpasswords-label-update": "اپ ݙیٹ",
        "botpasswords-label-resetpassword": "پاس ورڈ تبدیل کرو",
        "botpasswords-label-grants-column": "ݙے ݙتا ڳئے",
        "botpasswords-bad-appid": "\"$1\" بوٹ ناں ٹھیک کائنی۔",
+       "botpasswords-deleted-title": "بوٹ پاسورڈ مٹ ڳیا",
        "resetpass-submit-loggedin": "پاس ورڈ تبدیل کرو",
        "resetpass-submit-cancel": "منسوخ",
        "resetpass-temp-password": "عارضی لنگھݨ لفظ، پاس ورڈ",
index 14ccbf0..6dbd987 100644 (file)
@@ -14,7 +14,8 @@
                        "Janezdrilc",
                        "Matma Rex",
                        "NegativeTwelveDollars",
-                       "Xð"
+                       "Xð",
+                       "HairyFotr"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "anonpreviewwarning": "Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.",
        "missingsummary": "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
        "selfredirect": "<strong>Opozorilo:</strong> Stran preusmerjate na samo nase.\nMorda ste za cilj preusmeritve navedli napačno stran ali pa morda urejate napačno stran.\nČe ponovno kliknete »$1«, bomo preusmeritev vseeno ustvarili.",
-       "missingcommenttext": "Prosimo, vpišite v spodnje polje komentar.",
+       "missingcommenttext": "Prosimo, vnesite komentar.",
        "missingcommentheader": "<strong>Opozorilo:</strong> Niste vnesli zadeve za ta komentar.\nČe boste ponovno kliknili »$1«, bo vaše urejanje shranjeno brez nje.",
        "summary-preview": "Predogled povzetka urejanja:",
        "subject-preview": "Predogled zadeve:",
        "recentchanges-legend": "Možnosti zadnjih sprememb",
        "recentchanges-summary": "Na tej strani lahko spremljate najnovejše spremembe wikija.",
        "recentchanges-noresult": "V danem obdobju nobena sprememba ne ustreza tem merilom.",
+       "recentchanges-timeout": "Čas iskanja je potekel. Poskusite uporabiti drugačne parametre iskanja.",
+       "recentchanges-network": "Zaradi tehnične napake rezultatov ne moremo naložiti. Prosimo, poskusite osvežiti stran.",
        "recentchanges-feed-description": "Spremljajte zadnje spremembe wikija prek tega vira.",
        "recentchanges-label-newpage": "To urejanje je ustvarilo novo stran",
        "recentchanges-label-minor": "To je manjše urejanje",
        "recentchanges-submit": "Prikaži",
        "rcfilters-tag-remove": "Odstrani »$1«",
        "rcfilters-legend-heading": "<strong>Seznam okrajšav:</strong>",
-       "rcfilters-other-review-tools": "<strong>Druga orodja za pregled</strong>",
+       "rcfilters-other-review-tools": "Druga orodja za pregled",
        "rcfilters-group-results-by-page": "Združi rezultate po strani",
        "rcfilters-grouping-title": "Združevanje",
        "rcfilters-activefilters": "Dejavni filtri",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ura|uri|ure|ur}}",
        "rcfilters-highlighted-filters-list": "Označeno: $1",
        "rcfilters-quickfilters": "Shranjeni filtri",
-       "rcfilters-quickfilters-placeholder-title": "Shranjena ni še nobena povezava",
+       "rcfilters-quickfilters-placeholder-title": "Shranjen ni še noben filter",
        "rcfilters-quickfilters-placeholder-description": "Da shranite svoje nastavitve filtrov in jih ponovno uporabite pozneje, kliknite na ikono za zaznamek v območju Dejavni filtri spodaj.",
        "rcfilters-savedqueries-defaultlabel": "Shranjeni filtri",
        "rcfilters-savedqueries-rename": "Preimenuj",
        "rcfilters-restore-default-filters": "Obnovi privzete filtre",
        "rcfilters-clear-all-filters": "Počisti vse filtre",
        "rcfilters-show-new-changes": "Ogled najnovejših sprememb",
-       "rcfilters-search-placeholder": "Filtrirajte zadnje spremembe (prebrskajte ali začnite vnašati)",
+       "rcfilters-search-placeholder": "Filtrirajte spremembe (uporabite meni ali poiščite ime filtra)",
        "rcfilters-invalid-filter": "Neveljaven filter",
        "rcfilters-empty-filter": "Ni dejavnih filtrov. Prikazani so vsi prispevki.",
        "rcfilters-filterlist-title": "Filtri",
        "rcfilters-filter-editsbyself-label": "Vaše spremembe",
        "rcfilters-filter-editsbyself-description": "Vaša lastna urejanja.",
        "rcfilters-filter-editsbyother-label": "Spremembe drugih",
-       "rcfilters-filter-editsbyother-description": "Vse spremembe razen vaše.",
-       "rcfilters-filtergroup-userExpLevel": "Registriranost in izkušenost uporabnika",
-       "rcfilters-filter-user-experience-level-registered-label": "Registriran",
-       "rcfilters-filter-user-experience-level-registered-description": "Prijavljeni uredniki.",
-       "rcfilters-filter-user-experience-level-unregistered-label": "Neregistriran",
-       "rcfilters-filter-user-experience-level-unregistered-description": "Uredniki, ki niso prijavljeni.",
+       "rcfilters-filter-editsbyother-description": "Vse spremembe razen vaših.",
+       "rcfilters-filtergroup-userExpLevel": "Prijava in izkušnje uporabnika",
+       "rcfilters-filter-user-experience-level-registered-label": "Registrirani",
+       "rcfilters-filter-user-experience-level-registered-description": "Prijavljeni uporabniki.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Neregistrirani",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Uporabniki, ki niso prijavljeni.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Novinci",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registrirani uredniki z manj kot 10 urejanji in 4 dnevi dejavnosti.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrirani uporabniki, ki imajo manj kot 10 urejanj ali 4 dni dejavnosti.",
        "rcfilters-filter-user-experience-level-learner-label": "Učenci",
-       "rcfilters-filter-user-experience-level-learner-description": "Registrirani uredniki, katerih izkušenost se uvršča med »Novince« in »Izkušene uporabnike«.",
+       "rcfilters-filter-user-experience-level-learner-description": "Registrirani uporabniki, ki so po izkušenosti med »Novinci« in »Izkušenimi uporabniki«.",
        "rcfilters-filter-user-experience-level-experienced-label": "Izkušeni uporabniki",
-       "rcfilters-filter-user-experience-level-experienced-description": "Registrirani uredniki z več kot 500 urejanji in 30 dnevi dejavnosti.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Registrirani uporabniki z več kot 500 urejanji in 30 dnevi dejavnosti.",
        "rcfilters-filtergroup-automated": "Samodejni prispevki",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Urejanja, narejena s samodejnimi orodji.",
        "rcfilters-filter-humans-label": "Človek (ne bot)",
-       "rcfilters-filter-humans-description": "Urejanja, ki so jih izvedli uredniki ljudje.",
+       "rcfilters-filter-humans-description": "Urejanja, ki so jih izvedli ljudje.",
        "rcfilters-filtergroup-reviewstatus": "Stanje pregleda",
        "rcfilters-filter-patrolled-label": "Nadzorovano",
        "rcfilters-filter-patrolled-description": "Urejanja, ki so označena kot nadzorovana.",
        "rcfilters-filter-unpatrolled-label": "Nenadzorovano",
        "rcfilters-filter-unpatrolled-description": "Urejanja, ki niso označena kot nadzorovana.",
        "rcfilters-filtergroup-significance": "Pomembnost",
-       "rcfilters-filter-minor-label": "Manjše urejanje",
+       "rcfilters-filter-minor-label": "Manjša urejanja",
        "rcfilters-filter-minor-description": "Urejanja, ki jih je avtor označil kot manjša.",
        "rcfilters-filter-major-label": "Nemanjša urejanja",
        "rcfilters-filter-major-description": "Urejanja, ki niso označena kot manjša.",
        "rcfilters-filtergroup-watchlist": "Nadzorovane strani",
        "rcfilters-filter-watchlist-watched-label": "Na spisku nadzorov",
-       "rcfilters-filter-watchlist-watched-description": "Spremembe strani na vašems spisku nadzorov.",
+       "rcfilters-filter-watchlist-watched-description": "Spremembe strani iz vašega Spiska nadzorov.",
        "rcfilters-filter-watchlist-watchednew-label": "Nove spremembe nadzorovanih strani",
        "rcfilters-filter-watchlist-watchednew-description": "Spremembe nadzorovanih strani, ki jih niste obiskali, odkar je prišlo do sprememb.",
        "rcfilters-filter-watchlist-notwatched-label": "Ni na spisku nadzorov",
-       "rcfilters-filter-watchlist-notwatched-description": "Vse razen spremembe strani na vašem spisku nadzorov.",
+       "rcfilters-filter-watchlist-notwatched-description": "Vse razen sprememb strani iz vašega Spiska nadzorov.",
        "rcfilters-filtergroup-watchlistactivity": "Dejavnost spiska nadzorov",
        "rcfilters-filter-watchlistactivity-unseen-label": "Nepregledane spremembe",
        "rcfilters-filter-watchlistactivity-unseen-description": "Spremembe strani, ki jih niste obiskali, odkar je prišlo do sprememb.",
        "rcfilters-filter-newpages-description": "Urejanja, ki ustvarijo nove strani.",
        "rcfilters-filter-categorization-label": "Spremembe kategorij",
        "rcfilters-filter-categorization-description": "Zapisi o straneh, ki so bila dodana ali odstranjena iz kategorij.",
-       "rcfilters-filter-logactions-label": "Zabeležena dejanja",
+       "rcfilters-filter-logactions-label": "Dnevniška dejanja",
        "rcfilters-filter-logactions-description": "Administrativna dejanja, ustvarjanja računov, izbrisi strani, nalaganja ...",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Filter »Manjša urejanja« je v sporu z enim ali več filtri Vrsta spremembe, ker nekaterih vrst urejanj ni možno označiti kot »manjša«. Filtri v sporu so označeni v območju Dejavni filtri zgoraj.",
        "rcfilters-hideminor-conflicts-typeofchange": "Nekaterih vrst sprememb ni možno označiti kot »manjše«, zato je ta filter v sporu z naslednjimi filtri Vrsta spremembe: $1",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
        "rcfilters-exclude-button-off": "Izključi izbrane",
        "rcfilters-exclude-button-on": "Izključitev izbranih",
-       "rcfilters-view-advanced-filters-label": "Napredni filtri",
        "rcfilters-view-tags": "Označena urejanja",
        "rcfilters-view-namespaces-tooltip": "Filtriraj rezultate po imenskem prostoru",
        "rcfilters-view-tags-tooltip": "Filtriraj rezultate z uporabo oznak urejanj",
        "uploaded-script-svg": "V naloženi datoteki SVG smo našli skriptni element »$1«.",
        "uploaded-hostile-svg": "V slogovnem elementu naložene datoteke SVG smo našli nevaren CSS.",
        "uploaded-event-handler-on-svg": "Določevanje atributov za dogodke <code>$1=\"$2\"</code> v datotekah SVG ni dovoljeno.",
-       "uploaded-href-attribute-svg": "Atributi href v datotekah SVG lahko ciljajo samo na http:// ali https://, našli smo <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Elementi <a> se lahko povezujejo (href) samo na cilje data: (vgrajena datoteka), http://, https:// ali sidro (#, v istem dokumentu). Za druge elemente, kot je <image>, sta dovoljena samo data: in sidro. Med izvozom svojega SVG poskusite slike vgraditi. Našli smo <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Našli smo href na nevaren podatek: cilj URI <code>&lt;$1 $2=\"$3\"&gt;</code> v naloženi datoteki SVG.",
        "uploaded-animate-svg": "V naloženi datoteki SVG smo našli oznako »animate«, ki lahko spreminja href z uporabo atributa »from« <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Določevanje atributov za dogodke je blokirano; v naloženi datoteki SVG smo našli <code>&lt;$1 $2=\"$3\"&gt;</code>.",
index ba59edf..ea77fe1 100644 (file)
        "tog-shownumberswatching": "Прикажи број корисника који надгледају",
        "tog-oldsig": "Текући потпис:",
        "tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
-       "tog-uselivepreview": "Ð\9aоÑ\80иÑ\81Ñ\82и Ñ\82Ñ\80енÑ\83Ñ\82ни Ð¿Ñ\80еглед",
+       "tog-uselivepreview": "Ð\9fÑ\80икажи Ð¿Ñ\80еглед Ð±ÐµÐ· Ð¾Ñ\81вежаваÑ\9aа Ñ\81Ñ\82Ñ\80ане",
        "tog-forceeditsummary": "Упозори ме када не унесем опис измене",
        "tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
        "tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
        "tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
        "tog-watchlisthideliu": "Сакриј измене пријављених корисника са списка надгледања",
        "tog-watchlistreloadautomatically": "Аутоматски освежи списак надгледања кад год се филтер измени (потребан JavaScript)",
+       "tog-watchlistunwatchlinks": "Додај дугме за укључење/искључење надгледања свакој страни на списку надгледања (потребан Јаваскрипт за ефекат укључи/искључи)",
        "tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
        "tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
        "tog-watchlisthidecategorization": "Сакриј категоризацију страница",
        "december-date": "$1 децембар",
        "period-am": "преподне",
        "period-pm": "поподне",
-       "pagecategories": "{{PLURAL:$1|Категорија|Категорије}}",
+       "pagecategories": "{{PLURAL:$1|Категорија|Категорије|Категорија}}",
        "category_header": "Странице у категорији „$1“",
        "subcategories": "Поткатегорије",
        "category-media-header": "Датотеке у категорији „$1“",
        "sort-descending": "Поређај опадајуће",
        "sort-ascending": "Поређај растуће",
        "nstab-main": "Страница",
-       "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Корисник|Корисница}}",
+       "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Корисник|Корисница|Корисник}}",
        "nstab-media": "Медији",
        "nstab-special": "Посебно",
        "nstab-project": "Пројекат",
        "nosuchaction": "Нема такве радње",
        "nosuchactiontext": "Радња наведена у адреси није исправна.\nМожда сте погрешно написали адресу или сте пратили застарелу везу.\nМогуће је и да се ради о грешци у софтверу викија.",
        "nosuchspecialpage": "Нема такве посебне странице",
-       "nospecialpagetext": "<strong>Ð\9fоÑ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.</strong>\n\nСпиÑ\81ак Ñ\81виÑ\85 Ð¿Ð¾Ñ\81ебниÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81е [[Special:SpecialPages|овде]].",
+       "nospecialpagetext": "<strong>Ð\9fоÑ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ñ\98Ñ\83 Ñ\81Ñ\82е Ð·Ð°Ñ\85Ñ\82евали Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.</strong>\n\nСпиÑ\81ак Ñ\81виÑ\85 Ð¿Ð¾Ñ\81ебниÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81е Ð½Ð° â\80\9e[[Special:SpecialPages|{{int:specialpages}}]]â\80\9d.",
        "error": "Грешка",
        "databaseerror": "Грешка у бази података",
        "databaseerror-text": "Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.",
        "perfcachedts": "Следећи подаци су кеширани и последњи пут ажурирани на датум $2 у $3 ч. У кешу {{PLURAL:$4|је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
        "querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
        "viewsource": "Изворни код",
-       "viewsource-title": "Изворни текст странице $1",
+       "viewsource-title": "Изворни код за страницу $1",
        "actionthrottled": "Радња је успорена",
        "actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
        "protectedpagetext": "Ова страница је закључана за измене и друге радње.",
        "createacct-continue-submit": "Наставите отварање налога",
        "createacct-another-continue-submit": "Наставите отварање налога",
        "createacct-benefit-heading": "{{SITENAME}} је пројекат који стварају људи попут Вас.",
-       "createacct-benefit-body1": "{{PLURAL:$1|измена}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|активни корисник|активних корисника}}",
+       "createacct-benefit-body1": "{{PLURAL:$1|измена|измене|измена}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|страница|странице|страница}}",
+       "createacct-benefit-body3": "недавно {{PLURAL:$1|активни корисник|активна корисника|активних корисника}}",
        "badretype": "Унете лозинке се не поклапају.",
        "usernameinprogress": "Налог за ово корисничко име се већ прави, молимо сачекајте.",
        "userexists": "Корисничко име је заузето. Изаберите друго.",
        "italic_tip": "Искошени текст",
        "link_sample": "Наслов везе",
        "link_tip": "Унутрашња веза",
-       "extlink_sample": "http://www.primer.com наслов везе",
-       "extlink_tip": "СпоÑ\99на Ð²ÐµÐ·Ð° (Ñ\81 Ð¿Ñ\80едмеÑ\82ком http://)",
-       "headline_sample": "Ð\9dаÑ\81лов",
-       "headline_tip": "Поднаслов",
+       "extlink_sample": "http://www.example.com/ наслов везе",
+       "extlink_tip": "СпоÑ\99аÑ\88Ñ\9aа Ð²ÐµÐ·Ð° (Ñ\81 Ð¿Ñ\80еÑ\84икÑ\81ом http://)",
+       "headline_sample": "ТекÑ\81Ñ\82 Ð½Ð°Ñ\81лова",
+       "headline_tip": "Поднаслов (ниво 2)",
        "nowiki_sample": "Убаците необликован текст овде",
        "nowiki_tip": "Занемари вики обликовање",
        "image_sample": "Пример.jpg",
-       "image_tip": "УбаÑ\86ивање датотеке",
+       "image_tip": "УгÑ\80аÑ\92ивање датотеке",
        "media_sample": "Пример.ogg",
        "media_tip": "Веза",
        "sig_tip": "Ваш потпис са тренутним временом",
        "anonpreviewwarning": "<em>Нисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде.</em>",
        "missingsummary": "'''Подсетник:''' Нисте унели опис измене.\nАко поново кликнете на „$1”, Ваша измена ће бити сачувана без описа.",
        "selfredirect": "<strong>Упозорење:</strong> Преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
-       "missingcommenttext": "УнеÑ\81иÑ\82е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80 Ð¸Ñ\81под.",
+       "missingcommenttext": "Ð\9cолимо Ñ\83неÑ\81иÑ\82е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80.",
        "missingcommentheader": "<strong>Напомена:</strong> Нисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
        "summary-preview": "Преглед описа измене:",
        "subject-preview": "Преглед теме:",
        "cascadeprotectedwarning": "<strong>Упозорење:</strong> Ова страница је заштићена тако да је могу уређивати само корисници са [[Special:ListGroupRights|одређеним правима]] (администратори), јер је иста укључена у {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом” заштитом:",
        "titleprotectedwarning": "<strong>Упозорење: ову страницу могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].</strong>\nИспод су наведени последњи записи у дневнику:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
-       "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
+       "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом претпрегледу:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
        "template-protected": "(заштићено)",
        "template-semiprotected": "(полузаштићено)",
        "page_last": "последња",
        "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мала измена",
        "history-fieldset-title": "Преглед измена",
-       "history-show-deleted": "Само обрисане измјене",
+       "history-show-deleted": "Само обрисане измене",
        "histfirst": "најстарије",
        "histlast": "најновије",
        "historysize": "({{PLURAL:$1|1 бајт|$1 бајта|$1 бајтова}})",
        "showhideselectedversions": "Промени видљивост изабраних измена",
        "editundo": "поништи",
        "diff-empty": "(Нема разлике)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Ð\88една Ð¼ÐµÑ\92Ñ\83измена Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказана|$1 Ð¼ÐµÑ\92Ñ\83измене Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказано|$1 међуизмена истог корисника није приказано}})",
+       "diff-multi-sameuser": "({{PLURAL:$1|Ð\88една Ð¼ÐµÑ\92Ñ\83измена Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказана|$1 Ð¼ÐµÑ\92Ñ\83измене Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\81Ñ\83 Ð¿Ñ\80иказане|$1 међуизмена истог корисника није приказано}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Једна међуизмена|$1 међуизмене|$1 међуизмена}} од стране {{PLURAL:$2|још једног корисника није приказана|$2 корисника није приказано}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
        "difference-missing-revision": "Не могу да пронађем {{PLURAL:$2|једну измену|$2 измене|$2 измена}} од ове разлике ($1).\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете пронаћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневнику брисања].",
        "titlematches": "Наслов странице одговара",
        "textmatches": "Текст странице одговара",
        "notextmatches": "Ниједан текст странице не одговара",
-       "prevn": "претходних {{PLURAL:$1|$1}}",
-       "nextn": "следећих {{PLURAL:$1|$1}}",
+       "prevn": "{{PLURAL:$1|претходну $1|претходне $1|претходних $1}}",
+       "nextn": "{{PLURAL:$1|следећу $1|следеће $1|следећих $1}}",
        "prev-page": "претходна страница",
        "next-page": "следећа страница",
        "prevn-title": "$1 {{PLURAL:$1|претходни  резултат|претходна резултата|претходних резултата}}",
        "viewprevnext": "Погледај ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Постоји страница под називом „[[:$1]]”!</strong> {{PLURAL:$2|0=|Такође погледајте друге пронађене резултате претраге.}}",
        "searchmenu-new": "<strong>Направите страницу „[[:$1]]”!</strong> {{PLURAL:$2|0=|Такође погледајте резултат претраге.|Такође погледајте резултате претраге.}}",
-       "searchprofile-articles": "ЧланÑ\86и",
+       "searchprofile-articles": "СÑ\82Ñ\80аниÑ\86е Ñ\81а Ñ\81адÑ\80жаÑ\98ем",
        "searchprofile-images": "Датотеке",
        "searchprofile-everything": "Све",
        "searchprofile-advanced": "Напредно",
        "timezoneregion-europe": "Европа",
        "timezoneregion-indian": "Индијски океан",
        "timezoneregion-pacific": "Тихи океан",
-       "allowemail": "Омогући примање имејла од других корисника",
+       "allowemail": "Ð\9eмогÑ\83Ñ\9bи Ð¿Ñ\80имаÑ\9aе Ð¸Ð¼ÐµÑ\98лова Ð¾Ð´ Ð´Ñ\80Ñ\83гиÑ\85 ÐºÐ¾Ñ\80иÑ\81ника",
        "prefs-searchoptions": "Претрага",
        "prefs-namespaces": "Именски простори",
        "default": "подразумевано",
        "recentchanges-submit": "Прикажи",
        "rcfilters-tag-remove": "Обриши $1",
        "rcfilters-legend-heading": "<strong>Списак скраћеница:</strong>",
-       "rcfilters-other-review-tools": "<strong>Остали алати за преглед</strong>",
+       "rcfilters-other-review-tools": "Остали алати за преглед",
        "rcfilters-group-results-by-page": "Групиши резултате по страницама",
        "rcfilters-grouping-title": "Груписање",
        "rcfilters-activefilters": "Активни филтери",
        "rcfilters-advancedfilters": "Напредни филтери",
-       "rcfilters-limit-title": "Приказати измјена",
-       "rcfilters-limit-shownum": "Прикажи посљедњих $1 измјена",
+       "rcfilters-limit-title": "Приказати измена",
+       "rcfilters-limit-shownum": "Прикажи последњих $1 измена",
        "rcfilters-days-title": "Претходних неколико дана",
        "rcfilters-hours-title": "Претходних неколико сати",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|дан|дана}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сат|сата}}",
        "rcfilters-highlighted-filters-list": "Истакнуто: $1",
        "rcfilters-quickfilters": "Сачувани филтери",
-       "rcfilters-quickfilters-placeholder-title": "Ð\92езе Ñ\98оÑ\88 Ñ\83век Ð½Ð¸Ñ\81Ñ\83 Ñ\83памÑ\9bене",
-       "rcfilters-quickfilters-placeholder-description": "Ð\94а Ð±Ð¸Ñ\81Ñ\82е Ñ\81аÑ\87Ñ\83вали Ñ\81воÑ\98а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ñ\84илÑ\82еÑ\80а Ð¸ Ñ\83поÑ\82Ñ\80ебÑ\99авали Ð¸Ñ\85 ÐºÐ°Ñ\81ниÑ\98е, ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е Ð½Ð° Ð±Ñ\83кмаÑ\80к Ð¸ÐºÐ¾Ð½Ñ\83 Ñ\83 Ð¿Ð¾Ð´Ñ\80Ñ\83Ñ\87Ñ\98Ñ\83 Ð\90кÑ\82ивни Ñ\84илÑ\82еÑ\80и, испод.",
+       "rcfilters-quickfilters-placeholder-title": "Ð\88оÑ\88 Ñ\83век Ð½ÐµÐ¼Ð° Ñ\83памÑ\9bениÑ\85 Ñ\84илÑ\82еÑ\80а",
+       "rcfilters-quickfilters-placeholder-description": "Ð\94а Ð±Ð¸Ñ\81Ñ\82е Ñ\81аÑ\87Ñ\83вали Ñ\81воÑ\98а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ñ\84илÑ\82еÑ\80а Ð¸ Ñ\83поÑ\82Ñ\80ебÑ\99авали Ð¸Ñ\85 ÐºÐ°Ñ\81ниÑ\98е, ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е Ð½Ð° Ð¸ÐºÐ¾Ð½Ñ\83 Ð·Ð° Ð¾Ð·Ð½Ð°ÐºÑ\83 Ñ\83 Ð¿Ð¾Ð´Ñ\80Ñ\83Ñ\87Ñ\98Ñ\83 Ð°ÐºÑ\82ивниÑ\85 Ñ\84илÑ\82еÑ\80а, испод.",
        "rcfilters-savedqueries-defaultlabel": "Сачувани филтери",
        "rcfilters-savedqueries-rename": "Преименуј",
        "rcfilters-savedqueries-setdefault": "Постави као подразумевано",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Направи подразумевани филтер",
        "rcfilters-savedqueries-cancel-label": "Откажи",
        "rcfilters-savedqueries-add-new-title": "Сачувај тренутне поставке филтера",
+       "rcfilters-savedqueries-already-saved": "Ови филтери су већ упамћени",
        "rcfilters-restore-default-filters": "Враћање подразумеваних филтера",
        "rcfilters-clear-all-filters": "Уклони све филтере",
        "rcfilters-show-new-changes": "Погледајте најновије измене",
-       "rcfilters-search-placeholder": "Филтер скорашњих измјена (претражите или почните куцати)",
+       "rcfilters-search-placeholder": "Филтрирај скорашње измене (употребите мени или потражите име филтра)",
        "rcfilters-invalid-filter": "Невалидан филтер",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-filterlist-title": "Филтери",
        "rcfilters-filterlist-whatsthis": "Како ово функционише?",
-       "rcfilters-filterlist-feedbacklink": "Дајте повратне информације о новим (бета) филтерима",
+       "rcfilters-filterlist-feedbacklink": "Дајте повратне информације о новим (бета) алатима за филтрирање",
        "rcfilters-highlightbutton-title": "Истакни резултате",
        "rcfilters-highlightmenu-title": "Одабери боју",
        "rcfilters-highlightmenu-help": "Изаберите боју да бисте истакнули ово својство",
        "rcfilters-state-message-subset": "Овај филтер нема ефекта јер су његови резултати укључени са онима {{PLURAL:$2|следећег, ширег филтера|следећих, ширих филтера}} (покушајте са означавањем да бисте их распознали): $1",
        "rcfilters-state-message-fullcoverage": "Одабир свих филтера у групи је исто као и одабир ниједног, тако да овај филтер нема ефекта. Група укључује: $1",
        "rcfilters-filtergroup-authorship": "Ауторство доприноса",
-       "rcfilters-filter-editsbyself-label": "Ваше измјене",
+       "rcfilters-filter-editsbyself-label": "Ваше измене",
        "rcfilters-filter-editsbyself-description": "Ваши доприноси.",
-       "rcfilters-filter-editsbyother-label": "Измјене других",
-       "rcfilters-filter-editsbyother-description": "Све измјене осим Ваших.",
+       "rcfilters-filter-editsbyother-label": "Измене других",
+       "rcfilters-filter-editsbyother-description": "Све измене осим Ваших.",
        "rcfilters-filtergroup-userExpLevel": "Корисничка регистрација и искуство",
        "rcfilters-filter-user-experience-level-registered-label": "Регистровани",
        "rcfilters-filter-user-experience-level-registered-description": "Пријављени уредници.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Нерегистровани",
        "rcfilters-filter-user-experience-level-unregistered-description": "Уредници који нису пријављени.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новајлије",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Регистровани уредници са мање од 10 измјена и 4 дана активности.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Регистровани уредници са мање од 10 измена и 4 дана активности.",
        "rcfilters-filter-user-experience-level-learner-label": "Ученици",
        "rcfilters-filter-user-experience-level-learner-description": "Регистровани уредници са више искуства од „новајлија”, али мање од „искусних корисника”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Искусни корисници",
-       "rcfilters-filter-user-experience-level-experienced-description": "Регистровани уредници са више од 500 измјена и 30 дана активности.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Регистровани уредници са више од 500 измена и 30 дана активности.",
        "rcfilters-filtergroup-automated": "Аутоматизовани доприноси",
        "rcfilters-filter-bots-label": "Бот",
-       "rcfilters-filter-bots-description": "Измјене направљене аутоматизованим алатима.",
-       "rcfilters-filter-humans-label": "Човјек (није бот)",
-       "rcfilters-filter-humans-description": "Измјене које су направили људи-уредници.",
+       "rcfilters-filter-bots-description": "Измене направљене аутоматизованим алатима.",
+       "rcfilters-filter-humans-label": "Човек (није бот)",
+       "rcfilters-filter-humans-description": "Измене које су направили људи-уредници.",
        "rcfilters-filtergroup-reviewstatus": "Патролираност",
        "rcfilters-filter-patrolled-label": "Патролирано",
-       "rcfilters-filter-patrolled-description": "Измјене означене као патролиране.",
+       "rcfilters-filter-patrolled-description": "Измене означене као патролиране.",
        "rcfilters-filter-unpatrolled-label": "Непатролирано",
-       "rcfilters-filter-unpatrolled-description": "Измјене које нису означене као патролиране.",
+       "rcfilters-filter-unpatrolled-description": "Измене које нису означене као патролиране.",
        "rcfilters-filtergroup-significance": "Значај",
-       "rcfilters-filter-minor-label": "Мање измјене",
-       "rcfilters-filter-minor-description": "Измјене које је аутор означио као мање.",
-       "rcfilters-filter-major-label": "Не-мање измјене",
-       "rcfilters-filter-major-description": "Измјене које нису означене као мање.",
+       "rcfilters-filter-minor-label": "Мање измене",
+       "rcfilters-filter-minor-description": "Измене које је аутор означио као мање.",
+       "rcfilters-filter-major-label": "Не-мање измене",
+       "rcfilters-filter-major-description": "Измене које нису означене као мање.",
        "rcfilters-filtergroup-watchlist": "Странице на списку надгледања",
        "rcfilters-filter-watchlist-watched-label": "На списку надгледања",
-       "rcfilters-filter-watchlist-watched-description": "Измјене страница на Вашем списку надгледања",
-       "rcfilters-filter-watchlist-watchednew-label": "Нове измјене на списку надгледања",
-       "rcfilters-filter-watchlist-watchednew-description": "Измјене страница на списку надгледања које нисте посјетили од када су направљене измјене.",
+       "rcfilters-filter-watchlist-watched-description": "Измене страница на Вашем списку надгледања.",
+       "rcfilters-filter-watchlist-watchednew-label": "Нове измене на списку надгледања",
+       "rcfilters-filter-watchlist-watchednew-description": "Измене страница на списку надгледања које нисте посетили од када су направљене измене.",
        "rcfilters-filter-watchlist-notwatched-label": "Није на списку надгледања",
-       "rcfilters-filter-watchlist-notwatched-description": "Све осим измјена страница на Вашем списку надгледања.",
-       "rcfilters-filtergroup-changetype": "Тип измјене",
-       "rcfilters-filter-pageedits-label": "Измјене страница",
-       "rcfilters-filter-pageedits-description": "Измјене вики садржаја, расправа, описа категорија…",
+       "rcfilters-filter-watchlist-notwatched-description": "Све осим измена страница на Вашем списку надгледања.",
+       "rcfilters-filtergroup-watchlistactivity": "Стање на списку надгледања",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Непогледане измене",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Измене страница које нисте посетили од када су направљене измене.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Погледане измене",
+       "rcfilters-filter-watchlistactivity-seen-description": "Измене страница које сте посетили од када су направљене измене.",
+       "rcfilters-filtergroup-changetype": "Врста измене",
+       "rcfilters-filter-pageedits-label": "Измене страница",
+       "rcfilters-filter-pageedits-description": "Измене вики садржаја, расправа, описа категорија…",
        "rcfilters-filter-newpages-label": "Стварање страница",
-       "rcfilters-filter-newpages-description": "Измјене којима се стварају нове странице.",
-       "rcfilters-filter-categorization-label": "Измјене категорија",
+       "rcfilters-filter-newpages-description": "Измене којима се стварају нове странице.",
+       "rcfilters-filter-categorization-label": "Измене категорија",
        "rcfilters-filter-categorization-description": "Записи о страницама додатим или уклоњеним из категорија.",
-       "rcfilters-filter-logactions-label": "РадÑ\9aе Ð·Ð°Ð±Ð¸Ñ\99ежене у дневницима",
+       "rcfilters-filter-logactions-label": "РадÑ\9aе Ð·Ð°Ð±ÐµÐ»ежене у дневницима",
        "rcfilters-filter-logactions-description": "Административне акције, стварање налога, брисање страница, отпремања…",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
        "rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Овај филтер типа измене је у сукобу са филтером за „мање” измене. Одређени типови измена не могу да се означе као „мање”.",
-       "rcfilters-filtergroup-lastRevision": "Посљедње измјене",
-       "rcfilters-filter-lastrevision-label": "Посљедња измјена",
+       "rcfilters-filtergroup-lastRevision": "Последње измене",
+       "rcfilters-filter-lastrevision-label": "Последња измена",
        "rcfilters-filter-lastrevision-description": "Само најновија измена на страници.",
-       "rcfilters-filter-previousrevision-label": "Није посљедња измјена",
-       "rcfilters-filter-previousrevision-description": "Све измјене које нису „посљедње измјене”.",
+       "rcfilters-filter-previousrevision-label": "Није последња измена",
+       "rcfilters-filter-previousrevision-description": "Све измене које нису „последње измене”.",
        "rcfilters-filter-excluded": "Изостављено",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:није</strong> $1",
        "rcfilters-exclude-button-off": "Изостави означено",
-       "rcfilters-view-advanced-filters-label": "Напредни филтери",
-       "rcfilters-view-tags": "Означене измјене",
+       "rcfilters-exclude-button-on": "Изостави одабрано",
+       "rcfilters-view-tags": "Означене измене",
        "rcfilters-view-namespaces-tooltip": "Филтер резултата према именском простору",
-       "rcfilters-view-tags-tooltip": "Филтер резултата према ознаци измјене",
-       "rcfilters-view-tags-help-icon-tooltip": "Сазнајте више о означеним измјенама",
+       "rcfilters-view-tags-tooltip": "Филтрирање резултата према ознаци измене",
+       "rcfilters-view-return-to-default-tooltip": "Повратак на главни мени",
+       "rcfilters-view-tags-help-icon-tooltip": "Сазнајте више о означеним изменама",
        "rcfilters-liveupdates-button": "Ажурирања уживо",
+       "rcfilters-liveupdates-button-title-on": "Искључи ажурирања уживо",
+       "rcfilters-liveupdates-button-title-off": "Прикажи нове измене уживо",
        "rcfilters-watchlist-markseen-button": "Означи све измене као виђене",
-       "rcfilters-watchlist-showupdated": "Промјене на страницама које нисте посјетили од када је измјена извршена су <strong>подебљане</strong>, са испуњеним ознакама.",
+       "rcfilters-watchlist-edit-watchlist-button": "Промените Вашу листу надгледаних страница",
+       "rcfilters-watchlist-showupdated": "Измене на страницама које нисте посетили од када је измена извршена су <strong>подебљане</strong>, са испуњеним ознакама.",
        "rcfilters-preference-label": "Сакриј побољшану верзију скорашњих измена",
        "rcfilters-preference-help": "Поништава редизајн интерфејса из 2017. и све алатке додате тада и после.",
        "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
        "rclistfromreset": "Ресетуј одабир датума",
-       "rclistfrom": "Прикажи нове измене почев од $2 $3",
+       "rclistfrom": "Прикажи нове измене почев од $2, $3",
        "rcshowhideminor": "$1 мање измене",
        "rcshowhideminor-show": "Прикажи",
        "rcshowhideminor-hide": "Сакриј",
        "filehist-comment": "Коментар",
        "imagelinks": "Употреба датотеке",
        "linkstoimage": "{{PLURAL:$1|Следећа страница користи|$1 следеће странице користе|$1 следећих страница користи}} ову датотеку:",
-       "linkstoimage-more": "Ð\92иÑ\88е Ð¾Ð´ $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86е|странице|страница}} је повезано с овом датотеком.\nСледећи списак приказује само {{PLURAL:$1|прву страницу повезану|прве $1 странице повезане|првих $1 страница повезаних}} с овом датотеком.\nДоступан је и [[Special:WhatLinksHere/$2|потпуни списак]].",
+       "linkstoimage-more": "Ð\92иÑ\88е Ð¾Ð´ $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86а|странице|страница}} је повезано с овом датотеком.\nСледећи списак приказује само {{PLURAL:$1|прву страницу повезану|прве $1 странице повезане|првих $1 страница повезаних}} с овом датотеком.\nДоступан је и [[Special:WhatLinksHere/$2|потпуни списак]].",
        "nolinkstoimage": "Нема страница које користе ову датотеку.",
        "morelinkstoimage": "Погледајте [[Special:WhatLinksHere/$1|више веза]] до ове датотеке.",
        "linkstoimage-redirect": "$1 (преусмерење датотеке) $2",
        "nopagetitle": "Не постоји таква страница",
        "nopagetext": "Тражена страница не постоји.",
        "pager-newer-n": "{{PLURAL:$1|новији 1|новија $1|новијих $1}}",
-       "pager-older-n": "{{PLURAL:$1|старији 1|старијих $1}}",
+       "pager-older-n": "{{PLURAL:$1|Ñ\81Ñ\82аÑ\80иÑ\98и 1|Ñ\81Ñ\82аÑ\80иÑ\98а $1|Ñ\81Ñ\82аÑ\80иÑ\98иÑ\85 $1}}",
        "suppress": "Ревизија",
        "querypage-disabled": "Ова посебна страница је онемогућена ради побољшања перформанси.",
        "apihelp": "API помоћ",
        "undeleteviewlink": "погледај",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
-       "cannotundelete": "Враћање једне или свих ставник није успјело:\n$1",
+       "cannotundelete": "Враћање једне или свих није успело:\n$1",
        "undeletedpage": "<strong>Страница $1 је враћена</strong>\n\nПогледајте [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
        "undelete-header": "Погледајте [[Special:Log/delete|историјат брисања]] за недавно обрисане странице.",
        "undelete-search-title": "Претрага обрисаних страница",
        "whatlinkshere": "Шта води овде",
        "whatlinkshere-title": "Странице које су повезане са „$1”",
        "whatlinkshere-page": "Страница:",
-       "linkshere": "Следеће странице имају везу до '''[[:$1]]''':",
-       "nolinkshere": "Ниједна страница није повезана са: '''[[:$1]]'''.",
+       "linkshere": "Следеће странице имају везу до <strong>[[:$1]]</strong>:",
+       "nolinkshere": "Ниједна страница није повезана са: <strong>[[:$1]]</strong>.",
        "nolinkshere-ns": "Ниједна страница не води до '''[[:$1]]''' у изабраном именском простору.",
        "isredirect": "преусмерење",
        "istemplate": "укључивање",
        "isimage": "веза до датотеке",
-       "whatlinkshere-prev": "{{PLURAL:$1|претходни|претходних $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|следећи|следећих $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|пÑ\80еÑ\82Ñ\85одни|пÑ\80еÑ\82Ñ\85одна $1|пÑ\80еÑ\82Ñ\85одниÑ\85 $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|Ñ\81ледеÑ\9bи|Ñ\81ледеÑ\9bа $1|Ñ\81ледеÑ\9bиÑ\85 $1}}",
        "whatlinkshere-links": "← везе",
        "whatlinkshere-hideredirs": "$1 преусмерења",
        "whatlinkshere-hidetrans": "$1 укључивања",
        "tooltip-n-portal": "О пројекту, шта можете да радите и где да пронађете ствари",
        "tooltip-n-currentevents": "Сазнајте више о текућим догађајима",
        "tooltip-n-recentchanges": "Списак скорашњих измена на викију",
-       "tooltip-n-randompage": "Ð\9eÑ\82воÑ\80ите случајну страницу",
+       "tooltip-n-randompage": "УÑ\87иÑ\82аÑ\98те случајну страницу",
        "tooltip-n-help": "Место где можете да се информишете",
        "tooltip-t-whatlinkshere": "Списак свих страница које воде овде",
-       "tooltip-t-recentchangeslinked": "СкоÑ\80аÑ\88Ñ\9aе Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð° с овом страницом",
+       "tooltip-t-recentchangeslinked": "СкоÑ\80аÑ\88Ñ\9aе Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ðµ с овом страницом",
        "tooltip-feed-rss": "RSS довод ове странице",
        "tooltip-feed-atom": "Атом довод ове странице",
-       "tooltip-t-contributions": "Списак доприноса {{GENDER:$1|овог корисника|ове кориснице}}",
+       "tooltip-t-contributions": "Списак доприноса {{GENDER:$1|овог корисника|ове кориснице|овог корисника}}",
        "tooltip-t-emailuser": "Пошаљите имејл {{GENDER:$1|овом кориснику|овој корисници}}",
        "tooltip-t-info": "Више информација о овој страници",
        "tooltip-t-upload": "Отпреми датотеке",
        "tooltip-ca-nstab-media": "Погледајте мултимедијалну датотеку",
        "tooltip-ca-nstab-special": "Ово је посебна страница. Не можете је мењати.",
        "tooltip-ca-nstab-project": "Погледајте страницу пројекта",
-       "tooltip-ca-nstab-image": "Прикажи страну датотеке",
+       "tooltip-ca-nstab-image": "Прикажи страницу датотеке",
        "tooltip-ca-nstab-mediawiki": "Погледајте системску поруку",
        "tooltip-ca-nstab-template": "Погледајте шаблон",
        "tooltip-ca-nstab-help": "Погледајте страницу за помоћ",
        "tooltip-recreate": "Поново направите страницу иако је обрисана",
        "tooltip-upload": "Започните отпремање",
        "tooltip-rollback": "„Врати“ враћа измене последњег корисника једним кликом",
-       "tooltip-undo": "Ð\9fониÑ\88Ñ\82ава Ð¾Ð²Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð¸ Ð¾Ñ\82ваÑ\80а Ð¾Ð±Ñ\80азаÑ\86 Ð·Ð° Ñ\83Ñ\80еÑ\92иваÑ\9aе.",
+       "tooltip-undo": "Ð\9eпÑ\86иÑ\98а â\80\9eпониÑ\88Ñ\82иâ\80\9d Ð²Ñ\80аÑ\9bа Ð¾Ð²Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð¸ Ð¾Ñ\82ваÑ\80а Ð¾Ð±Ñ\80азаÑ\86 Ð·Ð° Ñ\83Ñ\80еÑ\92иваÑ\9aе Ñ\83 Ð¿Ñ\80еÑ\82пÑ\80егледном Ð¼Ð¾Ð´Ñ\83. Ð\9eмогÑ\83Ñ\9bава Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\9aе Ñ\80азлога Ñ\83 Ð¾Ð¿Ð¸Ñ\81Ñ\83 Ð¸Ð·Ð¼ÐµÐ½е.",
        "tooltip-preferences-save": "Сачувај поставке",
        "tooltip-summary": "Унесите кратак опис",
        "interlanguage-link-title": "$1 — $2",
        "pageinfo-display-title": "Наслов за приказ",
        "pageinfo-default-sort": "Подразумевани кључ сортирања",
        "pageinfo-length": "Дужина странице (у бајтовима)",
-       "pageinfo-article-id": "ИД странице",
+       "pageinfo-article-id": "ID странице",
        "pageinfo-language": "Језик садржаја странице",
        "pageinfo-content-model": "Модел садржаја странице",
        "pageinfo-content-model-change": "промени",
        "pageinfo-robot-index": "Дозвољено",
        "pageinfo-robot-noindex": "Није дозвољено",
        "pageinfo-watchers": "Број надгледача странице",
-       "pageinfo-visiting-watchers": "Број надгледача странице који су посјетили скорашње измјене",
-       "pageinfo-few-watchers": "Мање од $1 {{PLURAL:$1|пратиоца|пратилаца}}",
+       "pageinfo-visiting-watchers": "Број надгледача странице који су посетили скорашње измене",
+       "pageinfo-few-watchers": "Ð\9cаÑ\9aе Ð¾Ð´ $1 {{PLURAL:$1|пÑ\80аÑ\82иоÑ\86а|пÑ\80аÑ\82иоÑ\86а|пÑ\80аÑ\82илаÑ\86а}}",
        "pageinfo-redirects-name": "Број преусмерења на ову страницу",
        "pageinfo-subpages-name": "Подстранице ове странице",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|преусмерење|преусмерења|преусмерења}}; $3 {{PLURAL:$3|непреусмерење|непреусмерења|непреусмерења}})",
        "show-big-image": "Пуна величина",
        "show-big-image-preview": "Величина овог приказа: $1.",
        "show-big-image-preview-differ": "Величина $3 прегледа за ову $2 датотеку је $1.",
-       "show-big-image-other": "{{PLURAL:$2|Друга резолуција|Друге резолуције}}: $1.",
+       "show-big-image-other": "$2 {{PLURAL:$2|друга резолуција|друге резолуције|других резолуција}}: $1.",
        "show-big-image-size": "$1 × $2 пиксела",
        "file-info-gif-looped": "петља",
        "file-info-gif-frames": "$1 {{PLURAL:$1|кадар|кадра|кадрова}}",
        "variantname-shi-latn": "shi-Latn",
        "variantname-shi": "shi",
        "metadata": "Метаподаци",
-       "metadata-help": "Ова датотека садржи додатне податке који вероватно долазе од дигиталног фотоапарата или скенера.\nАко је првобитно стање датотеке промењено, могуће је да неки детаљи не описују измењену датотеку.",
+       "metadata-help": "Ова датотека садржи додатне податке, који вероватно долазе од дигиталног фотоапарата или скенера коришћеног за дигитализацију.\nАко је првобитно стање датотеке промењено, могуће је да неки детаљи не описују измењену датотеку у потпуности.",
        "metadata-expand": "Прикажи детаље",
        "metadata-collapse": "Сакриј детаље",
        "metadata-fields": "Поља за метаподатке слике наведена у овој поруци ће бити укључена на страници за слике када се скупи табела метаподатака. Остала поља ће бити сакривена по подразумеваним поставкама.\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",
        "version-libraries-license": "Лиценца",
        "version-libraries-description": "Опис",
        "version-libraries-authors": "Аутори",
-       "redirect": "Преусмерење на датотеку, корисника, страницу, измену или дневник",
+       "redirect": "Преусмерење на датотеку, корисника, страницу, измену или дневник (ID)",
+       "redirect-summary": "Ова специјална страница преусмерава до датотеке (са датим именом датотеке), странице (са датим ID-ом измене или ID-ом странице), корисничке странице (са датим нумеричким корисничким ID-ом), или уноса у дневнику (са датим дневничким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Иди",
        "redirect-lookup": "Тип вредности:",
        "redirect-value": "Вредност:",
        "tags": "Важеће ознаке измена",
        "tag-filter": "Филтер за [[Special:Tags|ознаке]]:",
        "tag-filter-submit": "Филтрирај",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ознака|Ознаке}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|$1 {{PLURAL:$1|ознака|ознаке|ознака}}]]: $2)",
        "tag-mw-contentmodelchange": "промена модела садржаја",
+       "tag-mw-contentmodelchange-description": "Измене које мењају модел садржаја странице",
        "tags-title": "Ознаке",
        "tags-intro": "На овој страници је наведен списак ознака с којима програм може да означи измене и његово значење.",
        "tags-tag": "Назив ознаке",
        "htmlform-title-not-exists": "$1 не постоји.",
        "htmlform-user-not-exists": "<strong>$1</strong> не постоји.",
        "htmlform-user-not-valid": "<strong>$1</strong> није исправно корисничко име.",
-       "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
+       "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала|обрисао}} страницу $3",
        "logentry-delete-delete_redir": "$1 је {{GENDER:$2|обрисао|обрисала}} преусмерење $3 преписивањем",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3 ($4)",
        "logentry-delete-restore-nocount": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
index cf4abf2..01f2e83 100644 (file)
@@ -26,7 +26,8 @@
                        "Mega Aleksandar",
                        "Asmen",
                        "Obsuser",
-                       "Zoranzoki21"
+                       "Zoranzoki21",
+                       "Prevodim"
                ]
        },
        "tog-underline": "Podvlačenje veza:",
        "page_last": "poslednja",
        "histlegend": "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika s trenutnom izmenom, <strong>({{int:last}})</strong> = razlika s prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> = mala izmena",
        "history-fieldset-title": "Pregled izmena",
-       "history-show-deleted": "Samo obrisane",
+       "history-show-deleted": "Samo obrisane izmene",
        "histfirst": "najstarije",
        "histlast": "najnovije",
        "historysize": "({{PLURAL:$1|1 bajt|$1 bajta|$1 bajtova}})",
        "timezoneregion-europe": "Evropa",
        "timezoneregion-indian": "Indijski okean",
        "timezoneregion-pacific": "Tihi okean",
-       "allowemail": "Omogući primanje imejla od drugih korisnika",
+       "allowemail": "Omogući primanje imejlova od drugih korisnika",
        "prefs-searchoptions": "Pretraga",
        "prefs-namespaces": "Imenski prostori",
        "default": "podrazumevano",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "recentchanges-submit": "Prikaži",
        "rcfilters-legend-heading": "<strong>Spisak skraćenica:</strong>",
-       "rcfilters-other-review-tools": "<strong>Ostali alati za pregled:</strong>",
+       "rcfilters-other-review-tools": "Ostali alati za pregled:",
        "rcfilters-activefilters": "Aktivni filteri",
        "rcfilters-advancedfilters": "Napredni filteri",
-       "rcfilters-limit-title": "Prikazati izmjena",
+       "rcfilters-limit-title": "Prikazati izmena",
        "rcfilters-limit-shownum": "Prikaži posljednjih $1 izmjena",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dana|dana}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|sat|sata}}",
+       "rcfilters-quickfilters-placeholder-description": "Da biste sačuvali svoja podešavanja filtera i upotrebljavali ih kasnije, kliknite na ikonu za oznaku u području aktivnih filtera, ispod.",
        "rcfilters-search-placeholder": "Filter skorašnjih izmjena (pretražite ili počnite kucati)",
        "rcfilters-filtergroup-authorship": "Autorstvo doprinosa",
+       "rcfilters-filter-editsbyself-label": "Vaše izmene",
+       "rcfilters-filter-editsbyother-label": "Izmene drugih",
+       "rcfilters-filter-editsbyother-description": "Sve izmene osim Vaših.",
        "rcfilters-filter-user-experience-level-registered-label": "Registrovani",
        "rcfilters-filter-user-experience-level-registered-description": "Prijavljeni urednici.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Neregistrovani",
        "rcfilters-filter-user-experience-level-learner-label": "Učenici",
        "rcfilters-filter-user-experience-level-learner-description": "Više dana aktivnosti i izmjena od „novajlija”, ali manje od „iskusnih korisnika”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Iskusni korisnici",
-       "rcfilters-filter-user-experience-level-experienced-description": "Preko 30 dana aktivnosti i 500 izmjena.",
-       "rcfilters-filter-humans-label": "Čovjek (nije bot)",
+       "rcfilters-filter-user-experience-level-experienced-description": "Registrovani urednici sa više od 500 izmena i 30 dana aktivnosti.",
+       "rcfilters-filter-bots-description": "Izmene napravljene automatizovanim alatima.",
+       "rcfilters-filter-humans-label": "Čovek (nije bot)",
+       "rcfilters-filter-humans-description": "Izmene koje su napravili ljudi-urednici.",
        "rcfilters-filter-patrolled-label": "Patrolirano",
+       "rcfilters-filter-patrolled-description": "Izmene označene kao patrolirane.",
        "rcfilters-filter-unpatrolled-label": "Nepatrolirano",
-       "rcfilters-filter-minor-label": "Manje izmjene",
-       "rcfilters-filter-pageedits-label": "Izmjene stranica",
-       "rcfilters-filter-pageedits-description": "Izmjene viki sadržaja, rasprava, opisa kategorija...",
+       "rcfilters-filter-unpatrolled-description": "Izmene koje nisu označene kao patrolirane.",
+       "rcfilters-filter-minor-label": "Manje izmene",
+       "rcfilters-filter-minor-description": "Izmene koje je autor označio kao manje.",
+       "rcfilters-filter-major-label": "Ne-manje izmene",
+       "rcfilters-filter-major-description": "Izmene koje nisu označene kao manje.",
+       "rcfilters-filter-watchlist-watched-description": "Izmene stranica koje su na Vašem spisku nadgledanja.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nove izmene na spisku nadgledanja",
+       "rcfilters-filter-watchlist-watchednew-description": "Izmene stranica na spisku nadgledanja koje niste posetili od kada su napravljene izmene.",
+       "rcfilters-filter-watchlist-notwatched-description": "Sve osim izmena stranica na Vašem spisku nadgledanja.",
+       "rcfilters-filtergroup-changetype": "Vrsta izmene",
+       "rcfilters-filter-pageedits-label": "Izmene stranica",
+       "rcfilters-filter-pageedits-description": "Izmene viki sadržaja, rasprava, opisa kategorija...",
        "rcfilters-filter-newpages-label": "Stvaranje stranica",
-       "rcfilters-filter-newpages-description": "Izmjene kojima se stvaraju nove stranice.",
-       "rcfilters-filter-logactions-label": "Radnje zabilježene u dnevnicima",
-       "rcfilters-view-advanced-filters-label": "Napredni filteri",
+       "rcfilters-filter-newpages-description": "Izmene kojima se stvaraju nove stranice.",
+       "rcfilters-filter-categorization-label": "Izmene kategorija",
+       "rcfilters-filter-logactions-label": "Radnje zabeležene u dnevnicima",
+       "rcfilters-filtergroup-lastRevision": "Poslednje izmene",
+       "rcfilters-filter-lastrevision-label": "Poslednja izmena",
+       "rcfilters-filter-previousrevision-label": "Nije poslednja izmena",
+       "rcfilters-filter-previousrevision-description": "Sve izmene koje nisu „poslednje izmene”.",
+       "rcfilters-view-tags": "Označene izmene",
        "rcfilters-view-namespaces-tooltip": "Filter rezultata prema imenskom prostoru",
-       "rcfilters-view-tags-tooltip": "Filter rezultata prema oznaci izmjene",
+       "rcfilters-view-tags-tooltip": "Filtriranje rezultata prema oznaci izmene",
+       "rcfilters-view-tags-help-icon-tooltip": "Saznajte više o označenim izmenama",
        "rcfilters-liveupdates-button": "Ažuriranja uživo",
        "rcfilters-watchlist-markseen-button": "Označi sve izmene kao viđene",
+       "rcfilters-watchlist-showupdated": "Izmene na stranicama koje niste posetili od kada je izmena izvršena su <strong>podebljane</strong>, sa ispunjenim oznakama.",
        "rcfilters-preference-label": "Sakrij poboljšanu verziju skorašnjih izmena",
        "rcfilters-preference-help": "Poništava redizajn interfejsa iz 2017. i sve alatke dodate tada i posle.",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmena|su izmene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "cannotundelete": "Vraćanje nije uspelo:\n$1",
+       "cannotundelete": "Vraćanje jedne ili svih nije uspelo:\n$1",
        "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|dnevnik brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
        "undelete-header": "Pogledajte [[Special:Log/delete|istorijat brisanja]] za nedavno obrisane stranice.",
        "undelete-search-title": "Pretraga obrisanih stranica",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
        "pageinfo-watchers": "Broj nadgledača stranicе",
-       "pageinfo-visiting-watchers": "Broj nadgledača stranice koji su posjetili skorašnje izmjene",
+       "pageinfo-visiting-watchers": "Broj nadgledača stranice koji su posetili skorašnje izmene",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
        "pageinfo-subpages-name": "Podstranice ove stranice",
        "tag-filter": "Filter za [[Special:Tags|oznake]]:",
        "tag-filter-submit": "Filtriraj",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznake}}]]: $2)",
+       "tag-mw-contentmodelchange-description": "Izmene koje menjaju model sadržaja stranice",
        "tags-title": "Oznake",
        "tags-intro": "Na ovoj stranici je naveden spisak oznaka s kojima program može da označi izmene i njegovo značenje.",
        "tags-tag": "Naziv oznake",
        "logentry-protect-modify": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4",
        "logentry-protect-modify-cascade": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4 [prenosiva zaštita]",
        "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$6|$3}} iz $4 u $5",
-       "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
+       "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
        "logentry-upload-upload": "$1 je {{GENDER:$2|otpremio|otpremila}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|otpremio|otpremila}} novu verziju $3",
index 0e3fcc0..762538a 100644 (file)
        "editundo": "bolaykeun",
        "diff-empty": "(taya bédana)",
        "diff-multi-sameuser": "({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya pamaké nu sarua henteu ditémbongkeun)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya leuwih ti {{PLURAL:$2|hiji pamaké|$2 pamaké}} teu ditémbongkeun)",
        "diff-multi-manyusers": "({{PLURAL:$1|Hiji révisi antara|$1 révisi antara}} karya leuwih ti {{PLURAL:$2|pamaké|pamaké}} teu ditémbongkeun)",
        "searchresults": "Hasil maluruh",
        "searchresults-title": "Hasil nyusud \"$1\"",
        "recentchanges-submit": "Témbongkeun",
        "rcfilters-tag-remove": "Pupus '$1'",
        "rcfilters-legend-heading": "<strong>Daptar singgetan:</strong>",
-       "rcfilters-other-review-tools": "<strong>Pakakas paninjauan lianna</strong>",
+       "rcfilters-other-review-tools": "Pakakas paninjauan lianna",
        "rcfilters-group-results-by-page": "Gorombolkeun hasil dumasar kaca",
        "rcfilters-grouping-title": "Gorombolkeun",
        "rcfilters-activefilters": "Panyaringan aktif",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:lain</strong> $1",
        "rcfilters-exclude-button-off": "Iwalkeun nu dipilih",
        "rcfilters-exclude-button-on": "Teu kaasup nu dipilih",
-       "rcfilters-view-advanced-filters-label": "Panyaringan leuwih jero",
        "rcfilters-view-tags": "Éditan ditandaan",
        "rcfilters-view-namespaces-tooltip": "Saring hasil dumasar ngarangspasi",
        "rcfilters-view-tags-tooltip": "Saring hasil maké tag éditan",
        "rcfilters-view-return-to-default-tooltip": "Balik ka menu panyaringan utama",
+       "rcfilters-view-tags-help-icon-tooltip": "Teuleuman ngeunaan éditan maké tag",
        "rcfilters-liveupdates-button": "Parobahan langsung",
        "rcfilters-liveupdates-button-title-on": "Pareuman parobahan langsung",
        "rcfilters-liveupdates-button-title-off": "Témbongkeun parobahan anyar nalika éta parobahan prung",
        "uploadstash-refresh": "Nyegerken deui daptar berkas",
        "uploadstash-thumbnail": "tempo miniatur",
        "uploadstash-exception": "Teu bisa nyimpen unjalan di panyimpenan ($1): \"$2\".",
+       "uploadstash-bad-path": "Euweuh galur",
+       "uploadstash-bad-path-invalid": "Galur teu sah.",
+       "uploadstash-bad-path-unknown-type": "Jinis teu dipikanyaho \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Ngaran liwatan teu dipakawawuh.",
+       "uploadstash-file-not-found-no-thumb": "Teu bisa nyomot tampilan saliwat.",
+       "uploadstash-no-extension": "Éksténsi nyamos.",
+       "uploadstash-zero-length": "Berkas mangrupa nol panjang.",
        "invalid-chunk-offset": "Opsét potongan teu valid",
        "img-auth-accessdenied": "Aksés ditolak",
        "img-auth-badtitle": "Teu bisa nyieun judul nu valid tina \"$1\".",
        "filehist-comment": "Kamandang",
        "imagelinks": "Pamakéan berkas",
        "linkstoimage": "Kaca ieu  {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
+       "linkstoimage-more": "Leuwih ti $1 {{PLURAL:$1|kaca nutumbu|kaca nutumbu}} ka ieu berkas.\nBéréndélan di handap némbongkeun {{PLURAL:$1|tutumbu kaca kahiji|$1 tutumbu kaca}} ka ieu berkas hungkul.\n[[Special:WhatLinksHere/$2|Béréndélan lengkepna]] aya.",
        "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
        "morelinkstoimage": "Témbong [[Special:WhatLinksHere/$1|tutumbu lianna]] ka ieu berkas.",
        "linkstoimage-redirect": "$1 (pangalihan berkas) $2",
        "listusers-blocked": "(diblokir)",
        "activeusers": "Béréndélan pamaké nu getol",
        "activeusers-intro": "Ieu béréndélan kontributor anu geus ngoprék $1 {{PLURAL:$1|poé|poé}} panungtung.",
-       "activeusers-count": "$1 {{PLURAL:$1|aktivitas}} dina {{PLURAL:$3|1 hari|$3 hari}} panungtung",
+       "activeusers-count": "$1 {{PLURAL:$1|aktivitas}} dina {{PLURAL:$3|sapoé|$3 poé}} panungtung",
        "activeusers-from": "Témbongkeun kontributor dimimitian ku:",
        "activeusers-groups": "Témbongkeun pamaké nu kaasup gorombolan:",
        "activeusers-excludegroups": "Samunikeun pamaké nu kaasup gorombolan:",
        "ipb_cant_unblock": "Éror: ID peungpeuk $1 teu kapanggih. Sigana mah geus dibuka.",
        "ip_range_invalid": "Angka IP teu bener.",
        "ip_range_toolarge": "Panteng blok leuwih badag tibatan /$1 teu diheugbaékeun.",
+       "ip_range_toolow": "Panteng UP sacara éféktif teu diidinan.",
        "proxyblocker": "Pameungpeuk proxy",
        "proxyblockreason": "Alamat IP anjeun dipeungpeuk sabab mangrupa proxy muka. Mangga tepungan ''Internet service provider'' atanapi ''tech support'' anjeun, béjakeun masalah serius ieu.",
        "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL anu dipaké ku {{SITENAME}}.",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|mupus}} panangtayungan ti $3",
        "logentry-protect-protect": "$1 {{GENDER:$2|ditangtayungan}} $3 $4",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngamuat}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ngunggah}} $3 vérsi anyar",
        "logentry-upload-revert": "$1 {{GENDER:$2|diunjal}} $3",
        "log-name-managetags": "Log pangokolaan tag",
        "logentry-managetags-create": "$1 {{GENDER:$2|nyieun}} tag \"$4\"",
index 7c143a4..0a647ad 100644 (file)
@@ -88,7 +88,7 @@
        "tog-hidecategorization": "Dölj kategorisering av sidor",
        "tog-extendwatchlist": "Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste",
        "tog-usenewrc": "Gruppera ändringar efter sida i senaste ändringar och bevakningslistan",
-       "tog-numberheadings": "Automatiskt numrerade rubriker",
+       "tog-numberheadings": "Numrera rubriker automatiskt",
        "tog-showtoolbar": "Visa redigeringsverktygsraden",
        "tog-editondblclick": "Redigera sidor med dubbelklick",
        "tog-editsectiononrightclick": "Aktivera redigering av avsnitt genom högerklick på underrubriker",
        "tog-diffonly": "Visa inte sidinnehåll under diffar",
        "tog-showhiddencats": "Visa dolda kategorier",
        "tog-norollbackdiff": "Visa inte diff efter tillbakarullning",
-       "tog-useeditwarning": "Varna mig om jag lämnar en redigeringssida där jag gjort ändringar men inte sparat.",
+       "tog-useeditwarning": "Varna mig om jag lämnar en redigeringssida med osparade ändringar",
        "tog-prefershttps": "Använd alltid en säker anslutning medan jag är inloggad",
        "underline-always": "Alltid",
        "underline-never": "Aldrig",
        "december-gen": "december",
        "jan": "jan",
        "feb": "feb",
-       "mar": "mars",
+       "mar": "mar",
        "apr": "apr",
        "may": "maj",
-       "jun": "juni",
-       "jul": "juli",
+       "jun": "jun",
+       "jul": "jul",
        "aug": "aug",
-       "sep": "sept",
+       "sep": "sep",
        "oct": "okt",
        "nov": "nov",
        "dec": "dec",
        "category_header": "Sidor i kategorin \"$1\"",
        "subcategories": "Underkategorier",
        "category-media-header": "Media i kategorin \"$1\"",
-       "category-empty": "''Den här kategorin innehåller just nu inga sidor eller filer.''",
+       "category-empty": "<em>Den här kategorin innehåller just nu inga sidor eller filer.</em>",
        "hidden-categories": "{{PLURAL:$1|Dold kategori|Dolda kategorier}}",
        "hidden-category-category": "Dolda kategorier",
        "category-subcat-count": "{{PLURAL:$2|Denna kategori har endast följande underkategori.|Denna kategori har följande {{PLURAL:$1|underkategori|$1 underkategorier}} (av totalt $2).}}",
        "tagline": "Från {{SITENAME}}",
        "help": "Hjälp",
        "search": "Sök",
-       "search-ignored-headings": "#<!-- lämna denna rad precis som den är --> <pre>\n# Rubriker som kommer att ignoreras av sökningen.\n# Förändringar av detta kommer att gälla så fort sidan med rubriken är indexerad.\n# Du kan tvinga sidan att indexeras om genom att göra en null-redigering.\n# Syntaxen är som följer:\n#  * Allt från ett \"#\" tecken till slutet av raden är en kommentar.\n#  * Varje icke-tom rad är den exakta titeln som ska ignoreras, shiftläge och allt.\nReferenser\nExterna länkar\nSe även\n #</pre> <!-- lämna denna rad precis som den är -->",
+       "search-ignored-headings": "#<!-- lämna denna rad precis som den är --> <pre>\n# Rubriker som kommer att ignoreras av sökningen.\n# Förändringar av detta kommer att gälla så fort sidan med rubriken är indexerad.\n# Du kan tvinga sidan att indexeras om genom att göra en null-redigering.\n# Syntaxen är som följer:\n#  * Allt från ett \"#\" tecken till slutet av raden är en kommentar.\n#  * Varje icke-tom rad är den exakta titeln som ska ignoreras, skiftläge och allt.\nReferenser\nExterna länkar\nSe även\n #</pre> <!-- lämna denna rad precis som den är -->",
        "searchbutton": "Sök",
        "go": "Gå till",
        "searcharticle": "Gå till",
        "protect_change": "ändra",
        "unprotect": "Ändra skydd",
        "newpage": "Ny sida",
-       "talkpagelinktext": "Diskussion",
+       "talkpagelinktext": "diskussion",
        "specialpage": "Specialsida",
        "personaltools": "Personliga verktyg",
        "talk": "Diskussion",
        "view-pool-error": "Tyvärr är servrarna överbelastade för tillfället.\nFör många användare försöker visa denna sida.\nVänta en liten stund och försök igen lite senare.\n\n$1",
        "generic-pool-error": "Tyvärr är servrarna överbelastade för tillfället.\nFör många användare försöker visa denna resurs.\nVänta en liten stund innan du försöker komma åt resursen igen.",
        "pool-timeout": "Timeout i väntan på låsning",
-       "pool-queuefull": "Kön är full",
+       "pool-queuefull": "Pool-kön är full",
        "pool-errorunknown": "Okänt fel",
        "pool-servererror": "Pool counter-tjänsten är inte tillgänglig ($1).",
        "poolcounter-usage-error": "Användningsfel: $1",
        "privacy": "Integritetspolicy",
        "privacypage": "Project:Integritetspolicy",
        "badaccess": "Behörighetsfel",
-       "badaccess-group0": "Du har inte behörighet att utföra den handling du begärt.",
-       "badaccess-groups": "Den handling du har begärt kan enbart utföras av användare i {{PLURAL:$2|gruppen|en av grupperna}}: $1.",
+       "badaccess-group0": "Du har inte behörighet att utföra den åtgärd du begärt.",
+       "badaccess-groups": "Den åtgärd du har begärt kan enbart utföras av användare i {{PLURAL:$2|gruppen|en av grupperna}}: $1.",
        "versionrequired": "Version $1 av MediaWiki krävs",
-       "versionrequiredtext": "Version $1 av MediaWiki är nödvändig för att använda denna sida. Se [[Special:Version|versionssidan]].",
+       "versionrequiredtext": "Version $1 av MediaWiki krävs för att använda denna sida. Se [[Special:Version|versionssidan]].",
        "ok": "OK",
        "retrievedfrom": "Hämtad från \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Du har}} $1 ($2).",
        "nstab-category": "Kategori",
        "mainpage-nstab": "Huvudsida",
        "nosuchaction": "Funktionen finns inte",
-       "nosuchactiontext": "Den handling som specificerats av webbadressen är ogiltig.\nDu kan ha stavat webbadressen fel, eller följt en felaktig länk.\nDet kan även bero på en bugg i mjukvaran som används på {{SITENAME}}.",
+       "nosuchactiontext": "Den åtgärd som specificerats av webbadressen är ogiltig.\nDu kan ha stavat webbadressen fel, eller följt en felaktig länk.\nDet kan även bero på en bugg i mjukvaran som används på {{SITENAME}}.",
        "nosuchspecialpage": "Någon sådan specialsida finns inte",
        "nospecialpagetext": "<strong>Du har begärt en specialsida som inte finns.</strong>\n\nI [[Special:SpecialPages|listan över specialsidor]] kan du se vilka specialsidor som finns.",
        "error": "Fel",
        "directorynotreadableerror": "Katalog \"$1\" är inte läsbar.",
        "filenotfound": "Kunde inte hitta filen \"$1\".",
        "unexpected": "Oväntat värde: \"$1\"=\"$2\".",
-       "formerror": "Fel: Kunde inte sända formulär",
+       "formerror": "Fel: Kunde inte sända formulär.",
        "badarticleerror": "Den åtgärden kan inte utföras på den här sidan.",
        "cannotdelete": "Sidan eller filen \"$1\" kunde inte raderas.\nDen kanske redan har raderats av någon annan.",
        "cannotdelete-title": "Sidan \"$1\" kan inte raderas",
        "title-invalid-characters": "Den begärda sidtiteln innehåller ogiltiga tecken: \"$1\".",
        "title-invalid-relative": "Titeln har relativa sökvägar. Relativa sidtitlar (./, ../) är ogiltiga då de oftast är onåbara när de hanteras av en användares webbläsare.",
        "title-invalid-magic-tilde": "Den begärda sidans titel innehåller ogiltiga magiska tildesekvenser (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Den begärda sidtiteln är för lång. Det får inte vara längre än $1 {{PLURAL:$1|byte}} i UTF-8-kodning.",
+       "title-invalid-too-long": "Den begärda sidtiteln är för lång. Den får inte vara längre än $1 {{PLURAL:$1|byte}} i UTF-8-kodning.",
        "title-invalid-leading-colon": "Den begärda sidans titel innehåller ett ogiltigt kolon i början.",
        "perfcached": "Följande data är cachad och är möjligtvis inte helt uppdaterad. Maximalt {{PLURAL:$1|ett|$1}} resultat finns {{PLURAL:$1|tillgängligt|tillgängliga}} i cachen.",
        "perfcachedts": "Följande data är cachad och uppdaterades senast $1. Maximalt {{PLURAL:$4|ett|$4}} resultat finns {{PLURAL:$4|tillgängligt|tillgängliga}} i cachen.",
        "protectedpagetext": "Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.",
        "viewsourcetext": "Du kan se och kopiera denna sidas källtext.",
        "viewyourtext": "Du kan se och kopiera källtexten för <strong>dina redigeringar</strong> av denna sida.",
-       "protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [https://translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
+       "protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikier, var god använd [https://translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "editinginterface": "<strong>Varning:</strong> Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka användargränssnittets utseende för andra användare på denna wiki.",
-       "translateinterface": "För att lägga till eller ändra översättningar för alla wikis, använd [https://translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
+       "translateinterface": "För att lägga till eller ändra översättningar för alla wikier, använd [https://translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "cascadeprotected": "Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med \"kaskaderande\"-inställningen aktiverad:\n$2",
-       "namespaceprotected": "Du har inte behörighet att redigera sidor i namnrymden '''$1'''.",
+       "namespaceprotected": "Du har inte behörighet att redigera sidor i namnrymden <strong>$1</strong>.",
        "customcssprotected": "Du har inte behörighet att redigera denna CSS-sida eftersom den innehåller en annan användares personliga inställningar.",
        "customjsprotected": "Du har inte behörighet att redigera denna JavaScript-sida eftersom den innehåller en annan användares personliga inställningar.",
-       "mycustomcssprotected": "Du har inte rättigheten att redigera denna CSS-sida.",
-       "mycustomjsprotected": "Du har inte rättigheten att redigera denna JavaScript-sida.",
+       "mycustomcssprotected": "Du har inte behörighet att redigera denna CSS-sida.",
+       "mycustomjsprotected": "Du har inte behörighet att redigera denna JavaScript-sida.",
        "myprivateinfoprotected": "Du har inte behörighet att redigera din privata information.",
        "mypreferencesprotected": "Du har inte behörighet att redigera dina inställningar.",
        "ns-specialprotected": "Specialsidor kan inte redigeras.",
        "exception-nologin": "Inte inloggad",
        "exception-nologin-text": "Var god logga in för att komma åt denna sida eller åtgärd.",
        "exception-nologin-text-manual": "Var god $1 för att få tillgång till denna sida eller åtgärd.",
-       "virus-badscanner": "Dålig konfigurering: okänd virusskanner: ''$1''",
+       "virus-badscanner": "Dålig konfigurering: Okänd virusskanner: <em>$1</em>",
        "virus-scanfailed": "skanning misslyckades (kod $1)",
        "virus-unknownscanner": "okänt antivirusprogram:",
        "logouttext": "<strong>Du är nu utloggad.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.",
        "userlogin-yourpassword": "Lösenord",
        "userlogin-yourpassword-ph": "Ange ditt lösenord",
        "createacct-yourpassword-ph": "Ange ett lösenord",
-       "yourpasswordagain": "Upprepa lösenord",
+       "yourpasswordagain": "Upprepa lösenord:",
        "createacct-yourpasswordagain": "Bekräfta lösenordet",
        "createacct-yourpasswordagain-ph": "Ange lösenordet igen",
        "userlogin-remembermypassword": "Håll mig inloggad",
        "cannotloginnow-text": "Det går inte att logga in med $1.",
        "cannotcreateaccount-title": "Kan inte skapa konton",
        "cannotcreateaccount-text": "Direkt kontoregistrering är inte aktiverat på denna wiki.",
-       "yourdomainname": "Din domän",
+       "yourdomainname": "Din domän:",
        "password-change-forbidden": "Du kan inte ändra lösenord på denna wiki.",
-       "externaldberror": "Antingen inträffade autentiseringsproblem med en extern databas, eller så får du inte uppdatera ditt externa konto.",
+       "externaldberror": "Antingen inträffade autentiseringsproblem med en databas, eller så får du inte uppdatera ditt externa konto.",
        "login": "Logga in",
        "login-security": "Verifiera din identitet",
        "nav-login-createaccount": "Logga in / skapa konto",
        "userlogin-createanother": "Skapa ett annat konto",
        "createacct-emailrequired": "E-postadress",
        "createacct-emailoptional": "E-postadress (valfritt)",
-       "createacct-email-ph": "Bekräfta din e-postadress",
+       "createacct-email-ph": "Ange din e-postadress",
        "createacct-another-email-ph": "Skriv in e-postadress",
        "createaccountmail": "Använd ett tillfälligt slumpvis valt lösenord och skicka det till den angivna e-postadressen",
        "createaccountmail-help": "Kan användas för att skapa ett konto åt en annan person utan att kunna lösenordet.",
        "createacct-loginerror": "Kontot skapades men du kunde inte loggas in automatiskt. Var god [[Special:UserLogin|logga in manuellt]].",
        "noname": "Du har angett ett ogiltigt användarnamn.",
        "loginsuccesstitle": "Inloggad",
-       "loginsuccess": "'''Du är nu inloggad på {{SITENAME}} som \"$1\".'''",
+       "loginsuccess": "<strong>Du är nu inloggad på {{SITENAME}} som \"$1\".</strong>",
        "nosuchuser": "Det finns ingen användare med namnet \"$1\".\nAnvändarnamn är skiftlägeskänsliga.\nKontrollera din stavning, eller [[Special:CreateAccount|skapa ett nytt konto]].",
        "nosuchusershort": "Det finns ingen användare som heter \"$1\". Kontrollera att du stavat rätt.",
        "nouserspecified": "Du måste ange ett användarnamn.",
        "login-userblocked": "Denna användare är blockerad. Inloggning är inte tillåtet.",
        "wrongpassword": "Lösenordet du angav är felaktigt. Försök igen.",
-       "wrongpasswordempty": "Lösenordet som angavs var blankt. Var god försök igen.",
+       "wrongpasswordempty": "Lösenordet som angavs var tomt. Var god försök igen.",
        "passwordtooshort": "Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.",
        "passwordtoolong": "Lösenord kan inte vara längre än {{PLURAL:$1|1 tecken|$1 tecken}}.",
        "passwordtoopopular": "Vanliga lösenord kan inte användas. Välj ett mer unikt lösenord.",
        "password-login-forbidden": "Användningen av dessa användarnamn och lösenord har förbjudits.",
        "mailmypassword": "Återställ lösenord",
        "passwordremindertitle": "Nytt temporärt lösenord från {{SITENAME}}",
-       "passwordremindertext": "Någon (förmodligen du, från IP-adressen $1) har begärt ett nytt lösenord för {{SITENAME}} ($4). Ett tillfälligt lösenordet för användaren \"$2\" har skapats och satts till \"$3\". Om detta var vad du önskade, behöver du nu logga in och välja ett nytt lösenord. Ditt tillfälliga lösenord går ut om {{PLURAL:$5|ett dygn|$5 dygn}}.\n\nOm denna begäran gjordes av någon annan, eller om du har kommit ihåg ditt lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
+       "passwordremindertext": "Någon (förmodligen du, från IP-adressen $1) har begärt ett nytt lösenord för {{SITENAME}} ($4). Ett tillfälligt lösenord för användaren \"$2\" har skapats och satts till \"$3\". Om detta var vad du önskade, behöver du nu logga in och välja ett nytt lösenord. Ditt tillfälliga lösenord går ut om {{PLURAL:$5|ett dygn|$5 dygn}}.\n\nOm denna begäran gjordes av någon annan, eller om du har kommit ihåg ditt lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
        "noemail": "Användaren \"$1\" har inte registrerat någon e-postadress.",
-       "noemailcreate": "Du måste ange en giltig e-postadress",
+       "noemailcreate": "Du måste ange en giltig e-postadress.",
        "passwordsent": "Ett nytt lösenord har skickats till den e-postadress som användaren \"$1\" har registrerat. När du får meddelandet, var god logga in igen.",
        "blocked-mailpassword": "Din IP-adress har blockerats från att redigera. För att förhindra missbruk kan den inte användas för att få ett nytt lösenord.",
        "eauthentsent": "Ett e-postmeddelande för bekräftelse har skickats till den angivna e-postadressen.\nInnan någon annan e-post kan skickas till kontot, måste du följa instruktionerna i e-postmeddelandet för att bekräfta att kontot verkligen är ditt.",
        "mailerror": "Fel vid skickande av e-post: $1",
        "acct_creation_throttle_hit": "Besökare till den här wikin som har använt din IP-adress har skapat {{PLURAL:$1|ett användarkonto|$1 användarkonton}} under det senaste $2, vilket är det maximalt tillåtna inom den tidsperioden.\nSom ett resultat kan besökare som använder den här IP-adressen inte skapa några fler användarkonton just nu.",
        "emailauthenticated": "Din e-postadress bekräftades den $2 kl. $3.",
-       "emailnotauthenticated": "Din e-postadress är ännu inte bekräftad. Ingen e-post kommer att skickas vad gäller det följande funktionerna.",
+       "emailnotauthenticated": "Din e-postadress är ännu inte bekräftad. Ingen e-post kommer att skickas vad gäller de följande funktionerna.",
        "noemailprefs": "Uppge en e-postadress i dina inställningar för att få dessa funktioner att fungera.",
        "emailconfirmlink": "Bekräfta din e-postadress",
        "invalidemailaddress": "E-postadressen kan inte godtas då formatet verkar vara felaktigt.\nSkriv in en adress med korrekt format eller töm fältet.",
-       "cannotchangeemail": "E-post-adresser som är bundna till användarkonton kan inte ändras på denna wiki.",
+       "cannotchangeemail": "E-postadresser kan inte ändras på denna wiki.",
        "emaildisabled": "Denna webbplats kan inte skicka e-post.",
        "accountcreated": "Kontot har skapats",
        "accountcreatedtext": "Användarkontot [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskussion]]) har skapats.",
        "createaccount-title": "Konto skapat på {{SITENAME}}",
        "createaccount-text": "Någon har skapat ett konto åt din e-postadress på {{SITENAME}} ($4) med namnet \"$2\" och lösenordet \"$3\". Du bör nu logga in och ändra ditt lösenord.\n\nDu kan ignorera detta meddelande om kontot skapats av misstag.",
-       "login-throttled": "Du har gjort för många misslyckade inloggningsförsök.\nVänta $1 innan du försöker igen.",
+       "login-throttled": "Du har gjort för många nyliga inloggningsförsök.\nVänta $1 innan du försöker igen.",
        "login-abort-generic": "Din inloggning misslyckades - Avbröts",
-       "login-migrated-generic": "Dit konto har migrerats och ditt användarnamn existerar inte längre på denna wiki.",
+       "login-migrated-generic": "Ditt konto har migrerats och ditt användarnamn existerar inte längre på denna wiki.",
        "loginlanguagelabel": "Språk: $1",
        "suspicious-userlogout": "Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.",
        "createacct-another-realname-tip": "Riktigt namn behöver inte anges.\nOm du väljer att ange det, kommer det att användas för att tillskriva dig ditt arbete.",
        "pt-login-continue-button": "Fortsätt att logga in",
        "pt-createaccount": "Skapa konto",
        "pt-userlogout": "Logga ut",
-       "php-mail-error-unknown": "Okänt fel i PHP:s mail()-funktion",
+       "php-mail-error-unknown": "Okänt fel i PHP:s mail()-funktion.",
        "user-mail-no-addy": "Försökte skicka e-post utan en e-postadress",
        "user-mail-no-body": "Försökte skicka e-post med tomt eller orimligt kort innehåll.",
        "changepassword": "Byt lösenord",
        "changepassword-success": "Ditt lösenord har ändrats!",
        "changepassword-throttled": "Du har gjort för många inloggningsförsök nyligen.\nVänta $1 innan du försöker igen.",
        "botpasswords": "Botlösenord",
-       "botpasswords-summary": "<em>Botlösenord</em> ger åtkomst till ett användarkonto via API utan att använda kontots primära inloggningsuppgifter. Tillgängliga användarrättigheter när du är loggar in med ett botlösenord kan vara begränsade.\n\nOm du inte vet varför du kanske vill göra detta bör du förmodligen inte göra det. Ingen behöver någonsin be dig att generera ett av dessa och ge det till dem.",
+       "botpasswords-summary": "<em>Botlösenord</em> ger åtkomst till ett användarkonto via API utan att använda kontots primära inloggningsuppgifter. Tillgängliga användarbehörigheter när man är inloggad med ett botlösenord kan vara begränsade.\n\nOm du inte vet varför du skulle vilja göra detta, bör du förmodligen inte göra det. Ingen behöver någonsin be dig att generera ett av dessa och ge det till dem.",
        "botpasswords-disabled": "Botlösenord är inaktiverade.",
        "botpasswords-no-central-id": "För att använda botlösenord måste du vara inloggad på ett centraliserat konto.",
        "botpasswords-existing": "Befintliga botlösenord",
        "botpasswords-label-delete": "Radera",
        "botpasswords-label-resetpassword": "Återställ lösenordet",
        "botpasswords-label-grants": "Tillgängliga beviljanden:",
-       "botpasswords-help-grants": "Beviljande ger åtkomst till användarrättigheter som ditt användarkonto redan har. När ett beviljande aktiveras här ger det inte åtkomst till de användarrättigheter som ditt användarkonto inte annars skulle ha. Se [[Special:ListGrants|tabellen över beviljanden]] för mer information.",
+       "botpasswords-help-grants": "Beviljande ger åtkomst till användarbehörigheter som ditt användarkonto redan har. När ett beviljande aktiveras här ger det inte åtkomst till de användarrättigheter som ditt användarkonto inte annars skulle ha. Se [[Special:ListGrants|tabellen över beviljanden]] för mer information.",
        "botpasswords-label-grants-column": "Beviljas",
        "botpasswords-bad-appid": "Botnamnet \"$1\" är inte giltigt.",
        "botpasswords-insert-failed": "Kunde inte lägga till botnamnet \"$1\". Har det redan lagts till?",
        "botpasswords-updated-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" uppdaterades.",
        "botpasswords-deleted-title": "Botlösenord raderades",
        "botpasswords-deleted-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" raderades.",
-       "botpasswords-newpassword": "Det nya lösenordet att logga in för <strong>$1</strong> är <strong>$2</strong>. <em>Spara detta som framtida referens.</em> <br> (För äldre botar som kräver att inloggningsnamnet är detsamma som det eventuella användarnamnet kan du även använda <strong>$3</strong> som användarnamn och <strong>$4</strong> som lösenord.)",
+       "botpasswords-newpassword": "Det nya lösenordet för att logga in med <strong>$1</strong> är <strong>$2</strong>. <em>Spara detta för framtida referens.</em> <br> (För äldre botar som kräver att inloggningsnamnet är detsamma som det eventuella användarnamnet kan du även använda <strong>$3</strong> som användarnamn och <strong>$4</strong> som lösenord.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider är inte tillgänglig.",
        "botpasswords-restriction-failed": "Begränsningar av botlösenord tillåter inte denna inloggning.",
        "botpasswords-invalid-name": "Det angivna användarnamnet innehåller inte separatorn för botlösenord (\"$1\").",
        "anonpreviewwarning": "''Du är inte inloggad. Om du sparar kommer din IP-adress registreras på denna sidas redigeringshistorik.''",
        "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"$1\" igen kommer din redigering att sparas utan en sådan.",
        "selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på \"$1\" igen kommer omdirigeringen att skapas trots detta.",
-       "missingcommenttext": "Var god och skriv in en kommentar nedan.",
+       "missingcommenttext": "Var god och skriv en kommentar.",
        "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne för den här kommentaren.\nOm du trycker på \"$1\" igen kommer din redigering sparas utan rubrik.",
        "summary-preview": "Förhandsgranskning av redigeringssammanfattning:",
        "subject-preview": "Förhandsgranskning av ämne:",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Indiska oceanen",
        "timezoneregion-pacific": "Stilla havet",
-       "allowemail": "Tillåt e-post från andra användare",
+       "allowemail": "Låt andra användare skicka e-post till mig",
        "email-blacklist-label": "Förhindra följande användare att skicka e-post till mig:",
        "prefs-searchoptions": "Sök",
        "prefs-namespaces": "Namnrymder",
        "recentchanges-legend": "Alternativ för senaste ändringarna",
        "recentchanges-summary": "Följ de senaste ändringarna i wikin på denna sida.",
        "recentchanges-noresult": "Inga ändringar under den angivna perioden matchar dessa kriterier.",
+       "recentchanges-timeout": "Tidsgränsen för denna sökning har gått ut. Du kan prova andra sökparametrar.",
+       "recentchanges-network": "På grund av ett tekniskt fel kunde inga resultat läsas in. Försök att uppdatera sidan.",
        "recentchanges-feed-description": "Följ de senaste ändringarna i wikin genom detta flöde",
        "recentchanges-label-newpage": "Denna redigering skapade en ny sida",
        "recentchanges-label-minor": "Detta är en mindre ändring",
        "recentchanges-submit": "Visa",
        "rcfilters-tag-remove": "Ta bort \"$1\"",
        "rcfilters-legend-heading": "<strong>Lista över förkortningar:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andra granskningsverktyg</strong>",
+       "rcfilters-other-review-tools": "Andra granskningsverktyg",
        "rcfilters-group-results-by-page": "Gruppera resultat efter sida",
        "rcfilters-grouping-title": "Gruppering",
        "rcfilters-activefilters": "Aktiva filter",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|timme|timmar}}",
        "rcfilters-highlighted-filters-list": "Markerade: $1",
        "rcfilters-quickfilters": "Sparade filter",
-       "rcfilters-quickfilters-placeholder-title": "Inga länkar har sparats ännu",
+       "rcfilters-quickfilters-placeholder-title": "Inga filter har sparats ännu",
        "rcfilters-quickfilters-placeholder-description": "För att spara dina filterinställningar och återanvända dem senare, klicka på bokmärkesikonen under \"Aktiva filter\" nedan.",
        "rcfilters-savedqueries-defaultlabel": "Sparade filter",
        "rcfilters-savedqueries-rename": "Döp om",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Skapa standardfilter",
        "rcfilters-savedqueries-cancel-label": "Avbryt",
        "rcfilters-savedqueries-add-new-title": "Spara filterinställningar",
+       "rcfilters-savedqueries-already-saved": "Dessa filter har redan sparats",
        "rcfilters-restore-default-filters": "Återställ standardfilter",
        "rcfilters-clear-all-filters": "Rensa alla filter",
-       "rcfilters-show-new-changes": "Visa nyaste ändringarna",
-       "rcfilters-search-placeholder": "Filtrera senaste ändringar (bläddra eller börja skriva)",
+       "rcfilters-show-new-changes": "Visa de nyaste ändringarna",
+       "rcfilters-search-placeholder": "Filtrera senaste ändringar (använd menyn eller sök efter filternamn)",
        "rcfilters-invalid-filter": "Ogiltigt filter",
        "rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-filter-user-experience-level-unregistered-label": "Oregistrerade",
        "rcfilters-filter-user-experience-level-unregistered-description": "Redigerare som inte är inloggade.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nykomlingar",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Registrerade redigerare med färre än 10 redigeringar och 4 dagars aktivitet.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Registrerade redigerare som har färre än 10 redigeringar eller 4 dagars aktivitet.",
        "rcfilters-filter-user-experience-level-learner-label": "Nybörjare",
        "rcfilters-filter-user-experience-level-learner-description": "Registrerade redigerare vars erfarenhet hamnar mellan \"Nybörjare\" och \"Erfarna användare\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfarna användare",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Exkludera markerade",
        "rcfilters-exclude-button-on": "Exkluderar markerade",
-       "rcfilters-view-advanced-filters-label": "Avancerade filter",
        "rcfilters-view-tags": "Märkta redigeringar",
        "rcfilters-view-namespaces-tooltip": "Filtrera resultat efter namnrymder",
        "rcfilters-view-tags-tooltip": "Filtrera resultat med redigeringsmärken",
        "rcfilters-view-return-to-default-tooltip": "Återvänd till huvudfiltreringsmenyn",
        "rcfilters-view-tags-help-icon-tooltip": "Läs mer om taggade redigeringar",
        "rcfilters-liveupdates-button": "Liveuppdateringar",
-       "rcfilters-liveupdates-button-title-on": "Stäng av live-uppdateringar",
+       "rcfilters-liveupdates-button-title-on": "Stäng av liveuppdateringar",
        "rcfilters-liveupdates-button-title-off": "Visa nya ändringar när de händer",
        "rcfilters-watchlist-markseen-button": "Markera alla ändringar som sedda",
        "rcfilters-watchlist-edit-watchlist-button": "Redigera din lista över bevakade sidor",
        "rcfilters-watchlist-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i <strong>fetstil</strong> med färgmarkering.",
-       "rcfilters-preference-label": "Dölj den förbättrade versionen av Senaste ändrinar",
+       "rcfilters-preference-label": "Dölj den förbättrade versionen av Senaste ändringar",
        "rcfilters-preference-help": "Stänger det nydesignade gränssnittet från 2017 och alla verktyg som lades till från och med då.",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfromreset": "Återställ datumval",
        "uploaded-script-svg": "Hittade skriptelementet \"$1\" i den uppladdade SVG-filen.",
        "uploaded-hostile-svg": "Hittade osäker CSS i den uppladdade filens stilelement.",
        "uploaded-event-handler-on-svg": "Att ange event-handler-attribut <code>$1=\"$2\"</code> är inte tillåtet i SVG-filer.",
-       "uploaded-href-attribute-svg": "href-attribut i SVG-filer tillåts endast att länka till http:// eller https:// som återfinns <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Elementen <a> kan endast länkar (href) till data: (inbäddad fil), http:// eller https:// eller fragmentmål (#, inom samma dokument). För andra element, som <image>, endast data: och fragment är tillåtna. Försök att bädda in bilder när du exporterar din SVG. Hittade <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Hittade href till osäker data: URI-mål <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-animate-svg": "Hittades taggen \"animate\" som kan ändra href med hjälp av attributen \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-setting-event-handler-svg": "Att ange event-handler-attribut är blockerat. Hittade <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploadstash-refresh": "Uppdatera listan över filer",
        "uploadstash-thumbnail": "visa miniatyr",
        "uploadstash-exception": "Kunde inte lagra uppladdning i stash ($1): \"$2\".",
+       "uploadstash-bad-path": "Sökvägen finns inte",
+       "uploadstash-bad-path-invalid": "Sökvägen är ogiltig.",
+       "uploadstash-bad-path-unknown-type": "Okänd typ \"$1\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Okänt miniatyrnamn.",
+       "uploadstash-bad-path-no-handler": "Ingen hantering hittades för MIME $1 till filen $2.",
+       "uploadstash-bad-path-bad-format": "Nyckeln \"$1\" är inte i korrekt format.",
+       "uploadstash-file-not-found": "Nyckeln \"$1\" hittades inte i stash.",
+       "uploadstash-file-not-found-no-thumb": "Kunde inte hämta miniatyrbild.",
+       "uploadstash-file-not-found-no-local-path": "Ingen lokal sökväg för nedskalat objekt.",
+       "uploadstash-file-not-found-no-object": "Kunde inte skapa lokalt filobjekt för miniatyr.",
+       "uploadstash-file-not-found-no-remote-thumb": "Misslyckades att hämta miniatyrbild: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Header för content-type saknas.",
+       "uploadstash-file-not-found-not-exists": "Kan inte hitta sökvägen eller filen består inte av ren text.",
+       "uploadstash-file-too-large": "Kan inte behandla en fil som är större än $1 byte.",
+       "uploadstash-not-logged-in": "Ingen användare är inloggad, filer måste tillhöra användare.",
+       "uploadstash-wrong-owner": "Denna fil ($1) tillhör inte aktuell användare.",
+       "uploadstash-no-such-key": "Ingen sådan nyckel ($1), kan inte ta bort.",
+       "uploadstash-no-extension": "Tillägget är null.",
+       "uploadstash-zero-length": "Filens längd är noll.",
        "invalid-chunk-offset": "Ogiltig segmentsförskjutning",
        "img-auth-accessdenied": "Åtkomst nekad",
        "img-auth-nopathinfo": "PATH_INFO saknas.\nDin server är inte inställd för att ge denna information.\nDen kan vara CGI-baserad och stöder inte img_auth.\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Se bildbehörighet.]",
index 28d888f..14e67db 100644 (file)
        "category_header": "Zngazyan tay qsahuy pintbcyan sa\"$1\"",
        "subcategories": "Uzyuk na pintbcyan",
        "category-media-header": "Cyux niya’ ptbcyun na \"$1\" Meti’",
+       "category-empty": "<em>Pintbcyan qaniy ga ini’ niya’ lpganiy kwara’ kinna zngazyan ruw meti’.</em>",
        "hidden-categories": "{{PLURAL:$1| Lnqing na pintbcyan }}",
        "hidden-category-category": "Lnqing na pintbuci’",
        "category-subcat-count": "{{PLURAL:$2|pintbcyan qaniy ga nanak yaquw qutux uzyuk na pintbcyan quw spgluw niya’.| pintbcyan qaniy ga kwara’ kin na $1 uzyuk na pintbcyan sawn niya uziy, $2 kwara’.}}",
        "category-article-count": "{{PLURAL:$2| pintbcyan qaniy ga ginkwara’ zngazyan tay suruw. | pintbcyan qaniy ga kwara’ kin $1 pintbcyan tay suruw, $2 kwara’.}}",
        "category-file-count": "{{PLURAL:$2|Pintbcyan niya’ qaniy ga nanak yaquw nyux niya’ sbiru’ sa hugal qaniy|Pintbcyan niya’ qaniy ga kwara’ kin na biru’ ka $1, psqunun kwara\nga $2 .}}",
        "listingcontinuesabbrev": "luhing",
+       "noindex-category": "Ini’ bkganiy quw zngazyan na ppglaing sa awsa’ mita’ qsahuy na biru’.",
+       "broken-file-category": "Wal yaqih p’ubuy Tang’an na zngazyan",
        "about": "Nanu’ quw",
        "article": "Kya kay’ qsahuy na zngazyan",
        "newwindow": "(gyahiy na giqas na kktan)",
        "pool-errorunknown": "Ini’ bqbaqiy ginlaylwan pin’qwan",
        "aboutsite": "Nanu’ quw {{SITENAME}}",
        "aboutpage": "Project: Nanu’ quw",
+       "copyright": "Baqaw ta’ iy kya qutux inblayqan niya’ pinqzyu’, maha ini’ kusa’ qasa ga musa’ phtun na gaga’ bbiq kinri’ tay $1 kwara’ quw bniru’ niya’ sa qsahuy.",
        "copyrightpage": "{{ns:project}}:pancyuen",
        "currentevents": "’Awsan na giqas na Sinbung",
        "currentevents-url": "Project: Pzyang giqas na sinbung",
        "badaccess": "Min’uqu’ pcingan sinpngan na kiri’",
        "ok": "Wal balay",
        "retrievedfrom": "’Nagal sa \"$1\"",
+       "youhavenewmessages": "kya $1 ($2){{PLURAL:$3|su’}}",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|isu’}}kya kahul sa {{PLURAL:$3|bzinah qutux na pptzyuwaw|$3 hi’ ptzyuwaw}} hya’ $1 ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|giqas na pintkaykay|999=giqas na pintkaykay}}",
+       "newmessagesdifflinkplural": "misuw qaniy{{PLURAL:$1|pinsbah}}",
        "editsection": "smr’zyut miru’",
        "editold": "Smr’zyut miru’",
        "viewsourceold": "Kta quw llpgan aring sa cin’ringan",
        "nstab-category": "Ps’anak sa mkgluw",
        "mainpage-nstab": "T’ringan na zzngayan",
        "nosuchspecialpage": "Ungat ana qutux siy pn’anak na zngazyan",
+       "nospecialpagetext": "<strong>Pinsina’ su’ ka muci’ na zngazyan qasa ga ungat zyuwaw niya’.</strong> maha smawya’ su’ magal sa musa’ thuzyay na muci’ balay na bikgan kktan ga, usa’ squw[[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Min’uqu’",
        "databaseerror": "Min’uqu’ quw cryawku’",
        "databaseerror-query": "Hmkangi’: $1",
        "badtitle": "Ungat zyuwaw na lalu’ na spzyang kkayal",
        "badtitletext": "Sni’ su’ lalu’ na spzyang kkayal su’ qasa ga ungat zyuwaw niya’, ungat ana nanu’ qsahuy niya’, ini’ ga ini’ su’ ’nblayqiy p’ubuy quw pin’ubuy su’ squw bzinah na kay’, ini’ ga ’mubuy sa sni’ naha’ lalu’ sa Wiki’. \nKuna kya wal su’ syun ka biru’ qasa ga kya’a cyux ’magan sa biru’ na ini’ baqiy mita’ hazi’.",
        "viewsource": "Kta quw llpgan aring sa cin’ringan",
+       "viewsource-title": "’nblaq mita’ yuensma’ na $1",
        "actionthrottled": "Wal shtuy quw ppzyuwi’an",
+       "viewsourcetext": "Nway su’ inblayqun mita’ ruw koppi’ quw bango’ puqing balay na zngazyan qaniy.",
        "exception-nologin": "Ini’ su’ kzyup na’",
        "cannotlogoutnow-title": "Ini’ baqiy mshriq misuw qaniy",
        "yourname": "Lalu’ na pptzyuwaw:",
        "yourpassword": "Mima’:",
        "userlogin-yourpassword": "Nanak kung baq sa llpgan qaniy",
        "userlogin-yourpassword-ph": "Brwaniy Mima’ su’",
-       "createacct-yourpassword-ph": "Brwaniy quw isu’ nanak musa’ baq na banggo’",
+       "createacct-yourpassword-ph": "Brwaniy mima’",
        "createacct-yourpasswordagain": "Wal srhgun smhuzyay quw Mima’",
        "createacct-yourpasswordagain-ph": "Brwaniy lawziy quw mima’",
        "userlogin-remembermypassword": "Laxiy zngiy kinzyup maku’",
        "showdiff": "Pkaykita’ sinbah",
        "anoneditwarning": "<strong>Smrhuw kmal:</strong> Ini’ su’ kzyup na’. Maha iy wal su’ sbahun ana inu’ ga, nanu’ quw cyux ki’an na  IP su’ ga musa’ ktan kwara’ squliq. Maha iy <strong>[$1 wal mzyup]</strong> ini’ ga <strong>[$2 ps’rux Canghaw]</strong>,sinr’zyut su’ miru’ qaniy ga musa’ niya’ s’agal sa lalu’ su’ ka nyux mmiru’ qaniy smbbaq, ru musa’ magal sa kwara’ ka qqblayqan na hway naha’.",
        "subject-preview": "Pnaynama’ mita’ sa spzyang na ptzyuwaw:",
+       "blockedtext": "<strong>lalu’ su’ na ptzyuwaw ini’ga cyux ki’an IP su’ wal sqhut lga.</strong> wal su’ sqhut na $1, ’ringan niya’ ga <em>$2</em>. \n*ryax na ’ringan qnhut niya’ ga: $8 \n*tmsuqan na qnhut niya’ ga: $6 \n*ubuy giuw sinngusan qnhut niya’ ga: $7 aniy rinrak quw $1 ini’ga yaquw tay bzinah ka [[{{MediaWiki:Grouppage-sysop}}|pklahang]] pkaylaniy quw ubuy giuw na zyuwaw na qnhut naha’. maha niy wal su’ rima’ maki’ sa [[Special:Preferences|sni’ su pzyang sawyan]] smi’ qutux sa maki’ rngu’ na ki’an na e-mail, ruw ini’ qhtaniy na’ quw tthuzyay rngu’ na e-mail su’ ga, musa’ blaq skahul squw tthuzyay rngu’ na \"Email prinrak squw ptzyuwaw\" musa’ rinrak sa ubuy gluw na pklahang. cyux ki’an na  IP su’ misuw qaniy ga $3, wal naha’ sqhut ID hya’ga #$5. \nnanu’ maqut su’ ga aniy minblaq miru’ kya quw wal sbiru’ tay glaing ka sibbaq su’ zyuwaw qniy.",
        "blockednoreason": "ini’ niya’ kaylaniy quw nanu’ quw ‘ringan",
        "nosuchsectiontitle": "Ini’ ‘luwiy quw binkgan gnaygay na binrwan",
        "loginreqtitle": "Siy ga mzyup",
        "loginreqlink": "mzyup",
        "accmailtitle": "Wayal ssatu’ mima",
        "newarticle": "(Giqas)",
+       "newarticletext": "Nyux su’ sp’ubuy sa qutux ungat na zngazyan. ps’ rux su’ zngazyan qasa ga, aniy miru’ squw cyux niya syan sikak na sr’tan miru’ tay hugal quw kay’ ka bbiru’ su’(kt’aniy sa [$1 awsa’ minblaq kmayal sa zngazyan]).\nMaha iyat su’ spzyang ruw mzyup su’ sa zngazyan qaniy ga, wzyagiy mhut quw <strong>ka kikay na zzyangay </strong> pphtan na msbzinah.",
+       "anontalkpagetext": "---- \n<em>Spkayal ta’ quw zzngazyan qaniy ga, yaquw ini’ psr’ux sa canghaw ka cyuw lmqing lalu’ ka pptzyuwaw musa’ mtzyuwaw </em>\nNanu’ yasa quw siy kiy s’agal ta’ cyux ki’an na IP musa’ baqun mita’ quw mibun naha’.\nGa mtnaq kya uziy maha cyux ki’an na IP , musa’ hazi’ anan kahul sa pzyux ini’ ptnaq na pptzyuwaw cyuw ptgqun mbing.\nMaha ni isu’ quw cyux lmqing lalu’ na pptzyuwaw ga, iy maha su’ maha ta quw kay’ knayal naha’ qaniy iy ini’ su’ pqbbaq sa zyuwawqaniy ga, nanu’ yasa quw [[Special:CreateAccount|ps’rux giqas na canghaw]] ini’ ga [[Special:UserLogin|pbiru’ mzyup]] \nkana p’imaw squw cyux lmqing lalu’ ka ptzyuwaw bznah.",
        "noarticletext": "Ungat nanu’ binrwan naha’ sa qsahuy qaniy, nway su’ musa’ sa zngazyan tay bzinah musa’ [[Special:Search/{{PAGENAME}}|hmkangi’ puqing lalu’ na zngazyan qaniy]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}hmkangi’ sa gluw na binrwan naha’ qutux qutux ryax ]ini’ ga [{{fullurl:{{FULLPAGENAME}}|action=edit}}musa’ ps’rux sa zzngazyan qaniy]</span>.",
        "noarticletext-nopermission": "Ungat ana cikuy knayal sa zyuwaw na qsahuy na lalu’ na kay’ squw nyux ktan sa zngayan qaniy.\nAna su’ s’usa’ sa zngayan tay bzinah \n[[Special:Search/{{PAGENAME}}|hmkangi’ sa puqing lalu’ na zngayan qaniy]], ini’ ga <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hmkangi’ sa m’ubuy sa zyuwaw na bbrwan qutux qutux ryax]</span>,ga ungat kinri’ su’ ms’rux sa zngayan qaniy.",
+       "userpage-userdoesnotexist-view": "Canghaw na pptzyuwaw \"$1\" ini’ pbiru’ lalu’ na’.",
+       "clearyourcache": "<strong>pinbaqiy: </strong> suqun su’ cucun lga siyga ’nblayqun su’ kmagaw kwara’ sawn ini’ kznga’ magal sa kikay na zzyangay ga musa’ su’ baqun mita’ kya quw giqas balay na sinbah su’ *\n<strong>Firefox / Safari: </strong> phtun <em>Shift</em>lga wazyaw <em>t’aring smr’zyut</em>,ini’ ga phut <em>Ctrl-F5</em> ini’ ga <em>Ctrl-R</em> (Mac musa’ maha<em>⌘-R</em>) *\n<strong>Google Chrome: </strong>phut<em>Ctrl-Shift-R</em> (Mac musa’ maha <em>⌘-Shift-R</em>) * \n<strong>Internet Explorer: </strong>phtun <em>Ctrl</em> lga wazyaw <em>t’aring smr’zyut</em>, ini’ ga phut <em>Ctrl-F5</em> * <strong>Opera:</strong>usa’ squw <em>wzyagan→syaniy</em> (cyux sa Mac maha <em>Opera → pzyang sawyan</em>) ruw usa’ lawziy sa <em>lnqing nanak & sk’anzeng → kwagiy cryaw na zzyangay → wal skhaylaw magal na zga’ ruw Tang’an</em>.",
        "updated": "(Sinbahan)",
        "note": "<strong> pinkita’ niya’ sa pinzga’ :</strong>",
+       "previewnote": "<strong>Misuw qaniy ga cyuw su’ tmrang pnama’ mita’ zmangay, ini’ su’ aniy cucun na’ quw sinbah su’!</strong>",
        "continue-editing": "Usa’ squw hhalan smr’zyut miru’",
        "editing": "Nyuw smr’zyut miru’ $1",
+       "creating": "Nyuw tmrang ps’rux $1",
        "editingsection": "smr’zyut miru’ $1 (gnaygay binrwan)",
        "yourtext": "Bniru’ su’",
        "storedversion": "Wal cucun quw sinbah",
        "yourdiff": "Kin’ini’ ptnaq",
        "templatesused": "Zngayan qaniy ga cyux niya’ sptzyuwaw qu nyux sbiru’ hugal qaniy{{PLURAL:$1|mopan}}:",
+       "templatesusedpreview": "Nyux sptzyuwaw na pnaynama’ kkita’ quw nyux hugal qaniy {{PLURAL:$1|yaya’ na kkbalay nn nanu’}}:",
        "template-protected": "(klhangan)",
        "template-semiprotected": "(ana walskun ga baqun smbah)",
        "hiddencategories": "zngayan qaniy hya’ ga gluw na {{PLURAL:$1|1 lnqing na pintbcyan|$1 lnqing pintbcyan}}na qutux bluw na squliq naha’:",
        "permissionserrors": "Min’uqu’ pcingan sinpngan na kiri’",
        "permissionserrorstext-withaction": "Yalaw gi yan nyux sbiru’ hugal qaniy{{PLURAL:$1|’ringan}}, ungat kiri’ musa’ myzyuwaw sa $2 na pptzyuwaw:",
+       "recreate-moveddeleted-warn": "<strong>kmux na kay’: nyux su’ t’ringun ps’rux lawziy quw misansu’ wal  laxan ka zngazyan qasa.</strong>\nBalay ga aki’ su’ lnglungun cikay maha musa’ su’ lhingun smr’zyut na’ quw zngazyan qaniy. \nKyalaw misu’ sqaniy quw bbiru’ qutux qutux ryax na biru’ na ’muzyut squw smbah aki’ su’ galan sa kktan su’:",
        "moveddeleted-notice": "Wal pzyutan quw zngayan qaniy.\nNyux sbiru’ hugal quw wal pzyutan na zngazyan squw sinhzyuwan bniru’ sa qutux qutux ryax aki’ baqun sa ggalan pspngan mita’.",
        "edit-conflict": "Ini’ ptnaq imi’ qsahuy na sinr’zyut miru’.",
        "postedit-confirmation-created": "Wal ps’rux zngazyan.",
        "content-model-text": "biru’ mlmlux",
        "content-json-empty-object": "Ungat ana nanu’ quw nnanu’ niya’",
        "content-json-empty-array": "Ungat ana nanu’ sni’ binrwan naha’",
+       "undo-failure": "Yalaw giy kya cikay psinzyuwagan nquw snbah smr’zyut miru’, ruw ini’ baqiy psbzinah lquw sinr’tan miru’.",
        "viewpagelogs": "Inblaq mita’ quw bniru’ sa zngazyan qaniy",
        "currentrev": "Spzyang giqas na sinnbah",
        "currentrev-asof": "Spzyang balay giqas sinbahan squw  $1",
        "last": "tay glaing",
        "page_first": "t’ringan balay na llpgan",
        "page_last": "pucing balay llpgan",
+       "histlegend": "Pspung sa kin’ini’ ptnaq nabniru’ sabiru’:mwazyaw sa musa’ pspngun binzyagan qutux balay na xwakway ka bniru’ ka sinbah qasa, \nruw phtun quw cyux maki’ sa kyahu’niya’ ka pphtan musa’ pspung. <br/> \nInblayqan kmayal:<strong>({{int:cur}})</strong> = pspngun squw giqas balay na sinbah biru’, <strong>({{int:last}})</strong> = pspngun squwbiru’ sinbah tay glaing, <strong>{{int:minoreditletter}}</strong> = iyat tqs’un smbah.",
        "history-fieldset-title": "Hkangi’ sinbah",
        "histfirst": "spzyang smural",
        "histlast": "giqas balay",
        "historysize": "({{PLURAL:$1|$1 bzyaqan kkayal na llpgan}})",
        "historyempty": "(ungat ana nanu’)",
        "history-feed-title": "Sbah pincyagan sraral",
+       "history-feed-description": "Sinbah sa wayal na zngazyan qaniy ka nyux squw WIKI qaniy.",
+       "history-feed-item-nocomment": "$1 na $2",
        "rev-delundel": "Smbah sa musa’ slwan mita’",
        "rev-showdeleted": "Pkaykita’",
        "revdelete-show-file-submit": "Aw’",
        "history-title": "Tay \"$1\" na sinbah bniru’ sraral",
        "difference-title": "Kin ini’ ptnaq sinbahan squw \"$1\"",
        "lineno": "Tuqiy binkgan binrwan$1:",
+       "compareselectedversions": "Pspung wal wzyagan na sinbah",
        "editundo": "Psbzinah",
        "diff-empty": "(ungat ini’ ptnaq)",
        "diff-multi-sameuser": "({{PLURAL:ini’ kta quw sinbahan tay kska’ nquw sinbahan  tay $1}})",
+       "diff-multi-otherusers": "(ini’ pkt’aniy {{PLURAL:$2|kahul sa pincyuwagan $2}} {{PLURAL:$1|pinxalan $1 smbah}})",
        "searchresults": "Babaw na hinkangi",
        "searchresults-title": "$1 na babaw hinkangi",
        "titlematches": "Mtnaq quw lalu’ kkayal sa zngazyan",
        "nextn": "tay suruw {{PLURAL:$1|$1}}",
        "prev-page": "llpgan tay glaing",
        "next-page": "llpgan tay suruw",
+       "prevn-title": "Pcingan balay na $1 {{PLURAL:$1|sa wayal}}",
        "nextn-title": "Pimkaykita’ sa babaw tay {{PLURAL:$1|na pinspngan ktan qasa}}",
        "shown-title": "Pinkita’ $1 {{PLURAL:$1|babaw nya’| babaw niya’}}squw qutux qutux zzngayan",
        "viewprevnext": "Psbzih mita’ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>Wiki qaniy ga rima’ maki’ lalu’ maha \"[[:$1]]\" zzngayan hya’.\n</strong>{{PLURAL:$2|0=|ini’ga kta quw pucing balay hinkangi’ na bbzinah.}}",
        "searchmenu-new": "<strong>Ps’rux zngazyan squw Wiki qaniy \"[[:$1]]\"!</strong>{{PLURAL:$2|0=|Ini’ ga kt’aniy squ zngayan ka wal su’ ’lwan.|Ini’ ga kta sa hinkangi’ naha’ sa bzinah na zngazyan.}}",
        "searchprofile-articles": "Bnrwan tay qsahuy na zzngazyan",
        "searchprofile-images": "Twometi’",
        "searchprofile-everything-tooltip": "Hkangi’ kwara’ qu bnrwan tay qsahuy na (kwara’ kin na spkayal sa zzngyan)",
        "searchprofile-advanced-tooltip": "Hkangi’ sa sniyan nanak Kungcyen nasslalu’",
        "search-result-size": "$1 ({{PLURAL:$2|1 binrwan|$2 binrwan}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 qutux gluw pinglgan}} ({{PLURAL:$2|$2 uzyuk na pintbcya}}, {{PLURAL:$3|$3Tang’an}})",
        "search-redirect": "(t’aring pglaing squw $1)",
        "search-section": "(binkgan sa lalu’ na puqing kkayal squw uzyuk na kkayal tay $1)",
        "search-category": "(ps’anak sa mkgluw $1)",
+       "search-file-match": "(mtntnaq sa bnrwan qsahuy na biru’ na zayzyuwaw na snku’ biru’)",
        "search-suggest": "Imi’ na kay’ su’ ga yasa qasa: $1",
        "search-interwiki-more": "(pzyux na’)",
        "search-interwiki-more-results": "pzyux na’ pcingan na hinkangi’",
        "grant-uploadfile": "Pawsa’ sa kktan quw giqas Tang’an qaniy",
        "grant-basic": "Puqing balay na pcingan na kinri’",
        "newuserlogpage": "Ps’rux sa bbiru’ krayryax na pbing nasquliq",
+       "rightslog": "Pcingan na sinpngan bniru na pptzyuwaw",
        "action-read": "lpuw zngazyan qaniy",
        "action-edit": "sr’zyut squw zzngayan tay sqaniy",
        "action-createpage": "Ps’rux quw zngazyan qaniy",
+       "action-createaccount": "Ps’rux canghaw na pptzyuwaw qaniy",
        "action-move": "hz’aniy quw zngazyan qaniy",
        "action-move-categorypages": "shzyaniy quw pintbuci’ na zngazyan",
        "action-movefile": "hz’aniy quw Tang’an qaniy",
        "recentchanges": "Sinbahan misuw qaniy",
        "recentchanges-legend": "Misan sinbahan wwazyaw misuw",
        "recentchanges-summary": "Sksa’ quw misan sinbah sa misuw qaniy ka zngayan sa Wiki’ qaniy.",
+       "recentchanges-noresult": "Maki’ sa snyan naha’ ryax qaniy gaungat ana qutux musa’ thuzyay mtntnaq sa sinpngan snyan naha gaga’ quw sinbahan naha’.",
+       "recentchanges-feed-description": "Sksa’ quw sinbahan sa misuw ka gnaygay  lalu’ na kkayal squw Wiki qaniy.",
        "recentchanges-label-newpage": "Cyux ps’rux sa qutux giqas na zzngayan quw sinr’zitan qasa",
        "recentchanges-label-minor": "Qaniy hya’ ga mszik sa ssr’zitun miru’",
        "recentchanges-label-bot": "Ssr’zyut miru’ qaniy hya’ ga kikay psr’zyut miru’",
        "rcfilters-filter-categorization-label": "Pintbcyan na sinbahan",
        "rcfilters-filter-logactions-label": "Miru’ sa bbiru’",
        "rcfilters-filtergroup-lastRevision": "Spzyang giqas na sinnbah",
+       "rcnotefrom": "Kwara’ nyux kyahu’ ka {{PLURAL:$5|yasa quw}} qaniy ga, aring sa <strong>$3 $4</strong> ga, yasa pinsbah niya’ krayryax (ana pzyux ga ini’ hzinas sa  <strong>$1</strong>).",
        "rclistfrom": "Inkahul misan sinbahan sa $2, $3",
        "rcshowhideminor": "$1 mszik sa ssr’tun",
        "rcshowhideminor-show": "Pkaykita’",
        "rcshowhideanons": "$1 ini’ sbbqan lalu’ na mintzyuwaw",
        "rcshowhideanons-show": "Pkaykita’",
        "rcshowhideanons-hide": "Lqing",
+       "rcshowhidepatr": "$1 gnawzyaw na sinr’zyut miru’",
        "rcshowhidepatr-show": "Pkaykita’",
        "rcshowhidepatr-hide": "Lqing",
        "rcshowhidemine": "$1 sinr’zyut maku’ miru’",
        "boteditletter": "squliq na kikay",
        "rc_categories_any": "Ana nanu’ binzyagan na",
        "rc-change-size-new": "sin-nbah$1 {{PLURAL:bzyaqan kkayal na llpgan}}",
+       "rc-old-title": "pins’ruxsa minqsu’ na lalu’ ga \"$1\"",
        "recentchangeslinked": "M’ubuy quw zyuwaw na sinbahan",
        "recentchangeslinked-feed": "M’ubuy quw zyuwaw na sinbahan",
        "recentchangeslinked-toolbox": "M’ubuy quw zyuwaw na sinbahan",
        "filehist-comment": "Tnwang smbbaq miru’",
        "imagelinks": "Pptzyuwaw na sinr’zyut biru’",
        "linkstoimage": "Nyux sbiru’ tay hugal ka {{PLURAL:$1| qutux zngazyan |$1 qutux zngazyan}}sp’ubuy sa biru’ qaniy.",
+       "linkstoimage-more": "Hmzinas $1{{PLURAL:$1|’nubuy zngazyan|’nubuy zngazyan }}mucing sa Tang’an qaniy. \nBinkgan kktan tay hugal qaniy ga nanak qaniy nyux baykgun tay glayng ka{{PLURAL:$1|1 ’nubuy|$1pin’ubuy}}zngazyan ka mwah sa Tang’an qaniy. \nNway su’ ’nblayqun mita’ uziy [[Special:WhatLinksHere/$2|ungat zinghuqan na binkgan kktan]].",
        "nolinkstoimage": "Ungat ana qutux wal ’mubuy sa biru’ na ana nanu’ zyuwaw qaniy.",
+       "linkstoimage-redirect": "$1 (t’ringun pglaing Tang’an) $2",
        "sharedupload-desc-here": "Tang’an qaniy hya’ ga  kahul squw$1 ruw hazi’ ana wal sptzyuwaw na cwan’an bbzinah. \nTay kyahu’ cyux spkita’ sa Tang’an qaniy hya’ ga cyux squw [$2 Tang’an pinqzyu’ zngayan ] na qsahuy pinqzyuwan.",
+       "filepage-nofile": "Ungat lalu’ na Tang’an qaniy.",
        "shared-repo-from": "minkahul sa $1",
        "shared-repo": "pglgan mita’ ruw pglgan mtzyuwaw na ssliyan Tang’an",
        "upload-disallowed-here": "Iyat su’ bauqn ’mumuk quw biru’ na zayzyuwaw qaniy.",
        "statistics-users-active": "Ini’ hngaw mtzyuwaw na pptyuwaw",
        "pageswithprop-prop": "Lalu’ na ubuy mkgluw:",
        "pageswithprop-submit": "Musa’",
+       "double-redirect-fixer": "T’aring pglaing sa psbah na squliq",
        "brokenredirects-edit": "Smr’zyut miru’",
        "brokenredirects-delete": "’muyut",
        "withoutinterwiki-legend": "T’ringan na biru’",
        "wantedpages": "Musa’ sawyan magal ka zngazyan",
        "wantedfiles": "Musa’ sawyan magal ka Tang’an",
        "wantedtemplates": "Musa’ sawyan magal ka mopan",
+       "prefixindex": "Kahul sa tunux na biru’ hmkangi’ zngazyan",
        "prefixindex-submit": "Pkaykita’",
        "shortpages": "R’tung iyal na zngazyan",
        "longpages": "Hmzinas iyal na zngazyan",
        "move": "Smhzi’",
        "movethispage": "Hz’aniy quw zngazyan qaniy",
        "notargettitle": "Ungat sinngusan niya’",
+       "pager-newer-n": "{{PLURAL:$1|giqas hazi’$1}}",
        "pager-older-n": "{{PLURAL:$1|smural hazi’ quw $1}}",
        "suppress": "Shtuy",
        "apihelp": "minblaq kmal na API",
        "booksources-search-legend": "Hkangi’ tkhulan pila’ na brbiru’",
        "booksources-search": "Hkangi’",
        "specialloguserlabel": "Pptzyuwaw:",
+       "speciallogtitlelabel": "Sngusun (tunux lalu’ na kkayal ini’gayaquw {{ns:user}}:pptzyuwaw quw niwan ptzyuwaw):",
        "log": "Pinhknyan sraral",
        "logeventslist-submit": "Pkaykita’",
        "all-logs-page": "Kwara’ ka wal niya’ skayal kwara’ squliq ka bnrwan",
+       "alllogstext": "Nyux pinsqunun spkaykita’ kwara’ {{SITENAME}}sqaniy ka kwara’ gluw na mmntnaq bniru.\nNway su’ wzyagan mhut ruwhuluy quw biru’ binzyagan su’ ka mmntnaq sa bniru’ krayryax,syaniy qutux lalu’ na pptzyuwaw (ptbuci’ miru’ sa biru’ na krahu’ squw biru’ na cikuy) ini’ ga kyaquw musa’ niya’ s’lahun na zngazyan (ptbuci’ miru’ sa biru’ na krahu’ squw biru’ na cikuy).",
+       "logempty": "Ungat mtntnaq sa sinpngan sa tthuzyayna bniru’.",
        "checkbox-all": "Kwara’",
        "checkbox-none": "Ungat",
        "checkbox-invert": "Pssyuk mwazyaw",
        "prevpage": "Llpgan tay glaing ($1)",
        "allarticles": "Kwara’ biru’ na zngyan",
        "allpagessubmit": "Mtzyuwaw",
+       "allpages-hide-redirects": "Lqing zngazyan cin’aring pglaing",
        "categories": "Pintbcyan",
        "categories-submit": "Pkaykita’",
        "sp-deletedcontributions-contribs": "wal miq sa pincyuwagan",
        "trackingcategories-desc": "Galan pspngan na snli’ sa snli’ niya’kwara’ ka pintbuci’",
        "trackingcategories-disabled": "Wal phngagun quw pintbcyan",
        "mailnologin": "Ungat sstwan lalu’ na rhzyal",
+       "emailuser": "Email prinrak squw ptzyuwaw qaniy",
        "emailusername": "Lalu’ na pptzyuwaw:",
        "emailusernamesubmit": "Pawsun",
        "emailfrom": "Squliq smnatu’:",
        "usermessage-editor": "Sni’ nanak sinbbaq zyuwaw na situng",
        "watchlist": "Cyes’ cingtan",
        "mywatchlist": "Kta quw binkgan biru’",
+       "watchlistfor2": "$1 na kkyagal squ binkgan sa kktan $2",
        "watchnologin": "Ini’ su’ kzyup na’",
        "watch": "Kita’",
        "watchthispage": "Kta quw zngazyan qaniy",
        "unwatch": "Laxiy kaygaliy",
        "unwatchthispage": "Hngaw kmyagal",
        "notanarticle": "Zngazyan na iyat kay’ balay na binrwan",
+       "watchlist-details": "cyux maki’ sa binkgan kktan sa kinlhangan su’ mita’ ga {{PLURAL:$1|$1 kwara’ zngazyan}} (kwara’ kina zngazyan na mpkayal).",
+       "wlheader-showupdated": "Suqun su’ minblaq mita’ squw pucingbalay lga, sinbah su’ zngazyan qasa ga musa’ yan nqaniy <strong>qthuy na biru’<strong> pkaykita’.",
+       "wlnote": "Kwara’ nyux kyahu’ ka aring sa glaing na $3 $4 ga, kinbalay niya’ sa {{PLURAL:$2|<strong>$2</strong> tmucing lga}}, {{PLURAL:$1|min<strong>$1</strong> niya’ smbah}}.",
+       "wlshowlast": "Pkt’aniy misuw balay $1 spung $2 ryax",
        "watchlist-hide": "Lqing",
        "watchlist-submit": "Pkaykita’",
        "wlshowhideminor": "msnzik sa spzyang balay sinr’zyut miru’",
        "wlshowhidemine": "smr’zyut maku’ miru’",
        "wlshowhidecategorization": "Pintbcyan na zngazyan",
        "watchlist-options": "Wwazyaw sa’ kkita’ sa binkgan sa kktan",
+       "enotif_reset": "Si’ slnbbaq’ kwara’ zngazyan maha wal ’nblayqun mita’",
        "enotif_impersonal_salutation": "{{SITENAME}} kwara’ ka cyux mbing ka qutux qutux ngasal",
        "enotif_anon_editor": "inqing lalu’ nqu squliq cyux mbing $1",
        "enotif_minoredit": "Qaniy hya’ ga mszik na musa’ sr’tun miru’",
        "logentry-contentmodel-change-revertlink": "psbzih",
        "logentry-contentmodel-change-revert": "psbzih",
        "protectlogpage": "Kklahang sa bniru’",
+       "protectedarticle": "wal klhangan \"[[$1]]\"",
+       "modifiedarticleprotection": "wal sbahun \"[[$1]]\" kinwagiq na kinlahang",
        "protect-legend": "Wal srhgun smhuzyay mlahang",
        "protectcomment": "’ringan:",
        "protectexpiry": "Sinpngan ryax:",
        "protect_expiry_invalid": "Ini’ baqiy snbah mima’.",
        "protect_expiry_old": "Wal tmasuq quw sinpngan na ryax",
+       "protect-default": "Swalan kwara’ pptzyuwaw",
        "protect-level-sysop": "Nanak yaquw pklahang swalan",
        "protect-summary-cascade": "casketing",
        "protect-expiring": "Sinpngan ryax $1 (UTC)",
        "tooltip-namespace_association": "Prawngan mwazyaw squw “bbzyagan” qaniy ga spgluw niya’ kwara’ quw kin na ppkayal sa wnwazyaw kungcyen na sslalu’, ini’ ga tunux lalu’ nquw kungcyen na sslalu’",
        "blanknamespace": "(Spzyang balay)",
        "contributions": "{{GENDER:$1| squliq mniru’}}bniru’ na qmnlah biru’",
+       "contributions-title": "$1 bniq sa pincyuwagan na pptzyuwaw",
        "mycontris": "Snli’ sa binrwan",
        "anoncontribs": "Snli’ sa binrwan",
+       "contribsub2": "{{GENDER:$3|$1}} bniq sa pincyuwagan na pptzyuwaw ($2)",
+       "nocontribs": "Ini’ ’luwiy quw pinsbah ka mtntnaq sa musa’ thuzyay.",
        "uctop": "(misuw qaniy ga)",
        "month": "Pcingan na sniyan naha’ ryax na byacing:",
        "year": "Pcingan na sniyan naha’ ryax na kawas",
+       "sp-contributions-newbies": "Nanak yaquw mniq pincyuwagan nagiqas na canghaw quw spkita’",
        "sp-contributions-newbies-sub": "Pptzyuwaw sa kkbalay sa giqas na Canghaw",
        "sp-contributions-blocklog": "qmhut smu’ut sa bniru’",
        "sp-contributions-uploads": "pawsa’ sa kktan",
        "sp-contributions-logs": "pinhknyan sraral",
        "sp-contributions-talk": "mpkal",
        "sp-contributions-search": "Hkangi’ wal miq sa pincyuwagan",
+       "sp-contributions-username": "Cyux ki’an na IP ini’galalu’ na pptzyuwaw:",
+       "sp-contributions-toponly": "Nanak ya quw sinr’zyut ka pzyang giqas sinbah quw spkita’ niya’.",
+       "sp-contributions-newonly": "Nanak ya quw sinr’zyut sa pins’rux niya’ zngazyan quw spkita’ niya’.",
        "sp-contributions-submit": "Hhkangi’",
        "whatlinkshere": "Aniy p’ubuy tay lpgan sqaniy",
        "whatlinkshere-title": "Aniy ’mubuy sa zngayan tay \"$1\"",
        "whatlinkshere-page": "Zngayan",
        "linkshere": "Zngayan tay suruw qaniy ga aniy p’ubuy sa <strong>[[:$1]]</strong>:",
+       "nolinkshere": "Ungat zngazyan ’mubuy squw <strong>[[:$1]]</strong>.",
        "isredirect": "t’ringun pawsa’ sa zngayan",
        "istemplate": "’nagal sa",
        "isimage": "’ubuy sa biru’ na ana nanu’ zayzyuwaw",
        "whatlinkshere-hideredirs": "t’aring maras lawziy sa spzyang balay sa $1",
        "whatlinkshere-hidetrans": "’ nagal sa $1",
        "whatlinkshere-hidelinks": "$1 p’ubuy",
+       "whatlinkshere-hideimages": "$1 ’ubuy na T’ang’an",
        "whatlinkshere-filters": "Hmkangi’",
        "whatlinkshere-submit": "Musa’",
        "block": "Htzyaniy quw pptzyuwaw",
        "ipbreason": "’ringan:",
        "ipbsubmit": "Qhtaniy quw pptzyuwaw qaniy",
        "ipbother": "Zikang tay bzinah:",
+       "ipboptions": "2tmucing: 2 hours,\n1ryax: 1 day,\n3ryax: 3 days,\n1hngawan: 1 week,\n2hngawan: 2 weeks,\n1byacing: 1 month,\n3byacing: 3 months,\n6byacing: 6 months,\n1 kawas:1 year,\nungat pcingan ryax :infinite",
        "ipb-confirm": "Sqhut quw wal srhgun smhuzyay",
        "blockipsuccesssub": "Wal thuzyay qmhut smu’ut",
        "ipb-edit-dropdown": "Sr’zyut miru’ quw ’ringan na qnhut",
        "contribslink": "wal miq sa pincyuwagan",
        "emaillink": "Stwaniy e-meyo’",
        "blocklogpage": "Qmhut smu’ut sa bniru’",
+       "blocklogentry": "ryax na qnihut [[$1]] mucing $2 $3",
+       "reblock-logentry": "sinbah sa [[$1]] sinqaysan ryax mucing $2 $3",
+       "block-log-flags-nocreate": "laxiy ps’rux canghaw",
        "block-log-flags-noautoblock": "phngaw quw pinzroo na qnhut",
        "block-log-flags-noemail": "phngaw quw e-meyo’",
+       "proxyblocker": "Qayqaya’ na ’iwan sxuci’ qmhut",
        "lockdb": "Sngusiy cryawku’",
        "lockbtn": "Sngusiy cryawku’",
        "move-page": "Smhzi’ $1",
        "tooltip-pt-createaccount": "Musa’ misu’ miyan slawkahan maha ps’rux canghaw hru kzyup qsahuy niya ha, ana maha baliy sikiy musa’ maha qasa hiya",
        "tooltip-ca-talk": "Nanu’quw spkayal squw zyuwaw qsahuy na zzngayan",
        "tooltip-ca-edit": "Sr’zyut squw zzngayan tay sqaniy",
+       "tooltip-ca-addsection": "T’aring giqas na gnaygay binrwan",
        "tooltip-ca-viewsource": "Ana wayal skun quw zngazyan qaniy ga, musa’ su’ baqun musa’ msbaybzih mita’ na’ quw puqing balay lalu’ na binkgan niya’.",
        "tooltip-ca-history": "Zzngayan qaniy hya’ ga sinbahan sa wayal qasa",
        "tooltip-ca-protect": "Klhangiy quw zngazyan qaniy",
        "tooltip-ca-delete": "’zyuciy quw zngazyan qaniy",
        "tooltip-ca-move": "Hz’aniy quw zngazyan qaniy",
        "tooltip-ca-watch": "Aniy tmwang sa baqun du’ mita’ na biru’ binkgan ka ggyahan llpgan qaniy",
+       "tooltip-ca-unwatch": "Kahul sa binkgan na kinlhangan mita’ laxiy quw zngazyan qaniy",
        "tooltip-search": "Hmkangi’ sa {{SITENAME}}",
        "tooltip-search-go": "Maha maki’ balay mtnaq lalu’ sa zzngayan qaniy ga, hala ta’ sa zzngayan qasa.",
        "tooltip-search-fulltext": "Hhkangi’ sa mtntnaq kay’ niya’ sa zzngayan qaniy",
        "tooltip-t-recentchangeslinked": "Misan sinbahan sa misuw qaniy lpgan sqaniy ka wayal sp’ubuy sa zzngayan tay bzinah",
        "tooltip-feed-atom": "Inkhulan na Atom sa zngazyan qaniy",
        "tooltip-t-contributions": "{{GENDER:$1|nanu’ quw nyux mtzyuwaw qaniy ga}}bnkuw niya’ ka bnrwan niya’",
+       "tooltip-t-emailuser": "Smatu’ e-meyo’ prinrak{{GENDER:$1|ptzyuwaw qaniy}}",
        "tooltip-t-upload": "Pawsa’ sa kktan zayzyuwaw na biru’",
        "tooltip-t-specialpages": "Kwara’ ka binkgan kktan sa mnanak na zzngayan",
        "tooltip-t-print": "Biru’ ka musa’ blaq sp’insat na gniyahan lpgan",
        "tooltip-ca-nstab-special": "Zzngayan qaniy hya’ ga ini’ ptnaq balayna zzngayan, iyat baqun smr’zyut",
        "tooltip-ca-nstab-project": "Inblaq mita’ quw zngazyan na Cwan’an qaniy",
        "tooltip-ca-nstab-image": "Psbzih mita’ zzngzyan sa biru’ na bniru’ sa zayzyuwaw",
+       "tooltip-ca-nstab-mediawiki": "’nblaq mita’ pintkaykay’ situng",
        "tooltip-ca-nstab-template": "Kta quw mopan",
        "tooltip-ca-nstab-category": "psbzih mita’ sa pintbcyan na zngazyan",
+       "tooltip-minoredit": "Si’ slnbbaq qaniy maha iyat spzyangna sr’tung miru’",
        "tooltip-save": "Sku’ qu wayal su’ sbahun",
        "tooltip-publish": "Kaylaniy kwara’ squliq quw sinbah su’",
        "tooltip-preview": "Zik na sskun su’ quw sinbahan su’ ga, sbnahiy mita’ quw sinbah su’.",
        "tooltip-diff": "Aniy pkita’ quw wayal su’ sbahun tay qsahuy niya’",
+       "tooltip-compareselectedversions": "Kta cikay quw kin’ini’ptnaq sinbahan na sazing binzyagan sa zngazyan qaniy",
        "tooltip-watch": "Aniy tmwang sa baqun du’ mita’ na biru’ binkgan ka ggyahan llpgan qaniy",
        "tooltip-watchlistedit-normal-submit": "Laxiy quw lalu’ na kkayal",
        "tooltip-watchlistedit-raw-submit": "Psqgiqas smbah kkita’ sa bnkuw na kktan",
        "others": "bzinah",
        "creditspage": "Kinbalay sa zngazyan na qutux gluw qasa",
        "simpleantispam-label": "Kmyagal sa kana ptayqihiy na niwan saysyup na kay’ na nnanu.\n<strong>Laxiy</strong> brwaniy sa bbrwan qaniy!",
+       "pageinfo-title": "\"$1\" na ggalan kinbaq zayzyuwaw",
        "pageinfo-header-basic": "Puqing balay na ggalan kinbbaq",
        "pageinfo-header-edits": "Sr’zyut miru’ pincyuwagan sraral",
        "pageinfo-header-restrictions": "Kklahang sa zngazyan",
        "pageinfo-header-properties": "Gluw na zngazyan",
        "pageinfo-display-title": "Pkt’aniy lalu’ na kkayal",
+       "pageinfo-default-sort": "Pnaynama’ smi’ sa bbkuw:",
+       "pageinfo-length": "Kinqruzyux zzngayan (bzyaqan kkayal na llpgan)",
        "pageinfo-article-id": "Zngazyan na ID",
        "pageinfo-language": "Kay’ qsahuy na zngazyan",
        "pageinfo-language-change": "smbah",
        "pageinfo-content-model": "Inrkyasan pinsulung sa qsahuy na zngazyan",
        "pageinfo-content-model-change": "smbah",
+       "pageinfo-robot-policy": "Yaquw squliq kikay quw ps’rux sa ppglaing sa awsa’ mita’ qsahuy na biru’.",
        "pageinfo-robot-index": "Snwalan",
        "pageinfo-robot-noindex": "Laxiy swaliy",
        "pageinfo-watchers": "Number of page watchers",
+       "pageinfo-few-watchers": "Ka pklahang mita’ $1 ga{{PLURAL:$1| ini’ tayhuk na’ squliq niya’}}",
+       "pageinfo-redirects-name": "Pskura’ squw t’aring pglaing paskura’ sa kinpzyux na zngazyan na zngazyan qaniy",
+       "pageinfo-subpages-name": "Kinpzyux uzyuk na zngazyan nquwzngazyan qaniy.",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|t’aring pglaing}}; $3 {{PLURAL:$3|\niyat t’aring pglaing}})",
        "pageinfo-firstuser": "Kinbalay sa zngazyang",
        "pageinfo-firsttime": "Zikang na pins’rux sa zngazyan",
        "pageinfo-lastuser": "Senmung psr’zyut miru’ sa misuw qaniy",
        "pageinfo-lasttime": "Ryax sinr’zyut miru’ misuw qaniy",
        "pageinfo-edits": "Sinqunan plpuw na pinsr’zyut miru’",
        "pageinfo-authors": "Kinkhmay kwara’ na mniru’",
+       "pageinfo-recent-edits": "Minpira’ smr’zyut miru’ sa misuw qaniy (kinwayal $1 sa ryax qasa)",
        "pageinfo-recent-authors": "Senmung pbiru’ sa misuw qaniy",
+       "pageinfo-magic-words": "Mazit{{PLURAL:$1|biru’}} ($1)",
+       "pageinfo-hidden-categories": "Lqing {{PLURAL:$1|pintbcyan na mlmlamu’}} ($1)",
+       "pageinfo-templates": "’nagal niya’ squw {{PLURAL:$1|yaya’ na kkbalay nn nanu’}} ($1)",
        "pageinfo-toolboxlink": "Zzngayan na ggalan qqbaqan",
        "pageinfo-redirectsto": "T’ringun pglaing maras sa:",
        "pageinfo-redirectsto-info": "ggalan kinbaq zayzyuwaw",
+       "pageinfo-contentpage": "Galan sa pllpuw sa qsahuy na zngazyan",
        "pageinfo-contentpage-yes": "Aw’",
        "pageinfo-protect-cascading": "Kklahang tkhulan sakwara’ ka m’ubuy na ana nanu’",
        "pageinfo-protect-cascading-yes": "Aw’",
        "previousdiff": "← Smural sinr’zyut miru’",
        "nextdiff": "Giqas hazi’ sinr’zyut→",
        "thumbsize": "Sspngan kinkrahu’ na swotu’:",
+       "widthheightpage": "$1×$2, $3 {{PLURAL:$3|zzngayan}}",
        "file-info-size": "$1 × $2 qqblayqan zzyangay, zayzyuwaw biru’ na sspngan kinkrahu’: $3, gluw na mmntnaq MIME: $4",
+       "file-info-size-pages": "$1×$2 kinblayqan zzyangay, pspngan kinkrahu’ Tang’an: $3, MIME gluw na mmntnaq: $4, $5 {{PLURAL:$5| zzngayan}}",
        "file-nohires": "Ungat qbaqan miq qutux sa musa’ tthuzyay iyal pkaykita’ sa kinslwan iyal na qayqaya’.",
        "svg-long-desc": "SVG biru’ na cyux slyan ana nanu’ zayzyuwaw,kinkrahu’ ktan tay babaw\n$1 × $2 tay babaw na Syangsu’,\nsspngan kinkrahu’ kkita’ syasing:$3",
        "show-big-image": "Spzyang puqing balay na Tang’an",
        "imgmultipageprev": "←llpgan tay glaing",
        "imgmultipagenext": "llpgan tay suruw →",
        "imgmultigo": "Aw’!",
+       "imgmultigoto": "Usa’ sa gnyahan lpgan tay $1",
        "img-lang-default": "(pinnama’ smi’ na kay’)",
        "img-lang-go": "Musa’",
        "ascending_abbrev": "pskkrawn paybkuw",
        "watchlistedit-raw-submit": "Psqgiqas smbah kkita’ sa bnkuw na kktan",
        "watchlistedit-clear-titles": "Lalu’:",
        "watchlisttools-clear": "Laxiy kwara’ quw kkita’ squw kktan binkgan",
+       "watchlisttools-view": "’nblaq mita’ ubuy gluw na minsbah",
+       "watchlisttools-edit": "’nblaq mita’ ruw sr’zyut miru’ kkyagal mita’ binkgan kktan",
+       "watchlisttools-raw": "Sr’zyut miru’ cin’ringan kkyagal squ binkgan sa kktan",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mpkal]])",
        "timezone-local": "Rhzyal tay hasa",
        "version": "Ubuy gluw bbiru’ ni",
        "version-libraries-license": "biru’ na gaga’ nqu snwayal hmriq sa kinri’",
        "version-libraries-description": "Miblaq pnqzyu’ sa zyuwaw",
        "version-libraries-authors": "Mniru’",
+       "redirect": "Khlaniy sa biru’ na zayzyuwaw,  pptzyuwaw, zzngayan, sinbah ini’ga bniru ID musa’ t’aring pglaing pawsa",
+       "redirect-summary": "Muci’ balay na zngazyan qaniy ga, musa’ blaq galan sat’aring pglaing pawsa’ sa Tang’an (syaniy qutux lalu’ na Tang’an), zngazyan (syaniy psbah ID ini’ga zngazyan ID), zngazyan na pptzyuwaw (si’ squw ID na ptzyuwaw), ini’ga lmlamu’ na bniru (si’ squw ID na bniru).\npptzyuwaw:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] 或 [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Mtzyuwaw",
        "redirect-lookup": "Hmkangi’:",
        "redirect-value": "Kin...:",
        "redirect-user": "Mning ID",
        "redirect-page": "Zngazyan na ID",
+       "redirect-revision": "Sinbah zzngayan ID",
        "redirect-file": "Lalu’ na tang’an",
        "redirect-logid": "Bbiru’ krayryax ID",
        "redirect-not-exists": "Ini' ’luwiy biru’ na llpgan",
        "htmlform-yes": "Aw’",
        "htmlform-cloner-create": "Pzyux na’ quw misan tnwang",
        "logentry-delete-delete": "$1 {{GENDER:$2|wal laxan}}zngayan $3",
+       "logentry-delete-restore": "$1{{GENDER:$2|psbzinah}} zzngayan $3 ($4)",
+       "logentry-delete-revision": "$1 {{GENDER:$2|wal sbahun}} qsahuy zzngayan $3 {{PLURAL:$5|sinbah tay1 |sinbah tay $5}}na musa’ baqun mita: $4",
        "revdelete-content-hid": "wal lqingun quw binrwan tay qsahuy",
        "revdelete-content-unhid": "lzxiy quw lnqing qsahuy na bnrwan",
        "logentry-move-move": "$1 {{GENDER:$2|wal shzyun}}zngyan $3 squw $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|wal shzyun}} zzngayan $3 squw $4, ini’ thaziy t’ringun pglaing",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|wal shzyun quw}} zzngayan $3 squw $4 ruw ’mukan quw cin’ringan pglaing",
+       "logentry-patrol-patrol-auto": "$1 rima’wal ziroo {{GENDER:$2|sinbbaq miru’}}zzngayan $3 na sinbah $4 maha wal gawzaygan",
        "logentry-newusers-create": "Wayal tmasuq {{GENDER:$2|ps’rux sq }} quw cin canghaw $1",
+       "logentry-newusers-autocreate": "Wal siy lnglung nanak {{GENDER:$2|ps’rux}} canghaw na pptzyuwaw $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|wal pawsun }} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|pawsa’ sa kktan la}} giqas ubuy gluw bbiru’ ni $3",
        "log-name-managetags": "Qmlah sa lalu’ na bniru’ kklahang",
        "log-name-tag": "Bniru’ sa lalu’ na qinlah",
        "rightsnone": "(ungat)",
        "searchsuggest-search": "Hhkangi’ {{SITENAME}}",
        "searchsuggest-containing": "kwara’ kin na...",
        "api-error-unknownerror": "Ini’ bqbaqiy ginlaylwan pin’qwan: \"$1\".",
+       "duration-days": "$1 {{PLURAL:$1|ryax}}",
        "limitreport-walltime": "Spzyang balay pincyuwagan na zikang",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
        "limitreport-templateargumentsize": "Pspngan kinkrahu’ na chansu’ na Mopan",
index 94bc39e..e37e79f 100644 (file)
        "recentchanges-submit": "చూపించు",
        "rcfilters-tag-remove": "'$1'ను తీసివెయ్యి",
        "rcfilters-legend-heading": "<strong>సంక్షేపాల (ఎబ్రీవియేషన్లు) జాబితా:</strong>",
-       "rcfilters-other-review-tools": "<strong>ఇతర సమీక్షా ఉపకరణాలు</strong>",
+       "rcfilters-other-review-tools": "ఇతర సమీక్షా ఉపకరణాలు",
        "rcfilters-group-results-by-page": "ఫలితాలను పేజీవారీగా గుదిగుచ్చు",
        "rcfilters-grouping-title": "గుదిగుచ్చడం",
        "rcfilters-activefilters": "సచేతనమైన వడపోతలు",
index 9114076..c9845d6 100644 (file)
        "pool-servererror": "Хидмати ҳисобкунаки ҳафз дастрас нест ($1).",
        "aboutsite": "Дар бораи {{SITENAME}}",
        "aboutpage": "Project:Дар бораи",
-       "copyright": "Мӯҳтаво таҳти иҷозатномаи $1 ва ё дигар дастрас аст.",
+       "copyright": "Муҳтаво таҳти иҷозатномаи $1 ва ё дигар дастрас аст.",
        "copyrightpage": "{{ns:project}}:Copyrights",
        "currentevents": "Рӯйдодҳои кунунӣ",
        "currentevents-url": "Лоиҳа:Рӯйдодҳои кунунӣ",
        "nocookiesfornew": "Ҳисоби корбарӣ сохта нашуд, чун мо манбаъи онро тасдиқ карда натавонистем.\nМутмаин бошед, ки кукиҳои мурургар фаъоланд, ин саҳифро аз нав кушода бори дигар саъй кунед.",
        "noname": "Номи корбари дурустеро шумо пешниҳод накардед.",
        "loginsuccesstitle": "Вуруд бо муваффақият",
-       "loginsuccess": "'''Шумо акнун ба Википедиа ҳамчун \"$1\". вуруд кардед'''",
+       "loginsuccess": "'''Шумо акнун ба Википедия ҳамчун \"$1\". вуруд кардед'''",
        "nosuchuser": "Корбаре бо номи \"$1\" вуҷуд надорад.\nАмали номро барраси кунед, ё [[Special:CreateAccount|ҳисоби ҷадидеро эҷод кунед]].",
        "nosuchusershort": "Ягон корбаре бо номи \"$1\" вуҷуд надорад. Тарзи навишти номро санҷед.",
        "nouserspecified": "Шумо бояд як номи корбарӣ мушаххас кунед.",
        "viewprevnext": "Намоиши ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Саҳифае бо номи \"[[:$1]]\" дар ин вики вуҷуд дорад.'''",
        "searchmenu-new": "'''Эҷоди саҳифаи \"[[:$1]]\" дар ин вики!'''",
-       "searchprofile-articles": "Саҳифаҳои мӯҳтаво",
+       "searchprofile-articles": "Саҳифаҳои муҳтаво",
        "searchprofile-images": "Чандрасонаӣ",
        "searchprofile-everything": "Ҳамачиз",
        "searchprofile-advanced": "Пешрафта",
        "searchprofile-articles-tooltip": "Ҷустуҷӯ дар $1",
        "searchprofile-images-tooltip": "Ҷустуҷӯи парвандаҳо",
-       "searchprofile-everything-tooltip": "Ҷустуҷӯи ҳамаи мӯҳтаво (бо ҳисоби саҳифаҳои баҳс)",
+       "searchprofile-everything-tooltip": "Ҷустуҷӯи ҳамаи муҳтаво (бо ҳисоби саҳифаҳои баҳс)",
        "searchprofile-advanced-tooltip": "Ҷустуҷӯ дар фазоҳои номи дилхоҳ",
        "search-result-size": "$1 ({{PLURAL:$2|1 калима|$2 калима}})",
        "search-redirect": "(тағйири масир $1)",
        "prefs-registration": "Замони сабтином:",
        "yourrealname": "Номи аслӣ:",
        "yourlanguage": "Забон:",
-       "yourvariant": "Навъи забони мӯҳтаво:",
+       "yourvariant": "Навъи забони муҳтаво:",
        "yournick": "Ники шумо:",
        "badsig": "Имзои хом нодуруст аст; барҷасбҳои HTML-ро баррасӣ кунед.",
        "badsiglength": "Тахаллус хеле дароз аст.\nОн бояд камтар аз $1 {{PLURAL:$1|аломат|аломатҳо}} бошад.",
        "enhancedrc-history": "таърих",
        "recentchanges": "Тағйироти охирин",
        "recentchanges-legend": "Ихтиёроти тағйироти охирин",
-       "recentchanges-summary": "Назорати тағйиротҳои навтарин дар Википедиа дар ҳамин саҳифа аст.",
+       "recentchanges-summary": "Назорати тағйиротҳои навтарин дар Википедия дар ҳамин саҳифа аст.",
        "recentchanges-feed-description": "Радёбии охирин тағйироти ин вики дар ин хурд.",
        "recentchanges-label-newpage": "Ин вироиш саҳифаи нав эҷод кард",
        "recentchanges-label-minor": "Ин вироиши ҷузъи аст",
        "randomincategory-submit": "Бирав",
        "randomredirect": "Масири тасодуфӣ",
        "randomredirect-nopages": "Ҳеҷ саҳифаи тағйири масире дар ин фазои ном мавҷуд нест.",
-       "statistics": "Омор/Статистика",
+       "statistics": "Омор",
        "statistics-header-pages": "Саҳифаи омор",
        "statistics-header-edits": "Вироиши омор",
        "statistics-header-users": "Омори корбарон",
        "statistics-header-hooks": "Дигар омор",
-       "statistics-articles": "Саҳифаҳои мӯҳтаво",
+       "statistics-articles": "Саҳифаҳои муҳтаво",
        "statistics-pages": "Саҳифаҳо",
        "statistics-pages-desc": "Тамоми саҳифаҳо дар ин вики-сомона (саҳифаҳои равонакунӣ, баҳсҳо ва ғ.)",
        "statistics-files": "Парвандаҳои боршуда",
        "ncategories": "$1 {{PLURAL:$1|гурӯҳ|гурӯҳҳо}}",
        "nlinks": "$1 {{PLURAL:$1|пайванд|пайвандҳо}}",
        "nmembers": "$1 {{PLURAL:$1|узв}}",
-       "nrevisions": "$1 {{PLURAL:$1|вироиш|вироиш}}",
+       "nrevisions": "{{PLURAL:$1|вироиш|вироиши}} $1",
        "specialpage-empty": "Барои ин ҳисобот натиҷае вуҷуд надорад.",
        "lonelypages": "Саҳифаҳои ятим",
        "lonelypagestext": "Ба саҳифаҳои зерин дар дигар саҳифаи {{SITENAME}} пайванд дода нашудааст.",
        "import-comment": "Тавзеҳ:",
        "importtext": "Лутфан парвандаро аз вики манбаъ содир кунед, аз тариқи саҳифа [[Special:Export|абзори содирот]].\nПас онро ба компютератон захира карда инҷо боргузорӣ кунед.",
        "importstart": "Дар ҳоли ворид кардани саҳифаҳо...",
-       "import-revision-count": "$1 {{PLURAL:$1|вироиш|вироиш}}",
+       "import-revision-count": "{{PLURAL:$1|вироиш|вироиши}} $1",
        "importnopages": "Саҳифаҳо барои ворид кардан нест.",
        "importfailed": "Ворид кардани саҳифаҳо шикаст хӯрд: $1",
        "importunknownsource": "Навъи манбаи номаълум барои воридкуни",
        "tooltip-n-mainpage-description": "Бозгашт ба саҳифаи аслӣ",
        "tooltip-n-portal": "Дар бораи лоиҳа, чӣ корҳоро метавонед кард, ва дарёфти чизҳо",
        "tooltip-n-currentevents": "Ёфтани иттилооти пешзамина перомуни рӯйдодҳои кунунӣ",
-       "tooltip-n-recentchanges": "Рӯйхати тағйирот дар Википедиа",
+       "tooltip-n-recentchanges": "Рӯйхати тағйирот дар Википедия",
        "tooltip-n-randompage": "Овардани як саҳифаи тасодуфӣ",
        "tooltip-n-help": "Макон барои дарёфт",
        "tooltip-t-whatlinkshere": "Рӯйхати ҳамаи саҳифаҳое, ки ба ин саҳифа пайванд доранд",
        "tooltip-preferences-save": "Захираи тарҷиҳот",
        "tooltip-summary": "Хулосаи кӯтоҳ ворид кунед",
        "anonymous": "{{PLURAL:$1|корбари|корбарони}} гумномӣ {{SITENAME}}",
-       "siteuser": "Википедиа user $1",
+       "siteuser": "Википедия user $1",
        "lastmodifiedatby": "Ин саҳифа охирин маротиба дар $2, $1 аз тарафи $3 тағйир дода шудааст.",
        "othercontribs": "Дар асоси коре аз тарафи $1.",
        "others": "дигарон",
index 3dc3b49..f662c07 100644 (file)
        "compare-invalid-title": "ชื่อเรื่องที่คุณระบุไม่ถูกต้อง",
        "compare-title-not-exists": "ชื่อเรื่องที่คุณระบุไม่มีอยู่",
        "compare-revision-not-exists": "รุ่นที่คุณระบุไม่มีอยู่",
-       "diff-form": "'''แบบฟอร์ม'''",
+       "diff-form": "ความแตกต่าง",
        "dberr-problems": "ขออภัย เว็บไซต์นี้กำลังพบกับข้อผิดพลาดทางเทคนิค",
        "dberr-again": "กรุณารอสักครู่แล้วจึงโหลดใหม่",
        "dberr-info": "(ไม่สามารถเข้าถึงฐานข้อมูล: $1)",
index 61ce439..07c79e6 100644 (file)
                        "LR Guanzon"
                ]
        },
-       "tog-underline": "Pagsasalungguhit ng link:",
-       "tog-hideminor": "Itago ang mga maliliit na pagbabago mula sa mga huling binago",
-       "tog-hidepatrolled": "Ikubli ang napatrolyang mga pagbabagong nasa kamakailang mga pagbabago",
-       "tog-newpageshidepatrolled": "Itago ang napatrolyang mga pahina mula talaan ng bagong pahina",
+       "tog-underline": "Pagsasalungguhit ng kawing:",
+       "tog-hideminor": "Itago ang mga maliliit na pagbabago mula sa mga huling pagbabago",
+       "tog-hidepatrolled": "Itago ang mga napatrolyang pagbabago mula sa mga huling pagbabago",
+       "tog-newpageshidepatrolled": "Itago ang mga napatrolyang pahina mula talaan ng bagong pahina",
        "tog-hidecategorization": "Itago ang kategorisasyon ng mga pahina",
-       "tog-extendwatchlist": "Palawigin ang talaan ng mga binabantayan upang maipakita ang lahat ng mga pagbabago, hindi lamang ang pinakakamakailan lamang",
-       "tog-usenewrc": "Mga pagbabago ng pangkat ayon sa pahina sa kamakailang mga pagbabago at bantayan",
+       "tog-extendwatchlist": "Palawigin ang tala ng binabantayan upang maipakita ang lahat ng mga pagbabago, hindi lamang ang pinakahuling pagbabago",
+       "tog-usenewrc": "Ipangkat ang mga pagbabago ayon sa pahina sa mga huling pagbabago at tala ng binabantayan",
        "tog-numberheadings": "Automatikong bilangin ang mga pamagat",
        "tog-showtoolbar": "Ipakita ang ''toolbar'' ng pagbabago",
        "tog-editondblclick": "Magbago ng mga pahina sa dalawahang pagpindot",
@@ -40,8 +40,8 @@
        "tog-watchdefault": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binago ko",
        "tog-watchmoves": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang inilipat ko",
        "tog-watchdeletion": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binura ko",
-       "tog-watchuploads": "Magdagdag ng mga bagong file sa aking mga sinusubaybayang listahan.",
-       "tog-watchrollback": "Magdagdag ng mga pahina kung saan ako nag-rollback sa aking bantayan",
+       "tog-watchuploads": "Idagdag sa aking tala ng mga binabantayan ang mga talaksang ikinarga kong pataas",
+       "tog-watchrollback": "Idagdag sa aking tala ng mga binabantayan ang mga pahinang aking iginulong pabalik",
        "tog-minordefault": "Markahan ang lahat ng pagbabago bilang maliit nang nakatakda",
        "tog-previewontop": "Ipakita ang paunang tingin bago ang kahon ng pagbabago",
        "tog-previewonfirst": "Ipakita ang paunang tingin sa unang pagbabago",
        "tog-oldsig": "Ang iyong umiiral na lagda:",
        "tog-fancysig": "Ituring ang lagda bilang teksto ng wiki (walang automatikong pagkawing)",
        "tog-uselivepreview": "Ipakita ang mga paunang tingin nang hindi kinakargang muli ang pahina",
-       "tog-forceeditsummary": "Pagsabihan ako kapag nagpapasok ng walang-lamang buod ng pagbabago",
+       "tog-forceeditsummary": "Sabihan ako kapag nagpapasok ng walang-lamang buod ng pagbabago",
        "tog-watchlisthideown": "Itago ang aking mga pagbabago mula sa tala ng mga binabantayan",
        "tog-watchlisthidebots": "Itago ang mga pagbabago ng mga bot mula sa tala ng mga binabantayan",
        "tog-watchlisthideminor": "Itago ang mga maliliit na pagbabago mula sa tala ng mga binabantayan",
        "tog-watchlisthideliu": "Itago ang mga pagbabago ng mga nakalagdang tagagamit mula sa tala ng mga binabantayan",
-       "tog-watchlistreloadautomatically": "I-karga muli ang bantayan ng awtomatiko kung kailan man nabago ang isang filter (kinakailangan ang JavaScript)",
+       "tog-watchlistreloadautomatically": "Ikarga muli ang bantayan ng awtomatiko kung kailan man nabago ang isang filter (kinakailangan ang JavaScript)",
+       "tog-watchlistunwatchlinks": "Magdagdag ng direktang huwag panoorin/panoorin na kawing sa talaan ng mga pinapanood (Kailangan ang JavaScript para gumana)",
        "tog-watchlisthideanons": "Itago ang mga pagbabago ng hindi nakikilalang mga tagagamit mula sa tala ng mga binabantayan",
        "tog-watchlisthidepatrolled": "Itago ang napatrolyang mga pagbabago mula sa tala ng mga binabantayan",
        "tog-watchlisthidecategorization": "Itago ang kategorisasyon ng mga pahina",
        "tog-ccmeonemails": "Padalahan ako ng mga kopya ng mga ipinadala kong e-liham sa ibang mga tagagamit",
        "tog-diffonly": "Huwag ipakita ang nilalaman ng pahinang nasa ilalim ng mga pagkakaiba",
        "tog-showhiddencats": "Ipakita ang mga nakatagong kategorya",
-       "tog-norollbackdiff": "Alisin ang mga pagkakaiba pagkatapos isagawa ang pagpapagulong na pabalik sa dati",
-       "tog-useeditwarning": "Magbabala sa akin kapag umalis ako sa isang pahina ng pampatnugot na hindi pa nasasagip ang mga pagbabago",
-       "tog-prefershttps": "Laging gamitin ang isang walang panganib na koneksiyon kapag naka-login",
+       "tog-norollbackdiff": "Huwag ipakita ang pagkakaiba pagkatapos isagawa ang pagpapagulong pabalik",
+       "tog-useeditwarning": "Balaan ako kapag umalis ako sa isang pagbabagong pahinang mayroong hindi pa nasasagip na pagbabago",
+       "tog-prefershttps": "Palaging gumamit ng ligtas na koneksyon habang nakalagda",
        "underline-always": "Palagi",
-       "underline-never": "Hindi magpakailanman",
-       "underline-default": "Tinakda ng pambasa-basa o balat",
-       "editfont-style": "Baguhin ang estilong pantitik ng lugar:",
-       "editfont-monospace": "Estilo ng titik na isahan ang puwang",
-       "editfont-sansserif": "Estilo ng titik na walang gutli sa dulo",
-       "editfont-serif": "Estilo ng titik na may gutli sa dulo",
+       "underline-never": "Hindi kailanman",
+       "underline-default": "Balat o tinakda ng pambasa-basa",
+       "editfont-style": "Estilo ng titik ng lugar ng pagbabago:",
+       "editfont-monospace": "Isahang puwang",
+       "editfont-sansserif": "Walang gutli",
+       "editfont-serif": "May gutli",
        "sunday": "Linggo",
        "monday": "Lunes",
        "tuesday": "Martes",
        "category_header": "Mga pahina sa kategoryang \"$1\"",
        "subcategories": "Mga subkategorya",
        "category-media-header": "Mga midya sa kategoryang \"$1\"",
-       "category-empty": "''Kasalukuyang walang artikulo o midya ang kategoryang ito.''",
+       "category-empty": "<em>Kasalukuyang walang artikulo o midya ang kategoryang ito.</em>",
        "hidden-categories": "{{PLURAL:$1|Nakatagong kategorya|Mga nakatagong kategorya}}",
        "hidden-category-category": "Mga nakatagong kategorya",
        "category-subcat-count": "{{PLURAL:$2|Ang kategoryang ito ay mayroong sumusunod na subkategorya lamang.|Ang kategoryang ito ay mayroong sumusunod na {{PLURAL:$1|subkategorya|$1 subkategorya}}, mula sa kabuuan na $2.}}",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Patungkol",
        "article": "Pahina ng nilalaman",
-       "newwindow": "(magbubukas sa bagong window)",
+       "newwindow": "(magbubukas sa bagong bintana)",
        "cancel": "Kanselahin",
-       "moredotdotdot": "Damihan pa...",
+       "moredotdotdot": "Marami pa...",
        "morenotlisted": "Maaring hindi kumpleto ang talang ito.",
-       "mypage": "Pahina ko",
+       "mypage": "Pahina",
        "mytalk": "Usapan",
        "anontalk": "Usapan",
-       "navigation": "Paglilibot (nabigasyon)",
+       "navigation": "Paglilibot",
        "and": ",&#32;at",
-       "faq": "Mga karaniwang itinatanong (''FAQ'')",
+       "faq": "Mga malilimit itanong",
        "actions": "Mga kilos",
        "namespaces": "Mga ngalan-espasyo",
        "variants": "Naiiba pa",
        "tagline": "Mula sa {{SITENAME}}",
        "help": "Tulong",
        "search": "Paghahanap",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nMga sanggunian\nMga panlabas na kawing\nMakita rin\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "Maghanap",
        "go": "Gawin",
        "searcharticle": "Pumunta",
        "history": "Kasaysayan ng pahina",
        "history_short": "Kasaysayan",
+       "history_small": "kasaysayan",
        "updatedmarker": "isinapanahon mula noong huli kong pagdalaw",
        "printableversion": "Bersiyong maililimbag",
-       "permalink": "Palagiang link",
+       "permalink": "Permanenteng kawing",
        "print": "Ilimbag",
        "view": "Tingnan",
        "view-foreign": "Tingnan sa $1",
        "delete": "Burahin",
        "undelete_short": "Baligtarin ang pagbura ng {{PLURAL:$1|isang pagbabago|$1 pagbabago}}",
        "viewdeleted_short": "Tingnan ang {{PLURAL:$1|isang binurang pagbabago|$1 binurang pagbabago}}",
-       "protect": "Ipagsanggalang",
+       "protect": "Isanggalang",
        "protect_change": "baguhin",
        "unprotect": "Baguhin ang pagsasanggalang",
        "newpage": "Bagong pahina",
-       "talkpagelinktext": "Usapan",
+       "talkpagelinktext": "usapan",
        "specialpage": "Natatanging pahina",
        "personaltools": "Mga kagamitang pansarili",
        "talk": "Usapan",
        "views": "Mga anyo",
        "toolbox": "Mga kagamitan",
+       "tool-link-userrights": "Baguhin ang mga grupo ng {{GENDER:$1|tagagamit}}",
+       "tool-link-userrights-readonly": "Tingnan ang mga grupo ng {{GENDER:$1|tagagamit}}",
+       "tool-link-emailuser": "Gumawa ng e-liham para sa {{GENDER:$1|tagagamit}} na ito",
        "imagepage": "Tingnan ang pahina ng talaksan",
        "mediawikipage": "Tingnan ang pahina ng mensahe",
        "templatepage": "Tingnan ang pahina ng padron",
        "viewtalkpage": "Tingnan ang usapan",
        "otherlanguages": "Sa ibang wika",
        "redirectedfrom": "(Nakaturo mula sa $1)",
-       "redirectpagesub": "Pahina ng pagkarga",
+       "redirectpagesub": "Pahinang panuro",
        "redirectto": "Papuntahin sa:",
-       "lastmodifiedat": "Huling binago ang pahinang ito noong $1, noong $2.",
+       "lastmodifiedat": "Huling binago ang pahinang ito noong $1 ng $2.",
        "viewcount": "Namataan ang pahinang ito nang {{PLURAL:$1|isang|$1}} beses.",
        "protectedpage": "Pahinang nakasanggalang",
        "jumpto": "Tumalon sa:",
        "pool-timeout": "Ang pagpapahinga ay naghihintay ng kandado",
        "pool-queuefull": "Puno na ang pisan ng mga pila",
        "pool-errorunknown": "Hindi nalalamang kamalian",
-       "pool-servererror": "Hindi magagamit ang serbisyo ng pool counter ($1).",
+       "pool-servererror": "Hindi magagamit ang serbisyo ng pambilang ng pisan ($1).",
        "poolcounter-usage-error": "Pagkakamali sa paggamit: $1",
        "aboutsite": "Tungkol sa {{SITENAME}}",
        "aboutpage": "Project:Patungkol",
        "databaseerror-query": "Tanong: $1",
        "databaseerror-function": "Tungkulin: $1",
        "databaseerror-error": "Depekto: $1",
+       "transaction-duration-limit-exceeded": "Para maiwasan ang kabagalan, ang transaksyong ito ay nabigo dahil ang tagal ng pagsulat ($1) ay lumagpas sa $2 segundong hangganan.\nKung ikaw ay nagbabago ng mga maraming bagay ng sabay-sabay, subukang gumawa na lamang ng mga maliliit na operasyon.",
        "laggedslavemode": "'''Babala:''' Maaaring hindi naglalaman ang pahina ng mga huling dagdag.",
        "readonly": "Nakakandado ang kalipunan ng datos",
        "enterlockreason": "Maglagay ng dahilan sa pagkakandado, kasama ang taya kung kailan magtatapos ang pagkakandado",
        "missingarticle-rev": "(pagbabago#: $1)",
        "missingarticle-diff": "(Pagkakaiba: $1, $2)",
        "readonly_lag": "Automatikong kinandado ang kalipunan ng datos habang humahabol ang mga aliping serbidor sa pinunong kalipunan nito",
+       "nonwrite-api-promise-error": "Ang HTTP header na 'Promise-Non-Write-API-Action' ay ipinadala ngunit ang kahilingan ay para sa isang ''API write module''.",
        "internalerror": "Kamaliang panloob",
        "internalerror_info": "Kamaliang panloob: $1",
+       "internalerror-fatal-exception": "Malubhang kataliwasan ng uring \"$1\"",
        "filecopyerror": "Hindi makopya ang talaksang \"$1\" sa \"$2\".",
        "filerenameerror": "Hindi mapalitan ang pangalan ng talaksang \"$1\" sa \"$2\".",
        "filedeleteerror": "Hindi mabura ang talaksang \"$1\".",
        "directorycreateerror": "Hindi malikha ang direktoryong \"$1\".",
+       "directoryreadonlyerror": "Ang direktoryong \"$1\" ay basahin lamang.",
+       "directorynotreadableerror": "Ang direktoryong \"$1\" ay hindi mabasa.",
        "filenotfound": "Hindi mahanap ang talaksang \"$1\".",
        "unexpected": "Hindi inaasahang halaga: \"$1\"=\"$2\".",
        "formerror": "Kamalian: hindi maipadala ang pormularyo",
        "no-null-revision": "Hindi makalikha ng bagong \"null\" para sa pahina na \"$1\"",
        "badtitle": "Hindi kanais-nais na pamagat",
        "badtitletext": "Ang hiniling na pamagat ng pahina ay hindi katanggap-tanggap, wala, o isang may-maling kawing na pamagat na pangugnayang-wika (interwika) o pangugnayang wiki (interwiki).\nMaaaring naglalaman ito ng isa o higit pang mga panitik (karakter) na hindi maaaring gamitin para sa mga pamagat.",
+       "title-invalid-empty": "Ang kahilingang pamagat ng pahina ay walang laman o naglalaman lamang ng pangalan ng ngalan-espasyo.",
+       "title-invalid-utf8": "Ang kahilingang pamagat ng pahina ay naglalaman ng imbalidong pagkasunod-sunod ng UTF-8.",
+       "title-invalid-interwiki": "Ang kahilingang pamagat ng pahina ay naglalaman ng isang kawing ng interwiki na hindi magagamit sa mga pamagat.",
+       "title-invalid-talk-namespace": "Ang kahilingang pamagat ng pahina ay tumutukoy sa isang usapang pahina na hindi ummiiral.",
+       "title-invalid-characters": "Ang kahilingang pamagat ng pahina ay naglalaman ng mga imbalidong karakter: \"$1\".",
+       "title-invalid-relative": "Ang pamagat ay mayroong kaugnay na daan. Ang mga kaugnay na pamagat ng pahina (./, ../) ay imbalido, dahil hindi sila maaabot kapag hinahawakan ng browser ng tagagamit.",
+       "title-invalid-magic-tilde": "Ang kahilingang pamagat ng pahina ay naglalaman ng imbalidong pagkasunod-sunod ng mahikang tilda (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Ang kahilingang pamagat ng pahina ay masyadong mahaba. Ito ay hindi dapat mas mahaba sa $1 {{PLURAL:$1|byte|bytes}} sa pag-encode sa UTF-8.",
+       "title-invalid-leading-colon": "Ang kahilingang pamagat ng pahina ay naglalaman ng imbalidong tutuldok sa unahan.",
        "perfcached": "Ang sumusunod na mga dato ay nakaligpit at maaaring hindi na napapanahon. Isang pinakamataas na {{PLURAL:$1|isang resulta|$1 mga resulta ang}} ang makukuha mula sa taguan.",
        "perfcachedts": "Ang sumusunod na mga dato ay nakaligpit, at dating isinapanahon noong $1. Isang pinakamataas na {{PLURAL:$4|isang resulta ang|$4 mga resulta ang}} makukuha mula sa taguan.",
        "querypage-no-updates": "Kasulukuyang hindi gumagana ang mga pagbabago para sa pahinang ito.\nAng mga dato dito ay hindi pa masasariwa sa kasalukuyan.",
        "viewyourtext": "Matitingnan at makokopya mo ang pinagmulan ng <strong>mga pagbabago</strong> papunta sa pahinang ito.",
        "protectedinterface": "Nagbibigay ang pahinang ito ng tekstong interface para sa software, at ikinandado para maiwasan ang pangaabuso.\nUpang dagdagan o baguhin ang mga salin para sa lahat ng mga wiki, pakigamit ang [https://translatewiki.net/ translatewiki.net], ang proyekto para sa lokalisasyon ng MediaWiki.",
        "editinginterface": "'''Babala:''' Binabago mo ang isang pahinang ginagamit sa pagbibigay ng tekstong panghangganan para sa sopwer.\nMakaaapekto ang mga pagbago sa pahinang ito sa anyo ng hangganang (''interface'') pantagagamit na para sa ibang mga tagagamit sa wiking ito.\nUpang magdagag o magbago ng mga salinwika, isaaalang-alang na lang po ang paggamit ng [https://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], ang proyekto para sa lokalisasyon ng MediaWiki.",
+       "translateinterface": "Para magdagdag o magbago ng mga pagsasalin sa lahat ng mga wiki, maaaring gamitin ang [https://translatewiki.net/ translatewiki.net], ang proyektong panglokalisasyon ng MediaWiki.",
        "cascadeprotected": "Nakasanggalang ang pahinang ito mula sa mga pagbabago, dahil kabilang ito sa sumusunod na {{PLURAL:$1|pahinang|mga pahinang}} nakasanggalang sa pamamagitan ng binuhay na opsyong \"nahuhulog\" (kumakaskada):\n$2",
        "namespaceprotected": "Wala kang pahintulot na magbago ng mga pahinang nasa ngalan-espasyong '''$1'''.",
        "customcssprotected": "Wala kang pahintulot na baguhin ang pahina ng CSS na ito, dahil naglalaman ito ng mga katakdaang pansarili ng ibang tagagamit.",
        "virus-scanfailed": "nabigo ang paghagilap (kodigong $1)",
        "virus-unknownscanner": "hindi kilalang panlaban sa birus:",
        "logouttext": "<strong>Nakaalis ka na sa pagkaka-login.</strong>\n\nTandaan na may ilang mga pahina na patuloy na nagpapakita na parang hindi ka naka-login, hanggang alisin mo ang iyong <i>browser cache</i>.",
+       "cannotlogoutnow-title": "Hindi maka-log out ngayon",
+       "cannotlogoutnow-text": "Imposible ang pag-log out kapag gumagamit ng $1.",
        "welcomeuser": "Mabuhay, $1!",
        "welcomecreation-msg": "Nilikha na ang iyong account.\nHuwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].",
        "yourname": "Bansag:",
        "createacct-yourpasswordagain-ph": "Muling ilagay ang password",
        "userlogin-remembermypassword": "Panatilihin akong naka-login",
        "userlogin-signwithsecure": "Gumamit ng ligtas na koneksyon",
+       "cannotlogin-title": "Hindi maka-log in",
+       "cannotlogin-text": "Imposible and pag-log in.",
+       "cannotloginnow-title": "Hindi maka-log in ngayon",
+       "cannotloginnow-text": "Imposible ang pag-log in kapag gumagamit ng $1.",
+       "cannotcreateaccount-title": "Hindi makagawa ng mga account",
+       "cannotcreateaccount-text": "Ang direktang paggawa ng account ay hindi pinapagana sa wiking ito.",
        "yourdomainname": "Dominyo mo:",
        "password-change-forbidden": "Hindi mo maaaring palitan ang mga password sa wiking ito.",
        "externaldberror": "Maaaring may kamalian sa pagpapatotoo ng database o kaya hindi ka pinahintulutang isapanahon ng iyong panlabas na account.",
        "login": "Lumagda",
+       "login-security": "Patunayan ang iyong pagkakakilanlan",
        "nav-login-createaccount": "Lumagda / lumikha ng account",
        "logout": "Umalis sa pagkaka-login",
        "userlogout": "Umalis sa pagkaka-login",
        "userlogin-resetpassword-link": "Nakalimutan ba ang iyong password?",
        "userlogin-helplink2": "Tulong sa pag-login",
        "userlogin-loggedin": "Naka-login ka na bilang {{GENDER:$1|$1}}. Gamitin ang form sa ibaba upang maka-login bilang ibang tagagamit o user.",
+       "userlogin-reauth": "Kailangan mong mag-log in muli para mapatunayan na ikaw si {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Lumikha ng iba pang account",
        "createacct-emailrequired": "Direksiyong e-liham:",
        "createacct-emailoptional": "Email (hindi kailangan)",
        "createacct-email-ph": "Ipasok ang iyong email address",
        "createacct-another-email-ph": "Ipasok ang email address",
        "createaccountmail": "Gumamit ng pansamantalang random na password at ipadala ito sa email na nakasaad sa ibaba",
+       "createaccountmail-help": "Maaaring magamit para gumawa ng account para sa isang tao ng hindi nalalaman ang password.",
        "createacct-realname": "Tunay na pangalan (maaaring wala)",
        "createacct-reason": "Dahilan",
        "createacct-reason-ph": "Bakit ka gagawa ng isa pang account?",
+       "createacct-reason-help": "Mensaheng ipinapakita sa listahan ng paggawa ng account",
        "createacct-submit": "Likhain ang iyong account",
        "createacct-another-submit": "Lumikha ng account",
+       "createacct-continue-submit": "Ituloy ang paggawa ng account",
+       "createacct-another-continue-submit": "Ituloy ang paggawa ng account",
        "createacct-benefit-heading": "{{SITENAME}} ay nilikha ng mga taong iyong katulad.",
        "createacct-benefit-body1": "{{PLURAL:$1|pagbabago|mga pagbabago}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pahina|mga pahina}}",
        "createacct-benefit-body3": "{{PLURAL:$1|kamakailang taga-ambag|mga kamakailang taga-ambag}}",
        "badretype": "Hindi magkatugma ang ipinasok mong mga password.",
+       "usernameinprogress": "Ang paggawa ng account para sa pangalan ng tagagamit na ito ay nasa progreso na. Mangyaring maghintay.",
        "userexists": "May gumagamit na ng ipinasok na bansag.\nPumili po ng ibang pangalan.",
        "loginerror": "Kamalian sa paglagda",
        "createacct-error": "May pagkakamali sa paglikha ng account",
        "nocookieslogin": "Gumagamit ang {{SITENAME}} ng mga kuki (''cookies'') para mailagda ang mga tagagamit.\nHindi mo pinagagana ang mga kuki.\nPaki-andar mo ang mga ito at sumubok uli.",
        "nocookiesfornew": "Hindi nalikha ang account ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito. \nTiyaking mayroon kang pinagaganang cookies, ikarga muli ang pahinang ito at subukan muli.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "createacct-loginerror": "Matagumpay na nagawa ang account ngunit hindi ka mailagda ng awtomatiko. Mangyaring pumunta sa [[Special:UserLogin|manu-manong paglagda]].",
        "noname": "Hindi mo tinukoy ang isang tanggap na pangalan ng tagagamit.",
        "loginsuccesstitle": "Nailagda",
        "loginsuccess": "'''Nakalagda ka na sa {{SITENAME}} bilang si \"$1\".'''",
        "wrongpassword": "Mali ang ipinasok na password.\nPakisubok muli.",
        "wrongpasswordempty": "Walang laman ang ipinasok na password.\nPakisubok muli.",
        "passwordtooshort": "Ang mga password ay dapat mayroong {{PLURAL:$1|1 panitik|$1 panitik}} (karakter).",
+       "passwordtoolong": "Ang mga password ay hindi maaaring mas mahaba sa {{PLURAL:$1|1 panitik|$1 panitik}}.",
        "passwordtoopopular": "Hindi maaaring gamitin ang mga hudyat (''password'') na pangkaraniwang pinipili. Mangyaring pumili ng higit na natatanging hudyat.",
        "password-name-match": "Dapat magkaiba ang password mo sa bansag o username mo.",
        "password-login-forbidden": "Ipinagbabawal ang paggamit ng ganitong pangalan ng tagagamit at password.",
        "createaccount-text": "May lumikha ng account para sa iyong email address sa {{SITENAME}} ($4) na pinangalanang \"$2\", na may password na \"$3\".\nDapat kang mag-login at baguhin ang password mo ngayon.\n\nMaaari mong huwag pansinin ang mensaheng ito, kung mali ang paglikha ng account na ito.",
        "login-throttled": "Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.\nMaghintay po muna ng $1 bago subukan uli.",
        "login-abort-generic": "Nabigo ang iyong paglagda - Pinigil",
+       "login-migrated-generic": "Ang iyong account ay inilipat, at ang iyong pangalan ay hindi na umiiral sa wiking ito.",
        "loginlanguagelabel": "Wika: $1",
        "suspicious-userlogout": "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
        "createacct-another-realname-tip": "Hindi kinakailangan ang tunay na pangalan.\nKung nais mo na ibigay ito, gagamitin ito para sa pagbibigay ng atribusyon para sa kanilang gawa.",
        "pt-login": "Mag-login",
        "pt-login-button": "Mag-login",
+       "pt-login-continue-button": "Magpatuloy sa paglagda",
        "pt-createaccount": "Lumikha ng account",
        "pt-userlogout": "Umalis sa pagkakatala",
        "php-mail-error-unknown": "Hindi malamang kamalian sa tungkulin ng liham ng PHP ()",
        "resetpass_submit": "Itakda ang password at mag-login",
        "changepassword-success": "Nabago ang iyong password!",
        "changepassword-throttled": "Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.\nMaghintay po muna ng $1 bago subukan uli.",
+       "botpasswords": "Mga password ng bot",
        "botpasswords-label-delete": "Burahin",
        "botpasswords-label-resetpassword": "Itakdang-muli/baguhin ang hudyat (password)",
        "botpasswords-label-grants-column": "Ipinagkaloob na",
diff --git a/languages/i18n/tokipona.json b/languages/i18n/tokipona.json
deleted file mode 100644 (file)
index 67f4b5f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "http://tokipona.wikia.com sysops"
-               ]
-       },
-       "january": "tenpo mun pi nanpa wan",
-       "february": "tenpo mun pi nanpa tu",
-       "march": "tenpo mun pi nanpa tu wan",
-       "april": "tenpo mun pi nanpa tu tu",
-       "may_long": "tenpo mun pi nanpa luka",
-       "june": "tenpo mun pi nanpa luka wan",
-       "july": "tenpo mun pi nanpa luka tu",
-       "august": "tenpo mun pi nanpa luka tu wan",
-       "september": "tenpo mun pi nanpa luka tu tu",
-       "october": "tenpo mun pi nanpa luka luka",
-       "november": "tenpo mun pi nanpa luka luka wan",
-       "december": "tenpo mun pi nanpa luka luka tu",
-       "category_header": "lipu lon kulupu lipu \"$1\"",
-       "subcategories": "kulupu lipu lili",
-       "listingcontinuesabbrev": " li awen",
-       "article": "lipu sona",
-       "newwindow": "(ona li open e lupa sin)",
-       "cancel": "ike",
-       "mytalk": "toki mi",
-       "navigation": "lipu suli",
-       "help": "mi sona ala",
-       "search": "o lukin jo",
-       "go": "o tawa",
-       "history": "o lukin e lipu ni pi tenpo pini",
-       "history_short": "lipu ni pi tenpo pini",
-       "printableversion": "lipu ni o kama lipu len",
-       "permalink": "nimi open kiwen",
-       "edit": "o ante",
-       "editthispage": "o ante e lipu ni",
-       "delete": "o weka",
-       "deletethispage": "o weka e lipu ni",
-       "protect": "mi taso o ken ante",
-       "protectthispage": "mi taso o ken ante e lipu ni",
-       "unprotect": "jan ali o ken ante",
-       "unprotectthispage": "jan ale o ken ante e lipu ni",
-       "talkpage": "Talk page",
-       "specialpage": "lipu suli",
-       "talk": "o toki",
-       "toolbox": "ilo",
-       "otherlanguages": "toki ante",
-       "redirectedfrom": "(tan $1)",
-       "aboutsite": "lipu sona pi toki pona li seme?",
-       "aboutpage": "Project:lipu sona pi toki pona li seme?",
-       "copyright": "lipu ken $1 li lawa e lipu ni.",
-       "currentevents": "seme li sin lon ma?",
-       "disclaimers": "wile ala",
-       "edithelp": "mi sona ala e ante",
-       "mainpage": "lipu lawa",
-       "mainpage-description": "lipu lawa",
-       "portal": "lipu pi kulupu ni",
-       "privacy": "ken pi awen weka",
-       "ok": "pona",
-       "retrievedfrom": "tan $1",
-       "editsection": "o ante",
-       "toc": "poki lawa",
-       "showtoc": "o suli e poki ni.",
-       "hidetoc": "o lili e poki ni",
-       "nstab-main": "lipu sona",
-       "nstab-user": "lipu jan",
-       "nstab-special": "suli",
-       "nstab-image": "lipu nanpa",
-       "nstab-mediawiki": "nimi",
-       "nstab-template": "lipu mama",
-       "nstab-help": "pana pona",
-       "nstab-category": "kulupu lipu",
-       "logout": "mi o tawa",
-       "userlogout": "mi o tawa",
-       "summary": "ante li seme:",
-       "minoredit": "ante ni li lili taso",
-       "watchthis": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
-       "savearticle": "o awen",
-       "preview": "lukin taso",
-       "showpreview": "mi wile lukin taso e ante",
-       "editing": "mi ante e: $1",
-       "editingcomment": "mi ante e lipu $1 (wan sin)",
-       "copyrightwarning": "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />\nkin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.\n'''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
-       "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
-       "histfirst": "pini taso",
-       "histlast": "sin taso",
-       "prevn": "nanpa {{PLURAL:$1|$1}} pini",
-       "nextn": "nanpa {{PLURAL:$1|$1}} kama",
-       "viewprevnext": "o lukin e ($1 {{int:pipe-separator}} $2) ($3).",
-       "preferences": "seme li pona tawa mi",
-       "recentchanges": "lipu seme li ante?",
-       "minoreditletter": "ante lili",
-       "newpageletter": "lipu sin",
-       "recentchangeslinked": "ante sama",
-       "recentchangeslinked-feed": "ante sama",
-       "recentchangeslinked-toolbox": "ante sama",
-       "upload": "o pana e lipu nanpa",
-       "filedesc": "ante li seme",
-       "fileuploadsummary": "ante li seme:",
-       "file-anchor-link": "Lipu nanpa",
-       "randompage": "mi wile lukin e lipu ante",
-       "lonelypages": "lipu ni li jo ala e lipu sama",
-       "move": "o tawa",
-       "movethispage": "o pana e nimi sin",
-       "allpages": "lipu ale",
-       "categories": "kulupu lipu",
-       "watchlist": "mi sona e ante pi lipu seme",
-       "watch": "o sona e ante",
-       "watchthispage": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
-       "unwatchthispage": "mi wile ala sona e ante ale pi lipu ni lon tenpo kama",
-       "mycontris": "mi ante e lipu seme",
-       "whatlinkshere": "lipu seme li tawa ni?",
-       "specialpages": "lipu suli"
-}
index 8bd88af..0516e32 100644 (file)
        "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.",
        "selfredirect": "<strong>Uyarı:</strong> Bu sayfanın kendisine yönlendirme vardır.\nYönlendirme için yanlış hedef belirtmiş olabilirsiniz, ya da yanlış sayfa düzenlemeye çalışmış olabilirsiniz.\n\n\"$1\" sayfasına tıklayarak, yönlendirmeyi zaten oluşturabilirsiniz.",
-       "missingcommenttext": "Lütfen aşağıda bir açıklama yazınız.",
+       "missingcommenttext": "Lütfen bir açıklama yazınız.",
        "missingcommentheader": "<strong>Hatırlatma:</strong> Bu yorum için bir konu girmediniz.\nEğer \"{{int: savearticle}}\" tuşuna tekrar basarsanız, değişikliğiniz konu olmadan kaydedilecektir.",
        "summary-preview": "Değişiklik özeti ön izlemesi:",
        "subject-preview": "Konu ön izlemesi:",
        "sectioneditnotsupported-text": "Bölüm değiştirmesi bu sayfada desteklenmiyor.",
        "permissionserrors": "İzin hatası",
        "permissionserrorstext": "Aşağıdaki {{PLURAL:$1|sebep|sebepler}}den dolayı, bunu yapmaya yetkiniz yok:",
-       "permissionserrorstext-withaction": "Aşağıdaki {{PLURAL:$1|neden|nedenler}}den dolayı $2 için yetkiniz yok:",
+       "permissionserrorstext-withaction": "Aşağıdaki {{PLURAL:$1|neden|nedenler}}den dolayı $2 yetkiniz yok:",
        "recreate-moveddeleted-warn": "<strong>Uyarı: Daha önceden silinmiş bir sayfayı tekrar oluşturuyorsunuz.</strong>\n\nBu sayfayı düzenlemeye devam etmenin uygun olup olmadığını düşünmelisiniz.\nBu sayfanın silme ve taşıma günlüğü kolaylık için burada verilmiştir:",
-       "moveddeleted-notice": "Bu sayfa silinmiş.\nSayfanın silme ve taşıma kaydı referans için aşağıda verilmiştir.",
+       "moveddeleted-notice": "Bu sayfa silinmiş.\nSayfanın silme, koruma ve taşıma kaydı referans için aşağıda verilmiştir.",
        "log-fulllog": "Tam günlüğü gör",
        "edit-hook-aborted": "Değişiklik çengelle durduruldu.\nBir açıklama verilmedi.",
        "edit-gone-missing": "Sayfa güncellenemiyor.\nSilinmiş görünüyor.",
        "timezoneregion-europe": "Avrupa",
        "timezoneregion-indian": "Hint Okyanusu",
        "timezoneregion-pacific": "Pasifik Okyanusu",
-       "allowemail": "Diğer kullanıcılar bana e-posta atabilsin",
+       "allowemail": "Diğer kullanıcıların bana e-posta gönderebilmesine izin ver",
+       "email-blacklist-label": "Şu kullanıcıların bana e-posta göndermesine izin verme:",
        "prefs-searchoptions": "Arama",
        "prefs-namespaces": "İsim alanları",
        "default": "varsayılan",
        "rcfilters-filter-user-experience-level-unregistered-label": "Kayıtsız",
        "rcfilters-filter-user-experience-level-unregistered-description": "Oturum açmamış editörler.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Yeni gelenler",
-       "rcfilters-filter-user-experience-level-newcomer-description": "10'dan az düzenleme ve 4 günden az etkinlik.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10'dan az düzenlemesi veya 4 günden az etkinliği olan kayıtlı kullanıcılar.",
        "rcfilters-filter-user-experience-level-learner-label": "Öğreniciler",
        "rcfilters-filter-user-experience-level-learner-description": "\"Yeni gelenler\"den daha fazla gün boyunca etkinlik ve daha fazla düzenleme, ancak \"Deneyimli kullanıcılar\"dan daha az etkinlik ve düzenleme.",
        "rcfilters-filter-user-experience-level-experienced-label": "Deneyimli kullanıcılar",
        "rcfilters-filter-categorization-description": "Kategorilere eklenen veya kaldırılan sayfaların kayıtları.",
        "rcfilters-filter-logactions-label": "Günlüğü tutulan işlemler",
        "rcfilters-filter-logactions-description": "Hizmetli işlemleri, hesap oluşturmalar, sayfa silmeler, yüklemeler....",
-       "rcfilters-view-advanced-filters-label": "Gelişmiş filtreler",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
index fd51e98..b60268e 100644 (file)
@@ -34,7 +34,6 @@
        "underline-always": "Кезээде",
        "underline-never": "Кажан-даа",
        "underline-default": "Кештиң азы веб-браузерниң ниити үнези",
-       "editfont-default": "Веб-браузерниң ниити үнези",
        "sunday": "Улуг-хүн",
        "monday": "Бир дугаар хүн",
        "tuesday": "Ийи дугаар хүн",
@@ -94,7 +93,7 @@
        "hidden-category-category": "Чажыт бөлүктер",
        "category-subcat-count": "{{PLURAL:$2|1=Ук аңгылал чүгле дараазында иштики аңгылалдыг.|Ук аңгылалда бар-ла $2 иштики аңгылалдарның $1 иштики аңгылалы көстүп турар.}}",
        "category-subcat-count-limited": "Ук аңгылалда {{PLURAL:$1|1=бир|$1}} иштики аңгылал бар.",
-       "category-article-count": "{{PLURAL:$2|1=Ук аңгылалда чүгле чаңгыс арын бар.|Ук аңгылалда бар $2 арыннарының аразындан}} |{{PLURAL:$1 арынны көргүскен| $1 арыннарны көргүскен.}}",
+       "category-article-count": "{{PLURAL:$2|Ук аңгылалда чүгле чаңгыс арын бар.|Аңгылалда ниитизи-биле $2 арын бар. Мында чүгле {{PLURAL:$1|арын|$1 арын}} көргүскен}}",
        "category-file-count": "{{PLURAL:$2|1=Ук аңгылал чүгле чаңгыс файлдыг.|Ук аңгылалдың шупту $2 файлдарының аразындан $1 файлын көргүскен.}}",
        "listingcontinuesabbrev": "(уланчы)",
        "noindex-category": "Индекстелбес арынар",
        "anontalk": "Бо ИП-адрестиң чугаазы",
        "navigation": "Навигация",
        "and": "&#32;болгаш",
-       "qbfind": "Дилээри",
-       "qbbrowse": "Каралаары",
-       "qbedit": "Өскертири",
-       "qbpageoptions": "Бо арын",
-       "qbmyoptions": "Мээң арыннарым",
        "faq": "Бо-ла салыр айтырыглар (БлСА)",
-       "faqpage": "Project:БлСА",
        "actions": "Кылыглар",
        "namespaces": "Аттар делгемнери",
        "variants": "Янзы-хевирлери",
        "edit": "Эдер",
        "create": "Чогаадыры",
        "create-local": "Кызыы тайылбыр немээр",
-       "editthispage": "Бо арынны өскертири",
-       "create-this-page": "Бо арынны чогаадыры",
        "delete": "Ыраары",
-       "deletethispage": "Бо арынны ырадыры",
        "undelete_short": "$1 {{PLURAL:$1|1=эдигни|эдиглерни}} катап үндүрери",
        "viewdeleted_short": "{{PLURAL:$1|1=Бир ыраткан өскерлиишкинни|$1 ыраткан өскерлиишкиннерни}} көөрү",
        "protect": "Камгалаары",
        "protect_change": "өскертири",
-       "protectthispage": "Бо арынны камгалаар",
        "unprotect": "Камгалалды өскертири",
-       "unprotectthispage": "Бо арынның камгалалын өскертири",
        "newpage": "Чаа арын",
-       "talkpage": "Бо арын дугайында чугаалажыры",
        "talkpagelinktext": "Чугаалажып сайгарар",
        "specialpage": "Тускай арын",
        "personaltools": "Хууда херекселдер",
-       "articlepage": "Допчу арынны көөрү",
        "talk": "Сайгарылга",
        "views": "Көрүлделер",
        "toolbox": "Херекселдер",
-       "userpage": "Ажыглакчының арынын көөрү",
-       "projectpage": "Төлевилелдиң арынын көөрү",
        "imagepage": "Файлдың арынын көөрү",
        "mediawikipage": "Чагаа арынын көөрү",
        "templatepage": "Майык арынын көөрү",
        "whatlinkshere-filters": "Шүүрлер",
        "block": "Ажыглакчыны кызыгаарлаары",
        "blockip": "Ажыглакчыны кызыгаарлаары",
-       "blockip-legend": "Ажыглакчыны кызыгаарлаары",
        "ipaddressorusername": "ИП-адрес азы aжыглaкчының aды",
        "ipbreason": "Чылдагаан:",
        "ipbsubmit": "Бо ажыглакчыны кызыгаарлаары",
        "namespacesall": "шупту",
        "monthsall": "шупту",
        "recreate": "Катап чогаадыры",
+       "confirm-purge-title": "Ук арында кешти аштаар",
        "confirm_purge_button": "Чөп",
+       "confirm-purge-top": "Ук арында кешти аштаар бе?",
+       "confirm-purge-bottom": "Арында кешти аштаза, аңаа арынның сөөлгү хевири көстүр.",
        "confirm-watch-button": "Чөп",
        "confirm-unwatch-button": "Чөп",
        "imgmultipageprev": "← эрткен арын",
index 2e07b2b..f28a372 100644 (file)
@@ -62,7 +62,6 @@
        "underline-never": "ھەرگىز",
        "underline-default": "تېرە ياكى توركۆرگۈ كۆڭۈلدىكىسى",
        "editfont-style": "تەھرىرلەش رايونىنىڭ خەت نۇسخا ئۇسلۇبى:",
-       "editfont-default": "توركۆرگۈ كۆڭۈلدىكىسى",
        "editfont-monospace": "تەڭ كەڭلىكتىكى خەت نۇسخا",
        "editfont-sansserif": "Sans-serif خەت نۇسخا",
        "editfont-serif": "Serif خەت نۇسخا",
        "explainconflict": "سىز بۇ بەتنى تەھرىرلەشكە باشلىغاندا باشقىلار ئۆزگەرتتى.\nئۈستىدىكى تېكست رامكىسىدا كۆرۈنگىنى نۆۋەتتىكى بەتتىكى مەزمۇن.\nسىزنىڭ ئۆزگەرتىشىڭىز تۆۋەندىكى تېكست رامكىسىدا كۆرۈنىدۇ.\nئۆزگەرتىشىڭىزنى نۆۋەتتىكى مەزمۇنغا قوشۇڭ.\n'''پەقەت ''' ئۈستىدىكى تېكست رامكىسىدىكى مەزمۇن  \"بەت ساقلا\"نى چەككەندىن كېيىنلا ئاندىن ساقلىنىدۇ.",
        "yourtext": "تېكستىڭىز",
        "storedversion": "ساقلانغان ئۆزگەرتىلگەن نەشرى",
-       "nonunicodebrowser": "'''ئاگاھلاندۇرۇش: تور كۆرگۈڭىز يۇنىكودنى قوللىمايدۇ.'''\nبۇ جايدىكى خىزمەت رايونىدا بەتنى بىخەتەر ھالدا تەھرىرلىيەلەيسىز: غەيرى ASCII ھەرپلىرى ئون ئالتىلىك كودلىنىش بويىچە تېكست رامكىسىدا كۆرۈنىدۇ.",
        "editingold": "'''ئاگاھلاندۇرۇش: تەھرىرلەۋاتقىنىڭىز بۇ بەتنىڭ كونا نەشرى.'''\nئەگەر ئۇنى ساقلىسىڭىز، مەزكۇر نەشرىدىن كېيىنكى ھەر قانداق ئۆزگەرتىش يوقاپ كېتىدۇ.",
        "yourdiff": "پەرقلەر",
        "copyrightwarning": "دىققەت، سىزنىڭ {{SITENAME}} دىكى بارلىق تۆھپىلىرىڭىز $2 دا ئېلان قىلىنىدۇ دەپ قارىلىدۇ ($1 نىڭ تەپسىلاتىدىن كۆرۈڭ).\nئەگەر يازمىڭىزنىڭ خالىغانچە ئۆزگەرتىلىشى ياكى قايتا تارقىلىشىنى خالىمىسىڭىز، يوللىماڭ. <br />\n سىز يوللىغان مەزمۇننىڭ ئۆزىڭىزنىڭ يازغانلىقى ياكى يەرلىك تور دائىرىسىدىن ياكى ئەركىن مەنبەدىن كەلگەنلىكىگە كاپالەتلىك قىلىڭ.\n'''ئىجازەتكە ئېرىشمەي تۇرۇپ يوللىماڭ!'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بۇنىڭغىمۇ قاراڭ [[Special:NewPages|يېڭى بەتلەر تىزىملىگى]])",
        "recentchanges-submit": "كۆرسىتىش",
        "rcfilters-legend-heading": "<strong>قىسقارتىپ يېزىلىش تىزىملىكى:</strong>",
-       "rcfilters-other-review-tools": " <strong>باشقا تەكشۈرۈش قوراللىرى</strong>",
+       "rcfilters-other-review-tools": " باشقا تەكشۈرۈش قوراللىرى",
        "rcfilters-grouping-title": "گۇرۇپپىلىنىۋاتىدۇ",
        "rcfilters-activefilters": "قوزغىتىلىغان سۈزگۈچلەر",
        "rcfilters-days-title": "يېقىنقى بىر نەچچە كۈن",
        "block": "ئىشلەتكۈچىنى چەكلە",
        "unblock": "ئىشلەتكۈچىنى چەكلىمە",
        "blockip": "چەكلەنگەن ئىشلەتكۈچى",
-       "blockip-legend": "چەكلەنگەن ئىشلەتكۈچى",
        "blockiptext": "تۆۋەندىكى جەدۋەلنى ئىشلىتىپ بەلگىلىك IP ئادرېس ياكى ئىشلەتكۈچى ئاتىدىن كەلگەن يېزىش زىيارىتىنى چەكلەشكە بولىدۇ.\nپەقەت بۇزغۇنچىلىكنىڭ ئالدىنى ئېلىش ھەمدە [[{{MediaWiki:Policy-url}}|تاكتىكا]].\nسىغا ئۇيغۇن بولغان ئەھۋالدا ئاندىن بۇ مەشغۇلاتنى ئېلىپ بېرىشقا بولىدۇ. تۆۋەندە ئەمەلىي سەۋەب (مەسىلەن، بۇزۇۋېتىلگەن بەتتىن بىرنى نەقىل ئېلىش)تىن بىرنى كىرگۈزۈڭ.",
        "ipaddressorusername": "IP ئادرېس ياكى ئىشلەتكۈچى ئاتى:",
        "ipbexpiry": "مۇددىتى:",
index bb256be..1767ca2 100644 (file)
        "underline-never": "Ніколи",
        "underline-default": "Використовувати налаштування браузера",
        "editfont-style": "Тип шрифту в полі редагування:",
-       "editfont-default": "Шрифт від веб-оглядача",
        "editfont-monospace": "Шрифт зі сталою шириною",
        "editfont-sansserif": "Шрифт без засічок",
        "editfont-serif": "Шрифт із засічками",
        "anonpreviewwarning": "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''",
        "missingsummary": "'''Нагадування''': Ви не дали короткого опису змін.\nНатиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.",
        "selfredirect": "<strong>Попередження:</strong> Ви створюєте перенаправлення на цю ж сторінку.\nВи могли вказати невірну цільову сторінку, або ж редагуєте хибну сторінку.\nЯкщо Ви натиснете \"$1\" ще раз, перенаправлення буде створено.",
-       "missingcommenttext": "Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð²Ð²ÐµÐ´Ñ\96Ñ\82Ñ\8c Ð½Ð¸Ð¶Ñ\87е Ð²Ð°Ñ\88е Ð¿Ð¾Ð²Ñ\96домленнÑ\8f.",
+       "missingcommenttext": "Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð²Ð²ÐµÐ´Ñ\96Ñ\82Ñ\8c ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80.",
        "missingcommentheader": "<strong>Нагадування</strong>: Ви не вказали тему для цього коментаря.\nНатиснувши кнопку «$1» ще раз, Ви збережете редагування без заголовка.",
        "summary-preview": "Попередній перегляд опису редагування:",
        "subject-preview": "Попередній перегляд теми:",
        "timezoneregion-indian": "Індійський океан",
        "timezoneregion-pacific": "Тихий океан",
        "allowemail": "Дозволити електронну пошту від інших користувачів",
-       "email-blacklist-label": "Ð\97абоÑ\80ониÑ\82и Ñ\86им ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам Ð½Ð°Ð´Ñ\81илаÑ\82и Ð¼ÐµÐ½Ñ\96 Ð»Ð¸Ñ\81Ñ\82и Ð½Ð° ÐµÐ»ÐµÐºÑ\82Ñ\80оннÑ\83 Ð¿Ð¾Ñ\88Ñ\82Ñ\83:",
+       "email-blacklist-label": "Заборонити цим користувачам надсилати мені електронну пошту:",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Простори назв",
        "default": "за замовчуванням",
        "prefs-advancedwatchlist": "Розширені налаштування",
        "prefs-displayrc": "Налаштування показу",
        "prefs-displaywatchlist": "Налаштування показу",
-       "prefs-tokenwatchlist": "Ð\96еÑ\82он",
+       "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Різниці версій",
        "prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
        "prefswarning-warning": "Ви внесли в свої налаштування зміни, які ще не були збережені.\nЯкщо ви залишите цю сторінку, не натиснувши \"$1\", налаштування не будуть оновлені.",
        "recentchanges-legend": "Налаштування нових редагувань",
        "recentchanges-summary": "Відстеження останніх змін на сторінках {{grammar:genitive|{{SITENAME}}}}.",
        "recentchanges-noresult": "Немає змін за даний період, що відповідають цим критеріям.",
+       "recentchanges-timeout": "Час, відведений на цей пошук, вичерпано. Можливо, Ви захочете спробувати інші пошукові параметри.",
        "recentchanges-feed-description": "Відстежувати останні зміни у вікі в цьому потоці.",
        "recentchanges-label-newpage": "Цим редагуванням створена нова сторінка",
        "recentchanges-label-minor": "Це незначна зміна",
        "recentchanges-submit": "Показати",
        "rcfilters-tag-remove": "Вилучити «$1»",
        "rcfilters-legend-heading": "<strong>Список скорочень:</strong>",
-       "rcfilters-other-review-tools": "<strong>Інші інструменти перевірки</strong>",
+       "rcfilters-other-review-tools": "Інші інструменти перевірки",
        "rcfilters-group-results-by-page": "Групувати результати за сторінкою",
        "rcfilters-grouping-title": "Групування",
        "rcfilters-activefilters": "Активні фільтри",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|година|години|годин}}",
        "rcfilters-highlighted-filters-list": "Виділено: $1",
        "rcfilters-quickfilters": "Збережені фільтри",
-       "rcfilters-quickfilters-placeholder-title": "Ще немає збережених посилань",
+       "rcfilters-quickfilters-placeholder-title": "Ще немає збережених фільтрів",
        "rcfilters-quickfilters-placeholder-description": "Щоб зберегти Ваші налаштування фільтрів та використати їх пізніше, клацніть на іконку закладки в ділянці активних фільтрів нижче.",
        "rcfilters-savedqueries-defaultlabel": "Збережені фільтри",
        "rcfilters-savedqueries-rename": "Перейменувати",
        "rcfilters-filter-user-experience-level-unregistered-label": "Незареєстровані",
        "rcfilters-filter-user-experience-level-unregistered-description": "Користувачі, які не ввійшли в систему.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новачки",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Зареєстровані редактори, які мають менш ніж 10 редагувань і 4 дні активності.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Зареєстровані редактори, які мають менш ніж 10 редагувань або менш ніж 4 дні активності.",
        "rcfilters-filter-user-experience-level-learner-label": "Учні",
        "rcfilters-filter-user-experience-level-learner-description": "Зареєстровані редактори, рівень досвіду яких перебуває між «новачками» та «досвідченими користувачами».",
        "rcfilters-filter-user-experience-level-experienced-label": "Досвідчені користувачі",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
        "rcfilters-exclude-button-off": "Виключити вибране",
        "rcfilters-exclude-button-on": "Виключення вибраного",
-       "rcfilters-view-advanced-filters-label": "Розширені фільтри",
        "rcfilters-view-tags": "Редагування з мітками",
        "rcfilters-view-namespaces-tooltip": "Фільтрувати результати за простором назв",
        "rcfilters-view-tags-tooltip": "Фільтрувати результати, використовуючи мітки до редагувань",
        "rcfilters-view-return-to-default-tooltip": "Повернутися до головного меню фільтра",
+       "rcfilters-view-tags-help-icon-tooltip": "Дізнайтесь більше про редагування з мітками",
        "rcfilters-liveupdates-button": "Оновлення наживо",
        "rcfilters-liveupdates-button-title-on": "Вимкнути оновлення наживо",
        "rcfilters-liveupdates-button-title-off": "Показувати нові зміни одразу ж після їх здійснення",
        "uploaded-script-svg": " \t\t\nЗнайдений небезпечний елемент з підтримкою сценаріїв «$1» в завантаженому файлі SVG.",
        "uploaded-hostile-svg": " \t\nЗнайдений небезпечний CSS-код в елементі стилю завантаженого файлу SVG.",
        "uploaded-event-handler-on-svg": " \t\nУстановка атрибутів обробника подій <code>$1=\"$2\"</code> не дозволено для SVG-файлів.",
-       "uploaded-href-attribute-svg": "href-атрибути в SVG-файлах дозволені лише для посилання на цілі http:// або https://, знайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "<a> елементи можуть лише посилатися (href) на цілі типу data: (вбудований файл), http:// або https://, або ж fragment (#, same-document). Для інших елементів, таких як <image>, дозволені лише data: і fragment. Спробуйте вбудовувати зображення при експортуванні Вашого файлу SVG. Знайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "У завантаженому SVG-файлі знайдено href на небезпечні дані: ціль URI <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "У завантаженому SVG-файлі знайдено теґ «animate», який може змінювати href, використовуючи атрибут «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Встановлення  атрибутів обробника подій заблоковане, у завантаженому файлі SVG знайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "block": "Заблокувати користувача",
        "unblock": "Розблокувати користувача",
        "blockip": "Заблокувати {{GENDER:$1|користувача|користувачку}}",
-       "blockip-legend": "Блокування користувача",
        "blockiptext": "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.\nЦе слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].\nОбов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.\nВи можете заблокувати діапазони IP-адрес, використовуючи [https://uk.wikipedia.org/wiki/CIDR CIDR]-синтаксис. Максимально допустимий діапазон — /$1 для протоколу IPv4 та /$2 для протоколу IPv6.",
        "ipaddressorusername": "IP-адреса або ім'я користувача:",
        "ipbexpiry": "Термін:",
        "emaillink": "Надіслати повідомлення електронною поштою",
        "autoblocker": "Доступ заблоковано автоматично, тому що ви використовуєте ту саму адресу, що й \"[[User:$1|$1]]\". Причина блокування $1: \"$2\".",
        "blocklogpage": "Журнал блокувань",
-       "blocklog-showlog": "Цього користувача вже заблоковано. Далі наведено журнал блокувань:",
-       "blocklog-showsuppresslog": "Цього користувача вже заблоковано і приховано. Далі наведено журнал приховань:",
+       "blocklog-showlog": "{{GENDER:$1|Цього користувача|Цю користувачку}} вже блокували у минулому. Далі наведено журнал блокувань:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Цього користувача|Цю користувачку}} вже блокували і приховували в минулому. Далі наведено журнал приховань:",
        "blocklogentry": "заблокував [[$1]] на термін $2 $3",
        "reblock-logentry": "переблокував [[$1]] на термін $2 $3",
        "blocklogtext": "Журнал дій щодо блокування та розблокування користувачів.\nАвтоматично заблоковані IP-адреси тут не вказуються. \nДив. [[Special:BlockList|перелік чинних обмежень]] .",
        "ipb_blocked_as_range": "Помилка: IP-адреса $1 була заблокована не напряму і не може бути розблокована. Однак, вона належить до заблокованого діапазону $2, який можна розблокувати.",
        "ip_range_invalid": "Неприпустимий діапазон IP-адрес.",
        "ip_range_toolarge": "Блокування діапазонів, більших за /$1, не дозволені.",
+       "ip_range_exceeded": "Діапазон IP-адрес перевищує свій максимальний діапазон. Дозволений діапазон: /$1.",
+       "ip_range_toolow": "Діапазони IP-адрес ефективно не дозволені.",
        "proxyblocker": "Блокування проксі",
        "proxyblockreason": "Ваша IP-адреса заблокована, тому що це — відкритий проксі.\nБудь ласка, зв'яжіться з вашим Інтернет-провайдером чи службою підтримки й повідомте їм про цю серйозну проблему безпеки.",
        "sorbs": "DNSBL",
        "delete_and_move_text": "Сторінка з назвою [[:$1|«$1»]] вже існує.\nБажаєте вилучити її для можливості перейменування?",
        "delete_and_move_confirm": "Так, вилучити для перейменування",
        "delete_and_move_reason": "Вилучена для можливості перейменування сторінки «[[$1]]»",
-       "selfmove": "Ð\9dеможливо Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83: Ð¿Ð¾Ñ\82оÑ\87на Ð¹ Ð½Ð¾Ð²Ð° Ð½Ð°Ð·Ð²Ð¸ Ñ\81Ñ\82оÑ\80Ñ\96нки Ð·Ð±Ñ\96гаÑ\8eÑ\82Ñ\8cÑ\81Ñ\8f.",
+       "selfmove": "ЦÑ\8f Ð½Ð°Ð·Ð²Ð° Ñ\94 Ñ\96денÑ\82иÑ\87ноÑ\8e Ð· Ð¿Ð¾Ñ\82оÑ\87ноÑ\8e;\nнеможливо Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð½Ð° Ð¿Ð¾Ñ\82оÑ\87нÑ\83 Ð½Ð°Ð·Ð²Ñ\83.",
        "immobile-source-namespace": "Не можна перейменовувати сторінки з простору назв «$1»",
        "immobile-target-namespace": "Не можна перейменовувати сторінки до простору назв «$1»",
        "immobile-target-namespace-iw": "Інтервікі-посилання не підходить для перейменування сторінки.",
index 29ef5f4..27fd78b 100644 (file)
@@ -32,7 +32,9 @@
                        "قیصرانی",
                        "Junaid Ahmad",
                        "Abuaneeqa",
-                       "Saraiki"
+                       "Saraiki",
+                       "BukhariSaeed",
+                       "Zainab Meher"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "tog-shownumberswatching": "دیکھنے والے صارفین کی تعداد دکھائیں",
        "tog-oldsig": "آپ کے موجودہ دستخط:",
        "tog-fancysig": "سادہ دستخط (بلا خودکار ربط)",
-       "tog-uselivepreview": "راست Ù\86Ù\85ائش Ø§Ø³ØªØ¹Ù\85اÙ\84 Ú©Ø±یں",
+       "tog-uselivepreview": "صÙ\81Ø­Û\81 ØªØ§Ø²Û\81 Ú©Û\8cÛ\92 Ø¨ØºÛ\8cر Ù\86Ù\85ائش Ø¯Ú©Ú¾Ø§Ø¦یں",
        "tog-forceeditsummary": "خلاصہ ترمیم خالی چھوڑنے پر مجھے آگاہ کریں",
        "tog-watchlisthideown": "زیرِنظر فہرست سے میری ترامیم چھپائیں",
        "tog-watchlisthidebots": "زیرِنظر فہرست سے روبہ جاتی ترامیم چھپائیں",
        "tog-watchlisthideminor": "زیرِنظر فہرست سے معمولی ترامیم چھپائیں",
        "tog-watchlisthideliu": "زیرِنظر فہرست سے داخلِ نوشتہ شدہ صارفین کی ترامیم چھپائیں",
        "tog-watchlistreloadautomatically": "کسی مقطار میں تبدیلی کے بعد زیر نظر فہرست کو خودکار طور پر تازہ کریں (جاوا اسکرپٹ درکار)",
+       "tog-watchlistunwatchlinks": "زیر نظر فہرست کے اندراجات میں زیر نظر کرنے اور ہٹانے کے براہ راست روابط شامل کریں (اس سہولت کے لیے جاوا اسکرپٹ درکار ہے)",
        "tog-watchlisthideanons": "زیرِنظر فہرست سے نامعلوم صارفین کی ترامیم چھپائیں",
        "tog-watchlisthidepatrolled": "زیرِنظر فہرست سے مراجع شدہ ترامیم چھپائیں",
        "tog-watchlisthidecategorization": "صفحات کی زمرہ بندی چھپائیں",
        "redirectedfrom": "($1 سے رجوع مکرر)",
        "redirectpagesub": "رجوع مکرر",
        "redirectto": "رجوعِ مکرر از:",
-       "lastmodifiedat": "اس صفحہ میں آخری بار مورخہ $1ء کو $2 بجے ترمیم کی گئی۔",
+       "lastmodifiedat": "اس صفحہ میں آخری بار مورخہ $1 کو $2 بجے ترمیم کی گئی۔",
        "viewcount": "اِس صفحہ تک {{PLURAL:$1|ایک‌بار|$1 مرتبہ}} رسائی کی گئی",
        "protectedpage": "محفوظ شدہ صفحہ",
        "jumpto": "یہاں جائیں:",
        "anonpreviewwarning": "<em>آپ داخل نہیں ہیں، چنانچہ تبدیلیاں محفوظ کرنے کی صورت میں اس صفحہ کا تاریخچہ آپ کا آئی پی پتا محفوظ کر لے گا۔</em>",
        "missingsummary": "'''انتباہ:''' آپ نے ترمیمی خلاصہ مہیّا نہیں کیا.\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کی ترمیم بغیر کسی خلاصہ کے محفوظ ہوجائے گی.",
        "selfredirect": "<strong>انتباہ:</strong> آپ پیش نظر صفحہ کو خود اسی کی جانب رجوع مکرر کر رہے ہیں۔\nشاید آپ نے رجوع مکرر کا غلط ہدف درج کیا ہے یا غلط صفحہ میں ترمیم کر رہے ہیں۔\nتاہم اگر آپ «$1» پر دوبارہ کلک کریں تو بہرصورت اس رجوع مکرر کو بنا دیا جائے گا۔",
-       "missingcommenttext": "براہِ کرم! تبصرہ نیچے درج کیجئے.",
+       "missingcommenttext": "براہ کرم اپنا تبصرہ درج کریں۔",
        "missingcommentheader": "<strong>یاددہانی:</strong>  آپ نے اِس تبصرہ کیلئے عنوان یا شہ سرخی مہیّا نہیں کی ہے۔\nاگر آپ نے \"$1\" کا بٹن دوبارہ دبایا تو آپ کا تبصرہ بغیر کسی عنوان کے محفوظ ہوجائے گا۔",
        "summary-preview": "خلاصہِ ترمیم کی نمائش:",
        "subject-preview": "عنوان/شہ سرخی کی نمائش:",
        "page_first": "پہلا",
        "page_last": "آخری",
        "histlegend": "انتخاب: مختلف نسخوں کا موازنہ کرنے کے لیے ریڈیو خانوں کو نشان زد کر کے نیچے دیے گئے بٹن پر کلک کریں۔\n\n'''علامات:'''\n\n(رائج) = موجودہ متن سے اختلاف، (سابقہ) = گزشتہ متن سے اختلاف، م = معمولی ترمیم",
-       "history-fieldset-title": "تاریخ ملاحظہ کریں",
-       "history-show-deleted": "صرف حذف شدہ",
+       "history-fieldset-title": "نسخوں کی تلاش",
+       "history-show-deleted": "صرف حذف شدہ نسخہ",
        "histfirst": "قدیم ترین",
        "histlast": "تازہ ترین",
        "historysize": "({{PLURAL:$1|1 بائٹ|$1 بائٹ}})",
        "searchprofile-advanced-tooltip": "حسب مرضی نام فضا میں تلاش کریں",
        "search-result-size": "$1 ({{PLURAL:$2|1 لفظ|$2 الفاظ}})",
        "search-result-category-size": "{{PLURAL:$1|1 رُکن|$1 اراکین}} ({{PLURAL:$2|1 ذیلی زمرہ|$2 ذیلی زمرہ جات}}، {{PLURAL:$3|1 فائل|$3 فائلیں}})",
-       "search-redirect": "(رجوع مکرر $1)",
+       "search-redirect": "($1 سے رجوع مکرر)",
        "search-section": "(قطعہ $1)",
        "search-category": "(زمرہ $1)",
        "search-file-match": "فائل مواد سے ملتا ہے",
        "search-suggest": "کیا آپ کا مطلب تھا: $1",
        "search-rewritten": "$1 کے نتائج کی نمائش، اس کی بجائے آپ $2 کو تلاش کر سکتے ہیں۔",
-       "search-interwiki-caption": "ساتھی منصوبے",
+       "search-interwiki-caption": "ساتھی منصوبوں سے اخذ کردہ نتائج",
        "search-interwiki-default": "$1 نتائج:",
        "search-interwiki-more": "(مزید)",
        "search-interwiki-more-results": "مزید نتائج",
        "timezoneregion-europe": "یورپ",
        "timezoneregion-indian": "بحر ہند",
        "timezoneregion-pacific": "بحر الکاہل",
-       "allowemail": "دوسرے صارفین کو برقی خظ لکھنے کا اختیار دیں",
+       "allowemail": "دوسرے صارفین کو برقی خظ بھیجنے کا اختیار دیں",
+       "email-blacklist-label": "ان صارفین کو برقی خط ارسال کرنے سے باز رکھیں:",
        "prefs-searchoptions": "تلاش",
        "prefs-namespaces": "جائے نام",
        "default": "طے شدہ",
        "gender-unknown": "اگر ممکن ہو تو آپ کے تذکرہ کے وقت سافٹ ویئر غیر جانبدار جنسی الفاظ استعمال کرے گا",
        "gender-male": "مرد",
        "gender-female": "عورت",
-       "prefs-help-gender": "اس ØªØ±Ø¬Û\8cØ­ Ú©Û\8c ØªØ±ØªÛ\8cب Ø§Ø®ØªÛ\8cارÛ\8c Û\81Û\92Û\94\nآپ Ø§Ù\88ر Ø¯Û\8cگر ØµØ§Ø±Ù\81Û\8cÙ\86 Ú©Û\92 Ù\84Û\8cÛ\92 Ø§Ø² Ø±Ù\88ئÛ\92 Ù\82Ù\88اعد Ù\85Ù\86اسب Ø¬Ù\86سی الفاظ کے انتخاب کے لیے سافٹ ویئر اس قدر کو استعمال کرتا ہے۔\nیہ معلومات عام ہوگی۔",
+       "prefs-help-gender": "اس ØªØ±Ø¬Û\8cØ­ Ú©Û\8c ØªØ±ØªÛ\8cب Ø§Ø®ØªÛ\8cارÛ\8c Û\81Û\92Û\94\nآپ Ø§Ù\88ر Ø¯Û\8cگر ØµØ§Ø±Ù\81Û\8cÙ\86 Ú©Û\92 Ù\84Û\8cÛ\92 Ø§Ø² Ø±Ù\88ئÛ\92 Ù\82Ù\88اعد Ù\85Ù\86اسب ØµÙ\86Ù\81ی الفاظ کے انتخاب کے لیے سافٹ ویئر اس قدر کو استعمال کرتا ہے۔\nیہ معلومات عام ہوگی۔",
        "email": "برقی خط",
        "prefs-help-realname": "حقیقی نام اختیاری ہے۔\nاگر آپ درج کریں تو اسے آپ کے کاموں کو آپ سے منسوب کرنے کے لیے استعمال کیا جائے گا۔",
        "prefs-help-email": "برقی ڈاک پتے کا اندراج اختیاری ہے، عموماً اس کی ضرورت اس وقت پڑتی ہے جب آپ اپنا پاس ورڈ بھول چکے ہوں اور نیا پاس ورڈ رکھنا چاہتے ہوں۔",
        "prefs-editor": "خانہ ترمیم",
        "prefs-preview": "نمائش",
        "prefs-advancedrc": "اضافی اختیارات",
+       "prefs-opt-out": "اصلاحات سے گریز",
        "prefs-advancedrendering": "اضافی اختیارات",
        "prefs-advancedsearchoptions": "اعلی اختیارات",
        "prefs-advancedwatchlist": "اضافی اختیارات",
        "saveusergroups": "حلقہ ہائے {{GENDER:$1|صارف}} کو محفوظ کریں",
        "userrights-groupsmember": "رکنِ:",
        "userrights-groupsmember-auto": "اعتباری صارف در",
-       "userrights-groups-help": "آپ ان حلقوں میں تبدیلی کرسکتے ہیں جن سے صارف متعلق ہے: \n* نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے ہے۔ \n* غیر نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے نہیں ہے۔ \n* یہ * علامت اس بات کا اشارہ ہے کہ آپ اس گروہ کو نہیں ہٹا سکتے جسے ایک مرتبہ آپ نے شامل کردیا ہو، یا اس کے بر عکس۔",
+       "userrights-groups-help": "آپ ان حلقوں میں تبدیلی کرسکتے ہیں جن سے صارف متعلق ہے: \n* نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے ہے۔ \n* غیر نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے نہیں ہے۔ \n* یہ # علامت اس بات کا اشارہ ہے کہ آپ اس گروہ کو نہیں ہٹا سکتے جسے ایک مرتبہ آپ نے شامل کردیا ہو۔",
        "userrights-reason": "وجہ:",
        "userrights-no-interwiki": "دوسرے ویکیوں پر حقوقِ صارف میں ترمیم کی آپ کو اجازت نہیں ہے.",
        "userrights-nodatabase": "ڈیٹابیس $1 موجود نہیں یا مقامی نہیں۔",
        "userrights-expiry-current": "وقت اختتام $1",
        "userrights-expiry-none": "لامحدود",
        "userrights-expiry": "اختتام:",
+       "userrights-expiry-existing": "موجودہ وقت اختتام: $3، $2",
        "userrights-expiry-othertime": "دیگر وقت:",
+       "userrights-expiry-options": "1 دن:1 day,1 ہفتہ:1 week,1 مہینہ:1 month,3 مہینے:3 months,6 مہینے:6 months,1 سال:1 year",
+       "userrights-invalid-expiry": "گروہ «$1» کا وقت اختتام درست نہیں ہے۔",
+       "userrights-expiry-in-past": "گروہ «$1» کا وقت اختتام بیت چکا ہے۔",
        "userrights-conflict": "اختیارات کی تبدیلی میں تنازع! براہ کرم نظر ثانی کریں اور اپنی تبدیلیوں کی تصدیق کریں۔",
        "group": "حلقہ:",
        "group-user": "صارفین",
        "grant-basic": "بنیادی اختیارات",
        "grant-viewdeleted": "حذف شدہ فائلوں اور صفحات کا معائنہ",
        "grant-viewmywatchlist": "اپنی زیرنظر فہرست کا معائنہ",
+       "grant-viewrestrictedlogs": "ممنوع اندراجات نوشتہ دیکھیں",
        "newuserlogpage": "نوشتۂ آمد صارف",
        "newuserlogpagetext": "یہ نۓ صارفوں کی آمد کا نوشتہ ہے",
        "rightslog": "نوشتہ صارفی اختیارات",
        "action-writeapi": "اے پی آئی تحریر کے استعمال کرنے",
        "action-delete": "یہ صفحہ حذف کرنے",
        "action-deleterevision": "یہ نسخہ حذف کرنے",
+       "action-deletelogentry": "نوشتے کے اندراجات کو حذف کریں",
        "action-deletedhistory": "اس صفحہ کا حذف شدہ تاریخچہ دیکھیں",
        "action-browsearchive": "حذف شدہ صفحات میں تلاش کرنے",
        "action-undelete": "یہ صفحہ بحال کرنے",
        "action-userrights-interwiki": "دوسری ویکیوں پر صارف کے اختیارات میں ترمیم کرنے",
        "action-siteadmin": "ڈیٹابیس کو مقفل کرنے یا کھولنے",
        "action-sendemail": "برقی خطوط روانہ کرنے",
+       "action-editmyoptions": "اپنی ترجیحات میں ترمیم کرنے",
        "action-editmywatchlist": "اپنی زیرنظر فہرست میں ترمیم کرنے",
        "action-viewmywatchlist": "اپنی زیر نظر فہرست دیکھنے",
        "action-viewmyprivateinfo": "اپنی نجی معلومات دیکھنے",
        "recentchanges-legend-heading": "<strong>اختصارات:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (نیز [[Special:NewPages|جدید صفحات کی فہرست]]) ملاحظہ فرمائیں",
        "recentchanges-submit": "دکھائیں",
+       "rcfilters-tag-remove": "حذف «$1»",
        "rcfilters-legend-heading": "<strong>اختصارات کی فہرست:</strong>",
-       "rcfilters-other-review-tools": "<strong>نظرثانی کے دیگر آلات</strong>",
+       "rcfilters-other-review-tools": "نظرثانی کے دیگر آلات",
        "rcfilters-group-results-by-page": "نتائج گروہ بندی بلحاظ صفحہ",
        "rcfilters-grouping-title": "گروہ بندی",
        "rcfilters-activefilters": "فعال فلٹر",
        "rcfilters-days-title": "حالیہ دنوں کی تعداد",
        "rcfilters-hours-title": "حالیہ گھنٹوں کی تعداد",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|دن}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|گھنٹہ|گھنٹے}}",
+       "rcfilters-highlighted-filters-list": "نمایاں: $1",
        "rcfilters-quickfilters": "محفوظ فلٹر",
-       "rcfilters-quickfilters-placeholder-title": "اب تک کوئی ربط محفوظ نہیں ہوا ہے",
+       "rcfilters-quickfilters-placeholder-title": "اب تک کوئی فلٹر محفوظ نہیں ہوا ہے",
        "rcfilters-quickfilters-placeholder-description": "اپنی فلٹر ترتیبات کو محفوظ اور انہیں دوبارہ استعمال کرنے کے لیے نیچے فعال فلٹر خانے میں موجود بک مارک کی علامت پر کلک کریں۔",
        "rcfilters-savedqueries-defaultlabel": "محفوظ فلٹر",
+       "rcfilters-savedqueries-rename": "نام کی تبدیلی",
+       "rcfilters-savedqueries-setdefault": "طے شدہ طور پر محفوظ کریں",
+       "rcfilters-savedqueries-unsetdefault": "طے شدہ طور پر ہٹائیں",
+       "rcfilters-savedqueries-remove": "ہٹائیں",
+       "rcfilters-savedqueries-new-name-label": "نام",
+       "rcfilters-savedqueries-new-name-placeholder": "فلٹر کا مقصد واضح کریں",
+       "rcfilters-savedqueries-apply-label": "فلٹر بنائیں",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "طے شدہ فلٹر بنائیں",
+       "rcfilters-savedqueries-cancel-label": "منسوخ کریں",
+       "rcfilters-savedqueries-add-new-title": "فلٹر کی موجودہ ترتیبات محفوظ کریں",
+       "rcfilters-savedqueries-already-saved": "یہ فلٹرز پھلے سے محفوظ کر دیۓ گۓ ہیں۔نۓ فحفوظ شدہ فلٹرز بنانے کے لیۓاپنی ترکیب تبدیل کریں۔",
+       "rcfilters-restore-default-filters": "طے شدہ فلٹر بحال کریں",
+       "rcfilters-clear-all-filters": "تمام فلٹروں کو ہٹائیں",
        "rcfilters-show-new-changes": "تازہ ترین تبدیلیاں دیکھیں",
-       "rcfilters-search-placeholder": "حالیہ تبدیلیوں کا فلٹر (تلاش یا تحریر کریں)",
+       "rcfilters-search-placeholder": "تبدیلیوں کو فلٹر کریں (فلٹر کا نام جاننے کے لیے مینو استعمال کریں یا تلاش کریں)",
+       "rcfilters-invalid-filter": "نادرست فلٹر",
+       "rcfilters-empty-filter": "کوئی فلٹر فعال نہیں ہے چنانچہ تمام شراکتیں دکھائی جا رہی ہیں۔",
        "rcfilters-filterlist-title": "فلٹروں کی فہرست",
+       "rcfilters-filterlist-whatsthis": "یہ کام کیسے کرتے ہیں؟",
        "rcfilters-filterlist-feedbacklink": "ان (نئے) فلٹر آلات کے متعلق ہمیں اپنے تاثرات سے آگاہ کریں",
        "rcfilters-highlightbutton-title": "نتائج کو نمایاں کریں",
+       "rcfilters-highlightmenu-title": "رنگ پسند کریں",
+       "rcfilters-highlightmenu-help": "اس خاصیت کو نمایاں کرنے کے لیے کوئی رنگ پسند کریں",
+       "rcfilters-filterlist-noresults": "کوئی فلٹر نہیں ملا",
+       "rcfilters-noresults-conflict": "کوئی نتیجہ برآمد نہیں ہوا کیونکہ تلاش کی کسوٹی باہم متعارض ہے",
+       "rcfilters-state-message-subset": "یہ فلٹر غیر موثر ہے کیونکہ اس کے نتائج ذیل کے زیادہ عمومی {{PLURAL:$2|فلٹر|فلٹروں}} میں شامل ہیں (اسے نمایاں کرنے کی کوشش کریں): $1",
+       "rcfilters-state-message-fullcoverage": "اس گروہ میں تمام فلٹروں کو منتخب کرنے کا کوئی فائدہ نہیں، لہذا یہ فلٹر غیر موثر ہے۔ گروہ میں یہ شامل ہیں: $1",
        "rcfilters-filtergroup-authorship": "ویکی نویسی",
        "rcfilters-filter-editsbyself-label": "آپ کی تبدیلیاں",
        "rcfilters-filter-editsbyself-description": "آپ کی اپنی شراکتیں",
        "rcfilters-filter-bots-description": "ترامیم بذریعہ خودکار آلات",
        "rcfilters-filter-humans-label": "دستی (غیر روبہ جاتی)",
        "rcfilters-filter-humans-description": "ترامیم بدست انسانی",
+       "rcfilters-filtergroup-reviewstatus": "نظر ثانی کی صورت حال",
+       "rcfilters-filter-patrolled-label": "مراجعت شدہ",
+       "rcfilters-filter-patrolled-description": "بطور مراجعت شدہ نشان زد ترامیم",
+       "rcfilters-filter-unpatrolled-label": "غیر مراجعت شدہ",
+       "rcfilters-filter-unpatrolled-description": "غیر مراجعت شدہ نشان زد ترامیم",
        "rcfilters-filtergroup-significance": "اہمیت",
        "rcfilters-filter-minor-label": "معمولی ترامیم",
        "rcfilters-filter-minor-description": "ترامیم جنہیں صارفین نے معمولی قرار دیا",
+       "rcfilters-filter-major-label": "معمولی ترامیم کے سوا",
        "rcfilters-filter-major-description": "ترامیم جنہیں معمولی قرار نہیں دیا گیا",
        "rcfilters-filtergroup-watchlist": "زیر نظر صفحات",
+       "rcfilters-filter-watchlist-watched-label": "زیر نظر فہرست میں",
        "rcfilters-filter-watchlist-watched-description": "آپ کی زیر نظر فہرست کے صفحات میں ہونے والی تبدیلیاں۔",
+       "rcfilters-filter-watchlist-watchednew-label": "زیر نظر فہرست کی نئی تبدیلیاں",
        "rcfilters-filter-watchlist-watchednew-description": "آپ کے ان زیر نظر صفحات کی تبدیلیاں جنہیں آپ نے تبدیل ہونے کے بعد نہیں دیکھا۔",
        "rcfilters-filter-watchlist-notwatched-label": "زیر نظر فہرست میں نہیں",
        "rcfilters-filter-watchlist-notwatched-description": "اپنے زیر نظر صفحات کی تبدیلیوں کے سوا سب کچھ",
+       "rcfilters-filtergroup-watchlistactivity": "زیر نظر فہرست کی سرگرمی",
+       "rcfilters-filter-watchlistactivity-unseen-label": "نادیدہ تبدیلیاں",
        "rcfilters-filter-watchlistactivity-unseen-description": "ان صفحات کی تبدیلیاں جنہیں آپ نے تبدیل ہونے کے بعد نہیں دیکھا۔",
+       "rcfilters-filter-watchlistactivity-seen-label": "دیدہ تبدیلیاں",
        "rcfilters-filter-watchlistactivity-seen-description": "ان صفحات کی تبدیلیاں جنہیں آپ نے تبدیل ہونے کے بعد دیکھا ہے۔",
        "rcfilters-filtergroup-changetype": "تبدیلی کی نوعیت",
        "rcfilters-filter-pageedits-label": "صفحاتی ترامیم",
        "rcfilters-filter-categorization-description": "زمروں میں شامل یا ان سے حذف کیے جانے والے صفحات کے نوشتے",
        "rcfilters-filter-logactions-label": "درج نوشتہ اقدامات",
        "rcfilters-filter-logactions-description": "انتظامی اقدامات، تخلیق کھاتہ، صفحات کی حذف شدگی، اپلوڈ وغیرہ۔۔۔",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "«معمولی ترامیم» والا فلٹر «تبدیلی کی نوعیت» والے ایک یا زائد فلٹروں سے متعارض ہو جاتا ہے کیونکہ کچھ مخصوص قسم کی تبدیلیاں \"معمولی\" نہیں کہلاتیں۔ یہ متعارض فلٹر اوپر موجود «فعال فلٹر» کے تحت نمایاں کر دیے گئے ہیں۔",
+       "rcfilters-hideminor-conflicts-typeofchange": "مخصوص قسم کی تبدیلیاں \"معمولی\" نہیں کہلاتیں، اس صورت میں یہ فلٹر درج ذیل «تبدیلی کی نوعیت» فلٹروں سے متعارض ہو جاتا ہے: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "اس نوعیت کی تبدیلی والا فلٹر «معمولی ترامیم» والے فلٹر سے متعارض ہو جاتا ہے؛ کیونکہ کچھ مخصوص قسم کی تبدیلیاں \"معمولی\" نہیں کہلاتیں۔",
        "rcfilters-filtergroup-lastRevision": "تازہ ترین نسخے",
+       "rcfilters-filter-lastrevision-label": "تازہ ترین نسخہ",
        "rcfilters-filter-lastrevision-description": "صفحے کی محض حالیہ ترین تبدیلی",
        "rcfilters-filter-previousrevision-label": "تازہ ترین نسخہ کے سوا",
        "rcfilters-filter-previousrevision-description": "«تازہ ترین نسخہ» کے سوا تمام تبدیلیاں",
        "rcfilters-filter-excluded": "مستثنیٰ شدہ",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:نہیں</strong> $1",
        "rcfilters-exclude-button-off": "منتخب شدہ کو مستثنیٰ کریں",
-       "rcfilters-view-advanced-filters-label": "اضافی فلٹر",
+       "rcfilters-exclude-button-on": "منتخب شدہ مستثنی ہیں",
        "rcfilters-view-tags": "ٹیگ شدہ ترامیم",
+       "rcfilters-view-namespaces-tooltip": "فلٹر کے نتائج بلحاظ نام فضا",
+       "rcfilters-view-tags-tooltip": "ترمیمی ٹیگ کے ذریعہ نتائج کو فلٹر کریں",
+       "rcfilters-view-return-to-default-tooltip": "فلٹر کے مرکزی مینو میں واپس جائیں",
        "rcfilters-view-tags-help-icon-tooltip": "ٹیگ شدہ ترامیم کے متعلق مزید معلومات",
+       "rcfilters-liveupdates-button": "راست تبدیلیاں",
+       "rcfilters-liveupdates-button-title-on": "راست تبدیلیاں بند کریں",
+       "rcfilters-liveupdates-button-title-off": "نئی تبدیلیاں ہوتے ہی دکھائیں",
+       "rcfilters-watchlist-markseen-button": "تمام تبدیلیوں کو بطور دیدہ نشان زد کریں",
        "rcfilters-watchlist-edit-watchlist-button": "اپنی زیرنظر صفحات کی فہرست ترمیم کیجیے",
        "rcfilters-watchlist-showupdated": "تبدیلیوں کے رونما ہونے کے بعد جن صفحات کو آپ نے نہیں دیکھا وہ <strong>جلی</strong> حرفوں میں ٹھوس علامتوں کے ساتھ نظر آئیں گے۔",
+       "rcfilters-preference-label": "حالیہ تبدیلیوں کا اصلاح شدہ نسخہ چھپائیں",
+       "rcfilters-preference-help": "سنہ 2017ء کے انٹرفیس کو واپس لایا گیا ہے اور تمام آلات کو شامل کیا گیا ہے۔",
        "rcnotefrom": "ذیل میں <strong>$2</strong> سے کی گئی {{PLURAL:$5|تبدیلی|تبدیلیاں}} <strong>$1</strong> تک دکھائی جا رہی ہیں۔",
+       "rclistfromreset": "انتخاب تاریخ کی ترتیب نو",
        "rclistfrom": "$2، $3ء سے ہونے والی نئی تبدیلیاں دکھائیں",
        "rcshowhideminor": "معمولی ترامیم $1",
        "rcshowhideminor-show": "دکھائیں",
        "enotif_lastdiff": "اس تبدیلی کو دیکھنے کے لیے $1 کو ملاحظہ فرمائیں۔",
        "enotif_anon_editor": "گمنام صارف $1",
        "enotif_body": "جناب $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nخلاصہ ترمیم: $PAGESUMMARY $PAGEMINOREDIT\n\nصارف سے رابطہ کریں:\nبذریعہ برقی خط: $PAGEEDITOR_EMAIL\nبذریعہ ویکی: $PAGEEDITOR_WIKI\n\nاس صفحہ میں آئندہ ہونے والی تبدیلیوں کی اطلاعات آپ کو موصول نہیں ہوگی جب تک آپ لاگ ان ہو کر اس صفحہ کو ملاحظہ نہ کر لیں۔ نیز آپ اپنی زیر نظر فہرست میں موجود تمام صفحات سے اطلاعی علامتیں بھی ختم کر سکتے ہیں۔\n\nفقط\nآپ کا خادم، {{SITENAME}} نظام اطلاعات\n\n--\nاطلاعات بذریعہ برقی خط کی ترتیبات تبدیل کرنے کے لیے\n{{canonicalurl:{{#special:Preferences}}}} ملاحظہ فرمائیں\n\nاپنی زیر نظر فہرست کی ترتیبات میں تبدیلی کے لیے\n{{canonicalurl:{{#special:EditWatchlist}}}} ملاحظہ فرمائیں\n\nاس صفحہ کو اپنی زیر نظر فہرست سے حذف کرنے کے لیے\n$UNWATCHURL ملاحظہ فرمائیں\n\nتجاویز اور مزید معاونت کے لیے ملاحظہ فرمائیں:\n$HELPPAGE",
+       "enotif_minoredit": "یہ ایک معمولی ترمیم ہے",
        "created": "بنا دیا گیا",
        "changed": "تبدیل کردیاگیا",
        "deletepage": "حذف کریں",
        "unblocked-id": "پابندی نمبر $1 سے پابندی ہٹا دی گئی۔",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] سے پابندی ہٹا دی گئی۔",
        "blocklist": "ممنوع صارفین",
+       "autoblocklist": "خودکار پابندیاں",
+       "autoblocklist-submit": "تلاش",
        "ipblocklist": "ممنوع صارفین",
        "ipblocklist-legend": "ممنوع صارف کو تلاش کریں",
        "blocklist-userblocks": "کھاتے کی پابندیاں چھپائیں",
        "pageinfo-length": "صفحہ کا حجم (بائٹ میں)",
        "pageinfo-article-id": "صفحہ کی شناخت",
        "pageinfo-language": "زبان",
+       "pageinfo-language-change": "تبدیلی",
        "pageinfo-content-model": "انداز متن",
        "pageinfo-content-model-change": "تبدیل کریں",
        "pageinfo-robot-policy": "روبوں کی فہرست سازی",
        "pageinfo-category-pages": "تعداد صفحات",
        "pageinfo-category-subcats": "تعداد ذیلی زمرہ جات",
        "pageinfo-category-files": "فائلوں کی تعداد",
+       "pageinfo-user-id": "صارف آئی ڈی",
        "markaspatrolleddiff": "بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext-file": "فائل کے اس نسخے کو مراجعت شدہ نشان زد کریں",
        "patrol-log-header": "ذیل میں مراجعت شدہ ترامیم کا نوشتہ ہے۔",
        "log-show-hide-patrol": "$1 نوشتہ مراجعت",
        "log-show-hide-tag": "$1 نوشتہ ٹیگ",
+       "confirm-markpatrolled-button": "ٹھیک ہے",
        "deletedrevision": "حذف شدہ پرانی ترمیم $1۔",
        "filedeleteerror-short": "فائل حذف کاری میں نقص: $1",
        "filedeleteerror-long": "فائل حذف کرنے کے دوران میں نقص واقع ہوا:\n\n$1",
        "newimages-summary": "اس خصوصی صفحہ میں تازہ ترین اپلوڈ شدہ فائلوں کی فہرست موجود ہے۔",
        "newimages-legend": "مقطار",
        "newimages-label": "فائل کا نام (یا اس کا جزو):",
+       "newimages-user": "آئی پی پتہ یا صارف نام",
        "newimages-showbots": "روبہ جات کے ذریعہ اپلوڈ کردہ فائلیں دکھائیں",
        "newimages-hidepatrolled": "مراجعت شدہ اپلوڈ چھپائیں",
+       "newimages-mediatype": "میڈیا قسم:",
        "noimages": "دیکھنے کیلئے کچھ نہیں ہے۔",
        "ilsubmit": "تلاش",
        "bydate": "بلحاظ تاریخ",
        "version-license-not-found": "اس توسیع کے اجازت نامے سے متعلق تفصیلی معلومات دستیاب نہین ہوئی۔",
        "version-credits-title": "$1 کے انتسابات",
        "version-credits-not-found": "اس توسیع کے انتسابات سے متعلق تفصیلی معلومات دستیاب نہین ہوئی۔",
-       "version-poweredby-credits": "پیش نظر ویکی <strong>[https://www.mediawiki.org/ میڈیاویکی]</strong> کی تقویت یافتہ ہے، جملہ حقوق محفوظ © 2001-$1 $2 بنام",
+       "version-poweredby-credits": "پیش نظر ویکی <strong>[https://www.mediawiki.org/ میڈیاویکی سافٹ ویئر]</strong> کی تقویت یافتہ ہے۔ جملہ حقوق محفوظ © 2001-$1 $2",
        "version-poweredby-others": "دیگر",
        "version-poweredby-translators": "translatewiki.net کے مترجمین",
        "version-credits-summary": "ہم درج ذیل اشخاص کی [[Special:Version|میڈیاویکی]] کی تعمیر میں شرکت کرنے کا اعتراف کرتے ہیں۔",
        "version-entrypoints": "یوآرایل کا نقطہ آمد",
        "version-entrypoints-header-entrypoint": "نقطہ آمد",
        "version-entrypoints-header-url": "یوآرایل",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath راہ مضمون]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath راہ اسکرپٹ]",
        "version-libraries": "نصب شدہ کتب خانے",
        "version-libraries-library": "کتب خانہ",
        "version-libraries-version": "نسخہ",
        "fileduplicatesearch-noresults": "«$1» کے نام سے کوئی فائل نہیں مل سکی۔",
        "specialpages": "خصوصی صفحات",
        "specialpages-note-top": "وضاحت",
+       "specialpages-note-restricted": "* عام خصوصی صفحات\n* <span class=\"mw-specialpagerestricted\">مقید خصوصی صفحات</span>",
        "specialpages-group-maintenance": "نگہداشت کی رپورٹیں",
        "specialpages-group-other": "دیگر خصوصی صفحات",
        "specialpages-group-login": "کھاتہ کھولیں یا اندراج کریں",
        "compare-invalid-title": "آپ کا اختصاصی عنوان غلط ہے۔",
        "compare-title-not-exists": "آپ کا اختصاصی عنوان موجود نہیں۔",
        "compare-revision-not-exists": "آپ کی اختصاصی نظرثانی موجود نہیں۔",
+       "diff-form": "فرق",
+       "permanentlink": "مستقل ربط",
        "dberr-problems": "افسوس! اس ویب سائٹ کو تکنیکی مشکلات کا سامنا ہے۔",
        "dberr-again": "چند منٹ انتظار کے بعد دوبارہ کوشش کریں۔",
        "dberr-info": "(ڈیٹا بیس تک رسائی نہیں مل سکی: $1)",
        "feedback-thanks": "شکریہ! آپ کا تبصرہ صفحہ «[$1 $2]» میں درج کر دیا گیا ہے۔",
        "feedback-thanks-title": "شکریہ!",
        "feedback-useragent": "یوزر ایجنٹ:",
-       "searchsuggest-search": "تلاش",
+       "searchsuggest-search": "{{SITENAME}} میں تلاش کریں",
        "searchsuggest-containing": "نتائج...",
        "api-error-badtoken": "داخلی نقص: غلط ٹوکن۔",
        "api-error-emptypage": "نئے خالی صفحات بنانے کی اجازت نہیں ہے۔",
        "pagelang-language": "زبان",
        "pagelang-use-default": "طے شدہ زبان استعمال کرتا ہے",
        "pagelang-select-lang": "زبان کا انتخاب کریں",
+       "pagelang-reason": "وجہ",
        "pagelang-submit": "ٹھیک ہے",
        "right-pagelang": "صفحے کی زبان تبدیل کریں",
        "action-pagelang": "صفحے کی زبان تبدیل کریں",
        "special-characters-title-emdash": "خط فاصل کشیدہ",
        "special-characters-title-minus": "علامت وضع",
        "mw-widgets-dateinput-no-date": "کسی تاریخ کو منتخب نہیں کیا گیا",
+       "mw-widgets-mediasearch-noresults": "مطلوبہ نتائج نہیں ملے۔",
        "mw-widgets-titleinput-description-new-page": "صفحہ ابھی تک موجود نہیں",
        "mw-widgets-titleinput-description-redirect": "$1 کا رجوع مکرر",
+       "mw-widgets-categoryselector-add-category-placeholder": "زمرہ شامل کریں۔ ۔ ۔",
+       "mw-widgets-usersmultiselect-placeholder": "مزید شامل کریں۔۔۔",
        "date-range-from": "تاریخ از:",
        "date-range-to": "تا:",
        "sessionmanager-tie": "تصدیقی درخواست کی متعدد قسموں کو یکجا نہیں کیا جا سکتا: $1",
        "usercssispublic": "براہ کرم اس بات کا خیال رکھیں کہ سی ایس ایس کے ذیلی صفحات میں خفیہ معلومات نہیں رکھی جانی چاہئیں کیونکہ ان صفحات کو دیگر صارفین بھی دیکھ سکتے ہیں۔",
        "restrictionsfield-badip": "آئی پی پتا یا رینج نادرست ہے: $1",
        "restrictionsfield-label": "آئی پی کی اجازت یافتہ رینج:",
-       "restrictionsfield-help": "فی سطر ایک آئی پی پتا یا سی آئی ڈی آر رینج۔ تمام کو فعال کرنے کے لیے <br><code>0.0.0.0/0</code><br><code>::/0</code> استعمال کریں"
+       "restrictionsfield-help": "فی سطر ایک آئی پی پتا یا سی آئی ڈی آر رینج۔ تمام کو فعال کرنے کے لیے <br><code>0.0.0.0/0</code><br><code>::/0</code> استعمال کریں",
+       "pagedata-title": "صفحے کا ڈیٹا"
 }
index 6fdd915..87a4425 100644 (file)
        "recentchanges-submit": "Xem",
        "rcfilters-tag-remove": "Loại bỏ “$1”",
        "rcfilters-legend-heading": "<strong>Danh sách chữ viết tắt:</strong>",
-       "rcfilters-other-review-tools": "<strong>Công cụ duyệt khác</strong>",
+       "rcfilters-other-review-tools": "Công cụ duyệt khác",
        "rcfilters-group-results-by-page": "Nhóm kết quả theo trang",
        "rcfilters-grouping-title": "Nhóm",
        "rcfilters-activefilters": "Bộ lọc hiện hành",
index 0ab434b..f515599 100644 (file)
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "ווייזן",
        "rcfilters-legend-heading": "<strong>ליסטע פון ראשי תיבות:</strong>",
-       "rcfilters-other-review-tools": "<strong>אנדערע רעצענזיע ווערקצייג</strong>",
+       "rcfilters-other-review-tools": "אנדערע רעצענזיע ווערקצייג",
        "rcfilters-activefilters": "אַקטיווע פילטערס",
        "rcfilters-advancedfilters": "פֿארגעשריטענע פֿילטערס",
        "rcfilters-limit-title": "ענדערונגען צו ווייזן",
index 5963590..e600939 100644 (file)
@@ -27,6 +27,7 @@
        "tog-watchmoves": "Ṣ'àfikún àwọn ojúewé ati fáìlì tí mo yípò mọ́ ìmójútó mi",
        "tog-watchdeletion": "Ṣ'àfikún àwọn ojúewé àti fáìlì tí mo parẹ́ mọ́ ìmójútó mi",
        "tog-watchuploads": "Ìdàpọ̀ àwọn fáìlì tuntun sí ìmójútó mi",
+       "tog-watchrollback": "Ṣe àròpọ̀ àwọn ojúewé níbi tí mo ti ṣe ìdápadà pọ̀ mọ́ ìtòjọ àmójútó mi",
        "tog-minordefault": "Se àmì sí gbogbo àtúnse gẹ́gẹ́ bi kékeré lát'ìbẹ̀rẹ̀.",
        "tog-previewontop": "Se àyẹ̀wò kí ẹ tó s'àtúnṣe",
        "tog-previewonfirst": "S'àfihàn àgbéwò fún àtúnse àkọ́kọ́",
        "tog-shownumberswatching": "S'àfihàn iye àwọn oníṣe tí wọn tẹjú mọ́ọ",
        "tog-oldsig": "Ìtọwọ́bọ̀wé yín tówà lọ́wọ́:",
        "tog-fancysig": "Ṣe ìtọwọ́bọ̀wé bíi ìkọ wiki (láìní ìjápọ̀ fúnrararẹ̀)",
-       "tog-uselivepreview": "Ìlo àkọ́kọ́yẹ̀wò lẹ́ṣẹ̀kẹṣẹ̀ (àdánwò)",
+       "tog-uselivepreview": "Ìfihàn àwọn àkọ̀yẹ̀wò lái ṣe ìtúngbéjáde ojúewé náà",
        "tog-forceeditsummary": "Kìlọ̀ fún mi tí àkótán àtúnṣe bá jẹ́ òfo",
        "tog-watchlisthideown": "Ìbòmọ́lẹ̀ àwọn àtúnṣe mi nínú ìmójútó",
        "tog-watchlisthidebots": "Ìbòmọ́lẹ̀ àwọn àtúnṣe bot nínú ìmójútó",
        "tog-watchlisthideminor": "Ìbòmọ́lẹ̀ àwọn àtúnṣe kéékèké nínú ìmójútó",
        "tog-watchlisthideliu": "Ìbòmọ́lẹ̀ àwọn àtúnṣe àwọn oníṣe tó ti wọlé nínú ìmójútó",
+       "tog-watchlistreloadautomatically": "Ìtúngbéjáde ìtọ̀jọ àmójútó fúnrararẹ̀ nígbogbo tí ajọ̀ bá ti yípadà (JavaScript pọndandan)",
        "tog-watchlisthideanons": "Ìbòmọ́lẹ̀ àwọn àtúnṣe àwọn oníṣe aláìlórúkọ nínú ìmójútó",
        "tog-watchlisthidepatrolled": "Ìbòmọ́lẹ̀ àwọn àtúnṣe olùṣọ́ lọ́wọ́ ìmójútó",
+       "tog-watchlisthidecategorization": "Ìbòmọ́lẹ̀ ìṣeẹ̀ka àwọn ojúewé",
        "tog-ccmeonemails": "Ìfiránṣẹ́ sími àwọn àwòkọ àwọn e-mail tí mo firánṣẹ́ sí àwọn oníṣe míràn",
        "tog-diffonly": "Kò gbọdọ̀ ṣàfihàn àkóónú ojúewé lábẹ́ àwọn ìyàtọ̀",
        "tog-showhiddencats": "Ṣ'àfihàn àwọn ẹ̀ka pípamọ́",
-       "tog-norollbackdiff": "Fo ìyàtọ̀ lẹ́yín síṣe ìyísẹ́yìn",
+       "tog-norollbackdiff": "Mọ fi ìyàtọ̀ hàn lẹ́yín tí ìyísẹ́yìn bá parí",
        "tog-useeditwarning": "Kìlọ̀ fún mi tí mo bá únkúrò ní ojúewé àtúnṣe láì tíì mupamọ́",
-       "tog-prefershttps": "Lo ìjáwọlé oníàbò ní gbogbo ìgbà",
+       "tog-prefershttps": "Lo ìsomọ́ra tó ní àbò ní gbogbo ìgbà tí a bá forúkọ wọlé",
        "underline-always": "Nígbà gbogbo",
        "underline-never": "Rárá",
        "underline-default": "Ti àwọ tàbí ẹrọ́ ìtọ́kùn",
        "editfont-style": "Oge fọ́ntì ààlà àtúnṣe:",
-       "editfont-default": "Ti agbétàkùn",
        "editfont-monospace": "Fọ́ntì aláàyè kan",
        "editfont-sansserif": "Fọnti san-sẹrif",
        "editfont-serif": "Fọnti sẹrif",
        "newwindow": "(yíò sí nínú fèrèsè tuntun)",
        "cancel": "Fagilé",
        "moredotdotdot": "Ẹ̀kúnrẹ́rẹ́...",
-       "morenotlisted": "Ã\80tòjá»\8d yìí kò kúnrẹ́rẹ́.",
+       "morenotlisted": "Ã\8ctòjá»\8d yìí le jẹÌ\81pé kò kúnrẹ́rẹ́.",
        "mypage": "Ojúewé",
        "mytalk": "Ọ̀rọ̀",
-       "anontalk": "Ọ̀rọ̀ fún IP yí",
+       "anontalk": "Ọ̀rọ̀",
        "navigation": "Atọ́ka",
        "and": "&#32;àti",
-       "qbfind": "Wíwárí",
-       "qbbrowse": "Ìṣíwò",
-       "qbedit": "Àtúnṣe",
-       "qbpageoptions": "Ojúewé yi",
-       "qbmyoptions": "Àwọn ojúewé mi",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Àwọn ìgbéṣe",
        "namespaces": "Àwọn orúkọàyè",
        "variants": "Àwọn oriṣiríṣi",
        "searcharticle": "Lọ",
        "history": "Ìtàn ojúewé",
        "history_short": "Ìtàn",
+       "history_small": "ìtàn",
        "updatedmarker": "jẹ́ títúnṣe lẹ́yìn àbẹ̀wò mi",
        "printableversion": "Àtẹ̀jáde tóṣeétẹ̀síìwé",
        "permalink": "Ìjápọ̀ tíkòníyípadà",
        "edit-local": "Àtúnṣe ìjúwe ìhàhín",
        "create": "Ṣèdá",
        "create-local": "Ìfikún ìjúwe ìhàhín",
-       "editthispage": "S'àtúnṣe ojúewé yi",
-       "create-this-page": "Ṣè'dá ojúewé yìí",
        "delete": "Ìparẹ́",
-       "deletethispage": "Pa ojúewé yi rẹ́",
-       "undeletethispage": "Mú ìparẹ́ kúrò fún ojúewé yìí",
        "undelete_short": "Ìdápadà ìparẹ́ {{PLURAL:$1|àtúnṣe kan|àwọn àtúnṣe $1}}",
        "viewdeleted_short": "Ìwòran {{PLURAL:$1|àtúnṣe ajẹ́píparẹ́ kan|àwọn àtúnṣe ajẹ́píparẹ́ $1}}",
        "protect": "Àbò",
        "protect_change": "yípadà",
-       "protectthispage": "Dá àbò bo ojúewé yìí",
        "unprotect": "Ìyípadà àbò",
-       "unprotectthispage": "Ìyípadà àbò ojúewé yìí",
        "newpage": "Ojúewé tuntun",
-       "talkpage": "Ìfọ̀rọ̀wérọ̀ nípa ojúewé yìí",
        "talkpagelinktext": "Ọ̀rọ̀",
        "specialpage": "Ojúewé Pàtàkì",
        "personaltools": "Àwọn irinṣẹ́ àdáni",
-       "articlepage": "Ìfihàn àkóónú ojúewé",
        "talk": "Ìfọ̀rọ̀wérọ̀",
        "views": "Àwọn ìwò",
        "toolbox": "Àwọn irinṣẹ́",
-       "userpage": "Wo ojúewé oníṣe",
-       "projectpage": "Wo ojúewé iṣẹ́ọwọ́",
+       "tool-link-userrights": "Yí àwọn ẹgbẹ́ {{GENDER:$1|oníṣe}} padà",
+       "tool-link-userrights-readonly": "Ìgbéwò àwọn ẹgbẹ́ {{GENDER:$1|oníṣe}}",
+       "tool-link-emailuser": "Fi email ránṣẹ́ sí {{GENDER:$1|oníṣe}} yìí",
        "imagepage": "Wo ojúewé fáìlì",
        "mediawikipage": "Wo ojúewé ìránṣẹ́",
        "templatepage": "Wo ojúewé àdàkọ",
        "jumptonavigation": "atọ́ka",
        "jumptosearch": "àwárí",
        "view-pool-error": "Àforíjì, ẹ̀rọ ìwọ̀fà ti kún lọ́wọ́ báyìí.\nÀwọn oníṣe ọ̀pọ̀lọpọ̀ úngbìyànjú láti wo ojúewé yìí.\nẸ jọ̀wọ́ ẹ dúro ná díẹ̀ kí ẹ tó tún gbìyànjú láti wo ojúewé yìí.\n\n$1",
+       "generic-pool-error": "Àforíjì, àwọn ẹ̀rọ ìwọ̀fà ti kúnjubóṣẹyẹlọ lọ́wọ́ báyìí.\nÀwọn oníṣe tóúngbìyànjú láti wo ohun ìtìlẹ́hìn yìí ti pọ̀jù.\nẸ jọ̀wọ́ ẹ dúro díẹ̀ kí ẹ tó tún gbìyànjú láti wo ohun ìtìlẹ́hìn yìí.",
        "pool-timeout": "Ìsinmi ìgbàdíẹ̀ láti dúro de ìtìpadé",
        "pool-queuefull": "Oríìlà dátà ti kún",
        "pool-errorunknown": "Àsìṣe àwámárìdí",
+       "poolcounter-usage-error": "Àṣìṣe ìlò: $1",
        "aboutsite": "Nípa {{SITENAME}}",
        "aboutpage": "Project:Nípa",
        "copyright": "Gbogbo ohun inú ibí yìí wà lábẹ́ $1 àyàfi tí a bá sọ pé kò rí bẹ̀ẹ̀.",
        "disclaimers": "Ikìlọ̀",
        "disclaimerpage": "Project:Ìkìlọ̀ gbogbo",
        "edithelp": "Ìrànlọ́wọ́ fún àtúnṣe",
+       "helppage-top-gethelp": "Ìrànwọ́",
        "mainpage": "Ojúewé Àkọ́kọ́",
        "mainpage-description": "Ojúewé Àkọ́kọ́",
        "policy-url": "Project:Ìpinu",
        "hidetoc": "bòmọ́lẹ̀",
        "collapsible-collapse": "Kálura",
        "collapsible-expand": "Fẹ̀hàn",
+       "confirmable-confirm": "Ṣé ó dá {{GENDER:$1|ọ}} lójú?",
+       "confirmable-yes": "Bẹ́ẹ̀ni",
+       "confirmable-no": "Bẹ́ẹ̀kọ́",
        "thisisdeleted": "Ìfihàn tàbí ìmúpadà $1?",
        "viewdeleted": "Ẹ wo $1?",
        "restorelink": "{{PLURAL:$1|àtúnṣe ajẹ́píparẹ́ kan|àwọn àtúnṣe ajẹ́píparẹ́ $1}}",
        "readonly_lag": "Ibùdó dátà ti jẹ́ títìpa fúnrararẹ̀ kí àwọn ẹ̀rọ awọ̀fà ẹrú ibùdó dátà le baà yára bíi ti àwọn ẹ̀rọ awọ̀fà ọ̀gà.",
        "internalerror": "Àsìṣe inú",
        "internalerror_info": "Àsìṣe inú: $1",
+       "internalerror-fatal-exception": "Ìṣàtì tí kò ṣe é túnṣe irú \"$1\"",
        "filecopyerror": "Àwòkọ faili \"$1\" sí \"$2\" kò ṣe é ṣe.",
        "filerenameerror": "Àtúnsọlórúkọ fáìlì \"$1\" sí \"$2\" kò ṣe é ṣe.",
        "filedeleteerror": "Ìparẹ́ fáìlì \"$1\" kò ṣe é ṣe.",
        "directorycreateerror": "Kò le dá àpò \"$1\".",
+       "directoryreadonlyerror": "Àpò fáìlì \"$1\" jẹ́ àwòkà nìkan.",
+       "directorynotreadableerror": "Àpò fáìlì \"$1\" kò ṣe é wòkà.",
        "filenotfound": "Kò sí fáìlì \"$1\".",
        "unexpected": "Iye àìretí: \"$1\"=\"$2\".",
        "formerror": "Àsìṣe: fọ́ọ̀mù kò ṣe fi ránṣẹ́",
        "actionthrottled": "Ìgbése bíntín",
        "actionthrottledtext": "Láti dènà spam, ìgbése yìí kò ní ṣe é ṣe lọ́nà iye púpọ̀ láàrin àsìkò bíntín, ẹ̀yin sì ti kọjá iye náà.\nẸjọ̀wọ́ ẹ gbíyànjú síi ní ìsẹ́jú díẹ̀.",
        "protectedpagetext": "Ojúewé yìí ti jẹ́ dídáàbòbò láti dínà ìṣàtúnṣe tàbí ìṣe míràn.",
-       "viewsourcetext": "Ẹ lè wo ati ẹ lè se àwòkọ ọ̀rọ̀àmì ojúewé yi:",
-       "viewyourtext": "Ẹ le wò bẹ́ẹ̀sìni ẹ le ṣe àwòkọ orísun '''àwọn àtúnṣe yín''' sí ojúewé yìí:",
+       "viewsourcetext": "Ẹ lè wo ati ẹ lè se àwòkọ ọ̀rọ̀àmì ojúewé yi.",
+       "viewyourtext": "Ẹ le wò bẹ́ẹ̀sìni ẹ le ṣe àwòkọ ọ̀rọ̀àmì <strong>àwọn àtúnṣe yín</strong> sí ojúewé yìí.",
        "protectedinterface": "Ojúewé yìí únpèsè ìfojúkojú ìkọ̀wé fún atòlànà, ó ti jẹ́ dídáàbòbò láti dínà ìlòkulò.",
        "editinginterface": "'''Ìkìlọ̀:''' Ẹ ún ṣàtúnṣe ojúewé tó jẹ́ lílò láti pèsè ìkọ ìfojúkojú fún àtòlànà kọ̀mpútà.\nÀwọn ìyípadà sí ojúewé yìí yíò kan ìhànsí ìfojúkojú oníṣe fún àwọn oníṣe míràn lọ́rí wiki yìí.\nLáti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àwọn wiki, ẹ jọ̀wọ́ ẹ lo [https://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], iṣẹ́-ọwọ́ ìṣọdìbílẹ̀ MediaWiki.",
-       "cascadeprotected": "Ojúewé yìí ti jẹ́ dídáàbòbò sí àtùnṣe, nítorípé ó wà nínú {{PLURAL:$1|ojúewé ìsàlẹ̀ yìí, tó jẹ́|àwọn ojúewé ìsàlẹ̀ wọ̀nyí, tí wọ́n jẹ́}} dídáàbòbò pẹ̀lú ìyàn \"ajámọ́ra\" ní títàn: $2",
+       "translateinterface": "Láti ṣe àfikún tàbí ìyédèpadà fún gbogbo wiki, jọ̀wọ́ lo [https://translatewiki.net/ translatewiki.net], iṣẹ́ọwọ́ ìsèdèabínibí MediaWiki.",
+       "cascadeprotected": "Ojúewé yìí ti jẹ́ dídáàbòbò sí àtùnṣe, nítorípé ó wà nínú {{PLURAL:$1|ojúewé ìsàlẹ̀ yìí, tó jẹ́|àwọn ojúewé ìsàlẹ̀ wọ̀nyí, tí wọ́n jẹ́}} dídáàbòbò pẹ̀lú ìyàn \"ajámọ́ra\" ní títàn: \n$2",
        "namespaceprotected": "A kò gbàyín ní ààyè láti ṣ'àtúnṣe àwọn ojúewé tó wà nínú orúkọàyè '''$1'''.",
        "customcssprotected": "Ẹ kò ní ìyọ̀nda láti ṣàtúnṣe ojúewé CSS yìí nítorípé ó ní àwọn ìtòjọ oníṣe ẹlòmíràn.",
        "customjsprotected": "Ẹ kò ní ìyọ̀nda láti ṣàtúnṣe ojúewé JavaScript yìí nítorípé ó ní àwọn ìtòjọ oníṣe ẹlòmíràn.",
        "invalidtitle-knownnamespace": "Àkọlé àìyẹ tó ní orúkọààyè \"$2\" àti ìkọ̀rọ̀ \"$3\"",
        "invalidtitle-unknownnamespace": "Àkọlé àìyẹ tó ní nọ́mbà orúkọààyè àìmọ̀ \"$1\" àti ìkọ̀rọ̀ \"$2\"",
        "exception-nologin": "Kò tí ì wọlé",
-       "exception-nologin-text": "Ẹ jọ̀wọ́ ẹ [[Special:Userlogin|jáwọlé]] láti le bọ́ sí ojúewé tàbí ìgbéṣe yìí.",
+       "exception-nologin-text": "Jọ̀wọ́ forúkọ wọlé láti le bọ́ sí ojúewé tàbí ìgbéṣe yìí.",
+       "exception-nologin-text-manual": "Jọ̀wọ́ $1 láti le bọ́sí ojúewé tàbí ìgbéṣe yìí.",
        "virus-badscanner": "Ìtorapọ̀ búburú: awáìpasẹ̀ èràn aláìmọ̀n : ''$1''",
        "virus-scanfailed": "ìkúnà scan (àmìọ̀rọ̀ $1)",
        "virus-unknownscanner": "ògùn-kòkòrò àìmọ̀:",
        "nocookieslogin": "{{SITENAME}} ún lo cookies láti gba àwọn oníṣe wọlé.\nẸ ti dínà sí cookies.\nẸjọ̀wọ́ ẹ fún cookies láàyè kí ẹ tún tó gbìyànjú láti wọlé.",
        "nocookiesfornew": "Àpamọ́ oníṣe kò jẹ́ dídá torípé a kò le ṣèmúdájú ibi tó ti wá.\nẸ ríidájú pé ẹ gba cookies láàyè, ẹ túnraṣe ojúewé yìí kí ẹ tó tún gbìyànjú.",
        "noname": "Ẹ kò tọ́kasí orúkọ oníṣe tó ní ìbámu.",
-       "loginsuccesstitle": "Ìwọlé ti yọrí sí rere",
+       "loginsuccesstitle": "O ti forúkọ wọlé",
        "loginsuccess": "'''Ẹ ti wọlé sínú {{SITENAME}} gẹ́gẹ́ bi \"$1\".'''",
-       "nosuchuser": "Kò sí oníṣe kankan pẹ̀lú orúkọ \"$1\".\nÀwọn lẹ́tà àwọn orúkọ oníṣe gbọ́dọ̀ jẹ́ irúkanna.\nẸ yẹ lẹ́tà yín wò, tàbí [[Special:CreateAccount|kí ẹ dá àkópamọ́ tuntun]].",
+       "nosuchuser": "Kò sí oníṣe kankan pẹ̀lú orúkọ \"$1\".\nÀwọn lẹ́tà àwọn orúkọ oníṣe gbọ́dọ̀ jẹ́ kíkọ bákanna.\nẸ yẹ lẹ́tà yín wò, tàbí [[Special:CreateAccount|kí ẹ dá àkópamọ́ tuntun]].",
        "nosuchusershort": "Kò sí oníṣe t'ón jẹ́ $1.\nẸ yẹ lẹ́tà ọ̀rọ̀ yín wò.",
        "nouserspecified": "Ẹ gbọ́dọ̀ tọ́kasí orúkọ oníṣe kan.",
        "login-userblocked": "Oníṣe yìí jẹ́ dídínà. Ìwọlé kò jẹ́ gbígbà láyè.",
        "wrongpassword": "Ọ̀rọ̀ìpamọ́ tí ẹ kìbọlé kòtọ́.\nẸ jọ̀wọ́ ẹ gbìyànjú lẹ́ẹ̀kansí.",
        "wrongpasswordempty": "Ọ̀ròìpamọ́ jẹ́ òfo.\nẸ gbìyànjú lẹ́ ẹ̀kan síi.",
        "passwordtooshort": "Ọ̀rọ̀ìpamọ́ kò gbọ́dọ̀ dín ju {{PLURAL:$1|àmìlẹ́tà kan|àmìlẹ́tà $1}} lọ.",
+       "passwordtoolong": "Àwọn àmììwọlé kò le pọ̀ ju {{PLURAL:$1|àmìlẹ́tà kan|àmìlẹ́tà $1}} lọ.",
        "password-name-match": "Ọ̀rọ̀ìpamọ́ yín gbọ́dọ̀ yàtọ̀ sí orúkọ oníṣe yín.",
        "password-login-forbidden": "Lílo orúkọ oníṣe àti ọ̀rọ̀ìpamọ́ yìí ti jẹ́ dídálẹ́kun.",
        "mailmypassword": "Ìtúntò ọ̀rọ̀ìpamọ́",
        "createaccount-title": "Ìforúkọ sílẹ̀ fún {{SITENAME}}",
        "createaccount-text": "Ẹnìkan dá àpamọ́ kan fún àdírẹ́sì e-mail yín sórí {{SITENAME}} ($4) tóún jẹ́ \"$2\", pẹ̀kú ọ̀rọ̀ìpamọ́ ''$3''.\nẸ gbọ́dọ̀ wọlé kí ẹ sì ṣàyípadà ọ́rọ́ìpamọ́ yín nísinsìyí.\n\nẸ le fojúfo ìránṣẹ́ yìí, tó bá jẹ́ pé àpamọ́ yìí jẹ́ dídá nítorí àsìṣe.",
        "login-throttled": "Ẹ ti gbìyànjú lọ́pọ̀ bó ṣe yẹ lọ láti jáwọlé.\nẸ jọ̀wọ́ ẹ dúró fún $1 ná kí ẹ tó tún gbìyànjú lẹ́ẹ̀kan síi.",
-       "login-abort-generic": "Ìwọlé yín kò yọrísírere - ó ti jẹ́ kíkáwọ́dà",
+       "login-abort-generic": "Ìforúkọwọlé yín ti kùnà - Ó ti jẹ́ dídádúró",
        "loginlanguagelabel": "Èdè: $1",
        "suspicious-userlogout": "Ìtọrọ tí ẹ ṣe láti bọ́sóde jẹ̀ kíkọ̀ nítorípé ó dà bí pé ó jẹ́ fífiránṣẹ́ látọ̀dọ̀ awòtakùn (browser) àìdára tàbí ẹ̀rọ-ìwọ̀fà ìmúpamọ́ onígbàdíẹ̀.",
-       "pt-login": "Ìjáwọlé",
+       "pt-login": "Forúkọ wọlé",
        "pt-login-button": "Ìjáwọlé",
        "pt-createaccount": "Ìdásílẹ̀ àpamọ́",
        "pt-userlogout": "Ìjáde",
        "newpassword": "Ọ̀rọ̀ìpamọ́ tuntun:",
        "retypenew": "Àtúntẹ̀ ọ̀rọ̀ìpamọ́ tuntun:",
        "resetpass_submit": "Ẹ ṣe àtúntò ọ̀rọ̀ìpamọ́ kí ẹ tó wọlé",
-       "changepassword-success": "Ã\8cyípadà á»\8dÌ\80rá»\8dÌ\80ìpamá»\8dÌ\81 yín ti já sí rere!",
+       "changepassword-success": "Ã\80mììwá»\8dlé yín ti jẹÌ\81 yíyípadà!",
        "changepassword-throttled": "Ẹ ti gbìyànjú lọ́pọ̀ bó ṣe yẹ lọ láti jáwọlé.\nẸ jọ̀wọ́ ẹ dúró fún $1 ná kí ẹ tó tún gbìyànjú lẹ́ẹ̀kan síi.",
+       "botpasswords": "Àwọn àmììwọlé bot",
+       "botpasswords-label-appid": "Orúkọ bot:",
+       "botpasswords-label-create": "Dáálẹ̀",
        "botpasswords-label-cancel": "Fagilé",
        "botpasswords-label-delete": "Ìparẹ́",
        "botpasswords-label-resetpassword": "Ìtúntò ọ̀rọ̀ìpamọ́",
        "resetpass_forbidden": "Àwọn ọ̀rọ̀ìpamọ́ kò ṣe é yípadà",
-       "resetpass-no-info": "Ẹ gbọ́dọ̀ wọlẹ́ láti le lọ sí ojúewé yìí tààrà.",
+       "resetpass-no-info": "Ẹ gbọ́dọ̀ ti forúkọ wọlẹ́ láti le lọ sí ojúewé yìí tààrà.",
        "resetpass-submit-loggedin": "Ìyípadà ọ̀rọ̀ìpamọ́",
        "resetpass-submit-cancel": "Fagilé",
        "resetpass-wrong-oldpass": "Ọ̀rọ̀ìpamọ́ ìgbàdíẹ̀ tàbí tìsinsìnyí àìtọ́.\nÓ le jẹ́ pé ẹ ti yí ọ̀rọ̀ìpamọ́ yín padà sí òmíràn tàbí ẹ ti tọrọ ọ́rọ́ìpamọ́ tuntun ìgbàdíẹ̀.",
        "passwordreset-emailtext-user": "Oníṣe $1 lórí {{SITENAME}} tọrọ àtúntò ọ̀rọ̀ìpamọ́ yín fùn {{SITENAME}} ($4). {{PLURAL:$3|Àkópamọ́|Àwọn àkópamọ́}} oníṣe ìsàlẹ̀ yìí ní ìbáṣe pọ̀ mọ́ àdírẹ̀sì e-mail yìí:\n\n$2\n\n{{PLURAL:$3|Ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ yìí|Àwọn ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ wọ̀nyí}} yíò dópin lẹ́yìn {{PLURAL:$5|ọjọ́ kan|ọjọ́ $5}}.\nẸ gbọ́dọ̀ lọ yan ọ̀rọ̀ìpamọ́ tuntun báyìí. Tóbá jẹ́ pé ẹ̀lòmíràn ló ṣe ìtọrọ yìí, tàbí tọ́bá jẹ́ pé ẹ ti rántí ọ̀rọ̀ìpamọ́ àtètèkọ́ṣe yín, tí ẹ kọ̀ sí fẹ́ yíipadà mọ́, ẹ lé ṣàìkàsí ìránṣẹ́ yìí, kí ẹ sì tẹ̀síwájú ní lo ọ̀rọ̀ìpamọ́ àtijọ́ yín.",
        "passwordreset-emailelement": "Orúkọ oníṣe: \n$1\n\nỌ̀rọ̀ìpamọ́ ìgbàdíẹ̀: \n$2",
        "passwordreset-emailsentemail": "E-mail àtúntò ọ̀rọ̀ìpamọ́ ti jẹ́ fífiránṣẹ́.",
-       "changeemail": "Ìyípadà àdírẹ̀sì E-mail",
+       "changeemail": "Ìyípadà tàbí ìmúkúrò àdírẹ̀sì email",
        "changeemail-header": "Ìyípadà àdírẹ̀sì e-mail àkópamọ́",
-       "changeemail-no-info": "Ẹ gbódọ̀ wọlé láti bósí ojúewé yìí tààrà.",
+       "changeemail-no-info": "Ẹ gbódọ̀ ti forúkọ wọlé láti bósí ojúewé yìí tààrà.",
        "changeemail-oldemail": "Àdírẹ̀sì E-mail ìsinsìnyí:",
        "changeemail-newemail": "Àdírẹ̀sì E-mail tuntun:",
        "changeemail-none": "(kòsí)",
        "anoneditwarning": "<strong>Ìkìlọ̀:</strong> Ẹ kò tíì wọlé.\nÀdírẹ́ẹ̀sì IP yín yíò hàn jáde tí ẹ bá ṣe àtùnṣe. Tí ẹ bá <strong>[$1 wọlé]</strong> tàbí <strong>[$2 dá àkópamọ́]</strong>, àwọn àtúnṣe yín yíò hàn pẹ̀lú orúkọ-oníṣe yín, pẹ̀lú àwọn ànfàní míràn.",
        "anonpreviewwarning": "''Ẹ kò tíì wọlé. Àdírẹ́ẹ̀sì IP yín yíò jẹ́ kíkọsílẹ̀ sínú ìwé ìtàn àtúnṣe ojúewé yìí tí ẹ bá ṣàmúpamọ́ rẹ̀.''",
        "missingsummary": "'''Ìránlétí:''' Ẹ kò pèsè àkótán fún àtúnṣe yìí\nTí ẹ bá tẹ Ìmúpamọ́ lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ̀ mímúpamọ́ láìní kankan.",
-       "missingcommenttext": "Ẹjọ̀wọ́ ẹ ṣe áríwí ní ìsàlẹ̀",
+       "missingcommenttext": "Jọ̀wọ́ fi èrò ọkàn rẹ sílẹ̀.",
        "missingcommentheader": "'''Ìránlétí:''' Ẹ kò pèsè àkọlé/oríọ̀rọ̀ kankan fún àríwí yìí.\nTí ẹ bá tẹ \"$1\" lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ́ mímúpamọ́ láìní kankan.",
-       "summary-preview": "Àkọ́yẹ̀wò àkótán:",
-       "subject-preview": "Àyẹ̀wò àkọlé",
+       "summary-preview": "Àkọ́yẹ̀wò àkótán àtúnṣe:",
+       "subject-preview": "Àkọ́yẹ̀wò àkọlé ọ̀rọ̀:",
        "blockedtitle": "Ìdínà oníṣe",
        "blockedtext": "'''Orúkọ oníṣe yín tàbí àdírẹ́sì IP yín ti jẹ́ dídílọ́nà.'''\n\n$1 ni ó ṣe ìdínà.\nÌdí tó fun ni ''$2''.\n\n* Ìbẹ̀rẹ̀ ìdínà: $8\n* Ìparí ìdínà: $6\n* Ẹni tí a fẹ́ dínà: $7\n\nẸ ṣ'èránṣẹ́ sí $1 tàbí [[{{MediaWiki:Grouppage-sysop}}|alámùójútó]] mìíràn láti fọ̀rọ̀wérọ̀ lórí ìdínà ọ̀ún.\nẸ kò le è 'ránṣẹ́ sí oníṣe yìí pẹ̀lú e-mail' àyàfi tí ojúọ̀nà e-mail tó dájú wà ní [[Special:Preferences|àwọn ìfẹ́ràn àpamọ́]] yín tí wọn kò sì ti dínà yín láti lò ó.\nÀdírẹ́sì IP yín lọ́wọ́lọ́wọ́ ni $3, bẹ́ ẹ̀ sì ni ID fún ìdínà yín ni #$5.\nẸ jọ̀wọ́ ẹ fi gbogbo ẹ̀kúnrẹ́rẹ́ òkè yìí kún ìbérè tí ẹ bá ṣe.",
        "autoblockedtext": "Àdírẹ́sì IP yín ti jẹ́ dídílọ́nà ní fúnrararẹ̀ nítorí pé ó jẹ́ lílò látọwọ́ oníṣe míràn tí ó jẹ́ dídílọ́nà látọwọ́ $1.\nÌdíẹ̀ tó ṣe jẹ́ bẹ́ẹ̀ nìyí:\n\n:''$2''\n\n\n* Ìbẹ̀rẹ̀ ìdínà: $8\n* Ìparí ìdínà: $6\n* Ẹni tí a fẹ́ dínà: $7\n\nẸ le ránṣẹ́ sí $1 tàbí ìkan láàrin [[{{MediaWiki:Grouppage-sysop}}|àwọn olùmójútó]] mìíràn láti fọ̀rọ̀wérọ̀ lórí ìdínà ọ̀ún.\n\nÀkíyèsí pé ẹ le mọ́ le lo ìní ''Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí'' tí àdírẹ́sì e-mail tó tọ́ jẹ́ fífilórúkọsílẹ̀ sínú [[Special:Preferences|àwọn ìfẹ́ràn oníṣe]] yín tí wọn kò sì ti dínà yín láti lò ó.\n\nÀdírẹ́sì IP yín lọ́wọ́lọ́wọ́ ni $3, bẹ́ ẹ̀ sì ni ID fún ìdínà yín ni #$5.\nẸ jọ̀wọ́ ẹ fi gbogbo ẹ̀kúnrẹ́rẹ́ òkè yìí pọ̀mọ́ ìbérè tí ẹ bá ṣe.",
        "nosuchsectiontitle": "Kò le rí abala báun",
        "nosuchsectiontext": "Ẹ ti gbìyànjú láti ṣàtúnṣe abala tí kòsí.\nÓ ti le jẹ́ yíyípò tàbí píparẹ́ nígbà tí ẹ ún bojúwo ojúewé náà.",
        "loginreqtitle": "Ẹ gbọ́dọ̀ kọ́kọ́ w'ọlé ná",
-       "loginreqlink": "wọlé",
+       "loginreqlink": "forúkọ wọlé",
        "loginreqpagetext": "Ẹ gbọ́dọ̀ $1 láti wo àwọn ojúewé míràn.",
        "accmailtitle": "Ti fi ọ̀rọ̀ìpamọ́ ránṣẹ́.",
        "accmailtext": "A ti fi ọ̀rọ̀ìpamọ́ àrìnàkò tí a pèsè fún [[User talk:$1|$1]] ránṣẹ́ sí $2. Ẹ le ṣe àyípadà ọ̀rọ̀ìpamọ́ fún àpamọ́ tuntun yìí ní ibi ''[[Special:ChangePassword|àyípadà ọ̀rọ̀ìpamọ́]]'' lẹ́yìn tí ẹ bá ti jáwọlé.",
        "newarticle": "(Tuntun)",
        "newarticletext": "Ẹ ti tẹ̀lé ìjápọ̀ mọ́ ojúewé tí kò sí.\nLáti dá ojúewé yí ẹ bẹ̀rẹ̀ síní tẹ́kọ sí inú àpótí ìsàlẹ̀ yí (ẹ wo [$1 ojúewé ìrànlọ́wọ́ ] fun ẹ̀kúnrẹ́rẹ́ ).\nT'óbá sepé àsìse ló gbé yin dé bi, ẹ kọn bọ́tìnì ìpadàsẹ́yìn.",
-       "anontalkpagetext": "''Ojúewé ìfọ̀rọ̀wérọ̀ yìí wà fún oníṣe aláílórúkọ tí kò tíì dá àkópamọ́, tàbí tí kò lò ó rárá.\nBí bẹ́ẹ̀ laṣe únlo àdírẹ́ẹ̀sì IP oníyenọ́mbà láti dáamọ̀.\nIrú àdírẹ́ẹ̀sì IP báun ṣeéṣe kó jẹ́ pínpínlọ̀ pẹ̀lú àwọn oníṣe míràn.\nTó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n ùnsọ̀rọ̀ tí kò kàn yín sí i yín, ẹ jọ̀wọ́ [[Special:CreateAccount|ẹ dá àkópamọ́ kan]] tàbí [[Special:UserLogin|kí ẹ wọlẹ́]] kó mọ́ baà sí ìdàrúpọ̀ lọ́jọ́ọwájú mọ́ àwọn oníṣe aláìlórúkọ mírán.''",
+       "anontalkpagetext": "----\n<em>Ojúewé ìfọ̀rọ̀wérọ̀ yìí wà fún oníṣe aláílórúkọ tí kò tíì dá àkópamọ́, tàbí tí kò lò ó rárá.</em>\nBí bẹ́ẹ̀ laṣe únlo àdírẹ́ẹ̀sì IP oníyenọ́mbà láti dáamọ̀.\nIrú àdírẹ́ẹ̀sì IP báun ṣeéṣe kó jẹ́ pínpínlọ̀ pẹ̀lú àwọn oníṣe míràn.\nTó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n ùnsọ̀rọ̀ tí kò kàn yín sí i yín, ẹ jọ̀wọ́ [[Special:CreateAccount|ẹ dá àkópamọ́ kan]] tàbí [[Special:UserLogin|kí ẹ forúkọ wọlẹ́]] kó mọ́ baà sí ìdàrúpọ̀ lọ́jọ́ọwájú mọ́ àwọn oníṣe aláìlórúkọ mírán.",
        "noarticletext": "Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.\nẸ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àkọọ́lẹ̀ rẹ̀], tàbí [{{fullurl:{{FULLPAGENAME}}|action=edit}} kí ẹ ṣ'àtúnṣe ojúewé òún]</span>.",
        "noarticletext-nopermission": "Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.\nẸ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn, tàbí\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àwọn àkọọ́lẹ̀ tó bámu]</span>, sùgbọ́n ẹ kò ní àṣẹ láti ṣ'ẹ̀dá ojúewé yìí.",
        "missing-revision": "Àtúnyẹ̀wò #$1 ojúewé tó únjẹ́ \"{{FULLPAGENAME}}\" kò sí.\n\nÈyí únsábà ṣẹlẹ̀ nítorípé ẹ tẹ̀lé ìtàn àjápọ̀ tí kò ṣiṣẹ́ mọ́ wá sí orí ojúewé tó ti jẹ́ píparẹ́.\nẸ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].",
        "explainconflict": "Ẹlòmíràn ti ṣàyípadà ojúewé yìí látìgbà tí ẹ ti bèrẹ̀ àtúnṣẹ rẹ̀.\nÀlà ìkọ̀rọ̀ òkè lóní ìkọ̀rọ̀ ojúewé bó ṣe wà lọ́wọ́lọ́wọ́ báyìí.\nÀwọn àtúnṣe yín ni wọ́n hàn yìí nínú àlà ìkọ̀rọ̀ ìsàlẹ̀.\nẸ gbọdọ̀ kó àwọn àtúnṣe yín papọ̀ sínú ìkọ̀rọ̀ tó wà lọ́wọ́lọ́wọ́ báyìí.\nÌkọ̀rọ̀ inú àlà ìkọ̀rọ̀ òkè '''nìkan''' ni yíò jẹ́ mímúpamọ́ tí ẹ bá tẹ \"$1\".",
        "yourtext": "Ìkọ̀ yín",
        "storedversion": "Àtúnyẹ̀wò tí à múpamọ́",
-       "nonunicodebrowser": "'''Ìkìlọ̀: Awòtakùn yín kò ṣe é lò fún unicode.'''\nBáyìí ná ẹ le ṣàtúnṣe àwọn ojúewé láì ṣéwu: áwọn àmììkọ̀rọ̀ àìjẹ́-ASCII yíò hàn nínú àpótí àtúnṣe bíi àmíọ̀rọ̀ onímẹ́rìndínlọ́gún.",
        "editingold": "'''Ìkìlọ̀: Ẹ únṣàtúnṣe ojúewé yìí sí àtúnyẹ̀wọ̀ tótipẹ́ kọjá sẹ́yìn.'''\nTí ẹ bá múupamọ́, àwọn àtúnṣe yìówú tó wáyé látìgbà àtúnyẹ̀wò yìí yíò sọnù.",
        "yourdiff": "Àwọn ìyàtọ̀",
        "copyrightwarning": "Ẹ jọ̀wọ́ ẹ kíyèsi wípé gbogbo àwọn àfikún sí {{SITENAME}} jẹ́ bẹ̀ lábẹ́  $2 (Ẹ wo $1 fún ẹkunrẹrẹ).\nTí ẹ kò bá fẹ́ kí ìkọọ́lẹ̀ yín ó jẹ́ títúnṣe tàbí kì ó jẹ́ pípìn kiri lọ́ná tí kò wù yín, ẹ mọ́ mù wá síbí.<br />\nBákannà ẹ tún ṣèlérí fún wa wípé ẹ̀yin lẹkọ́ fúnra arayín, tàbí ẹ wòókọ láti agbègbè ìgboro tàbí irú ìtìlẹ́yín ọ̀fẹ́ bíi bẹ́ẹ̀.\n'''Ẹ MỌ́ MÚ IṢẸ́ TÓ NÍ Ẹ̀TỌ́ÀWÒKỌ SÍLẸ̀ LÁÌ GBÀṢẸ!'''",
        "permissionserrorstext": "Ẹ kò ní ìyọ̀nda láti ṣè yí nítorí {{PLURAL:$1|ìdí ìsàlẹ̀ yìí|àwọn ìdí ìsàlẹ̀ wọ̀nyí}}:",
        "permissionserrorstext-withaction": "Ẹ kò ní ìyọ̀nda láti $2, fún {{PLURAL:$1|ìdí yìí|àwọn ìdí wọ̀nyí}}:",
        "recreate-moveddeleted-warn": "'''Ìkìlọ̀: Ẹ̀ ún ṣ'èdá ojúewé tí a ti parẹ́ tẹ́lẹ̀.'''\n\nẸ gbọ́dọ̀ gberò bóyá ó bójúmu láti tẹ̀síwájú pẹ̀lú àtúnṣe ojúewé yìí.\nÀkọsílẹ̀ ìparẹ́ àti ìyípò fún ojúewé yìí nìyí fún ìrọ̀rùn:",
-       "moveddeleted-notice": "Ojúewé yìí tijẹ́ píparẹ́.\nÀkọọ́lẹ̀ ìparẹ́ àti ìyípò fún ojúewé náà wà nísàlẹ̀ fún ìtákasí.",
+       "moveddeleted-notice": "Ojúewé yìí tijẹ́ píparẹ́.\nÀkọọ́lẹ̀ ìparẹ́, àbò àti ìyípò fún ojúewé náà wà nísàlẹ̀ fún ìtọ́kasí.",
        "log-fulllog": "Ẹ wo gbogbo àkọọ́lẹ̀",
        "edit-hook-aborted": "Hook ti ṣe ìdádúró àtúnṣe.\nKò ṣe àlàyé kankan.",
        "edit-gone-missing": "A kò le ṣe títúnṣe ojúewé.\nÓ dà bíi pé a ti paárẹ́.",
        "edit-conflict": "Ìtakora áwọn àtúnṣe",
        "edit-no-change": "A ṣe àìkàsí àtúnṣe yín, nítorípé ìkọ̀wé kò ní àtúnṣe kankan.",
+       "postedit-confirmation-created": "Ojúewé ti jẹ́ dídáàlẹ̀.",
+       "postedit-confirmation-restored": "Ojúewé ti jẹ́ mímúwápadà.",
        "postedit-confirmation-saved": "Àtúnṣe yín ti jẹ́ gbígbépamọ́.",
        "edit-already-exists": "A kò le è ṣè'dá ojúewé tuntun.\nÓ pilẹ̀ ti wà.",
        "defaultmessagetext": "Ìkọ ìránṣẹ́ àtìbẹ̀rẹ̀",
        "content-failed-to-parse": "Ìkùnà láti ṣàtúwò àkóónú $2 fún àfijúwe $1: $3",
        "invalid-content-data": "Àkóónú dátà tí kò yẹ",
        "content-not-allowed-here": "Àkóónú \"$1\" kò ní ìyọ̀nda lórí ojúewé [[$2]]",
-       "editwarning-warning": "Kíkúrò ní ojúewé yìí yíò jẹ́ kí ẹ pòfo àwọn àtúnṣe tí ẹ ti ṣe.\nTó bá jẹ́ pé ẹ ti wọlé, ẹ lè dẹ́kun ìkìlọ̀ yìí nínù abala \"Àtúnṣe ṣíṣe\" ti àwọn ìfẹ́ràn yín.",
+       "editwarning-warning": "Kíkúrò ní ojúewé yìí yíò jẹ́ kí ẹ pòfo àwọn àtúnṣe tí ẹ ti ṣe.\nTó bá jẹ́ pé ẹ ti forúkọ wọlé, ẹ lè dẹ́kun ìkìlọ̀ yìí nínù abala \"{{int:prefs-editing}}\" ti àwọn ìfẹ́ràn yín.",
        "content-model-wikitext": "ìkọ̀rọ̀ wiki",
        "content-model-text": "ìkọ̀rọ̀ kedere",
        "content-model-javascript": "JavaScript",
        "page_first": "àkọ́kọ́",
        "page_last": "tógbẹ̀yìn",
        "histlegend": "Àṣàyàn ìyàtọ̀: ẹ fagi sínú àpótí àwọn átúnyẹ̀wò tí ẹ fẹ́ ṣàfiwè, lẹ́yìn náà ẹ tẹ enter tàbí bọ́tìnì ìsàlẹ̀.<br />\nÀlàyé: '''({{int:cur}})''' = ìyàtọ̀ sí àtúnyẹ̀wò tìsinyìí, '''({{int:last}})''' = ìyàtọ̀ sí àtúnyẹ̀wò tókọjá, '''{{int:minoreditletter}}''' = àtúnṣe kékeré.",
-       "history-fieldset-title": "Ìṣíwò ìwé ìtàn àtúnṣe",
+       "history-fieldset-title": "Ìwádìí fún àwọn àtùnyẹ̀wò",
        "history-show-deleted": "Ajẹ́píparẹ́ níkan",
        "histfirst": "pípẹ́jùlọ",
        "histlast": "tuntunjùlọ",
        "notextmatches": "Kò sí ọ̀rọ̀ ojúewé tóbáramu",
        "prevn": "{{PLURAL:$1|$1}} tókọjá",
        "nextn": "{{PLURAL:$1|$1}} tókàn",
+       "prev-page": "ojúewé tókọjá",
+       "next-page": "ojúewé tóúnbọ̀",
        "prevn-title": "{{PLURAL:$1|Èsì $1 sẹ́yìn|Àwọn èsì $1 sẹ́yìn}}",
        "nextn-title": "{{PLURAL:$1|Èsì $1 tóúnbọ̀|Àwọn èsì $1 tóúnbọ̀}}",
        "shown-title": "{{PLURAL:$1|Ìfihàn èsì $1|Ìfihàn àwọn èsì $1}} nínú ojúewé kọ̀ọ̀kan",
        "searchprofile-advanced-tooltip": "Ṣàwáàrí nínú àwọn orúkọàyè pàtó",
        "search-result-size": "$1 ({{PLURAL:$2|ọ̀rọ̀ 1|àwọn ọ̀rọ̀ $2}})",
        "search-result-category-size": "{{PLURAL:$1|ẹlẹgbẹ́ 1|àwọn ẹlẹgbẹ́ $1}} ({{PLURAL:$2|ẹ̀kà abẹ́ 1|àwọn ẹ̀kà abẹ́ $2}}, {{PLURAL:$3|fáìlì 1|àwọn fáìlì $3}})",
-       "search-redirect": "(àtúnjúwe $1)",
+       "search-redirect": "(àtúnjúwe láti $1)",
        "search-section": "(abala $1)",
+       "search-category": "(ẹ̀ka $1)",
+       "search-file-match": "(ó bá ohun inú fáìlì mu)",
        "search-suggest": "Ṣé ẹ fẹ́: $1",
-       "search-interwiki-caption": "Àwọn iṣẹ́-ọwọ́ mìràn",
+       "search-rewritten": "Ìfihàn àwọn èsì fún $1. Wáàdí fún $2 dípò rẹ̀.",
+       "search-interwiki-caption": "Àwọn èsì láti ọ̀dọ̀ àwọn ibi iṣẹ́-ọwọ́ mìràn",
        "search-interwiki-default": "Áwọn èsì láti $1:",
        "search-interwiki-more": "(tókù)",
+       "search-interwiki-more-results": "àwọn èsì pípọ̀ si",
        "search-relatedarticle": "Tóbáramu",
        "searchrelated": "tóbáramu",
        "searchall": "gbogbo",
        "showingresults": "Ìfihàn nísàlẹ̀ títí dé {{PLURAL:$1|èsì '''1'''|àwọn èsì '''$1'''}} láti ìbẹ̀rẹ̀ ní #'''$2'''.",
+       "showingresultsinrange": "Ìfihàn n'ísàlẹ̀ títí dé {{PLURAL:$1|èsì <strong>1</strong>|àwọn èsì <strong>$1</strong>}} tó bẹ̀rẹ̀ láti #<strong>$2</strong> dé #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Èsì <strong>$1</strong> fún <strong>$3</strong>|Àwọn èsì <strong>$1 - $2</strong> fún <strong>$3</strong>}}",
        "search-nonefound": "Kò sí àwọn èsì kankan tóbáramu mọ́ ìtọrọ.",
        "powersearch-legend": "Àwárí kíkúnrẹ́rẹ́",
        "preferences": "Àwọn ìfẹ́ràn",
        "mypreferences": "Àwọn ìfẹ́ràn",
        "prefs-edits": "Iye àwọn àtúnṣe:",
-       "prefsnologintext2": "Ẹ jọ̀wọ́ ẹ $1 láti ṣe ìyípadà àwọn ìfẹ́ràn yín.",
+       "prefsnologintext2": "Jọ̀wọ́ forúkọ wọlé láti ṣe ìyípadà àwọn ìfẹ́ràn rẹ.",
        "prefs-skin": "Skin (Àwọ̀)",
        "skin-preview": "Àkọ́yẹ̀wò",
        "datedefault": "Kò sí ìfẹ́ràn",
        "prefs-user-pages": "Àwọn ojúewé oníṣe",
        "prefs-personal": "Ọ̀rọ̀ nípa oníṣe",
        "prefs-rc": "Àwọn àtúnṣe tuntun",
-       "prefs-watchlist": "Ìmójútó",
+       "prefs-watchlist": "Ìtòjọ àmójútó",
+       "prefs-editwatchlist": "Àtúnṣe ìtòjọ àmójútò",
        "prefs-watchlist-days": "Ọjọ́ láti fihàn nínú ìmójútó:",
        "prefs-watchlist-days-max": "{{PLURAL:$1|Ọjọ́|Ọjọ́}} $1 púpọ̀jùlọ",
        "prefs-watchlist-edits": "Iye àwọn àtúnṣe láti fìhàn nínú ìmójútó kíkúnrẹ́rẹ́:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Orúkọ oníṣe}}:",
        "prefs-memberingroups": "{{GENDER:$2|Ọ̀kan}} nínú {{PLURAL:$1|ẹgbẹ́|àwọn ẹgbẹ́}}:",
+       "group-membership-link-with-expiry": "$1 (títí di $2)",
        "prefs-registration": "Àsìkò ìforúkọsílẹ́:",
        "yourrealname": "Orúkọ ganangan:",
        "yourlanguage": "Èdè:",
        "prefs-displayrc": "Ìfihàn àwọn àṣàyàn",
        "prefs-displaywatchlist": "Ìfihàn àwọn àṣàyàn",
        "prefs-diffs": "Àwọn ìyàtọ̀",
-       "userrights": "Ã\8cmójútó Ã wọn ẹ̀tọ́ oníṣe",
-       "userrights-lookup-user": "Àkóso àwọn àdìpò oníṣe",
+       "userrights": "Ã\80wọn ẹ̀tọ́ oníṣe",
+       "userrights-lookup-user": "Mú oníṣe kan",
        "userrights-user-editname": "Ẹ tẹ orúkọ oníṣe kan:",
-       "editusergroup": "Àtúnṣe àwọn ẹgbẹ́ oníṣe",
-       "editinguser": "Ṣíṣàyípadà àwọn ẹ̀tọ́ oníṣe fún oníṣe '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Àtúnṣe àwọn ẹgbẹ́ oníṣe",
-       "saveusergroups": "Ìmúpamọ́ àwọn ẹgbẹ́ oníṣe",
+       "editusergroup": "Ìgbéjáde àwọn ẹgbẹ́ oníṣe",
+       "editinguser": "Àyípadà àwọn ẹ̀tọ́ oníṣe fún {{GENDER:$1|oníṣe}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Àgbéwò àwọn ẹ̀tọ́ oníṣe fún {{GENDER:$1|oníṣe}} <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Àtúnṣe àwọn ẹgbẹ́ {{GENDER:$1|oníṣe}}",
+       "userrights-viewusergroup": "Àgbéwò àwọn ẹgbẹ́ {{GENDER:$1|oníṣe}}",
+       "saveusergroups": "Ìmúpamọ́ àwọn ẹgbẹ́ {{GENDER:$1|oníṣe}}",
        "userrights-groupsmember": "Ọ̀kan nínú:",
        "userrights-groupsmember-auto": "Ẹlẹgbẹ́ tódájú:",
-       "userrights-groups-help": "Ẹ le ṣàyípadà àwọn ẹgbẹ́ tí oníṣe wà nínú wọn:\n* Àpótí aṣàmìsí túmọ̀sí pé oníṣe náà wà nínú ẹgbẹ́ náà.\n* Àpótí aláìsàmìsí túmọ̀sí pé oníṣe náà kò sí nínú ẹgbẹ́ náà\n* Àmì * kan fihàn pé ẹ kò le yọ ẹgbẹ́ náà kúrò mọ́ tí ẹ bá ti ṣàfikún rẹ̀, tàbí lódì kejì.",
+       "userrights-groups-help": "Ẹ le ṣàyípadà àwọn ẹgbẹ́ tí oníṣe yìí wà nínú:\n* Àpótí aṣàmìsí túmọ̀sí pé oníṣe náà wà nínú ẹgbẹ́ náà.\n* Àpótí aláìsàmìsí túmọ̀sí pé oníṣe náà kò sí nínú ẹgbẹ́ náà\n* Àmì * kan fihàn pé ẹ kò le yọ ẹgbẹ́ náà kúrò mọ́ tí ẹ bá ti ṣàfikún rẹ̀, tàbí lódì kejì.\n* Àmí # kan fihàn pé ẹ kàn lè fa àsìkò ìparí ọmọẹgbẹ́ ẹgbẹ́ yìí sẹ́yin nìkan; ẹ kò le fàá síwájú.",
        "userrights-reason": "Ìdíẹ̀:",
        "userrights-no-interwiki": "Ẹ kò ní ìyọ̀nda láti ṣàtúnṣe àwọn ẹ̀tọ́ oníṣe lórí àwọn wiki míràn.",
        "userrights-nodatabase": "Ibùdó dátà $1 kò sí tàbí kò sí lábẹ́lé.",
        "userrights-changeable-col": "Àwọn ẹgbẹ́ tí ẹ le túnṣe",
        "userrights-unchangeable-col": "Àwọn ẹgbẹ́ tí ẹ kò le túnṣe",
+       "userrights-expiry-current": "Yíòparí $1",
+       "userrights-expiry-none": "Kò ní parí",
+       "userrights-expiry": "Ìparí:",
        "group": "Ìdìpọ̀:",
        "group-user": "Àwọn oníṣe",
        "group-autoconfirmed": "Àwọn oníṣe aláàmúdájúarawọn",
        "recentchanges-label-plusminus": "Iye bytes àtúnṣe sí ìtóbi ojúewé",
        "recentchanges-legend-heading": "<strong>Ìtumọ̀:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ẹ tún wo [[Special:NewPages|àtòjọ àwọn ojúewé tuntun]])",
+       "recentchanges-submit": "Ìfihàn",
+       "rcfilters-tag-remove": "Ìyọkúrò $1",
+       "rcfilters-legend-heading": "<strong>Ìtòjọ àwọn ìkékúrú:</strong>",
+       "rcfilters-other-review-tools": "Àwọn irinṣẹ́ àtúnyẹ̀wò míràn",
+       "rcfilters-group-results-by-page": "Ìdìpọ̀ àwọn èsì gẹ́gẹ́bí ojúewé",
+       "rcfilters-grouping-title": "Àdìpọ̀",
+       "rcfilters-activefilters": "Àwọn ajọ̀ àsiṣẹ́",
+       "rcfilters-advancedfilters": "Àwọn ajọ̀ onígíga",
+       "rcfilters-limit-title": "Àwọn àtúnṣe tí yíò hàn",
+       "rcfilters-limit-shownum": "Ìfihàn {{PLURAL:$1|àtúnṣe|àtúnṣe $1}} sẹ́yìn",
+       "rcfilters-days-title": "Àwọn ọjọ́ ṣẹ̀ṣẹ̀",
+       "rcfilters-hours-title": "Àwọn wákàtí ṣẹ̀ṣẹ̀",
+       "rcfilters-days-show-days": "{{PLURAL:$1|ọjọ́|ọjọ́}} $1",
+       "rcfilters-days-show-hours": "{{PLURAL:$1|wákàtí|wákàtí}} $1",
+       "rcfilters-highlighted-filters-list": "Aláfíṣeàkíyèsí: $1",
+       "rcfilters-quickfilters": "Àwọn ajọ̀ ìpamọ́",
+       "rcfilters-quickfilters-placeholder-title": "Kò tí ì sí ajọ ní ìpamọ́",
+       "rcfilters-quickfilters-placeholder-description": "Láti fi àwọn ìtò ajọ̀ yín pamọ́ láti le lò wọ́n nígbà míràn, ẹ tẹ klik sí àwòrán àmì-ìkàwé nínú àyè Ajọ̀ Àsiṣẹ́, nísàlẹ̀.",
+       "rcfilters-savedqueries-defaultlabel": "Àwọn ajọ̀ ìpamọ́",
+       "rcfilters-savedqueries-rename": "Ìtúnsọlórúkọ",
+       "rcfilters-savedqueries-setdefault": "Ìtò bí i ìbẹ̀rẹ̀",
+       "rcfilters-savedqueries-unsetdefault": "Ìyọkúrò bí i ìbẹ̀rẹ̀",
+       "rcfilters-savedqueries-remove": "Ìyọkúrò",
+       "rcfilters-savedqueries-new-name-label": "Orúkọ",
+       "rcfilters-savedqueries-new-name-placeholder": "Àlàyé iṣẹ́ ajọ̀ náà",
+       "rcfilters-savedqueries-apply-label": "Ìdáálẹ̀ ajọ̀",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Ìdáálẹ̀ ajọ̀ ìbẹ̀rẹ̀",
+       "rcfilters-savedqueries-cancel-label": "Fagilé",
        "rcnotefrom": "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
        "rclistfrom": "Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $3 $2",
        "rcshowhideminor": "$1 àwọn àtúnṣe kékéèké",
        "rcshowhidebots-show": "Ìfihàn",
        "rcshowhidebots-hide": "Fi pamọ́",
        "rcshowhideliu": "$1 àwọn oníṣe aforúkọsílẹ̀",
+       "rcshowhideliu-show": "Ìfihàn",
        "rcshowhideliu-hide": "Ìbòmọ́lẹ̀",
        "rcshowhideanons": "$1 àwọn oníṣe aláìlórúkọ",
        "rcshowhideanons-show": "Fi hàn",
        "emailuserfooter": "E-mail yìí wá látọ̀dọ̀ $1 sí $2 pẹ̀lú ìfigbéṣe \"E-mail oníṣe\" ní {{SITENAME}}.",
        "usermessage-summary": "Ẹ̀ únfi sístẹ́mù ìránṣẹ́ sílẹ̀.",
        "usermessage-editor": "Sìstẹ́mú olúránṣẹ́",
-       "watchlist": "Ìmójútó",
-       "mywatchlist": "Ìmójútó",
+       "watchlist": "Ìtòjọ àmójútó",
+       "mywatchlist": "Ìtòjọ àmójútó",
        "watchlistfor2": "Fún $1 $2",
        "nowatchlist": "Ẹ kò ní ohun kankan nínú ìmójútó yín.",
        "watchlistanontext": "Ẹ jọ̀wọ́ $1 láti wò tàbí ṣàtúnṣe àwọn ohun inú ìmójútó yín.",
        "unwatchthispage": "Já'wọ́ ìmójútó ojúewé yi",
        "notanarticle": "Kìí ṣe ojúewé àkóónú",
        "notvisiblerev": "Àtúnyẹ̀wò gbígbẹ̀yìn látọwọ́ oníṣe míràn ti jẹ́ píparẹ́",
-       "watchlist-details": "{{PLURAL:$1|Ojúewé $1|Àwọn ojúewé $1}} ló wà nínú ìmójútó yín, tí a kò bá ka àwọn ojúewé ọ̀rọ̀.",
+       "watchlist-details": "{{PLURAL:$1|Ojúewé $1|Àwọn ojúewé $1}} ló wà nínú ìtòjọ àmójútó yín (pọ̀ mọ́ àwọn ojúewé ọ̀rọ̀).",
        "wlheader-enotif": "Ìfitónilétí e-mail wà ní gbígbàláyè.",
-       "wlheader-showupdated": "Àwọn ojúewé tí wọn ti yípadà látìgbà tí ẹ ṣàbẹ̀wò wọn gbẹ̀yìn jẹ́ fífihàn ní ''kedere'''",
-       "wlnote": "Lábẹ́ {{PLURAL:$1|ni àtúnṣe tó gbẹ̀yìn|ni àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} ní {{PLURAL:$2|wákàtí kan|wákàtí '''$2'''}} sẹ́yìn, títí dí ọjọ́ $3, $4.",
-       "wlshowlast": "Ìfihàn wákàtí $1 sẹ́yìn ọjọ́ $2 sẹ́yìn",
+       "wlheader-showupdated": "Àwọn ojúewé tí wọn ti ní àtúnṣe láti ẹ̀yìn ìgbà tí ẹ ṣàbẹ̀wò si wọn gbẹ̀yìn jẹ́ fífihàn ní lẹ́tà <strong>kedere</strong>.",
+       "wlnote": "Lábẹ́ {{PLURAL:$1|ni àtúnṣe tó gbẹ̀yìn|ni àwọn àtúnṣe <strong>$1</strong> tí wọn gbẹ̀yìn}} ní {{PLURAL:$2|wákàtí kan|wákàtí <strong>$2</strong>}} sẹ́yìn, títí dí ọjọ́ $3, $4.",
+       "wlshowlast": "Ìfihàn wákàtí $1 ọjọ́ $2 gbẹ̀yìn",
        "watchlist-hide": "Ìbòmọ́lẹ̀",
        "watchlist-submit": "Ìfihàn",
        "wlshowhideminor": "àwọn àtúnṣe kékéèké",
        "sp-contributions-search": "Àwáàrí fún àwọn àfikún",
        "sp-contributions-username": "Àdírẹ́ẹ̀sì IP tàbí orúkọ oníṣe:",
        "sp-contributions-toponly": "Ìfihàn àwọn àtúnṣe tí wọn jẹ́ àtúnyẹ̀wò àìpẹ́ nìkan",
+       "sp-contributions-newonly": "Ìfihàn àwọn àtúnṣe tí wọn jẹ́ ìdá ojúewé nìkan",
        "sp-contributions-submit": "Ṣàwárí",
        "whatlinkshere": "Ìjápọ̀ mọ́ ojúewé yí",
        "whatlinkshere-title": "Àwọn ojúewé tó jápọ̀ mọ́ \"$1\"",
        "whatlinkshere-hideredirs": "$1 àtúnjúwe",
        "whatlinkshere-hidetrans": "$1 ìkómọ́ra",
        "whatlinkshere-hidelinks": "Ìjápọ̀ $1",
-       "whatlinkshere-hideimages": "$1 àwọn ìjápọ̀ fáìlì",
+       "whatlinkshere-hideimages": "Àwọn ìjápọ̀ fáìlì $1",
        "whatlinkshere-filters": "Ajọ̀",
        "whatlinkshere-submit": "Rìnsó",
        "autoblockid": "Ìdínàaláraẹni #$1",
        "block": "Dínà oníṣe",
        "unblock": "Ìmúkúrò ìdínà oníṣe",
        "blockip": "Dínà oníṣe",
-       "blockip-legend": "Ìdínà oníṣẹ",
        "blockiptext": "Ẹ lo fọ́ọ̀mù ìsàlẹ̀ láti dínà ìle kọ láti ọ̀dọ̀ àdírẹ́ẹ̀sì IP pàtó kan tàbí orúkọ oníṣe.\nẸyí gbọ́dọ̀ jẹ́ síṣe láti dínà ìṣèbàjẹ́ nìkan, àtí gẹ́gẹ́bí [[{{MediaWiki:Policy-url}}|ètò ìsiṣẹ́]].\nẸ sọ ìdí pàtó nísàlẹ̀ (fún àpẹrẹ, ìtọ́kasí àwọn ojúewé pàtó tí wọ́n jẹ́ bíbàjẹ́).",
        "ipaddressorusername": "Àdírẹ́ẹ̀sì IP tàbí orúkọ oníṣe:",
        "ipbexpiry": "Ìwásópin:",
        "tooltip-search": "Ṣ'àwáàrí nínú {{SITENAME}}",
        "tooltip-search-go": "Lọ sí ojúewé tó ní orúkọ yìí tí ọ́ bá wà",
        "tooltip-search-fulltext": "Ṣe àwáàrí nínú àwọn ojúewé fún ìkọ yìí",
-       "tooltip-p-logo": "Ojúewé Àkọ́kọ́",
+       "tooltip-p-logo": "Bẹ ojúewé àkọ́kọ́ wò",
        "tooltip-n-mainpage": "Ẹ ṣe àbẹ̀wò sí Ojúewé Àkọ́kọ́",
        "tooltip-n-mainpage-description": "Àbẹ̀wò sí ojúewé àkọ́kọ́",
        "tooltip-n-portal": "Ẹ̀kúnrẹ́rẹ́ nípa iṣẹ́ọwọ́ yìí",
        "tooltip-n-currentevents": "Ìròhìn lọ́wọ́lọ́wọ́",
        "tooltip-n-recentchanges": "Àkójọ àwọn àtúnṣe tuntun nínú wiki.",
-       "tooltip-n-randompage": "Ẹ ṣe àrìnàkò ojúewé kan",
+       "tooltip-n-randompage": "Gbé ojúewé àrìnàkò kan jáde",
        "tooltip-n-help": "Fún ìrànlọ́wọ́.",
        "tooltip-t-whatlinkshere": "Àkójọ gbogbo ojúewé wiki tó jápọ̀ s'íbí",
        "tooltip-t-recentchangeslinked": "Àwọn àtúnṣe tuntun nínú àwọn ojúewé tójápọ̀ láti inú ojúewé yìí",
        "tooltip-feed-rss": "RSS feed fùn ojúewé yìí",
        "tooltip-feed-atom": "Atom feed fún ojúewé yìí",
        "tooltip-t-contributions": "Àtòjọ àwọn àfikún {{GENDER:$1|oníṣe yìí}}",
-       "tooltip-t-emailuser": "Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí",
+       "tooltip-t-emailuser": "Fi email ránṣẹ́ sí {{GENDER:$1|oníṣe yìí}}",
        "tooltip-t-upload": "Ìrùsókè àwọn fáìlì",
        "tooltip-t-specialpages": "Àkójọ gbogbo àwọn ojúewé pàtàkì",
-       "tooltip-t-print": "Ojúewé tí Ã³ á¹£e Ã© tẹÌ\80 á¹£'íwèé",
+       "tooltip-t-print": "Ojúewé tó á¹£e Ã© tẹÌ\80 á¹£Ã­ Ã¬wé",
        "tooltip-t-permalink": "Ìjápọ̀ tíkòyípadà sí àtúnyẹ̀wò fún ojúewé náà",
        "tooltip-ca-nstab-main": "Ìfihàn inú ojúewé",
        "tooltip-ca-nstab-user": "Ẹ wo ojúewé oníṣe",
        "pageinfo-article-id": "Nọ́mbà ìdámọ̀ ojúewé",
        "pageinfo-language": "Èdè àkóónú ojúewé",
        "pageinfo-robot-policy": "Ipò ẹ̀rọ ìṣàwárí",
-       "pageinfo-robot-index": "Ṣíṣeéwárí",
-       "pageinfo-robot-noindex": "Kò ṣeéwárí",
+       "pageinfo-robot-index": "Gbígbàláàyè",
+       "pageinfo-robot-noindex": "Àìgbàláàyè",
        "pageinfo-watchers": "Iye àwọn olùṣọ́ ojúewé",
+       "pageinfo-few-watchers": "Iye {{PLURAL:$1|olùwòran|àwọn olùwòran}} kò ju $1 lọ",
        "pageinfo-redirects-name": "Àwọn àtúnjúwe sí ojúewé yìí",
        "pageinfo-subpages-name": "Àwọn ojúewé tó wà lábẹ́ ojúewé yìí",
        "pageinfo-subpages-value": "$1 ({{PLURAL:$2|àtúnjúwe|àtúnjúwe}} $2; {{PLURAL:$3|àìjẹ́-àtúnjúwe|àìjẹ́-àtúnjúwe}} $3)",
        "watchlistedit-raw-done": "Àwọn àmójútó yín ti dọ̀tun.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Àkọlé 1|Àwọn àkọlẹ́ $1}} ti jẹ́ fífikún:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Àkọlé 1|Àwọn àkọlẹ́ $1}} ti jẹ́ yíyọkúrò:",
+       "watchlisttools-clear": "Kó ìtòjọ àmójútó kúrò",
        "watchlisttools-view": "Ẹ wo àwon àtúnṣe tóbaamu",
        "watchlisttools-edit": "Ìwò àti àtúnṣe ìmójútó",
        "watchlisttools-raw": "Ẹ ṣ'àtúnṣe àkójọ ìmójútó látìbẹ̀rẹ̀",
        "version-entrypoints": "Àwọn URL ojú ìwọlé",
        "version-entrypoints-header-entrypoint": "Ojú ìwọlé",
        "version-entrypoints-header-url": "URL",
+       "redirect": "Àþúnjúwe látọ̀dọ̀ fáìlì, oníṣe, ojúewé, àtúnwò, tàbí ID àkọọ́lẹ̀",
+       "redirect-submit": "Lọ",
+       "redirect-lookup": "Bojúwò:",
+       "redirect-value": "Iye:",
+       "redirect-user": "ID oníṣe",
+       "redirect-page": "ID ojúewé",
+       "redirect-revision": "Ìtúnyẹ̀wò ojúewé",
+       "redirect-file": "Orúkọ fáìlì",
        "fileduplicatesearch": "Ìṣàwárí fún àwọn fáìlì àdáwòkọ",
        "fileduplicatesearch-summary": "Ìṣàwárí fún àwọn fáìlì àdáwòkọ gẹ́gẹ́bí nọ́mbà hash",
        "fileduplicatesearch-filename": "Orúkọ fáìlì:",
        "fileduplicatesearch-result-n": "Fáìlì \"$1\" ní {{PLURAL:$2|ìdáwòkọ jíjọra 1|ìdáwòkọ jíjọra $2}}.",
        "fileduplicatesearch-noresults": "Kò sí fáìlì tó únjẹ́ \"$1\".",
        "specialpages": "Àwọn ojúewé pàtàkì",
-       "specialpages-note": "* Àwọn ojúewé pàtàkì onídéédé.\n* <span class=\"mw-specialpagerestricted\">Àwọn ojúewé pàtàkì àìgbàláyè.</span>",
        "specialpages-group-maintenance": "Àwọn ìjábọ̀ ìtọ́jú",
        "specialpages-group-other": "Àwọn ojúewé pàtàkì míràn",
        "specialpages-group-login": "Ìwọlé / ìdá àpamọ́",
        "tags-display-header": "Ìhàn lórí àtòjọ tuntun",
        "tags-description-header": "Ìjúwe kíkún ohun tó túmọ́sì",
        "tags-hitcount-header": "Àwọn àtúnṣe oníàlẹ̀mọ́",
+       "tags-active-yes": "Bẹ́ẹ̀ni",
+       "tags-active-no": "Bẹ́ẹ̀kọ́",
        "tags-edit": "àtúnṣe",
        "tags-hitcount": "{{PLURAL:$1|Àtúnṣe|Àwọn àtúnṣe}} $1",
        "comparepages": "Ìfiwéra àwọn ojúewé",
        "compare-invalid-title": "Àkọlè tí ẹ nàkasí kò tọ́.",
        "compare-title-not-exists": "Àkọlé tí ẹ tọ́kasí kò sí.",
        "compare-revision-not-exists": "Àtúnyẹ̀wò tí ẹ tọ́kasí kò sí.",
+       "diff-form": "'''fọ́ọ̀mù''' kan",
        "dberr-problems": "Àforìjì! Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.",
        "dberr-again": "Ẹ mú sùúrù fún ìṣẹ́jú díẹ̀ kí ẹ tó tún ṣe ìrùsókè.",
        "dberr-info": "(Kò le farakan ẹ̀rọ-ìpèsè ibùdó dátà: $1)",
        "htmlform-reset": "Ìdápadà àwọn àtúnṣe",
        "htmlform-selectorother-other": "Òmíràn",
        "logentry-delete-delete": "$1 pa ojúewé $3 rẹ́",
-       "logentry-delete-restore": "$1 dá ojúewé $3 padà",
+       "logentry-delete-restore": "$1 ti mú ojúewé $3 ($4) {{GENDER:$2|padàwá}}",
        "logentry-delete-event": "$1 ṣe àyípadà ìhànsí {{PLURAL:$5|ìṣẹ̀lẹ̀ àkọọ́lẹ̀ kan|àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ $5}} lórí $3: $4",
-       "logentry-delete-revision": "$1 ṣe àyípadà ìhànsí {{PLURAL:$5|àtúnyẹ̀wò kan|àwọn àtúnyẹ̀wò $5}} lórí $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|ṣe àyípadà}} ìhàn {{PLURAL:$5|àtúnyẹ̀wò kan|àwọn àtúnyẹ̀wò $5}} lórí $3: $4",
        "logentry-delete-event-legacy": "$1 ṣe àyípadà ìhànsí àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ lórí $3",
        "logentry-delete-revision-legacy": "$1 ṣe àyípadà ìhànsí àwọn àtúnyẹ̀wò lórí ojúewé $3",
        "logentry-suppress-delete": "$1 fi ojúewé $3 sílẹ̀",
        "revdelete-restricted": "ṣe ìmúlò ìpàlà fún àwọn olúmójútó",
        "revdelete-unrestricted": "yọ ìpàlà fún àwọn olúmójútó",
        "logentry-move-move": "$1 {{GENDER:$2|ṣeyípòdà}} ojúewé $3 sí $4",
-       "logentry-move-move-noredirect": "$1 ṣeyípòdà ojúewé $3 sí $4 láìfi àtúnjúwe sílẹ̀",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|ṣeyípòdà}} ojúewé $3 sí $4 láìfi àtúnjúwe sílẹ̀",
        "logentry-move-move_redir": "$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe",
        "logentry-move-move_redir-noredirect": "$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe láìfi àtúnjúwe sílẹ̀",
        "logentry-patrol-patrol": "$1 ṣe àmí àtúnyẹ̀wò $4 ojúewé $3 bíi sísọ́",
-       "logentry-patrol-patrol-auto": "$1 fúnraẹni ṣàmì àtúnyẹ̀wò $4 ti ojúewé $3 bíi síṣọ́",
+       "logentry-patrol-patrol-auto": "$1 fúnraẹni {{GENDER:$2|ṣàmì}} àtúnyẹ̀wò $4 sí ojúewé $3 bíi síṣọ́",
        "logentry-newusers-newusers": "Àpamọ́ oníṣe $1 jẹ́ dídá",
        "logentry-newusers-create": "Àkọ́pamọ́ oníṣe $1 ti jẹ́ {{GENDER:$2|dídá}}",
        "logentry-newusers-create2": "Àpamọ́ oníṣe $3 jẹ́ dídá látọwọ́ $1",
-       "logentry-newusers-autocreate": "Àkópamọ́ $1 jẹ́ dídá fúnrarẹ̀",
+       "logentry-newusers-autocreate": "Àkópamọ́ oníṣe $1 {{GENDER:$2|jẹ́ dídá}} fúnrarẹ̀",
        "logentry-rights-rights": "$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3 láti $4 sí $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|yí}} ọmọ ẹgbẹ́ padà fún $3",
        "logentry-rights-autopromote": "$1 jẹ́ {{GENDER:$2|gbígbénípòga}} nífúnraẹni láti $4 sí $5",
-       "logentry-upload-upload": "Ó dàfikún",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ṣe ìkósókè}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|s'àkówọlé}} ẹ̀yà tuntun $3",
        "rightsnone": "(kòsí)",
        "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
        "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
        "feedback-subject": "Oríọ̀rọ̀:",
        "feedback-submit": "Fúnsílẹ̀",
        "feedback-thanks": "Adúpẹ́! Ìdáhùn yín ti jẹ́ fífikún sí ojúewé \"[$2 $1]\".",
-       "searchsuggest-search": "Ṣàwárí",
+       "searchsuggest-search": "Ṣ'àwáàrí nínú {{SITENAME}}",
        "searchsuggest-containing": "tó ní...",
        "api-error-badtoken": "Àsìṣe inú: Ìdáramọ̀ búburú.",
        "api-error-emptypage": "Ẹ kò ní àyè láti dá ojúewé tuntun tó jẹ́ òfo.",
        "special-characters-group-gujarati": "Gujarati",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "randomrootpage": "Ojúewé ìtẹ́dìí àrìnàkò"
 }
index 849397f..f30b982 100644 (file)
@@ -62,7 +62,7 @@
        "tog-shownumberswatching": "顯示有幾多人監視",
        "tog-oldsig": "你而家嘅簽名:",
        "tog-fancysig": "將簽名以維基字對待(冇自動連結)",
-       "tog-uselivepreview": "用即時預覽",
+       "tog-uselivepreview": "響冇重新加載過個頁面嘅情況下用即時預覽",
        "tog-forceeditsummary": "我冇入修改註解時通知我",
        "tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
        "tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
        "anonpreviewwarning": "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''",
        "missingsummary": "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「$1」嘅話,咁你儲存嘅編輯就會無摘要。",
        "selfredirect": "<strong>警告:</strong> 你個跳轉彈返去自己度。\n你可能設錯咗跳轉目標,或者改錯咗版。\n如果你再撳多「$1」一下,就會照幫你開呢個跳轉。",
-       "missingcommenttext": "請輸入一個註解。",
+       "missingcommenttext": "請打評語。",
        "missingcommentheader": "<strong>提醒:</strong>你響呢個註解度並無提供一個主題/標題。如果你再撳一次「$1」,你嘅編輯就會無題。",
        "summary-preview": "編輯摘要預覽:",
        "subject-preview": "主題預覽:",
        "userpage-userdoesnotexist": "用戶戶口\"<nowiki>$1</nowiki>\"重未開。請響䦒/編輯呢版之前先檢查一下。",
        "userpage-userdoesnotexist-view": "用戶戶口\"$1\"重未開。",
        "blocked-notice-logextract": "呢位用戶而家被封鎖緊。\n下面有最近嘅封鎖紀錄以供參考:",
-       "clearyourcache": "<strong>注意</strong>:喺儲存之後,你可能要先略過你嘅瀏覽器快取去睇到更改。\n*<strong>Firefox / Safari:</strong> 㩒住<em>Shift<em>掣再撳<em>重新載入</em>,又或者㩒<em>Ctrl-F5</em>或者<em>Ctrl-R</em>(喺Mac㩒<em>Command-R</em>掣);\n*<strong>Google Chrome:</strong> 㩒<em>Ctrl-Shift-R</em>(喺Mac㩒<em>Command-R</em>掣);\n*<strong>Internet Explorer:</strong> 㩒住<em>Ctrl</em>掣再撳<em>重新整理</em>,又或者㩒<em>Ctrl-F5</em>掣;\n*<strong>Opera:</strong> 去 <em>選單 → 設定</em> (喺 Mac 係 <em>Opera → 偏好設定</em>) 跟住再到 <em>隱私 & 安全性 → 清除瀏覽資料 → 已快取的圖片與檔案</em>。",
+       "clearyourcache": "<strong>注意</strong>:喺儲存之後,你可能要先略過你嘅瀏覽器快取去睇到更改。\n* <strong>Firefox / Safari:</strong> 㩒住<em>Shift</em>掣再撳<em>重新載入</em>,又或者㩒<em>Ctrl-F5</em>或者<em>Ctrl-R</em>(喺Mac㩒<em>Command-R</em>掣);\n* <strong>Google Chrome:</strong> 㩒<em>Ctrl-Shift-R</em>(喺Mac㩒<em>Command-R</em>掣);\n* <strong>Internet Explorer:</strong> 㩒住<em>Ctrl</em>掣再撳<em>重新整理</em>,又或者㩒<em>Ctrl-F5</em>掣;\n* <strong>Opera:</strong> 去 <em>選單 → 設定</em> (喺 Mac 係 <em>Opera → 偏好設定</em>) 跟住再到 <em>隱私 & 安全性 → 清除瀏覽資料 → 已快取的圖片與檔案</em>。",
        "usercssyoucanpreview": "'''提示:'''響儲存前,用「{{int:showpreview}}」個掣嚟測試你嘅新CSS。",
        "userjsyoucanpreview": "'''提示:'''響儲存前,用「{{int:showpreview}}」個掣嚟測試你嘅新JavaScript。",
        "usercsspreview": "'''記住你而家只係預覽緊你嘅用戶CSS樣式表。'''\n'''佢嘅內容重未儲存!'''",
        "contentmodelediterror": "你唔改得呢版修訂,因為呢個修訂嘅內容模型係 <code>$1</code> ,同而家嘅內容模型 <code>$2</code> 有分別。",
        "recreate-moveddeleted-warn": "'''警告: 你而家重開一版係先前曾經刪除過嘅。'''\n\n你應該要考慮吓繼續編輯呢一版係唔係適合嘅。\n為咗方便起見,呢一版嘅刪除同搬版記錄已經響下面提供:",
        "moveddeleted-notice": "呢一版已經刪咗。\n呢版嘅刪除同搬版日誌響下面提供咗以便參考。",
-       "moveddeleted-notice-recent": "å\94\94好æ\84\8fæ\80\9dï¼\8cå\91¢ç\89\88å\95±å\95±å\88ªèµ°å\92\97ï¼\88æ\9c\80è¿\9124å\80\8bé\90\98å\85§ï¼\89ã\80\82\nå\91¢ç\89\88å\88ªç\89\88å\90\8cæ\90¬ç\89\88紀錄喺下低做參考。",
+       "moveddeleted-notice-recent": "å\94\94好æ\84\8fæ\80\9dï¼\8cå\91¢ç\89\88å\95±å\95±å\88ªèµ°å\92\97ï¼\88æ\9c\80è¿\9124å\80\8bé\90\98å\85§ï¼\89ã\80\82\nå\91¢ç\89\88å\98\85å\88ªç\89\88ã\80\81æ\90¬ç\89\88å\90\8cä¿\9dè­·紀錄喺下低做參考。",
        "log-fulllog": "睇成個日誌",
        "edit-hook-aborted": "編輯由鈎取消咗。\n佢無畀到解釋。",
        "edit-gone-missing": "唔能夠更新頁。\n佢可能啱啱刪除咗。",
        "prefs-editwatchlist-clear": "清理你嘅監視清單",
        "prefs-watchlist-days": "監視清單嘅顯示日數:",
        "prefs-watchlist-days-max": "最多 $1 日",
-       "prefs-watchlist-edits": "喺加強版監視清單度嘅最多顯示更改數:",
+       "prefs-watchlist-edits": "監視清單度嘅最多顯示更改數:",
        "prefs-watchlist-edits-max": "最大數量:1000",
        "prefs-watchlist-token": "監視清單幣:",
        "prefs-misc": "雜項",
        "timezoneregion-europe": "歐洲",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
-       "allowemail": "由其它用戶啟用電子郵件",
+       "allowemail": "允許其它用戶發電子郵件俾我",
        "prefs-searchoptions": "搵嘢",
        "prefs-namespaces": "空間名",
        "default": "預設",
        "rcfilters-days-show-hours": "$1{{PLURAL:$1|個鐘}}",
        "rcfilters-highlighted-filters-list": "螢光標示: $1",
        "rcfilters-quickfilters": "儲存咗嘅篩選條件",
-       "rcfilters-quickfilters-placeholder-title": "æ\9cªæ\9c\89å\84²å­\98å\92\97å\98\85é\80£çµ\90",
+       "rcfilters-quickfilters-placeholder-title": "æ\9cªæ\9c\89å\84²å­\98å\92\97å\98\85é\81\8e濾å\99¨",
        "rcfilters-quickfilters-placeholder-description": "要儲存篩選條件設定留返第日用,撳下面用緊篩選條件嗰度嗰個書籤公仔。",
        "rcfilters-savedqueries-defaultlabel": "儲存咗嘅篩選條件",
        "rcfilters-savedqueries-rename": "改名",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:唔係</strong> $1",
        "rcfilters-exclude-button-off": "排除揀咗嘅",
        "rcfilters-exclude-button-on": "排除揀咗嘅",
-       "rcfilters-view-advanced-filters-label": "進階嘅篩選條件",
        "rcfilters-view-tags": "有標籤嘅編輯",
        "rcfilters-view-namespaces-tooltip": "跟版名空間去篩選結果",
        "rcfilters-view-tags-tooltip": "用編輯標籤去篩選結果",
        "recentchangeslinked-page": "頁名:",
        "recentchangeslinked-to": "顯示連到所畀到嘅版",
        "recentchanges-page-added-to-category": "[[:$1]] 加咗落分類",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] 同另外 [[Special:WhatLinksHere/$1|{{PLURAL:$2|1 版|$2 版}}]]加咗落分類",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] 同另外 [[Special:WhatLinksHere/$1|一版比其他版包含咗]]",
        "recentchanges-page-removed-from-category": "[[:$1]] 拎走咗分類",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] 同另外 {{PLURAL:$2|1 版|$2 版}}拎走咗分類",
+       "recentchanges-page-removed-from-category-bundled": "$1[[:$1]] 同另外 [[Special:WhatLinksHere/$1|伊一版比其他版包含咗]] 響分類到拎走左",
        "autochange-username": "MediaWiki 自動改動",
        "upload": "上載檔案",
        "uploadbtn": "上載檔案",
        "uploadstash-summary": "呢一版提供已經上載咗(或者上載緊)但係重未發佈到wiki嘅檔案存取。呢啲檔案除咗係上載佢哋嘅用戶之外其他人都會睇唔到。",
        "uploadstash-clear": "清除貯藏檔案",
        "uploadstash-nofiles": "你冇貯藏咗嘅檔案。",
-       "uploadstash-badtoken": "進行呢個動作唔成功,或者你嘅編輯資訊已經過咗期。再試吓喇。",
+       "uploadstash-badtoken": "進行呢個動作唔成功,可能係你嘅編輯資訊已經過咗期。再試吓喇。",
        "uploadstash-errclear": "清除檔案唔成功。",
        "uploadstash-refresh": "更新檔案清單",
        "invalid-chunk-offset": "非法偏移塊",
        "unwatchthispage": "停止監視",
        "notanarticle": "唔係一個內容頁",
        "notvisiblerev": "上次由唔同用戶嘅修訂已經刪除咗",
-       "watchlist-details": "唔計討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
+       "watchlist-details": "計埋討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
        "wlheader-enotif": "電郵通知已經啟用咗。",
        "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
        "wlnote": "下面係直到$3 $4為止,最近'''$2'''個鐘之內嘅最新$1次修改。",
        "editcomment": "編輯摘要係:<em>$1</em>。",
        "revertpage": "已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。",
        "revertpage-nouser": "已經反轉咗由收埋咗嘅用戶名所寫嘅編輯,到[[User:$1|$1]]所寫嘅最後修訂版本。",
-       "rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
+       "rollback-success": "已經反轉由{{GENDER:$3|$1}};所寫嘅編輯;恢復到{{GENDER:$4|$2}}嘅最後修訂。",
        "sessionfailure-title": "會話失敗",
        "sessionfailure": "你嘅登入會話 (session) 好似有啲問題;\n為咗防止會話劫持,呢個操作已經取消。\n請返去之前嗰版,重新載入嗰版然後再試。",
        "changecontentmodel": "喺頁面內改目錄類",
        "sp-contributions-newbies-sub": "新戶口嘅貢獻",
        "sp-contributions-newbies-title": "新戶口嘅用戶貢獻",
        "sp-contributions-blocklog": "封鎖日誌",
-       "sp-contributions-suppresslog": "壓制咗嘅用戶貢獻",
-       "sp-contributions-deleted": "已經刪除咗嘅用戶貢獻",
+       "sp-contributions-suppresslog": "壓制咗{{GENDER:$1|user}}嘅用戶貢獻",
+       "sp-contributions-deleted": "用戶{{GENDER:$1|user}}嘅貢獻已經刪除咗",
        "sp-contributions-uploads": "上載",
        "sp-contributions-logs": "日誌",
        "sp-contributions-talk": "傾偈",
-       "sp-contributions-userrights": "用戶權限管理",
+       "sp-contributions-userrights": "{{GENDER:$1|user}}用戶權限管理",
        "sp-contributions-blocked-notice": "呢位用戶現時封鎖緊。\n最近嘅封鎖日誌項目響下面提供以便參考:",
        "sp-contributions-blocked-notice-anon": "呢個IP地址現時封鎖緊。\n最近嘅封鎖日誌項目響下面提供以便參考:",
        "sp-contributions-search": "搵貢獻",
        "compare-rev1": "修訂1",
        "compare-rev2": "修訂2",
        "compare-submit": "比較",
-       "diff-form": "",
+       "diff-form": "唔同嘅地方",
        "dberr-problems": "對唔住!呢一版出現咗一啲技術性問題。",
        "dberr-again": "試吓等多幾分種然後開試。",
        "dberr-info": "(唔能夠連繫個資料庫:$1)",
index a387622..958ac07 100644 (file)
        "tog-shownumberswatching": "显示监视用户数",
        "tog-oldsig": "您现有的签名:",
        "tog-fancysig": "将签名视为维基文本(不自动生成链接)",
-       "tog-uselivepreview": "显示预览而不加载页面",
+       "tog-uselivepreview": "显示预览而不重新加载页面",
        "tog-forceeditsummary": "未输入编辑摘要时提醒我",
        "tog-watchlisthideown": "隐藏监视列表中的我的编辑",
        "tog-watchlisthidebots": "隐藏监视列表中的机器人编辑",
        "anonpreviewwarning": "<em>您没有登录。保存将您的IP地址记录至此页面的编辑历史中。</em>",
        "missingsummary": "<strong>提示:</strong>您没有提供编辑摘要。如果您再次点击“$1”,您的编辑将不带摘要保存。",
        "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。您可能指定了错误的重定向目标,或者您正在编辑错误的页面。如果您再次点击“$1”,重定向仍将被创建。",
-       "missingcommenttext": "请在下面输入评论。",
+       "missingcommenttext": "请输入一段评论。",
        "missingcommentheader": "<strong>提示:</strong>您还没有为此评论提供一个标题。如果您再次点击“$1”,您的编辑将不带标题保存。",
        "summary-preview": "编辑摘要的预览:",
        "subject-preview": "主题的预览:",
        "timezoneregion-europe": "欧洲",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
-       "allowemail": "å\90¯ç\94¨æ\9d¥è\87ªå\85¶ä»\96ç\94¨æ\88·ç\9a\84电子邮件",
+       "allowemail": "å\85\81许å\85¶ä»\96ç\94¨æ\88·å\90\91æ\88\91å\8f\91é\80\81电子邮件",
        "email-blacklist-label": "禁止这些用户给我发送电子邮件:",
        "prefs-searchoptions": "搜索",
        "prefs-namespaces": "名字空间",
        "gender-unknown": "当提及您时,软件将尽可能使用性别中性的词法",
        "gender-male": "他",
        "gender-female": "她",
-       "prefs-help-gender": "该设置为可选项。系统会使用您选择的方式来称呼您,对他人提及您时也会使用适当语法称呼。该信息会公开。",
+       "prefs-help-gender": "该设置为可选项。软件会使用您选择的方式来称呼您,对他人提及您时也会使用适当语法称呼。该信息会公开。",
        "email": "电子邮件",
        "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。",
        "prefs-help-email": "电子邮件地址是选填项,但是当您忘记您的密码要重置密码时,需要该信息。",
        "recentchanges-legend": "最近更改选项",
        "recentchanges-summary": "在本页面追踪本wiki的最近更改。",
        "recentchanges-noresult": "在此期间没有符合这些条件的编辑",
+       "recentchanges-timeout": "此次搜索已超时。您可以尝试不同的搜索参数。",
+       "recentchanges-network": "由于技术错误,没有加载任何结果。请尝试刷新页面。",
        "recentchanges-feed-description": "用这个源跟踪本wiki的最近更改。",
        "recentchanges-label-newpage": "该编辑创建了新页面",
        "recentchanges-label-minor": "该编辑为小编辑",
        "recentchanges-submit": "显示",
        "rcfilters-tag-remove": "移除“$1”",
        "rcfilters-legend-heading": "<strong>缩写列表:</strong>",
-       "rcfilters-other-review-tools": "<strong>其他复核工具</strong>",
+       "rcfilters-other-review-tools": "其他复核工具",
        "rcfilters-group-results-by-page": "按页面分组结果",
        "rcfilters-grouping-title": "分组",
        "rcfilters-activefilters": "激活的过滤器",
        "rcfilters-days-show-hours": "$1{{PLURAL:$1|小时}}",
        "rcfilters-highlighted-filters-list": "已高亮:$1",
        "rcfilters-quickfilters": "已保存过滤器",
-       "rcfilters-quickfilters-placeholder-title": "尚未保存链接",
+       "rcfilters-quickfilters-placeholder-title": "尚未保存过滤器",
        "rcfilters-quickfilters-placeholder-description": "要保存您的过滤器设置并供日后再利用,点击下方激活的过滤器区域内的书签图标。",
        "rcfilters-savedqueries-defaultlabel": "保存的过滤器",
        "rcfilters-savedqueries-rename": "重命名",
        "rcfilters-savedqueries-apply-and-setdefault-label": "创建默认过滤器",
        "rcfilters-savedqueries-cancel-label": "取消",
        "rcfilters-savedqueries-add-new-title": "保存当前过滤器设置",
+       "rcfilters-savedqueries-already-saved": "这些过滤器已保存。更改您的设置以创建新的保存过滤器。",
        "rcfilters-restore-default-filters": "恢复默认过滤器",
        "rcfilters-clear-all-filters": "清空所有过滤器",
        "rcfilters-show-new-changes": "显示最新更改",
-       "rcfilters-search-placeholder": "过滤器最近更改(浏览或开始输入)",
+       "rcfilters-search-placeholder": "过滤更改(使用菜单或搜索过滤器名称)",
        "rcfilters-invalid-filter": "无效过滤器",
        "rcfilters-empty-filter": "没有激活的过滤器。已显示所有贡献。",
        "rcfilters-filterlist-title": "过滤器",
        "rcfilters-filter-editsbyself-description": "您自己的贡献。",
        "rcfilters-filter-editsbyother-label": "他人更改",
        "rcfilters-filter-editsbyother-description": "除了您的更改以外的所有更改。",
-       "rcfilters-filtergroup-userExpLevel": "用户注册及验",
+       "rcfilters-filtergroup-userExpLevel": "用户注册及验",
        "rcfilters-filter-user-experience-level-registered-label": "已注册",
        "rcfilters-filter-user-experience-level-registered-description": "登录编辑者。",
        "rcfilters-filter-user-experience-level-unregistered-label": "未注册",
        "rcfilters-filter-user-experience-level-unregistered-description": "未登录的编辑者。",
        "rcfilters-filter-user-experience-level-newcomer-label": "新手",
-       "rcfilters-filter-user-experience-level-newcomer-description": "少于10次编辑和4天活跃。",
+       "rcfilters-filter-user-experience-level-newcomer-description": "少于10次编辑或4天活跃的注册编辑者。",
        "rcfilters-filter-user-experience-level-learner-label": "初学者",
        "rcfilters-filter-user-experience-level-learner-description": "比“新手”拥有更多经验,但少于“有经验的用户”。",
        "rcfilters-filter-user-experience-level-experienced-label": "有经验的用户",
-       "rcfilters-filter-user-experience-level-experienced-description": "超过30天活跃和500次编辑。",
+       "rcfilters-filter-user-experience-level-experienced-description": "超过500次编辑和30天活跃的注册编辑者。",
        "rcfilters-filtergroup-automated": "自动化贡献者",
        "rcfilters-filter-bots-label": "机器人",
        "rcfilters-filter-bots-description": "由自动化工具做出的编辑。",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:不是</strong>$1",
        "rcfilters-exclude-button-off": "排除选项",
        "rcfilters-exclude-button-on": "排除选项",
-       "rcfilters-view-advanced-filters-label": "高级过滤器",
        "rcfilters-view-tags": "标记的编辑",
        "rcfilters-view-namespaces-tooltip": "按名字空间过滤结果",
        "rcfilters-view-tags-tooltip": "按编辑标签过滤结果",
        "uploaded-script-svg": "在上传的SVG文件中找到可编写脚本的元素“$1”。",
        "uploaded-hostile-svg": "在上传的SVG文件中的样式元素中找到不安全CSS。",
        "uploaded-event-handler-on-svg": "在SVG文件中不允许设置event-handler属性<code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "SVGæ\96\87件中ç\9a\84hrefå±\9eæ\80§å\8fªå\85\81许é\93¾æ\8e¥è\87³http://æ\88\96https://ç\9b®æ \87ï¼\8cå·²æ\89¾å\88°<code>&lt;$1 $2=\"$3\"&gt;</code>ã\80\82",
+       "uploaded-href-attribute-svg": "<a>å\85\83ç´ å\8fªè\83½é\93¾æ\8e¥ï¼\88hrefï¼\89å\88° data:ï¼\88åµ\8cå\85¥æ\96\87件ï¼\89ï¼\8chttp:// æ\88\96 https:// ï¼\8cæ\88\96ç\89\87段ï¼\88#ï¼\8cå\90\8cä¸\80æ\96\87档中ï¼\89ã\80\82对äº\8eå\85¶ä»\96å\85\83ç´ ï¼\8cå¦\82<image>ï¼\8cå\8fªå\85\81许é\93¾æ\8e¥data:å\92\8cç\89\87段ã\80\82 å\9c¨å¯¼å\87ºSVGæ\97¶å°\9dè¯\95åµ\8cå\85¥å\9b¾å\83\8fã\80\82å\8f\91ç\8e°<code>&lt;$1 $2=\"$3\"&gt;</code>ã\80\82",
        "uploaded-href-unsafe-target-svg": "在上传的SVG文件中找到了至不安全数据的href:URI目标<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "在上传的SVG文件找到“animate”标签,它可能会更改href,使用“from”属性<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-setting-event-handler-svg": "设置event-handler属性时受阻,在上传的SVG文件中找到<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploadstash-refresh": "更新文件列表",
        "uploadstash-thumbnail": "显示缩略图",
        "uploadstash-exception": "不能将上传内容存储至暂存处($1):“$2”。",
+       "uploadstash-bad-path": "路径不存在。",
+       "uploadstash-bad-path-invalid": "路径无效。",
+       "uploadstash-bad-path-unknown-type": "未知类型“$1”。",
+       "uploadstash-bad-path-unrecognized-thumb-name": "无法识别的缩略图名称。",
+       "uploadstash-bad-path-no-handler": "找不到用于文件$2的mime $1的处理器。",
+       "uploadstash-bad-path-bad-format": "关键字“$1”的格式不适当。",
+       "uploadstash-file-not-found": "在暂存处找不到关键字“$1”。",
+       "uploadstash-file-not-found-no-thumb": "无法获得缩略图。",
+       "uploadstash-file-not-found-no-local-path": "没有用于缩放项目的本地路径。",
+       "uploadstash-file-not-found-no-object": "无法创建用于缩略图的本地文件对象。",
+       "uploadstash-file-not-found-no-remote-thumb": "取得缩略图失败:$1\nURL = $2。",
+       "uploadstash-file-not-found-missing-content-type": "缺少内容类型标头。",
+       "uploadstash-file-not-found-not-exists": "找不到路径,或不是纯文件。",
+       "uploadstash-file-too-large": "无法处理超过$1字节的文件。",
+       "uploadstash-not-logged-in": "没有用户登录,文件必须属于用户。",
+       "uploadstash-wrong-owner": "此文件($1)不属于当前用户。",
+       "uploadstash-no-such-key": "没有该关键字($1),不能移除。",
+       "uploadstash-no-extension": "扩展名为空。",
+       "uploadstash-zero-length": "文件长度为零。",
        "invalid-chunk-offset": "无效区块偏移量",
        "img-auth-accessdenied": "拒绝访问",
        "img-auth-nopathinfo": "PATH_INFO缺失。\n您的服务器尚未设置传送该信息。\n它可能基于CGI,因而不支持img_auth。\n请参见https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
index 4a73cab..c82fc91 100644 (file)
@@ -89,7 +89,9 @@
                        "Wwycheuk",
                        "Corainn",
                        "WhitePhosphorus",
-                       "Translatealcd"
+                       "Translatealcd",
+                       "蘭斯特",
+                       "机智的小鱼君"
                ]
        },
        "tog-underline": "底線標示連結:",
        "tog-shownumberswatching": "顯示監視使用者數量",
        "tog-oldsig": "您現有的簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
-       "tog-uselivepreview": "使用即時預覽",
+       "tog-uselivepreview": "顯示預覽而不重新載入頁面",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
        "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "tog-watchlisthideminor": "隱藏監視清單中的次要修訂",
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
-       "tog-watchlistreloadautomatically": "查詢條件變更時自動重新讀取監視清單 (需要使用 JavaScript)",
+       "tog-watchlistreloadautomatically": "查詢條件變更時自動重新讀取監視清單(需要使用 JavaScript)",
+       "tog-watchlistunwatchlinks": "添加監視列表條目的直接(取消)監視鏈接(需要JavaScript才能打開功能)",
        "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
        "tog-watchlisthidecategorization": "隱藏頁面分類",
        "anonpreviewwarning": "<em>您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。</em>",
        "missingsummary": "<strong>提醒:</strong>您未填寫編輯摘要。\n若您再點選 \"$1\" 一次,將略過摘要直接儲存您的編輯。",
        "selfredirect": "<strong>警告:</strong> 您正建立連結至自己的重新導向。\n您可能指定錯要重新導向的目標頁面或者編輯錯頁面。\n若您再點選 \"$1\" 一次,將會繼續建立重新導向。",
-       "missingcommenttext": "請在下方輸入評論。",
+       "missingcommenttext": "請輸入一段評論。",
        "missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨。\n若您再點選 \"$1\" 一次,將略過主旨/標題直接儲存您的評論。",
        "summary-preview": "編輯摘要預覽:",
        "subject-preview": "預覽主旨:",
        "yourtext": "您的文字",
        "storedversion": "已儲存修訂",
        "editingold": "<strong>警告:您目前正編輯頁面的舊修訂版本。</strong>\n若您儲存,在此修訂之後變更的任何內容將會遺失。",
+       "unicode-support-fail": "看起來您的瀏覽器不支援Unicode。需要Unicode才能編輯頁面,所以您的編輯無法儲存。",
        "yourdiff": "差異",
        "copyrightwarning": "請注意,所有於 {{SITENAME}} 所做的貢獻會依據 $2 授權條款發佈 (詳情請見 $1)。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
        "copyrightwarning2": "請注意,所有於 {{SITENAME}} 所做的貢獻可能會被其他貢獻者編輯,修改或刪除。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源 (詳情請見 $1)。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
        "contentmodelediterror": "您無法編輯此修訂,因此修訂使用的內容模型為 <code>$1</code> 與目前使用的頁面內容模型 <code>$2</code> 不同。",
        "recreate-moveddeleted-warn": "<strong>警告:您正重新建立先前已刪除的頁面。</strong>\n\n您應考慮是否繼續編輯此頁。\n在此提供刪除與移動日誌方便作為參考:",
        "moveddeleted-notice": "此頁面已刪除。\n下方提供此頁面的刪除、保護和移動日誌以便參考。",
-       "moveddeleted-notice-recent": "抱歉,此頁面最近被刪除 (24 小時內)。\n以下提供此頁面的刪除與移動日誌做為參考。",
+       "moveddeleted-notice-recent": "對不起,此頁面剛剛被刪除(在最近24小時內)。頁面的刪除、保護和移動日誌在下方提供以供參考。",
        "log-fulllog": "檢視完整日誌",
        "edit-hook-aborted": "編輯已被 Hook 中止。\n且未回應無任何說明。",
        "edit-gone-missing": "無法更新頁面。\n該頁面可能已被刪除。",
        "revdelete-hide-comment": "編輯摘要",
        "revdelete-hide-user": "編輯者的使用者名稱/IP 位址",
        "revdelete-hide-restricted": "禁止顯示資料給管理者及其他使用者",
-       "revdelete-radio-same": "(不更改)",
+       "revdelete-radio-same": "(不作變更)",
        "revdelete-radio-set": "隱藏",
        "revdelete-radio-unset": "顯示",
        "revdelete-suppress": "禁止向管理者及其他使用者顯示資料",
        "prefs-editwatchlist-clear": "清除您的監視清單",
        "prefs-watchlist-days": "在監視清單中顯示的天數:",
        "prefs-watchlist-days-max": "最多 $1 {{PLURAL:$1|天}}",
-       "prefs-watchlist-edits": "展開監視清單中顯示的變更數量上限:",
+       "prefs-watchlist-edits": "監視清單中顯示的變更數量上限:",
        "prefs-watchlist-edits-max": "數量上限:1000",
        "prefs-watchlist-token": "監視清單金鑰:",
        "prefs-misc": "其他",
        "timezoneregion-europe": "歐洲",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
-       "allowemail": "開啟來自其他使用者的郵件通知功能",
+       "allowemail": "允許其他使用者向我傳送電子郵件",
+       "email-blacklist-label": "禁止這些使用者向我傳送電子郵件:",
        "prefs-searchoptions": "搜尋",
        "prefs-namespaces": "命名空間",
        "default": "預設",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁面]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "顯示",
+       "rcfilters-tag-remove": "移除「$1」",
        "rcfilters-legend-heading": "<strong>縮寫列表:</strong>",
-       "rcfilters-other-review-tools": "<strong>其他檢閱工具</strong>",
+       "rcfilters-other-review-tools": "其他檢閱工具",
        "rcfilters-group-results-by-page": "按頁面分組結果",
        "rcfilters-grouping-title": "分組",
        "rcfilters-activefilters": "使用中的過濾條件",
        "rcfilters-limit-shownum": "顯示最近{{PLURAL:$1|$1次更改}}",
        "rcfilters-days-title": "最近幾天",
        "rcfilters-hours-title": "最近幾個小時",
+       "rcfilters-days-show-days": "$1{{PLURAL:$1|天}}",
+       "rcfilters-days-show-hours": "$1{{PLURAL:$1|小時}}",
+       "rcfilters-highlighted-filters-list": "已明顯標示:$1",
        "rcfilters-quickfilters": "儲存的查詢條件",
-       "rcfilters-quickfilters-placeholder-title": "尚未儲存任何連結",
+       "rcfilters-quickfilters-placeholder-title": "尚未保存過濾器",
        "rcfilters-quickfilters-placeholder-description": "要儲存您的篩選器設定並供以後重新使用,點選下方啟用的篩選器區域之內的書籤圖示。",
        "rcfilters-savedqueries-defaultlabel": "已儲存的查詢條件",
        "rcfilters-savedqueries-rename": "重新命名",
        "rcfilters-savedqueries-new-name-label": "名稱",
        "rcfilters-savedqueries-new-name-placeholder": "說明查詢條件的用途",
        "rcfilters-savedqueries-apply-label": "建立查詢條件",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "建立預設過濾器",
        "rcfilters-savedqueries-cancel-label": "取消",
        "rcfilters-savedqueries-add-new-title": "儲存目前的過濾器設定",
        "rcfilters-restore-default-filters": "還原預設過濾條件",
        "rcfilters-clear-all-filters": "清除所有過濾條件",
        "rcfilters-show-new-changes": "顯示最新更改",
-       "rcfilters-search-placeholder": "過濾條件近期變更 (瀏覽或開始輸入)",
+       "rcfilters-search-placeholder": "過濾近期變更(瀏覽或開始輸入)",
        "rcfilters-invalid-filter": "無效的過濾條件",
        "rcfilters-empty-filter": "沒有使用中的過濾條件。已顯示所有的貢獻。",
        "rcfilters-filterlist-title": "過濾條件",
-       "rcfilters-filterlist-whatsthis": "這是什麼?",
-       "rcfilters-filterlist-feedbacklink": "提供新 (測試版) 過濾條件的意見回饋",
+       "rcfilters-filterlist-whatsthis": "這些是怎樣工作的?",
+       "rcfilters-filterlist-feedbacklink": "告訴我們您對這些(新)過濾工具有什麼想法",
        "rcfilters-highlightbutton-title": "明顯標示結果",
        "rcfilters-highlightmenu-title": "選擇顏色",
        "rcfilters-highlightmenu-help": "選擇要明顯標示此屬性的色彩",
        "rcfilters-filter-editsbyself-description": "您的貢獻",
        "rcfilters-filter-editsbyother-label": "其他人的更改",
        "rcfilters-filter-editsbyother-description": "除了您以外的所有更改",
-       "rcfilters-filtergroup-userExpLevel": "經驗等級 (僅限已註冊的使用者)",
+       "rcfilters-filtergroup-userExpLevel": "使用者註冊及經驗",
        "rcfilters-filter-user-experience-level-registered-label": "已註冊",
-       "rcfilters-filter-user-experience-level-registered-description": "å·²ç\99»å\85¥ç\9a\84編輯è\80\85ã\80\82",
+       "rcfilters-filter-user-experience-level-registered-description": "已登入編輯者。",
        "rcfilters-filter-user-experience-level-unregistered-label": "未註冊",
        "rcfilters-filter-user-experience-level-unregistered-description": "未有登入的編輯者。",
        "rcfilters-filter-user-experience-level-newcomer-label": "新手",
-       "rcfilters-filter-user-experience-level-newcomer-description": "編輯數低於 10 次,活躍低於 4 天。",
+       "rcfilters-filter-user-experience-level-newcomer-description": "少於10次編輯或4天活躍的註冊編輯者。",
        "rcfilters-filter-user-experience-level-learner-label": "初學者",
        "rcfilters-filter-user-experience-level-learner-description": "比「新手」資深,但比「有經驗的使用者」資淺。",
        "rcfilters-filter-user-experience-level-experienced-label": "有經驗的使用者",
-       "rcfilters-filter-user-experience-level-experienced-description": "活躍超過 30 天,編輯超過 500 次。",
+       "rcfilters-filter-user-experience-level-experienced-description": "活躍超過30天且編輯超過500次的註冊編輯者。",
        "rcfilters-filtergroup-automated": "自動化貢獻",
        "rcfilters-filter-bots-label": "機器人",
        "rcfilters-filter-bots-description": "由自動化工具所做的編輯。",
        "rcfilters-filter-watchlist-notwatched-label": "不在監視清單內",
        "rcfilters-filter-watchlist-notwatched-description": "除了更改您的監視頁面以外的任何事項。",
        "rcfilters-filtergroup-watchlistactivity": "監視列表活動",
-       "rcfilters-filter-watchlistactivity-unseen-label": "未查看更改",
+       "rcfilters-filter-watchlistactivity-unseen-label": "未讀變更",
        "rcfilters-filter-watchlistactivity-unseen-description": "自從更改發生以來,對您沒有訪問的頁面做出的更改。",
-       "rcfilters-filter-watchlistactivity-seen-label": "已查看更改",
+       "rcfilters-filter-watchlistactivity-seen-label": "已讀變更",
        "rcfilters-filter-watchlistactivity-seen-description": "自從更改發生以來,對您已訪問的頁面做出的更改。",
        "rcfilters-filtergroup-changetype": "變更類型",
        "rcfilters-filter-pageedits-label": "頁面編輯",
        "rcfilters-filter-newpages-label": "頁面建立",
        "rcfilters-filter-newpages-description": "建立新頁面的編輯。",
        "rcfilters-filter-categorization-label": "分類變更",
-       "rcfilters-filter-categorization-description": "å·²å\8a å\85¥å\88°å\88\86é¡\9eæ\88\96å¾\9eå\88\86é¡\9e中移é\99¤ç\9a\84é \81é\9d¢記錄。",
+       "rcfilters-filter-categorization-description": "å¾\9eå\88\86é¡\9e中添å\8a æ\88\96移é\99¤é \81é\9d¢ç\9a\84記錄。",
        "rcfilters-filter-logactions-label": "日誌動作",
        "rcfilters-filter-logactions-description": "管理動作、帳號建立、頁面刪除、上傳…",
        "rcfilters-hideminor-conflicts-typeofchange-global": "\"次要編輯\" 過濾條件與一個或多個變更類型過濾條件衝突,因為某些變更類型無法指定為 \"次要\"。衝突的過濾條件已在上方使用的過濾條件區域中標示。",
        "rcfilters-hideminor-conflicts-typeofchange": "某些變更類型無法指定為 \"次要\",所以此過濾條件與以下變更類型的過濾條件衝突:$1",
        "rcfilters-typeofchange-conflicts-hideminor": "此變更類型過濾條件與 \"次要編輯\" 過濾條件衝突,某些變更類型無法指定為 \"次要\"。",
-       "rcfilters-filtergroup-lastRevision": "最新版本",
-       "rcfilters-filter-lastrevision-label": "最新版本",
-       "rcfilters-filter-lastrevision-description": "å°\8dé \81é\9d¢æ\9c\80è¿\91å\81\9aç\9a\84æ\9b´æ\94¹。",
-       "rcfilters-filter-previousrevision-label": "早期版本",
-       "rcfilters-filter-previousrevision-description": "所有除了頁面近期變更的變更。",
+       "rcfilters-filtergroup-lastRevision": "最新修訂版本",
+       "rcfilters-filter-lastrevision-label": "最新修訂版本",
+       "rcfilters-filter-lastrevision-description": "å\8fªå\8c\85æ\8b¬å°\8dé \81é\9d¢ç\9a\84è¿\91æ\9c\9fè®\8aæ\9b´。",
+       "rcfilters-filter-previousrevision-label": "不是最新修訂版本",
+       "rcfilters-filter-previousrevision-description": "所有不是「最新修訂版本」的更改。",
        "rcfilters-filter-excluded": "已排除",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:不是</strong>$1",
        "rcfilters-exclude-button-off": "排除選項",
-       "rcfilters-view-advanced-filters-label": "高級過濾器",
+       "rcfilters-exclude-button-on": "排除所選",
        "rcfilters-view-tags": "標記的編輯",
+       "rcfilters-view-namespaces-tooltip": "按命名空間過濾結果",
+       "rcfilters-view-tags-tooltip": "按編輯標籤過濾結果",
+       "rcfilters-view-return-to-default-tooltip": "返回主過濾選單",
+       "rcfilters-view-tags-help-icon-tooltip": "了解更多關於標記編輯的資訊",
        "rcfilters-liveupdates-button": "實時更新",
+       "rcfilters-liveupdates-button-title-on": "關閉實時更新",
        "rcfilters-watchlist-markseen-button": "標記所有更改為已查看",
        "rcfilters-watchlist-edit-watchlist-button": "編輯您的監視頁面列表",
        "rcfilters-watchlist-showupdated": "自更改發生以來,對您尚未訪問的頁面做出的更改以<strong>粗體</strong>顯示,並帶有實心圓形標記。",
+       "rcfilters-preference-help": "返回到2017年介面重新設計版,並重新新增這以後增加的工具。",
        "rcnotefrom": "以下{{PLURAL:$5|為}}自 <strong>$3 $4</strong> 以來的變更 (最多顯示 <strong>$1</strong> 筆)。",
        "rclistfromreset": "重設日期選擇",
        "rclistfrom": "顯示自 $3 $2 以來的新變更",
        "uploadbtn": "上傳檔案",
        "reuploaddesc": "取消上傳並返回上傳表單",
        "upload-tryagain": "送出修改後的檔案描述",
+       "upload-tryagain-nostash": "提交重新上傳的檔案並修改說明",
        "uploadnologin": "尚未登入",
        "uploadnologintext": "您必須先 $1 才能上傳檔案。",
        "upload_directory_missing": "缺少上傳目錄 ($1) 且網頁伺服器沒有權限建立。",
        "file-deleted-duplicate-notitle": "與此檔案完全相同的檔案在先前已被刪除,且禁止顯示該標題。\n您在重新上傳前,應請求有權力檢視隱藏檔案的使用者重新審查。",
        "uploadwarning": "上傳警告",
        "uploadwarning-text": "請修改以下的檔案描述並重試。",
+       "uploadwarning-text-nostash": "請重新上傳檔案,在下方修改說明並重試。",
        "savefile": "儲存檔案",
        "uploaddisabled": "已停用上傳。",
        "copyuploaddisabled": "已停止使用 URL 上傳。",
        "listfiles_size": "大小",
        "listfiles_description": "描述",
        "listfiles_count": "版本",
-       "listfiles-show-all": "包含圖片的舊版本",
+       "listfiles-show-all": "包括檔案的舊版本",
        "listfiles-latestversion": "目前版本",
        "listfiles-latestversion-yes": "是",
        "listfiles-latestversion-no": "否",
        "pageswithprop-legend": "擁有頁面屬性的頁面",
        "pageswithprop-text": "此頁面用來查詢使用了指定屬性的頁面。",
        "pageswithprop-prop": "屬性名稱:",
+       "pageswithprop-reverse": "反向排序",
+       "pageswithprop-sortbyvalue": "按屬性值排序",
        "pageswithprop-submit": "執行",
        "pageswithprop-prophidden-long": "已隱藏過長的屬性值 ($1)",
        "pageswithprop-prophidden-binary": "已隱藏二進位屬性值 ($1)",
        "prefixindex": "按詞頭查詢頁面",
        "prefixindex-namespace": "按詞頭查詢頁面 ($1 命名空間)",
        "prefixindex-submit": "顯示",
-       "prefixindex-strip": "æ\96¼æ¸\85å\96®ä¸­ç\9c\81ç\95¥è©\9eé¦\96",
+       "prefixindex-strip": "æ\96¼æ¸\85å\96®ä¸­ç\9c\81ç\95¥è©\9eé ­",
        "shortpages": "過短的頁面",
        "longpages": "過長的頁面",
        "deadendpages": "無連結頁面",
        "allpagesfrom": "顯示頁面開始於:",
        "allpagesto": "顯示頁面結束於:",
        "allarticles": "所有頁面",
-       "allinnamespace": "所有頁面 ($1 命名空間)",
+       "allinnamespace": "所有頁面($1 命名空間)",
        "allpagessubmit": "執行",
-       "allpagesprefix": "æ ¹æ\93\9aè©\9eé¦\96查詢頁面",
+       "allpagesprefix": "æ ¹æ\93\9aè©\9eé ­查詢頁面",
        "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。",
        "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。",
        "allpages-hide-redirects": "隱藏重新導向頁面",
        "enotif_lastdiff": "要檢視此次變更請見 $1",
        "enotif_anon_editor": "匿名使用者 $1",
        "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
+       "enotif_minoredit": "這是一個小修改",
        "created": "建立了",
        "changed": "變更",
        "deletepage": "刪除頁面",
        "delete-warning-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n刪除該頁面可能會中斷 {{SITENAME}} 的資料庫運作;\n請小心執行此動作。",
        "deleteprotected": "此頁面已受保護,您無法刪除此頁面。",
        "deleting-backlinks-warning": "<strong>警告:</strong>您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。",
+       "deleting-subpages-warning": "<strong>警告:</strong>您要刪除的頁面有[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1個子頁面|51=超過50個子頁面}}]]。",
        "rollback": "復原編輯",
        "rollbacklink": "還原",
        "rollbacklinkcount": "還原 $1 次編輯",
        "undelete-search-title": "搜尋已刪除頁面",
        "undelete-search-box": "搜尋已刪除的頁面",
        "undelete-search-prefix": "顯示頁面開始自:",
+       "undelete-search-full": "顯示頁面標題包含:",
        "undelete-search-submit": "搜尋",
        "undelete-no-results": "刪除記錄裡沒有符合的頁面。",
        "undelete-filename-mismatch": "無法取消刪除時間為 $1 的檔案修訂:檔案名稱不符。",
        "sp-contributions-newonly": "只顯示建立頁面的編輯",
        "sp-contributions-hideminor": "隱藏次要編輯",
        "sp-contributions-submit": "搜尋",
+       "sp-contributions-outofrange": "無法顯示任何結果。請求的IP段大於CIDR限制/$1。",
        "whatlinkshere": "連結至此的頁面",
        "whatlinkshere-title": "連結至「$1」的頁面",
        "whatlinkshere-page": "頁面:",
        "ipb_blocked_as_range": "錯誤:IP 位址 $1 並不是直接被封鎖,因此無法直接解除封鎖。\n此 IP 位址在 $2 的封鎖範圍之中,您可以解決此範圍的封鎖。",
        "ip_range_invalid": "無效的 IP 範圍。",
        "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
+       "ip_range_exceeded": "IP段超過其最大範圍。允許的範圍:/$1。",
        "proxyblocker": "代理伺服器封鎖器",
        "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯絡您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "sorbsreason": "您的 IP 位址在 {{SITENAME}} 使用的 DNSBL 列為開放代理伺服器。",
        "delete_and_move_text": "目標頁面 \"[[:$1]]\" 已存在。\n您是否要刪除該頁面以完成移動?",
        "delete_and_move_confirm": "是的,刪除該頁面",
        "delete_and_move_reason": "已刪除讓來自 [[$1]] 頁面可移動",
-       "selfmove": "原始標題與目標標題相同,無法移動至自身頁面。",
+       "selfmove": "標題相同;無法移動頁面到自己本身。",
        "immobile-source-namespace": "無法移動在命名空間 \"$1\" 中的頁面",
        "immobile-target-namespace": "無法移動頁面至命名空間 \"$1\"",
        "immobile-target-namespace-iw": "移動頁面不可使用 Interwiki 連結做為目標。",
        "fileduplicatesearch-noresults": "查無名稱為 \"$1\" 的檔案。",
        "specialpages": "特殊頁面",
        "specialpages-note-top": "說明",
+       "specialpages-note-restricted": "* 普通特殊頁面。\n* <span class=\"mw-specialpagerestricted\">受限特殊頁面。</span>",
        "specialpages-group-maintenance": "維護報表",
        "specialpages-group-other": "其它特殊頁面",
        "specialpages-group-login": "登入 / 建立帳號",
        "diff-form": "差異",
        "diff-form-oldid": "舊修訂版本ID(可選)",
        "diff-form-revid": "差異的修訂版本ID",
+       "diff-form-submit": "顯示差異",
        "permanentlink": "固定連結",
        "permanentlink-revid": "修訂版本ID",
+       "permanentlink-submit": "前往修訂版本",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
        "dberr-again": "請稍後數分鐘後再試。",
        "dberr-info": "(無法存取資料庫:$1)",
        "htmlform-user-not-valid": "<strong>$1</strong> 不是有效的使用者名稱。",
        "logentry-delete-delete": "$1 刪除頁面 $3",
        "logentry-delete-delete_redir": "$1 透過覆寫{{GENDER:$2|刪除了}}重新導向 $3",
-       "logentry-delete-restore": "$1{{GENDER:$2|還原}}頁面 $3($4)",
+       "logentry-delete-restore": "$1 {{GENDER:$2|還原}}頁面 $3($4)",
        "logentry-delete-restore-nocount": "$1 {{GENDER:$2|已還原}}頁面 $3",
        "restore-count-revisions": "{{PLURAL:$1|1 修訂|$1 修訂}}",
        "restore-count-files": "{{PLURAL:$1|1 檔案|$1 檔案}}",
index 72179d6..6032773 100644 (file)
  * @author Urhixidur
  */
 
-/**
- * بۇل قازاقشا تىلدەسۋىنىڭ جەرسىندىرۋ فايلى
- *
- * شەتكى پايدالانۋشىلار: بۇل فايلدى تىكەلەي وڭدەمەڭىز!
- *
- * بۇل فايلداعى وزگەرىستەر باعدارلامالىق جاساقتاما كەزەكتى جاڭارتىلعاندا جوعالتىلادى.
- * ۋىيكىيدە ٴوز باپتالىمدارىڭىزدى ىستەي الاسىز.
- * اكىمشى بوپ كىرگەنىڭىزدە, [[ارنايى:بارلىق حابارلار]] دەگەن بەتكە ٴوتىڭىز دە
- * مىندا تىزىمدەلىنگەن مەدىياۋىيكىي:* سىيپاتى بار بەتتەردى وڭدەڭىز.
- */
-
 $fallback = 'kk-cyrl';
 $rtl = true;
 
index 818a9b6..2857721 100644 (file)
  * @author Urhixidur
  */
 
-/**
- * Бұл қазақша тілдесуінің жерсіндіру файлы
- *
- * ШЕТКІ ПАЙДАЛАНУШЫЛАР: БҰЛ ФАЙЛДЫ ТІКЕЛЕЙ ӨҢДЕМЕҢІЗ!
- *
- * Бұл файлдағы өзгерістер бағдарламалық жасақтама кезекті жаңартылғанда жоғалтылады.
- * Уикиде өз бапталымдарыңызды істей аласыз.
- * Әкімші боп кіргеніңізде, [[Арнайы:Барлық хабарлар]] деген бетке өтіңіз де
- * мында тізімделінген МедиаУики:* сипаты бар беттерді өңдеңіз.
- */
 $separatorTransformTable = [
        ',' => "\xc2\xa0",
        '.' => ',',
index 56d8a58..36e8ecb 100644 (file)
  * @author Urhixidur
  */
 
-/**
- * Bul qazaqşa tildeswiniñ jersindirw faýlı
- *
- * ŞETKİ PAÝDALANWŞILAR: BUL FAÝLDI TİKELEÝ ÖÑDEMEÑİZ!
- *
- * Bul faýldağı özgerister bağdarlamalıq jasaqtama kezekti jañartılğanda joğaltıladı.
- * Wïkïde öz baptalımdarıñızdı isteý alasız.
- * Äkimşi bop kirgeniñizde, [[Arnaýı:Barlıq xabarlar]] degen betke ötiñiz de
- * mında tizimdelingen MedïaWïkï:* sïpatı bar betterdi öñdeñiz.
- */
-
 $fallback = 'kk-cyrl';
 
 $separatorTransformTable = [
index 3ac7779..3146a36 100644 (file)
@@ -142,7 +142,7 @@ $specialPageAliases = [
        'Preferences'               => [ '환경설정' ],
        'Prefixindex'               => [ '접두어찾기' ],
        'Protectedpages'            => [ '보호된문서' ],
-       'Protectedtitles'           => [ '만들기보호된문서', '생성보호된문서' ],
+       'Protectedtitles'           => [ '생성보호된문서', '만들기보호된문서' ],
        'Randompage'                => [ '임의문서' ],
        'RandomInCategory'          => [ '분류안의임의문서' ],
        'Randomredirect'            => [ '임의넘겨주기' ],
@@ -165,7 +165,7 @@ $specialPageAliases = [
        'Uncategorizedpages'        => [ '분류안된문서' ],
        'Uncategorizedtemplates'    => [ '분류안된틀' ],
        'Undelete'                  => [ '삭제취소', '삭제된문서' ],
-       'Unlockdb'                  => [ 'DB잠금취소', 'DB잠금해제' ],
+       'Unlockdb'                  => [ 'DB잠금해제', 'DB잠금취소' ],
        'Unusedcategories'          => [ '안쓰는분류', '쓰이지않는분류' ],
        'Unusedimages'              => [ '안쓰는파일', '안쓰는그림', '쓰이지않는파일', '쓰이지않는그림' ],
        'Unusedtemplates'           => [ '안쓰는틀', '쓰이지않는틀' ],
@@ -311,8 +311,8 @@ $magicWords = [
        'displaytitle'              => [ '1', '보일제목', '표시제목', 'DISPLAYTITLE' ],
        'rawsuffix'                 => [ '1', '원', 'R' ],
        'nocommafysuffix'           => [ '0', '구분자없음', 'NOSEP' ],
-       'newsectionlink'            => [ '1', '__새글쓰기__', '__NEWSECTIONLINK__' ],
-       'nonewsectionlink'          => [ '1', '__새글쓰기숨기기__', '__NONEWSECTIONLINK__' ],
+       'newsectionlink'            => [ '1', '__새문단쓰기__', '__새글쓰기__', '__NEWSECTIONLINK__' ],
+       'nonewsectionlink'          => [ '1', '__새문단쓰기숨기기__', '__새글쓰기숨기기__', '__NONEWSECTIONLINK__' ],
        'currentversion'            => [ '1', '현재버전', 'CURRENTVERSION' ],
        'urlencode'                 => [ '0', '주소인코딩:', 'URLENCODE:' ],
        'anchorencode'              => [ '0', '책갈피인코딩', 'ANCHORENCODE' ],
@@ -353,7 +353,7 @@ $magicWords = [
 ];
 
 $bookstoreList = [
-       'Aladdin.co.kr' => 'http://www.aladdin.co.kr/catalog/book.asp?ISBN=$1',
+       'Aladin.co.kr' => 'http://www.aladin.co.kr/catalog/book.asp?ISBN=$1',
        'inherit' => true,
 ];
 
index 164b20a..1fef838 100644 (file)
  * Otherwise most part of the following expressions are taken from the Akademie.
  *
  */
-/**
- * Hints for editing
- * Avoid Ã¤ and other special codings because of legibility for those users,
- * who will take this as a basis for further ripuarian message interfaces
- * Ã¤ => ä, Ã¶ => ö, Ã¼ => ü, Ã„ => Ä, Ã– => Ö, Ãœ => Ü, ÃŸ => ß
- * â€ž => „, â€œ => “
- */
 
 $fallback = 'de';
 
index 0dcfe2d..89c6e9a 100644 (file)
@@ -7,6 +7,7 @@
  * @file
  *
  * @author Alchimista
+ * @author Athena
  * @author Cecílio
  * @author MCruz
  * @author Malafaya
@@ -20,8 +21,8 @@ $namespaceNames = [
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Special',
        NS_TALK             => 'Cumbersa',
-       NS_USER             => 'Outelizador',
-       NS_USER_TALK        => 'Cumbersa_outelizador',
+       NS_USER             => 'Outelizador(a)',
+       NS_USER_TALK        => 'Cumbersa_outelizador(a)',
        NS_PROJECT_TALK     => '$1_cumbersa',
        NS_FILE             => 'Fexeiro',
        NS_FILE_TALK        => 'Cumbersa_fexeiro',
@@ -53,11 +54,16 @@ $namespaceAliases = [
        'Categoria_Discussão' => NS_CATEGORY_TALK,
 ];
 
+$namespaceGenderAliases = [
+       NS_USER => [ 'male' => 'Outelizador', 'female' => 'Outelizadora' ],
+       NS_USER_TALK => [ 'male' => 'Cumbersa_outelizador', 'female' => 'Cumbersa_outelizadora' ],
+]; // T180052
+
 $specialPageAliases = [
-       'CreateAccount'             => [ 'Criar Cuonta' ],
-       'Lonelypages'               => [ 'Páiginas Uorfanas' ],
-       'Uncategorizedcategories'   => [ 'Catadories sien catadories' ],
-       'Uncategorizedimages'       => [ 'Eimaiges sien catadories' ],
+       'CreateAccount'             => [ 'Criar_Cuonta' ],
+       'Lonelypages'               => [ 'Páiginas_Uorfanas' ],
+       'Uncategorizedcategories'   => [ 'Catadories_sien_catadories' ],
+       'Uncategorizedimages'       => [ 'Eimaiges_sien_catadories' ],
        'Userlogin'                 => [ 'Antrar' ],
        'Userlogout'                => [ 'Salir' ],
 ];
index 3041abd..b5f310d 100644 (file)
@@ -416,14 +416,6 @@ $bookstoreList = [
        'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
-/**
- * Изменения сделанные в этом файле будут потеряны при обновлении MediaWiki.
- *
- * Если необходимо внести изменения в перевод отдельных строк интерфейса,
- * сделайте это посредством редактирования страниц вида «MediaWiki:*».
- * Их список можно найти на странице «Special:Allmessages».
- */
-
 $separatorTransformTable = [
        ',' => "\xc2\xa0", # nbsp
        '.' => ','
index cac8482..80c8114 100644 (file)
@@ -12,6 +12,7 @@
  * @author Muhammad Shuaib
  * @author Noor2020
  * @author O.bangash
+ * @author Obaid Raza
  * @author Rachitrali
  * @author Reedy
  * @author Tahir mq
@@ -61,80 +62,119 @@ $namespaceAliases = [
 $specialPageAliases = [
        'Activeusers'               => [ 'متحرک_صارفین' ],
        'Allmessages'               => [ 'تمام_پیغامات' ],
+       'AllMyUploads'              => [ 'میرے_تمام_اپلوڈ', 'میری_تمام_فائلیں' ],
        'Allpages'                  => [ 'تمام_صفحات' ],
+       'ApiHelp'                   => [ 'آے_پی_آئی_معاونت' ],
+       'ApiSandbox'                => [ 'اے_پی_آئی_تختہ_مشق' ],
        'Ancientpages'              => [ 'قدیم_صفحات' ],
+       'AutoblockList'             => [ 'فہرست_خودکار_پابندی' ],
        'Badtitle'                  => [ 'خراب_عنوان' ],
        'Blankpage'                 => [ 'خالی_صفحہ' ],
-       'Block'                     => [ 'پابندی', 'آئی_پی_پتہ_پابندی', 'پابندی_بر_صارف' ],
+       'Block'                     => [ 'پابÙ\86دÛ\8c', 'آئÛ\8c_Ù¾Û\8c_پابÙ\86دÛ\8c', 'آئÛ\8c_Ù¾Û\8c_پتÛ\81_پابÙ\86دÛ\8c', 'پابÙ\86دÛ\8c_بر_صارÙ\81' ],
        'Booksources'               => [ 'کتابی_وسائل' ],
+       'BotPasswords'              => [ 'روبہ_کے_پاسورڈ' ],
        'BrokenRedirects'           => [ 'شکستہ_رجوع_مکررات' ],
        'Categories'                => [ 'زمرہ_جات' ],
+       'ChangeContentModel'        => [ 'تبدیلی_مواد_ماڈل' ],
+       'ChangeCredentials'         => [ 'تبدیلی_حساس_معلومات' ],
        'ChangeEmail'               => [ 'ڈاک_تبدیل' ],
-       'ChangePassword'            => [ 'کلمہ_شناخت_تبدیل', 'تنظیم_کلمہ_شناخت' ],
+       'ChangePassword'            => [ 'تبدیلی_پاسورڈ', 'کلمہ_شناخت_تبدیل', 'تنظیم_کلمہ_شناخت' ],
        'ComparePages'              => [ 'موازنہ_صفحات' ],
        'Confirmemail'              => [ 'تصدیق_ڈاک' ],
        'Contributions'             => [ 'شراکتیں' ],
        'CreateAccount'             => [ 'تخلیق_کھاتہ' ],
        'Deadendpages'              => [ 'مردہ_صفحات' ],
        'DeletedContributions'      => [ 'حذف_شدہ_شراکتیں' ],
+       'Diff'                      => [ 'فرق' ],
        'DoubleRedirects'           => [ 'دوہرے_رجوع_مکررات' ],
-       'EditWatchlist'             => [ 'ترمیم_زیر_نظر' ],
-       'Emailuser'                 => [ 'صارف_ڈاک' ],
+       'EditTags'                  => [ 'ترمیم_ٹیگ' ],
+       'EditWatchlist'             => [ 'ترمیم_زیر_نظر_فہرست', 'ترمیم_زیر_نظر' ],
+       'Emailuser'                 => [ 'صارف_ڈاک', 'برقی_ڈاک' ],
+       'ExpandTemplates'           => [ 'توسیع_سانچہ_جات' ],
        'Export'                    => [ 'برآمد', 'برآمدگی' ],
-       'Fewestrevisions'           => [ 'کم_نظر_ثانی_شدہ' ],
+       'Fewestrevisions'           => [ 'کمترین_نسخہ', 'کم_نظر_ثانی_شدہ' ],
        'FileDuplicateSearch'       => [ 'تلاش_دوہری_فائل', 'دہری_ملف_تلاش' ],
        'Filepath'                  => [ 'راہ_فائل', 'راہ_ملف' ],
+       'GoToInterwiki'             => [ 'بین_الویکی_پر_جائیں' ],
        'Import'                    => [ 'درآمد', 'درآمدگی' ],
        'Invalidateemail'           => [ 'ڈاک_تصدیق_منسوخ' ],
        'JavaScriptTest'            => [ 'تجربہ_جاوا_اسکرپٹ' ],
-       'BlockList'                 => [ 'فہرست_ممنوع', 'فہرست_دستور_شبکی_ممنوع' ],
+       'BlockList'                 => [ 'فہرست_ممنوعین', 'فہرست_ممنوع', 'فہرست_دستور_شبکی_ممنوع' ],
        'LinkSearch'                => [ 'تلاش_روابط' ],
+       'LinkAccounts'              => [ 'کھاتے_مربوط_کریں' ],
        'Listadmins'                => [ 'فہرست_منتظمین' ],
        'Listbots'                  => [ 'فہرست_روبہ_جات' ],
        'Listfiles'                 => [ 'فائلوں_کی_فہرست', 'فہرست_تصاویر' ],
        'Listgrouprights'           => [ 'فہرست_اختیارات_گروہ', 'صارفی_گروہ_اختیارات' ],
+       'Listgrants'                => [ 'فہرست_عطیات' ],
        'Listredirects'             => [ 'فہرست_رجوع_مکررات' ],
+       'ListDuplicatedFiles'       => [ 'دوہری_فائلوں_کی_فہرست' ],
        'Listusers'                 => [ 'فہرست_صارفین' ],
+       'Lockdb'                    => [ 'ڈیٹابیس_مقفل' ],
        'Log'                       => [ 'نوشتہ', 'نوشتہ_جات' ],
        'Lonelypages'               => [ 'یتیم_صفحات' ],
        'Longpages'                 => [ 'طویل_صفحات' ],
+       'MediaStatistics'           => [ 'شماریات_میڈیا' ],
        'MergeHistory'              => [ 'ضم_تاریخچہ' ],
+       'MIMEsearch'                => [ 'ایم_آئی_ایم_ای_تلاش' ],
+       'Mostcategories'            => [ 'بیشتر_زمرہ_جات' ],
+       'Mostimages'                => [ 'بیشتر_تصویریں', 'بیشتر_مربوط_تصویریں', 'بیشتر_فائلیں' ],
+       'Mostinterwikis'            => [ 'بیشتر_بین_الویکی_رعابط' ],
+       'Mostlinked'                => [ 'بیشتر_مربوط_صفحات', 'بیشتر_مربوط' ],
+       'Mostlinkedcategories'      => [ 'بیشتر_مربوط_زمرہ_جات', 'بیشتر_مستعمل_زمرہ_جات' ],
+       'Mostlinkedtemplates'       => [ 'بیشتر_مستعمل_صفحات', 'بیشتر_مربوط_سانچے', 'بیشتر_مستعمل_سانچے' ],
+       'Mostrevisions'             => [ 'بیشتر_نسخے' ],
        'Movepage'                  => [ 'منتقلی_صفحہ' ],
        'Mycontributions'           => [ 'میری_شراکتیں', 'میرا_حصہ' ],
+       'MyLanguage'                => [ 'میری_زبان' ],
        'Mypage'                    => [ 'میرا_صفحہ' ],
-       'Mytalk'                    => [ 'میری_گفتگو' ],
-       'Myuploads'                 => [ 'میرے_اپلوڈ', 'میرے_زبراثقالات' ],
-       'Newimages'                 => [ 'جدید_فائلیں', 'جدید_املاف', 'جدید_تصاویر' ],
+       'Mytalk'                    => [ 'میرا_تبادلہ_خیال',  'میری_گفتگو' ],
+       'Myuploads'                 => [ 'میرے_اپلوڈ', 'میرے_زبراثقالات', 'میری_فائلیں' ],
+       'Newimages'                 => [ 'جدید_فائلیں', 'جدید_املاف', 'جدید_تصاویر', 'نئی_فائلیں', 'نئی_املاف', 'نئی_تصاویر', 'نئی_تصویریں', 'جدید_تصویریں' ],
        'Newpages'                  => [ 'جدید_صفحات' ],
+       'PagesWithProp'             => [ 'صفحات_مع_خاصیت', 'صفحات_بلحاظ_خاصیت' ],
+       'PageData'                  => [ 'معلومات_صفحہ' ],
+       'PageLanguage'              => [ 'صفحہ_کی_زبان' ],
+       'PasswordReset'             => [ 'پاسورڈ_کی_ترتیب_نو' ],
        'PermanentLink'             => [ 'مستقل_ربط' ],
        'Preferences'               => [ 'ترجیحات' ],
        'Prefixindex'               => [ 'اشاریہ_سابقہ' ],
        'Protectedpages'            => [ 'محفوظ_صفحات' ],
-       'Protectedtitles'           => [ 'محفوظ_عناوین' ],
-       'Randompage'                => [ 'تصادف', 'تصادفی_مقالہ' ],
-       'Randomredirect'            => [ 'تصادفی_رجوع_مکرر' ],
+       'Protectedtitles'          => [ 'محفوظ_عناوین' ],
+       'Randompage'                => [ 'جستہ', 'جستہ_جستہ', 'تصادف', 'تصادفی_مقالہ' ],
+       'RandomInCategory'          => [ 'جستہ_جستہ_زمرہ' ],
+       'Randomredirect'            => [ 'جستہ_جستہ_رجوع_مکرر', 'تصادفی_رجوع_مکرر' ],
+       'Randomrootpage'            => [ 'جستہ_جستہ_بنیادی_صفحہ' ],
        'Recentchanges'             => [ 'حالیہ_تبدیلیاں' ],
-       'Recentchangeslinked'       => [ 'متعلقہ_تبدیلیاں' ],
-       'Revisiondelete'            => [ 'حذف_نظر_ثانی', 'حذف_اعادہ' ],
+       'Recentchangeslinked'       => [ 'متعلقہ_حالیہ_تبدیلیاں', 'متعلقہ_تبدیلیاں' ],
+       'Redirect'                  => [ 'رجوع_مکرر' ],
+       'RemoveCredentials'         => [ 'حذف_حساس_معلومات' ],
+       'ResetTokens'               => [ 'ٹوکنوں_کی_ترتیب_نو' ],
+       'Revisiondelete'            => [ 'حذف_نسخہ', 'حذف_نظر_ثانی', 'حذف_اعادہ' ],
+       'RunJobs'                   => [ 'تعمیل_امور' ],
        'Search'                    => [ 'تلاش' ],
        'Shortpages'                => [ 'مختصر_صفحات' ],
        'Specialpages'              => [ 'خصوصی_صفحات' ],
        'Statistics'                => [ 'شماریات' ],
        'Tags'                      => [ 'ٹیگ', 'ٹیگز' ],
+       'TrackingCategories'        => [ 'متلاشی_زمرہ_جات' ],
        'Unblock'                   => [ 'پابندی_ختم' ],
        'Uncategorizedcategories'   => [ 'غیر_زمرہ_بند_زمرہ_جات' ],
        'Uncategorizedimages'       => [ 'غیر_زمرہ_بند_فائلیں', 'غیر_زمرہ_بند_املاف', 'غیر_زمرہ_بند_تصاویر' ],
        'Uncategorizedpages'        => [ 'غیر_زمرہ_بند_صفحات' ],
        'Uncategorizedtemplates'    => [ 'غیر_زمرہ_بند_سانچے' ],
        'Undelete'                  => [ 'بحال' ],
+       'UnlinkAccounts'            => [ 'کھاتے_غیر_مربوط_کریں' ],
+       'Unlockdb'                  => [ 'ڈیٹابیس_قفل_کھولیں' ],
        'Unusedcategories'          => [ 'غیر_مستعمل_زمرہ_جات' ],
-       'Unusedimages'              => [ 'غیر_مستعمل_فائلیں', 'غیر_مستعمل_املاف', 'غیر_مستعمل_تصاویر' ],
+       'Unusedimages'              => [ 'غیر_مستعمل_فائلیں', 'غیر_مستعمل_املاف', 'غیر_مستعمل_تصاویر', 'غیر_مستعمل_تصویریں' ],
        'Unusedtemplates'           => [ 'غیر_مستعمل_سانچے' ],
        'Unwatchedpages'            => [ 'نادیدہ_صفحات' ],
-       'Upload'                    => [ 'اپلوڈ', 'زبراثقال' ],
-       'Userlogin'                 => [ 'داخل_نوشتگی' ],
-       'Userlogout'                => [ 'خارج_نوشتگی' ],
-       'Userrights'                => [ 'صارفی_اختیارات' ],
+       'Upload'                    => [ 'اپلوڈ', 'زبراثقال', 'زبر_اثقال' ],
+       'UploadStash'               => [ 'اجتماعی_اپلوڈ' ],
+       'Userlogin'                 => [ 'داخل_ہوں', 'داخل_نوشتگی' ],
+       'Userlogout'                => [ 'خارج_ہوں', 'خارج_نوشتگی' ],
+       'Userrights'                => [ 'اختیارات_صارف', 'صارفی_اختیارات' ],
        'Version'                   => [ 'نسخہ', 'اخراجہ' ],
        'Wantedcategories'          => [ 'مطلوبہ_زمرہ_جات' ],
        'Wantedfiles'               => [ 'مطلوبہ_فائلیں', 'مطلوبہ_املاف' ],
@@ -147,23 +187,174 @@ $specialPageAliases = [
 
 $magicWords = [
        'redirect'                  => [ '0', '#رجوع_مکرر', '#REDIRECT' ],
-       'notoc'                     => [ '0', '_فہرست_نہیں_', '__NOTOC__' ],
+       'notoc'                     => [ '0', '__فہرست_نہیں__', '__نافہرست__', '__NOTOC__' ],
+       'nogallery'                 => [ '0', '__نگارخانہ_نہیں__', '__NOGALLERY__' ],
+       'forcetoc'                  => [ '0', '__بافہرست__', '__FORCETOC__' ],
        'toc'                       => [ '0', '__فہرست__', '__TOC__' ],
-       'noeditsection'             => [ '0', '__ناتحریرقسم__', '__NOEDITSECTION__' ],
+       'noeditsection'             => [ '0', '__ناترمیم_قطعہ__', '__NOEDITSECTION__' ],
+       'currentmonth'              => [ '1', 'موجودہ_مہینہ', 'موجودہ_مہینہ2', 'CURRENTMONTH', 'CURRENTMONTH2' ],
+       'currentmonth1'             => [ '1', 'موجودہ_مہینہ1', 'CURRENTMONTH1' ],
+       'currentmonthname'          => [ '1', 'موجودہ_مہینہ_کا_نام', 'CURRENTMONTHNAME' ],
+       'currentmonthnamegen'       => [ '1', 'موجودہ_مہینہ_کا_نام_اضافت', 'CURRENTMONTHNAMEGEN' ],
+       'currentmonthabbrev'        => [ '1', 'موجودہ_مہینہ_کا_اختصار', 'CURRENTMONTHABBREV' ],
+       'currentday'                => [ '1', 'موجودہ_دن', 'CURRENTDAY' ],
+       'currentday2'               => [ '1', 'موجودہ_دن2', 'CURRENTDAY2' ],
+       'currentdayname'            => [ '1', 'موجودہ_دن_کا_نام', 'CURRENTDAYNAME' ],
+       'currentyear'               => [ '1', 'موجودہ_سال', 'CURRENTYEAR' ],
+       'currenttime'               => [ '1', 'موجودہ_وقت', 'CURRENTTIME' ],
+       'currenthour'               => [ '1', 'موجودہ_گھنٹہ', 'CURRENTHOUR' ],
+       'localmonth'                => [ '1', 'مقامی_مہینہ', 'مقامی_مہینہ2',  'LOCALMONTH', 'LOCALMONTH2' ],
+       'localmonth1'               => [ '1', 'مقامی_مہینہ1', 'LOCALMONTH1' ],
+       'localmonthname'            => [ '1', 'مقامی_مہینہ_کا_نام', 'LOCALMONTHNAME' ],
+       'localmonthnamegen'         => [ '1', 'مقامی_مہینہ_کا_نام_اضافت', 'LOCALMONTHNAMEGEN' ],
+       'localmonthabbrev'          => [ '1', 'مقامی_مہینہ_کا_اختصار', 'LOCALMONTHABBREV' ],
+       'localday'                  => [ '1', 'مقامی_دن', 'LOCALDAY' ],
+       'localday2'                 => [ '1', 'مقامی_دن2', 'LOCALDAY2' ],
+       'localdayname'              => [ '1', 'مقامی_دن_کا_نام', 'LOCALDAYNAME' ],
+       'localyear'                 => [ '1', 'مقامی_سال', 'LOCALYEAR' ],
+       'localtime'                 => [ '1', 'مقامی_وقت', 'LOCALTIME' ],
+       'localhour'                 => [ '1', 'مقامی_گھنٹہ', 'LOCALHOUR' ],
+       'numberofpages'             => [ '1', 'تعداد_صفحات', 'NUMBEROFPAGES' ],
+       'numberofarticles'          => [ '1', 'تعداد_مضامین', 'NUMBEROFARTICLES' ],
+       'numberoffiles'             => [ '1', 'تعداد_فائل', 'NUMBEROFFILES' ],
+       'numberofusers'             => [ '1', 'تعداد_صارفین', 'NUMBEROFUSERS' ],
+       'numberofactiveusers'       => [ '1', 'تعداد_فعال_صارفین', 'NUMBEROFACTIVEUSERS' ],
+       'numberofedits'             => [ '1', 'تعداد_ترامیم', 'NUMBEROFEDITS' ],
        'pagename'                  => [ '1', 'نام_صفحہ', 'PAGENAME' ],
+       'pagenamee'                 => [ '1', 'نام_صفحہ_کوڈ', 'PAGENAMEE' ],
        'namespace'                 => [ '1', 'نام_فضا', 'NAMESPACE' ],
+       'namespacee'                => [ '1', 'نام_فضا_کوڈ', 'NAMESPACEE' ],
+       'namespacenumber'           => [ '1', 'نام_فضا_کا_عدد', 'NAMESPACENUMBER' ],
+       'talkspace'                 => [ '1', 'تبادلہ_خیال_نام_فضا', 'TALKSPACE' ],
+       'talkspacee'                => [ '1', 'تبادلہ_خیال_کوڈ', 'TALKSPACEE' ],
+       'subjectspace'              => [ '1', 'مضمون_نام_فضا',  'SUBJECTSPACE', 'ARTICLESPACE' ],
+       'subjectspacee'             => [ '1', 'مضمون_نام_فضا_کوڈ',  'SUBJECTSPACEE', 'ARTICLESPACEE' ],
+       'fullpagename'              => [ '1', 'صفحہ_کا_مکمل_نام', 'مکمل_نام',  'FULLPAGENAME' ],
+       'fullpagenamee'             => [ '1', 'مکمل_نام_کوڈ', 'FULLPAGENAMEE' ],
+       'subpagename'               => [ '1', 'نام_ذیلی_صفحہ', 'SUBPAGENAME' ],
+       'subpagenamee'              => [ '1', 'ذیلی_صفحہ_کوڈ', 'SUBPAGENAMEE' ],
+       'rootpagename'              => [ '1', 'نام_اصل_صفحہ', 'ROOTPAGENAME' ],
+       'rootpagenamee'             => [ '1', 'اصل_صفحہ_کوڈ', 'ROOTPAGENAMEE' ],
+       'basepagename'              => [ '1', 'نام_بنیادی_صفحہ', 'BASEPAGENAME' ],
+       'basepagenamee'             => [ '1', 'بنیادی_صفحہ_کوڈ', 'BASEPAGENAMEE' ],
+       'talkpagename'              => [ '1', 'نام_تبادلہ_خیال_صفحہ', 'TALKPAGENAME' ],
+       'talkpagenamee'             => [ '1', 'تبادلہ_خیال_صفحہ_کوڈ', 'TALKPAGENAMEE' ],
+       'subjectpagename'           => [ '1', 'نام_صفحہ_مضمون', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ],
+       'subjectpagenamee'          => [ '1', 'نام_صفحہ_مضمون_کوڈ', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ],
        'msg'                       => [ '0', 'پیغام:', 'MSG:' ],
-       'subst'                     => [ '0', 'جا:', 'نقل:', 'SUBST:' ],
-       'safesubst'                 => [ '0', 'محفوظ_جا:', 'محفوظ_نقل:', 'SAFESUBST:' ],
+       'subst'                     => [ '0', 'نقل:', 'جا:', 'SUBST:' ],
+       'safesubst'                 => [ '0', 'محفوظ_نقل:', 'محفوظ_جا:', 'SAFESUBST:' ],
+       'msgnw'                     => [ '0', 'خام_پیغام:', 'MSGNW:' ],
        'img_thumbnail'             => [ '1', 'تصغیر', 'thumb', 'thumbnail' ],
+       'img_manualthumb'           => [ '1', 'تصغیر=$1', 'thumbnail=$1', 'thumb=$1' ],
        'img_right'                 => [ '1', 'دائیں', 'right' ],
        'img_left'                  => [ '1', 'بائیں', 'left' ],
-       'img_center'                => [ '1', 'درمیان', 'center', 'centre' ],
-       'sitename'                  => [ '1', 'نام_موقع', 'SITENAME' ],
+       'img_none'                  => [ '1', 'بغیر', 'بدون', 'none' ],
+       'img_width'                 => [ '1', '$1پکسل', '$1پک', '$1px' ],
+       'img_center'                => [ '1', 'وسط', 'center', 'centre' ],
+       'img_framed'                => [ '1', 'چوکھٹا', 'frame', 'framed', 'enframed' ],
+       'img_frameless'             => [ '1', 'بدون_چوکھٹا', 'frameless' ],
+       'img_lang'                  => [ '1', 'زبان=$1', 'lang=$1' ],
+       'img_page'                  => [ '1', 'صفحہ=$1', 'صفحہ_$1', 'page=$1', 'page $1' ],
+       'img_upright'               => [ '1', 'ایستادہ', 'ایستادہ=$1', 'ایستادہ_$1', 'upright', 'upright=$1', 'upright $1' ],
+       'img_border'                => [ '1', 'حدود', 'border' ],
+       'img_baseline'              => [ '1', 'خط_اساسی', 'baseline' ],
+       'img_sub'                   => [ '1', 'زیر', 'sub' ],
+       'img_super'                 => [ '1', 'زبر', 'super', 'sup' ],
+       'img_top'                   => [ '1', 'بالا', 'top' ],
+       'img_text_top'              => [ '1', 'متن-بالا', 'text-top' ],
+       'img_middle'                => [ '1', 'وسط', 'درمیان', 'middle' ],
+       'img_bottom'                => [ '1', 'زیریں', 'bottom' ],
+       'img_text_bottom'           => [ '1', 'متن-زیریں', 'text-bottom' ],
+       'img_link'                  => [ '1', 'ربط=$1', 'لنک=$1', 'link=$1' ],
+       'img_alt'                   => [ '1', 'متبادل=$1', 'alt=$1' ],
+       'img_class'                 => [ '1', 'درجہ=$1', 'class=$1' ],
+       'int'                       => [ '0', 'عالمی:', 'INT:' ],
+       'sitename'                  => [ '1', 'سائٹ_نام', 'نام_سائٹ', 'نام_موقع', 'SITENAME' ],
+       'ns'                        => [ '0', 'نف:', 'NS:' ],
+       'nse'                       => [ '0', 'نفک:', 'NSE:' ],
+       'localurl'                  => [ '0', 'مقامی_ربط:', 'LOCALURL:' ],
+       'localurle'                 => [ '0', 'مقامی_ربط_کوڈ:', 'LOCALURLE:' ],
+       'articlepath'               => [ '0', 'راہ_مضمون', 'ARTICLEPATH' ],
+       'pageid'                    => [ '0', 'شناخت_صفحہ', 'PAGEID' ],
+       'server'                    => [ '0', 'سرور', 'SERVER' ],
+       'servername'                => [ '0', 'نام_سرور', 'SERVERNAME' ],
+       'scriptpath'                => [ '0', 'راہ_اسکرپٹ', 'SCRIPTPATH' ],
+       'stylepath'                 => [ '0', 'راہ_طرز', 'STYLEPATH' ],
        'grammar'                   => [ '0', 'قواعد:', 'GRAMMAR:' ],
-       'gender'                    => [ '0', 'جنس:', 'GENDER:' ],
+       'gender'                    => [ '0', 'صنف:', 'GENDER:' ],
+       'bidi'                      => [ '0', 'بی_ڈی:', 'BIDI:' ],
+       'notitleconvert'            => [ '0', '__منتقلی_عنوان_نہیں__',  '__NOTITLECONVERT__', '__NOTC__' ],
+       'nocontentconvert'          => [ '0', '__منتقلی_مواد_نہیں__', '__NOCONTENTCONVERT__', '__NOCC__' ],
+       'currentweek'               => [ '1', 'موجودہ_ہفتہ', 'CURRENTWEEK' ],
+       'currentdow'                => [ '1', 'ہفتہ_کا_دن', 'CURRENTDOW' ],
+       'localweek'                 => [ '1', 'مقامی_ہفتہ', 'LOCALWEEK' ],
+       'localdow'                  => [ '1', 'مقامی_ہفتہ_کا_دن', 'LOCALDOW' ],
+       'revisionid'                => [ '1', 'شناخت_نسخہ', 'REVISIONID' ],
+       'revisionday'               => [ '1', 'یوم_نسخہ', 'REVISIONDAY' ],
+       'revisionday2'              => [ '1', 'یوم_نسخہ2', 'REVISIONDAY2' ],
+       'revisionmonth'             => [ '1', 'ماہ_نسخہ', 'REVISIONMONTH' ],
+       'revisionmonth1'            => [ '1', 'ماہ_نسخہ1', 'REVISIONMONTH1' ],
+       'revisionyear'              => [ '1', 'سال_نسخہ', 'REVISIONYEAR' ],
+       'revisiontimestamp'         => [ '1', 'مہر_وقت_نسخہ', 'REVISIONTIMESTAMP' ],
+       'revisionuser'              => [ '1', 'صارف_نسخہ', 'REVISIONUSER' ],
+       'revisionsize'              => [ '1', 'حجم_نسخہ', 'REVISIONSIZE' ],
+       'plural'                    => [ '0', 'جمع:', 'PLURAL:' ],
+       'fullurl'                   => [ '0', 'مکمل_ربط:', 'FULLURL:' ],
+       'fullurle'                  => [ '0', 'مکمل_ربط_کوڈ:', 'FULLURLE:' ],
+       'canonicalurl'              => [ '0', 'معیاری_ربط:', 'CANONICALURL:' ],
+       'canonicalurle'             => [ '0', 'معیاری_ربط_کوڈ:', 'CANONICALURLE:' ],
+       'lcfirst'                   => [ '0', 'چھوٹے_حروف_سے_شروع:', 'LCFIRST:' ],
+       'ucfirst'                   => [ '0', 'بڑے_حروف_سے_شروع:', 'UCFIRST:' ],
+       'lc'                        => [ '0', 'چھوٹے_حروف:', 'LC:' ],
+       'uc'                        => [ '0', 'بڑے_حروف:', 'UC:' ],
+       'raw'                       => [ '0', 'خام:', 'RAW:' ],
+       'displaytitle'              => [ '1', 'نمائش_عنوان', 'DISPLAYTITLE' ],
+       'rawsuffix'                 => [ '1', 'آر', 'R' ],
+       'nocommafysuffix'           => [ '0', 'جدا_نہیں', 'NOSEP' ],
+       'newsectionlink'            => [ '1', '__ربط_نیا_قطعہ__', '__NEWSECTIONLINK__' ],
+       'nonewsectionlink'          => [ '1', '__ربط_نیا_قطعہ_نہیں__', '__NONEWSECTIONLINK__' ],
+       'currentversion'            => [ '1', 'موجودہ_نسخہ', 'CURRENTVERSION' ],
+       'urlencode'                 => [ '0', 'ربط_کوڈ:', 'URLENCODE:' ],
+       'anchorencode'              => [ '0', 'اینکر_کوڈ', 'ANCHORENCODE' ],
+       'currenttimestamp'          => [ '1', 'موجودہ_مہر_وقت', 'CURRENTTIMESTAMP' ],
+       'localtimestamp'            => [ '1', 'مقامی_مہر_وقت', 'LOCALTIMESTAMP' ],
+       'directionmark'             => [ '1', 'علامت_جہت', 'DIRECTIONMARK', 'DIRMARK' ],
+       'language'                  => [ '0', '#زبان:', '#LANGUAGE:' ],
+       'contentlanguage'           => [ '1', 'مواد_کی_زبان', 'CONTENTLANGUAGE', 'CONTENTLANG' ],
+       'pagesinnamespace'          => [ '1', 'نام_فضا_میں_صفحات:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ],
+       'numberofadmins'            => [ '1', 'تعداد_منتظمین', 'NUMBEROFADMINS' ],
+       'formatnum'                 => [ '0', 'صیغہ_عدد', 'FORMATNUM' ],
+       'padleft'                   => [ '0', 'بائیں_جوڑیں', 'PADLEFT' ],
+       'padright'                  => [ '0', 'دائیں_جوڑیں', 'PADRIGHT' ],
        'special'                   => [ '0', 'خاص', 'special' ],
-       'speciale'                  => [ '0', 'خاص_عنوان', 'speciale' ],
+       'speciale'                  => [ '0', 'خاص_کوڈ', 'speciale' ],
+       'defaultsort'               => [ '1', 'ابتدائی_ترتیب', 'کلید_ابتدائی_ترتیب', 'ابتدائی_ترتیب_زمرہ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ],
+       'filepath'                  => [ '0', 'راہ_فائل:', 'FILEPATH:' ],
+       'tag'                       => [ '0', 'ٹیگ', 'tag' ],
+       'hiddencat'                 => [ '1', '__پوشیدہ_زمرہ__', '__HIDDENCAT__' ],
+       'pagesincategory'           => [ '1', 'زمرے_میں_صفحات', 'PAGESINCATEGORY', 'PAGESINCAT' ],
+       'pagesize'                  => [ '1', 'حجم_صفحہ', 'PAGESIZE' ],
        'index'                     => [ '1', '__اشاریہ__', '__INDEX__' ],
-       'noindex'                   => [ '1', '__نااشاریہ__', '__NOINDEX__' ],
+       'noindex'                   => [ '1', '__اشاریہ_نہیں__', '__NOINDEX__' ],
+       'numberingroup'             => [ '1', 'تعداد_در_گروہ', 'NUMBERINGROUP', 'NUMINGROUP' ],
+       'staticredirect'            => [ '1', '__ساکن_رجوع_مکرر__', '__STATICREDIRECT__' ],
+       'protectionlevel'           => [ '1', 'درجہ_حفاظت', 'PROTECTIONLEVEL' ],
+       'protectionexpiry'          => [ '1', 'اختتام_حفاظت', 'PROTECTIONEXPIRY' ],
+       'cascadingsources'          => [ '1', 'آبشاری_مآخذ', 'CASCADINGSOURCES' ],
+       'formatdate'                => [ '0', 'صیغہ_تاریخ', 'formatdate', 'dateformat' ],
+       'url_path'                  => [ '0', 'راہ', 'PATH' ],
+       'url_wiki'                  => [ '0', 'ویکی', 'WIKI' ],
+       'url_query'                 => [ '0', 'استفسار', 'QUERY' ],
+       'defaultsort_noerror'       => [ '0', 'نقص_نہیں', 'noerror' ],
+       'defaultsort_noreplace'     => [ '0', 'تبدیلی_نہیں', 'noreplace' ],
+       'displaytitle_noerror'      => [ '0', 'نقص_نہیں', 'noerror' ],
+       'displaytitle_noreplace'    => [ '0', 'تبدیلی_نہیں', 'noreplace' ],
+       'pagesincategory_all'       => [ '0', 'کل', 'all' ],
+       'pagesincategory_pages'     => [ '0', 'صفحات', 'pages' ],
+       'pagesincategory_subcats'   => [ '0', 'ذیلی_زمرے', 'subcats' ],
+       'pagesincategory_files'     => [ '0', 'فائلیں', 'files' ],
 ];
+
+# LinkTrail for Urdu language
+$linkTrail = "/^([ابپتٹثجچحخدڈذر​ڑ​زژسشصضطظعغفقکگل​م​نوؤہھیئےآأءۃ]+)(.*)$/sDu";
index ecbbb85..d37b990 100644 (file)
@@ -307,6 +307,17 @@ abstract class Maintenance {
                return $this->hasArg( $argId ) ? $this->mArgs[$argId] : $default;
        }
 
+       /**
+        * Returns batch size
+        *
+        * @since 1.31
+        *
+        * @return int|null
+        */
+       protected function getBatchSize() {
+               return $this->mBatchSize;
+       }
+
        /**
         * Set the batch size.
         * @param int $s The number of operations to do in a batch
@@ -1416,6 +1427,32 @@ abstract class Maintenance {
                return $title;
        }
 
+       /**
+        * Count down from $seconds to zero on the terminal, with a one-second pause
+        * between showing each number. If the maintenance script is in quiet mode,
+        * this function does nothing.
+        *
+        * @since 1.31
+        *
+        * @codeCoverageIgnore
+        * @param int $seconds
+        */
+       protected function countDown( $seconds ) {
+               if ( $this->isQuiet() ) {
+                       return;
+               }
+               for ( $i = $seconds; $i >= 0; $i-- ) {
+                       if ( $i != $seconds ) {
+                               $this->output( str_repeat( "\x08", strlen( $i + 1 ) ) );
+                       }
+                       $this->output( $i );
+                       if ( $i ) {
+                               sleep( 1 );
+                       }
+               }
+               $this->output( "\n" );
+       }
+
        /**
         * Wrapper for posix_isatty()
         * We default as considering stdin a tty (for nice readline methods)
@@ -1444,13 +1481,7 @@ abstract class Maintenance {
                }
 
                if ( $isatty && function_exists( 'readline' ) ) {
-                       $resp = readline( $prompt );
-                       if ( $resp === null ) {
-                               // Workaround for https://github.com/facebook/hhvm/issues/4776
-                               return false;
-                       } else {
-                               return $resp;
-                       }
+                       return readline( $prompt );
                } else {
                        if ( $isatty ) {
                                $st = self::readlineEmulation( $prompt );
@@ -1476,7 +1507,7 @@ abstract class Maintenance {
         * @return string
         */
        private static function readlineEmulation( $prompt ) {
-               $bash = Installer::locateExecutableInDefaultPaths( [ 'bash' ] );
+               $bash = ExecutableFinder::findInDefaultPaths( 'bash' );
                if ( !wfIsWindows() && $bash ) {
                        $retval = false;
                        $encPrompt = wfEscapeShellArg( $prompt );
index b504bde..e5b4c13 100644 (file)
@@ -25,7 +25,7 @@ class CheckComposerLockUpToDate extends Maintenance {
                        $lockLocation = "$IP/vendor/composer.lock";
                        if ( !file_exists( $lockLocation ) ) {
                                $this->error(
-                                       'Could not find composer.lock file. Have you run "composer install"?',
+                                       'Could not find composer.lock file. Have you run "composer install --no-dev"?',
                                        1
                                );
                        }
@@ -53,7 +53,7 @@ class CheckComposerLockUpToDate extends Maintenance {
                if ( $found ) {
                        $this->error(
                                'Error: your composer.lock file is not up to date. ' .
-                                       'Run "composer update" to install newer dependencies',
+                                       'Run "composer update --no-dev" to install newer dependencies',
                                1
                        );
                } else {
index 3e57393..6fe15fb 100644 (file)
@@ -43,9 +43,11 @@ class CheckImages extends Maintenance {
                $numGood = 0;
 
                $repo = RepoGroup::singleton()->getLocalRepo();
+               $fileQuery = LocalFile::getQueryInfo();
                do {
-                       $res = $dbr->select( 'image', '*', [ 'img_name > ' . $dbr->addQuotes( $start ) ],
-                               __METHOD__, [ 'LIMIT' => $this->mBatchSize ] );
+                       $res = $dbr->select( $fileQuery['tables'], $fileQuery['fields'],
+                               [ 'img_name > ' . $dbr->addQuotes( $start ) ],
+                               __METHOD__, [ 'LIMIT' => $this->getBatchSize() ], $fileQuery['joins'] );
                        foreach ( $res as $row ) {
                                $numImages++;
                                $start = $row->img_name;
diff --git a/maintenance/checkSyntax.php b/maintenance/checkSyntax.php
deleted file mode 100644 (file)
index 3910f29..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-<?php
-/**
- * Check syntax of all PHP files in MediaWiki
- *
- * 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 Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Maintenance script to check syntax of all PHP files in MediaWiki.
- *
- * @ingroup Maintenance
- */
-class CheckSyntax extends Maintenance {
-
-       // List of files we're going to check
-       private $mFiles = [], $mFailures = [], $mWarnings = [];
-       private $mIgnorePaths = [], $mNoStyleCheckPaths = [];
-
-       public function __construct() {
-               parent::__construct();
-               $this->addDescription( 'Check syntax for all PHP files in MediaWiki' );
-               $this->addOption( 'with-extensions', 'Also recurse the extensions folder' );
-               $this->addOption(
-                       'path',
-                       'Specific path (file or directory) to check, either with absolute path or '
-                               . 'relative to the root of this MediaWiki installation',
-                       false,
-                       true
-               );
-               $this->addOption(
-                       'list-file',
-                       'Text file containing list of files or directories to check',
-                       false,
-                       true
-               );
-               $this->addOption(
-                       'modified',
-                       'Check only files that were modified (requires Git command-line client)'
-               );
-               $this->addOption( 'syntax-only', 'Check for syntax validity only, skip code style warnings' );
-       }
-
-       public function getDbType() {
-               return Maintenance::DB_NONE;
-       }
-
-       public function execute() {
-               $this->buildFileList();
-
-               $this->output( "Checking syntax (using php -l, this can take a long time)\n" );
-               foreach ( $this->mFiles as $f ) {
-                       $this->checkFileWithCli( $f );
-                       if ( !$this->hasOption( 'syntax-only' ) ) {
-                               $this->checkForMistakes( $f );
-                       }
-               }
-               $this->output( "\nDone! " . count( $this->mFiles ) . " files checked, " .
-                       count( $this->mFailures ) . " failures and " . count( $this->mWarnings ) .
-                       " warnings found\n" );
-       }
-
-       /**
-        * Build the list of files we'll check for syntax errors
-        */
-       private function buildFileList() {
-               global $IP;
-
-               $this->mIgnorePaths = [
-               ];
-
-               $this->mNoStyleCheckPaths = [
-                       // Third-party code we don't care about
-                       "/activemq_stomp/",
-                       "EmailPage/PHPMailer",
-                       "FCKeditor/fckeditor/",
-                       '\bphplot-',
-                       "/svggraph/",
-                       "\bjsmin.php$",
-                       "PEAR/File_Ogg/",
-                       "QPoll/Excel/",
-                       "/geshi/",
-                       "/smarty/",
-               ];
-
-               if ( $this->hasOption( 'path' ) ) {
-                       $path = $this->getOption( 'path' );
-                       if ( !$this->addPath( $path ) ) {
-                               $this->error( "Error: can't find file or directory $path\n", true );
-                       }
-
-                       return; // process only this path
-               } elseif ( $this->hasOption( 'list-file' ) ) {
-                       $file = $this->getOption( 'list-file' );
-                       MediaWiki\suppressWarnings();
-                       $f = fopen( $file, 'r' );
-                       MediaWiki\restoreWarnings();
-                       if ( !$f ) {
-                               $this->error( "Can't open file $file\n", true );
-                       }
-                       $path = trim( fgets( $f ) );
-                       while ( $path ) {
-                               $this->addPath( $path );
-                       }
-                       fclose( $f );
-
-                       return;
-               } elseif ( $this->hasOption( 'modified' ) ) {
-                       $this->output( "Retrieving list from Git... " );
-                       $files = $this->getGitModifiedFiles( $IP );
-                       $this->output( "done\n" );
-                       foreach ( $files as $file ) {
-                               if ( $this->isSuitableFile( $file ) && !is_dir( $file ) ) {
-                                       $this->mFiles[] = $file;
-                               }
-                       }
-
-                       return;
-               }
-
-               $this->output( 'Building file list...', 'listfiles' );
-
-               // Only check files in these directories.
-               // Don't just put $IP, because the recursive dir thingie goes into all subdirs
-               $dirs = [
-                       $IP . '/includes',
-                       $IP . '/mw-config',
-                       $IP . '/languages',
-                       $IP . '/maintenance',
-                       $IP . '/skins',
-               ];
-               if ( $this->hasOption( 'with-extensions' ) ) {
-                       $dirs[] = $IP . '/extensions';
-               }
-
-               foreach ( $dirs as $d ) {
-                       $this->addDirectoryContent( $d );
-               }
-
-               // Manually add two user-editable files that are usually sources of problems
-               if ( file_exists( "$IP/LocalSettings.php" ) ) {
-                       $this->mFiles[] = "$IP/LocalSettings.php";
-               }
-
-               $this->output( 'done.', 'listfiles' );
-       }
-
-       /**
-        * Returns a list of tracked files in a Git work tree differing from the master branch.
-        * @param string $path Path to the repository
-        * @return array Resulting list of changed files
-        */
-       private function getGitModifiedFiles( $path ) {
-               global $wgMaxShellMemory;
-
-               if ( !is_dir( "$path/.git" ) ) {
-                       $this->error( "Error: Not a Git repository!\n", true );
-               }
-
-               // git diff eats memory.
-               $oldMaxShellMemory = $wgMaxShellMemory;
-               if ( $wgMaxShellMemory < 1024000 ) {
-                       $wgMaxShellMemory = 1024000;
-               }
-
-               $ePath = wfEscapeShellArg( $path );
-
-               // Find an ancestor in common with master (rather than just using its HEAD)
-               // to prevent files only modified there from showing up in the list.
-               $cmd = "cd $ePath && git merge-base master HEAD";
-               $retval = 0;
-               $output = wfShellExec( $cmd, $retval );
-               if ( $retval !== 0 ) {
-                       $this->error( "Error retrieving base SHA1 from Git!\n", true );
-               }
-
-               // Find files in the working tree that changed since then.
-               $eBase = wfEscapeShellArg( rtrim( $output, "\n" ) );
-               $cmd = "cd $ePath && git diff --name-only --diff-filter AM $eBase";
-               $retval = 0;
-               $output = wfShellExec( $cmd, $retval );
-               if ( $retval !== 0 ) {
-                       $this->error( "Error retrieving list from Git!\n", true );
-               }
-
-               $wgMaxShellMemory = $oldMaxShellMemory;
-
-               $arr = [];
-               $filename = strtok( $output, "\n" );
-               while ( $filename !== false ) {
-                       if ( $filename !== '' ) {
-                               $arr[] = "$path/$filename";
-                       }
-                       $filename = strtok( "\n" );
-               }
-
-               return $arr;
-       }
-
-       /**
-        * Returns true if $file is of a type we can check
-        * @param string $file
-        * @return bool
-        */
-       private function isSuitableFile( $file ) {
-               $file = str_replace( '\\', '/', $file );
-               $ext = pathinfo( $file, PATHINFO_EXTENSION );
-               if ( $ext != 'php' && $ext != 'inc' && $ext != 'php5' ) {
-                       return false;
-               }
-               foreach ( $this->mIgnorePaths as $regex ) {
-                       $m = [];
-                       if ( preg_match( "~{$regex}~", $file, $m ) ) {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Add given path to file list, searching it in include path if needed
-        * @param string $path
-        * @return bool
-        */
-       private function addPath( $path ) {
-               global $IP;
-
-               return $this->addFileOrDir( $path ) || $this->addFileOrDir( "$IP/$path" );
-       }
-
-       /**
-        * Add given file to file list, or, if it's a directory, add its content
-        * @param string $path
-        * @return bool
-        */
-       private function addFileOrDir( $path ) {
-               if ( is_dir( $path ) ) {
-                       $this->addDirectoryContent( $path );
-               } elseif ( file_exists( $path ) ) {
-                       $this->mFiles[] = $path;
-               } else {
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * Add all suitable files in given directory or its subdirectories to the file list
-        *
-        * @param string $dir Directory to process
-        */
-       private function addDirectoryContent( $dir ) {
-               $iterator = new RecursiveIteratorIterator(
-                       new RecursiveDirectoryIterator( $dir ),
-                       RecursiveIteratorIterator::SELF_FIRST
-               );
-               foreach ( $iterator as $file ) {
-                       if ( $this->isSuitableFile( $file->getRealPath() ) ) {
-                               $this->mFiles[] = $file->getRealPath();
-                       }
-               }
-       }
-
-       /**
-        * Check a file for syntax errors using php -l
-        * @param string $file Path to a file to check for syntax errors
-        * @return bool
-        */
-       private function checkFileWithCli( $file ) {
-               $res = exec( 'php -l ' . wfEscapeShellArg( $file ) );
-               if ( strpos( $res, 'No syntax errors detected' ) === false ) {
-                       $this->mFailures[$file] = $res;
-                       $this->output( $res . "\n" );
-
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * Check a file for non-fatal coding errors, such as byte-order marks in the beginning
-        * or pointless ?> closing tags at the end.
-        *
-        * @param string $file String Path to a file to check for errors
-        */
-       private function checkForMistakes( $file ) {
-               foreach ( $this->mNoStyleCheckPaths as $regex ) {
-                       $m = [];
-                       if ( preg_match( "~{$regex}~", $file, $m ) ) {
-                               return;
-                       }
-               }
-
-               $text = file_get_contents( $file );
-               $tokens = token_get_all( $text );
-
-               $this->checkEvilToken( $file, $tokens, '@', 'Error supression operator (@)' );
-               $this->checkRegex( $file, $text, '/^[\s\r\n]+<\?/', 'leading whitespace' );
-               $this->checkRegex( $file, $text, '/\?>[\s\r\n]*$/', 'trailing ?>' );
-               $this->checkRegex( $file, $text, '/^[\xFF\xFE\xEF]/', 'byte-order mark' );
-       }
-
-       private function checkRegex( $file, $text, $regex, $desc ) {
-               if ( !preg_match( $regex, $text ) ) {
-                       return;
-               }
-
-               if ( !isset( $this->mWarnings[$file] ) ) {
-                       $this->mWarnings[$file] = [];
-               }
-               $this->mWarnings[$file][] = $desc;
-               $this->output( "Warning in file $file: $desc found.\n" );
-       }
-
-       private function checkEvilToken( $file, $tokens, $evilToken, $desc ) {
-               if ( !in_array( $evilToken, $tokens ) ) {
-                       return;
-               }
-
-               if ( !isset( $this->mWarnings[$file] ) ) {
-                       $this->mWarnings[$file] = [];
-               }
-               $this->mWarnings[$file][] = $desc;
-               $this->output( "Warning in file $file: $desc found.\n" );
-       }
-}
-
-$maintClass = "CheckSyntax";
-require_once RUN_MAINTENANCE_IF_MAIN;
index e6d9547..f29f836 100644 (file)
@@ -50,7 +50,7 @@ class CheckUsernames extends Maintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => 'user_id',
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ]
                        );
 
index 7a3034f..5c5c88f 100644 (file)
@@ -39,12 +39,14 @@ class CleanupBlocks extends Maintenance {
 
        public function execute() {
                $db = $this->getDB( DB_MASTER );
+               $blockQuery = Block::getQueryInfo();
 
                $max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
 
                // Step 1: Clean up any duplicate user blocks
-               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
-                       $to = min( $max, $from + $this->mBatchSize - 1 );
+               $batchSize = $this->getBatchSize();
+               for ( $from = 1; $from <= $max; $from += $batchSize ) {
+                       $to = min( $max, $from + $batchSize - 1 );
                        $this->output( "Cleaning up duplicate ipb_user ($from-$to of $max)\n" );
 
                        $delete = [];
@@ -65,11 +67,14 @@ class CleanupBlocks extends Maintenance {
                        foreach ( $res as $row ) {
                                $bestBlock = null;
                                $res2 = $db->select(
-                                       'ipblocks',
-                                       '*',
+                                       $blockQuery['tables'],
+                                       $blockQuery['fields'],
                                        [
                                                'ipb_user' => $row->ipb_user,
-                                       ]
+                                       ],
+                                       __METHOD__,
+                                       [],
+                                       $blockQuery['joins']
                                );
                                foreach ( $res2 as $row2 ) {
                                        $block = Block::newFromRow( $row2 );
@@ -114,8 +119,8 @@ class CleanupBlocks extends Maintenance {
                }
 
                // Step 2: Update the user name in any blocks where it doesn't match
-               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
-                       $to = min( $max, $from + $this->mBatchSize - 1 );
+               for ( $from = 1; $from <= $max; $from += $batchSize ) {
+                       $to = min( $max, $from + $batchSize - 1 );
                        $this->output( "Cleaning up mismatched user name ($from-$to of $max)\n" );
 
                        $res = $db->select(
index 8672223..2d22704 100644 (file)
@@ -109,7 +109,7 @@ TEXT
                                        __METHOD__,
                                        [
                                                'ORDER BY' => 'page_title',
-                                               'LIMIT' => $this->mBatchSize,
+                                               'LIMIT' => $this->getBatchSize(),
                                        ],
                                        [
                                                'category' => [ 'LEFT JOIN', 'page_title = cat_title' ],
@@ -161,7 +161,7 @@ TEXT
                                        __METHOD__,
                                        [
                                                'ORDER BY' => 'cat_title',
-                                               'LIMIT' => $this->mBatchSize,
+                                               'LIMIT' => $this->getBatchSize(),
                                        ],
                                        [
                                                'page' => [ 'LEFT JOIN', [
index b487f89..569fd2b 100644 (file)
@@ -161,7 +161,7 @@ TEXT
                                $titleField . $dbr->buildLike( $percent, '_' ),
                        ], LIST_OR ) ],
                        __METHOD__,
-                       [ 'LIMIT' => $this->mBatchSize ]
+                       [ 'LIMIT' => $this->getBatchSize() ]
                );
 
                $this->outputStatus( "Number of invalid rows: " . $res->numRows() . "\n" );
index dbaf643..a6f10c6 100644 (file)
@@ -57,7 +57,7 @@ class CleanupRemovedModules extends Maintenance {
 
                $modDeps = $dbw->tableName( 'module_deps' );
                $i = 1;
-               foreach ( array_chunk( $rows, $this->mBatchSize ) as $chunk ) {
+               foreach ( array_chunk( $rows, $this->getBatchSize() ) as $chunk ) {
                        // WHERE ( mod=A AND skin=A ) OR ( mod=A AND skin=B) ..
                        $conds = array_map( function ( stdClass $row ) use ( $dbw ) {
                                return $dbw->makeList( (array)$row, IDatabase::LIST_AND );
index 95bbe3d..14c6a6b 100644 (file)
@@ -103,7 +103,7 @@ class UploadStashCleanup extends Maintenance {
                foreach ( $iterator as $file ) {
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
                                $batch[] = [ 'op' => 'delete', 'src' => "$dir/$file" ];
-                               if ( count( $batch ) >= $this->mBatchSize ) {
+                               if ( count( $batch ) >= $this->getBatchSize() ) {
                                        $this->doOperations( $tempRepo, $batch );
                                        $i += count( $batch );
                                        $batch = [];
@@ -129,7 +129,7 @@ class UploadStashCleanup extends Maintenance {
                foreach ( $iterator as $file ) {
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
                                $batch[] = [ 'op' => 'delete', 'src' => "$dir/$file" ];
-                               if ( count( $batch ) >= $this->mBatchSize ) {
+                               if ( count( $batch ) >= $this->getBatchSize() ) {
                                        $this->doOperations( $tempRepo, $batch );
                                        $i += count( $batch );
                                        $batch = [];
index 504c7d7..afbb268 100644 (file)
@@ -45,7 +45,12 @@ class CompareParserCache extends Maintenance {
                $withdiff = 0;
                $parserCache = MediaWikiServices::getInstance()->getParserCache();
                while ( $pages-- > 0 ) {
-                       $row = $dbr->selectRow( 'page', '*',
+                       $row = $dbr->selectRow( 'page',
+                               // @todo Title::selectFields() or Title::getQueryInfo() or something
+                               [
+                                       'page_namespace', 'page_title', 'page_id',
+                                       'page_len', 'page_is_redirect', 'page_latest',
+                               ],
                                [
                                        'page_namespace' => $this->getOption( 'namespace' ),
                                        'page_is_redirect' => 0,
index 675d069..501f045 100644 (file)
@@ -61,7 +61,7 @@ class ConvertUserOptions extends Maintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => 'user_id',
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ]
                        );
                        $id = $this->convertOptionBatch( $res, $dbw );
index 4f625fc..ee103b8 100644 (file)
@@ -109,11 +109,11 @@ class CopyFileBackend extends Maintenance {
                        foreach ( $srcPathsRel as $srcPathRel ) {
                                // Check up on the rate file periodically to adjust the concurrency
                                if ( $rateFile && ( !$count || ( $count % 500 ) == 0 ) ) {
-                                       $this->mBatchSize = max( 1, (int)file_get_contents( $rateFile ) );
-                                       $this->output( "\tBatch size is now {$this->mBatchSize}.\n" );
+                                       $this->setBatchSize( max( 1, (int)file_get_contents( $rateFile ) ) );
+                                       $this->output( "\tBatch size is now {$this->getBatchSize()}.\n" );
                                }
                                $batchPaths[$srcPathRel] = 1; // remove duplicates
-                               if ( count( $batchPaths ) >= $this->mBatchSize ) {
+                               if ( count( $batchPaths ) >= $this->getBatchSize() ) {
                                        $this->copyFileBatch( array_keys( $batchPaths ), $backendRel, $src, $dst );
                                        $batchPaths = []; // done
                                }
@@ -136,11 +136,11 @@ class CopyFileBackend extends Maintenance {
                                foreach ( $delPathsRel as $delPathRel ) {
                                        // Check up on the rate file periodically to adjust the concurrency
                                        if ( $rateFile && ( !$count || ( $count % 500 ) == 0 ) ) {
-                                               $this->mBatchSize = max( 1, (int)file_get_contents( $rateFile ) );
-                                               $this->output( "\tBatch size is now {$this->mBatchSize}.\n" );
+                                               $this->setBatchSize( max( 1, (int)file_get_contents( $rateFile ) ) );
+                                               $this->output( "\tBatch size is now {$this->getBatchSize()}.\n" );
                                        }
                                        $batchPaths[$delPathRel] = 1; // remove duplicates
-                                       if ( count( $batchPaths ) >= $this->mBatchSize ) {
+                                       if ( count( $batchPaths ) >= $this->getBatchSize() ) {
                                                $this->delFileBatch( array_keys( $batchPaths ), $backendRel, $dst );
                                                $batchPaths = []; // done
                                        }
index e1d697d..08e40fd 100644 (file)
@@ -77,7 +77,7 @@ class CopyJobQueue extends Maintenance {
                foreach ( $jobs as $job ) {
                        ++$total;
                        $batch[] = $job;
-                       if ( count( $batch ) >= $this->mBatchSize ) {
+                       if ( count( $batch ) >= $this->getBatchSize() ) {
                                $dst->push( $batch );
                                $totalOK += count( $batch );
                                $batch = [];
index ed15fd1..ab25784 100644 (file)
@@ -33,7 +33,7 @@ class DeleteSelfExternals extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->addDescription( 'Delete self-references to $wgServer from externallinks' );
-               $this->mBatchSize = 1000;
+               $this->setBatchSize( 1000 );
        }
 
        public function execute() {
@@ -44,7 +44,7 @@ class DeleteSelfExternals extends Maintenance {
                        wfWaitForSlaves();
                        $this->commitTransaction( $db, __METHOD__ );
                        $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE el_to"
-                               . $db->buildLike( $wgServer . '/', $db->anyString() ), $this->mBatchSize );
+                               . $db->buildLike( $wgServer . '/', $db->anyString() ), $this->getBatchSize() );
                        $this->output( "Deleting a batch\n" );
                        $db->query( $q );
                        if ( !$db->affectedRows() ) {
index d26ffa6..1e3d410 100755 (executable)
@@ -12,13 +12,14 @@ if [ "x$PHP" != "x" -a -x "$PHP" ]; then
        exit 0
 fi
 
-TAR=php5.4-latest.tar.gz
-PHPURL="http://snaps.php.net/$TAR"
+VER=5.6.32
+TAR="php-$VER.tar.gz"
+PHPURL="https://secure.php.net/get/$TAR/from/this/mirror"
 
 cd "$DEV"
 
-echo "Preparing to download and install a local copy of PHP 5.4, note that this can take some time to do."
-echo "If you wish to avoid re-doing this for uture dev installations of MediaWiki we suggest installing php in ~/.mediawiki/php"
+echo "Preparing to download and install a local copy of PHP $VER, note that this can take some time to do."
+echo "If you wish to avoid re-doing this for future dev installations of MediaWiki we suggest installing php in ~/.mediawiki/php"
 echo -n "Install PHP in ~/.mediawiki/php [y/N]: "
 read INSTALLINHOME
 
@@ -31,27 +32,27 @@ case "$INSTALLINHOME" in
                ;;
 esac
 
-# Some debain-like systems bundle wget but not curl, some other systems
+# Some debian-like systems bundle wget but not curl, some other systems
 # like os x bundle curl but not wget... use whatever is available
-echo -n "Downloading PHP 5.4"
+echo -n "Downloading PHP $VER"
 if command -v wget &>/dev/null; then
-       echo "- using wget"
-       wget "$PHPURL"
+       echo " - using wget"
+       wget -O "$TAR" "$PHPURL"
 elif command -v curl &>/dev/null; then
-       echo "- using curl"
-       curl -O "$PHPURL"
+       echo " - using curl"
+       curl "$PHPURL" -L -o "$TAR"
 else
-       echo "- aborting"
+       echo " - aborting"
        echo "Could not find curl or wget." >&2;
        exit 1;
 fi
 
-echo "Extracting php 5.4"
+echo "Extracting php $VER"
 tar -xzf "$TAR"
 
-cd php5.4-*/
+cd "php-$VER/"
 
-echo "Configuring and installing php 5.4 in $PREFIX"
+echo "Configuring and installing php $VER in $PREFIX"
 ./configure --prefix="$PREFIX"
 make
 make install
index e87e024..b5beef6 100644 (file)
@@ -55,27 +55,30 @@ $maintenance->setup();
 // to $maintenance->mSelf. Keep that here for b/c
 $self = $maintenance->getName();
 
-require_once "$IP/includes/PreConfigSetup.php";
-
-if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
-       # Use a callback function to configure MediaWiki
-       call_user_func( MW_CONFIG_CALLBACK );
-} else {
-       // Require the configuration (probably LocalSettings.php)
-       require $maintenance->loadSettings();
+// Define how settings are loaded (e.g. LocalSettings.php)
+if ( !defined( 'MW_CONFIG_CALLBACK' ) && !defined( 'MW_CONFIG_FILE' ) ) {
+       define( 'MW_CONFIG_FILE', $maintenance->loadSettings() );
 }
 
-if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
-       if ( $wgLocalisationCacheConf['storeClass'] === false
-               && ( $wgLocalisationCacheConf['store'] == 'db'
-                       || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) )
-       ) {
-               $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
+// Custom setup for Maintenance entry point
+if ( !defined( 'MW_SETUP_CALLBACK' ) ) {
+       function wfMaintenanceSetup() {
+               // @codingStandardsIgnoreLine MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+               global $maintenance, $wgLocalisationCacheConf, $wgCacheDirectory;
+               if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
+                       if ( $wgLocalisationCacheConf['storeClass'] === false
+                               && ( $wgLocalisationCacheConf['store'] == 'db'
+                                       || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) )
+                       ) {
+                               $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
+                       }
+               }
+
+               $maintenance->finalSetup();
        }
+       define( 'MW_SETUP_CALLBACK', 'wfMaintenanceSetup' );
 }
 
-$maintenance->finalSetup();
-// Some last includes
 require_once "$IP/includes/Setup.php";
 
 // Initialize main config instance
index ff50498..282a04b 100644 (file)
@@ -60,7 +60,7 @@ class DumpCategoriesAsRdf extends Maintenance {
                        $dbr,
                        'page',
                        [ 'page_title' ],
-                       $this->mBatchSize
+                       $this->getBatchSize()
                );
                $it->addConditions( [
                        'page_namespace' => NS_CATEGORY,
@@ -80,7 +80,7 @@ class DumpCategoriesAsRdf extends Maintenance {
                        $dbr,
                        'categorylinks',
                        [ 'cl_from', 'cl_to' ],
-                       $this->mBatchSize
+                       $this->getBatchSize()
                );
                $it->addConditions( [
                        'cl_type' => 'subcat',
index c90056d..d94d49b 100644 (file)
@@ -55,9 +55,10 @@ class EraseArchivedFile extends Maintenance {
                        $afile = false;
                } else { // specified version
                        $dbw = $this->getDB( DB_MASTER );
-                       $row = $dbw->selectRow( 'filearchive', '*',
+                       $fileQuery = ArchivedFile::getQueryInfo();
+                       $row = $dbw->selectRow( $fileQuery['tables'], $fileQuery['fields'],
                                [ 'fa_storage_group' => 'deleted', 'fa_storage_key' => $filekey ],
-                               __METHOD__ );
+                               __METHOD__, [], $fileQuery['joins'] );
                        if ( !$row ) {
                                $this->error( "No deleted file exists with key '$filekey'.", 1 );
                        }
@@ -85,9 +86,10 @@ class EraseArchivedFile extends Maintenance {
 
        protected function scrubAllVersions( $name ) {
                $dbw = $this->getDB( DB_MASTER );
-               $res = $dbw->select( 'filearchive', '*',
+               $fileQuery = ArchivedFile::getQueryInfo();
+               $res = $dbw->select( $fileQuery['tables'], $fileQuery['fields'],
                        [ 'fa_name' => $name, 'fa_storage_group' => 'deleted' ],
-                       __METHOD__ );
+                       __METHOD__, [], $fileQuery['joins'] );
                foreach ( $res as $row ) {
                        $this->scrubVersion( ArchivedFile::newFromRow( $row ) );
                }
index 4ce7ca6..8bf2bdb 100644 (file)
@@ -37,6 +37,7 @@ class FindMissingFiles extends Maintenance {
                $repo = RepoGroup::singleton()->getLocalRepo();
                $dbr = $repo->getReplicaDB();
                $be = $repo->getBackend();
+               $batchSize = $this->getBatchSize();
 
                $mtime1 = $dbr->timestampOrNull( $this->getOption( 'mtimeafter', null ) );
                $mtime2 = $dbr->timestampOrNull( $this->getOption( 'mtimebefore', null ) );
@@ -66,7 +67,7 @@ class FindMissingFiles extends Maintenance {
                                __METHOD__,
                                // DISTINCT causes a pointless filesort
                                [ 'ORDER BY' => 'name', 'GROUP BY' => 'name',
-                                       'LIMIT' => $this->mBatchSize ],
+                                       'LIMIT' => $batchSize ],
                                $joinConds
                        );
 
@@ -101,7 +102,7 @@ class FindMissingFiles extends Maintenance {
                                        $checkPaths[] = $file->getPath();
                                }
 
-                               foreach ( array_chunk( $checkPaths, $this->mBatchSize ) as $paths ) {
+                               foreach ( array_chunk( $checkPaths, $batchSize ) as $paths ) {
                                        $be->preloadFileStat( [ 'srcs' => $paths ] );
                                        foreach ( $paths as $path ) {
                                                if ( $be->fileExists( [ 'src' => $path ] ) === false ) {
@@ -110,7 +111,7 @@ class FindMissingFiles extends Maintenance {
                                        }
                                }
                        }
-               } while ( $res->numRows() >= $this->mBatchSize );
+               } while ( $res->numRows() >= $batchSize );
        }
 }
 
index 765fbe4..c4cab71 100644 (file)
@@ -61,7 +61,7 @@ class FindOrphanedFiles extends Maintenance {
                        }
 
                        $pathBatch[] = $path;
-                       if ( count( $pathBatch ) >= $this->mBatchSize ) {
+                       if ( count( $pathBatch ) >= $this->getBatchSize() ) {
                                $this->checkFiles( $repo, $pathBatch, $verbose );
                                $pathBatch = [];
                        }
index 460b553..7262770 100644 (file)
@@ -64,12 +64,12 @@ class FixDefaultJsonContentPages extends LoggedUpdateMaintenance {
                                                                'page_id > ' . $dbr->addQuotes( $lastPage )
                                                ],
                                                __METHOD__,
-                                               [ 'ORDER BY' => 'page_id', 'LIMIT' => $this->mBatchSize ]
+                                               [ 'ORDER BY' => 'page_id', 'LIMIT' => $this->getBatchSize() ]
                                );
                                foreach ( $rows as $row ) {
                                        $this->handleRow( $row );
                                }
-                       } while ( $rows->numRows() >= $this->mBatchSize );
+                       } while ( $rows->numRows() >= $this->getBatchSize() );
                }
 
                return true;
index 37fd44f..30364c6 100644 (file)
@@ -51,7 +51,7 @@ class FixUserRegistration extends Maintenance {
                                ],
                                __METHOD__,
                                [
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                        'ORDER BY' => 'user_id',
                                ]
                        );
@@ -83,7 +83,7 @@ class FixUserRegistration extends Maintenance {
                        $this->output( "Waiting for replica DBs..." );
                        wfWaitForSlaves();
                        $this->output( " done.\n" );
-               } while ( $res->numRows() >= $this->mBatchSize );
+               } while ( $res->numRows() >= $this->getBatchSize() );
        }
 }
 
index f4da570..7b7cf15 100644 (file)
@@ -46,7 +46,7 @@ class InitUserPreference extends Maintenance {
                        $dbr,
                        'user_properties',
                        [ 'up_user', 'up_property' ],
-                       $this->mBatchSize
+                       $this->getBatchSize()
                );
                $iterator->setFetchColumns( [ 'up_user', 'up_value' ] );
                $iterator->addConditions( [
index 11e3372..8f67acd 100644 (file)
@@ -83,7 +83,7 @@ class InvalidateUserSesssions extends Maintenance {
                                        . str_replace( [ "\r", "\n" ], ' ', $e->getMessage() ) . "\n" );
                        }
 
-                       if ( $i % $this->mBatchSize ) {
+                       if ( $i % $this->getBatchSize() ) {
                                $lbFactory->waitForReplication();
                        }
                }
index 899d80d..66e8d01 100644 (file)
@@ -34,7 +34,8 @@
                                        "mw.cookie",
                                        "mw.experiments",
                                        "mw.viewport",
-                                       "mw.htmlform.*"
+                                       "mw.htmlform.*",
+                                       "mw.visibleTimeout"
                                ]
                        },
                        {
                                        "mw.jqueryMsg"
                                ]
                        },
-                       {
-                               "name": "Page",
-                               "classes": [
-                                       "mw.page*"
-                               ]
-                       },
                        {
                                "name": "Interfaces",
                                "classes": [
index 7202952..986fa62 100644 (file)
@@ -42,7 +42,7 @@ if ( !isset( $options['output'] ) ) {
        $options['output'] = 'wiki';
 }
 
-/** Print a usage message*/
+/** Print a usage message */
 function showUsage() {
        print <<<TEXT
 Usage: php transstat.php [--help] [--output=csv|text|wiki]
index ca2f7c5..1effb61 100644 (file)
@@ -55,7 +55,7 @@ class MakeTestEdits extends Maintenance {
                        $page->doEditContent( $content, $summary, 0, false, $user );
 
                        $this->output( "Edited $title\n" );
-                       if ( $i && ( $i % $this->mBatchSize ) == 0 ) {
+                       if ( $i && ( $i % $this->getBatchSize() ) == 0 ) {
                                wfWaitForSlaves();
                        }
                }
index 32333b7..5f39a3d 100644 (file)
@@ -82,7 +82,7 @@ class ManageJobs extends Maintenance {
                        $queue->push( $job );
                        ++$count;
 
-                       if ( ( $count % $this->mBatchSize ) == 0 ) {
+                       if ( ( $count % $this->getBatchSize() ) == 0 ) {
                                $queue->waitForBackups();
                        }
                }
index bb47631..8d2534e 100644 (file)
@@ -80,29 +80,29 @@ class MergeMessageFileList extends Maintenance {
                        $extdirs = explode( ':', $extdir );
                        $entries = [];
                        foreach ( $extdirs as $extdir ) {
-                               $entries = array_merge( $entries, scandir( $extdir ) );
-                       }
-                       foreach ( $entries as $extname ) {
-                               if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
-                                       continue;
-                               }
-                               $possibilities = [
-                                       "$extdir/$extname/extension.json",
-                                       "$extdir/$extname/skin.json",
-                                       "$extdir/$extname/$extname.php"
-                               ];
-                               $found = false;
-                               foreach ( $possibilities as $extfile ) {
-                                       if ( file_exists( $extfile ) ) {
-                                               $mmfl['setupFiles'][] = $extfile;
-                                               $found = true;
-                                               break;
+                               $entries = scandir( $extdir );
+                               foreach ( $entries as $extname ) {
+                                       if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
+                                               continue;
+                                       }
+                                       $possibilities = [
+                                               "$extdir/$extname/extension.json",
+                                               "$extdir/$extname/skin.json",
+                                               "$extdir/$extname/$extname.php"
+                                       ];
+                                       $found = false;
+                                       foreach ( $possibilities as $extfile ) {
+                                               if ( file_exists( $extfile ) ) {
+                                                       $mmfl['setupFiles'][] = $extfile;
+                                                       $found = true;
+                                                       break;
+                                               }
                                        }
-                               }
 
-                               if ( !$found ) {
-                                       $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
-                                               "extension.json, skin.json, or {$extname}.php." );
+                                       if ( !$found ) {
+                                               $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
+                                                       "extension.json, skin.json, or {$extname}.php." );
+                                       }
                                }
                        }
                }
index 9d4e261..01ee9f8 100644 (file)
@@ -161,7 +161,7 @@ class MigrateComments extends LoggedUpdateMaintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => $primaryKey,
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ]
                        );
                        if ( !$res->numRows() ) {
@@ -245,7 +245,7 @@ class MigrateComments extends LoggedUpdateMaintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => $primaryKey,
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ],
                                [ $newTable => [ 'LEFT JOIN', "{$primaryKey}={$newPrimaryKey}" ] ]
                        );
index f771fff..b2cce3e 100644 (file)
@@ -69,6 +69,7 @@ class MigrateFileRepoLayout extends Maintenance {
                        $conds[] = 'img_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $since ) );
                }
 
+               $batchSize = $this->getBatchSize();
                $batch = [];
                $lastName = '';
                do {
@@ -76,7 +77,7 @@ class MigrateFileRepoLayout extends Maintenance {
                                [ 'img_name', 'img_sha1' ],
                                array_merge( [ 'img_name > ' . $dbw->addQuotes( $lastName ) ], $conds ),
                                __METHOD__,
-                               [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name' ]
+                               [ 'LIMIT' => $batchSize, 'ORDER BY' => 'img_name' ]
                        );
 
                        foreach ( $res as $row ) {
@@ -143,7 +144,7 @@ class MigrateFileRepoLayout extends Maintenance {
                                                'src' => $spath, 'dst' => $dpath, 'img' => $ofile->getArchiveName() ];
                                }
 
-                               if ( count( $batch ) >= $this->mBatchSize ) {
+                               if ( count( $batch ) >= $batchSize ) {
                                        $this->runBatch( $batch, $be );
                                        $batch = [];
                                }
@@ -166,7 +167,7 @@ class MigrateFileRepoLayout extends Maintenance {
                        $res = $dbw->select( 'filearchive', [ 'fa_storage_key', 'fa_id', 'fa_name' ],
                                array_merge( [ 'fa_id > ' . $dbw->addQuotes( $lastId ) ], $conds ),
                                __METHOD__,
-                               [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'fa_id' ]
+                               [ 'LIMIT' => $batchSize, 'ORDER BY' => 'fa_id' ]
                        );
 
                        foreach ( $res as $row ) {
@@ -201,7 +202,7 @@ class MigrateFileRepoLayout extends Maintenance {
                                $batch[] = [ 'op' => 'copy', 'src' => $spath, 'dst' => $dpath,
                                        'overwriteSame' => true, 'img' => "(ID {$row->fa_id}) {$row->fa_name}" ];
 
-                               if ( count( $batch ) >= $this->mBatchSize ) {
+                               if ( count( $batch ) >= $batchSize ) {
                                        $this->runBatch( $batch, $be );
                                        $batch = [];
                                }
index 597a876..ad82542 100644 (file)
@@ -42,6 +42,7 @@ class MigrateUserGroup extends Maintenance {
                $oldGroup = $this->getArg( 0 );
                $newGroup = $this->getArg( 1 );
                $dbw = $this->getDB( DB_MASTER );
+               $batchSize = $this->getBatchSize();
                $start = $dbw->selectField( 'user_groups', 'MIN(ug_user)',
                        [ 'ug_group' => $oldGroup ], __FUNCTION__ );
                $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)',
@@ -50,9 +51,9 @@ class MigrateUserGroup extends Maintenance {
                        $this->error( "Nothing to do - no users in the '$oldGroup' group", true );
                }
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                // Migrate users over in batches...
                while ( $blockEnd <= $end ) {
                        $affected = 0;
@@ -97,8 +98,8 @@ class MigrateUserGroup extends Maintenance {
                        }
 
                        $count += $affected;
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
                $this->output( "Done! $count users in group '$oldGroup' are now in '$newGroup' instead.\n" );
diff --git a/maintenance/mssql/archives/patch-site_stats-pk.sql b/maintenance/mssql/archives/patch-site_stats-pk.sql
new file mode 100644 (file)
index 0000000..7533719
--- /dev/null
@@ -0,0 +1,2 @@
+DROP INDEX ss_row_id ON site_stats;
+ALTER TABLE /*_*/site_stats ADD CONSTRAINT /*i*/ss_row_id PRIMARY KEY (ss_row_id);
index 2a67294..119cd5b 100644 (file)
@@ -450,7 +450,7 @@ CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, i
 --
 CREATE TABLE /*_*/site_stats (
   -- The single row should contain 1 here.
-  ss_row_id int NOT NULL,
+  ss_row_id int NOT NULL CONSTRAINT /*i*/ss_row_id PRIMARY KEY,
 
   -- Total number of edits performed.
   ss_total_edits bigint default 0,
@@ -475,9 +475,6 @@ CREATE TABLE /*_*/site_stats (
   ss_images int default 0
 );
 
--- Pointless index to assuage developer superstitions
-CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
-
 
 --
 -- The internet is full of jerks, alas. Sometimes it's handy
diff --git a/maintenance/oracle/archives/patch-site_stats-pk.sql b/maintenance/oracle/archives/patch-site_stats-pk.sql
new file mode 100644 (file)
index 0000000..a288c08
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.site_stats DROP CONSTRAINT &mw_prefix.site_stats_u01;
+ALTER TABLE &mw_prefix.site_stats ADD CONSTRAINT &mw_prefix.site_stats_pk PRIMARY KEY(ss_row_id);
index 44c907c..e6e2e56 100644 (file)
@@ -321,7 +321,7 @@ CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl
 CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from);
 
 CREATE TABLE &mw_prefix.site_stats (
-  ss_row_id         NUMBER  NOT NULL ,
+  ss_row_id         NUMBER  NOT NULL PRIMARY KEY,
   ss_total_edits    NUMBER            DEFAULT 0,
   ss_good_articles  NUMBER            DEFAULT 0,
   ss_total_pages    NUMBER            DEFAULT -1,
@@ -329,7 +329,6 @@ CREATE TABLE &mw_prefix.site_stats (
   ss_active_users   NUMBER            DEFAULT -1,
   ss_images         NUMBER            DEFAULT 0
 );
-CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id);
 
 CREATE SEQUENCE ipblocks_ipb_id_seq;
 CREATE TABLE &mw_prefix.ipblocks (
index 295dacd..eb82806 100644 (file)
@@ -59,11 +59,12 @@ class PopulateBacklinkNamespace extends LoggedUpdateMaintenance {
                        return false;
                }
                $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
+               $batchSize = $this->getBatchSize();
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing page_id from $blockStart to $blockEnd\n" );
                        $cond = "page_id BETWEEN $blockStart AND $blockEnd";
@@ -85,8 +86,8 @@ class PopulateBacklinkNamespace extends LoggedUpdateMaintenance {
                                        __METHOD__
                                );
                        }
-                       $blockStart += $this->mBatchSize - 1;
-                       $blockEnd += $this->mBatchSize - 1;
+                       $blockStart += $batchSize - 1;
+                       $blockEnd += $batchSize - 1;
                        wfWaitForSlaves();
                }
                return true;
index 74a918a..7cc829d 100644 (file)
@@ -69,7 +69,7 @@ class PopulateContentModel extends Maintenance {
        }
 
        protected function clearCache( $page_id, $rev_id ) {
-               $contentModelKey = $this->wanCache->makeKey( 'page', 'content-model', $rev_id );
+               $contentModelKey = $this->wanCache->makeKey( 'page-content-model', $rev_id );
                $revisionKey =
                        $this->wanCache->makeGlobalKey( 'revision', $this->wikiId, $page_id, $rev_id );
 
@@ -97,6 +97,7 @@ class PopulateContentModel extends Maintenance {
                $toSave = [];
                $lastId = 0;
                $nsCondition = $ns === 'all' ? [] : [ 'page_namespace' => $ns ];
+               $batchSize = $this->getBatchSize();
                do {
                        $rows = $dbw->select(
                                'page',
@@ -106,20 +107,20 @@ class PopulateContentModel extends Maintenance {
                                        'page_id > ' . $dbw->addQuotes( $lastId ),
                                ] + $nsCondition,
                                __METHOD__,
-                               [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'page_id ASC' ]
+                               [ 'LIMIT' => $batchSize, 'ORDER BY' => 'page_id ASC' ]
                        );
                        $this->output( "Fetched {$rows->numRows()} rows.\n" );
                        foreach ( $rows as $row ) {
                                $title = Title::newFromRow( $row );
                                $model = ContentHandler::getDefaultModelFor( $title );
                                $toSave[$model][] = $row->page_id;
-                               if ( count( $toSave[$model] ) >= $this->mBatchSize ) {
+                               if ( count( $toSave[$model] ) >= $batchSize ) {
                                        $this->updatePageRows( $dbw, $toSave[$model], $model );
                                        unset( $toSave[$model] );
                                }
                                $lastId = $row->page_id;
                        }
-               } while ( $rows->numRows() >= $this->mBatchSize );
+               } while ( $rows->numRows() >= $batchSize );
                foreach ( $toSave as $model => $pages ) {
                        $this->updatePageRows( $dbw, $pages, $model );
                }
@@ -168,6 +169,7 @@ class PopulateContentModel extends Maintenance {
                $toSave = [];
                $idsToClear = [];
                $lastId = 0;
+               $batchSize = $this->getBatchSize();
                do {
                        $rows = $dbw->select(
                                $selectTables,
@@ -181,7 +183,7 @@ class PopulateContentModel extends Maintenance {
                                        "$key > " . $dbw->addQuotes( $lastId ),
                                ] + $where,
                                __METHOD__,
-                               [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => "$key ASC" ],
+                               [ 'LIMIT' => $batchSize, 'ORDER BY' => "$key ASC" ],
                                $join_conds
                        );
                        $this->output( "Fetched {$rows->numRows()} rows.\n" );
@@ -232,12 +234,12 @@ class PopulateContentModel extends Maintenance {
                                        }
                                }
 
-                               if ( count( $toSave[$defaultModel] ) >= $this->mBatchSize ) {
+                               if ( count( $toSave[$defaultModel] ) >= $batchSize ) {
                                        $this->updateRevisionOrArchiveRows( $dbw, $toSave[$defaultModel], $defaultModel, $table );
                                        unset( $toSave[$defaultModel] );
                                }
                        }
-               } while ( $rows->numRows() >= $this->mBatchSize );
+               } while ( $rows->numRows() >= $batchSize );
                foreach ( $toSave as $model => $ids ) {
                        $this->updateRevisionOrArchiveRows( $dbw, $ids, $model, $table );
                }
index 7557a42..cbd969d 100644 (file)
@@ -58,7 +58,7 @@ class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
                $this->output( "Populating fa_sha1 field from fa_storage_key\n" );
                $endId = $dbw->selectField( $table, 'MAX(fa_id)', false, __METHOD__ );
 
-               $batchSize = $this->mBatchSize;
+               $batchSize = $this->getBatchSize();
                $done = 0;
 
                do {
index b581d66..2735a1e 100644 (file)
@@ -119,7 +119,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance {
                $numRows = $res->numRows();
                $i = 0;
                foreach ( $res as $row ) {
-                       if ( $i % $this->mBatchSize == 0 ) {
+                       if ( $i % $this->getBatchSize() == 0 ) {
                                $this->output( sprintf(
                                        "Done %d of %d, %5.3f%%  \r", $i, $numRows, $i / $numRows * 100 ) );
                                wfWaitForSlaves();
index 40a596c..178c49a 100644 (file)
@@ -78,7 +78,7 @@ TEXT
                $this->output( "Copying IP revisions to ip_changes, from rev_id $start to rev_id $end\n" );
 
                while ( $blockStart <= $end ) {
-                       $blockEnd = min( $blockStart + $this->mBatchSize, $end );
+                       $blockEnd = min( $blockStart + $this->getBatchSize(), $end );
                        $rows = $dbr->select(
                                'revision',
                                [ 'rev_id', 'rev_timestamp', 'rev_user_text' ],
index 1b07407..113cc63 100644 (file)
@@ -53,6 +53,7 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
+               $batchSize = $this->getBatchSize();
                $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'log_search' ) ) {
                        $this->error( "log_search does not exist" );
@@ -68,15 +69,17 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                $end = $db->selectField( 'logging', 'MAX(log_id)', false, __FUNCTION__ );
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
 
                $delTypes = [ 'delete', 'suppress' ]; // revisiondelete types
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing log_id from $blockStart to $blockEnd\n" );
                        $cond = "log_id BETWEEN $blockStart AND $blockEnd";
-                       $res = $db->select( 'logging', '*', $cond, __FUNCTION__ );
+                       $res = $db->select(
+                               'logging', [ 'log_id', 'log_type', 'log_action', 'log_params' ], $cond, __FUNCTION__
+                       );
                        foreach ( $res as $row ) {
                                // RevisionDelete logs - revisions
                                if ( LogEventsList::typeAction( $row, $delTypes, 'revision' ) ) {
@@ -156,8 +159,8 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                        $log->addRelations( 'target_author_ip', $userIPs, $row->log_id );
                                }
                        }
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
                $this->output( "Done populating log_search table.\n" );
index dd120fe..c5c079a 100644 (file)
@@ -48,6 +48,7 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
+               $batchSize = $this->getBatchSize();
                $db = $this->getDB( DB_MASTER );
                $start = $db->selectField( 'logging', 'MIN(log_id)', false, __METHOD__ );
                if ( !$start ) {
@@ -58,9 +59,9 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
                $end = $db->selectField( 'logging', 'MAX(log_id)', false, __METHOD__ );
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing log_id from $blockStart to $blockEnd\n" );
                        $cond = "log_id BETWEEN $blockStart AND $blockEnd AND log_user = user_id";
@@ -73,8 +74,8 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
                                        [ 'log_id' => $row->log_id ], __METHOD__ );
                        }
                        $this->commitTransaction( $db, __METHOD__ );
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
                $this->output( "Done populating log_user_text field.\n" );
index 366905a..98d535a 100644 (file)
@@ -57,7 +57,7 @@ class PopulatePPSortKey extends LoggedUpdateMaintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => 'pp_page, pp_propname',
-                                       'LIMIT' => $this->mBatchSize
+                                       'LIMIT' => $this->getBatchSize()
                                ]
                        );
 
index 457033a..99c2b23 100644 (file)
@@ -46,6 +46,7 @@ class PopulateParentId extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
+               $batchSize = $this->getBatchSize();
                $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'revision' ) ) {
                        $this->error( "revision table does not exist" );
@@ -62,7 +63,7 @@ class PopulateParentId extends LoggedUpdateMaintenance {
                }
                # Do remaining chunk
                $blockStart = intval( $start );
-               $blockEnd = intval( $start ) + $this->mBatchSize - 1;
+               $blockEnd = intval( $start ) + $batchSize - 1;
                $count = 0;
                $changed = 0;
                while ( $blockStart <= $end ) {
@@ -116,8 +117,8 @@ class PopulateParentId extends LoggedUpdateMaintenance {
                                        __METHOD__ );
                                $count++;
                        }
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
                $this->output( "rev_parent_id population complete ... {$count} rows [{$changed} changed]\n" );
index 5d5da89..04ad255 100644 (file)
@@ -41,6 +41,7 @@ class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
 
        protected function doDBUpdates() {
                $dbw = $this->getDB( DB_MASTER );
+               $batchSize = $this->getBatchSize();
                if ( !$dbw->fieldExists( 'recentchanges', 'rc_source' ) ) {
                        $this->error( 'rc_source field in recentchanges table does not exist.' );
                }
@@ -52,15 +53,13 @@ class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
                        return true;
                }
                $end = $dbw->selectField( 'recentchanges', 'MAX(rc_id)', false, __METHOD__ );
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
 
                $updatedValues = $this->buildUpdateCondition( $dbw );
 
                while ( $blockEnd <= $end ) {
-                       $cond = "rc_id BETWEEN $blockStart AND $blockEnd";
-
                        $dbw->update(
                                'recentchanges',
                                [ $updatedValues ],
@@ -74,8 +73,8 @@ class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
                        $this->output( "." );
                        wfWaitForSlaves();
 
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                }
 
                $this->output( "\nDone.\n" );
index a9457c2..5de5819 100644 (file)
@@ -54,10 +54,10 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                }
 
                $this->output( "Populating rev_len column\n" );
-               $rev = $this->doLenUpdates( 'revision', 'rev_id', 'rev', Revision::selectFields() );
+               $rev = $this->doLenUpdates( 'revision', 'rev_id', 'rev', Revision::getQueryInfo() );
 
                $this->output( "Populating ar_len column\n" );
-               $ar = $this->doLenUpdates( 'archive', 'ar_id', 'ar', Revision::selectArchiveFields() );
+               $ar = $this->doLenUpdates( 'archive', 'ar_id', 'ar', Revision::getArchiveQueryInfo() );
 
                $this->output( "rev_len and ar_len population complete "
                        . "[$rev revision rows, $ar archive rows].\n" );
@@ -69,12 +69,13 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
         * @param string $table
         * @param string $idCol
         * @param string $prefix
-        * @param array $fields
+        * @param array $queryInfo
         * @return int
         */
-       protected function doLenUpdates( $table, $idCol, $prefix, $fields ) {
+       protected function doLenUpdates( $table, $idCol, $prefix, $queryInfo ) {
                $dbr = $this->getDB( DB_REPLICA );
                $dbw = $this->getDB( DB_MASTER );
+               $batchSize = $this->getBatchSize();
                $start = $dbw->selectField( $table, "MIN($idCol)", false, __METHOD__ );
                $end = $dbw->selectField( $table, "MAX($idCol)", false, __METHOD__ );
                if ( !$start || !$end ) {
@@ -85,20 +86,22 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
 
                # Do remaining chunks
                $blockStart = intval( $start );
-               $blockEnd = intval( $start ) + $this->mBatchSize - 1;
+               $blockEnd = intval( $start ) + $batchSize - 1;
                $count = 0;
 
                while ( $blockStart <= $end ) {
                        $this->output( "...doing $idCol from $blockStart to $blockEnd\n" );
                        $res = $dbr->select(
-                               $table,
-                               $fields,
+                               $queryInfo['tables'],
+                               $queryInfo['fields'],
                                [
                                        "$idCol >= $blockStart",
                                        "$idCol <= $blockEnd",
                                        "{$prefix}_len IS NULL"
                                ],
-                               __METHOD__
+                               __METHOD__,
+                               [],
+                               $queryInfo['joins']
                        );
 
                        if ( $res->numRows() > 0 ) {
@@ -112,8 +115,8 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                                $this->commitTransaction( $dbw, __METHOD__ );
                        }
 
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
 
index fb97e91..89eff02 100644 (file)
@@ -55,10 +55,10 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                }
 
                $this->output( "Populating rev_sha1 column\n" );
-               $rc = $this->doSha1Updates( 'revision', 'rev_id', 'rev' );
+               $rc = $this->doSha1Updates( 'revision', 'rev_id', Revision::getQueryInfo(), 'rev' );
 
                $this->output( "Populating ar_sha1 column\n" );
-               $ac = $this->doSha1Updates( 'archive', 'ar_rev_id', 'ar' );
+               $ac = $this->doSha1Updates( 'archive', 'ar_rev_id', Revision::getArchiveQueryInfo(), 'ar' );
                $this->output( "Populating ar_sha1 column legacy rows\n" );
                $ac += $this->doSha1LegacyUpdates();
 
@@ -71,11 +71,13 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
        /**
         * @param string $table
         * @param string $idCol
+        * @param array $queryInfo
         * @param string $prefix
         * @return int Rows changed
         */
-       protected function doSha1Updates( $table, $idCol, $prefix ) {
+       protected function doSha1Updates( $table, $idCol, $queryInfo, $prefix ) {
                $db = $this->getDB( DB_MASTER );
+               $batchSize = $this->getBatchSize();
                $start = $db->selectField( $table, "MIN($idCol)", false, __METHOD__ );
                $end = $db->selectField( $table, "MAX($idCol)", false, __METHOD__ );
                if ( !$start || !$end ) {
@@ -86,14 +88,16 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
 
                $count = 0;
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing $idCol from $blockStart to $blockEnd\n" );
                        $cond = "$idCol BETWEEN $blockStart AND $blockEnd
                                AND $idCol IS NOT NULL AND {$prefix}_sha1 = ''";
-                       $res = $db->select( $table, '*', $cond, __METHOD__ );
+                       $res = $db->select(
+                               $queryInfo['tables'], $queryInfo['fields'], $cond, __METHOD__, [], $queryInfo['joins']
+                       );
 
                        $this->beginTransaction( $db, __METHOD__ );
                        foreach ( $res as $row ) {
@@ -103,8 +107,8 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                        }
                        $this->commitTransaction( $db, __METHOD__ );
 
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                        wfWaitForSlaves();
                }
 
@@ -117,8 +121,9 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
        protected function doSha1LegacyUpdates() {
                $count = 0;
                $db = $this->getDB( DB_MASTER );
-               $res = $db->select( 'archive', '*',
-                       [ 'ar_rev_id IS NULL', 'ar_sha1' => '' ], __METHOD__ );
+               $arQuery = Revision::getArchiveQueryInfo();
+               $res = $db->select( $arQuery['tables'], $arQuery['fields'],
+                       [ 'ar_rev_id IS NULL', 'ar_sha1' => '' ], __METHOD__, [], $arQuery['joins'] );
 
                $updateSize = 0;
                $this->beginTransaction( $db, __METHOD__ );
diff --git a/maintenance/postgres/archives/patch-add-3d.sql b/maintenance/postgres/archives/patch-add-3d.sql
deleted file mode 100644 (file)
index f892755..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TYPE media_type ADD VALUE '3D';
diff --git a/maintenance/postgres/archives/patch-site_stats-pk.sql b/maintenance/postgres/archives/patch-site_stats-pk.sql
new file mode 100644 (file)
index 0000000..faa5e9f
--- /dev/null
@@ -0,0 +1,3 @@
+ALTER TABLE site_stats DROP CONSTRAINT site_stats_ss_row_id_key;
+ALTER TABLE site_stats ADD PRIMARY KEY (ss_row_id);
+ALTER TABLE site_stats ALTER ss_row_id SET DEFAULT 0;
index eea9e68..d6d2f24 100644 (file)
@@ -296,7 +296,7 @@ CREATE INDEX langlinks_lang_title    ON langlinks (ll_lang,ll_title);
 
 
 CREATE TABLE site_stats (
-  ss_row_id         INTEGER  NOT NULL  UNIQUE,
+  ss_row_id         INTEGER  NOT NULL  PRIMARY KEY DEFAULT 0,
   ss_total_edits    INTEGER            DEFAULT 0,
   ss_good_articles  INTEGER            DEFAULT 0,
   ss_total_pages    INTEGER            DEFAULT -1,
index 3c0fc7e..9805452 100644 (file)
@@ -200,7 +200,7 @@ class PurgeChangedFiles extends Maintenance {
 
                                $this->verbose( "Purged file {$row->log_title}; {$type} @{$row->log_timestamp}.\n" );
 
-                               if ( $this->hasOption( 'sleep-per-batch' ) && ++$bSize > $this->mBatchSize ) {
+                               if ( $this->hasOption( 'sleep-per-batch' ) && ++$bSize > $this->getBatchSize() ) {
                                        $bSize = 0;
                                        // sleep-per-batch is milliseconds, usleep wants micro seconds.
                                        usleep( 1000 * (int)$this->getOption( 'sleep-per-batch' ) );
index cf65c69..cce9b03 100644 (file)
@@ -79,7 +79,7 @@ class PurgeChangedPages extends Maintenance {
                $stuckCount = 0; // loop breaker
                while ( true ) {
                        // Adjust bach size if we are stuck in a second that had many changes
-                       $bSize = $this->mBatchSize + ( $stuckCount * $this->mBatchSize );
+                       $bSize = ( $stuckCount + 1 ) * $this->getBatchSize();
 
                        $res = $dbr->select(
                                [ 'page', 'revision' ],
index 5ca7918..8cf217f 100644 (file)
@@ -99,7 +99,7 @@ class PurgeList extends Maintenance {
                                $conds + [ 'page_id > ' . $dbr->addQuotes( $startId ) ],
                                __METHOD__,
                                [
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                        'ORDER BY' => 'page_id'
 
                                ]
index feeeb65..591f7ee 100644 (file)
@@ -48,7 +48,7 @@ class PurgeModuleDeps extends Maintenance {
 
                $modDeps = $dbw->tableName( 'module_deps' );
                $i = 1;
-               foreach ( array_chunk( $rows, $this->mBatchSize ) as $chunk ) {
+               foreach ( array_chunk( $rows, $this->getBatchSize() ) as $chunk ) {
                        // WHERE ( mod=A AND skin=A ) OR ( mod=A AND skin=B) ..
                        $conds = array_map( function ( stdClass $row ) use ( $dbw ) {
                                return $dbw->makeList( (array)$row, IDatabase::LIST_AND );
index fe3944c..19d8d06 100644 (file)
@@ -78,6 +78,7 @@ class RebuildFileCache extends Maintenance {
                $this->output( "Building content page file cache from page {$start}!\n" );
 
                $dbr = $this->getDB( DB_REPLICA );
+               $batchSize = $this->getBatchSize();
                $overwrite = $this->hasOption( 'overwrite' );
                $start = ( $start > 0 )
                        ? $start
@@ -92,9 +93,9 @@ class RebuildFileCache extends Maintenance {
                $_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip'; // hack, no real client
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
 
                $dbw = $this->getDB( DB_MASTER );
                // Go through each page and save the output
@@ -171,8 +172,8 @@ class RebuildFileCache extends Maintenance {
                        }
                        $this->commitTransaction( $dbw, __METHOD__ ); // commit any changes (just for sanity)
 
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                }
                $this->output( "Done!\n" );
        }
index 109350c..8fceedb 100644 (file)
@@ -125,12 +125,14 @@ class ImageBuilder extends Maintenance {
                flush();
        }
 
-       function buildTable( $table, $key, $callback ) {
+       function buildTable( $table, $key, $queryInfo, $callback ) {
                $count = $this->dbw->selectField( $table, 'count(*)', '', __METHOD__ );
                $this->init( $count, $table );
                $this->output( "Processing $table...\n" );
 
-               $result = $this->getDB( DB_REPLICA )->select( $table, '*', [], __METHOD__ );
+               $result = $this->getDB( DB_REPLICA )->select(
+                       $queryInfo['tables'], $queryInfo['fields'], [], __METHOD__, [], $queryInfo['joins']
+               );
 
                foreach ( $result as $row ) {
                        $update = call_user_func( $callback, $row, null );
@@ -145,7 +147,7 @@ class ImageBuilder extends Maintenance {
 
        function buildImage() {
                $callback = [ $this, 'imageCallback' ];
-               $this->buildTable( 'image', 'img_name', $callback );
+               $this->buildTable( 'image', 'img_name', LocalFile::getQueryInfo(), $callback );
        }
 
        function imageCallback( $row, $copy ) {
@@ -157,7 +159,8 @@ class ImageBuilder extends Maintenance {
        }
 
        function buildOldImage() {
-               $this->buildTable( 'oldimage', 'oi_archive_name', [ $this, 'oldimageCallback' ] );
+               $this->buildTable( 'oldimage', 'oi_archive_name', OldLocalFile::getQueryInfo(),
+                       [ $this, 'oldimageCallback' ] );
        }
 
        function oldimageCallback( $row, $copy ) {
index a2cf3c5..6d4a4bf 100644 (file)
@@ -109,7 +109,7 @@ class RebuildRecentchanges extends Maintenance {
                                'rc_timestamp < ' . $dbw->addQuotes( $dbw->timestamp( $this->cutoffTo ) )
                        ]
                );
-               foreach ( array_chunk( $rcids, $this->mBatchSize ) as $rcidBatch ) {
+               foreach ( array_chunk( $rcids, $this->getBatchSize() ) as $rcidBatch ) {
                        $dbw->delete( 'recentchanges', [ 'rc_id' => $rcidBatch ], __METHOD__ );
                        wfGetLBFactory()->waitForReplication();
                }
@@ -166,7 +166,7 @@ class RebuildRecentchanges extends Maintenance {
                                ] + $rcCommentStore->insert( $dbw, $comment ),
                                __METHOD__
                        );
-                       if ( ( ++$inserted % $this->mBatchSize ) == 0 ) {
+                       if ( ( ++$inserted % $this->getBatchSize() ) == 0 ) {
                                wfGetLBFactory()->waitForReplication();
                        }
                }
@@ -256,7 +256,7 @@ class RebuildRecentchanges extends Maintenance {
                                $lastOldId = intval( $obj->rc_this_oldid );
                                $lastSize = $size;
 
-                               if ( ( ++$updated % $this->mBatchSize ) == 0 ) {
+                               if ( ( ++$updated % $this->getBatchSize() ) == 0 ) {
                                        wfGetLBFactory()->waitForReplication();
                                }
                        }
@@ -340,7 +340,7 @@ class RebuildRecentchanges extends Maintenance {
                                __METHOD__
                        );
 
-                       if ( ( ++$inserted % $this->mBatchSize ) == 0 ) {
+                       if ( ( ++$inserted % $this->getBatchSize() ) == 0 ) {
                                wfGetLBFactory()->waitForReplication();
                        }
                }
@@ -392,7 +392,7 @@ class RebuildRecentchanges extends Maintenance {
                                        __METHOD__
                                );
 
-                               foreach ( array_chunk( $rcids, $this->mBatchSize ) as $rcidBatch ) {
+                               foreach ( array_chunk( $rcids, $this->getBatchSize() ) as $rcidBatch ) {
                                        $dbw->update(
                                                'recentchanges',
                                                [ 'rc_bot' => 1 ],
@@ -474,7 +474,7 @@ class RebuildRecentchanges extends Maintenance {
                                __METHOD__
                        );
 
-                       if ( ( ++$updates % $this->mBatchSize ) == 0 ) {
+                       if ( ( ++$updates % $this->getBatchSize() ) == 0 ) {
                                wfGetLBFactory()->waitForReplication();
                        }
                }
index faa4d96..5971d5e 100644 (file)
@@ -93,11 +93,7 @@ class RebuildTextIndex extends Maintenance {
                $this->output( "Rebuilding index fields for {$count} pages...\n" );
                $n = 0;
 
-               $fields = array_merge(
-                       Revision::selectPageFields(),
-                       Revision::selectFields(),
-                       Revision::selectTextFields()
-               );
+               $revQuery = Revision::getQueryInfo( [ 'page', 'text' ] );
 
                while ( $n < $count ) {
                        if ( $n ) {
@@ -105,7 +101,7 @@ class RebuildTextIndex extends Maintenance {
                        }
                        $end = $n + self::RTI_CHUNK_SIZE - 1;
 
-                       $res = $this->db->select( [ 'page', 'revision', 'text' ], $fields,
+                       $res = $this->db->select( $revQuery['tables'], $revQuery['fields'],
                                [ "page_id BETWEEN $n AND $end", 'page_latest = rev_id', 'rev_text_id = old_id' ],
                                __METHOD__
                        );
@@ -145,9 +141,10 @@ class RebuildTextIndex extends Maintenance {
        private function createMysqlTextIndex() {
                $searchindex = $this->db->tableName( 'searchindex' );
                $this->output( "\nRebuild the index...\n" );
-               $sql = "ALTER TABLE $searchindex ADD FULLTEXT si_title (si_title), " .
-                       "ADD FULLTEXT si_text (si_text)";
-               $this->db->query( $sql, __METHOD__ );
+               foreach ( [ 'si_title', 'si_text' ] as $field ) {
+                       $sql = "ALTER TABLE $searchindex ADD FULLTEXT $field ($field)";
+                       $this->db->query( $sql, __METHOD__ );
+               }
        }
 
        /**
index a4bfa98..b4d75c7 100644 (file)
@@ -97,8 +97,8 @@ TEXT
        }
 
        protected function doWork() {
-               $this->output( "Finding up to {$this->mBatchSize} drifted rows " .
-                       "starting at cat_id {$this->minimumId}...\n" );
+               $this->output( "Finding up to {$this->getBatchSize()} drifted rows " .
+                       "starting at cat_id {$this->getBatchSize()}...\n" );
 
                $countingConds = [ 'cl_to = cat_title' ];
                if ( $this->mode === 'subcats' ) {
@@ -124,7 +124,7 @@ TEXT
                                "cat_{$this->mode} != ($countingSubquery)"
                        ],
                        __METHOD__,
-                       [ 'LIMIT' => $this->mBatchSize ]
+                       [ 'LIMIT' => $this->getBatchSize() ]
                );
                if ( !$idsToUpdate ) {
                        return false;
index fd3faeb..bd625ba 100644 (file)
@@ -57,6 +57,8 @@ class RefreshFileHeaders extends Maintenance {
                $count = 0;
                $dbr = $this->getDB( DB_REPLICA );
 
+               $fileQuery = LocalFile::getQueryInfo();
+
                do {
                        $conds = [ "img_name > {$dbr->addQuotes( $start )}" ];
 
@@ -76,8 +78,16 @@ class RefreshFileHeaders extends Maintenance {
                                $conds[] = "img_minor_mime = {$dbr->addQuotes( $minor_mime )}";
                        }
 
-                       $res = $dbr->select( 'image', '*', $conds,
-                               __METHOD__, [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name ASC' ] );
+                       $res = $dbr->select( $fileQuery['tables'],
+                               $fileQuery['fields'],
+                               $conds,
+                               __METHOD__,
+                               [
+                                       'LIMIT' => $this->getBatchSize(),
+                                       'ORDER BY' => 'img_name ASC'
+                               ],
+                               $fileQuery['joins']
+                       );
 
                        if ( $res->numRows() > 0 ) {
                                $row1 = $res->current();
@@ -119,7 +129,7 @@ class RefreshFileHeaders extends Maintenance {
 
                        $this->output( "Updating headers for {$backendOperationsCount} file(s).\n" );
                        $this->updateFileHeaders( $repo, $backendOperations );
-               } while ( $res->numRows() === $this->mBatchSize );
+               } while ( $res->numRows() === $this->getBatchSize() );
 
                $this->output( "Done. Updated headers for $count file(s).\n" );
        }
index f6e9e9c..f6c0673 100644 (file)
@@ -106,7 +106,8 @@ class RefreshImageMetadata extends Maintenance {
                $error = 0;
 
                $dbw = $this->getDB( DB_MASTER );
-               if ( $this->mBatchSize <= 0 ) {
+               $batchSize = $this->getBatchSize();
+               if ( $batchSize <= 0 ) {
                        $this->error( "Batch size is too low...", 12 );
                }
 
@@ -120,17 +121,20 @@ class RefreshImageMetadata extends Maintenance {
                }
 
                $options = [
-                       'LIMIT' => $this->mBatchSize,
+                       'LIMIT' => $batchSize,
                        'ORDER BY' => 'img_name ASC',
                ];
 
+               $fileQuery = LocalFile::getQueryInfo();
+
                do {
                        $res = $dbw->select(
-                               'image',
-                               '*',
+                               $fileQuery['tables'],
+                               $fileQuery['fields'],
                                array_merge( $conds, $conds2 ),
                                __METHOD__,
-                               $options
+                               $options,
+                               $fileQuery['joins']
                        );
 
                        if ( $res->numRows() > 0 ) {
@@ -191,7 +195,7 @@ class RefreshImageMetadata extends Maintenance {
                        }
                        $conds2 = [ 'img_name > ' . $dbw->addQuotes( $row->img_name ) ];
                        wfWaitForSlaves();
-               } while ( $res->numRows() === $this->mBatchSize );
+               } while ( $res->numRows() === $batchSize );
 
                $total = $upgraded + $leftAlone;
                if ( $force ) {
index b099aff..cea9e0c 100644 (file)
@@ -80,9 +80,9 @@ class RefreshLinks extends Maintenance {
                        $redir = $this->hasOption( 'redirects-only' );
                        $oldRedir = $this->hasOption( 'old-redirects-only' );
                        $this->doRefreshLinks( $start, $new, $end, $redir, $oldRedir );
-                       $this->deleteLinksFromNonexistent( null, null, $this->mBatchSize, $dfnChunkSize );
+                       $this->deleteLinksFromNonexistent( null, null, $this->getBatchSize(), $dfnChunkSize );
                } else {
-                       $this->deleteLinksFromNonexistent( $start, $end, $this->mBatchSize, $dfnChunkSize );
+                       $this->deleteLinksFromNonexistent( $start, $end, $this->getBatchSize(), $dfnChunkSize );
                }
        }
 
@@ -456,7 +456,7 @@ class RefreshLinks extends Maintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => [ 'cl_timestamp', 'cl_from' ],
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ]
                        );
 
@@ -470,7 +470,7 @@ class RefreshLinks extends Maintenance {
                                self::fixLinksFromArticle( $row->page_id );
                        }
 
-               } while ( $res->numRows() == $this->mBatchSize );
+               } while ( $res->numRows() == $this->getBatchSize() );
        }
 
        /**
index 1034005..91025bf 100644 (file)
@@ -36,7 +36,7 @@ class RemoveInvalidEmails extends Maintenance {
                                        'user_email_authenticated IS NULL'
                                ],
                                __METHOD__,
-                               [ 'LIMIT' => $this->mBatchSize ]
+                               [ 'LIMIT' => $this->getBatchSize() ]
                        );
                        $count = $rows->numRows();
                        $badIds = [];
index 481da98..710198b 100644 (file)
@@ -64,7 +64,7 @@ class ResetUserTokens extends Maintenance {
                        $this->output( "\n" );
                        $this->output( "Abort with control-c in the next five seconds "
                                . "(skip this countdown with --nowarn) ... " );
-                       wfCountDown( 5 );
+                       $this->countDown( 5 );
                }
 
                // We list user by user_id from one of the replica DBs
@@ -80,7 +80,7 @@ class ResetUserTokens extends Maintenance {
                $maxid = $dbr->selectField( 'user', 'MAX(user_id)', [], __METHOD__ );
 
                $min = 0;
-               $max = $this->mBatchSize;
+               $max = $this->getBatchSize();
 
                do {
                        $result = $dbr->select( 'user',
@@ -99,7 +99,7 @@ class ResetUserTokens extends Maintenance {
                        }
 
                        $min = $max;
-                       $max = $min + $this->mBatchSize;
+                       $max = $min + $this->getBatchSize();
 
                        wfWaitForSlaves();
                } while ( $min <= $maxid );
index 2e011fe..af2a318 100644 (file)
@@ -25,6 +25,9 @@ require_once __DIR__ . '/Maintenance.php';
 
 use MediaWiki\Logger\LoggerFactory;
 
+// So extensions (and other code) can check whether they're running in job mode
+define( 'MEDIAWIKI_JOB_RUNNER', true );
+
 /**
  * Maintenance script that runs pending jobs.
  *
@@ -39,7 +42,7 @@ class RunJobs extends Maintenance {
                $this->addOption( 'type', 'Type of job to run', false, true );
                $this->addOption( 'procs', 'Number of processes to use', false, true );
                $this->addOption( 'nothrottle', 'Ignore job throttling configuration', false, false );
-               $this->addOption( 'result', 'Set to JSON to print only a JSON response', false, true );
+               $this->addOption( 'result', 'Set to "json" to print only a JSON response', false, true );
                $this->addOption( 'wait', 'Wait for new jobs instead of exiting', false, false );
        }
 
index 90d8d03..028f11c 100644 (file)
@@ -48,16 +48,18 @@ if ( isset( $options['limit'] ) ) {
 $type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
 
 $dbr = $this->getDB( DB_REPLICA );
+$revQuery = Revision::getQueryInfo( [ 'page', 'text' ] );
 $res = $dbr->select(
-       [ 'page', 'revision', 'text' ],
-       '*',
+       $revQuery['tables'],
+       $revQuery['fields'],
        [
                'page_namespace' => $title->getNamespace(),
                'page_title' => $title->getDBkey(),
-               'page_id=rev_page',
                'rev_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $start ) ),
-               'rev_text_id=old_id'
-       ], __FILE__, [ 'LIMIT' => $limit ]
+       ],
+       __FILE__,
+       [ 'LIMIT' => $limit ],
+       $revQuery['joins']
 );
 
 $blob = new $type;
index 82149a6..154f54e 100644 (file)
@@ -161,7 +161,7 @@ class SyncFileBackend extends Maintenance {
 
                $next = null;
                do {
-                       $limit = min( $this->mBatchSize, $end - $start + 1 ); // don't go pass ending ID
+                       $limit = min( $this->getBatchSize(), $end - $start + 1 ); // don't go pass ending ID
                        $this->output( "Doing id $start to " . ( $start + $limit - 1 ) . "...\n" );
 
                        $entries = $src->getJournal()->getChangeEntries( $start, $limit, $next );
index 5f705ba..f8f5dcd 100755 (executable)
@@ -128,7 +128,7 @@ class UpdateMediaWiki extends Maintenance {
                        $this->compatChecks();
                } else {
                        $this->output( "Skipping compatibility checks, proceed at your own risk (Ctrl+C to abort)\n" );
-                       wfCountDown( 5 );
+                       $this->countDown( 5 );
                }
 
                // Check external dependencies are up to date
@@ -145,6 +145,16 @@ class UpdateMediaWiki extends Maintenance {
                # This will vomit up an error if there are permissions problems
                $db = $this->getDB( DB_MASTER );
 
+               # Check to see whether the database server meets the minimum requirements
+               /** @var DatabaseInstaller $dbInstallerClass */
+               $dbInstallerClass = Installer::getDBInstallerClass( $db->getType() );
+               $status = $dbInstallerClass::meetsMinimumRequirement( $db->getServerVersion() );
+               if ( !$status->isOK() ) {
+                       // This might output some wikitext like <strong> but it should be comprehensible
+                       $text = $status->getWikiText();
+                       $this->error( $text, 1 );
+               }
+
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
                if ( $db->getType() === 'sqlite' ) {
                        /** @var IMaintainableDatabase|DatabaseSqlite $db */
@@ -155,11 +165,31 @@ class UpdateMediaWiki extends Maintenance {
                if ( !$this->hasOption( 'quick' ) ) {
                        $this->output( "Abort with control-c in the next five seconds "
                                . "(skip this countdown with --quick) ... " );
-                       wfCountDown( 5 );
+                       $this->countDown( 5 );
                }
 
                $time1 = microtime( true );
 
+               $badPhpUnit = dirname( __DIR__ ) . '/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php';
+               if ( file_exists( $badPhpUnit ) ) {
+                       // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+                       // Bad versions of the file are:
+                       // https://raw.githubusercontent.com/sebastianbergmann/phpunit/c820f915bfae34e5a836f94967a2a5ea5ef34f21/src/Util/PHP/eval-stdin.php
+                       // https://raw.githubusercontent.com/sebastianbergmann/phpunit/3aaddb1c5bd9b9b8d070b4cf120e71c36fd08412/src/Util/PHP/eval-stdin.php
+                       // @codingStandardsIgnoreEnd
+                       $md5 = md5_file( $badPhpUnit );
+                       if ( $md5 === '120ac49800671dc383b6f3709c25c099'
+                               || $md5 === '28af792cb38fc9a1b236b91c1aad2876'
+                       ) {
+                               $success = unlink( $badPhpUnit );
+                               if ( $success ) {
+                                       $this->output( "Removed PHPUnit eval-stdin.php to protect against CVE-2017-9841\n" );
+                               } else {
+                                       $this->error( "Unable to remove $badPhpUnit, you should manually. See CVE-2017-9841" );
+                               }
+                       }
+               }
+
                $shared = $this->hasOption( 'doshared' );
 
                $updates = [ 'core', 'extensions' ];
index 2f3fc36..334ed27 100644 (file)
@@ -41,6 +41,7 @@ class UpdateRestrictions extends Maintenance {
 
        public function execute() {
                $db = $this->getDB( DB_MASTER );
+               $batchSize = $this->getBatchSize();
                if ( !$db->tableExists( 'page_restrictions' ) ) {
                        $this->error( "page_restrictions table does not exist", true );
                }
@@ -52,9 +53,9 @@ class UpdateRestrictions extends Maintenance {
                $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                $encodedExpiry = 'infinity';
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing page_id from $blockStart to $blockEnd out of $end\n" );
@@ -105,8 +106,8 @@ class UpdateRestrictions extends Maintenance {
                                        throw new MWException( "Deadlock loop failed wtf :(" );
                                }
                        }
-                       $blockStart += $this->mBatchSize - 1;
-                       $blockEnd += $this->mBatchSize - 1;
+                       $blockStart += $batchSize - 1;
+                       $blockEnd += $batchSize - 1;
                        wfWaitForSlaves();
                }
                $this->output( "...removing dead rows from page_restrictions\n" );
diff --git a/maintenance/userOptions.inc b/maintenance/userOptions.inc
deleted file mode 100644 (file)
index 8ac7f91..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-<?php
-/**
- * Helper class for userOptions.php script.
- *
- * 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 Maintenance
- */
-
-// Options we will use
-$options = [ 'list', 'nowarn', 'quiet', 'usage', 'dry' ];
-$optionsWithArgs = [ 'old', 'new' ];
-
-require_once __DIR__ . '/commandLine.inc';
-
-/**
- * @ingroup Maintenance
- */
-class UserOptions {
-       public $mQuick;
-       public $mQuiet;
-       public $mDry;
-       public $mAnOption;
-       public $mOldValue;
-       public $mNewValue;
-
-       private $mMode, $mReady;
-
-       /**
-        * Constructor. Will show usage and exit if script options are not correct
-        * @param array $opts
-        * @param array $args
-        */
-       function __construct( $opts, $args ) {
-               if ( !$this->checkOpts( $opts, $args ) ) {
-                       self::showUsageAndExit();
-               } else {
-                       $this->mReady = $this->initializeOpts( $opts, $args );
-               }
-       }
-
-       /**
-        * This is used to check options. Only needed on construction
-        *
-        * @param array $opts
-        * @param array $args
-        *
-        * @return bool
-        */
-       private function checkOpts( $opts, $args ) {
-               // The three possible ways to run the script:
-               $list = isset( $opts['list'] );
-               $usage = isset( $opts['usage'] ) && ( count( $args ) <= 1 );
-               $change = isset( $opts['old'] ) && isset( $opts['new'] ) && ( count( $args ) <= 1 );
-
-               // We want only one of them
-               $isValid = ( ( $list + $usage + $change ) == 1 );
-
-               return $isValid;
-       }
-
-       /**
-        * load script options in the object
-        *
-        * @param array $opts
-        * @param array $args
-        *
-        * @return bool
-        */
-       private function initializeOpts( $opts, $args ) {
-               $this->mQuick = isset( $opts['nowarn'] );
-               $this->mQuiet = isset( $opts['quiet'] );
-               $this->mDry = isset( $opts['dry'] );
-
-               // Set object properties, specially 'mMode' used by run()
-               if ( isset( $opts['list'] ) ) {
-                       $this->mMode = 'LISTER';
-               } elseif ( isset( $opts['usage'] ) ) {
-                       $this->mMode = 'USAGER';
-                       $this->mAnOption = isset( $args[0] ) ? $args[0] : false;
-               } elseif ( isset( $opts['old'] ) && isset( $opts['new'] ) ) {
-                       $this->mMode = 'CHANGER';
-                       $this->mOldValue = $opts['old'];
-                       $this->mNewValue = $opts['new'];
-                       $this->mAnOption = $args[0];
-               } else {
-                       die( "There is a bug in the software, this should never happen\n" );
-               }
-
-               return true;
-       }
-
-       /**
-        * Dumb stuff to run a mode.
-        * @return bool
-        */
-       public function run() {
-               if ( !$this->mReady ) {
-                       return false;
-               }
-
-               $this->{$this->mMode}();
-
-               return true;
-       }
-
-       /**
-        * List default options and their value
-        */
-       private function LISTER() {
-               $def = User::getDefaultOptions();
-               ksort( $def );
-               $maxOpt = 0;
-               foreach ( $def as $opt => $value ) {
-                       $maxOpt = max( $maxOpt, strlen( $opt ) );
-               }
-               foreach ( $def as $opt => $value ) {
-                       printf( "%-{$maxOpt}s: %s\n", $opt, $value );
-               }
-       }
-
-       /**
-        * List options usage
-        */
-       private function USAGER() {
-               $ret = [];
-               $defaultOptions = User::getDefaultOptions();
-
-               // We list user by user_id from one of the replica DBs
-               $dbr = wfGetDB( DB_REPLICA );
-               $result = $dbr->select( 'user',
-                       [ 'user_id' ],
-                       [],
-                       __METHOD__
-               );
-
-               foreach ( $result as $id ) {
-                       $user = User::newFromId( $id->user_id );
-
-                       // Get the options and update stats
-                       if ( $this->mAnOption ) {
-                               if ( !array_key_exists( $this->mAnOption, $defaultOptions ) ) {
-                                       print "Invalid user option. Use --list to see valid choices\n";
-                                       exit;
-                               }
-
-                               $userValue = $user->getOption( $this->mAnOption );
-                               if ( $userValue <> $defaultOptions[$this->mAnOption] ) {
-                                       // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
-                                       @$ret[$this->mAnOption][$userValue]++;
-                                       // @codingStandardsIgnoreEnd
-                               }
-                       } else {
-
-                               foreach ( $defaultOptions as $name => $defaultValue ) {
-                                       $userValue = $user->getOption( $name );
-                                       if ( $userValue <> $defaultValue ) {
-                                               // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
-                                               @$ret[$name][$userValue]++;
-                                               // @codingStandardsIgnoreEnd
-                                       }
-                               }
-                       }
-               }
-
-               foreach ( $ret as $optionName => $usageStats ) {
-                       print "Usage for <$optionName> (default: '{$defaultOptions[$optionName]}'):\n";
-                       foreach ( $usageStats as $value => $count ) {
-                               print " $count user(s): '$value'\n";
-                       }
-                       print "\n";
-               }
-       }
-
-       /**
-        * Change our users options
-        */
-       private function CHANGER() {
-               $this->warn();
-
-               // We list user by user_id from one of the replica DBs
-               $dbr = wfGetDB( DB_REPLICA );
-               $result = $dbr->select( 'user',
-                       [ 'user_id' ],
-                       [],
-                       __METHOD__
-               );
-
-               foreach ( $result as $id ) {
-                       $user = User::newFromId( $id->user_id );
-
-                       $curValue = $user->getOption( $this->mAnOption );
-                       $username = $user->getName();
-
-                       if ( $curValue == $this->mOldValue ) {
-                               if ( !$this->mQuiet ) {
-                                       print "Setting {$this->mAnOption} for $username from '{$this->mOldValue}' " .
-                                               "to '{$this->mNewValue}'): ";
-                               }
-
-                               // Change value
-                               $user->setOption( $this->mAnOption, $this->mNewValue );
-
-                               // Will not save the settings if run with --dry
-                               if ( !$this->mDry ) {
-                                       $user->saveSettings();
-                               }
-                               if ( !$this->mQuiet ) {
-                                       print " OK\n";
-                               }
-                       } elseif ( !$this->mQuiet ) {
-                               print "Not changing '$username' using <{$this->mAnOption}> = '$curValue'\n";
-                       }
-               }
-       }
-
-       /**
-        * Return an array of option names
-        * @return array
-        */
-       public static function getDefaultOptionsNames() {
-               $def = User::getDefaultOptions();
-               $ret = [];
-               foreach ( $def as $optname => $defaultValue ) {
-                       array_push( $ret, $optname );
-               }
-
-               return $ret;
-       }
-
-       public static function showUsageAndExit() {
-               print <<<USAGE
-
-This script pass through all users and change one of their options.
-The new option is NOT validated.
-
-Usage:
-       php userOptions.php --list
-       php userOptions.php [user option] --usage
-       php userOptions.php [options] <user option> --old <old value> --new <new value>
-
-Switchs:
-       --list : list available user options and their default value
-
-       --usage : report all options statistics or just one if you specify it.
-
-       --old <old value> : the value to look for
-       --new <new value> : new value to update users with
-
-Options:
-       --nowarn: hides the 5 seconds warning
-       --quiet : do not print what is happening
-       --dry   : do not save user settings back to database
-
-USAGE;
-               exit( 0 );
-       }
-
-       /**
-        * The warning message and countdown
-        * @return bool
-        */
-       public function warn() {
-               if ( $this->mQuick ) {
-                       return true;
-               }
-
-               print <<<WARN
-The script is about to change the skin for ALL USERS in the database.
-Users with option <$this->mAnOption> = '$this->mOldValue' will be made to use '$this->mNewValue'.
-
-Abort with control-c in the next five seconds....
-WARN;
-               wfCountDown( 5 );
-
-               return true;
-       }
-}
index 53db48c..7cf16b6 100644 (file)
  * @author Antoine Musso <hashar at free dot fr>
  */
 
-// This is a command line script, load tools and parse args
-require_once 'userOptions.inc';
+require_once __DIR__ . '/Maintenance.php';
 
-// Load up our tool system, exit with usage() if options are not fine
-$uo = new UserOptions( $options, $args );
+/**
+ * @ingroup Maintenance
+ */
+class UserOptionsMaintenance extends Maintenance {
+
+       function __construct() {
+               parent::__construct();
+
+               $this->addDescription( 'Pass through all users and change one of their options.
+The new option is NOT validated.' );
+
+               $this->addOption( 'list', 'List available user options and their default value' );
+               $this->addOption( 'usage', 'Report all options statistics or just one if you specify it' );
+               $this->addOption( 'old', 'The value to look for', false, true );
+               $this->addOption( 'new', 'Rew value to update users with', false, true );
+               $this->addOption( 'nowarn', 'Hides the 5 seconds warning' );
+               $this->addOption( 'dry', 'Do not save user settings back to database' );
+               $this->addArg( 'option name', 'Name of the option to change or provide statistics about', false );
+       }
+
+       /**
+        * Do the actual work
+        */
+       public function execute() {
+               if ( $this->hasOption( 'list' ) ) {
+                       $this->listAvailableOptions();
+               } elseif ( $this->hasOption( 'usage' ) ) {
+                       $this->showUsageStats();
+               } elseif ( $this->hasOption( 'old' )
+                       && $this->hasOption( 'new' )
+                       && $this->hasArg( 0 )
+               ) {
+                       $this->updateOptions();
+               } else {
+                       $this->maybeHelp( /* force = */ true );
+               }
+       }
+
+       /**
+        * List default options and their value
+        */
+       private function listAvailableOptions() {
+               $def = User::getDefaultOptions();
+               ksort( $def );
+               $maxOpt = 0;
+               foreach ( $def as $opt => $value ) {
+                       $maxOpt = max( $maxOpt, strlen( $opt ) );
+               }
+               foreach ( $def as $opt => $value ) {
+                       $this->output( sprintf( "%-{$maxOpt}s: %s\n", $opt, $value ) );
+               }
+       }
+
+       /**
+        * List options usage
+        */
+       private function showUsageStats() {
+               $option = $this->getArg( 0 );
+
+               $ret = [];
+               $defaultOptions = User::getDefaultOptions();
+
+               // We list user by user_id from one of the replica DBs
+               $dbr = wfGetDB( DB_REPLICA );
+               $result = $dbr->select( 'user',
+                       [ 'user_id' ],
+                       [],
+                       __METHOD__
+               );
+
+               foreach ( $result as $id ) {
+                       $user = User::newFromId( $id->user_id );
+
+                       // Get the options and update stats
+                       if ( $option ) {
+                               if ( !array_key_exists( $option, $defaultOptions ) ) {
+                                       $this->error( "Invalid user option. Use --list to see valid choices\n", 1 );
+                               }
+
+                               $userValue = $user->getOption( $option );
+                               if ( $userValue <> $defaultOptions[$option] ) {
+                                       // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
+                                       @$ret[$option][$userValue]++;
+                                       // @codingStandardsIgnoreEnd
+                               }
+                       } else {
+
+                               foreach ( $defaultOptions as $name => $defaultValue ) {
+                                       $userValue = $user->getOption( $name );
+                                       if ( $userValue != $defaultValue ) {
+                                               // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
+                                               @$ret[$name][$userValue]++;
+                                               // @codingStandardsIgnoreEnd
+                                       }
+                               }
+                       }
+               }
+
+               foreach ( $ret as $optionName => $usageStats ) {
+                       $this->output( "Usage for <$optionName> (default: '{$defaultOptions[$optionName]}'):\n" );
+                       foreach ( $usageStats as $value => $count ) {
+                               $this->output( " $count user(s): '$value'\n" );
+                       }
+                       print "\n";
+               }
+       }
+
+       /**
+        * Change our users options
+        */
+       private function updateOptions() {
+               $dryRun = $this->hasOption( 'dry' );
+               $option = $this->getArg( 0 );
+               $from = $this->getOption( 'old' );
+               $to = $this->getOption( 'new' );
+
+               if ( !$dryRun ) {
+                       $this->warn( $option, $from, $to );
+               }
+
+               // We list user by user_id from one of the replica DBs
+               // @todo: getting all users in one query does not scale
+               $dbr = wfGetDB( DB_REPLICA );
+               $result = $dbr->select( 'user',
+                       [ 'user_id' ],
+                       [],
+                       __METHOD__
+               );
+
+               foreach ( $result as $id ) {
+                       $user = User::newFromId( $id->user_id );
+
+                       $curValue = $user->getOption( $option );
+                       $username = $user->getName();
+
+                       if ( $curValue == $from ) {
+                               $this->output( "Setting {$option} for $username from '{$from}' to '{$to}'): " );
+
+                               // Change value
+                               $user->setOption( $option, $to );
+
+                               // Will not save the settings if run with --dry
+                               if ( !$dryRun ) {
+                                       $user->saveSettings();
+                               }
+                               $this->output( " OK\n" );
+                       } else {
+                               $this->output( "Not changing '$username' using <{$option}> = '$curValue'\n" );
+                       }
+               }
+       }
+
+       /**
+        * The warning message and countdown
+        *
+        * @param string $option
+        * @param string $from
+        * @param string $to
+        */
+       private function warn( $option, $from, $to ) {
+               if ( $this->hasOption( 'nowarn' ) ) {
+                       return;
+               }
+
+               $this->output( <<<WARN
+The script is about to change the options for ALL USERS in the database.
+Users with option <$option> = '$from' will be made to use '$to'.
 
-$uo->run();
+Abort with control-c in the next five seconds....
+WARN
+               );
+               $this->countDown( 5 );
+       }
+}
 
-print "Done.\n";
+$maintClass = 'UserOptionsMaintenance';
+require RUN_MAINTENANCE_IF_MAIN;
index 85fa780..981143e 100644 (file)
@@ -87,7 +87,7 @@ class WrapOldPasswords extends Maintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => 'user_id',
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                        'LOCK IN SHARE MODE',
                                ]
                        );
index 96a425f..faca87d 100644 (file)
@@ -8,26 +8,26 @@
   },
   "devDependencies": {
     "deepmerge": "1.3.2",
-    "eslint": "3.12.2",
+    "eslint": "4.9.0",
     "eslint-config-wikimedia": "0.5.0",
     "grunt": "1.0.1",
     "grunt-banana-checker": "0.6.0",
     "grunt-contrib-copy": "1.0.0",
     "grunt-contrib-watch": "1.0.0",
-    "grunt-eslint": "20.0.0",
+    "grunt-eslint": "20.1.0",
     "grunt-jsonlint": "1.1.0",
     "grunt-karma": "2.0.0",
-    "grunt-stylelint": "0.8.0",
+    "grunt-stylelint": "0.9.0",
     "grunt-webdriver": "2.0.3",
-    "karma": "1.5.0",
-    "karma-chrome-launcher": "2.0.0",
+    "karma": "1.7.1",
+    "karma-chrome-launcher": "2.2.0",
     "karma-firefox-launcher": "1.0.1",
-    "karma-mocha-reporter": "2.2.3",
-    "karma-qunit": "1.0.0",
-    "nodemw": "0.10.1",
-    "qunitjs": "1.23.1",
-    "stylelint": "7.8.0",
-    "stylelint-config-wikimedia": "0.4.1",
+    "karma-mocha-reporter": "2.2.5",
+    "karma-qunit": "1.2.1",
+    "nodemw": "0.11.0",
+    "qunitjs": "2.4.1",
+    "stylelint": "8.2.0",
+    "stylelint-config-wikimedia": "0.4.2",
     "wdio-junit-reporter": "0.2.0",
     "wdio-mocha-framework": "0.5.8",
     "wdio-sauce-service": "^0.3.1",
diff --git a/phpcs.xml b/phpcs.xml
deleted file mode 100644 (file)
index 29ddca3..0000000
--- a/phpcs.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-<ruleset name="MediaWiki">
-       <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
-               <exclude name="Generic.ControlStructures.InlineControlStructure" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingReturn" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.ParamNameNoMatch" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.ExtraParamComment" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
-               <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentStart" />
-               <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentEnd" />
-               <exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
-               <exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
-               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
-               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.SingleSpaceBeforeSingleLineComment" />
-               <exclude name="MediaWiki.Usage.DbrQueryUsage.DbrQueryFound" />
-               <exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
-               <exclude name="MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals" />
-               <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
-               <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
-               <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
-               <exclude name="MediaWiki.VariableAnalysis.ForbiddenGlobalVariables.ForbiddenGlobal$wgTitle" />
-               <exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE" />
-               <exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE_TALK" />
-       </rule>
-       <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
-               <properties>
-                       <property name="ignoreList" type="array" value="bfNormalizeTitleStrReplace,bfNormalizeTitleStrTr,cdbShowHelp,codepointToUtf8,compare_point,cssfilter,escapeSingleString,findAuxFile,findFiles,getEscapedProfileUrl,getFileCommentFromSourceWiki,getFileUserFromSourceWiki,hexSequenceToUtf8,mccGetHelp,mccShowUsage,mimeTypeMatch,moveToExternal,NothingFunction,NothingFunctionData,resolveStub,resolveStubs,showUsage,splitFilename,utf8ToCodepoint,utf8ToHexSequence" />
-               </properties>
-       </rule>
-       <rule ref="MediaWiki.NamingConventions.ValidGlobalName">
-               <properties>
-                       <property name="ignoreList" type="array" value="$IP,$messageMemc,$parserMemc" />
-               </properties>
-       </rule>
-       <rule ref="Generic.Files.LineLength">
-               <exclude-pattern>*/languages/messages/Messages*.php</exclude-pattern>
-       </rule>
-       <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
-               <exclude-pattern>*/includes/StubObject.php</exclude-pattern>
-       </rule>
-       <file>.</file>
-       <arg name="encoding" value="UTF-8"/>
-       <arg name="extensions" value="php,php5,inc,sample"/>
-       <exclude-pattern type="relative">^extensions/</exclude-pattern>
-       <exclude-pattern type="relative">^skins/</exclude-pattern>
-       <exclude-pattern>AdminSettings\.php</exclude-pattern>
-       <exclude-pattern>LocalSettings\.php</exclude-pattern>
-       <exclude-pattern>StartProfiler\.php</exclude-pattern>
-</ruleset>
index 6d59d5c..479ade0 100644 (file)
@@ -132,14 +132,10 @@ return [
        /* jQuery */
 
        'jquery' => [
-               'scripts' => ( $GLOBALS['wgUsejQueryThree'] ?
-                       [
-                               'resources/lib/jquery/jquery3.js',
-                               'resources/lib/jquery/jquery.migrate.js',
-                       ] : [
-                               'resources/lib/jquery/jquery.js',
-                       ]
-               ),
+               'scripts' => [
+                       'resources/lib/jquery/jquery.js',
+                       'resources/lib/jquery/jquery.migrate.js',
+               ],
                'raw' => true,
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -155,24 +151,9 @@ return [
                'messages' => [ 'brackets', 'word-separator' ],
                'targets' => [ 'mobile', 'desktop' ],
        ],
-       'jquery.appear' => [
-               'deprecated' => 'Please use "mediawiki.viewport" instead.',
-               'scripts' => 'resources/lib/jquery/jquery.appear.js',
-       ],
        'jquery.async' => [
                'scripts' => 'resources/lib/jquery/jquery.async.js',
        ],
-       'jquery.autoEllipsis' => [
-               'deprecated' => 'Use CSS text-overflow instead.',
-               'scripts' => 'resources/src/jquery/jquery.autoEllipsis.js',
-               'dependencies' => 'jquery.highlightText',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'jquery.badge' => [
-               'scripts' => 'resources/src/jquery/jquery.badge.js',
-               'styles' => 'resources/src/jquery/jquery.badge.css',
-               'dependencies' => 'mediawiki.language',
-       ],
        'jquery.byteLength' => [
                'scripts' => 'resources/src/jquery/jquery.byteLength.js',
                'targets' => [ 'desktop', 'mobile' ],
@@ -301,12 +282,6 @@ return [
                'scripts' => 'resources/src/jquery/jquery.mw-jump.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'jquery.placeholder' => [
-               'deprecated' => 'Use of "jquery.placeholder" is deprecated since MediaWiki 1.29.0',
-
-               'scripts' => 'resources/src/jquery/jquery.placeholder.js',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
        'jquery.qunit' => [
                'scripts' => 'resources/lib/qunitjs/qunit.js',
                'styles' => 'resources/lib/qunitjs/qunit.css',
@@ -363,7 +338,7 @@ return [
        /* jQuery UI */
 
        'jquery.ui.core' => [
-               'deprecated' => 'Please use "mediawiki.ui.button" or "oojs-ui" instead.',
+               'deprecated' => 'Please use OOUI instead.',
                'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js',
                'dependencies' => [
                        'jquery.ui.core.styles',
@@ -1159,6 +1134,7 @@ return [
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
                'dependencies' => [
                        'mediawiki.util',
+                       'mediawiki.visibleTimeout',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1413,6 +1389,14 @@ return [
                'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
+       'mediawiki.editfont.styles' => [
+               'styles' => 'resources/src/mediawiki/mediawiki.editfont.css',
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
+       'mediawiki.visibleTimeout' => [
+               'scripts' => 'resources/src/mediawiki/mediawiki.visibleTimeout.js',
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
 
        /* MediaWiki Action */
 
@@ -1424,6 +1408,7 @@ return [
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.css',
                'dependencies' => [
                        'mediawiki.action.edit.styles',
+                       'mediawiki.editfont.styles',
                        'jquery.textSelection',
                        'oojs-ui-core',
                        'mediawiki.widgets.visibleByteLimit',
@@ -1705,7 +1690,6 @@ return [
        'mediawiki.page.watch.ajax' => [
                'scripts' => 'resources/src/mediawiki/page/watch.js',
                'dependencies' => [
-                       'mediawiki.page.startup',
                        'mediawiki.api.watch',
                        'mediawiki.notify',
                        'mediawiki.util',
@@ -1786,6 +1770,7 @@ return [
        ],
        'mediawiki.rcfilters.filters.ui' => [
                'scripts' => [
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CheckboxInputWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js',
@@ -1874,6 +1859,7 @@ return [
                        'rcfilters-savedqueries-new-name-label',
                        'rcfilters-savedqueries-new-name-placeholder',
                        'rcfilters-savedqueries-add-new-title',
+                       'rcfilters-savedqueries-already-saved',
                        'rcfilters-savedqueries-apply-label',
                        'rcfilters-savedqueries-apply-and-setdefault-label',
                        'rcfilters-savedqueries-cancel-label',
@@ -1899,7 +1885,6 @@ return [
                        'rcfilters-tag-prefix-tags',
                        'rcfilters-exclude-button-off',
                        'rcfilters-exclude-button-on',
-                       'rcfilters-view-advanced-filters-label',
                        'rcfilters-view-tags',
                        'rcfilters-view-namespaces-tooltip',
                        'rcfilters-view-tags-tooltip',
@@ -1913,8 +1898,11 @@ return [
                        'rcfilters-other-review-tools',
                        'blanknamespace',
                        'namespaces',
+                       'tags-title',
                        'invert',
                        'recentchanges-noresult',
+                       'recentchanges-timeout',
+                       'recentchanges-network',
                        'quotation-marks',
                ],
                'dependencies' => [
@@ -1922,6 +1910,7 @@ return [
                        'jquery.makeCollapsible',
                        'mediawiki.language',
                        'mediawiki.user',
+                       'mediawiki.util',
                        'mediawiki.rcfilters.filters.dm',
                        'oojs-ui.styles.icons-content',
                        'oojs-ui.styles.icons-moderation',
@@ -2094,7 +2083,7 @@ return [
        'mediawiki.special.pagesWithProp' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ],
-       'mediawiki.special.preferences' => [
+       'mediawiki.special.preferences.ooui' => [
                'scripts' => [
                        'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
                        'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
@@ -2111,9 +2100,11 @@ return [
                        'mediawiki.language',
                        'mediawiki.confirmCloseWindow',
                        'mediawiki.notification.convertmessagebox',
+                       'oojs-ui-widgets',
+                       'mediawiki.widgets.SelectWithInputWidget',
                ],
        ],
-       'mediawiki.special.preferences.styles' => [
+       'mediawiki.special.preferences.styles.ooui' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
        ],
        'mediawiki.special.recentchanges' => [
@@ -2312,6 +2303,7 @@ return [
        /* MediaWiki UI */
 
        'mediawiki.ui' => [
+               'deprecated' => 'Please use OOUI instead.',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/default.less',
@@ -2528,12 +2520,6 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.widgets.CategorySelector' => [
-               'deprecated' => 'Use "mw.widgets.CategoryMultiselectWidget" instead. See T161285.',
-               'dependencies' => [
-                       'mediawiki.widgets.CategoryMultiselectWidget',
-               ],
-       ],
        'mediawiki.widgets.CategoryMultiselectWidget' => [
                'scripts' => [
                        'resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js',
diff --git a/resources/lib/jquery/jquery.appear.js b/resources/lib/jquery/jquery.appear.js
deleted file mode 100644 (file)
index 4f77886..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * jQuery.appear
- * http://code.google.com/p/jquery-appear/
- *
- * Copyright (c) 2009 Michael Hixson
- * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-*/
-(function($) {
-        
-       $.fn.appear = function(fn, options) {
-                
-               var settings = $.extend({
-                       //arbitrary data to pass to fn
-                       data: undefined,
-                       //call fn only on the first appear?
-                       one: true
-                        
-               }, options);
-                
-               return this.each(function() {
-                
-                       var t = $(this);
-                        
-                       //whether the element is currently visible
-                       t.appeared = false;
-                        
-                       if (!fn) {
-                               //trigger the custom event
-                               t.trigger('appear', settings.data);
-                               return;
-                       }
-                        
-                       var w = $(window);
-                        
-                       //fires the appear event when appropriate
-                       var check = function() {
-                               //is the element hidden?
-                               if (!t.is(':visible')) {
-                                        
-                                       //it became hidden
-                                       t.appeared = false;
-                                       return;
-                               }
-                               //is the element inside the visible window?
-                               var a = w.scrollLeft();
-                               var b = w.scrollTop();
-                               var o = t.offset();
-                               var x = o.left;
-                               var y = o.top;
-                                
-                               if (y + t.height() >= b && 
-                                               y <= b + w.height() &&
-                                               x + t.width() >= a && 
-                                               x <= a + w.width()) {
-                                       //trigger the custom event
-                                       if (!t.appeared) t.trigger('appear', settings.data);
-                                        
-                               } else {
-                                       //it scrolled out of view
-                                       t.appeared = false;
-                               }
-                       };
-                       //create a modified fn with some additional logic
-                       var modifiedFn = function() {
-                                
-                               //mark the element as visible
-                               t.appeared = true;
-                               //is this supposed to happen only once?
-                               if (settings.one) {
-                                       //remove the check
-                                       w.unbind('scroll', check);
-                                       var i = $.inArray(check, $.fn.appear.checks);
-                                       if (i >= 0) $.fn.appear.checks.splice(i, 1);
-                               }
-                               //trigger the original fn
-                               fn.apply(this, arguments);
-                       };
-                        
-                       //bind the modified fn to the element
-                       if (settings.one) t.one('appear', settings.data, modifiedFn);
-                       else t.bind('appear', settings.data, modifiedFn);
-                        
-                       //check whenever the window scrolls
-                       w.scroll(check);
-                        
-                       //check whenever the dom changes
-                       $.fn.appear.checks.push(check);
-                        
-                       //check now
-                       (check)();
-               });
-       };
-        
-       //keep a queue of appearance checks
-       $.extend($.fn.appear, {
-                
-               checks: [],
-               timeout: null,
-               //process the queue
-               checkAll: function() {
-                       var length = $.fn.appear.checks.length;
-                       if (length > 0) while (length--) ($.fn.appear.checks[length])();
-               },
-               //check the queue asynchronously
-               run: function() {
-                       if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
-                       $.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
-               }
-       });
-        
-       //run checks when these methods are called
-       $.each(['append', 'prepend', 'after', 'before', 'attr', 
-                                       'removeAttr', 'addClass', 'removeClass', 'toggleClass', 
-                                       'remove', 'css', 'show', 'hide'], function(i, n) {
-               var old = $.fn[n];
-               if (old) {
-                       $.fn[n] = function() {
-                               var r = old.apply(this, arguments);
-                               $.fn.appear.run();
-                               return r;
-                       }
-               }
-       });
-        
-})(jQuery);
\ No newline at end of file
index 6feb110..d2d8ca4 100644 (file)
@@ -1,27 +1,29 @@
 /*!
- * jQuery JavaScript Library v1.11.3
- * http://jquery.com/
+ * jQuery JavaScript Library v3.2.1
+ * https://jquery.com/
  *
  * Includes Sizzle.js
- * http://sizzlejs.com/
+ * https://sizzlejs.com/
  *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Copyright JS Foundation and other contributors
  * Released under the MIT license
- * http://jquery.org/license
+ * https://jquery.org/license
  *
- * Date: 2015-04-28T16:19Z
+ * Date: 2017-03-20T18:59Z
  */
+( function( global, factory ) {
 
-(function( global, factory ) {
+       "use strict";
 
        if ( typeof module === "object" && typeof module.exports === "object" ) {
-               // For CommonJS and CommonJS-like environments where a proper window is present,
-               // execute the factory and get jQuery
-               // For environments that do not inherently posses a window with a document
-               // (such as Node.js), expose a jQuery-making factory as module.exports
-               // This accentuates the need for the creation of a real window
+
+               // For CommonJS and CommonJS-like environments where a proper `window`
+               // is present, execute the factory and get jQuery.
+               // For environments that do not have a `window` with a `document`
+               // (such as Node.js), expose a factory as module.exports.
+               // This accentuates the need for the creation of a real `window`.
                // e.g. var jQuery = require("jquery")(window);
-               // See ticket #14549 for more info
+               // See ticket #14549 for more info.
                module.exports = global.document ?
                        factory( global, true ) :
                        function( w ) {
        }
 
 // Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
 
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
 
-var deletedIds = [];
+var document = window.document;
 
-var slice = deletedIds.slice;
+var getProto = Object.getPrototypeOf;
 
-var concat = deletedIds.concat;
+var slice = arr.slice;
 
-var push = deletedIds.push;
+var concat = arr.concat;
 
-var indexOf = deletedIds.indexOf;
+var push = arr.push;
+
+var indexOf = arr.indexOf;
 
 var class2type = {};
 
@@ -59,27 +65,46 @@ var toString = class2type.toString;
 
 var hasOwn = class2type.hasOwnProperty;
 
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
 var support = {};
 
 
 
+       function DOMEval( code, doc ) {
+               doc = doc || document;
+
+               var script = doc.createElement( "script" );
+
+               script.text = code;
+               doc.head.appendChild( script ).parentNode.removeChild( script );
+       }
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
 var
-       version = "1.11.3",
+       version = "3.2.1",
 
        // Define a local copy of jQuery
        jQuery = function( selector, context ) {
+
                // The jQuery object is actually just the init constructor 'enhanced'
                // Need init if jQuery is called (just allow error to be thrown if not included)
                return new jQuery.fn.init( selector, context );
        },
 
-       // Support: Android<4.1, IE<9
+       // Support: Android <=4.0 only
        // Make sure we trim BOM and NBSP
        rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
 
        // Matches dashed string for camelizing
        rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([\da-z])/gi,
+       rdashAlpha = /-([a-z])/g,
 
        // Used by jQuery.camelCase as callback to replace()
        fcamelCase = function( all, letter ) {
@@ -87,14 +112,12 @@ var
        };
 
 jQuery.fn = jQuery.prototype = {
+
        // The current version of jQuery being used
        jquery: version,
 
        constructor: jQuery,
 
-       // Start with an empty selector
-       selector: "",
-
        // The default length of a jQuery object is 0
        length: 0,
 
@@ -105,13 +128,14 @@ jQuery.fn = jQuery.prototype = {
        // Get the Nth element in the matched element set OR
        // Get the whole matched element set as a clean array
        get: function( num ) {
-               return num != null ?
 
-                       // Return just the one element from the set
-                       ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
 
-                       // Return all the elements in a clean array
-                       slice.call( this );
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
        },
 
        // Take an array of elements and push it onto the stack
@@ -123,23 +147,20 @@ jQuery.fn = jQuery.prototype = {
 
                // Add the old object onto the stack (as a reference)
                ret.prevObject = this;
-               ret.context = this.context;
 
                // Return the newly-formed element set
                return ret;
        },
 
        // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
+       each: function( callback ) {
+               return jQuery.each( this, callback );
        },
 
        map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
                        return callback.call( elem, i, elem );
-               }));
+               } ) );
        },
 
        slice: function() {
@@ -157,23 +178,23 @@ jQuery.fn = jQuery.prototype = {
        eq: function( i ) {
                var len = this.length,
                        j = +i + ( i < 0 ? len : 0 );
-               return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
        },
 
        end: function() {
-               return this.prevObject || this.constructor(null);
+               return this.prevObject || this.constructor();
        },
 
        // For internal use only.
        // Behaves like an Array's method, not like a jQuery method.
        push: push,
-       sort: deletedIds.sort,
-       splice: deletedIds.splice
+       sort: arr.sort,
+       splice: arr.splice
 };
 
 jQuery.extend = jQuery.fn.extend = function() {
-       var src, copyIsArray, copy, name, options, clone,
-               target = arguments[0] || {},
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
                i = 1,
                length = arguments.length,
                deep = false;
@@ -182,25 +203,27 @@ jQuery.extend = jQuery.fn.extend = function() {
        if ( typeof target === "boolean" ) {
                deep = target;
 
-               // skip the boolean and the target
+               // Skip the boolean and the target
                target = arguments[ i ] || {};
                i++;
        }
 
        // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
                target = {};
        }
 
-       // extend jQuery itself if only one argument is passed
+       // Extend jQuery itself if only one argument is passed
        if ( i === length ) {
                target = this;
                i--;
        }
 
        for ( ; i < length; i++ ) {
+
                // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
+               if ( ( options = arguments[ i ] ) != null ) {
+
                        // Extend the base object
                        for ( name in options ) {
                                src = target[ name ];
@@ -212,13 +235,15 @@ jQuery.extend = jQuery.fn.extend = function() {
                                }
 
                                // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
                                        if ( copyIsArray ) {
                                                copyIsArray = false;
-                                               clone = src && jQuery.isArray(src) ? src : [];
+                                               clone = src && Array.isArray( src ) ? src : [];
 
                                        } else {
-                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
                                        }
 
                                        // Never move original objects, clone them
@@ -236,7 +261,8 @@ jQuery.extend = jQuery.fn.extend = function() {
        return target;
 };
 
-jQuery.extend({
+jQuery.extend( {
+
        // Unique for each copy of jQuery on the page
        expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
 
@@ -249,151 +275,98 @@ jQuery.extend({
 
        noop: function() {},
 
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
        isFunction: function( obj ) {
-               return jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray || function( obj ) {
-               return jQuery.type(obj) === "array";
+               return jQuery.type( obj ) === "function";
        },
 
        isWindow: function( obj ) {
-               /* jshint eqeqeq: false */
-               return obj != null && obj == obj.window;
+               return obj != null && obj === obj.window;
        },
 
        isNumeric: function( obj ) {
-               // parseFloat NaNs numeric-cast false positives (null|true|false|"")
-               // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-               // subtraction forces infinities to NaN
-               // adding 1 corrects loss of precision from parseFloat (#15100)
-               return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
-       },
 
-       isEmptyObject: function( obj ) {
-               var name;
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
        },
 
        isPlainObject: function( obj ) {
-               var key;
+               var proto, Ctor;
 
-               // Must be an Object.
-               // Because of IE, we also have to check the presence of the constructor property.
-               // Make sure that DOM nodes and window objects don't pass through, as well
-               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
                        return false;
                }
 
-               try {
-                       // Not own constructor property must be Object
-                       if ( obj.constructor &&
-                               !hasOwn.call(obj, "constructor") &&
-                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                               return false;
-                       }
-               } catch ( e ) {
-                       // IE8,9 Will throw exceptions on certain host objects #9897
-                       return false;
-               }
+               proto = getProto( obj );
 
-               // Support: IE<9
-               // Handle iteration over inherited properties before own properties.
-               if ( support.ownLast ) {
-                       for ( key in obj ) {
-                               return hasOwn.call( obj, key );
-                       }
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
                }
 
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
-               for ( key in obj ) {}
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
 
-               return key === undefined || hasOwn.call( obj, key );
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
        },
 
        type: function( obj ) {
                if ( obj == null ) {
                        return obj + "";
                }
+
+               // Support: Android <=2.3 only (functionish RegExp)
                return typeof obj === "object" || typeof obj === "function" ?
-                       class2type[ toString.call(obj) ] || "object" :
+                       class2type[ toString.call( obj ) ] || "object" :
                        typeof obj;
        },
 
        // Evaluates a script in a global context
-       // Workarounds based on findings by Jim Driscoll
-       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-       globalEval: function( data ) {
-               if ( data && jQuery.trim( data ) ) {
-                       // We use execScript on Internet Explorer
-                       // We use an anonymous function so that context is window
-                       // rather than jQuery in Firefox
-                       ( window.execScript || function( data ) {
-                               window[ "eval" ].call( window, data );
-                       } )( data );
-               }
+       globalEval: function( code ) {
+               DOMEval( code );
        },
 
        // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
        // Microsoft forgot to hump their vendor prefix (#9572)
        camelCase: function( string ) {
                return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
        },
 
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-       },
-
-       // args is for internal usage only
-       each: function( obj, callback, args ) {
-               var value,
-                       i = 0,
-                       length = obj.length,
-                       isArray = isArraylike( obj );
-
-               if ( args ) {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.apply( obj[ i ], args );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.apply( obj[ i ], args );
+       each: function( obj, callback ) {
+               var length, i = 0;
 
-                                       if ( value === false ) {
-                                               break;
-                                       }
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
                                }
                        }
-
-               // A special, fast, case for the most common use of each
                } else {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
                                }
                        }
                }
@@ -401,7 +374,7 @@ jQuery.extend({
                return obj;
        },
 
-       // Support: Android<4.1, IE<9
+       // Support: Android <=4.0 only
        trim: function( text ) {
                return text == null ?
                        "" :
@@ -413,7 +386,7 @@ jQuery.extend({
                var ret = results || [];
 
                if ( arr != null ) {
-                       if ( isArraylike( Object(arr) ) ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
                                jQuery.merge( ret,
                                        typeof arr === "string" ?
                                        [ arr ] : arr
@@ -427,42 +400,18 @@ jQuery.extend({
        },
 
        inArray: function( elem, arr, i ) {
-               var len;
-
-               if ( arr ) {
-                       if ( indexOf ) {
-                               return indexOf.call( arr, elem, i );
-                       }
-
-                       len = arr.length;
-                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-                       for ( ; i < len; i++ ) {
-                               // Skip accessing in sparse arrays
-                               if ( i in arr && arr[ i ] === elem ) {
-                                       return i;
-                               }
-                       }
-               }
-
-               return -1;
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
        },
 
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
        merge: function( first, second ) {
                var len = +second.length,
                        j = 0,
                        i = first.length;
 
-               while ( j < len ) {
-                       first[ i++ ] = second[ j++ ];
-               }
-
-               // Support: IE<9
-               // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
-               if ( len !== len ) {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
                }
 
                first.length = i;
@@ -491,14 +440,13 @@ jQuery.extend({
 
        // arg is for internal usage only
        map: function( elems, callback, arg ) {
-               var value,
+               var length, value,
                        i = 0,
-                       length = elems.length,
-                       isArray = isArraylike( elems ),
                        ret = [];
 
                // Go through the array, translating each of the items to their new values
-               if ( isArray ) {
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
                        for ( ; i < length; i++ ) {
                                value = callback( elems[ i ], i, arg );
 
@@ -528,7 +476,7 @@ jQuery.extend({
        // Bind a function to a context, optionally partially applying any
        // arguments.
        proxy: function( fn, context ) {
-               var args, proxy, tmp;
+               var tmp, args, proxy;
 
                if ( typeof context === "string" ) {
                        tmp = fn[ context ];
@@ -554,50 +502,49 @@ jQuery.extend({
                return proxy;
        },
 
-       now: function() {
-               return +( new Date() );
-       },
+       now: Date.now,
 
        // jQuery.support is not used in Core but other projects attach their
        // properties to it so it needs to exist.
        support: support
-});
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
 
 // Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
        class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
+} );
 
-function isArraylike( obj ) {
+function isArrayLike( obj ) {
 
-       // Support: iOS 8.2 (not reproducible in simulator)
+       // Support: real iOS 8.2 only (not reproducible in simulator)
        // `in` check used to prevent JIT error (gh-2145)
        // hasOwn isn't used here due to false negatives
        // regarding Nodelist length in IE
-       var length = "length" in obj && obj.length,
+       var length = !!obj && "length" in obj && obj.length,
                type = jQuery.type( obj );
 
        if ( type === "function" || jQuery.isWindow( obj ) ) {
                return false;
        }
 
-       if ( obj.nodeType === 1 && length ) {
-               return true;
-       }
-
        return type === "array" || length === 0 ||
                typeof length === "number" && length > 0 && ( length - 1 ) in obj;
 }
 var Sizzle =
 /*!
- * Sizzle CSS Selector Engine v2.2.0-pre
- * http://sizzlejs.com/
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
  *
- * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2014-12-16
+ * Date: 2016-08-08
  */
 (function( window ) {
 
@@ -638,9 +585,6 @@ var i,
                return 0;
        },
 
-       // General-purpose constants
-       MAX_NEGATIVE = 1 << 31,
-
        // Instance methods
        hasOwn = ({}).hasOwnProperty,
        arr = [],
@@ -649,7 +593,7 @@ var i,
        push = arr.push,
        slice = arr.slice,
        // Use a stripped-down indexOf as it's faster than native
-       // http://jsperf.com/thor-indexof-vs-for/5
+       // https://jsperf.com/thor-indexof-vs-for/5
        indexOf = function( list, elem ) {
                var i = 0,
                        len = list.length;
@@ -665,25 +609,21 @@ var i,
 
        // Regular expressions
 
-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+       // http://www.w3.org/TR/css3-selectors/#whitespace
        whitespace = "[\\x20\\t\\r\\n\\f]",
-       // http://www.w3.org/TR/css3-syntax/#characters
-       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
 
-       // Loosely modeled on CSS identifier characters
-       // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
-       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = characterEncoding.replace( "w", "w#" ),
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
 
        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
                // Operator (capture 2)
                "*([*^$|!~]?=)" + whitespace +
                // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
                "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
                "*\\]",
 
-       pseudos = ":(" + characterEncoding + ")(?:\\((" +
+       pseudos = ":(" + identifier + ")(?:\\((" +
                // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
                // 1. quoted (capture 3; capture 4 or capture 5)
                "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
@@ -706,9 +646,9 @@ var i,
        ridentifier = new RegExp( "^" + identifier + "$" ),
 
        matchExpr = {
-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
                "ATTR": new RegExp( "^" + attributes ),
                "PSEUDO": new RegExp( "^" + pseudos ),
                "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
@@ -730,9 +670,9 @@ var i,
        rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
 
        rsibling = /[+~]/,
-       rescape = /'|\\/g,
 
-       // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       // CSS escapes
+       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
        runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
        funescape = function( _, escaped, escapedWhitespace ) {
                var high = "0x" + escaped - 0x10000;
@@ -748,13 +688,39 @@ var i,
                                String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
        },
 
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       },
+
        // Used for iframes
        // See setDocument()
        // Removing the function wrapper causes a "Permission Denied"
        // error in IE
        unloadHandler = function() {
                setDocument();
-       };
+       },
+
+       disabledAncestor = addCombinator(
+               function( elem ) {
+                       return elem.disabled === true && ("form" in elem || "label" in elem);
+               },
+               { dir: "parentNode", next: "legend" }
+       );
 
 // Optimize for push.apply( _, NodeList )
 try {
@@ -786,103 +752,128 @@ try {
 }
 
 function Sizzle( selector, context, results, seed ) {
-       var match, elem, m, nodeType,
-               // QSA vars
-               i, groups, old, nid, newContext, newSelector;
+       var m, i, elem, nid, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
 
-       if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-               setDocument( context );
-       }
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
 
-       context = context || document;
        results = results || [];
-       nodeType = context.nodeType;
 
+       // Return early from calls with invalid selector or context
        if ( typeof selector !== "string" || !selector ||
                nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
 
                return results;
        }
 
-       if ( !seed && documentIsHTML ) {
-
-               // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
-               if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-                       // Speed-up: Sizzle("#ID")
-                       if ( (m = match[1]) ) {
-                               if ( nodeType === 9 ) {
-                                       elem = context.getElementById( m );
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document (jQuery #6963)
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE, Opera, and Webkit return items
-                                               // by name instead of ID
-                                               if ( elem.id === m ) {
-                                                       results.push( elem );
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
                                                        return results;
                                                }
+
+                                       // Element context
                                        } else {
-                                               return results;
-                                       }
-                               } else {
-                                       // Context is not a document
-                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
-                                               contains( context, elem ) && elem.id === m ) {
-                                               results.push( elem );
-                                               return results;
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
                                        }
-                               }
 
-                       // Speed-up: Sizzle("TAG")
-                       } else if ( match[2] ) {
-                               push.apply( results, context.getElementsByTagName( selector ) );
-                               return results;
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
 
-                       // Speed-up: Sizzle(".CLASS")
-                       } else if ( (m = match[3]) && support.getElementsByClassName ) {
-                               push.apply( results, context.getElementsByClassName( m ) );
-                               return results;
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
                        }
-               }
 
-               // QSA path
-               if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-                       nid = old = expando;
-                       newContext = context;
-                       newSelector = nodeType !== 1 && selector;
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
 
-                       // qSA works strangely on Element-rooted queries
-                       // We can work around this by specifying an extra ID on the root
-                       // and working up from there (Thanks to Andrew Dupont for the technique)
-                       // IE 8 doesn't work on object elements
-                       if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                               groups = tokenize( selector );
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
 
-                               if ( (old = context.getAttribute("id")) ) {
-                                       nid = old.replace( rescape, "\\$&" );
-                               } else {
-                                       context.setAttribute( "id", nid );
-                               }
-                               nid = "[id='" + nid + "'] ";
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
 
-                               i = groups.length;
-                               while ( i-- ) {
-                                       groups[i] = nid + toSelector( groups[i] );
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rcssescape, fcssescape );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       while ( i-- ) {
+                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
                                }
-                               newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
-                               newSelector = groups.join(",");
-                       }
 
-                       if ( newSelector ) {
-                               try {
-                                       push.apply( results,
-                                               newContext.querySelectorAll( newSelector )
-                                       );
-                                       return results;
-                               } catch(qsaError) {
-                               } finally {
-                                       if ( !old ) {
-                                               context.removeAttribute("id");
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
                                        }
                                }
                        }
@@ -895,7 +886,7 @@ function Sizzle( selector, context, results, seed ) {
 
 /**
  * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
  *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
  *     deleting the oldest entry
  */
@@ -924,22 +915,22 @@ function markFunction( fn ) {
 
 /**
  * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
+ * @param {Function} fn Passed the created element and returns a boolean result
  */
 function assert( fn ) {
-       var div = document.createElement("div");
+       var el = document.createElement("fieldset");
 
        try {
-               return !!fn( div );
+               return !!fn( el );
        } catch (e) {
                return false;
        } finally {
                // Remove from its parent by default
-               if ( div.parentNode ) {
-                       div.parentNode.removeChild( div );
+               if ( el.parentNode ) {
+                       el.parentNode.removeChild( el );
                }
                // release memory in IE
-               div = null;
+               el = null;
        }
 }
 
@@ -950,7 +941,7 @@ function assert( fn ) {
  */
 function addHandle( attrs, handler ) {
        var arr = attrs.split("|"),
-               i = attrs.length;
+               i = arr.length;
 
        while ( i-- ) {
                Expr.attrHandle[ arr[i] ] = handler;
@@ -966,8 +957,7 @@ function addHandle( attrs, handler ) {
 function siblingCheck( a, b ) {
        var cur = b && a,
                diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
-                       ( ~a.sourceIndex || MAX_NEGATIVE );
+                       a.sourceIndex - b.sourceIndex;
 
        // Use IE sourceIndex if available on both nodes
        if ( diff ) {
@@ -1008,6 +998,62 @@ function createButtonPseudo( type ) {
        };
 }
 
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+       return function( elem ) {
+
+               // Only certain elements can match :enabled or :disabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+               if ( "form" in elem ) {
+
+                       // Check for inherited disabledness on relevant non-disabled elements:
+                       // * listed form-associated elements in a disabled fieldset
+                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+                       // * option elements in a disabled optgroup
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+                       // All such elements have a "form" property.
+                       if ( elem.parentNode && elem.disabled === false ) {
+
+                               // Option elements defer to a parent optgroup if present
+                               if ( "label" in elem ) {
+                                       if ( "label" in elem.parentNode ) {
+                                               return elem.parentNode.disabled === disabled;
+                                       } else {
+                                               return elem.disabled === disabled;
+                                       }
+                               }
+
+                               // Support: IE 6 - 11
+                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+                               return elem.isDisabled === disabled ||
+
+                                       // Where there is no isDisabled, check manually
+                                       /* jshint -W018 */
+                                       elem.isDisabled !== !disabled &&
+                                               disabledAncestor( elem ) === disabled;
+                       }
+
+                       return elem.disabled === disabled;
+
+               // Try to winnow out elements that can't be disabled before trusting the disabled property.
+               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+               // even exist on them, let alone have a boolean value.
+               } else if ( "label" in elem ) {
+                       return elem.disabled === disabled;
+               }
+
+               // Remaining elements are neither :enabled nor :disabled
+               return false;
+       };
+}
+
 /**
  * Returns a function to use in pseudos for positionals
  * @param {Function} fn
@@ -1060,96 +1106,119 @@ isXML = Sizzle.isXML = function( elem ) {
  * @returns {Object} Returns the current document
  */
 setDocument = Sizzle.setDocument = function( node ) {
-       var hasCompare, parent,
+       var hasCompare, subWindow,
                doc = node ? node.ownerDocument || node : preferredDoc;
 
-       // If no document and documentElement is available, return
+       // Return early if doc is invalid or already selected
        if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
                return document;
        }
 
-       // Set our document
+       // Update global variables
        document = doc;
-       docElem = doc.documentElement;
-       parent = doc.defaultView;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
 
-       // Support: IE>8
-       // If iframe document is assigned to "document" variable and if iframe has been reloaded,
-       // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
-       // IE6-8 do not support the defaultView property so parent will be undefined
-       if ( parent && parent !== parent.top ) {
-               // IE11 does not have attachEvent, so all must suffer
-               if ( parent.addEventListener ) {
-                       parent.addEventListener( "unload", unloadHandler, false );
-               } else if ( parent.attachEvent ) {
-                       parent.attachEvent( "onunload", unloadHandler );
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( preferredDoc !== document &&
+               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+               // Support: IE 11, Edge
+               if ( subWindow.addEventListener ) {
+                       subWindow.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( subWindow.attachEvent ) {
+                       subWindow.attachEvent( "onunload", unloadHandler );
                }
        }
 
-       /* Support tests
-       ---------------------------------------------------------------------- */
-       documentIsHTML = !isXML( doc );
-
        /* Attributes
        ---------------------------------------------------------------------- */
 
        // Support: IE<8
        // Verify that getAttribute really returns attributes and not properties
        // (excepting IE8 booleans)
-       support.attributes = assert(function( div ) {
-               div.className = "i";
-               return !div.getAttribute("className");
+       support.attributes = assert(function( el ) {
+               el.className = "i";
+               return !el.getAttribute("className");
        });
 
        /* getElement(s)By*
        ---------------------------------------------------------------------- */
 
        // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( div ) {
-               div.appendChild( doc.createComment("") );
-               return !div.getElementsByTagName("*").length;
+       support.getElementsByTagName = assert(function( el ) {
+               el.appendChild( document.createComment("") );
+               return !el.getElementsByTagName("*").length;
        });
 
        // Support: IE<9
-       support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
 
        // Support: IE<10
        // Check if getElementById returns elements by name
-       // The broken getElementById methods don't pick up programatically-set names,
+       // The broken getElementById methods don't pick up programmatically-set names,
        // so use a roundabout getElementsByName test
-       support.getById = assert(function( div ) {
-               docElem.appendChild( div ).id = expando;
-               return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+       support.getById = assert(function( el ) {
+               docElem.appendChild( el ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
        });
 
-       // ID find and filter
+       // ID filter and find
        if ( support.getById ) {
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-                               var m = context.getElementById( id );
-                               // Check parentNode to catch when Blackberry 4.6 returns
-                               // nodes that are no longer in the document #6963
-                               return m && m.parentNode ? [ m ] : [];
-                       }
-               };
                Expr.filter["ID"] = function( id ) {
                        var attrId = id.replace( runescape, funescape );
                        return function( elem ) {
                                return elem.getAttribute("id") === attrId;
                        };
                };
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var elem = context.getElementById( id );
+                               return elem ? [ elem ] : [];
+                       }
+               };
        } else {
-               // Support: IE6/7
-               // getElementById is not reliable as a find shortcut
-               delete Expr.find["ID"];
-
                Expr.filter["ID"] =  function( id ) {
                        var attrId = id.replace( runescape, funescape );
                        return function( elem ) {
-                               var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
                                return node && node.value === attrId;
                        };
                };
+
+               // Support: IE 6 - 7 only
+               // getElementById is not reliable as a find shortcut
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var node, i, elems,
+                                       elem = context.getElementById( id );
+
+                               if ( elem ) {
+
+                                       // Verify the id attribute
+                                       node = elem.getAttributeNode("id");
+                                       if ( node && node.value === id ) {
+                                               return [ elem ];
+                                       }
+
+                                       // Fall back on getElementsByName
+                                       elems = context.getElementsByName( id );
+                                       i = 0;
+                                       while ( (elem = elems[i++]) ) {
+                                               node = elem.getAttributeNode("id");
+                                               if ( node && node.value === id ) {
+                                                       return [ elem ];
+                                               }
+                                       }
+                               }
+
+                               return [];
+                       }
+               };
        }
 
        // Tag
@@ -1186,7 +1255,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 
        // Class
        Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-               if ( documentIsHTML ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
                        return context.getElementsByClassName( className );
                }
        };
@@ -1203,77 +1272,87 @@ setDocument = Sizzle.setDocument = function( node ) {
        // We allow this because of a bug in IE8/9 that throws an error
        // whenever `document.activeElement` is accessed on an iframe
        // So, we allow :focus to pass through QSA all the time to avoid the IE error
-       // See http://bugs.jquery.com/ticket/13378
+       // See https://bugs.jquery.com/ticket/13378
        rbuggyQSA = [];
 
-       if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
                // Build QSA regex
                // Regex strategy adopted from Diego Perini
-               assert(function( div ) {
+               assert(function( el ) {
                        // Select is set to empty string on purpose
                        // This is to test IE's treatment of not explicitly
                        // setting a boolean content attribute,
                        // since its presence should be enough
-                       // http://bugs.jquery.com/ticket/12359
-                       docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
-                               "<select id='" + expando + "-\f]' msallowcapture=''>" +
+                       // https://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
                                "<option selected=''></option></select>";
 
                        // Support: IE8, Opera 11-12.16
                        // Nothing should be selected when empty strings follow ^= or $= or *=
                        // The test attribute must be unknown in Opera but "safe" for WinRT
-                       // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-                       if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
                                rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
                        }
 
                        // Support: IE8
                        // Boolean attributes and "value" are not treated correctly
-                       if ( !div.querySelectorAll("[selected]").length ) {
+                       if ( !el.querySelectorAll("[selected]").length ) {
                                rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
                        }
 
-                       // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
-                       if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
                                rbuggyQSA.push("~=");
                        }
 
                        // Webkit/Opera - :checked should return selected option elements
                        // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
                        // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":checked").length ) {
+                       if ( !el.querySelectorAll(":checked").length ) {
                                rbuggyQSA.push(":checked");
                        }
 
                        // Support: Safari 8+, iOS 8+
                        // https://bugs.webkit.org/show_bug.cgi?id=136851
-                       // In-page `selector#id sibing-combinator selector` fails
-                       if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                       // In-page `selector#id sibling-combinator selector` fails
+                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
                                rbuggyQSA.push(".#.+[+~]");
                        }
                });
 
-               assert(function( div ) {
+               assert(function( el ) {
+                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
+                               "<select disabled='disabled'><option/></select>";
+
                        // Support: Windows 8 Native Apps
                        // The type and name attributes are restricted during .innerHTML assignment
-                       var input = doc.createElement("input");
+                       var input = document.createElement("input");
                        input.setAttribute( "type", "hidden" );
-                       div.appendChild( input ).setAttribute( "name", "D" );
+                       el.appendChild( input ).setAttribute( "name", "D" );
 
                        // Support: IE8
                        // Enforce case-sensitivity of name attribute
-                       if ( div.querySelectorAll("[name=d]").length ) {
+                       if ( el.querySelectorAll("[name=d]").length ) {
                                rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
                        }
 
                        // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
                        // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":enabled").length ) {
+                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Support: IE9-11+
+                       // IE's :disabled selector does not pick up the children of disabled fieldsets
+                       docElem.appendChild( el ).disabled = true;
+                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
                                rbuggyQSA.push( ":enabled", ":disabled" );
                        }
 
                        // Opera 10-11 does not throw on post-comma invalid pseudos
-                       div.querySelectorAll("*,:x");
+                       el.querySelectorAll("*,:x");
                        rbuggyQSA.push(",.*:");
                });
        }
@@ -1284,14 +1363,14 @@ setDocument = Sizzle.setDocument = function( node ) {
                docElem.oMatchesSelector ||
                docElem.msMatchesSelector) )) ) {
 
-               assert(function( div ) {
+               assert(function( el ) {
                        // Check to see if it's possible to do matchesSelector
                        // on a disconnected node (IE 9)
-                       support.disconnectedMatch = matches.call( div, "div" );
+                       support.disconnectedMatch = matches.call( el, "*" );
 
                        // This should fail with an exception
                        // Gecko does not error, returns false instead
-                       matches.call( div, "[s!='']:x" );
+                       matches.call( el, "[s!='']:x" );
                        rbuggyMatches.push( "!=", pseudos );
                });
        }
@@ -1304,7 +1383,7 @@ setDocument = Sizzle.setDocument = function( node ) {
        hasCompare = rnative.test( docElem.compareDocumentPosition );
 
        // Element contains another
-       // Purposefully does not implement inclusive descendent
+       // Purposefully self-exclusive
        // As in, an element does not contain itself
        contains = hasCompare || rnative.test( docElem.contains ) ?
                function( a, b ) {
@@ -1358,10 +1437,10 @@ setDocument = Sizzle.setDocument = function( node ) {
                        (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
 
                        // Choose the first element that is related to our preferred document
-                       if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
                                return -1;
                        }
-                       if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
                                return 1;
                        }
 
@@ -1389,8 +1468,8 @@ setDocument = Sizzle.setDocument = function( node ) {
 
                // Parentless nodes are either documents or disconnected
                if ( !aup || !bup ) {
-                       return a === doc ? -1 :
-                               b === doc ? 1 :
+                       return a === document ? -1 :
+                               b === document ? 1 :
                                aup ? -1 :
                                bup ? 1 :
                                sortInput ?
@@ -1427,7 +1506,7 @@ setDocument = Sizzle.setDocument = function( node ) {
                        0;
        };
 
-       return doc;
+       return document;
 };
 
 Sizzle.matches = function( expr, elements ) {
@@ -1444,6 +1523,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
        expr = expr.replace( rattributeQuotes, "='$1']" );
 
        if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
                ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
                ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
 
@@ -1492,6 +1572,10 @@ Sizzle.attr = function( elem, name ) {
                                null;
 };
 
+Sizzle.escape = function( sel ) {
+       return (sel + "").replace( rcssescape, fcssescape );
+};
+
 Sizzle.error = function( msg ) {
        throw new Error( "Syntax error, unrecognized expression: " + msg );
 };
@@ -1717,11 +1801,12 @@ Expr = Sizzle.selectors = {
                                } :
 
                                function( elem, context, xml ) {
-                                       var cache, outerCache, node, diff, nodeIndex, start,
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
                                                dir = simple !== forward ? "nextSibling" : "previousSibling",
                                                parent = elem.parentNode,
                                                name = ofType && elem.nodeName.toLowerCase(),
-                                               useCache = !xml && !ofType;
+                                               useCache = !xml && !ofType,
+                                               diff = false;
 
                                        if ( parent ) {
 
@@ -1730,7 +1815,10 @@ Expr = Sizzle.selectors = {
                                                        while ( dir ) {
                                                                node = elem;
                                                                while ( (node = node[ dir ]) ) {
-                                                                       if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
                                                                                return false;
                                                                        }
                                                                }
@@ -1744,11 +1832,21 @@ Expr = Sizzle.selectors = {
 
                                                // non-xml :nth-child(...) stores cache data on `parent`
                                                if ( forward && useCache ) {
+
                                                        // Seek `elem` from a previously-cached index
-                                                       outerCache = parent[ expando ] || (parent[ expando ] = {});
-                                                       cache = outerCache[ type ] || [];
-                                                       nodeIndex = cache[0] === dirruns && cache[1];
-                                                       diff = cache[0] === dirruns && cache[2];
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
                                                        node = nodeIndex && parent.childNodes[ nodeIndex ];
 
                                                        while ( (node = ++nodeIndex && node && node[ dir ] ||
@@ -1758,29 +1856,55 @@ Expr = Sizzle.selectors = {
 
                                                                // When found, cache indexes on `parent` and break
                                                                if ( node.nodeType === 1 && ++diff && node === elem ) {
-                                                                       outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
                                                                        break;
                                                                }
                                                        }
 
-                                               // Use previously-cached element index if available
-                                               } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
-                                                       diff = cache[1];
-
-                                               // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
                                                } else {
-                                                       // Use the same loop as above to seek `elem` from the start
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
 
-                                                               if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-                                                                       // Cache the index of each encountered element
-                                                                       if ( useCache ) {
-                                                                               (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
-                                                                       }
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
 
-                                                                       if ( node === elem ) {
-                                                                               break;
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
                                                                        }
                                                                }
                                                        }
@@ -1919,13 +2043,8 @@ Expr = Sizzle.selectors = {
                },
 
                // Boolean properties
-               "enabled": function( elem ) {
-                       return elem.disabled === false;
-               },
-
-               "disabled": function( elem ) {
-                       return elem.disabled === true;
-               },
+               "enabled": createDisabledPseudo( false ),
+               "disabled": createDisabledPseudo( true ),
 
                "checked": function( elem ) {
                        // In CSS3, :checked should return both checked and selected elements
@@ -2127,7 +2246,9 @@ function toSelector( tokens ) {
 
 function addCombinator( matcher, combinator, base ) {
        var dir = combinator.dir,
-               checkNonElements = base && dir === "parentNode",
+               skip = combinator.next,
+               key = skip || dir,
+               checkNonElements = base && key === "parentNode",
                doneName = done++;
 
        return combinator.first ?
@@ -2138,14 +2259,15 @@ function addCombinator( matcher, combinator, base ) {
                                        return matcher( elem, context, xml );
                                }
                        }
+                       return false;
                } :
 
                // Check against all ancestor/preceding elements
                function( elem, context, xml ) {
-                       var oldCache, outerCache,
+                       var oldCache, uniqueCache, outerCache,
                                newCache = [ dirruns, doneName ];
 
-                       // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
                        if ( xml ) {
                                while ( (elem = elem[ dir ]) ) {
                                        if ( elem.nodeType === 1 || checkNonElements ) {
@@ -2158,14 +2280,21 @@ function addCombinator( matcher, combinator, base ) {
                                while ( (elem = elem[ dir ]) ) {
                                        if ( elem.nodeType === 1 || checkNonElements ) {
                                                outerCache = elem[ expando ] || (elem[ expando ] = {});
-                                               if ( (oldCache = outerCache[ dir ]) &&
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
+                                                       elem = elem[ dir ] || elem;
+                                               } else if ( (oldCache = uniqueCache[ key ]) &&
                                                        oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
 
                                                        // Assign to newCache so results back-propagate to previous elements
                                                        return (newCache[ 2 ] = oldCache[ 2 ]);
                                                } else {
                                                        // Reuse newcache so results back-propagate to previous elements
-                                                       outerCache[ dir ] = newCache;
+                                                       uniqueCache[ key ] = newCache;
 
                                                        // A match means we're done; a fail means we have to keep checking
                                                        if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
@@ -2175,6 +2304,7 @@ function addCombinator( matcher, combinator, base ) {
                                        }
                                }
                        }
+                       return false;
                };
 }
 
@@ -2390,18 +2520,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
                                len = elems.length;
 
                        if ( outermost ) {
-                               outermostContext = context !== document && context;
+                               outermostContext = context === document || context || outermost;
                        }
 
                        // Add elements passing elementMatchers directly to results
-                       // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
                        // Support: IE<9, Safari
                        // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
                        for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
                                if ( byElement && elem ) {
                                        j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
                                        while ( (matcher = elementMatchers[j++]) ) {
-                                               if ( matcher( elem, context, xml ) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
                                                        results.push( elem );
                                                        break;
                                                }
@@ -2425,8 +2558,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
                                }
                        }
 
-                       // Apply set filters to unmatched elements
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
                        matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
                        if ( bySet && i !== matchedCount ) {
                                j = 0;
                                while ( (matcher = setMatchers[j++]) ) {
@@ -2518,14 +2660,14 @@ select = Sizzle.select = function( selector, context, results, seed ) {
 
        results = results || [];
 
-       // Try to minimize operations if there is no seed and only one group
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
        if ( match.length === 1 ) {
 
-               // Take a shortcut and set the context if the root selector is an ID
+               // Reduce context if the leading compound selector is an ID
                tokens = match[0] = match[0].slice( 0 );
                if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                               support.getById && context.nodeType === 9 && documentIsHTML &&
-                               Expr.relative[ tokens[1].type ] ) {
+                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
 
                        context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
                        if ( !context ) {
@@ -2576,7 +2718,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
                context,
                !documentIsHTML,
                results,
-               rsibling.test( selector ) && testContext( context.parentNode ) || context
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
        );
        return results;
 };
@@ -2595,17 +2737,17 @@ setDocument();
 
 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
 // Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
+support.sortDetached = assert(function( el ) {
        // Should return 1, but returns 4 (following)
-       return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
 });
 
 // Support: IE<8
 // Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
-       div.innerHTML = "<a href='#'></a>";
-       return div.firstChild.getAttribute("href") === "#" ;
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+       el.innerHTML = "<a href='#'></a>";
+       return el.firstChild.getAttribute("href") === "#" ;
 }) ) {
        addHandle( "type|href|height|width", function( elem, name, isXML ) {
                if ( !isXML ) {
@@ -2616,10 +2758,10 @@ if ( !assert(function( div ) {
 
 // Support: IE<9
 // Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
-       div.innerHTML = "<input/>";
-       div.firstChild.setAttribute( "value", "" );
-       return div.firstChild.getAttribute( "value" ) === "";
+if ( !support.attributes || !assert(function( el ) {
+       el.innerHTML = "<input/>";
+       el.firstChild.setAttribute( "value", "" );
+       return el.firstChild.getAttribute( "value" ) === "";
 }) ) {
        addHandle( "value", function( elem, name, isXML ) {
                if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
@@ -2630,8 +2772,8 @@ if ( !support.attributes || !assert(function( div ) {
 
 // Support: IE<9
 // Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
-       return div.getAttribute("disabled") == null;
+if ( !assert(function( el ) {
+       return el.getAttribute("disabled") == null;
 }) ) {
        addHandle( booleans, function( elem, name, isXML ) {
                var val;
@@ -2652,50 +2794,94 @@ return Sizzle;
 
 jQuery.find = Sizzle;
 jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
 jQuery.text = Sizzle.getText;
 jQuery.isXMLDoc = Sizzle.isXML;
 jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
 
 
 
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
 
+var dir = function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
 
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
 
-var risSimple = /^.[^:#\[\.,]*$/;
 
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep( elements, function( elem, i ) {
-                       /* jshint -W018 */
-                       return !!qualifier.call( elem, i, elem ) !== not;
-               });
+var siblings = function( n, elem ) {
+       var matched = [];
 
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
        }
 
-       if ( qualifier.nodeType ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( elem === qualifier ) !== not;
-               });
+       return matched;
+};
 
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
        }
 
-       if ( typeof qualifier === "string" ) {
-               if ( risSimple.test( qualifier ) ) {
-                       return jQuery.filter( qualifier, elements, not );
-               }
+       // Single element
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+       }
+
+       // Arraylike of elements (jQuery, arguments, Array)
+       if ( typeof qualifier !== "string" ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               } );
+       }
 
-               qualifier = jQuery.filter( qualifier, elements );
+       // Simple selector that can be filtered directly, removing non-Elements
+       if ( risSimple.test( qualifier ) ) {
+               return jQuery.filter( qualifier, elements, not );
        }
 
+       // Complex selector, compare the two sets, removing non-Elements
+       qualifier = jQuery.filter( qualifier, elements );
        return jQuery.grep( elements, function( elem ) {
-               return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
-       });
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+       } );
 }
 
 jQuery.filter = function( expr, elems, not ) {
@@ -2705,44 +2891,44 @@ jQuery.filter = function( expr, elems, not ) {
                expr = ":not(" + expr + ")";
        }
 
-       return elems.length === 1 && elem.nodeType === 1 ?
-               jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-               jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-                       return elem.nodeType === 1;
-               }));
+       if ( elems.length === 1 && elem.nodeType === 1 ) {
+               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+       }
+
+       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+               return elem.nodeType === 1;
+       } ) );
 };
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        find: function( selector ) {
-               var i,
-                       ret = [],
-                       self = this,
-                       len = self.length;
+               var i, ret,
+                       len = this.length,
+                       self = this;
 
                if ( typeof selector !== "string" ) {
-                       return this.pushStack( jQuery( selector ).filter(function() {
+                       return this.pushStack( jQuery( selector ).filter( function() {
                                for ( i = 0; i < len; i++ ) {
                                        if ( jQuery.contains( self[ i ], this ) ) {
                                                return true;
                                        }
                                }
-                       }) );
+                       } ) );
                }
 
+               ret = this.pushStack( [] );
+
                for ( i = 0; i < len; i++ ) {
                        jQuery.find( selector, self[ i ], ret );
                }
 
-               // Needed because $( selector, context ) becomes $( context ).find( selector )
-               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-               ret.selector = this.selector ? this.selector + " " + selector : selector;
-               return ret;
+               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
        },
        filter: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], false) );
+               return this.pushStack( winnow( this, selector || [], false ) );
        },
        not: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], true) );
+               return this.pushStack( winnow( this, selector || [], true ) );
        },
        is: function( selector ) {
                return !!winnow(
@@ -2756,7 +2942,7 @@ jQuery.fn.extend({
                        false
                ).length;
        }
-});
+} );
 
 
 // Initialize a jQuery object
@@ -2765,15 +2951,13 @@ jQuery.fn.extend({
 // A central reference to the root jQuery(document)
 var rootjQuery,
 
-       // Use the correct document accordingly with window argument (sandbox)
-       document = window.document,
-
        // A simple way to check for HTML strings
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
        // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
 
-       init = jQuery.fn.init = function( selector, context ) {
+       init = jQuery.fn.init = function( selector, context, root ) {
                var match, elem;
 
                // HANDLE: $(""), $(null), $(undefined), $(false)
@@ -2781,9 +2965,16 @@ var rootjQuery,
                        return this;
                }
 
+               // Method init() accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
                // Handle HTML strings
                if ( typeof selector === "string" ) {
-                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                       if ( selector[ 0 ] === "<" &&
+                               selector[ selector.length - 1 ] === ">" &&
+                               selector.length >= 3 ) {
+
                                // Assume that strings that start and end with <> are HTML and skip the regex check
                                match = [ null, selector, null ];
 
@@ -2792,23 +2983,24 @@ var rootjQuery,
                        }
 
                        // Match html or make sure no context is specified for #id
-                       if ( match && (match[1] || !context) ) {
+                       if ( match && ( match[ 1 ] || !context ) ) {
 
                                // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? context[0] : context;
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
 
-                                       // scripts is true for back-compat
+                                       // Option to run scripts is true for back-compat
                                        // Intentionally let the error be thrown if parseHTML is not present
                                        jQuery.merge( this, jQuery.parseHTML(
-                                               match[1],
+                                               match[ 1 ],
                                                context && context.nodeType ? context.ownerDocument || context : document,
                                                true
                                        ) );
 
                                        // HANDLE: $(html, props)
-                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
                                                for ( match in context ) {
+
                                                        // Properties of context are called as methods if possible
                                                        if ( jQuery.isFunction( this[ match ] ) ) {
                                                                this[ match ]( context[ match ] );
@@ -2824,30 +3016,20 @@ var rootjQuery,
 
                                // HANDLE: $(#id)
                                } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
+                                       elem = document.getElementById( match[ 2 ] );
 
-                                               // Otherwise, we inject the element directly into the jQuery object
+                                       if ( elem ) {
+
+                                               // Inject the element directly into the jQuery object
+                                               this[ 0 ] = elem;
                                                this.length = 1;
-                                               this[0] = elem;
                                        }
-
-                                       this.context = document;
-                                       this.selector = selector;
                                        return this;
                                }
 
                        // HANDLE: $(expr, $(...))
                        } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector );
+                               return ( context || root ).find( selector );
 
                        // HANDLE: $(expr, context)
                        // (which is just equivalent to: $(context).find(expr)
@@ -2857,24 +3039,20 @@ var rootjQuery,
 
                // HANDLE: $(DOMElement)
                } else if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
+                       this[ 0 ] = selector;
                        this.length = 1;
                        return this;
 
                // HANDLE: $(function)
                // Shortcut for document ready
                } else if ( jQuery.isFunction( selector ) ) {
-                       return typeof rootjQuery.ready !== "undefined" ?
-                               rootjQuery.ready( selector ) :
+                       return root.ready !== undefined ?
+                               root.ready( selector ) :
+
                                // Execute immediately if ready is not present
                                selector( jQuery );
                }
 
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
                return jQuery.makeArray( selector, this );
        };
 
@@ -2886,7 +3064,8 @@ rootjQuery = jQuery( document );
 
 
 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-       // methods guaranteed to produce a unique set when starting from a unique set
+
+       // Methods guaranteed to produce a unique set when starting from a unique set
        guaranteedUnique = {
                children: true,
                contents: true,
@@ -2894,46 +3073,19 @@ var rparentsprev = /^(?:parents|prev(?:Until|All))/,
                prev: true
        };
 
-jQuery.extend({
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       cur = elem[ dir ];
-
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
-                       }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
-
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
-                       }
-               }
-
-               return r;
-       }
-});
-
-jQuery.fn.extend({
+jQuery.fn.extend( {
        has: function( target ) {
-               var i,
-                       targets = jQuery( target, this ),
-                       len = targets.length;
+               var targets = jQuery( target, this ),
+                       l = targets.length;
 
-               return this.filter(function() {
-                       for ( i = 0; i < len; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
+               return this.filter( function() {
+                       var i = 0;
+                       for ( ; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
                                        return true;
                                }
                        }
-               });
+               } );
        },
 
        closest: function( selectors, context ) {
@@ -2941,52 +3093,55 @@ jQuery.fn.extend({
                        i = 0,
                        l = this.length,
                        matched = [],
-                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
+                       targets = typeof selectors !== "string" && jQuery( selectors );
 
-               for ( ; i < l; i++ ) {
-                       for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
-                               // Always skip document fragments
-                               if ( cur.nodeType < 11 && (pos ?
-                                       pos.index(cur) > -1 :
+               // Positional selectors never match, since there's no _selection_ context
+               if ( !rneedsContext.test( selectors ) ) {
+                       for ( ; i < l; i++ ) {
+                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
 
-                                       // Don't pass non-elements to Sizzle
-                                       cur.nodeType === 1 &&
-                                               jQuery.find.matchesSelector(cur, selectors)) ) {
+                                       // Always skip document fragments
+                                       if ( cur.nodeType < 11 && ( targets ?
+                                               targets.index( cur ) > -1 :
 
-                                       matched.push( cur );
-                                       break;
+                                               // Don't pass non-elements to Sizzle
+                                               cur.nodeType === 1 &&
+                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                               matched.push( cur );
+                                               break;
+                                       }
                                }
                        }
                }
 
-               return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
        },
 
-       // Determine the position of an element within
-       // the matched set of elements
+       // Determine the position of an element within the set
        index: function( elem ) {
 
                // No argument, return index in parent
                if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
                }
 
-               // index in selector
+               // Index in selector
                if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
+                       return indexOf.call( jQuery( elem ), this[ 0 ] );
                }
 
                // Locate the position of the desired element
-               return jQuery.inArray(
+               return indexOf.call( this,
+
                        // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[0] : elem, this );
+                       elem.jquery ? elem[ 0 ] : elem
+               );
        },
 
        add: function( selector, context ) {
                return this.pushStack(
-                       jQuery.unique(
+                       jQuery.uniqueSort(
                                jQuery.merge( this.get(), jQuery( selector, context ) )
                        )
                );
@@ -2994,29 +3149,26 @@ jQuery.fn.extend({
 
        addBack: function( selector ) {
                return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter(selector)
+                       this.prevObject : this.prevObject.filter( selector )
                );
        }
-});
+} );
 
 function sibling( cur, dir ) {
-       do {
-               cur = cur[ dir ];
-       } while ( cur && cur.nodeType !== 1 );
-
+       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
        return cur;
 }
 
-jQuery.each({
+jQuery.each( {
        parent: function( elem ) {
                var parent = elem.parentNode;
                return parent && parent.nodeType !== 11 ? parent : null;
        },
        parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
+               return dir( elem, "parentNode" );
        },
        parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
+               return dir( elem, "parentNode", until );
        },
        next: function( elem ) {
                return sibling( elem, "nextSibling" );
@@ -3025,68 +3177,75 @@ jQuery.each({
                return sibling( elem, "previousSibling" );
        },
        nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
+               return dir( elem, "nextSibling" );
        },
        prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
+               return dir( elem, "previousSibling" );
        },
        nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
+               return dir( elem, "nextSibling", until );
        },
        prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
+               return dir( elem, "previousSibling", until );
        },
        siblings: function( elem ) {
-               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
        },
        children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
+               return siblings( elem.firstChild );
        },
        contents: function( elem ) {
-               return jQuery.nodeName( elem, "iframe" ) ?
-                       elem.contentDocument || elem.contentWindow.document :
-                       jQuery.merge( [], elem.childNodes );
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
        }
 }, function( name, fn ) {
        jQuery.fn[ name ] = function( until, selector ) {
-               var ret = jQuery.map( this, fn, until );
+               var matched = jQuery.map( this, fn, until );
 
                if ( name.slice( -5 ) !== "Until" ) {
                        selector = until;
                }
 
                if ( selector && typeof selector === "string" ) {
-                       ret = jQuery.filter( selector, ret );
+                       matched = jQuery.filter( selector, matched );
                }
 
                if ( this.length > 1 ) {
+
                        // Remove duplicates
                        if ( !guaranteedUnique[ name ] ) {
-                               ret = jQuery.unique( ret );
+                               jQuery.uniqueSort( matched );
                        }
 
                        // Reverse order for parents* and prev-derivatives
                        if ( rparentsprev.test( name ) ) {
-                               ret = ret.reverse();
+                               matched.reverse();
                        }
                }
 
-               return this.pushStack( ret );
+               return this.pushStack( matched );
        };
-});
-var rnotwhite = (/\S+/g);
-
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
 
 
-// String to Object options format cache
-var optionsCache = {};
 
-// Convert String-formatted options into Object-formatted ones and store in cache
+// Convert String-formatted options into Object-formatted ones
 function createOptions( options ) {
-       var object = optionsCache[ options ] = {};
-       jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+       var object = {};
+       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
                object[ flag ] = true;
-       });
+       } );
        return object;
 }
 
@@ -3117,156 +3276,186 @@ jQuery.Callbacks = function( options ) {
        // Convert options from String-formatted to Object-formatted if needed
        // (we check in cache first)
        options = typeof options === "string" ?
-               ( optionsCache[ options ] || createOptions( options ) ) :
+               createOptions( options ) :
                jQuery.extend( {}, options );
 
        var // Flag to know if list is currently firing
                firing,
-               // Last fire value (for non-forgettable lists)
+
+               // Last fire value for non-forgettable lists
                memory,
+
                // Flag to know if list was already fired
                fired,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if needed)
-               firingIndex,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
+
+               // Flag to prevent firing
+               locked,
+
                // Actual callback list
                list = [],
-               // Stack of fire calls for repeatable lists
-               stack = !options.once && [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
                // Fire callbacks
-               fire = function( data ) {
-                       memory = options.memory && data;
-                       fired = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       firing = true;
-                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
-                                       memory = false; // To prevent further calls using add
-                                       break;
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = locked || options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
                                }
                        }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
                        firing = false;
-                       if ( list ) {
-                               if ( stack ) {
-                                       if ( stack.length ) {
-                                               fire( stack.shift() );
-                                       }
-                               } else if ( memory ) {
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
                                        list = [];
+
+                               // Otherwise, this object is spent
                                } else {
-                                       self.disable();
+                                       list = "";
                                }
                        }
                },
+
                // Actual Callbacks object
                self = {
+
                        // Add a callback or a collection of callbacks to the list
                        add: function() {
                                if ( list ) {
-                                       // First, we save the current length
-                                       var start = list.length;
-                                       (function add( args ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
                                                jQuery.each( args, function( _, arg ) {
-                                                       var type = jQuery.type( arg );
-                                                       if ( type === "function" ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
                                                                if ( !options.unique || !self.has( arg ) ) {
                                                                        list.push( arg );
                                                                }
-                                                       } else if ( arg && arg.length && type !== "string" ) {
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
                                                                // Inspect recursively
                                                                add( arg );
                                                        }
-                                               });
-                                       })( arguments );
-                                       // Do we need to add the callbacks to the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away
-                                       } else if ( memory ) {
-                                               firingStart = start;
-                                               fire( memory );
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
                                        }
                                }
                                return this;
                        },
+
                        // Remove a callback from the list
                        remove: function() {
-                               if ( list ) {
-                                       jQuery.each( arguments, function( _, arg ) {
-                                               var index;
-                                               while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                                       list.splice( index, 1 );
-                                                       // Handle firing indexes
-                                                       if ( firing ) {
-                                                               if ( index <= firingLength ) {
-                                                                       firingLength--;
-                                                               }
-                                                               if ( index <= firingIndex ) {
-                                                                       firingIndex--;
-                                                               }
-                                                       }
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
                                                }
-                                       });
-                               }
+                                       }
+                               } );
                                return this;
                        },
+
                        // Check if a given callback is in the list.
                        // If no argument is given, return whether or not list has callbacks attached.
                        has: function( fn ) {
-                               return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
                        },
+
                        // Remove all callbacks from the list
                        empty: function() {
-                               list = [];
-                               firingLength = 0;
+                               if ( list ) {
+                                       list = [];
+                               }
                                return this;
                        },
-                       // Have the list do nothing anymore
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
                        disable: function() {
-                               list = stack = memory = undefined;
+                               locked = queue = [];
+                               list = memory = "";
                                return this;
                        },
-                       // Is it disabled?
                        disabled: function() {
                                return !list;
                        },
-                       // Lock the list in its current state
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
                        lock: function() {
-                               stack = undefined;
-                               if ( !memory ) {
-                                       self.disable();
+                               locked = queue = [];
+                               if ( !memory && !firing ) {
+                                       list = memory = "";
                                }
                                return this;
                        },
-                       // Is it locked?
                        locked: function() {
-                               return !stack;
+                               return !!locked;
                        },
+
                        // Call all callbacks with the given context and arguments
                        fireWith: function( context, args ) {
-                               if ( list && ( !fired || stack ) ) {
+                               if ( !locked ) {
                                        args = args || [];
                                        args = [ context, args.slice ? args.slice() : args ];
-                                       if ( firing ) {
-                                               stack.push( args );
-                                       } else {
-                                               fire( args );
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
                                        }
                                }
                                return this;
                        },
+
                        // Call all the callbacks with the given arguments
                        fire: function() {
                                self.fireWith( this, arguments );
                                return this;
                        },
+
                        // To know if the callbacks have already been called at least once
                        fired: function() {
                                return !!fired;
@@ -3277,14 +3466,59 @@ jQuery.Callbacks = function( options ) {
 };
 
 
-jQuery.extend({
+function Identity( v ) {
+       return v;
+}
+function Thrower( ex ) {
+       throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+       var method;
+
+       try {
+
+               // Check for promise aspect first to privilege synchronous behavior
+               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+                       method.call( value ).done( resolve ).fail( reject );
+
+               // Other thenables
+               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+                       method.call( value, resolve, reject );
+
+               // Other non-thenables
+               } else {
+
+                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+                       // * false: [ value ].slice( 0 ) => resolve( value )
+                       // * true: [ value ].slice( 1 ) => resolve()
+                       resolve.apply( undefined, [ value ].slice( noValue ) );
+               }
+
+       // For Promises/A+, convert exceptions into rejections
+       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+       // Deferred#then to conditionally suppress rejection.
+       } catch ( value ) {
+
+               // Support: Android 4.0 only
+               // Strict mode functions invoked without .call/.apply get global-object context
+               reject.apply( undefined, [ value ] );
+       }
+}
+
+jQuery.extend( {
 
        Deferred: function( func ) {
                var tuples = [
-                               // action, add listener, listener list, final state
-                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
-                               [ "notify", "progress", jQuery.Callbacks("memory") ]
+
+                               // action, add listener, callbacks,
+                               // ... .then handlers, argument index, [final state]
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                                       jQuery.Callbacks( "memory" ), 2 ],
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
                        ],
                        state = "pending",
                        promise = {
@@ -3295,27 +3529,206 @@ jQuery.extend({
                                        deferred.done( arguments ).fail( arguments );
                                        return this;
                                },
-                               then: function( /* fnDone, fnFail, fnProgress */ ) {
+                               "catch": function( fn ) {
+                                       return promise.then( null, fn );
+                               },
+
+                               // Keep pipe for back-compat
+                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
                                        var fns = arguments;
-                                       return jQuery.Deferred(function( newDefer ) {
+
+                                       return jQuery.Deferred( function( newDefer ) {
                                                jQuery.each( tuples, function( i, tuple ) {
-                                                       var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
-                                                       deferred[ tuple[1] ](function() {
+
+                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
+                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                                                       deferred[ tuple[ 1 ] ]( function() {
                                                                var returned = fn && fn.apply( this, arguments );
                                                                if ( returned && jQuery.isFunction( returned.promise ) ) {
                                                                        returned.promise()
+                                                                               .progress( newDefer.notify )
                                                                                .done( newDefer.resolve )
-                                                                               .fail( newDefer.reject )
-                                                                               .progress( newDefer.notify );
+                                                                               .fail( newDefer.reject );
                                                                } else {
-                                                                       newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
                                                                }
-                                                       });
-                                               });
+                                                       } );
+                                               } );
                                                fns = null;
-                                       }).promise();
+                                       } ).promise();
                                },
+                               then: function( onFulfilled, onRejected, onProgress ) {
+                                       var maxDepth = 0;
+                                       function resolve( depth, deferred, handler, special ) {
+                                               return function() {
+                                                       var that = this,
+                                                               args = arguments,
+                                                               mightThrow = function() {
+                                                                       var returned, then;
+
+                                                                       // Support: Promises/A+ section 2.3.3.3.3
+                                                                       // https://promisesaplus.com/#point-59
+                                                                       // Ignore double-resolution attempts
+                                                                       if ( depth < maxDepth ) {
+                                                                               return;
+                                                                       }
+
+                                                                       returned = handler.apply( that, args );
+
+                                                                       // Support: Promises/A+ section 2.3.1
+                                                                       // https://promisesaplus.com/#point-48
+                                                                       if ( returned === deferred.promise() ) {
+                                                                               throw new TypeError( "Thenable self-resolution" );
+                                                                       }
+
+                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
+                                                                       // https://promisesaplus.com/#point-54
+                                                                       // https://promisesaplus.com/#point-75
+                                                                       // Retrieve `then` only once
+                                                                       then = returned &&
+
+                                                                               // Support: Promises/A+ section 2.3.4
+                                                                               // https://promisesaplus.com/#point-64
+                                                                               // Only check objects and functions for thenability
+                                                                               ( typeof returned === "object" ||
+                                                                                       typeof returned === "function" ) &&
+                                                                               returned.then;
+
+                                                                       // Handle a returned thenable
+                                                                       if ( jQuery.isFunction( then ) ) {
+
+                                                                               // Special processors (notify) just wait for resolution
+                                                                               if ( special ) {
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special )
+                                                                                       );
+
+                                                                               // Normal processors (resolve) also hook into progress
+                                                                               } else {
+
+                                                                                       // ...and disregard older resolution values
+                                                                                       maxDepth++;
+
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special ),
+                                                                                               resolve( maxDepth, deferred, Identity,
+                                                                                                       deferred.notifyWith )
+                                                                                       );
+                                                                               }
+
+                                                                       // Handle all other returned values
+                                                                       } else {
+
+                                                                               // Only substitute handlers pass on context
+                                                                               // and multiple values (non-spec behavior)
+                                                                               if ( handler !== Identity ) {
+                                                                                       that = undefined;
+                                                                                       args = [ returned ];
+                                                                               }
+
+                                                                               // Process the value(s)
+                                                                               // Default process is resolve
+                                                                               ( special || deferred.resolveWith )( that, args );
+                                                                       }
+                                                               },
+
+                                                               // Only normal processors (resolve) catch and reject exceptions
+                                                               process = special ?
+                                                                       mightThrow :
+                                                                       function() {
+                                                                               try {
+                                                                                       mightThrow();
+                                                                               } catch ( e ) {
+
+                                                                                       if ( jQuery.Deferred.exceptionHook ) {
+                                                                                               jQuery.Deferred.exceptionHook( e,
+                                                                                                       process.stackTrace );
+                                                                                       }
+
+                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
+                                                                                       // https://promisesaplus.com/#point-61
+                                                                                       // Ignore post-resolution exceptions
+                                                                                       if ( depth + 1 >= maxDepth ) {
+
+                                                                                               // Only substitute handlers pass on context
+                                                                                               // and multiple values (non-spec behavior)
+                                                                                               if ( handler !== Thrower ) {
+                                                                                                       that = undefined;
+                                                                                                       args = [ e ];
+                                                                                               }
+
+                                                                                               deferred.rejectWith( that, args );
+                                                                                       }
+                                                                               }
+                                                                       };
+
+                                                       // Support: Promises/A+ section 2.3.3.3.1
+                                                       // https://promisesaplus.com/#point-57
+                                                       // Re-resolve promises immediately to dodge false rejection from
+                                                       // subsequent errors
+                                                       if ( depth ) {
+                                                               process();
+                                                       } else {
+
+                                                               // Call an optional hook to record the stack, in case of exception
+                                                               // since it's otherwise lost when execution goes async
+                                                               if ( jQuery.Deferred.getStackHook ) {
+                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
+                                                               }
+                                                               window.setTimeout( process );
+                                                       }
+                                               };
+                                       }
+
+                                       return jQuery.Deferred( function( newDefer ) {
+
+                                               // progress_handlers.add( ... )
+                                               tuples[ 0 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onProgress ) ?
+                                                                       onProgress :
+                                                                       Identity,
+                                                               newDefer.notifyWith
+                                                       )
+                                               );
+
+                                               // fulfilled_handlers.add( ... )
+                                               tuples[ 1 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onFulfilled ) ?
+                                                                       onFulfilled :
+                                                                       Identity
+                                                       )
+                                               );
+
+                                               // rejected_handlers.add( ... )
+                                               tuples[ 2 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onRejected ) ?
+                                                                       onRejected :
+                                                                       Thrower
+                                                       )
+                                               );
+                                       } ).promise();
+                               },
+
                                // Get a promise for this deferred
                                // If obj is provided, the promise aspect is added to the object
                                promise: function( obj ) {
@@ -3324,34 +3737,53 @@ jQuery.extend({
                        },
                        deferred = {};
 
-               // Keep pipe for back-compat
-               promise.pipe = promise.then;
-
                // Add list-specific methods
                jQuery.each( tuples, function( i, tuple ) {
                        var list = tuple[ 2 ],
-                               stateString = tuple[ 3 ];
+                               stateString = tuple[ 5 ];
 
-                       // promise[ done | fail | progress ] = list.add
-                       promise[ tuple[1] ] = list.add;
+                       // promise.progress = list.add
+                       // promise.done = list.add
+                       // promise.fail = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
 
                        // Handle state
                        if ( stateString ) {
-                               list.add(function() {
-                                       // state = [ resolved | rejected ]
-                                       state = stateString;
+                               list.add(
+                                       function() {
+
+                                               // state = "resolved" (i.e., fulfilled)
+                                               // state = "rejected"
+                                               state = stateString;
+                                       },
 
-                               // [ reject_list | resolve_list ].disable; progress_list.lock
-                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+                                       // rejected_callbacks.disable
+                                       // fulfilled_callbacks.disable
+                                       tuples[ 3 - i ][ 2 ].disable,
+
+                                       // progress_callbacks.lock
+                                       tuples[ 0 ][ 2 ].lock
+                               );
                        }
 
-                       // deferred[ resolve | reject | notify ]
-                       deferred[ tuple[0] ] = function() {
-                               deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+                       // progress_handlers.fire
+                       // fulfilled_handlers.fire
+                       // rejected_handlers.fire
+                       list.add( tuple[ 3 ].fire );
+
+                       // deferred.notify = function() { deferred.notifyWith(...) }
+                       // deferred.resolve = function() { deferred.resolveWith(...) }
+                       // deferred.reject = function() { deferred.rejectWith(...) }
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
                                return this;
                        };
-                       deferred[ tuple[0] + "With" ] = list.fireWith;
-               });
+
+                       // deferred.notifyWith = list.fireWith
+                       // deferred.resolveWith = list.fireWith
+                       // deferred.rejectWith = list.fireWith
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
 
                // Make the deferred a promise
                promise.promise( deferred );
@@ -3366,71 +3798,101 @@ jQuery.extend({
        },
 
        // Deferred helper
-       when: function( subordinate /* , ..., subordinateN */ ) {
-               var i = 0,
-                       resolveValues = slice.call( arguments ),
-                       length = resolveValues.length,
+       when: function( singleValue ) {
+               var
 
-                       // the count of uncompleted subordinates
-                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+                       // count of uncompleted subordinates
+                       remaining = arguments.length,
 
-                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
-                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+                       // count of unprocessed arguments
+                       i = remaining,
 
-                       // Update function for both resolve and progress values
-                       updateFunc = function( i, contexts, values ) {
-                               return function( value ) {
-                                       contexts[ i ] = this;
-                                       values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-                                       if ( values === progressValues ) {
-                                               deferred.notifyWith( contexts, values );
+                       // subordinate fulfillment data
+                       resolveContexts = Array( i ),
+                       resolveValues = slice.call( arguments ),
+
+                       // the master Deferred
+                       master = jQuery.Deferred(),
 
-                                       } else if ( !(--remaining) ) {
-                                               deferred.resolveWith( contexts, values );
+                       // subordinate callback factory
+                       updateFunc = function( i ) {
+                               return function( value ) {
+                                       resolveContexts[ i ] = this;
+                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( !( --remaining ) ) {
+                                               master.resolveWith( resolveContexts, resolveValues );
                                        }
                                };
-                       },
+                       };
 
-                       progressValues, progressContexts, resolveContexts;
+               // Single- and empty arguments are adopted like Promise.resolve
+               if ( remaining <= 1 ) {
+                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+                               !remaining );
 
-               // add listeners to Deferred subordinates; treat others as resolved
-               if ( length > 1 ) {
-                       progressValues = new Array( length );
-                       progressContexts = new Array( length );
-                       resolveContexts = new Array( length );
-                       for ( ; i < length; i++ ) {
-                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-                                       resolveValues[ i ].promise()
-                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
-                                               .fail( deferred.reject )
-                                               .progress( updateFunc( i, progressContexts, progressValues ) );
-                               } else {
-                                       --remaining;
-                               }
+                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
+                       if ( master.state() === "pending" ||
+                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+                               return master.then();
                        }
                }
 
-               // if we're not waiting on anything, resolve the master
-               if ( !remaining ) {
-                       deferred.resolveWith( resolveContexts, resolveValues );
+               // Multiple arguments are aggregated like Promise.all array elements
+               while ( i-- ) {
+                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
                }
 
-               return deferred.promise();
+               return master.promise();
        }
-});
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+       // Support: IE 8 - 9 only
+       // Console exists when dev tools are open, which can happen at any time
+       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+       }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+       window.setTimeout( function() {
+               throw error;
+       } );
+};
+
+
 
 
 // The deferred used on DOM ready
-var readyList;
+var readyList = jQuery.Deferred();
 
 jQuery.fn.ready = function( fn ) {
-       // Add the callback
-       jQuery.ready.promise().done( fn );
+
+       readyList
+               .then( fn )
+
+               // Wrap jQuery.readyException in a function so that the lookup
+               // happens at the time of error handling instead of callback
+               // registration.
+               .catch( function( error ) {
+                       jQuery.readyException( error );
+               } );
 
        return this;
 };
 
-jQuery.extend({
+jQuery.extend( {
+
        // Is the DOM ready to be used? Set to true once it occurs.
        isReady: false,
 
@@ -3438,15 +3900,6 @@ jQuery.extend({
        // the ready event fires. See #6781
        readyWait: 1,
 
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
-
        // Handle when the DOM is ready
        ready: function( wait ) {
 
@@ -3455,11 +3908,6 @@ jQuery.extend({
                        return;
                }
 
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( !document.body ) {
-                       return setTimeout( jQuery.ready );
-               }
-
                // Remember that the DOM is ready
                jQuery.isReady = true;
 
@@ -3470,486 +3918,381 @@ jQuery.extend({
 
                // If there are functions bound, to execute
                readyList.resolveWith( document, [ jQuery ] );
-
-               // Trigger any bound ready events
-               if ( jQuery.fn.triggerHandler ) {
-                       jQuery( document ).triggerHandler( "ready" );
-                       jQuery( document ).off( "ready" );
-               }
        }
-});
+} );
 
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
-       if ( document.addEventListener ) {
-               document.removeEventListener( "DOMContentLoaded", completed, false );
-               window.removeEventListener( "load", completed, false );
-
-       } else {
-               document.detachEvent( "onreadystatechange", completed );
-               window.detachEvent( "onload", completed );
-       }
-}
+jQuery.ready.then = readyList.then;
 
-/**
- * The ready event handler and self cleanup method
- */
+// The ready event handler and self cleanup method
 function completed() {
-       // readyState === "complete" is good enough for us to call the dom ready in oldIE
-       if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
-               detach();
-               jQuery.ready();
-       }
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
 }
 
-jQuery.ready.promise = function( obj ) {
-       if ( !readyList ) {
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
 
-               readyList = jQuery.Deferred();
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
 
-               // Catch cases where $(document).ready() is called after the browser event has already occurred.
-               // we once tried to use readyState "interactive" here, but it caused issues like the one
-               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                       setTimeout( jQuery.ready );
+} else {
 
-               // Standards-based browsers support DOMContentLoaded
-               } else if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", completed, false );
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
 
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", completed, false );
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
 
-               // If IE event model is used
-               } else {
-                       // Ensure firing before onload, maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", completed );
 
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", completed );
 
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var top = false;
 
-                       try {
-                               top = window.frameElement == null && document.documentElement;
-                       } catch(e) {}
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               len = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
 
-                       if ( top && top.doScroll ) {
-                               (function doScrollCheck() {
-                                       if ( !jQuery.isReady ) {
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
 
-                                               try {
-                                                       // Use the trick by Diego Perini
-                                                       // http://javascript.nwbox.com/IEContentLoaded/
-                                                       top.doScroll("left");
-                                               } catch(e) {
-                                                       return setTimeout( doScrollCheck, 50 );
-                                               }
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
 
-                                               // detach all dom ready events
-                                               detach();
+               if ( bulk ) {
 
-                                               // and execute any waiting functions
-                                               jQuery.ready();
-                                       }
-                               })();
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < len; i++ ) {
+                               fn(
+                                       elems[ i ], key, raw ?
+                                       value :
+                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
                        }
                }
        }
-       return readyList.promise( obj );
-};
 
+       if ( chainable ) {
+               return elems;
+       }
 
-var strundefined = typeof undefined;
+       // Gets
+       if ( bulk ) {
+               return fn.call( elems );
+       }
 
+       return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+       // Accepts only:
+       //  - Node
+       //    - Node.ELEMENT_NODE
+       //    - Node.DOCUMENT_NODE
+       //  - Object
+       //    - Any
+       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
 
 
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
-       break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
-       // Minified: var a,b,c,d
-       var val, div, body, container;
 
-       body = document.getElementsByTagName( "body" )[ 0 ];
-       if ( !body || !body.style ) {
-               // Return for frameset docs that don't have a body
-               return;
-       }
 
-       // Setup
-       div = document.createElement( "div" );
-       container = document.createElement( "div" );
-       container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-       body.appendChild( container ).appendChild( div );
+function Data() {
+       this.expando = jQuery.expando + Data.uid++;
+}
 
-       if ( typeof div.style.zoom !== strundefined ) {
-               // Support: IE<8
-               // Check if natively block-level elements act like inline-block
-               // elements when setting their display to 'inline' and giving
-               // them layout
-               div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+Data.uid = 1;
 
-               support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
-               if ( val ) {
-                       // Prevent IE 6 from affecting layout for positioned elements #11048
-                       // Prevent IE from shrinking the body in IE 7 mode #12869
-                       // Support: IE<8
-                       body.style.zoom = 1;
-               }
-       }
+Data.prototype = {
 
-       body.removeChild( container );
-});
+       cache: function( owner ) {
 
+               // Check if the owner object already has a cache
+               var value = owner[ this.expando ];
 
+               // If not, create one
+               if ( !value ) {
+                       value = {};
 
+                       // We can accept data for non-element nodes in modern browsers,
+                       // but we should not, see #8335.
+                       // Always return an empty object.
+                       if ( acceptData( owner ) ) {
 
-(function() {
-       var div = document.createElement( "div" );
+                               // If it is a node unlikely to be stringify-ed or looped over
+                               // use plain assignment
+                               if ( owner.nodeType ) {
+                                       owner[ this.expando ] = value;
 
-       // Execute the test only if not already executed in another module.
-       if (support.deleteExpando == null) {
-               // Support: IE<9
-               support.deleteExpando = true;
-               try {
-                       delete div.test;
-               } catch( e ) {
-                       support.deleteExpando = false;
+                               // Otherwise secure it in a non-enumerable property
+                               // configurable must be true to allow the property to be
+                               // deleted when data is removed
+                               } else {
+                                       Object.defineProperty( owner, this.expando, {
+                                               value: value,
+                                               configurable: true
+                                       } );
+                               }
+                       }
                }
-       }
-
-       // Null elements to avoid leaks in IE.
-       div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
-       var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
-               nodeType = +elem.nodeType || 1;
-
-       // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
-       return nodeType !== 1 && nodeType !== 9 ?
-               false :
-
-               // Nodes accept data unless otherwise specified; rejection can be conditional
-               !noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-       rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
 
-               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-               data = elem.getAttribute( name );
+               return value;
+       },
+       set: function( owner, data, value ) {
+               var prop,
+                       cache = this.cache( owner );
 
+               // Handle: [ owner, key, value ] args
+               // Always use camelCase key (gh-2257)
                if ( typeof data === "string" ) {
-                       try {
-                               data = data === "true" ? true :
-                                       data === "false" ? false :
-                                       data === "null" ? null :
-                                       // Only convert to a number if it doesn't change the string
-                                       +data + "" === data ? +data :
-                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                       data;
-                       } catch( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       jQuery.data( elem, key, data );
+                       cache[ jQuery.camelCase( data ) ] = value;
 
+               // Handle: [ owner, { properties } ] args
                } else {
-                       data = undefined;
+
+                       // Copy the properties one-by-one to the cache object
+                       for ( prop in data ) {
+                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+                       }
                }
-       }
+               return cache;
+       },
+       get: function( owner, key ) {
+               return key === undefined ?
+                       this.cache( owner ) :
 
-       return data;
-}
+                       // Always use camelCase key (gh-2257)
+                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+       },
+       access: function( owner, key, value ) {
 
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-       var name;
-       for ( name in obj ) {
+               // In cases where either:
+               //
+               //   1. No key was specified
+               //   2. A string key was specified, but no value provided
+               //
+               // Take the "read" path and allow the get method to determine
+               // which value to return, respectively either:
+               //
+               //   1. The entire cache object
+               //   2. The data stored at the key
+               //
+               if ( key === undefined ||
+                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
 
-               // if the public data object is empty, the private is still empty
-               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                       continue;
-               }
-               if ( name !== "toJSON" ) {
-                       return false;
+                       return this.get( owner, key );
                }
-       }
-
-       return true;
-}
 
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
-       }
+               // When the key is not a string, or both a key and value
+               // are specified, set or extend (existing objects) with either:
+               //
+               //   1. An object of properties
+               //   2. A key and value
+               //
+               this.set( owner, key, value );
 
-       var ret, thisCache,
-               internalKey = jQuery.expando,
+               // Since the "set" path can have two possible entry points
+               // return the expected data based on which path was taken[*]
+               return value !== undefined ? value : key;
+       },
+       remove: function( owner, key ) {
+               var i,
+                       cache = owner[ this.expando ];
 
-               // We have to handle DOM nodes and JS objects differently because IE6-7
-               // can't GC object references properly across the DOM-JS boundary
-               isNode = elem.nodeType,
+               if ( cache === undefined ) {
+                       return;
+               }
 
-               // Only DOM nodes need the global jQuery cache; JS object data is
-               // attached directly to the object so GC can occur automatically
-               cache = isNode ? jQuery.cache : elem,
+               if ( key !== undefined ) {
 
-               // Only defining an ID for JS objects if its cache already exists allows
-               // the code to shortcut on the same path as a DOM node with no cache
-               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+                       // Support array or space separated string of keys
+                       if ( Array.isArray( key ) ) {
 
-       // Avoid doing any more work than we need to when trying to get data on an
-       // object that has no data at all
-       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
-               return;
-       }
+                               // If key is an array of keys...
+                               // We always set camelCase keys, so remove that.
+                               key = key.map( jQuery.camelCase );
+                       } else {
+                               key = jQuery.camelCase( key );
 
-       if ( !id ) {
-               // Only DOM nodes need a new unique ID for each element since their data
-               // ends up in the global cache
-               if ( isNode ) {
-                       id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
-               } else {
-                       id = internalKey;
-               }
-       }
+                               // If a key with the spaces exists, use it.
+                               // Otherwise, create an array by matching non-whitespace
+                               key = key in cache ?
+                                       [ key ] :
+                                       ( key.match( rnothtmlwhite ) || [] );
+                       }
 
-       if ( !cache[ id ] ) {
-               // Avoid exposing jQuery metadata on plain JS objects when the object
-               // is serialized using JSON.stringify
-               cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
-       }
+                       i = key.length;
 
-       // An object can be passed to jQuery.data instead of a key/value pair; this gets
-       // shallow copied over onto the existing cache
-       if ( typeof name === "object" || typeof name === "function" ) {
-               if ( pvt ) {
-                       cache[ id ] = jQuery.extend( cache[ id ], name );
-               } else {
-                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                       while ( i-- ) {
+                               delete cache[ key[ i ] ];
+                       }
                }
-       }
 
-       thisCache = cache[ id ];
+               // Remove the expando if there's no more data
+               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
 
-       // jQuery data() is stored in a separate object inside the object's internal data
-       // cache in order to avoid key collisions between internal data and user-defined
-       // data.
-       if ( !pvt ) {
-               if ( !thisCache.data ) {
-                       thisCache.data = {};
+                       // Support: Chrome <=35 - 45
+                       // Webkit & Blink performance suffers when deleting properties
+                       // from DOM nodes, so set to undefined instead
+                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+                       if ( owner.nodeType ) {
+                               owner[ this.expando ] = undefined;
+                       } else {
+                               delete owner[ this.expando ];
+                       }
                }
-
-               thisCache = thisCache.data;
-       }
-
-       if ( data !== undefined ) {
-               thisCache[ jQuery.camelCase( name ) ] = data;
+       },
+       hasData: function( owner ) {
+               var cache = owner[ this.expando ];
+               return cache !== undefined && !jQuery.isEmptyObject( cache );
        }
+};
+var dataPriv = new Data();
 
-       // Check for both converted-to-camel and non-converted data property names
-       // If a data property was specified
-       if ( typeof name === "string" ) {
+var dataUser = new Data();
 
-               // First Try to find as-is property data
-               ret = thisCache[ name ];
 
-               // Test for null|undefined property data
-               if ( ret == null ) {
 
-                       // Try to find the camelCased property
-                       ret = thisCache[ jQuery.camelCase( name ) ];
-               }
-       } else {
-               ret = thisCache;
-       }
+//     Implementation Summary
+//
+//     1. Enforce API surface and semantic compatibility with 1.9.x branch
+//     2. Improve the module's maintainability by reducing the storage
+//             paths to a single mechanism.
+//     3. Use the same single mechanism to support "private" and "user" data.
+//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//     5. Avoid exposing implementation details on user objects (eg. expando properties)
+//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
 
-       return ret;
-}
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /[A-Z]/g;
 
-function internalRemoveData( elem, name, pvt ) {
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
+function getData( data ) {
+       if ( data === "true" ) {
+               return true;
        }
 
-       var thisCache, i,
-               isNode = elem.nodeType,
-
-               // See jQuery.data for more information
-               cache = isNode ? jQuery.cache : elem,
-               id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-       // If there is already no cache entry for this object, there is no
-       // purpose in continuing
-       if ( !cache[ id ] ) {
-               return;
+       if ( data === "false" ) {
+               return false;
        }
 
-       if ( name ) {
-
-               thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-               if ( thisCache ) {
-
-                       // Support array or space separated string names for data keys
-                       if ( !jQuery.isArray( name ) ) {
-
-                               // try the string as a key before any manipulation
-                               if ( name in thisCache ) {
-                                       name = [ name ];
-                               } else {
-
-                                       // split the camel cased version by spaces unless a key with the spaces exists
-                                       name = jQuery.camelCase( name );
-                                       if ( name in thisCache ) {
-                                               name = [ name ];
-                                       } else {
-                                               name = name.split(" ");
-                                       }
-                               }
-                       } else {
-                               // If "name" is an array of keys...
-                               // When data is initially created, via ("key", "val") signature,
-                               // keys will be converted to camelCase.
-                               // Since there is no way to tell _how_ a key was added, remove
-                               // both plain key and camelCase key. #12786
-                               // This will only penalize the array argument path.
-                               name = name.concat( jQuery.map( name, jQuery.camelCase ) );
-                       }
+       if ( data === "null" ) {
+               return null;
+       }
 
-                       i = name.length;
-                       while ( i-- ) {
-                               delete thisCache[ name[i] ];
-                       }
+       // Only convert to a number if it doesn't change the string
+       if ( data === +data + "" ) {
+               return +data;
+       }
 
-                       // If there is no data left in the cache, we want to continue
-                       // and let the cache object itself get destroyed
-                       if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
-                               return;
-                       }
-               }
+       if ( rbrace.test( data ) ) {
+               return JSON.parse( data );
        }
 
-       // See jQuery.data for more information
-       if ( !pvt ) {
-               delete cache[ id ].data;
+       return data;
+}
 
-               // Don't destroy the parent cache unless the internal data object
-               // had been the only thing left in it
-               if ( !isEmptyDataObject( cache[ id ] ) ) {
-                       return;
-               }
-       }
+function dataAttr( elem, key, data ) {
+       var name;
 
-       // Destroy the cache
-       if ( isNode ) {
-               jQuery.cleanData( [ elem ], true );
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+               data = elem.getAttribute( name );
 
-       // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-       /* jshint eqeqeq: false */
-       } else if ( support.deleteExpando || cache != cache.window ) {
-               /* jshint eqeqeq: true */
-               delete cache[ id ];
+               if ( typeof data === "string" ) {
+                       try {
+                               data = getData( data );
+                       } catch ( e ) {}
 
-       // When all else fails, null
-       } else {
-               cache[ id ] = null;
+                       // Make sure we set the data so it isn't changed later
+                       dataUser.set( elem, key, data );
+               } else {
+                       data = undefined;
+               }
        }
+       return data;
 }
 
-jQuery.extend({
-       cache: {},
-
-       // The following elements (space-suffixed to avoid Object.prototype collisions)
-       // throw uncatchable exceptions if you attempt to set expando properties
-       noData: {
-               "applet ": true,
-               "embed ": true,
-               // ...but Flash objects (which have this classid) *can* handle expandos
-               "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-       },
-
+jQuery.extend( {
        hasData: function( elem ) {
-               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-               return !!elem && !isEmptyDataObject( elem );
+               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
        },
 
        data: function( elem, name, data ) {
-               return internalData( elem, name, data );
+               return dataUser.access( elem, name, data );
        },
 
        removeData: function( elem, name ) {
-               return internalRemoveData( elem, name );
+               dataUser.remove( elem, name );
        },
 
-       // For internal use only.
+       // TODO: Now that all calls to _data and _removeData have been replaced
+       // with direct calls to dataPriv methods, these can be deprecated.
        _data: function( elem, name, data ) {
-               return internalData( elem, name, data, true );
+               return dataPriv.access( elem, name, data );
        },
 
        _removeData: function( elem, name ) {
-               return internalRemoveData( elem, name, true );
+               dataPriv.remove( elem, name );
        }
-});
+} );
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        data: function( key, value ) {
                var i, name, data,
-                       elem = this[0],
+                       elem = this[ 0 ],
                        attrs = elem && elem.attributes;
 
-               // Special expections of .data basically thwart jQuery.access,
-               // so implement the relevant behavior ourselves
-
                // Gets all values
                if ( key === undefined ) {
                        if ( this.length ) {
-                               data = jQuery.data( elem );
+                               data = dataUser.get( elem );
 
-                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
                                        i = attrs.length;
                                        while ( i-- ) {
 
-                                               // Support: IE11+
+                                               // Support: IE 11 only
                                                // The attrs elements can be null (#14894)
                                                if ( attrs[ i ] ) {
                                                        name = attrs[ i ].name;
                                                        if ( name.indexOf( "data-" ) === 0 ) {
-                                                               name = jQuery.camelCase( name.slice(5) );
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
                                                                dataAttr( elem, name, data[ name ] );
                                                        }
                                                }
                                        }
-                                       jQuery._data( elem, "parsedAttrs", true );
+                                       dataPriv.set( elem, "hasDataAttrs", true );
                                }
                        }
 
@@ -3958,43 +4301,68 @@ jQuery.fn.extend({
 
                // Sets multiple values
                if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
+                       return this.each( function() {
+                               dataUser.set( this, key );
+                       } );
                }
 
-               return arguments.length > 1 ?
+               return access( this, function( value ) {
+                       var data;
+
+                       // The calling jQuery object (element matches) is not empty
+                       // (and therefore has an element appears at this[ 0 ]) and the
+                       // `value` parameter was not undefined. An empty jQuery object
+                       // will result in `undefined` for elem = this[ 0 ] which will
+                       // throw an exception if an attempt to read a data cache is made.
+                       if ( elem && value === undefined ) {
+
+                               // Attempt to get data from the cache
+                               // The key will always be camelCased in Data
+                               data = dataUser.get( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // Attempt to "discover" the data in
+                               // HTML5 custom data-* attrs
+                               data = dataAttr( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // We tried really hard, but the data doesn't exist.
+                               return;
+                       }
 
-                       // Sets one value
-                       this.each(function() {
-                               jQuery.data( this, key, value );
-                       }) :
+                       // Set the data...
+                       this.each( function() {
 
-                       // Gets one value
-                       // Try to fetch any internally stored data first
-                       elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
+                               // We always store the camelCased key
+                               dataUser.set( this, key, value );
+                       } );
+               }, null, value, arguments.length > 1, null, true );
        },
 
        removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
+               return this.each( function() {
+                       dataUser.remove( this, key );
+               } );
        }
-});
+} );
 
 
-jQuery.extend({
+jQuery.extend( {
        queue: function( elem, type, data ) {
                var queue;
 
                if ( elem ) {
                        type = ( type || "fx" ) + "queue";
-                       queue = jQuery._data( elem, type );
+                       queue = dataPriv.get( elem, type );
 
                        // Speed up dequeue by getting out quickly if this is just a lookup
                        if ( data ) {
-                               if ( !queue || jQuery.isArray(data) ) {
-                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               if ( !queue || Array.isArray( data ) ) {
+                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
                                } else {
                                        queue.push( data );
                                }
@@ -4028,7 +4396,7 @@ jQuery.extend({
                                queue.unshift( "inprogress" );
                        }
 
-                       // clear up the last queue stop function
+                       // Clear up the last queue stop function
                        delete hooks.stop;
                        fn.call( elem, next, hooks );
                }
@@ -4038,19 +4406,18 @@ jQuery.extend({
                }
        },
 
-       // not intended for public consumption - generates a queueHooks object, or returns the current one
+       // Not public - generate a queueHooks object, or return the current one
        _queueHooks: function( elem, type ) {
                var key = type + "queueHooks";
-               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-                       empty: jQuery.Callbacks("once memory").add(function() {
-                               jQuery._removeData( elem, type + "queue" );
-                               jQuery._removeData( elem, key );
-                       })
-               });
+               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               dataPriv.remove( elem, [ type + "queue", key ] );
+                       } )
+               } );
        }
-});
+} );
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        queue: function( type, data ) {
                var setter = 2;
 
@@ -4061,30 +4428,31 @@ jQuery.fn.extend({
                }
 
                if ( arguments.length < setter ) {
-                       return jQuery.queue( this[0], type );
+                       return jQuery.queue( this[ 0 ], type );
                }
 
                return data === undefined ?
                        this :
-                       this.each(function() {
+                       this.each( function() {
                                var queue = jQuery.queue( this, type, data );
 
-                               // ensure a hooks for this queue
+                               // Ensure a hooks for this queue
                                jQuery._queueHooks( this, type );
 
-                               if ( type === "fx" && queue[0] !== "inprogress" ) {
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
                                        jQuery.dequeue( this, type );
                                }
-                       });
+                       } );
        },
        dequeue: function( type ) {
-               return this.each(function() {
+               return this.each( function() {
                        jQuery.dequeue( this, type );
-               });
+               } );
        },
        clearQueue: function( type ) {
                return this.queue( type || "fx", [] );
        },
+
        // Get a promise resolved when queues of a certain type
        // are emptied (fx is the type by default)
        promise: function( type, obj ) {
@@ -4106,7 +4474,7 @@ jQuery.fn.extend({
                type = type || "fx";
 
                while ( i-- ) {
-                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
                        if ( tmp && tmp.empty ) {
                                count++;
                                tmp.empty.add( resolve );
@@ -4115,199 +4483,500 @@ jQuery.fn.extend({
                resolve();
                return defer.promise( obj );
        }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
 
 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
 
-var isHidden = function( elem, el ) {
-               // isHidden might be called from jQuery#filter function;
+var isHiddenWithinTree = function( elem, el ) {
+
+               // isHiddenWithinTree might be called from jQuery#filter function;
                // in that case, element will be second argument
                elem = el || elem;
-               return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-       };
-
-
 
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
-       var i = 0,
-               length = elems.length,
-               bulk = key == null;
+               // Inline style trumps all
+               return elem.style.display === "none" ||
+                       elem.style.display === "" &&
 
-       // Sets many values
-       if ( jQuery.type( key ) === "object" ) {
-               chainable = true;
-               for ( i in key ) {
-                       jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
-               }
+                       // Otherwise, check computed style
+                       // Support: Firefox <=43 - 45
+                       // Disconnected elements can have computed display: none, so first confirm that elem is
+                       // in the document.
+                       jQuery.contains( elem.ownerDocument, elem ) &&
 
-       // Sets one value
-       } else if ( value !== undefined ) {
-               chainable = true;
+                       jQuery.css( elem, "display" ) === "none";
+       };
 
-               if ( !jQuery.isFunction( value ) ) {
-                       raw = true;
-               }
+var swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
 
-               if ( bulk ) {
-                       // Bulk operations run against the entire set
-                       if ( raw ) {
-                               fn.call( elems, value );
-                               fn = null;
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
 
-                       // ...except when executing function values
-                       } else {
-                               bulk = fn;
-                               fn = function( elem, key, value ) {
-                                       return bulk.call( jQuery( elem ), value );
-                               };
-                       }
-               }
+       ret = callback.apply( elem, args || [] );
 
-               if ( fn ) {
-                       for ( ; i < length; i++ ) {
-                               fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
-                       }
-               }
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
        }
 
-       return chainable ?
-               elems :
-
-               // Gets
-               bulk ?
-                       fn.call( elems ) :
-                       length ? fn( elems[0], key ) : emptyGet;
+       return ret;
 };
-var rcheckableType = (/^(?:checkbox|radio)$/i);
 
 
 
-(function() {
-       // Minified: var a,b,c
-       var input = document.createElement( "input" ),
-               div = document.createElement( "div" ),
-               fragment = document.createDocumentFragment();
-
-       // Setup
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
 
-       // IE strips leading whitespace when .innerHTML is used
-       support.leadingWhitespace = div.firstChild.nodeType === 3;
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() {
+                               return tween.cur();
+                       } :
+                       function() {
+                               return jQuery.css( elem, prop, "" );
+                       },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
 
-       // Make sure that tbody elements aren't automatically inserted
-       // IE will insert them into empty tables
-       support.tbody = !div.getElementsByTagName( "tbody" ).length;
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
 
-       // Make sure that link elements get serialized correctly by innerHTML
-       // This requires a wrapper element in IE
-       support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
 
-       // Makes sure cloning an html5 element does not cause problems
-       // Where outerHTML is undefined, this still works
-       support.html5Clone =
-               document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
 
-       // Check if a disconnected checkbox will retain its checked
-       // value of true after appended to the DOM (IE6/7)
-       input.type = "checkbox";
-       input.checked = true;
-       fragment.appendChild( input );
-       support.appendChecked = input.checked;
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
 
-       // Make sure textarea (and checkbox) defaultValue is properly cloned
-       // Support: IE6-IE11+
-       div.innerHTML = "<textarea>x</textarea>";
-       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
 
-       // #11217 - WebKit loses check when the name is after the checked attribute
-       fragment.appendChild( div );
-       div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
+               do {
 
-       // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
-       // old WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
 
-       // Support: IE<9
-       // Opera does not clone events (and typeof div.attachEvent === undefined).
-       // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
-       support.noCloneEvent = true;
-       if ( div.attachEvent ) {
-               div.attachEvent( "onclick", function() {
-                       support.noCloneEvent = false;
-               });
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
 
-               div.cloneNode( true ).click();
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
        }
 
-       // Execute the test only if not already executed in another module.
-       if (support.deleteExpando == null) {
-               // Support: IE<9
-               support.deleteExpando = true;
-               try {
-                       delete div.test;
-               } catch( e ) {
-                       support.deleteExpando = false;
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
                }
        }
-})();
+       return adjusted;
+}
 
 
-(function() {
-       var i, eventName,
-               div = document.createElement( "div" );
+var defaultDisplayMap = {};
 
-       // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
-       for ( i in { submit: true, change: true, focusin: true }) {
-               eventName = "on" + i;
+function getDefaultDisplay( elem ) {
+       var temp,
+               doc = elem.ownerDocument,
+               nodeName = elem.nodeName,
+               display = defaultDisplayMap[ nodeName ];
 
-               if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
-                       // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
-                       div.setAttribute( eventName, "t" );
-                       support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
-               }
+       if ( display ) {
+               return display;
        }
 
-       // Null elements to avoid leaks in IE.
-       div = null;
-})();
+       temp = doc.body.appendChild( doc.createElement( nodeName ) );
+       display = jQuery.css( temp, "display" );
 
+       temp.parentNode.removeChild( temp );
 
-var rformElems = /^(?:input|select|textarea)$/i,
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
-       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-       rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+       if ( display === "none" ) {
+               display = "block";
+       }
+       defaultDisplayMap[ nodeName ] = display;
 
-function returnTrue() {
-       return true;
+       return display;
 }
 
-function returnFalse() {
-       return false;
-}
+function showHide( elements, show ) {
+       var display, elem,
+               values = [],
+               index = 0,
+               length = elements.length;
 
-function safeActiveElement() {
-       try {
-               return document.activeElement;
-       } catch ( err ) { }
-}
+       // Determine new display value for elements that need to change
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
 
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+                       // check is required in this first loop unless we have a nonempty display value (either
+                       // inline or about-to-be-restored)
+                       if ( display === "none" ) {
+                               values[ index ] = dataPriv.get( elem, "display" ) || null;
+                               if ( !values[ index ] ) {
+                                       elem.style.display = "";
+                               }
+                       }
+                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+                               values[ index ] = getDefaultDisplay( elem );
+                       }
+               } else {
+                       if ( display !== "none" ) {
+                               values[ index ] = "none";
+
+                               // Remember what we're overwriting
+                               dataPriv.set( elem, "display", display );
+                       }
+               }
+       }
+
+       // Set the display of the elements in a second loop to avoid constant reflow
+       for ( index = 0; index < length; index++ ) {
+               if ( values[ index ] != null ) {
+                       elements[ index ].style.display = values[ index ];
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend( {
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHiddenWithinTree( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+       // Support: IE <=9 only
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+       thead: [ 1, "<table>", "</table>" ],
+       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+       // Support: IE <=9 - 11 only
+       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+       var ret;
+
+       if ( typeof context.getElementsByTagName !== "undefined" ) {
+               ret = context.getElementsByTagName( tag || "*" );
+
+       } else if ( typeof context.querySelectorAll !== "undefined" ) {
+               ret = context.querySelectorAll( tag || "*" );
+
+       } else {
+               ret = [];
+       }
+
+       if ( tag === undefined || tag && nodeName( context, tag ) ) {
+               return jQuery.merge( [ context ], ret );
+       }
+
+       return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               dataPriv.set(
+                       elems[ i ],
+                       "globalEval",
+                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var elem, tmp, tag, wrap, contains, j,
+               fragment = context.createDocumentFragment(),
+               nodes = [],
+               i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Remember the top-level container
+                               tmp = fragment.firstChild;
+
+                               // Ensure the created nodes are orphaned (#12392)
+                               tmp.textContent = "";
+                       }
+               }
+       }
+
+       // Remove wrapper from fragment
+       fragment.textContent = "";
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( fragment.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       return fragment;
+}
+
+
+( function() {
+       var fragment = document.createDocumentFragment(),
+               div = fragment.appendChild( document.createElement( "div" ) ),
+               input = document.createElement( "input" );
+
+       // Support: Android 4.0 - 4.3 only
+       // Check state lost if the name is set (#11217)
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Android <=4.1 only
+       // Older WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE <=11 only
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
 
        global: {},
 
        add: function( elem, types, handler, data, selector ) {
-               var tmp, events, t, handleObjIn,
-                       special, eventHandle, handleObj,
-                       handlers, type, namespaces, origType,
-                       elemData = jQuery._data( elem );
+
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.get( elem );
 
                // Don't attach events to noData or text/comment nodes (but allow plain objects)
                if ( !elemData ) {
@@ -4321,34 +4990,38 @@ jQuery.event = {
                        selector = handleObjIn.selector;
                }
 
+               // Ensure that invalid selectors throw exceptions at attach time
+               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+               if ( selector ) {
+                       jQuery.find.matchesSelector( documentElement, selector );
+               }
+
                // Make sure that the handler has a unique ID, used to find/remove it later
                if ( !handler.guid ) {
                        handler.guid = jQuery.guid++;
                }
 
                // Init the element's event structure and main handler, if this is the first
-               if ( !(events = elemData.events) ) {
+               if ( !( events = elemData.events ) ) {
                        events = elemData.events = {};
                }
-               if ( !(eventHandle = elemData.handle) ) {
+               if ( !( eventHandle = elemData.handle ) ) {
                        eventHandle = elemData.handle = function( e ) {
+
                                // Discard the second event of a jQuery.event.trigger() and
                                // when an event is called after a page has unloaded
-                               return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
-                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                       undefined;
+                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
                        };
-                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                       eventHandle.elem = elem;
                }
 
                // Handle multiple events separated by a space
-               types = ( types || "" ).match( rnotwhite ) || [ "" ];
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
                t = types.length;
                while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
 
                        // There *must* be a type, no attaching namespace-only handlers
                        if ( !type ) {
@@ -4365,7 +5038,7 @@ jQuery.event = {
                        special = jQuery.event.special[ type ] || {};
 
                        // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend({
+                       handleObj = jQuery.extend( {
                                type: type,
                                origType: origType,
                                data: data,
@@ -4373,22 +5046,20 @@ jQuery.event = {
                                guid: handler.guid,
                                selector: selector,
                                needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-                               namespace: namespaces.join(".")
+                               namespace: namespaces.join( "." )
                        }, handleObjIn );
 
                        // Init the event handler queue if we're the first
-                       if ( !(handlers = events[ type ]) ) {
+                       if ( !( handlers = events[ type ] ) ) {
                                handlers = events[ type ] = [];
                                handlers.delegateCount = 0;
 
-                               // Only use addEventListener/attachEvent if the special events handler returns false
-                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                       // Bind the global event handler to the element
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle, false );
+                               // Only use addEventListener if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
 
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle );
                                        }
                                }
                        }
@@ -4412,29 +5083,27 @@ jQuery.event = {
                        jQuery.event.global[ type ] = true;
                }
 
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
        },
 
        // Detach an event or set of events from an element
        remove: function( elem, types, handler, selector, mappedTypes ) {
-               var j, handleObj, tmp,
-                       origCount, t, events,
-                       special, handlers, type,
-                       namespaces, origType,
-                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
 
-               if ( !elemData || !(events = elemData.events) ) {
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
                        return;
                }
 
                // Once for each type.namespace in types; type may be omitted
-               types = ( types || "" ).match( rnotwhite ) || [ "" ];
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
                t = types.length;
                while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
 
                        // Unbind all events (on this namespace, if provided) for the element
                        if ( !type ) {
@@ -4447,7 +5116,8 @@ jQuery.event = {
                        special = jQuery.event.special[ type ] || {};
                        type = ( selector ? special.delegateType : special.bindType ) || type;
                        handlers = events[ type ] || [];
-                       tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
 
                        // Remove matching events
                        origCount = j = handlers.length;
@@ -4457,7 +5127,8 @@ jQuery.event = {
                                if ( ( mappedTypes || origType === handleObj.origType ) &&
                                        ( !handler || handler.guid === handleObj.guid ) &&
                                        ( !tmp || tmp.test( handleObj.namespace ) ) &&
-                                       ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
                                        handlers.splice( j, 1 );
 
                                        if ( handleObj.selector ) {
@@ -4472,7 +5143,9 @@ jQuery.event = {
                        // Remove generic event handler if we removed something and no more handlers exist
                        // (avoids potential for endless recursion during removal of special event handlers)
                        if ( origCount && !handlers.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
                                        jQuery.removeEvent( elem, type, elemData.handle );
                                }
 
@@ -4480,375 +5153,181 @@ jQuery.event = {
                        }
                }
 
-               // Remove the expando if it's no longer used
+               // Remove data and the expando if it's no longer used
                if ( jQuery.isEmptyObject( events ) ) {
-                       delete elemData.handle;
-
-                       // removeData also checks for emptiness and clears the expando if empty
-                       // so use it instead of delete
-                       jQuery._removeData( elem, "events" );
+                       dataPriv.remove( elem, "handle events" );
                }
        },
 
-       trigger: function( event, data, elem, onlyHandlers ) {
-               var handle, ontype, cur,
-                       bubbleType, special, tmp, i,
-                       eventPath = [ elem || document ],
-                       type = hasOwn.call( event, "type" ) ? event.type : event,
-                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+       dispatch: function( nativeEvent ) {
 
-               cur = tmp = elem = elem || document;
+               // Make a writable jQuery.Event from the native event object
+               var event = jQuery.event.fix( nativeEvent );
 
-               // Don't do events on text and comment nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
+               var i, j, ret, matched, handleObj, handlerQueue,
+                       args = new Array( arguments.length ),
+                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
 
-               // focus/blur morphs to focusin/out; ensure we're not firing them right now
-               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                       return;
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+
+               for ( i = 1; i < arguments.length; i++ ) {
+                       args[ i ] = arguments[ i ];
                }
 
-               if ( type.indexOf(".") >= 0 ) {
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split(".");
-                       type = namespaces.shift();
-                       namespaces.sort();
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
                }
-               ontype = type.indexOf(":") < 0 && "on" + type;
 
-               // Caller can pass in a jQuery.Event object, Object, or just an event type string
-               event = event[ jQuery.expando ] ?
-                       event :
-                       new jQuery.Event( type, typeof event === "object" && event );
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
 
-               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-               event.isTrigger = onlyHandlers ? 2 : 3;
-               event.namespace = namespaces.join(".");
-               event.namespace_re = event.namespace ?
-                       new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
-                       null;
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
 
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
-               }
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
 
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data == null ?
-                       [ event ] :
-                       jQuery.makeArray( data, [ event ] );
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
 
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
-               }
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
 
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
 
-                       bubbleType = special.delegateType || type;
-                       if ( !rfocusMorph.test( bubbleType + type ) ) {
-                               cur = cur.parentNode;
-                       }
-                       for ( ; cur; cur = cur.parentNode ) {
-                               eventPath.push( cur );
-                               tmp = cur;
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
                        }
+               }
 
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( tmp === (elem.ownerDocument || document) ) {
-                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-                       }
-               }
-
-               // Fire handlers on the event path
-               i = 0;
-               while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
-                       event.type = i > 1 ?
-                               bubbleType :
-                               special.bindType || type;
-
-                       // jQuery handler
-                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-
-                       // Native handler
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
-                               event.result = handle.apply( cur, data );
-                               if ( event.result === false ) {
-                                       event.preventDefault();
-                               }
-                       }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-                       if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
-                               jQuery.acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name name as the event.
-                               // Can't use an .isFunction() check here because IE6/7 fails that test.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       tmp = elem[ ontype ];
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = null;
-                                       }
-
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       try {
-                                               elem[ type ]();
-                                       } catch ( e ) {
-                                               // IE<9 dies on focus/blur to hidden element (#1486,#12518)
-                                               // only reproducible on winXP IE8 native, not IE9 in IE8 mode
-                                       }
-                                       jQuery.event.triggered = undefined;
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = tmp;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       dispatch: function( event ) {
-
-               // Make a writable jQuery.Event from the native event object
-               event = jQuery.event.fix( event );
-
-               var i, ret, handleObj, matched, j,
-                       handlerQueue = [],
-                       args = slice.call( arguments ),
-                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-                       special = jQuery.event.special[ event.type ] || {};
-
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[0] = event;
-               event.delegateTarget = this;
-
-               // Call the preDispatch hook for the mapped type, and let it bail if desired
-               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                       return;
-               }
-
-               // Determine handlers
-               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-               // Run delegates first; they may want to stop propagation beneath us
-               i = 0;
-               while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
-                       event.currentTarget = matched.elem;
-
-                       j = 0;
-                       while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
-                               // Triggered event must either 1) have no namespace, or
-                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
-                                       event.handleObj = handleObj;
-                                       event.data = handleObj.data;
-
-                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-                                                       .apply( matched.elem, args );
-
-                                       if ( ret !== undefined ) {
-                                               if ( (event.result = ret) === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               // Call the postDispatch hook for the mapped type
-               if ( special.postDispatch ) {
-                       special.postDispatch.call( this, event );
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
                }
 
                return event.result;
        },
 
        handlers: function( event, handlers ) {
-               var sel, handleObj, matches, i,
+               var i, handleObj, sel, matchedHandlers, matchedSelectors,
                        handlerQueue = [],
                        delegateCount = handlers.delegateCount,
                        cur = event.target;
 
                // Find delegate handlers
-               // Black-hole SVG <use> instance trees (#13180)
-               // Avoid non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+               if ( delegateCount &&
+
+                       // Support: IE <=9
+                       // Black-hole SVG <use> instance trees (trac-13180)
+                       cur.nodeType &&
 
-                       /* jshint eqeqeq: false */
-                       for ( ; cur != this; cur = cur.parentNode || this ) {
-                               /* jshint eqeqeq: true */
+                       // Support: Firefox <=42
+                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+                       // Support: IE 11 only
+                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+                       !( event.type === "click" && event.button >= 1 ) ) {
+
+                       for ( ; cur !== this; cur = cur.parentNode || this ) {
 
                                // Don't check non-elements (#13208)
                                // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-                               if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
-                                       matches = [];
+                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+                                       matchedHandlers = [];
+                                       matchedSelectors = {};
                                        for ( i = 0; i < delegateCount; i++ ) {
                                                handleObj = handlers[ i ];
 
                                                // Don't conflict with Object.prototype properties (#13203)
                                                sel = handleObj.selector + " ";
 
-                                               if ( matches[ sel ] === undefined ) {
-                                                       matches[ sel ] = handleObj.needsContext ?
-                                                               jQuery( sel, this ).index( cur ) >= 0 :
+                                               if ( matchedSelectors[ sel ] === undefined ) {
+                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
                                                                jQuery.find( sel, this, null, [ cur ] ).length;
                                                }
-                                               if ( matches[ sel ] ) {
-                                                       matches.push( handleObj );
+                                               if ( matchedSelectors[ sel ] ) {
+                                                       matchedHandlers.push( handleObj );
                                                }
                                        }
-                                       if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, handlers: matches });
+                                       if ( matchedHandlers.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
                                        }
                                }
                        }
                }
 
                // Add the remaining (directly-bound) handlers
+               cur = this;
                if ( delegateCount < handlers.length ) {
-                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
                }
 
                return handlerQueue;
        },
 
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
-
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop, copy,
-                       type = event.type,
-                       originalEvent = event,
-                       fixHook = this.fixHooks[ type ];
-
-               if ( !fixHook ) {
-                       this.fixHooks[ type ] = fixHook =
-                               rmouseEvent.test( type ) ? this.mouseHooks :
-                               rkeyEvent.test( type ) ? this.keyHooks :
-                               {};
-               }
-               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-               event = new jQuery.Event( originalEvent );
-
-               i = copy.length;
-               while ( i-- ) {
-                       prop = copy[ i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Support: IE<9
-               // Fix target property (#1925)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
-
-               // Support: Chrome 23+, Safari?
-               // Target should not be a text node (#504, #13143)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // Support: IE<9
-               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
-               event.metaKey = !!event.metaKey;
-
-               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
-       },
-
-       // Includes some event props shared by KeyEvent and MouseEvent
-       props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-       fixHooks: {},
+       addProp: function( name, hook ) {
+               Object.defineProperty( jQuery.Event.prototype, name, {
+                       enumerable: true,
+                       configurable: true,
 
-       keyHooks: {
-               props: "char charCode key keyCode".split(" "),
-               filter: function( event, original ) {
+                       get: jQuery.isFunction( hook ) ?
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return hook( this.originalEvent );
+                                       }
+                               } :
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return this.originalEvent[ name ];
+                                       }
+                               },
 
-                       // Add which for key events
-                       if ( event.which == null ) {
-                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       set: function( value ) {
+                               Object.defineProperty( this, name, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: value
+                               } );
                        }
-
-                       return event;
-               }
+               } );
        },
 
-       mouseHooks: {
-               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-               filter: function( event, original ) {
-                       var body, eventDoc, doc,
-                               button = original.button,
-                               fromElement = original.fromElement;
-
-                       // Calculate pageX/Y if missing and clientX/Y available
-                       if ( event.pageX == null && original.clientX != null ) {
-                               eventDoc = event.target.ownerDocument || document;
-                               doc = eventDoc.documentElement;
-                               body = eventDoc.body;
-
-                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                       }
-
-                       // Add relatedTarget, if necessary
-                       if ( !event.relatedTarget && fromElement ) {
-                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                       }
-
-                       // Add which for click: 1 === left; 2 === middle; 3 === right
-                       // Note: button is not normalized, so don't use it
-                       if ( !event.which && button !== undefined ) {
-                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-                       }
-
-                       return event;
-               }
+       fix: function( originalEvent ) {
+               return originalEvent[ jQuery.expando ] ?
+                       originalEvent :
+                       new jQuery.Event( originalEvent );
        },
 
        special: {
                load: {
+
                        // Prevent triggered image.load events from bubbling to window.load
                        noBubble: true
                },
                focus: {
+
                        // Fire native event if possible so blur/focus sequence is correct
                        trigger: function() {
                                if ( this !== safeActiveElement() && this.focus ) {
-                                       try {
-                                               this.focus();
-                                               return false;
-                                       } catch ( e ) {
-                                               // Support: IE<9
-                                               // If we error on focus to hidden element (#1486, #12518),
-                                               // let .trigger() run the handlers
-                                       }
+                                       this.focus();
+                                       return false;
                                }
                        },
                        delegateType: "focusin"
@@ -4863,9 +5342,10 @@ jQuery.event = {
                        delegateType: "focusout"
                },
                click: {
+
                        // For checkbox, fire native event so checked state will be right
                        trigger: function() {
-                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
                                        this.click();
                                        return false;
                                }
@@ -4873,7 +5353,7 @@ jQuery.event = {
 
                        // For cross-browser consistency, don't fire native .click() on links
                        _default: function( event ) {
-                               return jQuery.nodeName( event.target, "a" );
+                               return nodeName( event.target, "a" );
                        }
                },
 
@@ -4887,56 +5367,21 @@ jQuery.event = {
                                }
                        }
                }
-       },
-
-       simulate: function( type, elem, event, bubble ) {
-               // Piggyback on a donor event to simulate a different one.
-               // Fake originalEvent to avoid donor's stopPropagation, but if the
-               // simulated event prevents default then we do the same on the donor.
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       {
-                               type: type,
-                               isSimulated: true,
-                               originalEvent: {}
-                       }
-               );
-               if ( bubble ) {
-                       jQuery.event.trigger( e, null, elem );
-               } else {
-                       jQuery.event.dispatch.call( elem, e );
-               }
-               if ( e.isDefaultPrevented() ) {
-                       event.preventDefault();
-               }
        }
 };
 
-jQuery.removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               if ( elem.removeEventListener ) {
-                       elem.removeEventListener( type, handle, false );
-               }
-       } :
-       function( elem, type, handle ) {
-               var name = "on" + type;
-
-               if ( elem.detachEvent ) {
+jQuery.removeEvent = function( elem, type, handle ) {
 
-                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
-                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
-                       if ( typeof elem[ name ] === strundefined ) {
-                               elem[ name ] = null;
-                       }
-
-                       elem.detachEvent( name, handle );
-               }
-       };
+       // This "if" is needed for plain objects
+       if ( elem.removeEventListener ) {
+               elem.removeEventListener( type, handle );
+       }
+};
 
 jQuery.Event = function( src, props ) {
+
        // Allow instantiation without the 'new' keyword
-       if ( !(this instanceof jQuery.Event) ) {
+       if ( !( this instanceof jQuery.Event ) ) {
                return new jQuery.Event( src, props );
        }
 
@@ -4949,11 +5394,22 @@ jQuery.Event = function( src, props ) {
                // by a handler lower down the tree; reflect the correct value.
                this.isDefaultPrevented = src.defaultPrevented ||
                                src.defaultPrevented === undefined &&
-                               // Support: IE < 9, Android < 4.0
+
+                               // Support: Android <=2.3 only
                                src.returnValue === false ?
                        returnTrue :
                        returnFalse;
 
+               // Create target properties
+               // Support: Safari <=6 - 7 only
+               // Target should not be a text node (#504, #13143)
+               this.target = ( src.target && src.target.nodeType === 3 ) ?
+                       src.target.parentNode :
+                       src.target;
+
+               this.currentTarget = src.currentTarget;
+               this.relatedTarget = src.relatedTarget;
+
        // Event type
        } else {
                this.type = src;
@@ -4972,52 +5428,38 @@ jQuery.Event = function( src, props ) {
 };
 
 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
 jQuery.Event.prototype = {
+       constructor: jQuery.Event,
        isDefaultPrevented: returnFalse,
        isPropagationStopped: returnFalse,
        isImmediatePropagationStopped: returnFalse,
+       isSimulated: false,
 
        preventDefault: function() {
                var e = this.originalEvent;
 
                this.isDefaultPrevented = returnTrue;
-               if ( !e ) {
-                       return;
-               }
 
-               // If preventDefault exists, run it on the original event
-               if ( e.preventDefault ) {
+               if ( e && !this.isSimulated ) {
                        e.preventDefault();
-
-               // Support: IE
-               // Otherwise set the returnValue property of the original event to false
-               } else {
-                       e.returnValue = false;
                }
        },
        stopPropagation: function() {
                var e = this.originalEvent;
 
                this.isPropagationStopped = returnTrue;
-               if ( !e ) {
-                       return;
-               }
-               // If stopPropagation exists, run it on the original event
-               if ( e.stopPropagation ) {
+
+               if ( e && !this.isSimulated ) {
                        e.stopPropagation();
                }
-
-               // Support: IE
-               // Set the cancelBubble property of the original event to true
-               e.cancelBubble = true;
        },
        stopImmediatePropagation: function() {
                var e = this.originalEvent;
 
                this.isImmediatePropagationStopped = returnTrue;
 
-               if ( e && e.stopImmediatePropagation ) {
+               if ( e && !this.isSimulated ) {
                        e.stopImmediatePropagation();
                }
 
@@ -5025,8 +5467,76 @@ jQuery.Event.prototype = {
        }
 };
 
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+       altKey: true,
+       bubbles: true,
+       cancelable: true,
+       changedTouches: true,
+       ctrlKey: true,
+       detail: true,
+       eventPhase: true,
+       metaKey: true,
+       pageX: true,
+       pageY: true,
+       shiftKey: true,
+       view: true,
+       "char": true,
+       charCode: true,
+       key: true,
+       keyCode: true,
+       button: true,
+       buttons: true,
+       clientX: true,
+       clientY: true,
+       offsetX: true,
+       offsetY: true,
+       pointerId: true,
+       pointerType: true,
+       screenX: true,
+       screenY: true,
+       targetTouches: true,
+       toElement: true,
+       touches: true,
+
+       which: function( event ) {
+               var button = event.button;
+
+               // Add which for key events
+               if ( event.which == null && rkeyEvent.test( event.type ) ) {
+                       return event.charCode != null ? event.charCode : event.keyCode;
+               }
+
+               // Add which for click: 1 === left; 2 === middle; 3 === right
+               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+                       if ( button & 1 ) {
+                               return 1;
+                       }
+
+                       if ( button & 2 ) {
+                               return 3;
+                       }
+
+                       if ( button & 4 ) {
+                               return 2;
+                       }
+
+                       return 0;
+               }
+
+               return event.which;
+       }
+}, jQuery.event.addProp );
+
 // Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
@@ -5042,9 +5552,9 @@ jQuery.each({
                                related = event.relatedTarget,
                                handleObj = event.handleObj;
 
-                       // For mousenter/leave call the handler if related is outside the target.
+                       // For mouseenter/leave call the handler if related is outside the target.
                        // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
                                event.type = handleObj.origType;
                                ret = handleObj.handler.apply( this, arguments );
                                event.type = fix;
@@ -5052,490 +5562,281 @@ jQuery.each({
                        return ret;
                }
        };
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
+} );
 
-       jQuery.event.special.submit = {
-               setup: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
+jQuery.fn.extend( {
 
-                       // Lazy-add a submit handler when a descendant form may potentially be submitted
-                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                               // Node name check avoids a VML-related crash in IE (#9807)
-                               var elem = e.target,
-                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !jQuery._data( form, "submitBubbles" ) ) {
-                                       jQuery.event.add( form, "submit._submit", function( event ) {
-                                               event._submit_bubble = true;
-                                       });
-                                       jQuery._data( form, "submitBubbles", true );
-                               }
-                       });
-                       // return undefined since we don't need an event listener
-               },
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
 
-               postDispatch: function( event ) {
-                       // If form was submitted by the user, bubble the event up the tree
-                       if ( event._submit_bubble ) {
-                               delete event._submit_bubble;
-                               if ( this.parentNode && !event.isTrigger ) {
-                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
-                               }
-                       }
-               },
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
 
-               teardown: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
                        }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
 
-                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                       jQuery.event.remove( this, "._submit" );
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
                }
-       };
-}
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       }
+} );
 
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
 
-       jQuery.event.special.change = {
+var
 
-               setup: function() {
+       /* eslint-disable max-len */
 
-                       if ( rformElems.test( this.nodeName ) ) {
-                               // IE doesn't fire change on a check/radio until blur; trigger it on click
-                               // after a propertychange. Eat the blur-change in special.change.handle.
-                               // This still fires onchange a second time for check/radio after blur.
-                               if ( this.type === "checkbox" || this.type === "radio" ) {
-                                       jQuery.event.add( this, "propertychange._change", function( event ) {
-                                               if ( event.originalEvent.propertyName === "checked" ) {
-                                                       this._just_changed = true;
-                                               }
-                                       });
-                                       jQuery.event.add( this, "click._change", function( event ) {
-                                               if ( this._just_changed && !event.isTrigger ) {
-                                                       this._just_changed = false;
-                                               }
-                                               // Allow triggered, simulated change events (#11500)
-                                               jQuery.event.simulate( "change", this, event, true );
-                                       });
-                               }
-                               return false;
-                       }
-                       // Delegated event; lazy-add a change handler on descendant inputs
-                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                               var elem = e.target;
+       // See https://github.com/eslint/eslint/issues/3229
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
 
-                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
-                                       jQuery.event.add( elem, "change._change", function( event ) {
-                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
-                                               }
-                                       });
-                                       jQuery._data( elem, "changeBubbles", true );
-                               }
-                       });
-               },
+       /* eslint-enable */
 
-               handle: function( event ) {
-                       var elem = event.target;
+       // Support: IE <=10 - 11, Edge 12 - 13
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
 
-                       // Swallow native change events from checkbox/radio, we already triggered them above
-                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                               return event.handleObj.handler.apply( this, arguments );
-                       }
-               },
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+       if ( nodeName( elem, "table" ) &&
+               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
 
-               teardown: function() {
-                       jQuery.event.remove( this, "._change" );
+               return jQuery( ">tbody", elem )[ 0 ] || elem;
+       }
 
-                       return !rformElems.test( this.nodeName );
-               }
-       };
+       return elem;
 }
 
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
 
-               // Attach a single capturing handler on the document while someone wants focusin/focusout
-               var handler = function( event ) {
-                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                       };
-
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = jQuery._data( doc, fix );
-
-                               if ( !attaches ) {
-                                       doc.addEventListener( orig, handler, true );
-                               }
-                               jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
-                       },
-                       teardown: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = jQuery._data( doc, fix ) - 1;
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
 
-                               if ( !attaches ) {
-                                       doc.removeEventListener( orig, handler, true );
-                                       jQuery._removeData( doc, fix );
-                               } else {
-                                       jQuery._data( doc, fix, attaches );
-                               }
-                       }
-               };
-       });
+       return elem;
 }
 
-jQuery.fn.extend({
+function cloneCopyEvent( src, dest ) {
+       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
 
-       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-               var type, origFn;
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
 
-               // Types can be a map of types/handlers
-               if ( typeof types === "object" ) {
-                       // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) {
-                               // ( types-Object, data )
-                               data = data || selector;
-                               selector = undefined;
-                       }
-                       for ( type in types ) {
-                               this.on( type, selector, data, types[ type ], one );
-                       }
-                       return this;
-               }
+       // 1. Copy private data: events, handlers, etc.
+       if ( dataPriv.hasData( src ) ) {
+               pdataOld = dataPriv.access( src );
+               pdataCur = dataPriv.set( dest, pdataOld );
+               events = pdataOld.events;
 
-               if ( data == null && fn == null ) {
-                       // ( types, fn )
-                       fn = selector;
-                       data = selector = undefined;
-               } else if ( fn == null ) {
-                       if ( typeof selector === "string" ) {
-                               // ( types, selector, fn )
-                               fn = data;
-                               data = undefined;
-                       } else {
-                               // ( types, data, fn )
-                               fn = data;
-                               data = selector;
-                               selector = undefined;
-                       }
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               } else if ( !fn ) {
-                       return this;
-               }
+               if ( events ) {
+                       delete pdataCur.handle;
+                       pdataCur.events = {};
 
-               if ( one === 1 ) {
-                       origFn = fn;
-                       fn = function( event ) {
-                               // Can use an empty set, since event contains the info
-                               jQuery().off( event );
-                               return origFn.apply( this, arguments );
-                       };
-                       // Use same guid so caller can remove using origFn
-                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-               }
-               return this.each( function() {
-                       jQuery.event.add( this, types, fn, data, selector );
-               });
-       },
-       one: function( types, selector, data, fn ) {
-               return this.on( types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               var handleObj, type;
-               if ( types && types.preventDefault && types.handleObj ) {
-                       // ( event )  dispatched jQuery.Event
-                       handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-                       // ( types-object [, selector] )
-                       for ( type in types ) {
-                               this.off( type, selector, types[ type ] );
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+                               }
                        }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
                }
-               return this.each(function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               });
-       },
+       }
 
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       triggerHandler: function( type, data ) {
-               var elem = this[0];
-               if ( elem ) {
-                       return jQuery.event.trigger( type, data, elem, true );
-               }
+       // 2. Copy user data
+       if ( dataUser.hasData( src ) ) {
+               udataOld = dataUser.access( src );
+               udataCur = jQuery.extend( {}, udataOld );
+
+               dataUser.set( dest, udataCur );
        }
-});
+}
 
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+       var nodeName = dest.nodeName.toLowerCase();
 
-function createSafeFragment( document ) {
-       var list = nodeNames.split( "|" ),
-               safeFrag = document.createDocumentFragment();
+       // Fails to persist the checked state of a cloned checkbox or radio button.
+       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               dest.checked = src.checked;
 
-       if ( safeFrag.createElement ) {
-               while ( list.length ) {
-                       safeFrag.createElement(
-                               list.pop()
-                       );
-               }
+       // Fails to return the selected option to the default selected state when cloning options
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
        }
-       return safeFrag;
 }
 
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style|link)/i,
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptType = /^$|\/(?:java|ecma)script/i,
-       rscriptTypeMasked = /^true\/(.*)/,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
-       // We have to close these tags to support XHTML (#13200)
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               area: [ 1, "<map>", "</map>" ],
-               param: [ 1, "<object>", "</object>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-               // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-               // unless wrapped in a div with non-breaking characters in front of it.
-               _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
-       },
-       safeFragment = createSafeFragment( document ),
-       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+function domManip( collection, args, callback, ignored ) {
 
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
 
-function getAll( context, tag ) {
-       var elems, elem,
+       var fragment, first, scripts, hasScripts, node, doc,
                i = 0,
-               found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
-                       typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
-                       undefined;
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
 
-       if ( !found ) {
-               for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
-                       if ( !tag || jQuery.nodeName( elem, tag ) ) {
-                               found.push( elem );
-                       } else {
-                               jQuery.merge( found, getAll( elem, tag ) );
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
                        }
-               }
-       }
-
-       return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
-               jQuery.merge( [ context ], found ) :
-               found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-       if ( rcheckableType.test( elem.type ) ) {
-               elem.defaultChecked = elem.checked;
+                       domManip( self, args, callback, ignored );
+               } );
        }
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
-       return jQuery.nodeName( elem, "table" ) &&
-               jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
 
-               elem.getElementsByTagName("tbody")[0] ||
-                       elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
-               elem;
-}
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
 
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-       elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
-       return elem;
-}
-function restoreScript( elem ) {
-       var match = rscriptTypeMasked.exec( elem.type );
-       if ( match ) {
-               elem.type = match[1];
-       } else {
-               elem.removeAttribute("type");
-       }
-       return elem;
-}
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
 
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-       var elem,
-               i = 0;
-       for ( ; (elem = elems[i]) != null; i++ ) {
-               jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
-       }
-}
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
 
-function cloneCopyEvent( src, dest ) {
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
 
-       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-               return;
-       }
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
 
-       var type, i, l,
-               oldData = jQuery._data( src ),
-               curData = jQuery._data( dest, oldData ),
-               events = oldData.events;
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
 
-       if ( events ) {
-               delete curData.handle;
-               curData.events = {};
+                                               // Support: Android <=4.0 only, PhantomJS 1 only
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
 
-               for ( type in events ) {
-                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                               jQuery.event.add( dest, type, events[ type ][ i ] );
+                               callback.call( collection[ i ], node, i );
                        }
-               }
-       }
-
-       // make the cloned public data object a copy from the original
-       if ( curData.data ) {
-               curData.data = jQuery.extend( {}, curData.data );
-       }
-}
 
-function fixCloneNodeIssues( src, dest ) {
-       var nodeName, e, data;
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
 
-       // We do not need to do anything for non-Elements
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
 
-       nodeName = dest.nodeName.toLowerCase();
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !dataPriv.access( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
 
-       // IE6-8 copies events bound via attachEvent when using cloneNode.
-       if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
-               data = jQuery._data( dest );
+                                               if ( node.src ) {
 
-               for ( e in data.events ) {
-                       jQuery.removeEvent( dest, e, data.handle );
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+                                               }
+                                       }
+                               }
+                       }
                }
-
-               // Event data gets referenced instead of copied if the expando gets copied too
-               dest.removeAttribute( jQuery.expando );
        }
 
-       // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
-       if ( nodeName === "script" && dest.text !== src.text ) {
-               disableScript( dest ).text = src.text;
-               restoreScript( dest );
+       return collection;
+}
 
-       // IE6-10 improperly clones children of object elements using classid.
-       // IE10 throws NoModificationAllowedError if parent is null, #12132.
-       } else if ( nodeName === "object" ) {
-               if ( dest.parentNode ) {
-                       dest.outerHTML = src.outerHTML;
-               }
+function remove( elem, selector, keepData ) {
+       var node,
+               nodes = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
 
-               // This path appears unavoidable for IE9. When cloning an object
-               // element in IE9, the outerHTML strategy above is not sufficient.
-               // If the src has innerHTML and the destination does not,
-               // copy the src.innerHTML into the dest.innerHTML. #10324
-               if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
-                       dest.innerHTML = src.innerHTML;
+       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
                }
 
-       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-               // IE6-8 fails to persist the checked state of a cloned checkbox
-               // or radio button. Worse, IE6-7 fail to give the cloned element
-               // a checked appearance if the defaultChecked value isn't also set
-
-               dest.defaultChecked = dest.checked = src.checked;
-
-               // IE6-7 get confused and end up setting the value of a cloned
-               // checkbox/radio button to an empty string instead of "on"
-               if ( dest.value !== src.value ) {
-                       dest.value = src.value;
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
                }
-
-       // IE6-8 fails to return the selected option to the default selected
-       // state when cloning options
-       } else if ( nodeName === "option" ) {
-               dest.defaultSelected = dest.selected = src.defaultSelected;
-
-       // IE6-8 fails to set the defaultValue to the correct value when
-       // cloning other types of input fields
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
        }
+
+       return elem;
 }
 
-jQuery.extend({
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var destElements, node, clone, i, srcElements,
+               var i, l, srcElements, destElements,
+                       clone = elem.cloneNode( true ),
                        inPage = jQuery.contains( elem.ownerDocument, elem );
 
-               if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-                       clone = elem.cloneNode( true );
-
-               // IE<=8 does not properly clone detached, unknown element nodes
-               } else {
-                       fragmentDiv.innerHTML = elem.outerHTML;
-                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
-               }
+               // Fix IE cloning issues
+               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+                               !jQuery.isXMLDoc( elem ) ) {
 
-               if ( (!support.noCloneEvent || !support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
-                       // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
                        destElements = getAll( clone );
                        srcElements = getAll( elem );
 
-                       // Fix all IE cloning issues
-                       for ( i = 0; (node = srcElements[i]) != null; ++i ) {
-                               // Ensure that the destination node is not null; Fixes #9587
-                               if ( destElements[i] ) {
-                                       fixCloneNodeIssues( node, destElements[i] );
-                               }
+                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                               fixInput( srcElements[ i ], destElements[ i ] );
                        }
                }
 
@@ -5545,8 +5846,8 @@ jQuery.extend({
                                srcElements = srcElements || getAll( elem );
                                destElements = destElements || getAll( clone );
 
-                               for ( i = 0; (node = srcElements[i]) != null; i++ ) {
-                                       cloneCopyEvent( node, destElements[i] );
+                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
                                }
                        } else {
                                cloneCopyEvent( elem, clone );
@@ -5559,154 +5860,18 @@ jQuery.extend({
                        setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
                }
 
-               destElements = srcElements = node = null;
-
                // Return the cloned set
                return clone;
        },
 
-       buildFragment: function( elems, context, scripts, selection ) {
-               var j, elem, contains,
-                       tmp, tag, tbody, wrap,
-                       l = elems.length,
-
-                       // Ensure a safe fragment
-                       safe = createSafeFragment( context ),
-
-                       nodes = [],
+       cleanData: function( elems ) {
+               var data, elem, type,
+                       special = jQuery.event.special,
                        i = 0;
 
-               for ( ; i < l; i++ ) {
-                       elem = elems[ i ];
-
-                       if ( elem || elem === 0 ) {
-
-                               // Add nodes directly
-                               if ( jQuery.type( elem ) === "object" ) {
-                                       jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-                               // Convert non-html into a text node
-                               } else if ( !rhtml.test( elem ) ) {
-                                       nodes.push( context.createTextNode( elem ) );
-
-                               // Convert html into DOM nodes
-                               } else {
-                                       tmp = tmp || safe.appendChild( context.createElement("div") );
-
-                                       // Deserialize a standard representation
-                                       tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
-                                       wrap = wrapMap[ tag ] || wrapMap._default;
-
-                                       tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
-                                       // Descend through wrappers to the right content
-                                       j = wrap[0];
-                                       while ( j-- ) {
-                                               tmp = tmp.lastChild;
-                                       }
-
-                                       // Manually add leading whitespace removed by IE
-                                       if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
-                                       }
-
-                                       // Remove IE's autoinserted <tbody> from table fragments
-                                       if ( !support.tbody ) {
-
-                                               // String was a <table>, *may* have spurious <tbody>
-                                               elem = tag === "table" && !rtbody.test( elem ) ?
-                                                       tmp.firstChild :
-
-                                                       // String was a bare <thead> or <tfoot>
-                                                       wrap[1] === "<table>" && !rtbody.test( elem ) ?
-                                                               tmp :
-                                                               0;
-
-                                               j = elem && elem.childNodes.length;
-                                               while ( j-- ) {
-                                                       if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
-                                                               elem.removeChild( tbody );
-                                                       }
-                                               }
-                                       }
-
-                                       jQuery.merge( nodes, tmp.childNodes );
-
-                                       // Fix #12392 for WebKit and IE > 9
-                                       tmp.textContent = "";
-
-                                       // Fix #12392 for oldIE
-                                       while ( tmp.firstChild ) {
-                                               tmp.removeChild( tmp.firstChild );
-                                       }
-
-                                       // Remember the top-level container for proper cleanup
-                                       tmp = safe.lastChild;
-                               }
-                       }
-               }
-
-               // Fix #11356: Clear elements from fragment
-               if ( tmp ) {
-                       safe.removeChild( tmp );
-               }
-
-               // Reset defaultChecked for any radios and checkboxes
-               // about to be appended to the DOM in IE 6/7 (#8060)
-               if ( !support.appendChecked ) {
-                       jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
-               }
-
-               i = 0;
-               while ( (elem = nodes[ i++ ]) ) {
-
-                       // #4087 - If origin and destination elements are the same, and this is
-                       // that element, do not do anything
-                       if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
-                               continue;
-                       }
-
-                       contains = jQuery.contains( elem.ownerDocument, elem );
-
-                       // Append to fragment
-                       tmp = getAll( safe.appendChild( elem ), "script" );
-
-                       // Preserve script evaluation history
-                       if ( contains ) {
-                               setGlobalEval( tmp );
-                       }
-
-                       // Capture executables
-                       if ( scripts ) {
-                               j = 0;
-                               while ( (elem = tmp[ j++ ]) ) {
-                                       if ( rscriptType.test( elem.type || "" ) ) {
-                                               scripts.push( elem );
-                                       }
-                               }
-                       }
-               }
-
-               tmp = null;
-
-               return safe;
-       },
-
-       cleanData: function( elems, /* internal */ acceptData ) {
-               var elem, type, id, data,
-                       i = 0,
-                       internalKey = jQuery.expando,
-                       cache = jQuery.cache,
-                       deleteExpando = support.deleteExpando,
-                       special = jQuery.event.special;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-                       if ( acceptData || jQuery.acceptData( elem ) ) {
-
-                               id = elem[ internalKey ];
-                               data = id && cache[ id ];
-
-                               if ( data ) {
+               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+                       if ( acceptData( elem ) ) {
+                               if ( ( data = elem[ dataPriv.expando ] ) ) {
                                        if ( data.events ) {
                                                for ( type in data.events ) {
                                                        if ( special[ type ] ) {
@@ -5719,116 +5884,88 @@ jQuery.extend({
                                                }
                                        }
 
-                                       // Remove cache only if it was not already removed by jQuery.event.remove
-                                       if ( cache[ id ] ) {
-
-                                               delete cache[ id ];
-
-                                               // IE does not allow us to delete expando properties from nodes,
-                                               // nor does it have a removeAttribute function on Document nodes;
-                                               // we must handle all of these cases
-                                               if ( deleteExpando ) {
-                                                       delete elem[ internalKey ];
-
-                                               } else if ( typeof elem.removeAttribute !== strundefined ) {
-                                                       elem.removeAttribute( internalKey );
-
-                                               } else {
-                                                       elem[ internalKey ] = null;
-                                               }
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataPriv.expando ] = undefined;
+                               }
+                               if ( elem[ dataUser.expando ] ) {
 
-                                               deletedIds.push( id );
-                                       }
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataUser.expando ] = undefined;
                                }
                        }
                }
        }
-});
+} );
+
+jQuery.fn.extend( {
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
 
-jQuery.fn.extend({
        text: function( value ) {
                return access( this, function( value ) {
                        return value === undefined ?
                                jQuery.text( this ) :
-                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+                               this.empty().each( function() {
+                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                                               this.textContent = value;
+                                       }
+                               } );
                }, null, value, arguments.length );
        },
 
        append: function() {
-               return this.domManip( arguments, function( elem ) {
+               return domManip( this, arguments, function( elem ) {
                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
                                var target = manipulationTarget( this, elem );
                                target.appendChild( elem );
                        }
-               });
+               } );
        },
 
        prepend: function() {
-               return this.domManip( arguments, function( elem ) {
+               return domManip( this, arguments, function( elem ) {
                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
                                var target = manipulationTarget( this, elem );
                                target.insertBefore( elem, target.firstChild );
                        }
-               });
+               } );
        },
 
        before: function() {
-               return this.domManip( arguments, function( elem ) {
+               return domManip( this, arguments, function( elem ) {
                        if ( this.parentNode ) {
                                this.parentNode.insertBefore( elem, this );
                        }
-               });
+               } );
        },
 
        after: function() {
-               return this.domManip( arguments, function( elem ) {
+               return domManip( this, arguments, function( elem ) {
                        if ( this.parentNode ) {
                                this.parentNode.insertBefore( elem, this.nextSibling );
                        }
-               });
+               } );
        },
 
-       remove: function( selector, keepData /* Internal Use Only */ ) {
+       empty: function() {
                var elem,
-                       elems = selector ? jQuery.filter( selector, this ) : this,
                        i = 0;
 
-               for ( ; (elem = elems[i]) != null; i++ ) {
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+                       if ( elem.nodeType === 1 ) {
 
-                       if ( !keepData && elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem ) );
-                       }
+                               // Prevent memory leaks
+                               jQuery.cleanData( getAll( elem, false ) );
 
-                       if ( elem.parentNode ) {
-                               if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
-                                       setGlobalEval( getAll( elem, "script" ) );
-                               }
-                               elem.parentNode.removeChild( elem );
-                       }
-               }
-
-               return this;
-       },
-
-       empty: function() {
-               var elem,
-                       i = 0;
-
-               for ( ; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem, false ) );
-                       }
-
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
-                       }
-
-                       // If this is a select, ensure that it displays empty (#12336)
-                       // Support: IE<9
-                       if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
-                               elem.options.length = 0;
+                               // Remove any remaining nodes
+                               elem.textContent = "";
                        }
                }
 
@@ -5839,9 +5976,9 @@ jQuery.fn.extend({
                dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
                deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
 
-               return this.map(function() {
+               return this.map( function() {
                        return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               });
+               } );
        },
 
        html: function( value ) {
@@ -5850,24 +5987,21 @@ jQuery.fn.extend({
                                i = 0,
                                l = this.length;
 
-                       if ( value === undefined ) {
-                               return elem.nodeType === 1 ?
-                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                       undefined;
+                       if ( value === undefined && elem.nodeType === 1 ) {
+                               return elem.innerHTML;
                        }
 
                        // See if we can take a shortcut and just use innerHTML
                        if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                               ( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-                               ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-                               !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
 
-                               value = value.replace( rxhtmlTag, "<$1></$2>" );
+                               value = jQuery.htmlPrefilter( value );
 
                                try {
-                                       for (; i < l; i++ ) {
+                                       for ( ; i < l; i++ ) {
+                                               elem = this[ i ] || {};
+
                                                // Remove element nodes and prevent memory leaks
-                                               elem = this[i] || {};
                                                if ( elem.nodeType === 1 ) {
                                                        jQuery.cleanData( getAll( elem, false ) );
                                                        elem.innerHTML = value;
@@ -5877,7 +6011,7 @@ jQuery.fn.extend({
                                        elem = 0;
 
                                // If using innerHTML throws an exception, use the fallback method
-                               } catch(e) {}
+                               } catch ( e ) {}
                        }
 
                        if ( elem ) {
@@ -5887,117 +6021,25 @@ jQuery.fn.extend({
        },
 
        replaceWith: function() {
-               var arg = arguments[ 0 ];
-
-               // Make the changes, replacing each context element with the new content
-               this.domManip( arguments, function( elem ) {
-                       arg = this.parentNode;
-
-                       jQuery.cleanData( getAll( this ) );
-
-                       if ( arg ) {
-                               arg.replaceChild( elem, this );
-                       }
-               });
-
-               // Force removal if there was no new content (e.g., from empty arguments)
-               return arg && (arg.length || arg.nodeType) ? this : this.remove();
-       },
-
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
-
-       domManip: function( args, callback ) {
-
-               // Flatten any nested arrays
-               args = concat.apply( [], args );
-
-               var first, node, hasScripts,
-                       scripts, doc, fragment,
-                       i = 0,
-                       l = this.length,
-                       set = this,
-                       iNoClone = l - 1,
-                       value = args[0],
-                       isFunction = jQuery.isFunction( value );
-
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( isFunction ||
-                               ( l > 1 && typeof value === "string" &&
-                                       !support.checkClone && rchecked.test( value ) ) ) {
-                       return this.each(function( index ) {
-                               var self = set.eq( index );
-                               if ( isFunction ) {
-                                       args[0] = value.call( this, index, self.html() );
-                               }
-                               self.domManip( args, callback );
-                       });
-               }
-
-               if ( l ) {
-                       fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
-                       first = fragment.firstChild;
-
-                       if ( fragment.childNodes.length === 1 ) {
-                               fragment = first;
-                       }
-
-                       if ( first ) {
-                               scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-                               hasScripts = scripts.length;
-
-                               // Use the original fragment for the last item instead of the first because it can end up
-                               // being emptied incorrectly in certain situations (#8070).
-                               for ( ; i < l; i++ ) {
-                                       node = fragment;
-
-                                       if ( i !== iNoClone ) {
-                                               node = jQuery.clone( node, true, true );
-
-                                               // Keep references to cloned scripts for later restoration
-                                               if ( hasScripts ) {
-                                                       jQuery.merge( scripts, getAll( node, "script" ) );
-                                               }
-                                       }
-
-                                       callback.call( this[i], node, i );
-                               }
+               var ignored = [];
 
-                               if ( hasScripts ) {
-                                       doc = scripts[ scripts.length - 1 ].ownerDocument;
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
 
-                                       // Reenable scripts
-                                       jQuery.map( scripts, restoreScript );
-
-                                       // Evaluate executable scripts on first document insertion
-                                       for ( i = 0; i < hasScripts; i++ ) {
-                                               node = scripts[ i ];
-                                               if ( rscriptType.test( node.type || "" ) &&
-                                                       !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
-                                                       if ( node.src ) {
-                                                               // Optional AJAX dependency, but won't run scripts if not present
-                                                               if ( jQuery._evalUrl ) {
-                                                                       jQuery._evalUrl( node.src );
-                                                               }
-                                                       } else {
-                                                               jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
-                                                       }
-                                               }
-                                       }
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
                                }
-
-                               // Fix #11809: Avoid leaking memory
-                               fragment = first = null;
                        }
-               }
 
-               return this;
+               // Force callback invocation
+               }, ignored );
        }
-});
+} );
 
-jQuery.each({
+jQuery.each( {
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
@@ -6006,579 +6048,289 @@ jQuery.each({
 }, function( name, original ) {
        jQuery.fn[ name ] = function( selector ) {
                var elems,
-                       i = 0,
                        ret = [],
                        insert = jQuery( selector ),
-                       last = insert.length - 1;
+                       last = insert.length - 1,
+                       i = 0;
 
                for ( ; i <= last; i++ ) {
-                       elems = i === last ? this : this.clone(true);
-                       jQuery( insert[i] )[ original ]( elems );
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
 
-                       // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+                       // Support: Android <=4.0 only, PhantomJS 1 only
+                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
                        push.apply( ret, elems.get() );
                }
 
                return this.pushStack( ret );
        };
-});
-
-
-var iframe,
-       elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
-       var style,
-               elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
-               // getDefaultComputedStyle might be reliably used only on attached element
-               display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
+} );
+var rmargin = ( /^margin/ );
 
-                       // Use of this method is a temporary fix (more like optmization) until something better comes along,
-                       // since it was removed from specification and supported only in FF
-                       style.display : jQuery.css( elem[ 0 ], "display" );
-
-       // We don't have any data stored on the element,
-       // so use "detach" method as fast way to get rid of the element
-       elem.detach();
-
-       return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
-       var doc = document,
-               display = elemdisplay[ nodeName ];
-
-       if ( !display ) {
-               display = actualDisplay( nodeName, doc );
-
-               // If the simple way fails, read from inside an iframe
-               if ( display === "none" || !display ) {
-
-                       // Use the already-created iframe if possible
-                       iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
 
-                       // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
-                       doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
+var getStyles = function( elem ) {
 
-                       // Support: IE
-                       doc.write();
-                       doc.close();
+               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
 
-                       display = actualDisplay( nodeName, doc );
-                       iframe.detach();
+               if ( !view || !view.opener ) {
+                       view = window;
                }
 
-               // Store the correct default display
-               elemdisplay[ nodeName ] = display;
-       }
-
-       return display;
-}
-
+               return view.getComputedStyle( elem );
+       };
 
-(function() {
-       var shrinkWrapBlocksVal;
 
-       support.shrinkWrapBlocks = function() {
-               if ( shrinkWrapBlocksVal != null ) {
-                       return shrinkWrapBlocksVal;
-               }
 
-               // Will be changed later if needed.
-               shrinkWrapBlocksVal = false;
+( function() {
 
-               // Minified: var b,c,d
-               var div, body, container;
+       // Executing both pixelPosition & boxSizingReliable tests require only one layout
+       // so they're executed at the same time to save the second computation.
+       function computeStyleTests() {
 
-               body = document.getElementsByTagName( "body" )[ 0 ];
-               if ( !body || !body.style ) {
-                       // Test fired too early or in an unsupported environment, exit.
+               // This is a singleton, we need to execute it only once
+               if ( !div ) {
                        return;
                }
 
-               // Setup
-               div = document.createElement( "div" );
-               container = document.createElement( "div" );
-               container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-               body.appendChild( container ).appendChild( div );
-
-               // Support: IE6
-               // Check if elements with layout shrink-wrap their children
-               if ( typeof div.style.zoom !== strundefined ) {
-                       // Reset CSS: box-sizing; display; margin; border
-                       div.style.cssText =
-                               // Support: Firefox<29, Android 2.3
-                               // Vendor-prefix box-sizing
-                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-                               "box-sizing:content-box;display:block;margin:0;border:0;" +
-                               "padding:1px;width:1px;zoom:1";
-                       div.appendChild( document.createElement( "div" ) ).style.width = "5px";
-                       shrinkWrapBlocksVal = div.offsetWidth !== 3;
-               }
-
-               body.removeChild( container );
-
-               return shrinkWrapBlocksVal;
-       };
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
+               div.style.cssText =
+                       "box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+               div.innerHTML = "";
+               documentElement.appendChild( container );
 
-var getStyles, curCSS,
-       rposition = /^(top|right|bottom|left)$/;
+               var divStyle = window.getComputedStyle( div );
+               pixelPositionVal = divStyle.top !== "1%";
 
-if ( window.getComputedStyle ) {
-       getStyles = function( elem ) {
-               // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
-               // IE throws on elements created in popups
-               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-               if ( elem.ownerDocument.defaultView.opener ) {
-                       return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
-               }
+               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+               reliableMarginLeftVal = divStyle.marginLeft === "2px";
+               boxSizingReliableVal = divStyle.width === "4px";
 
-               return window.getComputedStyle( elem, null );
-       };
+               // Support: Android 4.0 - 4.3 only
+               // Some styles come back with percentage values, even though they shouldn't
+               div.style.marginRight = "50%";
+               pixelMarginRightVal = divStyle.marginRight === "4px";
 
-       curCSS = function( elem, name, computed ) {
-               var width, minWidth, maxWidth, ret,
-                       style = elem.style;
+               documentElement.removeChild( container );
 
-               computed = computed || getStyles( elem );
+               // Nullify the div so it wouldn't be stored in the memory and
+               // it will also be a sign that checks already performed
+               div = null;
+       }
 
-               // getPropertyValue is only needed for .css('filter') in IE9, see #12537
-               ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
 
-               if ( computed ) {
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
 
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-                               ret = jQuery.style( elem, name );
-                       }
+       // Support: IE <=9 - 11 only
+       // Style of cloned element affects source element cloned (#8908)
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
 
-                       // A tribute to the "awesome hack by Dean Edwards"
-                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
-                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
-                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       container.appendChild( div );
 
-                               // Remember the original values
-                               width = style.width;
-                               minWidth = style.minWidth;
-                               maxWidth = style.maxWidth;
+       jQuery.extend( support, {
+               pixelPosition: function() {
+                       computeStyleTests();
+                       return pixelPositionVal;
+               },
+               boxSizingReliable: function() {
+                       computeStyleTests();
+                       return boxSizingReliableVal;
+               },
+               pixelMarginRight: function() {
+                       computeStyleTests();
+                       return pixelMarginRightVal;
+               },
+               reliableMarginLeft: function() {
+                       computeStyleTests();
+                       return reliableMarginLeftVal;
+               }
+       } );
+} )();
 
-                               // Put in the new values to get a computed value out
-                               style.minWidth = style.maxWidth = style.width = ret;
-                               ret = computed.width;
 
-                               // Revert the changed values
-                               style.width = width;
-                               style.minWidth = minWidth;
-                               style.maxWidth = maxWidth;
-                       }
-               }
+function curCSS( elem, name, computed ) {
+       var width, minWidth, maxWidth, ret,
 
-               // Support: IE
-               // IE returns zIndex value as an integer.
-               return ret === undefined ?
-                       ret :
-                       ret + "";
-       };
-} else if ( document.documentElement.currentStyle ) {
-       getStyles = function( elem ) {
-               return elem.currentStyle;
-       };
+               // Support: Firefox 51+
+               // Retrieving style before computed somehow
+               // fixes an issue with getting wrong values
+               // on detached elements
+               style = elem.style;
 
-       curCSS = function( elem, name, computed ) {
-               var left, rs, rsLeft, ret,
-                       style = elem.style;
+       computed = computed || getStyles( elem );
 
-               computed = computed || getStyles( elem );
-               ret = computed ? computed[ name ] : undefined;
+       // getPropertyValue is needed for:
+       //   .css('filter') (IE 9 only, #12537)
+       //   .css('--customProperty) (#3144)
+       if ( computed ) {
+               ret = computed.getPropertyValue( name ) || computed[ name ];
 
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret == null && style && style[ name ] ) {
-                       ret = style[ name ];
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
                }
 
-               // From the awesome hack by Dean Edwards
-               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-               // If we're not dealing with a regular pixel number
-               // but a number that has a weird ending, we need to convert it to pixels
-               // but not position css attributes, as those are proportional to the parent element instead
-               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
-               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+               // A tribute to the "awesome hack by Dean Edwards"
+               // Android Browser returns percentage for some values,
+               // but width seems to be reliably pixels.
+               // This is against the CSSOM draft spec:
+               // https://drafts.csswg.org/cssom/#resolved-values
+               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
 
                        // Remember the original values
-                       left = style.left;
-                       rs = elem.runtimeStyle;
-                       rsLeft = rs && rs.left;
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
 
                        // Put in the new values to get a computed value out
-                       if ( rsLeft ) {
-                               rs.left = elem.currentStyle.left;
-                       }
-                       style.left = name === "fontSize" ? "1em" : ret;
-                       ret = style.pixelLeft + "px";
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
 
                        // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               rs.left = rsLeft;
-                       }
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
                }
+       }
+
+       return ret !== undefined ?
 
-               // Support: IE
+               // Support: IE <=9 - 11 only
                // IE returns zIndex value as an integer.
-               return ret === undefined ?
-                       ret :
-                       ret + "" || "auto";
-       };
+               ret + "" :
+               ret;
 }
 
 
-
-
 function addGetHookIf( conditionFn, hookFn ) {
+
        // Define the hook, we'll check on the first run if it's really needed.
        return {
                get: function() {
-                       var condition = conditionFn();
+                       if ( conditionFn() ) {
 
-                       if ( condition == null ) {
-                               // The test was not ready at this point; screw the hook this time
-                               // but check again when needed next time.
-                               return;
-                       }
-
-                       if ( condition ) {
-                               // Hook not needed (or it's not possible to use it due to missing dependency),
-                               // remove it.
-                               // Since there are no other hooks for marginRight, remove the whole object.
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
                                delete this.get;
                                return;
                        }
 
                        // Hook needed; redefine it so that the support test is not executed again.
-
-                       return (this.get = hookFn).apply( this, arguments );
+                       return ( this.get = hookFn ).apply( this, arguments );
                }
        };
 }
 
 
-(function() {
-       // Minified: var b,c,d,e,f,g, h,i
-       var div, style, a, pixelPositionVal, boxSizingReliableVal,
-               reliableHiddenOffsetsVal, reliableMarginRightVal;
-
-       // Setup
-       div = document.createElement( "div" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-       a = div.getElementsByTagName( "a" )[ 0 ];
-       style = a && a.style;
-
-       // Finish early in limited (non-browser) environments
-       if ( !style ) {
-               return;
-       }
-
-       style.cssText = "float:left;opacity:.5";
-
-       // Support: IE<9
-       // Make sure that element opacity exists (as opposed to filter)
-       support.opacity = style.opacity === "0.5";
-
-       // Verify style float existence
-       // (IE uses styleFloat instead of cssFloat)
-       support.cssFloat = !!style.cssFloat;
-
-       div.style.backgroundClip = "content-box";
-       div.cloneNode( true ).style.backgroundClip = "";
-       support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-       // Support: Firefox<29, Android 2.3
-       // Vendor-prefix box-sizing
-       support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
-               style.WebkitBoxSizing === "";
-
-       jQuery.extend(support, {
-               reliableHiddenOffsets: function() {
-                       if ( reliableHiddenOffsetsVal == null ) {
-                               computeStyleTests();
-                       }
-                       return reliableHiddenOffsetsVal;
-               },
-
-               boxSizingReliable: function() {
-                       if ( boxSizingReliableVal == null ) {
-                               computeStyleTests();
-                       }
-                       return boxSizingReliableVal;
-               },
-
-               pixelPosition: function() {
-                       if ( pixelPositionVal == null ) {
-                               computeStyleTests();
-                       }
-                       return pixelPositionVal;
-               },
-
-               // Support: Android 2.3
-               reliableMarginRight: function() {
-                       if ( reliableMarginRightVal == null ) {
-                               computeStyleTests();
-                       }
-                       return reliableMarginRightVal;
-               }
-       });
-
-       function computeStyleTests() {
-               // Minified: var b,c,d,j
-               var div, body, container, contents;
-
-               body = document.getElementsByTagName( "body" )[ 0 ];
-               if ( !body || !body.style ) {
-                       // Test fired too early or in an unsupported environment, exit.
-                       return;
-               }
-
-               // Setup
-               div = document.createElement( "div" );
-               container = document.createElement( "div" );
-               container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-               body.appendChild( container ).appendChild( div );
-
-               div.style.cssText =
-                       // Support: Firefox<29, Android 2.3
-                       // Vendor-prefix box-sizing
-                       "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
-                       "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
-                       "border:1px;padding:1px;width:4px;position:absolute";
-
-               // Support: IE<9
-               // Assume reasonable values in the absence of getComputedStyle
-               pixelPositionVal = boxSizingReliableVal = false;
-               reliableMarginRightVal = true;
-
-               // Check for getComputedStyle so that this code is not run in IE<9.
-               if ( window.getComputedStyle ) {
-                       pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
-                       boxSizingReliableVal =
-                               ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
-                       // Support: Android 2.3
-                       // Div with explicit width and no margin-right incorrectly
-                       // gets computed margin-right based on width of container (#3333)
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       contents = div.appendChild( document.createElement( "div" ) );
-
-                       // Reset CSS: box-sizing; display; margin; border; padding
-                       contents.style.cssText = div.style.cssText =
-                               // Support: Firefox<29, Android 2.3
-                               // Vendor-prefix box-sizing
-                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-                               "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
-                       contents.style.marginRight = contents.style.width = "0";
-                       div.style.width = "1px";
-
-                       reliableMarginRightVal =
-                               !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
-
-                       div.removeChild( contents );
-               }
-
-               // Support: IE8
-               // Check if table cells still have offsetWidth/Height when they are set
-               // to display:none and there are still other visible table cells in a
-               // table row; if so, offsetWidth/Height are not reliable for use when
-               // determining if an element has been hidden directly using
-               // display:none (it is still safe to use offsets if a parent element is
-               // hidden; don safety goggles and see bug #4512 for more information).
-               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-               contents = div.getElementsByTagName( "td" );
-               contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
-               reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-               if ( reliableHiddenOffsetsVal ) {
-                       contents[ 0 ].style.display = "";
-                       contents[ 1 ].style.display = "none";
-                       reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-               }
-
-               body.removeChild( container );
-       }
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
-       var ret, name,
-               old = {};
-
-       // Remember the old values, and insert the new ones
-       for ( name in options ) {
-               old[ name ] = elem.style[ name ];
-               elem.style[ name ] = options[ name ];
-       }
-
-       ret = callback.apply( elem, args || [] );
-
-       // Revert the old values
-       for ( name in options ) {
-               elem.style[ name ] = old[ name ];
-       }
-
-       return ret;
-};
-
-
 var
-               ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity\s*=\s*([^)]*)/,
 
-       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
-       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
        rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-       rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
-       rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
+       rcustomProp = /^--/,
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
        cssNormalTransform = {
                letterSpacing: "0",
                fontWeight: "400"
        },
 
-       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
+       cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
 
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
 
-       // shortcut for names that are not vendor prefixed
-       if ( name in style ) {
+       // Shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
                return name;
        }
 
-       // check for vendor prefixed names
-       var capName = name.charAt(0).toUpperCase() + name.slice(1),
-               origName = name,
+       // Check for vendor prefixed names
+       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
                i = cssPrefixes.length;
 
        while ( i-- ) {
                name = cssPrefixes[ i ] + capName;
-               if ( name in style ) {
+               if ( name in emptyStyle ) {
                        return name;
                }
        }
-
-       return origName;
 }
 
-function showHide( elements, show ) {
-       var display, elem, hidden,
-               values = [],
-               index = 0,
-               length = elements.length;
-
-       for ( ; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-
-               values[ index ] = jQuery._data( elem, "olddisplay" );
-               display = elem.style.display;
-               if ( show ) {
-                       // Reset the inline display of this element to learn if it is
-                       // being hidden by cascaded rules or not
-                       if ( !values[ index ] && display === "none" ) {
-                               elem.style.display = "";
-                       }
-
-                       // Set elements which have been overridden with display: none
-                       // in a stylesheet to whatever the default browser style is
-                       // for such an element
-                       if ( elem.style.display === "" && isHidden( elem ) ) {
-                               values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-                       }
-               } else {
-                       hidden = isHidden( elem );
-
-                       if ( display && display !== "none" || !hidden ) {
-                               jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
-                       }
-               }
-       }
-
-       // Set the display of most of the elements in a second loop
-       // to avoid the constant reflow
-       for ( index = 0; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-                       elem.style.display = show ? values[ index ] || "" : "none";
-               }
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+       var ret = jQuery.cssProps[ name ];
+       if ( !ret ) {
+               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
        }
-
-       return elements;
+       return ret;
 }
 
 function setPositiveNumber( elem, value, subtract ) {
-       var matches = rnumsplit.exec( value );
+
+       // Any relative (+/-) values have already been
+       // normalized at this point
+       var matches = rcssNum.exec( value );
        return matches ?
+
                // Guard against undefined "subtract", e.g., when used as in cssHooks
-               Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
                value;
 }
 
 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-       var i = extra === ( isBorderBox ? "border" : "content" ) ?
-               // If we already have the right measurement, avoid augmentation
-               4 :
-               // Otherwise initialize for horizontal or vertical properties
-               name === "width" ? 1 : 0,
-
+       var i,
                val = 0;
 
+       // If we already have the right measurement, avoid augmentation
+       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+               i = 4;
+
+       // Otherwise initialize for horizontal or vertical properties
+       } else {
+               i = name === "width" ? 1 : 0;
+       }
+
        for ( ; i < 4; i += 2 ) {
-               // both box models exclude margin, so add it if we want it
+
+               // Both box models exclude margin, so add it if we want it
                if ( extra === "margin" ) {
                        val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
                }
 
                if ( isBorderBox ) {
+
                        // border-box includes padding, so remove it if we want content
                        if ( extra === "content" ) {
                                val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
                        }
 
-                       // at this point, extra isn't border nor margin, so remove border
+                       // At this point, extra isn't border nor margin, so remove border
                        if ( extra !== "margin" ) {
                                val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
                        }
                } else {
-                       // at this point, extra isn't content, so add padding
+
+                       // At this point, extra isn't content, so add padding
                        val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
 
-                       // at this point, extra isn't content nor padding, so add border
+                       // At this point, extra isn't content nor padding, so add border
                        if ( extra !== "padding" ) {
                                val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
                        }
@@ -6590,36 +6342,32 @@ function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
 
 function getWidthOrHeight( elem, name, extra ) {
 
-       // Start with offset property, which is equivalent to the border-box value
-       var valueIsBorderBox = true,
-               val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+       // Start with computed style
+       var valueIsBorderBox,
                styles = getStyles( elem ),
-               isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-       // some non-html elements return undefined for offsetWidth, so check for null/undefined
-       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
-       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
-       if ( val <= 0 || val == null ) {
-               // Fall back to computed then uncomputed css if necessary
-               val = curCSS( elem, name, styles );
-               if ( val < 0 || val == null ) {
-                       val = elem.style[ name ];
-               }
+               val = curCSS( elem, name, styles ),
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
 
-               // Computed unit is not pixels. Stop here and return.
-               if ( rnumnonpx.test(val) ) {
-                       return val;
-               }
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test( val ) ) {
+               return val;
+       }
 
-               // we need the check for style in case a browser which returns unreliable values
-               // for getComputedStyle silently falls back to the reliable elem.style
-               valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
+       // Check for style in case a browser which returns unreliable values
+       // for getComputedStyle silently falls back to the reliable elem.style
+       valueIsBorderBox = isBorderBox &&
+               ( support.boxSizingReliable() || val === elem.style[ name ] );
 
-               // Normalize "", auto, and prepare for extra
-               val = parseFloat( val ) || 0;
+       // Fall back to offsetWidth/Height when value is "auto"
+       // This happens for inline elements with no explicit setting (gh-3571)
+       if ( val === "auto" ) {
+               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
        }
 
-       // use the active box-sizing model to add/subtract irrelevant styles
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Use the active box-sizing model to add/subtract irrelevant styles
        return ( val +
                augmentWidthOrHeight(
                        elem,
@@ -6631,13 +6379,15 @@ function getWidthOrHeight( elem, name, extra ) {
        ) + "px";
 }
 
-jQuery.extend({
+jQuery.extend( {
+
        // Add in style property hooks for overriding the default
        // behavior of getting and setting a style property
        cssHooks: {
                opacity: {
                        get: function( elem, computed ) {
                                if ( computed ) {
+
                                        // We should always get a number back from opacity
                                        var ret = curCSS( elem, "opacity" );
                                        return ret === "" ? "1" : ret;
@@ -6648,6 +6398,7 @@ jQuery.extend({
 
        // Don't automatically add "px" to these possibly-unitless properties
        cssNumber: {
+               "animationIterationCount": true,
                "columnCount": true,
                "fillOpacity": true,
                "flexGrow": true,
@@ -6665,12 +6416,12 @@ jQuery.extend({
        // Add in properties whose names you wish to fix before
        // setting or getting the value
        cssProps: {
-               // normalize float css property
-               "float": support.cssFloat ? "cssFloat" : "styleFloat"
+               "float": "cssFloat"
        },
 
        // Get and set the style property on a DOM Node
        style: function( elem, name, value, extra ) {
+
                // Don't set styles on text and comment nodes
                if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
                        return;
@@ -6679,54 +6430,63 @@ jQuery.extend({
                // Make sure that we're working with the right name
                var ret, type, hooks,
                        origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name ),
                        style = elem.style;
 
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+               // Make sure that we're working with the right name. We don't
+               // want to query the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
 
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
+               // Gets hook for the prefixed version, then unprefixed version
                hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
                // Check if we're setting a value
                if ( value !== undefined ) {
                        type = typeof value;
 
-                       // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
                                // Fixes bug #9237
                                type = "number";
                        }
 
-                       // Make sure that null and NaN values aren't set. See: #7116
+                       // Make sure that null and NaN values aren't set (#7116)
                        if ( value == null || value !== value ) {
                                return;
                        }
 
-                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                               value += "px";
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
                        }
 
-                       // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
-                       // but it would mean to define eight (for every problematic property) identical functions
-                       if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+                       // background-* props affect original clone's values
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
                                style[ name ] = "inherit";
                        }
 
                        // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
 
-                               // Support: IE
-                               // Swallow errors from 'invalid' CSS values (#5509)
-                               try {
+                               if ( isCustomProp ) {
+                                       style.setProperty( name, value );
+                               } else {
                                        style[ name ] = value;
-                               } catch(e) {}
+                               }
                        }
 
                } else {
+
                        // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
                                return ret;
                        }
 
@@ -6736,14 +6496,18 @@ jQuery.extend({
        },
 
        css: function( elem, name, extra, styles ) {
-               var num, val, hooks,
-                       origName = jQuery.camelCase( name );
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name );
 
-               // Make sure that we're working with the right name
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+               // Make sure that we're working with the right name. We don't
+               // want to modify the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
 
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
+               // Try prefixed name followed by the unprefixed name
                hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
                // If a hook was provided get the computed value from there
@@ -6756,106 +6520,83 @@ jQuery.extend({
                        val = curCSS( elem, name, styles );
                }
 
-               //convert "normal" to computed value
+               // Convert "normal" to computed value
                if ( val === "normal" && name in cssNormalTransform ) {
                        val = cssNormalTransform[ name ];
                }
 
-               // Return, converting to number if forced or a qualifier was provided and val looks numeric
+               // Make numeric if forced or a qualifier was provided and val looks numeric
                if ( extra === "" || extra ) {
                        num = parseFloat( val );
-                       return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+                       return extra === true || isFinite( num ) ? num || 0 : val;
                }
+
                return val;
        }
-});
+} );
 
-jQuery.each([ "height", "width" ], function( i, name ) {
+jQuery.each( [ "height", "width" ], function( i, name ) {
        jQuery.cssHooks[ name ] = {
                get: function( elem, computed, extra ) {
                        if ( computed ) {
-                               // certain elements can have dimension info if we invisibly show them
-                               // however, it must have a current display style that would benefit from this
-                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
-                                       jQuery.swap( elem, cssShow, function() {
-                                               return getWidthOrHeight( elem, name, extra );
-                                       }) :
-                                       getWidthOrHeight( elem, name, extra );
+
+                               // Certain elements can have dimension info if we invisibly show them
+                               // but it must have a current display style that would benefit
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+                                       // Support: Safari 8+
+                                       // Table columns in Safari have non-zero offsetWidth & zero
+                                       // getBoundingClientRect().width unless display is changed.
+                                       // Support: IE <=11 only
+                                       // Running getBoundingClientRect on a disconnected node
+                                       // in IE throws an error.
+                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
                        }
                },
 
                set: function( elem, value, extra ) {
-                       var styles = extra && getStyles( elem );
-                       return setPositiveNumber( elem, value, extra ?
-                               augmentWidthOrHeight(
+                       var matches,
+                               styles = extra && getStyles( elem ),
+                               subtract = extra && augmentWidthOrHeight(
                                        elem,
                                        name,
                                        extra,
-                                       support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
                                        styles
-                               ) : 0
-                       );
-               }
-       };
-});
-
-if ( !support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
-
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
-
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       // if value === "", then remove inline opacity #12685
-                       if ( ( value >= 1 || value === "" ) &&
-                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-                                       style.removeAttribute ) {
+                               );
 
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
+                       // Convert to pixels if value adjustment is needed
+                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+                               ( matches[ 3 ] || "px" ) !== "px" ) {
 
-                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
-                               if ( value === "" || currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
+                               elem.style[ name ] = value;
+                               value = jQuery.css( elem, name );
                        }
 
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
+                       return setPositiveNumber( elem, value, subtract );
                }
        };
-}
+} );
 
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
        function( elem, computed ) {
                if ( computed ) {
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       // Work around by temporarily setting element display to inline-block
-                       return jQuery.swap( elem, { "display": "inline-block" },
-                               curCSS, [ elem, "marginRight" ] );
+                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+                               elem.getBoundingClientRect().left -
+                                       swap( elem, { marginLeft: 0 }, function() {
+                                               return elem.getBoundingClientRect().left;
+                                       } )
+                               ) + "px";
                }
        }
 );
 
 // These hooks are used by animate to expand properties
-jQuery.each({
+jQuery.each( {
        margin: "",
        padding: "",
        border: "Width"
@@ -6865,8 +6606,8 @@ jQuery.each({
                        var i = 0,
                                expanded = {},
 
-                               // assumes a single number if not a string
-                               parts = typeof value === "string" ? value.split(" ") : [ value ];
+                               // Assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
 
                        for ( ; i < 4; i++ ) {
                                expanded[ prefix + cssExpand[ i ] + suffix ] =
@@ -6880,16 +6621,16 @@ jQuery.each({
        if ( !rmargin.test( prefix ) ) {
                jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
        }
-});
+} );
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        css: function( name, value ) {
                return access( this, function( elem, name, value ) {
                        var styles, len,
                                map = {},
                                i = 0;
 
-                       if ( jQuery.isArray( name ) ) {
+                       if ( Array.isArray( name ) ) {
                                styles = getStyles( elem );
                                len = name.length;
 
@@ -6904,27 +6645,8 @@ jQuery.fn.extend({
                                jQuery.style( elem, name, value ) :
                                jQuery.css( elem, name );
                }, name, value, arguments.length > 1 );
-       },
-       show: function() {
-               return showHide( this, true );
-       },
-       hide: function() {
-               return showHide( this );
-       },
-       toggle: function( state ) {
-               if ( typeof state === "boolean" ) {
-                       return state ? this.show() : this.hide();
-               }
-
-               return this.each(function() {
-                       if ( isHidden( this ) ) {
-                               jQuery( this ).show();
-                       } else {
-                               jQuery( this ).hide();
-                       }
-               });
        }
-});
+} );
 
 
 function Tween( elem, options, prop, end, easing ) {
@@ -6937,7 +6659,7 @@ Tween.prototype = {
        init: function( elem, options, prop, end, easing, unit ) {
                this.elem = elem;
                this.prop = prop;
-               this.easing = easing || "swing";
+               this.easing = easing || jQuery.easing._default;
                this.options = options;
                this.start = this.now = this.cur();
                this.end = end;
@@ -6983,25 +6705,32 @@ Tween.propHooks = {
                get: function( tween ) {
                        var result;
 
-                       if ( tween.elem[ tween.prop ] != null &&
-                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+                       // Use a property on the element directly when it is not a DOM element,
+                       // or when there is no matching style property that exists.
+                       if ( tween.elem.nodeType !== 1 ||
+                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
                                return tween.elem[ tween.prop ];
                        }
 
-                       // passing an empty string as a 3rd parameter to .css will automatically
-                       // attempt a parseFloat and fallback to a string if the parse fails
-                       // so, simple values such as "10px" are parsed to Float.
-                       // complex values such as "rotate(1rad)" are returned as is.
+                       // Passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails.
+                       // Simple values such as "10px" are parsed to Float;
+                       // complex values such as "rotate(1rad)" are returned as-is.
                        result = jQuery.css( tween.elem, tween.prop, "" );
+
                        // Empty strings, null, undefined and "auto" are converted to 0.
                        return !result || result === "auto" ? 0 : result;
                },
                set: function( tween ) {
-                       // use step hook for back compat - use cssHook if its there - use .style if its
-                       // available and use plain properties where available
+
+                       // Use step hook for back compat.
+                       // Use cssHook if its there.
+                       // Use .style if available and use plain properties where available.
                        if ( jQuery.fx.step[ tween.prop ] ) {
                                jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+                       } else if ( tween.elem.nodeType === 1 &&
+                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+                                       jQuery.cssHooks[ tween.prop ] ) ) {
                                jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
                        } else {
                                tween.elem[ tween.prop ] = tween.now;
@@ -7010,9 +6739,8 @@ Tween.propHooks = {
        }
 };
 
-// Support: IE <=9
+// Support: IE <=9 only
 // Panic based approach to setting things on disconnected nodes
-
 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
        set: function( tween ) {
                if ( tween.elem.nodeType && tween.elem.parentNode ) {
@@ -7027,92 +6755,53 @@ jQuery.easing = {
        },
        swing: function( p ) {
                return 0.5 - Math.cos( p * Math.PI ) / 2;
-       }
+       },
+       _default: "swing"
 };
 
 jQuery.fx = Tween.prototype.init;
 
-// Back Compat <1.8 extension point
+// Back compat <1.8 extension point
 jQuery.fx.step = {};
 
 
 
 
 var
-       fxNow, timerId,
+       fxNow, inProgress,
        rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
-       rrun = /queueHooks$/,
-       animationPrefilters = [ defaultPrefilter ],
-       tweeners = {
-               "*": [ function( prop, value ) {
-                       var tween = this.createTween( prop, value ),
-                               target = tween.cur(),
-                               parts = rfxnum.exec( value ),
-                               unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+       rrun = /queueHooks$/;
 
-                               // Starting value computation is required for potential unit mismatches
-                               start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
-                                       rfxnum.exec( jQuery.css( tween.elem, prop ) ),
-                               scale = 1,
-                               maxIterations = 20;
-
-                       if ( start && start[ 3 ] !== unit ) {
-                               // Trust units reported by jQuery.css
-                               unit = unit || start[ 3 ];
-
-                               // Make sure we update the tween properties later on
-                               parts = parts || [];
-
-                               // Iteratively approximate from a nonzero starting point
-                               start = +target || 1;
-
-                               do {
-                                       // If previous iteration zeroed out, double until we get *something*
-                                       // Use a string for doubling factor so we don't accidentally see scale as unchanged below
-                                       scale = scale || ".5";
-
-                                       // Adjust and apply
-                                       start = start / scale;
-                                       jQuery.style( tween.elem, prop, start + unit );
-
-                               // Update scale, tolerating zero or NaN from tween.cur()
-                               // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
-                               } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
-                       }
-
-                       // Update tween properties
-                       if ( parts ) {
-                               start = tween.start = +start || +target || 0;
-                               tween.unit = unit;
-                               // If a +=/-= token was provided, we're doing a relative animation
-                               tween.end = parts[ 1 ] ?
-                                       start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
-                                       +parts[ 2 ];
-                       }
+function schedule() {
+       if ( inProgress ) {
+               if ( document.hidden === false && window.requestAnimationFrame ) {
+                       window.requestAnimationFrame( schedule );
+               } else {
+                       window.setTimeout( schedule, jQuery.fx.interval );
+               }
 
-                       return tween;
-               } ]
-       };
+               jQuery.fx.tick();
+       }
+}
 
 // Animations created synchronously will run synchronously
 function createFxNow() {
-       setTimeout(function() {
+       window.setTimeout( function() {
                fxNow = undefined;
-       });
+       } );
        return ( fxNow = jQuery.now() );
 }
 
 // Generate parameters to create a standard animation
 function genFx( type, includeWidth ) {
        var which,
-               attrs = { height: type },
-               i = 0;
+               i = 0,
+               attrs = { height: type };
 
-       // if we include width, step value is 1 to do all cssExpand values,
-       // if we don't include width, step value is 2 to skip over Left and Right
+       // If we include width, step value is 1 to do all cssExpand values,
+       // otherwise step value is 2 to skip over Left and Right
        includeWidth = includeWidth ? 1 : 0;
-       for ( ; i < 4 ; i += 2 - includeWidth ) {
+       for ( ; i < 4; i += 2 - includeWidth ) {
                which = cssExpand[ i ];
                attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
        }
@@ -7126,28 +6815,28 @@ function genFx( type, includeWidth ) {
 
 function createTween( value, prop, animation ) {
        var tween,
-               collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
                index = 0,
                length = collection.length;
        for ( ; index < length; index++ ) {
-               if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
 
-                       // we're done with this property
+                       // We're done with this property
                        return tween;
                }
        }
 }
 
 function defaultPrefilter( elem, props, opts ) {
-       /* jshint validthis: true */
-       var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+       var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+               isBox = "width" in props || "height" in props,
                anim = this,
                orig = {},
                style = elem.style,
-               hidden = elem.nodeType && isHidden( elem ),
-               dataShow = jQuery._data( elem, "fxshow" );
+               hidden = elem.nodeType && isHiddenWithinTree( elem ),
+               dataShow = dataPriv.get( elem, "fxshow" );
 
-       // handle queue: false promises
+       // Queue-skipping animations hijack the fx hooks
        if ( !opts.queue ) {
                hooks = jQuery._queueHooks( elem, "fx" );
                if ( hooks.unqueued == null ) {
@@ -7161,122 +6850,151 @@ function defaultPrefilter( elem, props, opts ) {
                }
                hooks.unqueued++;
 
-               anim.always(function() {
-                       // doing this makes sure that the complete handler will be called
-                       // before this completes
-                       anim.always(function() {
+               anim.always( function() {
+
+                       // Ensure the complete handler is called before this completes
+                       anim.always( function() {
                                hooks.unqueued--;
                                if ( !jQuery.queue( elem, "fx" ).length ) {
                                        hooks.empty.fire();
                                }
-                       });
-               });
-       }
-
-       // height/width overflow pass
-       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-               // Make sure that nothing sneaks out
-               // Record all 3 overflow attributes because IE does not
-               // change the overflow attribute when overflowX and
-               // overflowY are set to the same value
-               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-               // Set display property to inline-block for height/width
-               // animations on inline elements that are having width/height animated
-               display = jQuery.css( elem, "display" );
-
-               // Test default display if display is currently "none"
-               checkDisplay = display === "none" ?
-                       jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
-               if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
-                       // inline-level elements accept inline-block;
-                       // block-level elements need to be inline with layout
-                       if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
-                               style.display = "inline-block";
-                       } else {
-                               style.zoom = 1;
-                       }
-               }
-       }
-
-       if ( opts.overflow ) {
-               style.overflow = "hidden";
-               if ( !support.shrinkWrapBlocks() ) {
-                       anim.always(function() {
-                               style.overflow = opts.overflow[ 0 ];
-                               style.overflowX = opts.overflow[ 1 ];
-                               style.overflowY = opts.overflow[ 2 ];
-                       });
-               }
+                       } );
+               } );
        }
 
-       // show/hide pass
+       // Detect show/hide animations
        for ( prop in props ) {
                value = props[ prop ];
-               if ( rfxtypes.exec( value ) ) {
+               if ( rfxtypes.test( value ) ) {
                        delete props[ prop ];
                        toggle = toggle || value === "toggle";
                        if ( value === ( hidden ? "hide" : "show" ) ) {
 
-                               // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+                               // Pretend to be hidden if this is a "show" and
+                               // there is still data from a stopped show/hide
                                if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
                                        hidden = true;
+
+                               // Ignore all other no-op show/hide data
                                } else {
                                        continue;
                                }
                        }
                        orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
-               // Any non-fx value stops us from restoring the original display value
-               } else {
-                       display = undefined;
                }
        }
 
-       if ( !jQuery.isEmptyObject( orig ) ) {
-               if ( dataShow ) {
-                       if ( "hidden" in dataShow ) {
-                               hidden = dataShow.hidden;
-                       }
-               } else {
-                       dataShow = jQuery._data( elem, "fxshow", {} );
-               }
+       // Bail out if this is a no-op like .hide().hide()
+       propTween = !jQuery.isEmptyObject( props );
+       if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+               return;
+       }
+
+       // Restrict "overflow" and "display" styles during box animations
+       if ( isBox && elem.nodeType === 1 ) {
+
+               // Support: IE <=9 - 11, Edge 12 - 13
+               // Record all 3 overflow attributes because IE does not infer the shorthand
+               // from identically-valued overflowX and overflowY
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
 
-               // store state if its toggle - enables .stop().toggle() to "reverse"
-               if ( toggle ) {
-                       dataShow.hidden = !hidden;
+               // Identify a display type, preferring old show/hide data over the CSS cascade
+               restoreDisplay = dataShow && dataShow.display;
+               if ( restoreDisplay == null ) {
+                       restoreDisplay = dataPriv.get( elem, "display" );
                }
-               if ( hidden ) {
-                       jQuery( elem ).show();
-               } else {
-                       anim.done(function() {
-                               jQuery( elem ).hide();
-                       });
+               display = jQuery.css( elem, "display" );
+               if ( display === "none" ) {
+                       if ( restoreDisplay ) {
+                               display = restoreDisplay;
+                       } else {
+
+                               // Get nonempty value(s) by temporarily forcing visibility
+                               showHide( [ elem ], true );
+                               restoreDisplay = elem.style.display || restoreDisplay;
+                               display = jQuery.css( elem, "display" );
+                               showHide( [ elem ] );
+                       }
                }
-               anim.done(function() {
-                       var prop;
-                       jQuery._removeData( elem, "fxshow" );
-                       for ( prop in orig ) {
-                               jQuery.style( elem, prop, orig[ prop ] );
+
+               // Animate inline elements as inline-block
+               if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+                       if ( jQuery.css( elem, "float" ) === "none" ) {
+
+                               // Restore the original display value at the end of pure show/hide animations
+                               if ( !propTween ) {
+                                       anim.done( function() {
+                                               style.display = restoreDisplay;
+                                       } );
+                                       if ( restoreDisplay == null ) {
+                                               display = style.display;
+                                               restoreDisplay = display === "none" ? "" : display;
+                                       }
+                               }
+                               style.display = "inline-block";
                        }
-               });
-               for ( prop in orig ) {
-                       tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+               }
+       }
 
-                       if ( !( prop in dataShow ) ) {
-                               dataShow[ prop ] = tween.start;
-                               if ( hidden ) {
-                                       tween.end = tween.start;
-                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               anim.always( function() {
+                       style.overflow = opts.overflow[ 0 ];
+                       style.overflowX = opts.overflow[ 1 ];
+                       style.overflowY = opts.overflow[ 2 ];
+               } );
+       }
+
+       // Implement show/hide animations
+       propTween = false;
+       for ( prop in orig ) {
+
+               // General show/hide setup for this element animation
+               if ( !propTween ) {
+                       if ( dataShow ) {
+                               if ( "hidden" in dataShow ) {
+                                       hidden = dataShow.hidden;
                                }
+                       } else {
+                               dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+                       }
+
+                       // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+                       if ( toggle ) {
+                               dataShow.hidden = !hidden;
+                       }
+
+                       // Show elements before animating them
+                       if ( hidden ) {
+                               showHide( [ elem ], true );
                        }
+
+                       /* eslint-disable no-loop-func */
+
+                       anim.done( function() {
+
+                       /* eslint-enable no-loop-func */
+
+                               // The final step of a "hide" animation is actually hiding the element
+                               if ( !hidden ) {
+                                       showHide( [ elem ] );
+                               }
+                               dataPriv.remove( elem, "fxshow" );
+                               for ( prop in orig ) {
+                                       jQuery.style( elem, prop, orig[ prop ] );
+                               }
+                       } );
                }
 
-       // If this is a noop like .hide().hide(), restore an overwritten display value
-       } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
-               style.display = display;
+               // Per-property setup
+               propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+               if ( !( prop in dataShow ) ) {
+                       dataShow[ prop ] = propTween.start;
+                       if ( hidden ) {
+                               propTween.end = propTween.start;
+                               propTween.start = 0;
+                       }
+               }
        }
 }
 
@@ -7288,7 +7006,7 @@ function propFilter( props, specialEasing ) {
                name = jQuery.camelCase( index );
                easing = specialEasing[ name ];
                value = props[ index ];
-               if ( jQuery.isArray( value ) ) {
+               if ( Array.isArray( value ) ) {
                        easing = value[ 1 ];
                        value = props[ index ] = value[ 0 ];
                }
@@ -7303,8 +7021,8 @@ function propFilter( props, specialEasing ) {
                        value = hooks.expand( value );
                        delete props[ name ];
 
-                       // not quite $.extend, this wont overwrite keys already present.
-                       // also - reusing 'index' from above because we have the correct "name"
+                       // Not quite $.extend, this won't overwrite existing keys.
+                       // Reusing 'index' because we have the correct "name"
                        for ( index in value ) {
                                if ( !( index in props ) ) {
                                        props[ index ] = value[ index ];
@@ -7321,40 +7039,53 @@ function Animation( elem, properties, options ) {
        var result,
                stopped,
                index = 0,
-               length = animationPrefilters.length,
+               length = Animation.prefilters.length,
                deferred = jQuery.Deferred().always( function() {
-                       // don't match elem in the :animated selector
+
+                       // Don't match elem in the :animated selector
                        delete tick.elem;
-               }),
+               } ),
                tick = function() {
                        if ( stopped ) {
                                return false;
                        }
                        var currentTime = fxNow || createFxNow(),
                                remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-                               // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+
+                               // Support: Android 2.3 only
+                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
                                temp = remaining / animation.duration || 0,
                                percent = 1 - temp,
                                index = 0,
                                length = animation.tweens.length;
 
-                       for ( ; index < length ; index++ ) {
+                       for ( ; index < length; index++ ) {
                                animation.tweens[ index ].run( percent );
                        }
 
-                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
+                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
 
+                       // If there's more to do, yield
                        if ( percent < 1 && length ) {
                                return remaining;
-                       } else {
-                               deferred.resolveWith( elem, [ animation ] );
-                               return false;
                        }
+
+                       // If this was an empty animation, synthesize a final progress notification
+                       if ( !length ) {
+                               deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                       }
+
+                       // Resolve the animation and report its conclusion
+                       deferred.resolveWith( elem, [ animation ] );
+                       return false;
                },
-               animation = deferred.promise({
+               animation = deferred.promise( {
                        elem: elem,
                        props: jQuery.extend( {}, properties ),
-                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
+                       opts: jQuery.extend( true, {
+                               specialEasing: {},
+                               easing: jQuery.easing._default
+                       }, options ),
                        originalProperties: properties,
                        originalOptions: options,
                        startTime: fxNow || createFxNow(),
@@ -7368,34 +7099,39 @@ function Animation( elem, properties, options ) {
                        },
                        stop: function( gotoEnd ) {
                                var index = 0,
-                                       // if we are going to the end, we want to run all the tweens
+
+                                       // If we are going to the end, we want to run all the tweens
                                        // otherwise we skip this part
                                        length = gotoEnd ? animation.tweens.length : 0;
                                if ( stopped ) {
                                        return this;
                                }
                                stopped = true;
-                               for ( ; index < length ; index++ ) {
+                               for ( ; index < length; index++ ) {
                                        animation.tweens[ index ].run( 1 );
                                }
 
-                               // resolve when we played the last frame
-                               // otherwise, reject
+                               // Resolve when we played the last frame; otherwise, reject
                                if ( gotoEnd ) {
+                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
                                        deferred.resolveWith( elem, [ animation, gotoEnd ] );
                                } else {
                                        deferred.rejectWith( elem, [ animation, gotoEnd ] );
                                }
                                return this;
                        }
-               }),
+               } ),
                props = animation.props;
 
        propFilter( props, animation.opts.specialEasing );
 
-       for ( ; index < length ; index++ ) {
-               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+       for ( ; index < length; index++ ) {
+               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
                if ( result ) {
+                       if ( jQuery.isFunction( result.stop ) ) {
+                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+                                       jQuery.proxy( result.stop, result );
+                       }
                        return result;
                }
        }
@@ -7406,49 +7142,63 @@ function Animation( elem, properties, options ) {
                animation.opts.start.call( elem, animation );
        }
 
+       // Attach callbacks from options
+       animation
+               .progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+
        jQuery.fx.timer(
                jQuery.extend( tick, {
                        elem: elem,
                        anim: animation,
                        queue: animation.opts.queue
-               })
+               } )
        );
 
-       // attach callbacks from options
-       return animation.progress( animation.opts.progress )
-               .done( animation.opts.done, animation.opts.complete )
-               .fail( animation.opts.fail )
-               .always( animation.opts.always );
+       return animation;
 }
 
 jQuery.Animation = jQuery.extend( Animation, {
+
+       tweeners: {
+               "*": [ function( prop, value ) {
+                       var tween = this.createTween( prop, value );
+                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+                       return tween;
+               } ]
+       },
+
        tweener: function( props, callback ) {
                if ( jQuery.isFunction( props ) ) {
                        callback = props;
                        props = [ "*" ];
                } else {
-                       props = props.split(" ");
+                       props = props.match( rnothtmlwhite );
                }
 
                var prop,
                        index = 0,
                        length = props.length;
 
-               for ( ; index < length ; index++ ) {
+               for ( ; index < length; index++ ) {
                        prop = props[ index ];
-                       tweeners[ prop ] = tweeners[ prop ] || [];
-                       tweeners[ prop ].unshift( callback );
+                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+                       Animation.tweeners[ prop ].unshift( callback );
                }
        },
 
+       prefilters: [ defaultPrefilter ],
+
        prefilter: function( callback, prepend ) {
                if ( prepend ) {
-                       animationPrefilters.unshift( callback );
+                       Animation.prefilters.unshift( callback );
                } else {
-                       animationPrefilters.push( callback );
+                       Animation.prefilters.push( callback );
                }
        }
-});
+} );
 
 jQuery.speed = function( speed, easing, fn ) {
        var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
@@ -7458,10 +7208,22 @@ jQuery.speed = function( speed, easing, fn ) {
                easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
        };
 
-       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+       // Go to the end state if fx are off
+       if ( jQuery.fx.off ) {
+               opt.duration = 0;
+
+       } else {
+               if ( typeof opt.duration !== "number" ) {
+                       if ( opt.duration in jQuery.fx.speeds ) {
+                               opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+                       } else {
+                               opt.duration = jQuery.fx.speeds._default;
+                       }
+               }
+       }
 
-       // normalize opt.queue - true/undefined/null -> "fx"
+       // Normalize opt.queue - true/undefined/null -> "fx"
        if ( opt.queue == null || opt.queue === true ) {
                opt.queue = "fx";
        }
@@ -7482,24 +7244,25 @@ jQuery.speed = function( speed, easing, fn ) {
        return opt;
 };
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        fadeTo: function( speed, to, easing, callback ) {
 
-               // show any hidden elements after setting opacity to 0
-               return this.filter( isHidden ).css( "opacity", 0 ).show()
+               // Show any hidden elements after setting opacity to 0
+               return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
 
-                       // animate to the value specified
-                       .end().animate({ opacity: to }, speed, easing, callback );
+                       // Animate to the value specified
+                       .end().animate( { opacity: to }, speed, easing, callback );
        },
        animate: function( prop, speed, easing, callback ) {
                var empty = jQuery.isEmptyObject( prop ),
                        optall = jQuery.speed( speed, easing, callback ),
                        doAnimation = function() {
+
                                // Operate on a copy of prop so per-property easing won't be lost
                                var anim = Animation( this, jQuery.extend( {}, prop ), optall );
 
                                // Empty animations, or finishing resolves immediately
-                               if ( empty || jQuery._data( this, "finish" ) ) {
+                               if ( empty || dataPriv.get( this, "finish" ) ) {
                                        anim.stop( true );
                                }
                        };
@@ -7525,11 +7288,11 @@ jQuery.fn.extend({
                        this.queue( type || "fx", [] );
                }
 
-               return this.each(function() {
+               return this.each( function() {
                        var dequeue = true,
                                index = type != null && type + "queueHooks",
                                timers = jQuery.timers,
-                               data = jQuery._data( this );
+                               data = dataPriv.get( this );
 
                        if ( index ) {
                                if ( data[ index ] && data[ index ].stop ) {
@@ -7544,44 +7307,46 @@ jQuery.fn.extend({
                        }
 
                        for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                               if ( timers[ index ].elem === this &&
+                                       ( type == null || timers[ index ].queue === type ) ) {
+
                                        timers[ index ].anim.stop( gotoEnd );
                                        dequeue = false;
                                        timers.splice( index, 1 );
                                }
                        }
 
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
+                       // Start the next in the queue if the last step wasn't forced.
+                       // Timers currently will call their complete callbacks, which
+                       // will dequeue but only if they were gotoEnd.
                        if ( dequeue || !gotoEnd ) {
                                jQuery.dequeue( this, type );
                        }
-               });
+               } );
        },
        finish: function( type ) {
                if ( type !== false ) {
                        type = type || "fx";
                }
-               return this.each(function() {
+               return this.each( function() {
                        var index,
-                               data = jQuery._data( this ),
+                               data = dataPriv.get( this ),
                                queue = data[ type + "queue" ],
                                hooks = data[ type + "queueHooks" ],
                                timers = jQuery.timers,
                                length = queue ? queue.length : 0;
 
-                       // enable finishing flag on private data
+                       // Enable finishing flag on private data
                        data.finish = true;
 
-                       // empty the queue first
+                       // Empty the queue first
                        jQuery.queue( this, type, [] );
 
                        if ( hooks && hooks.stop ) {
                                hooks.stop.call( this, true );
                        }
 
-                       // look for any active animations, and finish them
+                       // Look for any active animations, and finish them
                        for ( index = timers.length; index--; ) {
                                if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
                                        timers[ index ].anim.stop( true );
@@ -7589,33 +7354,33 @@ jQuery.fn.extend({
                                }
                        }
 
-                       // look for any animations in the old queue and finish them
+                       // Look for any animations in the old queue and finish them
                        for ( index = 0; index < length; index++ ) {
                                if ( queue[ index ] && queue[ index ].finish ) {
                                        queue[ index ].finish.call( this );
                                }
                        }
 
-                       // turn off finishing flag
+                       // Turn off finishing flag
                        delete data.finish;
-               });
+               } );
        }
-});
+} );
 
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
        var cssFn = jQuery.fn[ name ];
        jQuery.fn[ name ] = function( speed, easing, callback ) {
                return speed == null || typeof speed === "boolean" ?
                        cssFn.apply( this, arguments ) :
                        this.animate( genFx( name, true ), speed, easing, callback );
        };
-});
+} );
 
 // Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx("show"),
-       slideUp: genFx("hide"),
-       slideToggle: genFx("toggle"),
+jQuery.each( {
+       slideDown: genFx( "show" ),
+       slideUp: genFx( "hide" ),
+       slideToggle: genFx( "toggle" ),
        fadeIn: { opacity: "show" },
        fadeOut: { opacity: "hide" },
        fadeToggle: { opacity: "toggle" }
@@ -7623,19 +7388,20 @@ jQuery.each({
        jQuery.fn[ name ] = function( speed, easing, callback ) {
                return this.animate( props, speed, easing, callback );
        };
-});
+} );
 
 jQuery.timers = [];
 jQuery.fx.tick = function() {
        var timer,
-               timers = jQuery.timers,
-               i = 0;
+               i = 0,
+               timers = jQuery.timers;
 
        fxNow = jQuery.now();
 
        for ( ; i < timers.length; i++ ) {
                timer = timers[ i ];
-               // Checks the timer has not already been removed
+
+               // Run the timer and safely remove it when done (allowing for external removal)
                if ( !timer() && timers[ i ] === timer ) {
                        timers.splice( i--, 1 );
                }
@@ -7649,383 +7415,138 @@ jQuery.fx.tick = function() {
 
 jQuery.fx.timer = function( timer ) {
        jQuery.timers.push( timer );
-       if ( timer() ) {
-               jQuery.fx.start();
-       } else {
-               jQuery.timers.pop();
-       }
+       jQuery.fx.start();
 };
 
 jQuery.fx.interval = 13;
-
 jQuery.fx.start = function() {
-       if ( !timerId ) {
-               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+       if ( inProgress ) {
+               return;
        }
+
+       inProgress = true;
+       schedule();
 };
 
 jQuery.fx.stop = function() {
-       clearInterval( timerId );
-       timerId = null;
+       inProgress = null;
 };
 
 jQuery.fx.speeds = {
        slow: 600,
        fast: 200,
+
        // Default speed
        _default: 400
 };
 
 
 // Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
 jQuery.fn.delay = function( time, type ) {
        time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
        type = type || "fx";
 
        return this.queue( type, function( next, hooks ) {
-               var timeout = setTimeout( next, time );
+               var timeout = window.setTimeout( next, time );
                hooks.stop = function() {
-                       clearTimeout( timeout );
+                       window.clearTimeout( timeout );
                };
-       });
+       } );
 };
 
 
-(function() {
-       // Minified: var a,b,c,d,e
-       var input, div, select, a, opt;
-
-       // Setup
-       div = document.createElement( "div" );
-       div.setAttribute( "className", "t" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-       a = div.getElementsByTagName("a")[ 0 ];
-
-       // First batch of tests.
-       select = document.createElement("select");
-       opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName("input")[ 0 ];
-
-       a.style.cssText = "top:1px";
-
-       // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-       support.getSetAttribute = div.className !== "t";
-
-       // Get the style information from getAttribute
-       // (IE uses .cssText instead)
-       support.style = /top/.test( a.getAttribute("style") );
+( function() {
+       var input = document.createElement( "input" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
 
-       // Make sure that URLs aren't manipulated
-       // (IE normalizes it by default)
-       support.hrefNormalized = a.getAttribute("href") === "/a";
+       input.type = "checkbox";
 
-       // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
-       support.checkOn = !!input.value;
+       // Support: Android <=4.3 only
+       // Default value for a checkbox should be "on"
+       support.checkOn = input.value !== "";
 
-       // Make sure that a selected-by-default option has a working selected property.
-       // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+       // Support: IE <=11 only
+       // Must access selectedIndex to make default options select
        support.optSelected = opt.selected;
 
-       // Tests for enctype support on a form (#6743)
-       support.enctype = !!document.createElement("form").enctype;
-
-       // Make sure that the options inside disabled selects aren't marked as disabled
-       // (WebKit marks them as disabled)
-       select.disabled = true;
-       support.optDisabled = !opt.disabled;
-
-       // Support: IE8 only
-       // Check if we can trust getAttribute("value")
+       // Support: IE <=11 only
+       // An input loses its value after becoming a radio
        input = document.createElement( "input" );
-       input.setAttribute( "value", "" );
-       support.input = input.getAttribute( "value" ) === "";
-
-       // Check if an input maintains its value after becoming a radio
        input.value = "t";
-       input.setAttribute( "type", "radio" );
+       input.type = "radio";
        support.radioValue = input.value === "t";
-})();
-
+} )();
 
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
-       val: function( value ) {
-               var hooks, ret, isFunction,
-                       elem = this[0];
 
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+var boolHook,
+       attrHandle = jQuery.expr.attrHandle;
 
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-                                       return ret;
-                               }
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
 
-                               ret = elem.value;
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
 
-                               return typeof ret === "string" ?
-                                       // handle most common string cases
-                                       ret.replace(rreturn, "") :
-                                       // handle cases where value is null/undef or number
-                                       ret == null ? "" : ret;
-                       }
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
 
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
                        return;
                }
 
-               isFunction = jQuery.isFunction( value );
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
 
-               return this.each(function( i ) {
-                       var val;
+               // Attribute hooks are determined by the lowercase version
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+               }
 
-                       if ( this.nodeType !== 1 ) {
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
                                return;
                        }
 
-                       if ( isFunction ) {
-                               val = value.call( this, i, jQuery( this ).val() );
-                       } else {
-                               val = value;
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
                        }
 
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-                       } else if ( jQuery.isArray( val ) ) {
-                               val = jQuery.map( val, function( value ) {
-                                       return value == null ? "" : value + "";
-                               });
-                       }
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
 
-                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
 
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
-                       }
-               });
-       }
-});
+               ret = jQuery.find.attr( elem, name );
 
-jQuery.extend({
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-                               var val = jQuery.find.attr( elem, "value" );
-                               return val != null ?
-                                       val :
-                                       // Support: IE10-11+
-                                       // option.text throws exceptions (#14686, #14858)
-                                       jQuery.trim( jQuery.text( elem ) );
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, option,
-                                       options = elem.options,
-                                       index = elem.selectedIndex,
-                                       one = elem.type === "select-one" || index < 0,
-                                       values = one ? null : [],
-                                       max = one ? index + 1 : options.length,
-                                       i = index < 0 ?
-                                               max :
-                                               one ? index : 0;
-
-                               // Loop through all the selected options
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
-
-                                       // oldIE doesn't update selected after form reset (#2551)
-                                       if ( ( option.selected || i === index ) &&
-                                                       // Don't return options that are disabled or in a disabled optgroup
-                                                       ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
-                                                       ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
-
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
-                                               }
-
-                                               // Multi-Selects return an array
-                                               values.push( value );
-                                       }
-                               }
-
-                               return values;
-                       },
-
-                       set: function( elem, value ) {
-                               var optionSet, option,
-                                       options = elem.options,
-                                       values = jQuery.makeArray( value ),
-                                       i = options.length;
-
-                               while ( i-- ) {
-                                       option = options[ i ];
-
-                                       if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
-                                               // Support: IE6
-                                               // When new option element is added to select box we need to
-                                               // force reflow of newly added node in order to workaround delay
-                                               // of initialization properties
-                                               try {
-                                                       option.selected = optionSet = true;
-
-                                               } catch ( _ ) {
-
-                                                       // Will be executed only in IE6
-                                                       option.scrollHeight;
-                                               }
-
-                                       } else {
-                                               option.selected = false;
-                                       }
-                               }
-
-                               // Force browsers to behave consistently when non-matching value is set
-                               if ( !optionSet ) {
-                                       elem.selectedIndex = -1;
-                               }
-
-                               return options;
-                       }
-               }
-       }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = {
-               set: function( elem, value ) {
-                       if ( jQuery.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                       }
-               }
-       };
-       if ( !support.checkOn ) {
-               jQuery.valHooks[ this ].get = function( elem ) {
-                       // Support: Webkit
-                       // "" is returned instead of "on" if a value isn't specified
-                       return elem.getAttribute("value") === null ? "on" : elem.value;
-               };
-       }
-});
-
-
-
-
-var nodeHook, boolHook,
-       attrHandle = jQuery.expr.attrHandle,
-       ruseDefault = /^(?:checked|selected)$/i,
-       getSetAttribute = support.getSetAttribute,
-       getSetInput = support.input;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return access( this, jQuery.attr, name, value, arguments.length > 1 );
-       },
-
-       removeAttr: function( name ) {
-               return this.each(function() {
-                       jQuery.removeAttr( this, name );
-               });
-       }
-});
-
-jQuery.extend({
-       attr: function( elem, name, value ) {
-               var hooks, ret,
-                       nType = elem.nodeType;
-
-               // don't get/set attributes on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               // Fallback to prop when attributes are not supported
-               if ( typeof elem.getAttribute === strundefined ) {
-                       return jQuery.prop( elem, name, value );
-               }
-
-               // All attributes are lowercase
-               // Grab necessary hook if one is defined
-               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-                       name = name.toLowerCase();
-                       hooks = jQuery.attrHooks[ name ] ||
-                               ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
-               }
-
-               if ( value !== undefined ) {
-
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-
-                       } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
-
-                       } else {
-                               elem.setAttribute( name, value + "" );
-                               return value;
-                       }
-
-               } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                       return ret;
-
-               } else {
-                       ret = jQuery.find.attr( elem, name );
-
-                       // Non-existent attributes return null, we normalize to undefined
-                       return ret == null ?
-                               undefined :
-                               ret;
-               }
-       },
-
-       removeAttr: function( elem, value ) {
-               var name, propName,
-                       i = 0,
-                       attrNames = value && value.match( rnotwhite );
-
-               if ( attrNames && elem.nodeType === 1 ) {
-                       while ( (name = attrNames[i++]) ) {
-                               propName = jQuery.propFix[ name ] || name;
-
-                               // Boolean attributes get special treatment (#10870)
-                               if ( jQuery.expr.match.bool.test( name ) ) {
-                                       // Set corresponding property to false
-                                       if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                                               elem[ propName ] = false;
-                                       // Support: IE<9
-                                       // Also clear defaultChecked/defaultSelected (if appropriate)
-                                       } else {
-                                               elem[ jQuery.camelCase( "default-" + name ) ] =
-                                                       elem[ propName ] = false;
-                                       }
-
-                               // See #9699 for explanation of this approach (setting first, then removal)
-                               } else {
-                                       jQuery.attr( elem, name, "" );
-                               }
-
-                               elem.removeAttribute( getSetAttribute ? name : propName );
-                       }
-               }
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
        },
 
        attrHooks: {
                type: {
                        set: function( elem, value ) {
-                               if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                       // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to default in case type is set after value during creation
+                               if ( !support.radioValue && value === "radio" &&
+                                       nodeName( elem, "input" ) ) {
                                        var val = elem.value;
                                        elem.setAttribute( "type", value );
                                        if ( val ) {
@@ -8035,264 +7556,181 @@ jQuery.extend({
                                }
                        }
                }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name,
+                       i = 0,
+
+                       // Attribute names can contain non-HTML whitespace characters
+                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+                       attrNames = value && value.match( rnothtmlwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               elem.removeAttribute( name );
+                       }
+               }
        }
-});
+} );
 
-// Hook for boolean attributes
+// Hooks for boolean attributes
 boolHook = {
        set: function( elem, value, name ) {
                if ( value === false ) {
+
                        // Remove boolean attributes when set to false
                        jQuery.removeAttr( elem, name );
-               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                       // IE<8 needs the *property* name
-                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-               // Use defaultChecked and defaultSelected for oldIE
                } else {
-                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+                       elem.setAttribute( name, name );
                }
-
                return name;
        }
 };
 
-// Retrieve booleans specially
 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
        var getter = attrHandle[ name ] || jQuery.find.attr;
 
-       attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
-               function( elem, name, isXML ) {
-                       var ret, handle;
-                       if ( !isXML ) {
-                               // Avoid an infinite loop by temporarily removing this function from the getter
-                               handle = attrHandle[ name ];
-                               attrHandle[ name ] = ret;
-                               ret = getter( elem, name, isXML ) != null ?
-                                       name.toLowerCase() :
-                                       null;
-                               attrHandle[ name ] = handle;
-                       }
-                       return ret;
-               } :
-               function( elem, name, isXML ) {
-                       if ( !isXML ) {
-                               return elem[ jQuery.camelCase( "default-" + name ) ] ?
-                                       name.toLowerCase() :
-                                       null;
-                       }
-               };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
-       jQuery.attrHooks.value = {
-               set: function( elem, value, name ) {
-                       if ( jQuery.nodeName( elem, "input" ) ) {
-                               // Does not return so that setAttribute is also used
-                               elem.defaultValue = value;
-                       } else {
-                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
-                               return nodeHook && nodeHook.set( elem, value, name );
-                       }
-               }
-       };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = {
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               elem.setAttributeNode(
-                                       (ret = elem.ownerDocument.createAttribute( name ))
-                               );
-                       }
-
-                       ret.value = value += "";
-
-                       // Break association with cloned elements by also using setAttribute (#9646)
-                       if ( name === "value" || value === elem.getAttribute( name ) ) {
-                               return value;
-                       }
-               }
-       };
-
-       // Some attributes are constructed with empty-string values when not defined
-       attrHandle.id = attrHandle.name = attrHandle.coords =
-               function( elem, name, isXML ) {
-                       var ret;
-                       if ( !isXML ) {
-                               return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
-                                       ret.value :
-                                       null;
-                       }
-               };
-
-       // Fixing value retrieval on a button requires this module
-       jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret = elem.getAttributeNode( name );
-                       if ( ret && ret.specified ) {
-                               return ret.value;
-                       }
-               },
-               set: nodeHook.set
-       };
-
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               set: function( elem, value, name ) {
-                       nodeHook.set( elem, value === "" ? false : value, name );
-               }
-       };
+       attrHandle[ name ] = function( elem, name, isXML ) {
+               var ret, handle,
+                       lowercaseName = name.toLowerCase();
 
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               };
-       });
-}
+               if ( !isXML ) {
 
-if ( !support.style ) {
-       jQuery.attrHooks.style = {
-               get: function( elem ) {
-                       // Return undefined in the case of empty string
-                       // Note: IE uppercases css property names, but if we were to .toLowerCase()
-                       // .cssText, that would destroy case senstitivity in URL's, like in "background"
-                       return elem.style.cssText || undefined;
-               },
-               set: function( elem, value ) {
-                       return ( elem.style.cssText = value + "" );
+                       // Avoid an infinite loop by temporarily removing this function from the getter
+                       handle = attrHandle[ lowercaseName ];
+                       attrHandle[ lowercaseName ] = ret;
+                       ret = getter( elem, name, isXML ) != null ?
+                               lowercaseName :
+                               null;
+                       attrHandle[ lowercaseName ] = handle;
                }
+               return ret;
        };
-}
+} );
 
 
 
 
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
+var rfocusable = /^(?:input|select|textarea|button)$/i,
        rclickable = /^(?:a|area)$/i;
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        prop: function( name, value ) {
                return access( this, jQuery.prop, name, value, arguments.length > 1 );
        },
 
        removeProp: function( name ) {
-               name = jQuery.propFix[ name ] || name;
-               return this.each(function() {
-                       // try/catch handles cases where IE balks (such as removing a property on window)
-                       try {
-                               this[ name ] = undefined;
-                               delete this[ name ];
-                       } catch( e ) {}
-               });
+               return this.each( function() {
+                       delete this[ jQuery.propFix[ name ] || name ];
+               } );
        }
-});
-
-jQuery.extend({
-       propFix: {
-               "for": "htmlFor",
-               "class": "className"
-       },
+} );
 
+jQuery.extend( {
        prop: function( elem, name, value ) {
-               var ret, hooks, notxml,
+               var ret, hooks,
                        nType = elem.nodeType;
 
-               // don't get/set properties on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
                        return;
                }
 
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
 
-               if ( notxml ) {
                        // Fix name and attach hooks
                        name = jQuery.propFix[ name ] || name;
                        hooks = jQuery.propHooks[ name ];
                }
 
                if ( value !== undefined ) {
-                       return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
-                               ret :
-                               ( elem[ name ] = value );
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
 
-               } else {
-                       return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
-                               ret :
-                               elem[ name ];
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
                }
+
+               return elem[ name ];
        },
 
        propHooks: {
                tabIndex: {
                        get: function( elem ) {
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+
+                               // Support: IE <=9 - 11 only
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
                                // Use proper attribute retrieval(#12072)
                                var tabindex = jQuery.find.attr( elem, "tabindex" );
 
-                               return tabindex ?
-                                       parseInt( tabindex, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               -1;
+                               if ( tabindex ) {
+                                       return parseInt( tabindex, 10 );
+                               }
+
+                               if (
+                                       rfocusable.test( elem.nodeName ) ||
+                                       rclickable.test( elem.nodeName ) &&
+                                       elem.href
+                               ) {
+                                       return 0;
+                               }
+
+                               return -1;
                        }
                }
-       }
-});
+       },
 
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
-       // href/src property should get the full normalized URL (#10299/#12915)
-       jQuery.each([ "href", "src" ], function( i, name ) {
-               jQuery.propHooks[ name ] = {
-                       get: function( elem ) {
-                               return elem.getAttribute( name, 4 );
-                       }
-               };
-       });
-}
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
 
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
 if ( !support.optSelected ) {
        jQuery.propHooks.selected = {
                get: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
                        var parent = elem.parentNode;
+                       if ( parent && parent.parentNode ) {
+                               parent.parentNode.selectedIndex;
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
 
+                       var parent = elem.parentNode;
                        if ( parent ) {
                                parent.selectedIndex;
 
-                               // Make sure that it also works with optgroups, see #5701
                                if ( parent.parentNode ) {
                                        parent.parentNode.selectedIndex;
                                }
                        }
-                       return null;
                }
        };
 }
 
-jQuery.each([
+jQuery.each( [
        "tabIndex",
        "readOnly",
        "maxLength",
@@ -8305,54 +7743,53 @@ jQuery.each([
        "contentEditable"
 ], function() {
        jQuery.propFix[ this.toLowerCase() ] = this;
-});
+} );
 
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
-       jQuery.propFix.enctype = "encoding";
-}
 
 
 
+       // Strip and collapse whitespace according to HTML spec
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+       function stripAndCollapse( value ) {
+               var tokens = value.match( rnothtmlwhite ) || [];
+               return tokens.join( " " );
+       }
+
 
-var rclass = /[\t\r\n\f]/g;
+function getClass( elem ) {
+       return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        addClass: function( value ) {
-               var classes, elem, cur, clazz, j, finalValue,
-                       i = 0,
-                       len = this.length,
-                       proceed = typeof value === "string" && value;
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
 
                if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).addClass( value.call( this, j, this.className ) );
-                       });
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
                }
 
-               if ( proceed ) {
-                       // The disjunction here is for better compressibility (see removeClass)
-                       classes = ( value || "" ).match( rnotwhite ) || [];
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
 
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       " "
-                               );
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
 
                                if ( cur ) {
                                        j = 0;
-                                       while ( (clazz = classes[j++]) ) {
+                                       while ( ( clazz = classes[ j++ ] ) ) {
                                                if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
                                                        cur += clazz + " ";
                                                }
                                        }
 
-                                       // only assign if different to avoid unneeded rendering.
-                                       finalValue = jQuery.trim( cur );
-                                       if ( elem.className !== finalValue ) {
-                                               elem.className = finalValue;
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
                                        }
                                }
                        }
@@ -8362,40 +7799,42 @@ jQuery.fn.extend({
        },
 
        removeClass: function( value ) {
-               var classes, elem, cur, clazz, j, finalValue,
-                       i = 0,
-                       len = this.length,
-                       proceed = arguments.length === 0 || typeof value === "string" && value;
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
 
                if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).removeClass( value.call( this, j, this.className ) );
-                       });
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
                }
-               if ( proceed ) {
-                       classes = ( value || "" ).match( rnotwhite ) || [];
 
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
                                // This expression is here for better compressibility (see addClass)
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       ""
-                               );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
 
                                if ( cur ) {
                                        j = 0;
-                                       while ( (clazz = classes[j++]) ) {
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
                                                // Remove *all* instances
-                                               while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
                                                        cur = cur.replace( " " + clazz + " ", " " );
                                                }
                                        }
 
-                                       // only assign if different to avoid unneeded rendering.
-                                       finalValue = value ? jQuery.trim( cur ) : "";
-                                       if ( elem.className !== finalValue ) {
-                                               elem.className = finalValue;
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
                                        }
                                }
                        }
@@ -8407,72 +7846,442 @@ jQuery.fn.extend({
        toggleClass: function( value, stateVal ) {
                var type = typeof value;
 
-               if ( typeof stateVal === "boolean" && type === "string" ) {
-                       return stateVal ? this.addClass( value ) : this.removeClass( value );
-               }
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnothtmlwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // Store className if set
+                                       dataPriv.set( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed `false`,
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               if ( this.setAttribute ) {
+                                       this.setAttribute( "class",
+                                               className || value === false ?
+                                               "" :
+                                               dataPriv.get( this, "__className__" ) || ""
+                                       );
+                               }
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+                                       return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               // Handle most common string cases
+                               if ( typeof ret === "string" ) {
+                                       return ret.replace( rreturn, "" );
+                               }
+
+                               // Handle cases where value is null/undef or number
+                               return ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+
+                       } else if ( Array.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE <=10 - 11 only
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       stripAndCollapse( jQuery.text( elem ) );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option, i,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one",
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length;
+
+                               if ( index < 0 ) {
+                                       i = max;
+
+                               } else {
+                                       i = one ? index : 0;
+                               }
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Support: IE <=9 only
+                                       // IE8-9 doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       !option.disabled &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       /* eslint-disable no-cond-assign */
+
+                                       if ( option.selected =
+                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+                                       ) {
+                                               optionSet = true;
+                                       }
+
+                                       /* eslint-enable no-cond-assign */
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( Array.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+                               dataPriv.get( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( ( !special._default ||
+                               special._default.apply( eventPath.pop(), data ) === false ) &&
+                               acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name as the event.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
 
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( i ) {
-                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                       });
-               }
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
 
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className,
-                                       i = 0,
-                                       self = jQuery( this ),
-                                       classNames = value.match( rnotwhite ) || [];
-
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space separated list
-                                       if ( self.hasClass( className ) ) {
-                                               self.removeClass( className );
-                                       } else {
-                                               self.addClass( className );
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
                                        }
-                               }
 
-                       // Toggle whole class name
-                       } else if ( type === strundefined || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery._data( this, "__className__", this.className );
-                               }
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
 
-                               // If the element has a class name or if we're passed "false",
-                               // then remove the whole classname (if there was one, the above saved it).
-                               // Otherwise bring back whatever was previously saved (if anything),
-                               // falling back to the empty string if nothing was stored.
-                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
                        }
-               });
+               }
+
+               return event.result;
        },
 
-       hasClass: function( selector ) {
-               var className = " " + selector + " ",
-                       i = 0,
-                       l = this.length;
-               for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
-                               return true;
+       // Piggyback on a donor event to simulate a different one
+       // Used only for `focus(in | out)` events
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
                        }
-               }
+               );
 
-               return false;
+               jQuery.event.trigger( e, null, elem );
        }
-});
 
+} );
 
+jQuery.fn.extend( {
 
-
-// Return jQuery for attributes-only inclusion
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
 
 
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+       function( i, name ) {
 
        // Handle event binding
        jQuery.fn[ name ] = function( data, fn ) {
@@ -8480,100 +8289,85 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
                        this.on( name, null, data, fn ) :
                        this.trigger( name );
        };
-});
+} );
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        hover: function( fnOver, fnOut ) {
                return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       },
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
        }
-});
+} );
 
 
-var nonce = jQuery.now();
 
-var rquery = (/\?/);
 
+support.focusin = "onfocusin" in window;
 
 
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
 
-jQuery.parseJSON = function( data ) {
-       // Attempt to parse using the native JSON parser first
-       if ( window.JSON && window.JSON.parse ) {
-               // Support: Android 2.3
-               // Workaround failure to string-cast null input
-               return window.JSON.parse( data + "" );
-       }
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
 
-       var requireNonComma,
-               depth = null,
-               str = jQuery.trim( data + "" );
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix );
 
-       // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
-       // after removing valid tokens
-       return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix ) - 1;
 
-               // Force termination if we see a misplaced comma
-               if ( requireNonComma && comma ) {
-                       depth = 0;
-               }
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       dataPriv.remove( doc, fix );
 
-               // Perform no more replacements after returning to outermost depth
-               if ( depth === 0 ) {
-                       return token;
-               }
+                               } else {
+                                       dataPriv.access( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+var location = window.location;
 
-               // Commas must not follow "[", "{", or ","
-               requireNonComma = open || comma;
+var nonce = jQuery.now();
 
-               // Determine new depth
-               // array/object open ("[" or "{"): depth += true - false (increment)
-               // array/object close ("]" or "}"): depth += false - true (decrement)
-               // other cases ("," or primitive): depth += true - true (numeric cast)
-               depth += !close - !open;
+var rquery = ( /\?/ );
 
-               // Remove this token
-               return "";
-       }) ) ?
-               ( Function( "return " + str ) )() :
-               jQuery.error( "Invalid JSON: " + data );
-};
 
 
 // Cross-browser xml parsing
 jQuery.parseXML = function( data ) {
-       var xml, tmp;
+       var xml;
        if ( !data || typeof data !== "string" ) {
                return null;
        }
+
+       // Support: IE 9 - 11 only
+       // IE throws on parseFromString with invalid input.
        try {
-               if ( window.DOMParser ) { // Standard
-                       tmp = new DOMParser();
-                       xml = tmp.parseFromString( data, "text/xml" );
-               } else { // IE
-                       xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                       xml.async = "false";
-                       xml.loadXML( data );
-               }
-       } catch( e ) {
+               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+       } catch ( e ) {
                xml = undefined;
        }
-       if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+
+       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
                jQuery.error( "Invalid XML: " + data );
        }
        return xml;
@@ -8581,18 +8375,134 @@ jQuery.parseXML = function( data ) {
 
 
 var
-       // Document location
-       ajaxLocParts,
-       ajaxLocation,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( Array.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, valueOrFunction ) {
+
+                       // If value is a function, invoke it and use its return value
+                       var value = jQuery.isFunction( valueOrFunction ) ?
+                               valueOrFunction() :
+                               valueOrFunction;
+
+                       s[ s.length ] = encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( value == null ? "" : value );
+               };
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is( ":disabled" ) so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
 
+                       if ( val == null ) {
+                               return null;
+                       }
+
+                       if ( Array.isArray( val ) ) {
+                               return jQuery.map( val, function( val ) {
+                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               } );
+                       }
+
+                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+
+var
+       r20 = /%20/g,
        rhash = /#.*$/,
-       rts = /([?&])_=[^&]*/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       rantiCache = /([?&])_=[^&]*/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
        // #7653, #8125, #8152: local protocol detection
        rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
        rnoContent = /^(?:GET|HEAD)$/,
        rprotocol = /^\/\//,
-       rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
 
        /* Prefilters
         * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
@@ -8613,22 +8523,11 @@ var
        transports = {},
 
        // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-       ajaxLocation = location.href;
-} catch( e ) {
-       // Use the href attribute of an A element
-       // since IE will modify it given document.location
-       ajaxLocation = document.createElement( "a" );
-       ajaxLocation.href = "";
-       ajaxLocation = ajaxLocation.href;
-}
+       allTypes = "*/".concat( "*" ),
 
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+       // Anchor tag for parsing the document origin
+       originAnchor = document.createElement( "a" );
+       originAnchor.href = location.href;
 
 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
 function addToPrefiltersOrTransports( structure ) {
@@ -8643,19 +8542,21 @@ function addToPrefiltersOrTransports( structure ) {
 
                var dataType,
                        i = 0,
-                       dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+                       dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
 
                if ( jQuery.isFunction( func ) ) {
+
                        // For each dataType in the dataTypeExpression
-                       while ( (dataType = dataTypes[i++]) ) {
+                       while ( ( dataType = dataTypes[ i++ ] ) ) {
+
                                // Prepend if requested
-                               if ( dataType.charAt( 0 ) === "+" ) {
+                               if ( dataType[ 0 ] === "+" ) {
                                        dataType = dataType.slice( 1 ) || "*";
-                                       (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
 
                                // Otherwise append
                                } else {
-                                       (structure[ dataType ] = structure[ dataType ] || []).push( func );
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
                                }
                        }
                }
@@ -8673,14 +8574,16 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
                inspected[ dataType ] = true;
                jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
                        var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-                       if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+                       if ( typeof dataTypeOrTransport === "string" &&
+                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
                                options.dataTypes.unshift( dataTypeOrTransport );
                                inspect( dataTypeOrTransport );
                                return false;
                        } else if ( seekingTransport ) {
                                return !( selected = dataTypeOrTransport );
                        }
-               });
+               } );
                return selected;
        }
 
@@ -8691,12 +8594,12 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
 // that takes "flat" options (not to be deep extended)
 // Fixes #9887
 function ajaxExtend( target, src ) {
-       var deep, key,
+       var key, deep,
                flatOptions = jQuery.ajaxSettings.flatOptions || {};
 
        for ( key in src ) {
                if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
                }
        }
        if ( deep ) {
@@ -8711,7 +8614,8 @@ function ajaxExtend( target, src ) {
  * - returns the corresponding response
  */
 function ajaxHandleResponses( s, jqXHR, responses ) {
-       var firstDataType, ct, finalDataType, type,
+
+       var ct, type, finalDataType, firstDataType,
                contents = s.contents,
                dataTypes = s.dataTypes;
 
@@ -8719,7 +8623,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
        while ( dataTypes[ 0 ] === "*" ) {
                dataTypes.shift();
                if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
                }
        }
 
@@ -8737,9 +8641,10 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
        if ( dataTypes[ 0 ] in responses ) {
                finalDataType = dataTypes[ 0 ];
        } else {
+
                // Try convertible dataTypes
                for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
                                finalDataType = type;
                                break;
                        }
@@ -8747,6 +8652,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
                                firstDataType = type;
                        }
                }
+
                // Or just use first one
                finalDataType = finalDataType || firstDataType;
        }
@@ -8768,6 +8674,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
 function ajaxConvert( s, response, jqXHR, isSuccess ) {
        var conv2, current, conv, tmp, prev,
                converters = {},
+
                // Work with a copy of dataTypes in case we need to modify it for conversion
                dataTypes = s.dataTypes.slice();
 
@@ -8820,6 +8727,7 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) {
                                                        conv = converters[ prev + " " + tmp[ 0 ] ] ||
                                                                converters[ "* " + tmp[ 0 ] ];
                                                        if ( conv ) {
+
                                                                // Condense equivalence converters
                                                                if ( conv === true ) {
                                                                        conv = converters[ conv2 ];
@@ -8839,13 +8747,16 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) {
                                if ( conv !== true ) {
 
                                        // Unless errors are allowed to bubble, catch and return them
-                                       if ( conv && s[ "throws" ] ) {
+                                       if ( conv && s.throws ) {
                                                response = conv( response );
                                        } else {
                                                try {
                                                        response = conv( response );
                                                } catch ( e ) {
-                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+                                                       return {
+                                                               state: "parsererror",
+                                                               error: conv ? e : "No conversion from " + prev + " to " + current
+                                                       };
                                                }
                                        }
                                }
@@ -8856,7 +8767,7 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) {
        return { state: "success", data: response };
 }
 
-jQuery.extend({
+jQuery.extend( {
 
        // Counter for holding the number of active queries
        active: 0,
@@ -8866,13 +8777,14 @@ jQuery.extend({
        etag: {},
 
        ajaxSettings: {
-               url: ajaxLocation,
+               url: location.href,
                type: "GET",
-               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               isLocal: rlocalProtocol.test( location.protocol ),
                global: true,
                processData: true,
                async: true,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
                /*
                timeout: 0,
                data: null,
@@ -8894,9 +8806,9 @@ jQuery.extend({
                },
 
                contents: {
-                       xml: /xml/,
-                       html: /html/,
-                       json: /json/
+                       xml: /\bxml\b/,
+                       html: /\bhtml/,
+                       json: /\bjson\b/
                },
 
                responseFields: {
@@ -8916,7 +8828,7 @@ jQuery.extend({
                        "text html": true,
 
                        // Evaluate text as a json expression
-                       "text json": jQuery.parseJSON,
+                       "text json": JSON.parse,
 
                        // Parse text as xml
                        "text xml": jQuery.parseXML
@@ -8960,43 +8872,59 @@ jQuery.extend({
                // Force options to be an object
                options = options || {};
 
-               var // Cross-domain detection vars
-                       parts,
-                       // Loop variable
-                       i,
+               var transport,
+
                        // URL without anti-cache param
                        cacheURL,
-                       // Response headers as string
+
+                       // Response headers
                        responseHeadersString,
+                       responseHeaders,
+
                        // timeout handle
                        timeoutTimer,
 
+                       // Url cleanup var
+                       urlAnchor,
+
+                       // Request state (becomes false upon send and true upon completion)
+                       completed,
+
                        // To know if global events are to be dispatched
                        fireGlobals,
 
-                       transport,
-                       // Response headers
-                       responseHeaders,
+                       // Loop variable
+                       i,
+
+                       // uncached part of the url
+                       uncached,
+
                        // Create the final options object
                        s = jQuery.ajaxSetup( {}, options ),
+
                        // Callbacks context
                        callbackContext = s.context || s,
+
                        // Context for global events is callbackContext if it is a DOM node or jQuery collection
-                       globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
-                               jQuery( callbackContext ) :
-                               jQuery.event,
+                       globalEventContext = s.context &&
+                               ( callbackContext.nodeType || callbackContext.jquery ) ?
+                                       jQuery( callbackContext ) :
+                                       jQuery.event,
+
                        // Deferreds
                        deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks("once memory"),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+
                        // Status-dependent callbacks
                        statusCode = s.statusCode || {},
+
                        // Headers (they are sent all at once)
                        requestHeaders = {},
                        requestHeadersNames = {},
-                       // The jqXHR state
-                       state = 0,
+
                        // Default abort message
                        strAbort = "canceled",
+
                        // Fake xhr
                        jqXHR = {
                                readyState: 0,
@@ -9004,11 +8932,11 @@ jQuery.extend({
                                // Builds headers hashtable if needed
                                getResponseHeader: function( key ) {
                                        var match;
-                                       if ( state === 2 ) {
+                                       if ( completed ) {
                                                if ( !responseHeaders ) {
                                                        responseHeaders = {};
-                                                       while ( (match = rheaders.exec( responseHeadersString )) ) {
-                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
                                                        }
                                                }
                                                match = responseHeaders[ key.toLowerCase() ];
@@ -9018,14 +8946,14 @@ jQuery.extend({
 
                                // Raw string
                                getAllResponseHeaders: function() {
-                                       return state === 2 ? responseHeadersString : null;
+                                       return completed ? responseHeadersString : null;
                                },
 
                                // Caches the header
                                setRequestHeader: function( name, value ) {
-                                       var lname = name.toLowerCase();
-                                       if ( !state ) {
-                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                       if ( completed == null ) {
+                                               name = requestHeadersNames[ name.toLowerCase() ] =
+                                                       requestHeadersNames[ name.toLowerCase() ] || name;
                                                requestHeaders[ name ] = value;
                                        }
                                        return this;
@@ -9033,7 +8961,7 @@ jQuery.extend({
 
                                // Overrides response content-type header
                                overrideMimeType: function( type ) {
-                                       if ( !state ) {
+                                       if ( completed == null ) {
                                                s.mimeType = type;
                                        }
                                        return this;
@@ -9043,14 +8971,16 @@ jQuery.extend({
                                statusCode: function( map ) {
                                        var code;
                                        if ( map ) {
-                                               if ( state < 2 ) {
+                                               if ( completed ) {
+
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               } else {
+
+                                                       // Lazy-add the new callbacks in a way that preserves old ones
                                                        for ( code in map ) {
-                                                               // Lazy-add the new callback in a way that preserves old ones
                                                                statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
                                                        }
-                                               } else {
-                                                       // Execute the appropriate callbacks
-                                                       jqXHR.always( map[ jqXHR.status ] );
                                                }
                                        }
                                        return this;
@@ -9068,30 +8998,41 @@ jQuery.extend({
                        };
 
                // Attach deferreds
-               deferred.promise( jqXHR ).complete = completeDeferred.add;
-               jqXHR.success = jqXHR.done;
-               jqXHR.error = jqXHR.fail;
+               deferred.promise( jqXHR );
 
-               // Remove hash character (#7531: and string promotion)
-               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // Add protocol if not provided (prefilters might expect it)
                // Handle falsy url in the settings object (#10093: consistency with old signature)
                // We also use the url parameter if available
-               s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+               s.url = ( ( url || s.url || location.href ) + "" )
+                       .replace( rprotocol, location.protocol + "//" );
 
                // Alias method option to type as per ticket #12004
                s.type = options.method || options.type || s.method || s.type;
 
                // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+               s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
 
-               // A cross-domain request is in order when we have a protocol:host:port mismatch
+               // A cross-domain request is in order when the origin doesn't match the current origin.
                if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() );
-                       s.crossDomain = !!( parts &&
-                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
-                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
-                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
-                       );
+                       urlAnchor = document.createElement( "a" );
+
+                       // Support: IE <=8 - 11, Edge 12 - 13
+                       // IE throws exception on accessing the href property if url is malformed,
+                       // e.g. http://example.com:80x/
+                       try {
+                               urlAnchor.href = s.url;
+
+                               // Support: IE <=8 - 11 only
+                               // Anchor's host property isn't correctly set when s.url is relative
+                               urlAnchor.href = urlAnchor.href;
+                               s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+                                       urlAnchor.protocol + "//" + urlAnchor.host;
+                       } catch ( e ) {
+
+                               // If there is an error parsing the URL, assume it is crossDomain,
+                               // it can be rejected by the transport if it is invalid
+                               s.crossDomain = true;
+                       }
                }
 
                // Convert data if not already a string
@@ -9103,7 +9044,7 @@ jQuery.extend({
                inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
 
                // If request was aborted inside a prefilter, stop there
-               if ( state === 2 ) {
+               if ( completed ) {
                        return jqXHR;
                }
 
@@ -9113,7 +9054,7 @@ jQuery.extend({
 
                // Watch for a new set of requests
                if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger("ajaxStart");
+                       jQuery.event.trigger( "ajaxStart" );
                }
 
                // Uppercase the type
@@ -9124,28 +9065,36 @@ jQuery.extend({
 
                // Save the URL in case we're toying with the If-Modified-Since
                // and/or If-None-Match header later on
-               cacheURL = s.url;
+               // Remove hash to simplify url manipulation
+               cacheURL = s.url.replace( rhash, "" );
 
                // More options handling for requests with no content
                if ( !s.hasContent ) {
 
+                       // Remember the hash so we can put it back
+                       uncached = s.url.slice( cacheURL.length );
+
                        // If data is available, append data to url
                        if ( s.data ) {
-                               cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+                               cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
                                // #9682: remove data so that it's not used in an eventual retry
                                delete s.data;
                        }
 
-                       // Add anti-cache in url if needed
+                       // Add or update anti-cache param if needed
                        if ( s.cache === false ) {
-                               s.url = rts.test( cacheURL ) ?
+                               cacheURL = cacheURL.replace( rantiCache, "$1" );
+                               uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+                       }
 
-                                       // If there is already a '_' parameter, set its value
-                                       cacheURL.replace( rts, "$1_=" + nonce++ ) :
+                       // Put hash and anti-cache on the URL that will be requested (gh-1732)
+                       s.url = cacheURL + uncached;
 
-                                       // Otherwise add one to the end
-                                       cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
-                       }
+               // Change '%20' to '+' if this is encoded form body content (gh-2658)
+               } else if ( s.data && s.processData &&
+                       ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+                       s.data = s.data.replace( r20, "+" );
                }
 
                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
@@ -9166,8 +9115,9 @@ jQuery.extend({
                // Set the Accepts header for the server, depending on the dataType
                jqXHR.setRequestHeader(
                        "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+                               s.accepts[ s.dataTypes[ 0 ] ] +
+                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
                                s.accepts[ "*" ]
                );
 
@@ -9177,18 +9127,20 @@ jQuery.extend({
                }
 
                // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+               if ( s.beforeSend &&
+                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
                        // Abort if not done already and return
                        return jqXHR.abort();
                }
 
-               // aborting is no longer a cancellation
+               // Aborting is no longer a cancellation
                strAbort = "abort";
 
                // Install callbacks on deferreds
-               for ( i in { success: 1, error: 1, complete: 1 } ) {
-                       jqXHR[ i ]( s[ i ] );
-               }
+               completeDeferred.add( s.complete );
+               jqXHR.done( s.success );
+               jqXHR.fail( s.error );
 
                // Get transport
                transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
@@ -9203,24 +9155,31 @@ jQuery.extend({
                        if ( fireGlobals ) {
                                globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
                        }
+
+                       // If request was aborted inside ajaxSend, stop there
+                       if ( completed ) {
+                               return jqXHR;
+                       }
+
                        // Timeout
                        if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = setTimeout(function() {
-                                       jqXHR.abort("timeout");
+                               timeoutTimer = window.setTimeout( function() {
+                                       jqXHR.abort( "timeout" );
                                }, s.timeout );
                        }
 
                        try {
-                               state = 1;
+                               completed = false;
                                transport.send( requestHeaders, done );
                        } catch ( e ) {
-                               // Propagate exception as error if not done
-                               if ( state < 2 ) {
-                                       done( -1, e );
-                               // Simply rethrow otherwise
-                               } else {
+
+                               // Rethrow post-completion exceptions
+                               if ( completed ) {
                                        throw e;
                                }
+
+                               // Propagate others as results
+                               done( -1, e );
                        }
                }
 
@@ -9229,17 +9188,16 @@ jQuery.extend({
                        var isSuccess, success, error, response, modified,
                                statusText = nativeStatusText;
 
-                       // Called once
-                       if ( state === 2 ) {
+                       // Ignore repeat invocations
+                       if ( completed ) {
                                return;
                        }
 
-                       // State is "done" now
-                       state = 2;
+                       completed = true;
 
                        // Clear timeout if it exists
                        if ( timeoutTimer ) {
-                               clearTimeout( timeoutTimer );
+                               window.clearTimeout( timeoutTimer );
                        }
 
                        // Dereference transport for early garbage collection
@@ -9268,11 +9226,11 @@ jQuery.extend({
 
                                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
                                if ( s.ifModified ) {
-                                       modified = jqXHR.getResponseHeader("Last-Modified");
+                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
                                        if ( modified ) {
                                                jQuery.lastModified[ cacheURL ] = modified;
                                        }
-                                       modified = jqXHR.getResponseHeader("etag");
+                                       modified = jqXHR.getResponseHeader( "etag" );
                                        if ( modified ) {
                                                jQuery.etag[ cacheURL ] = modified;
                                        }
@@ -9294,8 +9252,8 @@ jQuery.extend({
                                        isSuccess = !error;
                                }
                        } else {
-                               // We extract error from statusText
-                               // then normalize statusText and status for non-aborts
+
+                               // Extract error from statusText and normalize for non-aborts
                                error = statusText;
                                if ( status || !statusText ) {
                                        statusText = "error";
@@ -9330,9 +9288,10 @@ jQuery.extend({
 
                        if ( fireGlobals ) {
                                globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
                                // Handle the global AJAX counter
                                if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger("ajaxStop");
+                                       jQuery.event.trigger( "ajaxStop" );
                                }
                        }
                }
@@ -9347,65 +9306,70 @@ jQuery.extend({
        getScript: function( url, callback ) {
                return jQuery.get( url, undefined, callback, "script" );
        }
-});
+} );
 
 jQuery.each( [ "get", "post" ], function( i, method ) {
        jQuery[ method ] = function( url, data, callback, type ) {
-               // shift arguments if data argument was omitted
+
+               // Shift arguments if data argument was omitted
                if ( jQuery.isFunction( data ) ) {
                        type = type || callback;
                        callback = data;
                        data = undefined;
                }
 
-               return jQuery.ajax({
+               // The url can be an options object (which then must have .url)
+               return jQuery.ajax( jQuery.extend( {
                        url: url,
                        type: method,
                        dataType: type,
                        data: data,
                        success: callback
-               });
+               }, jQuery.isPlainObject( url ) && url ) );
        };
-});
+} );
 
 
 jQuery._evalUrl = function( url ) {
-       return jQuery.ajax({
+       return jQuery.ajax( {
                url: url,
+
+               // Make this explicit, since user can override this through ajaxSetup (#11264)
                type: "GET",
                dataType: "script",
+               cache: true,
                async: false,
                global: false,
                "throws": true
-       });
+       } );
 };
 
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
 
-               if ( this[0] ) {
                        // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
 
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
                        }
 
-                       wrap.map(function() {
+                       wrap.map( function() {
                                var elem = this;
 
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
+                               while ( elem.firstElementChild ) {
+                                       elem = elem.firstElementChild;
                                }
 
                                return elem;
-                       }).append( this );
+                       } ).append( this );
                }
 
                return this;
@@ -9413,12 +9377,12 @@ jQuery.fn.extend({
 
        wrapInner: function( html ) {
                if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
                }
 
-               return this.each(function() {
+               return this.each( function() {
                        var self = jQuery( this ),
                                contents = self.contents();
 
@@ -9428,343 +9392,214 @@ jQuery.fn.extend({
                        } else {
                                self.append( html );
                        }
-               });
+               } );
        },
 
        wrap: function( html ) {
                var isFunction = jQuery.isFunction( html );
 
-               return this.each(function(i) {
-                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-               });
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
        },
 
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each( function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               } );
+               return this;
        }
-});
+} );
 
 
-jQuery.expr.filters.hidden = function( elem ) {
-       // Support: Opera <= 12.12
-       // Opera reports offsetWidths and offsetHeights less than zero on some elements
-       return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
-               (!support.reliableHiddenOffsets() &&
-                       ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+jQuery.expr.pseudos.hidden = function( elem ) {
+       return !jQuery.expr.pseudos.visible( elem );
 };
-
-jQuery.expr.filters.visible = function( elem ) {
-       return !jQuery.expr.filters.hidden( elem );
+jQuery.expr.pseudos.visible = function( elem ) {
+       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
 };
 
 
 
 
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-       rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-       var name;
-
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-                               // Item is non-scalar (array or object), encode its numeric index.
-                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-                       }
-               });
-
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-               // Serialize object item.
-               for ( name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-               }
-
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-       var prefix,
-               s = [],
-               add = function( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-               };
-
-       // Set traditional to true for jQuery <= 1.3.2 behavior.
-       if ( traditional === undefined ) {
-               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-       }
-
-       // If an array was passed in, assume that it is an array of form elements.
-       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-               // Serialize the form elements
-               jQuery.each( a, function() {
-                       add( this.name, this.value );
-               });
-
-       } else {
-               // If traditional, encode the "old" way (the way 1.3.2 or older
-               // did it), otherwise encode params recursively.
-               for ( prefix in a ) {
-                       buildParams( prefix, a[ prefix ], traditional, add );
-               }
-       }
-
-       // Return the resulting serialization
-       return s.join( "&" ).replace( r20, "+" );
+jQuery.ajaxSettings.xhr = function() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch ( e ) {}
 };
 
-jQuery.fn.extend({
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-       serializeArray: function() {
-               return this.map(function() {
-                       // Can add propHook for "elements" to filter or add form elements
-                       var elements = jQuery.prop( this, "elements" );
-                       return elements ? jQuery.makeArray( elements ) : this;
-               })
-               .filter(function() {
-                       var type = this.type;
-                       // Use .is(":disabled") so that fieldset[disabled] works
-                       return this.name && !jQuery( this ).is( ":disabled" ) &&
-                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-                               ( this.checked || !rcheckableType.test( type ) );
-               })
-               .map(function( i, elem ) {
-                       var val = jQuery( this ).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val ) {
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
-       // Support: IE6+
-       function() {
-
-               // XHR cannot access local files, always use ActiveX for that case
-               return !this.isLocal &&
+var xhrSuccessStatus = {
 
-                       // Support: IE7-8
-                       // oldIE XHR does not support non-RFC2616 methods (#13240)
-                       // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
-                       // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
-                       // Although this check for six methods instead of eight
-                       // since IE also does not support "trace" and "connect"
-                       /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
+               // File protocol always yields status code 0, assume 200
+               0: 200,
 
-                       createStandardXHR() || createActiveXHR();
-       } :
-       // For all other browsers, use the standard XMLHttpRequest object
-       createStandardXHR;
-
-var xhrId = 0,
-       xhrCallbacks = {},
+               // Support: IE <=9 only
+               // #1450: sometimes IE returns 1223 when it should be 204
+               1223: 204
+       },
        xhrSupported = jQuery.ajaxSettings.xhr();
 
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-// See https://support.microsoft.com/kb/2856746 for more info
-if ( window.attachEvent ) {
-       window.attachEvent( "onunload", function() {
-               for ( var key in xhrCallbacks ) {
-                       xhrCallbacks[ key ]( undefined, true );
-               }
-       });
-}
-
-// Determine support properties
 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
-       jQuery.ajaxTransport(function( options ) {
-               // Cross domain only allowed if supported through XMLHttpRequest
-               if ( !options.crossDomain || support.cors ) {
-
-                       var callback;
-
-                       return {
-                               send: function( headers, complete ) {
-                                       var i,
-                                               xhr = options.xhr(),
-                                               id = ++xhrId;
-
-                                       // Open the socket
-                                       xhr.open( options.type, options.url, options.async, options.username, options.password );
+support.ajax = xhrSupported = !!xhrSupported;
 
-                                       // Apply custom fields if provided
-                                       if ( options.xhrFields ) {
-                                               for ( i in options.xhrFields ) {
-                                                       xhr[ i ] = options.xhrFields[ i ];
-                                               }
-                                       }
+jQuery.ajaxTransport( function( options ) {
+       var callback, errorCallback;
 
-                                       // Override mime type if needed
-                                       if ( options.mimeType && xhr.overrideMimeType ) {
-                                               xhr.overrideMimeType( options.mimeType );
-                                       }
+       // Cross domain only allowed if supported through XMLHttpRequest
+       if ( support.cors || xhrSupported && !options.crossDomain ) {
+               return {
+                       send: function( headers, complete ) {
+                               var i,
+                                       xhr = options.xhr();
+
+                               xhr.open(
+                                       options.type,
+                                       options.url,
+                                       options.async,
+                                       options.username,
+                                       options.password
+                               );
 
-                                       // X-Requested-With header
-                                       // For cross-domain requests, seeing as conditions for a preflight are
-                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                       // (it can always be set on a per-request basis or even using ajaxSetup)
-                                       // For same-domain requests, won't change header if already provided.
-                                       if ( !options.crossDomain && !headers["X-Requested-With"] ) {
-                                               headers["X-Requested-With"] = "XMLHttpRequest";
+                               // Apply custom fields if provided
+                               if ( options.xhrFields ) {
+                                       for ( i in options.xhrFields ) {
+                                               xhr[ i ] = options.xhrFields[ i ];
                                        }
+                               }
 
-                                       // Set headers
-                                       for ( i in headers ) {
-                                               // Support: IE<9
-                                               // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
-                                               // request header to a null-value.
-                                               //
-                                               // To keep consistent with other XHR implementations, cast the value
-                                               // to string and ignore `undefined`.
-                                               if ( headers[ i ] !== undefined ) {
-                                                       xhr.setRequestHeader( i, headers[ i ] + "" );
-                                               }
-                                       }
+                               // Override mime type if needed
+                               if ( options.mimeType && xhr.overrideMimeType ) {
+                                       xhr.overrideMimeType( options.mimeType );
+                               }
 
-                                       // Do send the request
-                                       // This may raise an exception which is actually
-                                       // handled in jQuery.ajax (so no try/catch here)
-                                       xhr.send( ( options.hasContent && options.data ) || null );
-
-                                       // Listener
-                                       callback = function( _, isAbort ) {
-                                               var status, statusText, responses;
-
-                                               // Was never called and is aborted or complete
-                                               if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-                                                       // Clean up
-                                                       delete xhrCallbacks[ id ];
-                                                       callback = undefined;
-                                                       xhr.onreadystatechange = jQuery.noop;
-
-                                                       // Abort manually if needed
-                                                       if ( isAbort ) {
-                                                               if ( xhr.readyState !== 4 ) {
-                                                                       xhr.abort();
-                                                               }
-                                                       } else {
-                                                               responses = {};
-                                                               status = xhr.status;
-
-                                                               // Support: IE<10
-                                                               // Accessing binary-data responseText throws an exception
-                                                               // (#11426)
-                                                               if ( typeof xhr.responseText === "string" ) {
-                                                                       responses.text = xhr.responseText;
-                                                               }
+                               // X-Requested-With header
+                               // For cross-domain requests, seeing as conditions for a preflight are
+                               // akin to a jigsaw puzzle, we simply never set it to be sure.
+                               // (it can always be set on a per-request basis or even using ajaxSetup)
+                               // For same-domain requests, won't change header if already provided.
+                               if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                               }
 
-                                                               // Firefox throws an exception when accessing
-                                                               // statusText for faulty cross-domain requests
-                                                               try {
-                                                                       statusText = xhr.statusText;
-                                                               } catch( e ) {
-                                                                       // We normalize with Webkit giving an empty statusText
-                                                                       statusText = "";
-                                                               }
+                               // Set headers
+                               for ( i in headers ) {
+                                       xhr.setRequestHeader( i, headers[ i ] );
+                               }
 
-                                                               // Filter status for non standard behaviors
+                               // Callback
+                               callback = function( type ) {
+                                       return function() {
+                                               if ( callback ) {
+                                                       callback = errorCallback = xhr.onload =
+                                                               xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+                                                       if ( type === "abort" ) {
+                                                               xhr.abort();
+                                                       } else if ( type === "error" ) {
+
+                                                               // Support: IE <=9 only
+                                                               // On a manual native abort, IE9 throws
+                                                               // errors on any property access that is not readyState
+                                                               if ( typeof xhr.status !== "number" ) {
+                                                                       complete( 0, "error" );
+                                                               } else {
+                                                                       complete(
 
-                                                               // If the request is local and we have data: assume a success
-                                                               // (success with no data won't get notified, that's the best we
-                                                               // can do given current implementations)
-                                                               if ( !status && options.isLocal && !options.crossDomain ) {
-                                                                       status = responses.text ? 200 : 404;
-                                                               // IE - #1450: sometimes returns 1223 when it should be 204
-                                                               } else if ( status === 1223 ) {
-                                                                       status = 204;
+                                                                               // File: protocol always yields status 0; see #8605, #14207
+                                                                               xhr.status,
+                                                                               xhr.statusText
+                                                                       );
                                                                }
+                                                       } else {
+                                                               complete(
+                                                                       xhrSuccessStatus[ xhr.status ] || xhr.status,
+                                                                       xhr.statusText,
+
+                                                                       // Support: IE <=9 only
+                                                                       // IE9 has no XHR2 but throws on binary (trac-11426)
+                                                                       // For XHR2 non-text, let the caller handle it (gh-2498)
+                                                                       ( xhr.responseType || "text" ) !== "text"  ||
+                                                                       typeof xhr.responseText !== "string" ?
+                                                                               { binary: xhr.response } :
+                                                                               { text: xhr.responseText },
+                                                                       xhr.getAllResponseHeaders()
+                                                               );
                                                        }
                                                }
+                                       };
+                               };
+
+                               // Listen to events
+                               xhr.onload = callback();
+                               errorCallback = xhr.onerror = callback( "error" );
 
-                                               // Call complete if needed
-                                               if ( responses ) {
-                                                       complete( status, statusText, responses, xhr.getAllResponseHeaders() );
+                               // Support: IE 9 only
+                               // Use onreadystatechange to replace onabort
+                               // to handle uncaught aborts
+                               if ( xhr.onabort !== undefined ) {
+                                       xhr.onabort = errorCallback;
+                               } else {
+                                       xhr.onreadystatechange = function() {
+
+                                               // Check readyState before timeout as it changes
+                                               if ( xhr.readyState === 4 ) {
+
+                                                       // Allow onerror to be called first,
+                                                       // but that will not handle a native abort
+                                                       // Also, save errorCallback to a variable
+                                                       // as xhr.onerror cannot be accessed
+                                                       window.setTimeout( function() {
+                                                               if ( callback ) {
+                                                                       errorCallback();
+                                                               }
+                                                       } );
                                                }
                                        };
+                               }
 
-                                       if ( !options.async ) {
-                                               // if we're in sync mode we fire the callback
-                                               callback();
-                                       } else if ( xhr.readyState === 4 ) {
-                                               // (IE6 & IE7) if it's in cache and has been
-                                               // retrieved directly we need to fire the callback
-                                               setTimeout( callback );
-                                       } else {
-                                               // Add to the list of active xhr callbacks
-                                               xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
-                                       }
-                               },
+                               // Create the abort callback
+                               callback = callback( "abort" );
+
+                               try {
 
-                               abort: function() {
+                                       // Do send the request (this may raise an exception)
+                                       xhr.send( options.hasContent && options.data || null );
+                               } catch ( e ) {
+
+                                       // #14683: Only rethrow if this hasn't been notified as an error yet
                                        if ( callback ) {
-                                               callback( undefined, true );
+                                               throw e;
                                        }
                                }
-                       };
-               }
-       });
-}
+                       },
 
-// Functions to create xhrs
-function createStandardXHR() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch( e ) {}
-}
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
 
-function createActiveXHR() {
-       try {
-               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-       } catch( e ) {}
-}
 
 
 
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+       if ( s.crossDomain ) {
+               s.contents.script = false;
+       }
+} );
 
 // Install script dataType
-jQuery.ajaxSetup({
+jQuery.ajaxSetup( {
        accepts: {
-               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+               script: "text/javascript, application/javascript, " +
+                       "application/ecmascript, application/x-ecmascript"
        },
        contents: {
-               script: /(?:java|ecma)script/
+               script: /\b(?:java|ecma)script\b/
        },
        converters: {
                "text script": function( text ) {
@@ -9772,78 +9607,51 @@ jQuery.ajaxSetup({
                        return text;
                }
        }
-});
+} );
 
-// Handle cache's special case and global
+// Handle cache's special case and crossDomain
 jQuery.ajaxPrefilter( "script", function( s ) {
        if ( s.cache === undefined ) {
                s.cache = false;
        }
        if ( s.crossDomain ) {
                s.type = "GET";
-               s.global = false;
        }
-});
+} );
 
 // Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
+jQuery.ajaxTransport( "script", function( s ) {
 
        // This transport only deals with cross domain requests
        if ( s.crossDomain ) {
-
-               var script,
-                       head = document.head || jQuery("head")[0] || document.documentElement;
-
+               var script, callback;
                return {
-
-                       send: function( _, callback ) {
-
-                               script = document.createElement("script");
-
-                               script.async = true;
-
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
-                               }
-
-                               script.src = s.url;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-
-                                               // Remove the script
-                                               if ( script.parentNode ) {
-                                                       script.parentNode.removeChild( script );
-                                               }
-
-                                               // Dereference the script
-                                               script = null;
-
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
+                       send: function( _, complete ) {
+                               script = jQuery( "<script>" ).prop( {
+                                       charset: s.scriptCharset,
+                                       src: s.url
+                               } ).on(
+                                       "load error",
+                                       callback = function( evt ) {
+                                               script.remove();
+                                               callback = null;
+                                               if ( evt ) {
+                                                       complete( evt.type === "error" ? 404 : 200, evt.type );
                                                }
                                        }
-                               };
+                               );
 
-                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
                                // Use native DOM manipulation to avoid our domManip AJAX trickery
-                               head.insertBefore( script, head.firstChild );
+                               document.head.appendChild( script[ 0 ] );
                        },
-
                        abort: function() {
-                               if ( script ) {
-                                       script.onload( undefined, true );
+                               if ( callback ) {
+                                       callback();
                                }
                        }
                };
        }
-});
+} );
 
 
 
@@ -9852,14 +9660,14 @@ var oldCallbacks = [],
        rjsonp = /(=)\?(?=&|$)|\?\?/;
 
 // Default jsonp settings
-jQuery.ajaxSetup({
+jQuery.ajaxSetup( {
        jsonp: "callback",
        jsonpCallback: function() {
                var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
                this[ callback ] = true;
                return callback;
        }
-});
+} );
 
 // Detect, normalize options and install callbacks for jsonp requests
 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
@@ -9867,7 +9675,10 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
        var callbackName, overwritten, responseContainer,
                jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
                        "url" :
-                       typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+                       typeof s.data === "string" &&
+                               ( s.contentType || "" )
+                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+                               rjsonp.test( s.data ) && "data"
                );
 
        // Handle iff the expected data type is "jsonp" or we have a parameter to set
@@ -9886,14 +9697,14 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
                }
 
                // Use data converter to retrieve json after script execution
-               s.converters["script json"] = function() {
+               s.converters[ "script json" ] = function() {
                        if ( !responseContainer ) {
                                jQuery.error( callbackName + " was not called" );
                        }
                        return responseContainer[ 0 ];
                };
 
-               // force json dataType
+               // Force json dataType
                s.dataTypes[ 0 ] = "json";
 
                // Install callback
@@ -9903,16 +9714,24 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
                };
 
                // Clean-up function (fires after converters)
-               jqXHR.always(function() {
-                       // Restore preexisting value
-                       window[ callbackName ] = overwritten;
+               jqXHR.always( function() {
+
+                       // If previous value didn't exist - remove it
+                       if ( overwritten === undefined ) {
+                               jQuery( window ).removeProp( callbackName );
+
+                       // Otherwise restore preexisting value
+                       } else {
+                               window[ callbackName ] = overwritten;
+                       }
 
                        // Save back as free
                        if ( s[ callbackName ] ) {
-                               // make sure that re-using the options doesn't screw things around
+
+                               // Make sure that re-using the options doesn't screw things around
                                s.jsonpCallback = originalSettings.jsonpCallback;
 
-                               // save the callback name for future use
+                               // Save the callback name for future use
                                oldCallbacks.push( callbackName );
                        }
 
@@ -9922,38 +9741,70 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
                        }
 
                        responseContainer = overwritten = undefined;
-               });
+               } );
 
                // Delegate to script
                return "script";
        }
-});
+} );
+
 
 
 
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+       var body = document.implementation.createHTMLDocument( "" ).body;
+       body.innerHTML = "<form></form><form></form>";
+       return body.childNodes.length === 2;
+} )();
 
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
 // keepScripts (optional): If true, will include scripts passed in the html string
 jQuery.parseHTML = function( data, context, keepScripts ) {
-       if ( !data || typeof data !== "string" ) {
-               return null;
+       if ( typeof data !== "string" ) {
+               return [];
        }
        if ( typeof context === "boolean" ) {
                keepScripts = context;
                context = false;
        }
-       context = context || document;
 
-       var parsed = rsingleTag.exec( data ),
-               scripts = !keepScripts && [];
+       var base, parsed, scripts;
+
+       if ( !context ) {
+
+               // Stop scripts or inline event handlers from being executed immediately
+               // by using document.implementation
+               if ( support.createHTMLDocument ) {
+                       context = document.implementation.createHTMLDocument( "" );
+
+                       // Set the base href for the created document
+                       // so any parsed elements with URLs
+                       // are based on the document's URL (gh-2965)
+                       base = context.createElement( "base" );
+                       base.href = document.location.href;
+                       context.head.appendChild( base );
+               } else {
+                       context = document;
+               }
+       }
+
+       parsed = rsingleTag.exec( data );
+       scripts = !keepScripts && [];
 
        // Single tag
        if ( parsed ) {
-               return [ context.createElement( parsed[1] ) ];
+               return [ context.createElement( parsed[ 1 ] ) ];
        }
 
-       parsed = jQuery.buildFragment( [ data ], context, scripts );
+       parsed = buildFragment( [ data ], context, scripts );
 
        if ( scripts && scripts.length ) {
                jQuery( scripts ).remove();
@@ -9963,23 +9814,16 @@ jQuery.parseHTML = function( data, context, keepScripts ) {
 };
 
 
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
 /**
  * Load a url into a page
  */
 jQuery.fn.load = function( url, params, callback ) {
-       if ( typeof url !== "string" && _load ) {
-               return _load.apply( this, arguments );
-       }
-
-       var selector, response, type,
+       var selector, type, response,
                self = this,
-               off = url.indexOf(" ");
+               off = url.indexOf( " " );
 
-       if ( off >= 0 ) {
-               selector = jQuery.trim( url.slice( off, url.length ) );
+       if ( off > -1 ) {
+               selector = stripAndCollapse( url.slice( off ) );
                url = url.slice( 0, off );
        }
 
@@ -9997,14 +9841,16 @@ jQuery.fn.load = function( url, params, callback ) {
 
        // If we have elements to modify, make the request
        if ( self.length > 0 ) {
-               jQuery.ajax({
+               jQuery.ajax( {
                        url: url,
 
-                       // if "type" variable is undefined, then "GET" method will be used
-                       type: type,
+                       // If "type" variable is undefined, then "GET" method will be used.
+                       // Make value of this field explicit since
+                       // user can override it through ajaxSetup method
+                       type: type || "GET",
                        dataType: "html",
                        data: params
-               }).done(function( responseText ) {
+               } ).done( function( responseText ) {
 
                        // Save response for use in complete callback
                        response = arguments;
@@ -10013,14 +9859,19 @@ jQuery.fn.load = function( url, params, callback ) {
 
                                // If a selector was specified, locate the right elements in a dummy div
                                // Exclude scripts to avoid IE 'Permission Denied' errors
-                               jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
 
                                // Otherwise use the full result
                                responseText );
 
-               }).complete( callback && function( jqXHR, status ) {
-                       self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
-               });
+               // If the request succeeds, this function gets "data", "status", "jqXHR"
+               // but they are ignored because response was set above.
+               // If it fails, this function gets "jqXHR", "status", "error"
+               } ).always( callback && function( jqXHR, status ) {
+                       self.each( function() {
+                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+                       } );
+               } );
        }
 
        return this;
@@ -10030,38 +9881,31 @@ jQuery.fn.load = function( url, params, callback ) {
 
 
 // Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+jQuery.each( [
+       "ajaxStart",
+       "ajaxStop",
+       "ajaxComplete",
+       "ajaxError",
+       "ajaxSuccess",
+       "ajaxSend"
+], function( i, type ) {
        jQuery.fn[ type ] = function( fn ) {
                return this.on( type, fn );
        };
-});
+} );
 
 
 
 
-jQuery.expr.filters.animated = function( elem ) {
-       return jQuery.grep(jQuery.timers, function( fn ) {
+jQuery.expr.pseudos.animated = function( elem ) {
+       return jQuery.grep( jQuery.timers, function( fn ) {
                return elem === fn.elem;
-       }).length;
+       } ).length;
 };
 
 
 
 
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
-       return jQuery.isWindow( elem ) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-
 jQuery.offset = {
        setOffset: function( elem, options, i ) {
                var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
@@ -10069,7 +9913,7 @@ jQuery.offset = {
                        curElem = jQuery( elem ),
                        props = {};
 
-               // set position first, in-case top/left are set even on static elem
+               // Set position first, in-case top/left are set even on static elem
                if ( position === "static" ) {
                        elem.style.position = "relative";
                }
@@ -10078,20 +9922,24 @@ jQuery.offset = {
                curCSSTop = jQuery.css( elem, "top" );
                curCSSLeft = jQuery.css( elem, "left" );
                calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-                       jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
+                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
 
-               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               // Need to be able to calculate position if either
+               // top or left is auto and position is either absolute or fixed
                if ( calculatePosition ) {
                        curPosition = curElem.position();
                        curTop = curPosition.top;
                        curLeft = curPosition.left;
+
                } else {
                        curTop = parseFloat( curCSSTop ) || 0;
                        curLeft = parseFloat( curCSSLeft ) || 0;
                }
 
                if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
                }
 
                if ( options.top != null ) {
@@ -10103,47 +9951,49 @@ jQuery.offset = {
 
                if ( "using" in options ) {
                        options.using.call( elem, props );
+
                } else {
                        curElem.css( props );
                }
        }
 };
 
-jQuery.fn.extend({
+jQuery.fn.extend( {
        offset: function( options ) {
+
+               // Preserve chaining for setter
                if ( arguments.length ) {
                        return options === undefined ?
                                this :
-                               this.each(function( i ) {
+                               this.each( function( i ) {
                                        jQuery.offset.setOffset( this, options, i );
-                               });
+                               } );
                }
 
-               var docElem, win,
-                       box = { top: 0, left: 0 },
-                       elem = this[ 0 ],
-                       doc = elem && elem.ownerDocument;
+               var doc, docElem, rect, win,
+                       elem = this[ 0 ];
 
-               if ( !doc ) {
+               if ( !elem ) {
                        return;
                }
 
-               docElem = doc.documentElement;
-
-               // Make sure it's not a disconnected DOM node
-               if ( !jQuery.contains( docElem, elem ) ) {
-                       return box;
+               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+               // Support: IE <=11 only
+               // Running getBoundingClientRect on a
+               // disconnected node in IE throws an error
+               if ( !elem.getClientRects().length ) {
+                       return { top: 0, left: 0 };
                }
 
-               // If we don't have gBCR, just use 0,0 rather than error
-               // BlackBerry 5, iOS 3 (original iPhone)
-               if ( typeof elem.getBoundingClientRect !== strundefined ) {
-                       box = elem.getBoundingClientRect();
-               }
-               win = getWindow( doc );
+               rect = elem.getBoundingClientRect();
+
+               doc = elem.ownerDocument;
+               docElem = doc.documentElement;
+               win = doc.defaultView;
+
                return {
-                       top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
-                       left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+                       top: rect.top + win.pageYOffset - docElem.clientTop,
+                       left: rect.left + win.pageXOffset - docElem.clientLeft
                };
        },
 
@@ -10153,99 +10003,124 @@ jQuery.fn.extend({
                }
 
                var offsetParent, offset,
-                       parentOffset = { top: 0, left: 0 },
-                       elem = this[ 0 ];
+                       elem = this[ 0 ],
+                       parentOffset = { top: 0, left: 0 };
 
-               // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
                if ( jQuery.css( elem, "position" ) === "fixed" ) {
-                       // we assume that getBoundingClientRect is available when computed position is fixed
+
+                       // Assume getBoundingClientRect is there when computed position is fixed
                        offset = elem.getBoundingClientRect();
+
                } else {
+
                        // Get *real* offsetParent
                        offsetParent = this.offsetParent();
 
                        // Get correct offsets
                        offset = this.offset();
-                       if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
                                parentOffset = offsetParent.offset();
                        }
 
                        // Add offsetParent borders
-                       parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
-                       parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+                       parentOffset = {
+                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+                       };
                }
 
                // Subtract parent offsets and element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
                return {
-                       top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
                };
        },
 
+       // This method will return documentElement in the following cases:
+       // 1) For the element inside the iframe without offsetParent, this method will return
+       //    documentElement of the parent window
+       // 2) For the hidden or detached element
+       // 3) For body or html element, i.e. in case of the html node - it will return itself
+       //
+       // but those exceptions were never presented as a real life use-cases
+       // and might be considered as more preferable results.
+       //
+       // This logic, however, is not guaranteed and can change at any point in the future
        offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || docElem;
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
 
-                       while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
+                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
                                offsetParent = offsetParent.offsetParent;
                        }
-                       return offsetParent || docElem;
-               });
+
+                       return offsetParent || documentElement;
+               } );
        }
-});
+} );
 
 // Create scrollLeft and scrollTop methods
 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-       var top = /Y/.test( prop );
+       var top = "pageYOffset" === prop;
 
        jQuery.fn[ method ] = function( val ) {
                return access( this, function( elem, method, val ) {
-                       var win = getWindow( elem );
+
+                       // Coalesce documents and windows
+                       var win;
+                       if ( jQuery.isWindow( elem ) ) {
+                               win = elem;
+                       } else if ( elem.nodeType === 9 ) {
+                               win = elem.defaultView;
+                       }
 
                        if ( val === undefined ) {
-                               return win ? (prop in win) ? win[ prop ] :
-                                       win.document.documentElement[ method ] :
-                                       elem[ method ];
+                               return win ? win[ prop ] : elem[ method ];
                        }
 
                        if ( win ) {
                                win.scrollTo(
-                                       !top ? val : jQuery( win ).scrollLeft(),
-                                       top ? val : jQuery( win ).scrollTop()
+                                       !top ? val : win.pageXOffset,
+                                       top ? val : win.pageYOffset
                                );
 
                        } else {
                                elem[ method ] = val;
                        }
-               }, method, val, arguments.length, null );
+               }, method, val, arguments.length );
        };
-});
+} );
 
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
 // Add the top/left cssHooks using jQuery.fn.position
 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
 jQuery.each( [ "top", "left" ], function( i, prop ) {
        jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
                function( elem, computed ) {
                        if ( computed ) {
                                computed = curCSS( elem, prop );
-                               // if curCSS returns percentage, fallback to offset
+
+                               // If curCSS returns percentage, fallback to offset
                                return rnumnonpx.test( computed ) ?
                                        jQuery( elem ).position()[ prop ] + "px" :
                                        computed;
                        }
                }
        );
-});
+} );
 
 
 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-               // margin is only for outerHeight, outerWidth
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+               function( defaultExtra, funcName ) {
+
+               // Margin is only for outerHeight, outerWidth
                jQuery.fn[ funcName ] = function( margin, value ) {
                        var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
                                extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
@@ -10254,18 +10129,19 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
                                var doc;
 
                                if ( jQuery.isWindow( elem ) ) {
-                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
-                                       // https://github.com/jquery/jquery/pull/764
-                                       return elem.document.documentElement[ "client" + name ];
+
+                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+                                       return funcName.indexOf( "outer" ) === 0 ?
+                                               elem[ "inner" + name ] :
+                                               elem.document.documentElement[ "client" + name ];
                                }
 
                                // Get document width or height
                                if ( elem.nodeType === 9 ) {
                                        doc = elem.documentElement;
 
-                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
-                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
                                        return Math.max(
                                                elem.body[ "scroll" + name ], doc[ "scroll" + name ],
                                                elem.body[ "offset" + name ], doc[ "offset" + name ],
@@ -10274,23 +10150,49 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
                                }
 
                                return value === undefined ?
+
                                        // Get width or height on the element, requesting but not forcing parseFloat
                                        jQuery.css( elem, type, extra ) :
 
                                        // Set width or height on the element
                                        jQuery.style( elem, type, value, extra );
-                       }, type, chainable ? margin : undefined, chainable, null );
+                       }, type, chainable ? margin : undefined, chainable );
                };
-       });
-});
+       } );
+} );
 
 
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
-       return this.length;
-};
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
 
-jQuery.fn.andSelf = jQuery.fn.addBack;
+jQuery.holdReady = function( hold ) {
+       if ( hold ) {
+               jQuery.readyWait++;
+       } else {
+               jQuery.ready( true );
+       }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
 
 
 
@@ -10311,13 +10213,14 @@ jQuery.fn.andSelf = jQuery.fn.addBack;
 if ( typeof define === "function" && define.amd ) {
        define( "jquery", [], function() {
                return jQuery;
-       });
+       } );
 }
 
 
 
 
 var
+
        // Map over jQuery in case of overwrite
        _jQuery = window.jQuery,
 
@@ -10336,10 +10239,10 @@ jQuery.noConflict = function( deep ) {
        return jQuery;
 };
 
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
 // and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
+if ( !noGlobal ) {
        window.jQuery = window.$ = jQuery;
 }
 
@@ -10347,5 +10250,4 @@ if ( typeof noGlobal === strundefined ) {
 
 
 return jQuery;
-
-}));
+} );
diff --git a/resources/lib/jquery/jquery3.js b/resources/lib/jquery/jquery3.js
deleted file mode 100644 (file)
index d2d8ca4..0000000
+++ /dev/null
@@ -1,10253 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.2.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2017-03-20T18:59Z
- */
-( function( global, factory ) {
-
-       "use strict";
-
-       if ( typeof module === "object" && typeof module.exports === "object" ) {
-
-               // For CommonJS and CommonJS-like environments where a proper `window`
-               // is present, execute the factory and get jQuery.
-               // For environments that do not have a `window` with a `document`
-               // (such as Node.js), expose a factory as module.exports.
-               // This accentuates the need for the creation of a real `window`.
-               // e.g. var jQuery = require("jquery")(window);
-               // See ticket #14549 for more info.
-               module.exports = global.document ?
-                       factory( global, true ) :
-                       function( w ) {
-                               if ( !w.document ) {
-                                       throw new Error( "jQuery requires a window with a document" );
-                               }
-                               return factory( w );
-                       };
-       } else {
-               factory( global );
-       }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-
-
-       function DOMEval( code, doc ) {
-               doc = doc || document;
-
-               var script = doc.createElement( "script" );
-
-               script.text = code;
-               doc.head.appendChild( script ).parentNode.removeChild( script );
-       }
-/* global Symbol */
-// Defining this global in .eslintrc.json would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
-       version = "3.2.1",
-
-       // Define a local copy of jQuery
-       jQuery = function( selector, context ) {
-
-               // The jQuery object is actually just the init constructor 'enhanced'
-               // Need init if jQuery is called (just allow error to be thrown if not included)
-               return new jQuery.fn.init( selector, context );
-       },
-
-       // Support: Android <=4.0 only
-       // Make sure we trim BOM and NBSP
-       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-       // Matches dashed string for camelizing
-       rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([a-z])/g,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
-       };
-
-jQuery.fn = jQuery.prototype = {
-
-       // The current version of jQuery being used
-       jquery: version,
-
-       constructor: jQuery,
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       toArray: function() {
-               return slice.call( this );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-
-               // Return all the elements in a clean array
-               if ( num == null ) {
-                       return slice.call( this );
-               }
-
-               // Return just the one element from the set
-               return num < 0 ? this[ num + this.length ] : this[ num ];
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems ) {
-
-               // Build a new jQuery matched element set
-               var ret = jQuery.merge( this.constructor(), elems );
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       each: function( callback ) {
-               return jQuery.each( this, callback );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map( this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               } ) );
-       },
-
-       slice: function() {
-               return this.pushStack( slice.apply( this, arguments ) );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       eq: function( i ) {
-               var len = this.length,
-                       j = +i + ( i < 0 ? len : 0 );
-               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
-       },
-
-       end: function() {
-               return this.prevObject || this.constructor();
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: push,
-       sort: arr.sort,
-       splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var options, name, src, copy, copyIsArray, clone,
-               target = arguments[ 0 ] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-
-               // Skip the boolean and the target
-               target = arguments[ i ] || {};
-               i++;
-       }
-
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
-               target = {};
-       }
-
-       // Extend jQuery itself if only one argument is passed
-       if ( i === length ) {
-               target = this;
-               i--;
-       }
-
-       for ( ; i < length; i++ ) {
-
-               // Only deal with non-null/undefined values
-               if ( ( options = arguments[ i ] ) != null ) {
-
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
-                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
-
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && Array.isArray( src ) ? src : [];
-
-                                       } else {
-                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
-                                       }
-
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend( {
-
-       // Unique for each copy of jQuery on the page
-       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-       // Assume jQuery is ready without the ready module
-       isReady: true,
-
-       error: function( msg ) {
-               throw new Error( msg );
-       },
-
-       noop: function() {},
-
-       isFunction: function( obj ) {
-               return jQuery.type( obj ) === "function";
-       },
-
-       isWindow: function( obj ) {
-               return obj != null && obj === obj.window;
-       },
-
-       isNumeric: function( obj ) {
-
-               // As of jQuery 3.0, isNumeric is limited to
-               // strings and numbers (primitives or objects)
-               // that can be coerced to finite numbers (gh-2662)
-               var type = jQuery.type( obj );
-               return ( type === "number" || type === "string" ) &&
-
-                       // parseFloat NaNs numeric-cast false positives ("")
-                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-                       // subtraction forces infinities to NaN
-                       !isNaN( obj - parseFloat( obj ) );
-       },
-
-       isPlainObject: function( obj ) {
-               var proto, Ctor;
-
-               // Detect obvious negatives
-               // Use toString instead of jQuery.type to catch host objects
-               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
-                       return false;
-               }
-
-               proto = getProto( obj );
-
-               // Objects with no prototype (e.g., `Object.create( null )`) are plain
-               if ( !proto ) {
-                       return true;
-               }
-
-               // Objects with prototype are plain iff they were constructed by a global Object function
-               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
-               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
-       },
-
-       isEmptyObject: function( obj ) {
-
-               /* eslint-disable no-unused-vars */
-               // See https://github.com/eslint/eslint/issues/6125
-               var name;
-
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       type: function( obj ) {
-               if ( obj == null ) {
-                       return obj + "";
-               }
-
-               // Support: Android <=2.3 only (functionish RegExp)
-               return typeof obj === "object" || typeof obj === "function" ?
-                       class2type[ toString.call( obj ) ] || "object" :
-                       typeof obj;
-       },
-
-       // Evaluates a script in a global context
-       globalEval: function( code ) {
-               DOMEval( code );
-       },
-
-       // Convert dashed to camelCase; used by the css and data modules
-       // Support: IE <=9 - 11, Edge 12 - 13
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-       },
-
-       each: function( obj, callback ) {
-               var length, i = 0;
-
-               if ( isArrayLike( obj ) ) {
-                       length = obj.length;
-                       for ( ; i < length; i++ ) {
-                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-                                       break;
-                               }
-                       }
-               } else {
-                       for ( i in obj ) {
-                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-                                       break;
-                               }
-                       }
-               }
-
-               return obj;
-       },
-
-       // Support: Android <=4.0 only
-       trim: function( text ) {
-               return text == null ?
-                       "" :
-                       ( text + "" ).replace( rtrim, "" );
-       },
-
-       // results is for internal usage only
-       makeArray: function( arr, results ) {
-               var ret = results || [];
-
-               if ( arr != null ) {
-                       if ( isArrayLike( Object( arr ) ) ) {
-                               jQuery.merge( ret,
-                                       typeof arr === "string" ?
-                                       [ arr ] : arr
-                               );
-                       } else {
-                               push.call( ret, arr );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, arr, i ) {
-               return arr == null ? -1 : indexOf.call( arr, elem, i );
-       },
-
-       // Support: Android <=4.0 only, PhantomJS 1 only
-       // push.apply(_, arraylike) throws on ancient WebKit
-       merge: function( first, second ) {
-               var len = +second.length,
-                       j = 0,
-                       i = first.length;
-
-               for ( ; j < len; j++ ) {
-                       first[ i++ ] = second[ j ];
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, invert ) {
-               var callbackInverse,
-                       matches = [],
-                       i = 0,
-                       length = elems.length,
-                       callbackExpect = !invert;
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( ; i < length; i++ ) {
-                       callbackInverse = !callback( elems[ i ], i );
-                       if ( callbackInverse !== callbackExpect ) {
-                               matches.push( elems[ i ] );
-                       }
-               }
-
-               return matches;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var length, value,
-                       i = 0,
-                       ret = [];
-
-               // Go through the array, translating each of the items to their new values
-               if ( isArrayLike( elems ) ) {
-                       length = elems.length;
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-
-               // Go through every key on the object,
-               } else {
-                       for ( i in elems ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-               }
-
-               // Flatten any nested arrays
-               return concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               var tmp, args, proxy;
-
-               if ( typeof context === "string" ) {
-                       tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
-
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
-
-               // Simulated bind
-               args = slice.call( arguments, 2 );
-               proxy = function() {
-                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
-               };
-
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-               return proxy;
-       },
-
-       now: Date.now,
-
-       // jQuery.support is not used in Core but other projects attach their
-       // properties to it so it needs to exist.
-       support: support
-} );
-
-if ( typeof Symbol === "function" ) {
-       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
-       // Support: real iOS 8.2 only (not reproducible in simulator)
-       // `in` check used to prevent JIT error (gh-2145)
-       // hasOwn isn't used here due to false negatives
-       // regarding Nodelist length in IE
-       var length = !!obj && "length" in obj && obj.length,
-               type = jQuery.type( obj );
-
-       if ( type === "function" || jQuery.isWindow( obj ) ) {
-               return false;
-       }
-
-       return type === "array" || length === 0 ||
-               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.3
- * https://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-08-08
- */
-(function( window ) {
-
-var i,
-       support,
-       Expr,
-       getText,
-       isXML,
-       tokenize,
-       compile,
-       select,
-       outermostContext,
-       sortInput,
-       hasDuplicate,
-
-       // Local document vars
-       setDocument,
-       document,
-       docElem,
-       documentIsHTML,
-       rbuggyQSA,
-       rbuggyMatches,
-       matches,
-       contains,
-
-       // Instance-specific data
-       expando = "sizzle" + 1 * new Date(),
-       preferredDoc = window.document,
-       dirruns = 0,
-       done = 0,
-       classCache = createCache(),
-       tokenCache = createCache(),
-       compilerCache = createCache(),
-       sortOrder = function( a, b ) {
-               if ( a === b ) {
-                       hasDuplicate = true;
-               }
-               return 0;
-       },
-
-       // Instance methods
-       hasOwn = ({}).hasOwnProperty,
-       arr = [],
-       pop = arr.pop,
-       push_native = arr.push,
-       push = arr.push,
-       slice = arr.slice,
-       // Use a stripped-down indexOf as it's faster than native
-       // https://jsperf.com/thor-indexof-vs-for/5
-       indexOf = function( list, elem ) {
-               var i = 0,
-                       len = list.length;
-               for ( ; i < len; i++ ) {
-                       if ( list[i] === elem ) {
-                               return i;
-                       }
-               }
-               return -1;
-       },
-
-       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-       // Regular expressions
-
-       // http://www.w3.org/TR/css3-selectors/#whitespace
-       whitespace = "[\\x20\\t\\r\\n\\f]",
-
-       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
-
-       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
-               // Operator (capture 2)
-               "*([*^$|!~]?=)" + whitespace +
-               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-               "*\\]",
-
-       pseudos = ":(" + identifier + ")(?:\\((" +
-               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
-               // 1. quoted (capture 3; capture 4 or capture 5)
-               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-               // 2. simple (capture 6)
-               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-               // 3. anything else (capture 2)
-               ".*" +
-               ")\\)|)",
-
-       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-       rwhitespace = new RegExp( whitespace + "+", "g" ),
-       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
-       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
-       rpseudo = new RegExp( pseudos ),
-       ridentifier = new RegExp( "^" + identifier + "$" ),
-
-       matchExpr = {
-               "ID": new RegExp( "^#(" + identifier + ")" ),
-               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
-               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
-               "ATTR": new RegExp( "^" + attributes ),
-               "PSEUDO": new RegExp( "^" + pseudos ),
-               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-               // For use in libraries implementing .is()
-               // We use this for POS matching in `select`
-               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-       },
-
-       rinputs = /^(?:input|select|textarea|button)$/i,
-       rheader = /^h\d$/i,
-
-       rnative = /^[^{]+\{\s*\[native \w/,
-
-       // Easily-parseable/retrievable ID or TAG or CLASS selectors
-       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-       rsibling = /[+~]/,
-
-       // CSS escapes
-       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-       funescape = function( _, escaped, escapedWhitespace ) {
-               var high = "0x" + escaped - 0x10000;
-               // NaN means non-codepoint
-               // Support: Firefox<24
-               // Workaround erroneous numeric interpretation of +"0x"
-               return high !== high || escapedWhitespace ?
-                       escaped :
-                       high < 0 ?
-                               // BMP codepoint
-                               String.fromCharCode( high + 0x10000 ) :
-                               // Supplemental Plane codepoint (surrogate pair)
-                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-       },
-
-       // CSS string/identifier serialization
-       // https://drafts.csswg.org/cssom/#common-serializing-idioms
-       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
-       fcssescape = function( ch, asCodePoint ) {
-               if ( asCodePoint ) {
-
-                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
-                       if ( ch === "\0" ) {
-                               return "\uFFFD";
-                       }
-
-                       // Control characters and (dependent upon position) numbers get escaped as code points
-                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
-               }
-
-               // Other potentially-special ASCII characters get backslash-escaped
-               return "\\" + ch;
-       },
-
-       // Used for iframes
-       // See setDocument()
-       // Removing the function wrapper causes a "Permission Denied"
-       // error in IE
-       unloadHandler = function() {
-               setDocument();
-       },
-
-       disabledAncestor = addCombinator(
-               function( elem ) {
-                       return elem.disabled === true && ("form" in elem || "label" in elem);
-               },
-               { dir: "parentNode", next: "legend" }
-       );
-
-// Optimize for push.apply( _, NodeList )
-try {
-       push.apply(
-               (arr = slice.call( preferredDoc.childNodes )),
-               preferredDoc.childNodes
-       );
-       // Support: Android<4.0
-       // Detect silently failing push.apply
-       arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-       push = { apply: arr.length ?
-
-               // Leverage slice if possible
-               function( target, els ) {
-                       push_native.apply( target, slice.call(els) );
-               } :
-
-               // Support: IE<9
-               // Otherwise append directly
-               function( target, els ) {
-                       var j = target.length,
-                               i = 0;
-                       // Can't trust NodeList.length
-                       while ( (target[j++] = els[i++]) ) {}
-                       target.length = j - 1;
-               }
-       };
-}
-
-function Sizzle( selector, context, results, seed ) {
-       var m, i, elem, nid, match, groups, newSelector,
-               newContext = context && context.ownerDocument,
-
-               // nodeType defaults to 9, since context defaults to document
-               nodeType = context ? context.nodeType : 9;
-
-       results = results || [];
-
-       // Return early from calls with invalid selector or context
-       if ( typeof selector !== "string" || !selector ||
-               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
-               return results;
-       }
-
-       // Try to shortcut find operations (as opposed to filters) in HTML documents
-       if ( !seed ) {
-
-               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-                       setDocument( context );
-               }
-               context = context || document;
-
-               if ( documentIsHTML ) {
-
-                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
-                       // (excepting DocumentFragment context, where the methods don't exist)
-                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
-                               // ID selector
-                               if ( (m = match[1]) ) {
-
-                                       // Document context
-                                       if ( nodeType === 9 ) {
-                                               if ( (elem = context.getElementById( m )) ) {
-
-                                                       // Support: IE, Opera, Webkit
-                                                       // TODO: identify versions
-                                                       // getElementById can match elements by name instead of ID
-                                                       if ( elem.id === m ) {
-                                                               results.push( elem );
-                                                               return results;
-                                                       }
-                                               } else {
-                                                       return results;
-                                               }
-
-                                       // Element context
-                                       } else {
-
-                                               // Support: IE, Opera, Webkit
-                                               // TODO: identify versions
-                                               // getElementById can match elements by name instead of ID
-                                               if ( newContext && (elem = newContext.getElementById( m )) &&
-                                                       contains( context, elem ) &&
-                                                       elem.id === m ) {
-
-                                                       results.push( elem );
-                                                       return results;
-                                               }
-                                       }
-
-                               // Type selector
-                               } else if ( match[2] ) {
-                                       push.apply( results, context.getElementsByTagName( selector ) );
-                                       return results;
-
-                               // Class selector
-                               } else if ( (m = match[3]) && support.getElementsByClassName &&
-                                       context.getElementsByClassName ) {
-
-                                       push.apply( results, context.getElementsByClassName( m ) );
-                                       return results;
-                               }
-                       }
-
-                       // Take advantage of querySelectorAll
-                       if ( support.qsa &&
-                               !compilerCache[ selector + " " ] &&
-                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
-                               if ( nodeType !== 1 ) {
-                                       newContext = context;
-                                       newSelector = selector;
-
-                               // qSA looks outside Element context, which is not what we want
-                               // Thanks to Andrew Dupont for this workaround technique
-                               // Support: IE <=8
-                               // Exclude object elements
-                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
-
-                                       // Capture the context ID, setting it first if necessary
-                                       if ( (nid = context.getAttribute( "id" )) ) {
-                                               nid = nid.replace( rcssescape, fcssescape );
-                                       } else {
-                                               context.setAttribute( "id", (nid = expando) );
-                                       }
-
-                                       // Prefix every selector in the list
-                                       groups = tokenize( selector );
-                                       i = groups.length;
-                                       while ( i-- ) {
-                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
-                                       }
-                                       newSelector = groups.join( "," );
-
-                                       // Expand context for sibling selectors
-                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
-                                               context;
-                               }
-
-                               if ( newSelector ) {
-                                       try {
-                                               push.apply( results,
-                                                       newContext.querySelectorAll( newSelector )
-                                               );
-                                               return results;
-                                       } catch ( qsaError ) {
-                                       } finally {
-                                               if ( nid === expando ) {
-                                                       context.removeAttribute( "id" );
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       // All others
-       return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *     deleting the oldest entry
- */
-function createCache() {
-       var keys = [];
-
-       function cache( key, value ) {
-               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-               if ( keys.push( key + " " ) > Expr.cacheLength ) {
-                       // Only keep the most recent entries
-                       delete cache[ keys.shift() ];
-               }
-               return (cache[ key + " " ] = value);
-       }
-       return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-       fn[ expando ] = true;
-       return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
-       var el = document.createElement("fieldset");
-
-       try {
-               return !!fn( el );
-       } catch (e) {
-               return false;
-       } finally {
-               // Remove from its parent by default
-               if ( el.parentNode ) {
-                       el.parentNode.removeChild( el );
-               }
-               // release memory in IE
-               el = null;
-       }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-       var arr = attrs.split("|"),
-               i = arr.length;
-
-       while ( i-- ) {
-               Expr.attrHandle[ arr[i] ] = handler;
-       }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
-       var cur = b && a,
-               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-                       a.sourceIndex - b.sourceIndex;
-
-       // Use IE sourceIndex if available on both nodes
-       if ( diff ) {
-               return diff;
-       }
-
-       // Check if b follows a
-       if ( cur ) {
-               while ( (cur = cur.nextSibling) ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-               }
-       }
-
-       return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return name === "input" && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return (name === "input" || name === "button") && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
-
-       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
-       return function( elem ) {
-
-               // Only certain elements can match :enabled or :disabled
-               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
-               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
-               if ( "form" in elem ) {
-
-                       // Check for inherited disabledness on relevant non-disabled elements:
-                       // * listed form-associated elements in a disabled fieldset
-                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
-                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
-                       // * option elements in a disabled optgroup
-                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
-                       // All such elements have a "form" property.
-                       if ( elem.parentNode && elem.disabled === false ) {
-
-                               // Option elements defer to a parent optgroup if present
-                               if ( "label" in elem ) {
-                                       if ( "label" in elem.parentNode ) {
-                                               return elem.parentNode.disabled === disabled;
-                                       } else {
-                                               return elem.disabled === disabled;
-                                       }
-                               }
-
-                               // Support: IE 6 - 11
-                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
-                               return elem.isDisabled === disabled ||
-
-                                       // Where there is no isDisabled, check manually
-                                       /* jshint -W018 */
-                                       elem.isDisabled !== !disabled &&
-                                               disabledAncestor( elem ) === disabled;
-                       }
-
-                       return elem.disabled === disabled;
-
-               // Try to winnow out elements that can't be disabled before trusting the disabled property.
-               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
-               // even exist on them, let alone have a boolean value.
-               } else if ( "label" in elem ) {
-                       return elem.disabled === disabled;
-               }
-
-               // Remaining elements are neither :enabled nor :disabled
-               return false;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-       return markFunction(function( argument ) {
-               argument = +argument;
-               return markFunction(function( seed, matches ) {
-                       var j,
-                               matchIndexes = fn( [], seed.length, argument ),
-                               i = matchIndexes.length;
-
-                       // Match elements found at the specified indexes
-                       while ( i-- ) {
-                               if ( seed[ (j = matchIndexes[i]) ] ) {
-                                       seed[j] = !(matches[j] = seed[j]);
-                               }
-                       }
-               });
-       });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
-       return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-       var hasCompare, subWindow,
-               doc = node ? node.ownerDocument || node : preferredDoc;
-
-       // Return early if doc is invalid or already selected
-       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-               return document;
-       }
-
-       // Update global variables
-       document = doc;
-       docElem = document.documentElement;
-       documentIsHTML = !isXML( document );
-
-       // Support: IE 9-11, Edge
-       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
-       if ( preferredDoc !== document &&
-               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
-
-               // Support: IE 11, Edge
-               if ( subWindow.addEventListener ) {
-                       subWindow.addEventListener( "unload", unloadHandler, false );
-
-               // Support: IE 9 - 10 only
-               } else if ( subWindow.attachEvent ) {
-                       subWindow.attachEvent( "onunload", unloadHandler );
-               }
-       }
-
-       /* Attributes
-       ---------------------------------------------------------------------- */
-
-       // Support: IE<8
-       // Verify that getAttribute really returns attributes and not properties
-       // (excepting IE8 booleans)
-       support.attributes = assert(function( el ) {
-               el.className = "i";
-               return !el.getAttribute("className");
-       });
-
-       /* getElement(s)By*
-       ---------------------------------------------------------------------- */
-
-       // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( el ) {
-               el.appendChild( document.createComment("") );
-               return !el.getElementsByTagName("*").length;
-       });
-
-       // Support: IE<9
-       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
-       // Support: IE<10
-       // Check if getElementById returns elements by name
-       // The broken getElementById methods don't pick up programmatically-set names,
-       // so use a roundabout getElementsByName test
-       support.getById = assert(function( el ) {
-               docElem.appendChild( el ).id = expando;
-               return !document.getElementsByName || !document.getElementsByName( expando ).length;
-       });
-
-       // ID filter and find
-       if ( support.getById ) {
-               Expr.filter["ID"] = function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               return elem.getAttribute("id") === attrId;
-                       };
-               };
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-                               var elem = context.getElementById( id );
-                               return elem ? [ elem ] : [];
-                       }
-               };
-       } else {
-               Expr.filter["ID"] =  function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               var node = typeof elem.getAttributeNode !== "undefined" &&
-                                       elem.getAttributeNode("id");
-                               return node && node.value === attrId;
-                       };
-               };
-
-               // Support: IE 6 - 7 only
-               // getElementById is not reliable as a find shortcut
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-                               var node, i, elems,
-                                       elem = context.getElementById( id );
-
-                               if ( elem ) {
-
-                                       // Verify the id attribute
-                                       node = elem.getAttributeNode("id");
-                                       if ( node && node.value === id ) {
-                                               return [ elem ];
-                                       }
-
-                                       // Fall back on getElementsByName
-                                       elems = context.getElementsByName( id );
-                                       i = 0;
-                                       while ( (elem = elems[i++]) ) {
-                                               node = elem.getAttributeNode("id");
-                                               if ( node && node.value === id ) {
-                                                       return [ elem ];
-                                               }
-                                       }
-                               }
-
-                               return [];
-                       }
-               };
-       }
-
-       // Tag
-       Expr.find["TAG"] = support.getElementsByTagName ?
-               function( tag, context ) {
-                       if ( typeof context.getElementsByTagName !== "undefined" ) {
-                               return context.getElementsByTagName( tag );
-
-                       // DocumentFragment nodes don't have gEBTN
-                       } else if ( support.qsa ) {
-                               return context.querySelectorAll( tag );
-                       }
-               } :
-
-               function( tag, context ) {
-                       var elem,
-                               tmp = [],
-                               i = 0,
-                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
-                               results = context.getElementsByTagName( tag );
-
-                       // Filter out possible comments
-                       if ( tag === "*" ) {
-                               while ( (elem = results[i++]) ) {
-                                       if ( elem.nodeType === 1 ) {
-                                               tmp.push( elem );
-                                       }
-                               }
-
-                               return tmp;
-                       }
-                       return results;
-               };
-
-       // Class
-       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
-                       return context.getElementsByClassName( className );
-               }
-       };
-
-       /* QSA/matchesSelector
-       ---------------------------------------------------------------------- */
-
-       // QSA and matchesSelector support
-
-       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-       rbuggyMatches = [];
-
-       // qSa(:focus) reports false when true (Chrome 21)
-       // We allow this because of a bug in IE8/9 that throws an error
-       // whenever `document.activeElement` is accessed on an iframe
-       // So, we allow :focus to pass through QSA all the time to avoid the IE error
-       // See https://bugs.jquery.com/ticket/13378
-       rbuggyQSA = [];
-
-       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
-               // Build QSA regex
-               // Regex strategy adopted from Diego Perini
-               assert(function( el ) {
-                       // Select is set to empty string on purpose
-                       // This is to test IE's treatment of not explicitly
-                       // setting a boolean content attribute,
-                       // since its presence should be enough
-                       // https://bugs.jquery.com/ticket/12359
-                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
-                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
-                               "<option selected=''></option></select>";
-
-                       // Support: IE8, Opera 11-12.16
-                       // Nothing should be selected when empty strings follow ^= or $= or *=
-                       // The test attribute must be unknown in Opera but "safe" for WinRT
-                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
-                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-                       }
-
-                       // Support: IE8
-                       // Boolean attributes and "value" are not treated correctly
-                       if ( !el.querySelectorAll("[selected]").length ) {
-                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-                       }
-
-                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
-                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-                               rbuggyQSA.push("~=");
-                       }
-
-                       // Webkit/Opera - :checked should return selected option elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       // IE8 throws error here and will not see later tests
-                       if ( !el.querySelectorAll(":checked").length ) {
-                               rbuggyQSA.push(":checked");
-                       }
-
-                       // Support: Safari 8+, iOS 8+
-                       // https://bugs.webkit.org/show_bug.cgi?id=136851
-                       // In-page `selector#id sibling-combinator selector` fails
-                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
-                               rbuggyQSA.push(".#.+[+~]");
-                       }
-               });
-
-               assert(function( el ) {
-                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
-                               "<select disabled='disabled'><option/></select>";
-
-                       // Support: Windows 8 Native Apps
-                       // The type and name attributes are restricted during .innerHTML assignment
-                       var input = document.createElement("input");
-                       input.setAttribute( "type", "hidden" );
-                       el.appendChild( input ).setAttribute( "name", "D" );
-
-                       // Support: IE8
-                       // Enforce case-sensitivity of name attribute
-                       if ( el.querySelectorAll("[name=d]").length ) {
-                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
-                       }
-
-                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-                       // IE8 throws error here and will not see later tests
-                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
-                               rbuggyQSA.push( ":enabled", ":disabled" );
-                       }
-
-                       // Support: IE9-11+
-                       // IE's :disabled selector does not pick up the children of disabled fieldsets
-                       docElem.appendChild( el ).disabled = true;
-                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
-                               rbuggyQSA.push( ":enabled", ":disabled" );
-                       }
-
-                       // Opera 10-11 does not throw on post-comma invalid pseudos
-                       el.querySelectorAll("*,:x");
-                       rbuggyQSA.push(",.*:");
-               });
-       }
-
-       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
-               docElem.webkitMatchesSelector ||
-               docElem.mozMatchesSelector ||
-               docElem.oMatchesSelector ||
-               docElem.msMatchesSelector) )) ) {
-
-               assert(function( el ) {
-                       // Check to see if it's possible to do matchesSelector
-                       // on a disconnected node (IE 9)
-                       support.disconnectedMatch = matches.call( el, "*" );
-
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( el, "[s!='']:x" );
-                       rbuggyMatches.push( "!=", pseudos );
-               });
-       }
-
-       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-       /* Contains
-       ---------------------------------------------------------------------- */
-       hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-       // Element contains another
-       // Purposefully self-exclusive
-       // As in, an element does not contain itself
-       contains = hasCompare || rnative.test( docElem.contains ) ?
-               function( a, b ) {
-                       var adown = a.nodeType === 9 ? a.documentElement : a,
-                               bup = b && b.parentNode;
-                       return a === bup || !!( bup && bup.nodeType === 1 && (
-                               adown.contains ?
-                                       adown.contains( bup ) :
-                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-                       ));
-               } :
-               function( a, b ) {
-                       if ( b ) {
-                               while ( (b = b.parentNode) ) {
-                                       if ( b === a ) {
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               };
-
-       /* Sorting
-       ---------------------------------------------------------------------- */
-
-       // Document order sorting
-       sortOrder = hasCompare ?
-       function( a, b ) {
-
-               // Flag for duplicate removal
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               // Sort on method existence if only one input has compareDocumentPosition
-               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-               if ( compare ) {
-                       return compare;
-               }
-
-               // Calculate position if both inputs belong to the same document
-               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
-                       a.compareDocumentPosition( b ) :
-
-                       // Otherwise we know they are disconnected
-                       1;
-
-               // Disconnected nodes
-               if ( compare & 1 ||
-                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-                       // Choose the first element that is related to our preferred document
-                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
-                               return -1;
-                       }
-                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
-                               return 1;
-                       }
-
-                       // Maintain original order
-                       return sortInput ?
-                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-                               0;
-               }
-
-               return compare & 4 ? -1 : 1;
-       } :
-       function( a, b ) {
-               // Exit early if the nodes are identical
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               var cur,
-                       i = 0,
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       ap = [ a ],
-                       bp = [ b ];
-
-               // Parentless nodes are either documents or disconnected
-               if ( !aup || !bup ) {
-                       return a === document ? -1 :
-                               b === document ? 1 :
-                               aup ? -1 :
-                               bup ? 1 :
-                               sortInput ?
-                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-                               0;
-
-               // If the nodes are siblings, we can do a quick check
-               } else if ( aup === bup ) {
-                       return siblingCheck( a, b );
-               }
-
-               // Otherwise we need full lists of their ancestors for comparison
-               cur = a;
-               while ( (cur = cur.parentNode) ) {
-                       ap.unshift( cur );
-               }
-               cur = b;
-               while ( (cur = cur.parentNode) ) {
-                       bp.unshift( cur );
-               }
-
-               // Walk down the tree looking for a discrepancy
-               while ( ap[i] === bp[i] ) {
-                       i++;
-               }
-
-               return i ?
-                       // Do a sibling check if the nodes have a common ancestor
-                       siblingCheck( ap[i], bp[i] ) :
-
-                       // Otherwise nodes in our document sort first
-                       ap[i] === preferredDoc ? -1 :
-                       bp[i] === preferredDoc ? 1 :
-                       0;
-       };
-
-       return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
-       return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       // Make sure that attribute selectors are quoted
-       expr = expr.replace( rattributeQuotes, "='$1']" );
-
-       if ( support.matchesSelector && documentIsHTML &&
-               !compilerCache[ expr + " " ] &&
-               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-               try {
-                       var ret = matches.call( elem, expr );
-
-                       // IE 9's matchesSelector returns false on disconnected nodes
-                       if ( ret || support.disconnectedMatch ||
-                                       // As well, disconnected nodes are said to be in a document
-                                       // fragment in IE 9
-                                       elem.document && elem.document.nodeType !== 11 ) {
-                               return ret;
-                       }
-               } catch (e) {}
-       }
-
-       return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-       // Set document vars if needed
-       if ( ( context.ownerDocument || context ) !== document ) {
-               setDocument( context );
-       }
-       return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       var fn = Expr.attrHandle[ name.toLowerCase() ],
-               // Don't get fooled by Object.prototype properties (jQuery #13807)
-               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-                       fn( elem, name, !documentIsHTML ) :
-                       undefined;
-
-       return val !== undefined ?
-               val :
-               support.attributes || !documentIsHTML ?
-                       elem.getAttribute( name ) :
-                       (val = elem.getAttributeNode(name)) && val.specified ?
-                               val.value :
-                               null;
-};
-
-Sizzle.escape = function( sel ) {
-       return (sel + "").replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
-       throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-       var elem,
-               duplicates = [],
-               j = 0,
-               i = 0;
-
-       // Unless we *know* we can detect duplicates, assume their presence
-       hasDuplicate = !support.detectDuplicates;
-       sortInput = !support.sortStable && results.slice( 0 );
-       results.sort( sortOrder );
-
-       if ( hasDuplicate ) {
-               while ( (elem = results[i++]) ) {
-                       if ( elem === results[ i ] ) {
-                               j = duplicates.push( i );
-                       }
-               }
-               while ( j-- ) {
-                       results.splice( duplicates[ j ], 1 );
-               }
-       }
-
-       // Clear input after sorting to release objects
-       // See https://github.com/jquery/sizzle/pull/225
-       sortInput = null;
-
-       return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-       var node,
-               ret = "",
-               i = 0,
-               nodeType = elem.nodeType;
-
-       if ( !nodeType ) {
-               // If no nodeType, this is expected to be an array
-               while ( (node = elem[i++]) ) {
-                       // Do not traverse comment nodes
-                       ret += getText( node );
-               }
-       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-               // Use textContent for elements
-               // innerText usage removed for consistency of new lines (jQuery #11153)
-               if ( typeof elem.textContent === "string" ) {
-                       return elem.textContent;
-               } else {
-                       // Traverse its children
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               ret += getText( elem );
-                       }
-               }
-       } else if ( nodeType === 3 || nodeType === 4 ) {
-               return elem.nodeValue;
-       }
-       // Do not include comment or processing instruction nodes
-
-       return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-       // Can be adjusted by the user
-       cacheLength: 50,
-
-       createPseudo: markFunction,
-
-       match: matchExpr,
-
-       attrHandle: {},
-
-       find: {},
-
-       relative: {
-               ">": { dir: "parentNode", first: true },
-               " ": { dir: "parentNode" },
-               "+": { dir: "previousSibling", first: true },
-               "~": { dir: "previousSibling" }
-       },
-
-       preFilter: {
-               "ATTR": function( match ) {
-                       match[1] = match[1].replace( runescape, funescape );
-
-                       // Move the given value to match[3] whether quoted or unquoted
-                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
-                       if ( match[2] === "~=" ) {
-                               match[3] = " " + match[3] + " ";
-                       }
-
-                       return match.slice( 0, 4 );
-               },
-
-               "CHILD": function( match ) {
-                       /* matches from matchExpr["CHILD"]
-                               1 type (only|nth|...)
-                               2 what (child|of-type)
-                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-                               4 xn-component of xn+y argument ([+-]?\d*n|)
-                               5 sign of xn-component
-                               6 x of xn-component
-                               7 sign of y-component
-                               8 y of y-component
-                       */
-                       match[1] = match[1].toLowerCase();
-
-                       if ( match[1].slice( 0, 3 ) === "nth" ) {
-                               // nth-* requires argument
-                               if ( !match[3] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               // numeric x and y parameters for Expr.filter.CHILD
-                               // remember that false/true cast respectively to 0/1
-                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-                       // other types prohibit arguments
-                       } else if ( match[3] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       return match;
-               },
-
-               "PSEUDO": function( match ) {
-                       var excess,
-                               unquoted = !match[6] && match[2];
-
-                       if ( matchExpr["CHILD"].test( match[0] ) ) {
-                               return null;
-                       }
-
-                       // Accept quoted arguments as-is
-                       if ( match[3] ) {
-                               match[2] = match[4] || match[5] || "";
-
-                       // Strip excess characters from unquoted arguments
-                       } else if ( unquoted && rpseudo.test( unquoted ) &&
-                               // Get excess from tokenize (recursively)
-                               (excess = tokenize( unquoted, true )) &&
-                               // advance to the next closing parenthesis
-                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-                               // excess is a negative index
-                               match[0] = match[0].slice( 0, excess );
-                               match[2] = unquoted.slice( 0, excess );
-                       }
-
-                       // Return only captures needed by the pseudo filter method (type and argument)
-                       return match.slice( 0, 3 );
-               }
-       },
-
-       filter: {
-
-               "TAG": function( nodeNameSelector ) {
-                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-                       return nodeNameSelector === "*" ?
-                               function() { return true; } :
-                               function( elem ) {
-                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-                               };
-               },
-
-               "CLASS": function( className ) {
-                       var pattern = classCache[ className + " " ];
-
-                       return pattern ||
-                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-                               classCache( className, function( elem ) {
-                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
-                               });
-               },
-
-               "ATTR": function( name, operator, check ) {
-                       return function( elem ) {
-                               var result = Sizzle.attr( elem, name );
-
-                               if ( result == null ) {
-                                       return operator === "!=";
-                               }
-                               if ( !operator ) {
-                                       return true;
-                               }
-
-                               result += "";
-
-                               return operator === "=" ? result === check :
-                                       operator === "!=" ? result !== check :
-                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
-                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
-                                       operator === "$=" ? check && result.slice( -check.length ) === check :
-                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
-                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-                                       false;
-                       };
-               },
-
-               "CHILD": function( type, what, argument, first, last ) {
-                       var simple = type.slice( 0, 3 ) !== "nth",
-                               forward = type.slice( -4 ) !== "last",
-                               ofType = what === "of-type";
-
-                       return first === 1 && last === 0 ?
-
-                               // Shortcut for :nth-*(n)
-                               function( elem ) {
-                                       return !!elem.parentNode;
-                               } :
-
-                               function( elem, context, xml ) {
-                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
-                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
-                                               parent = elem.parentNode,
-                                               name = ofType && elem.nodeName.toLowerCase(),
-                                               useCache = !xml && !ofType,
-                                               diff = false;
-
-                                       if ( parent ) {
-
-                                               // :(first|last|only)-(child|of-type)
-                                               if ( simple ) {
-                                                       while ( dir ) {
-                                                               node = elem;
-                                                               while ( (node = node[ dir ]) ) {
-                                                                       if ( ofType ?
-                                                                               node.nodeName.toLowerCase() === name :
-                                                                               node.nodeType === 1 ) {
-
-                                                                               return false;
-                                                                       }
-                                                               }
-                                                               // Reverse direction for :only-* (if we haven't yet done so)
-                                                               start = dir = type === "only" && !start && "nextSibling";
-                                                       }
-                                                       return true;
-                                               }
-
-                                               start = [ forward ? parent.firstChild : parent.lastChild ];
-
-                                               // non-xml :nth-child(...) stores cache data on `parent`
-                                               if ( forward && useCache ) {
-
-                                                       // Seek `elem` from a previously-cached index
-
-                                                       // ...in a gzip-friendly way
-                                                       node = parent;
-                                                       outerCache = node[ expando ] || (node[ expando ] = {});
-
-                                                       // Support: IE <9 only
-                                                       // Defend against cloned attroperties (jQuery gh-1709)
-                                                       uniqueCache = outerCache[ node.uniqueID ] ||
-                                                               (outerCache[ node.uniqueID ] = {});
-
-                                                       cache = uniqueCache[ type ] || [];
-                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-                                                       diff = nodeIndex && cache[ 2 ];
-                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-                                                               // Fallback to seeking `elem` from the start
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                               // When found, cache indexes on `parent` and break
-                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
-                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
-                                                                       break;
-                                                               }
-                                                       }
-
-                                               } else {
-                                                       // Use previously-cached element index if available
-                                                       if ( useCache ) {
-                                                               // ...in a gzip-friendly way
-                                                               node = elem;
-                                                               outerCache = node[ expando ] || (node[ expando ] = {});
-
-                                                               // Support: IE <9 only
-                                                               // Defend against cloned attroperties (jQuery gh-1709)
-                                                               uniqueCache = outerCache[ node.uniqueID ] ||
-                                                                       (outerCache[ node.uniqueID ] = {});
-
-                                                               cache = uniqueCache[ type ] || [];
-                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-                                                               diff = nodeIndex;
-                                                       }
-
-                                                       // xml :nth-child(...)
-                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
-                                                       if ( diff === false ) {
-                                                               // Use the same loop as above to seek `elem` from the start
-                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
-                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                                       if ( ( ofType ?
-                                                                               node.nodeName.toLowerCase() === name :
-                                                                               node.nodeType === 1 ) &&
-                                                                               ++diff ) {
-
-                                                                               // Cache the index of each encountered element
-                                                                               if ( useCache ) {
-                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
-
-                                                                                       // Support: IE <9 only
-                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
-                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
-                                                                                               (outerCache[ node.uniqueID ] = {});
-
-                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
-                                                                               }
-
-                                                                               if ( node === elem ) {
-                                                                                       break;
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               // Incorporate the offset, then check against cycle size
-                                               diff -= last;
-                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                               };
-               },
-
-               "PSEUDO": function( pseudo, argument ) {
-                       // pseudo-class names are case-insensitive
-                       // http://www.w3.org/TR/selectors/#pseudo-classes
-                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-                       // Remember that setFilters inherits from pseudos
-                       var args,
-                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-                                       Sizzle.error( "unsupported pseudo: " + pseudo );
-
-                       // The user may use createPseudo to indicate that
-                       // arguments are needed to create the filter function
-                       // just as Sizzle does
-                       if ( fn[ expando ] ) {
-                               return fn( argument );
-                       }
-
-                       // But maintain support for old signatures
-                       if ( fn.length > 1 ) {
-                               args = [ pseudo, pseudo, "", argument ];
-                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-                                       markFunction(function( seed, matches ) {
-                                               var idx,
-                                                       matched = fn( seed, argument ),
-                                                       i = matched.length;
-                                               while ( i-- ) {
-                                                       idx = indexOf( seed, matched[i] );
-                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
-                                               }
-                                       }) :
-                                       function( elem ) {
-                                               return fn( elem, 0, args );
-                                       };
-                       }
-
-                       return fn;
-               }
-       },
-
-       pseudos: {
-               // Potentially complex pseudos
-               "not": markFunction(function( selector ) {
-                       // Trim the selector passed to compile
-                       // to avoid treating leading and trailing
-                       // spaces as combinators
-                       var input = [],
-                               results = [],
-                               matcher = compile( selector.replace( rtrim, "$1" ) );
-
-                       return matcher[ expando ] ?
-                               markFunction(function( seed, matches, context, xml ) {
-                                       var elem,
-                                               unmatched = matcher( seed, null, xml, [] ),
-                                               i = seed.length;
-
-                                       // Match elements unmatched by `matcher`
-                                       while ( i-- ) {
-                                               if ( (elem = unmatched[i]) ) {
-                                                       seed[i] = !(matches[i] = elem);
-                                               }
-                                       }
-                               }) :
-                               function( elem, context, xml ) {
-                                       input[0] = elem;
-                                       matcher( input, null, xml, results );
-                                       // Don't keep the element (issue #299)
-                                       input[0] = null;
-                                       return !results.pop();
-                               };
-               }),
-
-               "has": markFunction(function( selector ) {
-                       return function( elem ) {
-                               return Sizzle( selector, elem ).length > 0;
-                       };
-               }),
-
-               "contains": markFunction(function( text ) {
-                       text = text.replace( runescape, funescape );
-                       return function( elem ) {
-                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
-                       };
-               }),
-
-               // "Whether an element is represented by a :lang() selector
-               // is based solely on the element's language value
-               // being equal to the identifier C,
-               // or beginning with the identifier C immediately followed by "-".
-               // The matching of C against the element's language value is performed case-insensitively.
-               // The identifier C does not have to be a valid language name."
-               // http://www.w3.org/TR/selectors/#lang-pseudo
-               "lang": markFunction( function( lang ) {
-                       // lang value must be a valid identifier
-                       if ( !ridentifier.test(lang || "") ) {
-                               Sizzle.error( "unsupported lang: " + lang );
-                       }
-                       lang = lang.replace( runescape, funescape ).toLowerCase();
-                       return function( elem ) {
-                               var elemLang;
-                               do {
-                                       if ( (elemLang = documentIsHTML ?
-                                               elem.lang :
-                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-                                               elemLang = elemLang.toLowerCase();
-                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-                                       }
-                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-                               return false;
-                       };
-               }),
-
-               // Miscellaneous
-               "target": function( elem ) {
-                       var hash = window.location && window.location.hash;
-                       return hash && hash.slice( 1 ) === elem.id;
-               },
-
-               "root": function( elem ) {
-                       return elem === docElem;
-               },
-
-               "focus": function( elem ) {
-                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-               },
-
-               // Boolean properties
-               "enabled": createDisabledPseudo( false ),
-               "disabled": createDisabledPseudo( true ),
-
-               "checked": function( elem ) {
-                       // In CSS3, :checked should return both checked and selected elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       var nodeName = elem.nodeName.toLowerCase();
-                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-               },
-
-               "selected": function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-
-                       return elem.selected === true;
-               },
-
-               // Contents
-               "empty": function( elem ) {
-                       // http://www.w3.org/TR/selectors/#empty-pseudo
-                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
-                       //   but not by others (comment: 8; processing instruction: 7; etc.)
-                       // nodeType < 6 works because attributes (2) do not appear as children
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               if ( elem.nodeType < 6 ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               },
-
-               "parent": function( elem ) {
-                       return !Expr.pseudos["empty"]( elem );
-               },
-
-               // Element/input types
-               "header": function( elem ) {
-                       return rheader.test( elem.nodeName );
-               },
-
-               "input": function( elem ) {
-                       return rinputs.test( elem.nodeName );
-               },
-
-               "button": function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && elem.type === "button" || name === "button";
-               },
-
-               "text": function( elem ) {
-                       var attr;
-                       return elem.nodeName.toLowerCase() === "input" &&
-                               elem.type === "text" &&
-
-                               // Support: IE<8
-                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
-               },
-
-               // Position-in-collection
-               "first": createPositionalPseudo(function() {
-                       return [ 0 ];
-               }),
-
-               "last": createPositionalPseudo(function( matchIndexes, length ) {
-                       return [ length - 1 ];
-               }),
-
-               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       return [ argument < 0 ? argument + length : argument ];
-               }),
-
-               "even": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 0;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "odd": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 1;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; --i >= 0; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; ++i < length; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               })
-       }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-       Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-       Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
-       var matched, match, tokens, type,
-               soFar, groups, preFilters,
-               cached = tokenCache[ selector + " " ];
-
-       if ( cached ) {
-               return parseOnly ? 0 : cached.slice( 0 );
-       }
-
-       soFar = selector;
-       groups = [];
-       preFilters = Expr.preFilter;
-
-       while ( soFar ) {
-
-               // Comma and first run
-               if ( !matched || (match = rcomma.exec( soFar )) ) {
-                       if ( match ) {
-                               // Don't consume trailing commas as valid
-                               soFar = soFar.slice( match[0].length ) || soFar;
-                       }
-                       groups.push( (tokens = []) );
-               }
-
-               matched = false;
-
-               // Combinators
-               if ( (match = rcombinators.exec( soFar )) ) {
-                       matched = match.shift();
-                       tokens.push({
-                               value: matched,
-                               // Cast descendant combinators to space
-                               type: match[0].replace( rtrim, " " )
-                       });
-                       soFar = soFar.slice( matched.length );
-               }
-
-               // Filters
-               for ( type in Expr.filter ) {
-                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-                               (match = preFilters[ type ]( match ))) ) {
-                               matched = match.shift();
-                               tokens.push({
-                                       value: matched,
-                                       type: type,
-                                       matches: match
-                               });
-                               soFar = soFar.slice( matched.length );
-                       }
-               }
-
-               if ( !matched ) {
-                       break;
-               }
-       }
-
-       // Return the length of the invalid excess
-       // if we're just parsing
-       // Otherwise, throw an error or return tokens
-       return parseOnly ?
-               soFar.length :
-               soFar ?
-                       Sizzle.error( selector ) :
-                       // Cache the tokens
-                       tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
-       var i = 0,
-               len = tokens.length,
-               selector = "";
-       for ( ; i < len; i++ ) {
-               selector += tokens[i].value;
-       }
-       return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-       var dir = combinator.dir,
-               skip = combinator.next,
-               key = skip || dir,
-               checkNonElements = base && key === "parentNode",
-               doneName = done++;
-
-       return combinator.first ?
-               // Check against closest ancestor/preceding element
-               function( elem, context, xml ) {
-                       while ( (elem = elem[ dir ]) ) {
-                               if ( elem.nodeType === 1 || checkNonElements ) {
-                                       return matcher( elem, context, xml );
-                               }
-                       }
-                       return false;
-               } :
-
-               // Check against all ancestor/preceding elements
-               function( elem, context, xml ) {
-                       var oldCache, uniqueCache, outerCache,
-                               newCache = [ dirruns, doneName ];
-
-                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
-                       if ( xml ) {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               if ( matcher( elem, context, xml ) ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       } else {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
-
-                                               // Support: IE <9 only
-                                               // Defend against cloned attroperties (jQuery gh-1709)
-                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
-                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
-                                                       elem = elem[ dir ] || elem;
-                                               } else if ( (oldCache = uniqueCache[ key ]) &&
-                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
-                                                       // Assign to newCache so results back-propagate to previous elements
-                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
-                                               } else {
-                                                       // Reuse newcache so results back-propagate to previous elements
-                                                       uniqueCache[ key ] = newCache;
-
-                                                       // A match means we're done; a fail means we have to keep checking
-                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       return false;
-               };
-}
-
-function elementMatcher( matchers ) {
-       return matchers.length > 1 ?
-               function( elem, context, xml ) {
-                       var i = matchers.length;
-                       while ( i-- ) {
-                               if ( !matchers[i]( elem, context, xml ) ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               } :
-               matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
-       var i = 0,
-               len = contexts.length;
-       for ( ; i < len; i++ ) {
-               Sizzle( selector, contexts[i], results );
-       }
-       return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-       var elem,
-               newUnmatched = [],
-               i = 0,
-               len = unmatched.length,
-               mapped = map != null;
-
-       for ( ; i < len; i++ ) {
-               if ( (elem = unmatched[i]) ) {
-                       if ( !filter || filter( elem, context, xml ) ) {
-                               newUnmatched.push( elem );
-                               if ( mapped ) {
-                                       map.push( i );
-                               }
-                       }
-               }
-       }
-
-       return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-       if ( postFilter && !postFilter[ expando ] ) {
-               postFilter = setMatcher( postFilter );
-       }
-       if ( postFinder && !postFinder[ expando ] ) {
-               postFinder = setMatcher( postFinder, postSelector );
-       }
-       return markFunction(function( seed, results, context, xml ) {
-               var temp, i, elem,
-                       preMap = [],
-                       postMap = [],
-                       preexisting = results.length,
-
-                       // Get initial elements from seed or context
-                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
-                       matcherIn = preFilter && ( seed || !selector ) ?
-                               condense( elems, preMap, preFilter, context, xml ) :
-                               elems,
-
-                       matcherOut = matcher ?
-                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-                                       // ...intermediate processing is necessary
-                                       [] :
-
-                                       // ...otherwise use results directly
-                                       results :
-                               matcherIn;
-
-               // Find primary matches
-               if ( matcher ) {
-                       matcher( matcherIn, matcherOut, context, xml );
-               }
-
-               // Apply postFilter
-               if ( postFilter ) {
-                       temp = condense( matcherOut, postMap );
-                       postFilter( temp, [], context, xml );
-
-                       // Un-match failing elements by moving them back to matcherIn
-                       i = temp.length;
-                       while ( i-- ) {
-                               if ( (elem = temp[i]) ) {
-                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-                               }
-                       }
-               }
-
-               if ( seed ) {
-                       if ( postFinder || preFilter ) {
-                               if ( postFinder ) {
-                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
-                                       temp = [];
-                                       i = matcherOut.length;
-                                       while ( i-- ) {
-                                               if ( (elem = matcherOut[i]) ) {
-                                                       // Restore matcherIn since elem is not yet a final match
-                                                       temp.push( (matcherIn[i] = elem) );
-                                               }
-                                       }
-                                       postFinder( null, (matcherOut = []), temp, xml );
-                               }
-
-                               // Move matched elements from seed to results to keep them synchronized
-                               i = matcherOut.length;
-                               while ( i-- ) {
-                                       if ( (elem = matcherOut[i]) &&
-                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
-                                               seed[temp] = !(results[temp] = elem);
-                                       }
-                               }
-                       }
-
-               // Add elements to results, through postFinder if defined
-               } else {
-                       matcherOut = condense(
-                               matcherOut === results ?
-                                       matcherOut.splice( preexisting, matcherOut.length ) :
-                                       matcherOut
-                       );
-                       if ( postFinder ) {
-                               postFinder( null, results, matcherOut, xml );
-                       } else {
-                               push.apply( results, matcherOut );
-                       }
-               }
-       });
-}
-
-function matcherFromTokens( tokens ) {
-       var checkContext, matcher, j,
-               len = tokens.length,
-               leadingRelative = Expr.relative[ tokens[0].type ],
-               implicitRelative = leadingRelative || Expr.relative[" "],
-               i = leadingRelative ? 1 : 0,
-
-               // The foundational matcher ensures that elements are reachable from top-level context(s)
-               matchContext = addCombinator( function( elem ) {
-                       return elem === checkContext;
-               }, implicitRelative, true ),
-               matchAnyContext = addCombinator( function( elem ) {
-                       return indexOf( checkContext, elem ) > -1;
-               }, implicitRelative, true ),
-               matchers = [ function( elem, context, xml ) {
-                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-                               (checkContext = context).nodeType ?
-                                       matchContext( elem, context, xml ) :
-                                       matchAnyContext( elem, context, xml ) );
-                       // Avoid hanging onto element (issue #299)
-                       checkContext = null;
-                       return ret;
-               } ];
-
-       for ( ; i < len; i++ ) {
-               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-               } else {
-                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-                       // Return special upon seeing a positional matcher
-                       if ( matcher[ expando ] ) {
-                               // Find the next relative operator (if any) for proper handling
-                               j = ++i;
-                               for ( ; j < len; j++ ) {
-                                       if ( Expr.relative[ tokens[j].type ] ) {
-                                               break;
-                                       }
-                               }
-                               return setMatcher(
-                                       i > 1 && elementMatcher( matchers ),
-                                       i > 1 && toSelector(
-                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
-                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-                                       ).replace( rtrim, "$1" ),
-                                       matcher,
-                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
-                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-                                       j < len && toSelector( tokens )
-                               );
-                       }
-                       matchers.push( matcher );
-               }
-       }
-
-       return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-       var bySet = setMatchers.length > 0,
-               byElement = elementMatchers.length > 0,
-               superMatcher = function( seed, context, xml, results, outermost ) {
-                       var elem, j, matcher,
-                               matchedCount = 0,
-                               i = "0",
-                               unmatched = seed && [],
-                               setMatched = [],
-                               contextBackup = outermostContext,
-                               // We must always have either seed elements or outermost context
-                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-                               // Use integer dirruns iff this is the outermost matcher
-                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
-                               len = elems.length;
-
-                       if ( outermost ) {
-                               outermostContext = context === document || context || outermost;
-                       }
-
-                       // Add elements passing elementMatchers directly to results
-                       // Support: IE<9, Safari
-                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
-                               if ( byElement && elem ) {
-                                       j = 0;
-                                       if ( !context && elem.ownerDocument !== document ) {
-                                               setDocument( elem );
-                                               xml = !documentIsHTML;
-                                       }
-                                       while ( (matcher = elementMatchers[j++]) ) {
-                                               if ( matcher( elem, context || document, xml) ) {
-                                                       results.push( elem );
-                                                       break;
-                                               }
-                                       }
-                                       if ( outermost ) {
-                                               dirruns = dirrunsUnique;
-                                       }
-                               }
-
-                               // Track unmatched elements for set filters
-                               if ( bySet ) {
-                                       // They will have gone through all possible matchers
-                                       if ( (elem = !matcher && elem) ) {
-                                               matchedCount--;
-                                       }
-
-                                       // Lengthen the array for every element, matched or not
-                                       if ( seed ) {
-                                               unmatched.push( elem );
-                                       }
-                               }
-                       }
-
-                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
-                       // makes the latter nonnegative.
-                       matchedCount += i;
-
-                       // Apply set filters to unmatched elements
-                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
-                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
-                       // no element matchers and no seed.
-                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
-                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
-                       // numerically zero.
-                       if ( bySet && i !== matchedCount ) {
-                               j = 0;
-                               while ( (matcher = setMatchers[j++]) ) {
-                                       matcher( unmatched, setMatched, context, xml );
-                               }
-
-                               if ( seed ) {
-                                       // Reintegrate element matches to eliminate the need for sorting
-                                       if ( matchedCount > 0 ) {
-                                               while ( i-- ) {
-                                                       if ( !(unmatched[i] || setMatched[i]) ) {
-                                                               setMatched[i] = pop.call( results );
-                                                       }
-                                               }
-                                       }
-
-                                       // Discard index placeholder values to get only actual matches
-                                       setMatched = condense( setMatched );
-                               }
-
-                               // Add matches to results
-                               push.apply( results, setMatched );
-
-                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
-                               if ( outermost && !seed && setMatched.length > 0 &&
-                                       ( matchedCount + setMatchers.length ) > 1 ) {
-
-                                       Sizzle.uniqueSort( results );
-                               }
-                       }
-
-                       // Override manipulation of globals by nested matchers
-                       if ( outermost ) {
-                               dirruns = dirrunsUnique;
-                               outermostContext = contextBackup;
-                       }
-
-                       return unmatched;
-               };
-
-       return bySet ?
-               markFunction( superMatcher ) :
-               superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
-       var i,
-               setMatchers = [],
-               elementMatchers = [],
-               cached = compilerCache[ selector + " " ];
-
-       if ( !cached ) {
-               // Generate a function of recursive functions that can be used to check each element
-               if ( !match ) {
-                       match = tokenize( selector );
-               }
-               i = match.length;
-               while ( i-- ) {
-                       cached = matcherFromTokens( match[i] );
-                       if ( cached[ expando ] ) {
-                               setMatchers.push( cached );
-                       } else {
-                               elementMatchers.push( cached );
-                       }
-               }
-
-               // Cache the compiled function
-               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
-               // Save selector and tokenization
-               cached.selector = selector;
-       }
-       return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-       var i, tokens, token, type, find,
-               compiled = typeof selector === "function" && selector,
-               match = !seed && tokenize( (selector = compiled.selector || selector) );
-
-       results = results || [];
-
-       // Try to minimize operations if there is only one selector in the list and no seed
-       // (the latter of which guarantees us context)
-       if ( match.length === 1 ) {
-
-               // Reduce context if the leading compound selector is an ID
-               tokens = match[0] = match[0].slice( 0 );
-               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
-
-                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-                       if ( !context ) {
-                               return results;
-
-                       // Precompiled matchers will still verify ancestry, so step up a level
-                       } else if ( compiled ) {
-                               context = context.parentNode;
-                       }
-
-                       selector = selector.slice( tokens.shift().value.length );
-               }
-
-               // Fetch a seed set for right-to-left matching
-               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-               while ( i-- ) {
-                       token = tokens[i];
-
-                       // Abort if we hit a combinator
-                       if ( Expr.relative[ (type = token.type) ] ) {
-                               break;
-                       }
-                       if ( (find = Expr.find[ type ]) ) {
-                               // Search, expanding context for leading sibling combinators
-                               if ( (seed = find(
-                                       token.matches[0].replace( runescape, funescape ),
-                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
-                               )) ) {
-
-                                       // If seed is empty or no tokens remain, we can return early
-                                       tokens.splice( i, 1 );
-                                       selector = seed.length && toSelector( tokens );
-                                       if ( !selector ) {
-                                               push.apply( results, seed );
-                                               return results;
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       // Compile and execute a filtering function if one is not provided
-       // Provide `match` to avoid retokenization if we modified the selector above
-       ( compiled || compile( selector, match ) )(
-               seed,
-               context,
-               !documentIsHTML,
-               results,
-               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
-       );
-       return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
-       // Should return 1, but returns 4 (following)
-       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
-       el.innerHTML = "<a href='#'></a>";
-       return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
-       addHandle( "type|href|height|width", function( elem, name, isXML ) {
-               if ( !isXML ) {
-                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-               }
-       });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
-       el.innerHTML = "<input/>";
-       el.firstChild.setAttribute( "value", "" );
-       return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
-       addHandle( "value", function( elem, name, isXML ) {
-               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-                       return elem.defaultValue;
-               }
-       });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
-       return el.getAttribute("disabled") == null;
-}) ) {
-       addHandle( booleans, function( elem, name, isXML ) {
-               var val;
-               if ( !isXML ) {
-                       return elem[ name ] === true ? name.toLowerCase() :
-                                       (val = elem.getAttributeNode( name )) && val.specified ?
-                                       val.value :
-                               null;
-               }
-       });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
-       var matched = [],
-               truncate = until !== undefined;
-
-       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
-               if ( elem.nodeType === 1 ) {
-                       if ( truncate && jQuery( elem ).is( until ) ) {
-                               break;
-                       }
-                       matched.push( elem );
-               }
-       }
-       return matched;
-};
-
-
-var siblings = function( n, elem ) {
-       var matched = [];
-
-       for ( ; n; n = n.nextSibling ) {
-               if ( n.nodeType === 1 && n !== elem ) {
-                       matched.push( n );
-               }
-       }
-
-       return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-
-
-function nodeName( elem, name ) {
-
-  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-
-};
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep( elements, function( elem, i ) {
-                       return !!qualifier.call( elem, i, elem ) !== not;
-               } );
-       }
-
-       // Single element
-       if ( qualifier.nodeType ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( elem === qualifier ) !== not;
-               } );
-       }
-
-       // Arraylike of elements (jQuery, arguments, Array)
-       if ( typeof qualifier !== "string" ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
-               } );
-       }
-
-       // Simple selector that can be filtered directly, removing non-Elements
-       if ( risSimple.test( qualifier ) ) {
-               return jQuery.filter( qualifier, elements, not );
-       }
-
-       // Complex selector, compare the two sets, removing non-Elements
-       qualifier = jQuery.filter( qualifier, elements );
-       return jQuery.grep( elements, function( elem ) {
-               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
-       } );
-}
-
-jQuery.filter = function( expr, elems, not ) {
-       var elem = elems[ 0 ];
-
-       if ( not ) {
-               expr = ":not(" + expr + ")";
-       }
-
-       if ( elems.length === 1 && elem.nodeType === 1 ) {
-               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
-       }
-
-       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-               return elem.nodeType === 1;
-       } ) );
-};
-
-jQuery.fn.extend( {
-       find: function( selector ) {
-               var i, ret,
-                       len = this.length,
-                       self = this;
-
-               if ( typeof selector !== "string" ) {
-                       return this.pushStack( jQuery( selector ).filter( function() {
-                               for ( i = 0; i < len; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       } ) );
-               }
-
-               ret = this.pushStack( [] );
-
-               for ( i = 0; i < len; i++ ) {
-                       jQuery.find( selector, self[ i ], ret );
-               }
-
-               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
-       },
-       filter: function( selector ) {
-               return this.pushStack( winnow( this, selector || [], false ) );
-       },
-       not: function( selector ) {
-               return this.pushStack( winnow( this, selector || [], true ) );
-       },
-       is: function( selector ) {
-               return !!winnow(
-                       this,
-
-                       // If this is a positional/relative selector, check membership in the returned set
-                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                       typeof selector === "string" && rneedsContext.test( selector ) ?
-                               jQuery( selector ) :
-                               selector || [],
-                       false
-               ).length;
-       }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-       // A simple way to check for HTML strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       // Strict HTML recognition (#11290: must start with <)
-       // Shortcut simple #id case for speed
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
-       init = jQuery.fn.init = function( selector, context, root ) {
-               var match, elem;
-
-               // HANDLE: $(""), $(null), $(undefined), $(false)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Method init() accepts an alternate rootjQuery
-               // so migrate can support jQuery.sub (gh-2101)
-               root = root || rootjQuery;
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       if ( selector[ 0 ] === "<" &&
-                               selector[ selector.length - 1 ] === ">" &&
-                               selector.length >= 3 ) {
-
-                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                               match = [ null, selector, null ];
-
-                       } else {
-                               match = rquickExpr.exec( selector );
-                       }
-
-                       // Match html or make sure no context is specified for #id
-                       if ( match && ( match[ 1 ] || !context ) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[ 1 ] ) {
-                                       context = context instanceof jQuery ? context[ 0 ] : context;
-
-                                       // Option to run scripts is true for back-compat
-                                       // Intentionally let the error be thrown if parseHTML is not present
-                                       jQuery.merge( this, jQuery.parseHTML(
-                                               match[ 1 ],
-                                               context && context.nodeType ? context.ownerDocument || context : document,
-                                               true
-                                       ) );
-
-                                       // HANDLE: $(html, props)
-                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
-                                               for ( match in context ) {
-
-                                                       // Properties of context are called as methods if possible
-                                                       if ( jQuery.isFunction( this[ match ] ) ) {
-                                                               this[ match ]( context[ match ] );
-
-                                                       // ...and otherwise set as attributes
-                                                       } else {
-                                                               this.attr( match, context[ match ] );
-                                                       }
-                                               }
-                                       }
-
-                                       return this;
-
-                               // HANDLE: $(#id)
-                               } else {
-                                       elem = document.getElementById( match[ 2 ] );
-
-                                       if ( elem ) {
-
-                                               // Inject the element directly into the jQuery object
-                                               this[ 0 ] = elem;
-                                               this.length = 1;
-                                       }
-                                       return this;
-                               }
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || root ).find( selector );
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( selector );
-                       }
-
-               // HANDLE: $(DOMElement)
-               } else if ( selector.nodeType ) {
-                       this[ 0 ] = selector;
-                       this.length = 1;
-                       return this;
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return root.ready !== undefined ?
-                               root.ready( selector ) :
-
-                               // Execute immediately if ready is not present
-                               selector( jQuery );
-               }
-
-               return jQuery.makeArray( selector, this );
-       };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
-       // Methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.fn.extend( {
-       has: function( target ) {
-               var targets = jQuery( target, this ),
-                       l = targets.length;
-
-               return this.filter( function() {
-                       var i = 0;
-                       for ( ; i < l; i++ ) {
-                               if ( jQuery.contains( this, targets[ i ] ) ) {
-                                       return true;
-                               }
-                       }
-               } );
-       },
-
-       closest: function( selectors, context ) {
-               var cur,
-                       i = 0,
-                       l = this.length,
-                       matched = [],
-                       targets = typeof selectors !== "string" && jQuery( selectors );
-
-               // Positional selectors never match, since there's no _selection_ context
-               if ( !rneedsContext.test( selectors ) ) {
-                       for ( ; i < l; i++ ) {
-                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
-                                       // Always skip document fragments
-                                       if ( cur.nodeType < 11 && ( targets ?
-                                               targets.index( cur ) > -1 :
-
-                                               // Don't pass non-elements to Sizzle
-                                               cur.nodeType === 1 &&
-                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
-                                               matched.push( cur );
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
-       },
-
-       // Determine the position of an element within the set
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
-               }
-
-               // Index in selector
-               if ( typeof elem === "string" ) {
-                       return indexOf.call( jQuery( elem ), this[ 0 ] );
-               }
-
-               // Locate the position of the desired element
-               return indexOf.call( this,
-
-                       // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[ 0 ] : elem
-               );
-       },
-
-       add: function( selector, context ) {
-               return this.pushStack(
-                       jQuery.uniqueSort(
-                               jQuery.merge( this.get(), jQuery( selector, context ) )
-                       )
-               );
-       },
-
-       addBack: function( selector ) {
-               return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter( selector )
-               );
-       }
-} );
-
-function sibling( cur, dir ) {
-       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
-       return cur;
-}
-
-jQuery.each( {
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return sibling( elem, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return sibling( elem, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return siblings( ( elem.parentNode || {} ).firstChild, elem );
-       },
-       children: function( elem ) {
-               return siblings( elem.firstChild );
-       },
-       contents: function( elem ) {
-        if ( nodeName( elem, "iframe" ) ) {
-            return elem.contentDocument;
-        }
-
-        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
-        // Treat the template element as a regular one in browsers that
-        // don't support it.
-        if ( nodeName( elem, "template" ) ) {
-            elem = elem.content || elem;
-        }
-
-        return jQuery.merge( [], elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var matched = jQuery.map( this, fn, until );
-
-               if ( name.slice( -5 ) !== "Until" ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       matched = jQuery.filter( selector, matched );
-               }
-
-               if ( this.length > 1 ) {
-
-                       // Remove duplicates
-                       if ( !guaranteedUnique[ name ] ) {
-                               jQuery.uniqueSort( matched );
-                       }
-
-                       // Reverse order for parents* and prev-derivatives
-                       if ( rparentsprev.test( name ) ) {
-                               matched.reverse();
-                       }
-               }
-
-               return this.pushStack( matched );
-       };
-} );
-var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
-       var object = {};
-       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
-               object[ flag ] = true;
-       } );
-       return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *     options: an optional list of space-separated options that will change how
- *                     the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *     once:                   will ensure the callback list can only be fired once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will call any callback added
- *                                     after the list has been fired right away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-       // Convert options from String-formatted to Object-formatted if needed
-       // (we check in cache first)
-       options = typeof options === "string" ?
-               createOptions( options ) :
-               jQuery.extend( {}, options );
-
-       var // Flag to know if list is currently firing
-               firing,
-
-               // Last fire value for non-forgettable lists
-               memory,
-
-               // Flag to know if list was already fired
-               fired,
-
-               // Flag to prevent firing
-               locked,
-
-               // Actual callback list
-               list = [],
-
-               // Queue of execution data for repeatable lists
-               queue = [],
-
-               // Index of currently firing callback (modified by add/remove as needed)
-               firingIndex = -1,
-
-               // Fire callbacks
-               fire = function() {
-
-                       // Enforce single-firing
-                       locked = locked || options.once;
-
-                       // Execute callbacks for all pending executions,
-                       // respecting firingIndex overrides and runtime changes
-                       fired = firing = true;
-                       for ( ; queue.length; firingIndex = -1 ) {
-                               memory = queue.shift();
-                               while ( ++firingIndex < list.length ) {
-
-                                       // Run callback and check for early termination
-                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
-                                               options.stopOnFalse ) {
-
-                                               // Jump to end and forget the data so .add doesn't re-fire
-                                               firingIndex = list.length;
-                                               memory = false;
-                                       }
-                               }
-                       }
-
-                       // Forget the data if we're done with it
-                       if ( !options.memory ) {
-                               memory = false;
-                       }
-
-                       firing = false;
-
-                       // Clean up if we're done firing for good
-                       if ( locked ) {
-
-                               // Keep an empty list if we have data for future add calls
-                               if ( memory ) {
-                                       list = [];
-
-                               // Otherwise, this object is spent
-                               } else {
-                                       list = "";
-                               }
-                       }
-               },
-
-               // Actual Callbacks object
-               self = {
-
-                       // Add a callback or a collection of callbacks to the list
-                       add: function() {
-                               if ( list ) {
-
-                                       // If we have memory from a past run, we should fire after adding
-                                       if ( memory && !firing ) {
-                                               firingIndex = list.length - 1;
-                                               queue.push( memory );
-                                       }
-
-                                       ( function add( args ) {
-                                               jQuery.each( args, function( _, arg ) {
-                                                       if ( jQuery.isFunction( arg ) ) {
-                                                               if ( !options.unique || !self.has( arg ) ) {
-                                                                       list.push( arg );
-                                                               }
-                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
-                                                               // Inspect recursively
-                                                               add( arg );
-                                                       }
-                                               } );
-                                       } )( arguments );
-
-                                       if ( memory && !firing ) {
-                                               fire();
-                                       }
-                               }
-                               return this;
-                       },
-
-                       // Remove a callback from the list
-                       remove: function() {
-                               jQuery.each( arguments, function( _, arg ) {
-                                       var index;
-                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                               list.splice( index, 1 );
-
-                                               // Handle firing indexes
-                                               if ( index <= firingIndex ) {
-                                                       firingIndex--;
-                                               }
-                                       }
-                               } );
-                               return this;
-                       },
-
-                       // Check if a given callback is in the list.
-                       // If no argument is given, return whether or not list has callbacks attached.
-                       has: function( fn ) {
-                               return fn ?
-                                       jQuery.inArray( fn, list ) > -1 :
-                                       list.length > 0;
-                       },
-
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               if ( list ) {
-                                       list = [];
-                               }
-                               return this;
-                       },
-
-                       // Disable .fire and .add
-                       // Abort any current/pending executions
-                       // Clear all callbacks and values
-                       disable: function() {
-                               locked = queue = [];
-                               list = memory = "";
-                               return this;
-                       },
-                       disabled: function() {
-                               return !list;
-                       },
-
-                       // Disable .fire
-                       // Also disable .add unless we have memory (since it would have no effect)
-                       // Abort any pending executions
-                       lock: function() {
-                               locked = queue = [];
-                               if ( !memory && !firing ) {
-                                       list = memory = "";
-                               }
-                               return this;
-                       },
-                       locked: function() {
-                               return !!locked;
-                       },
-
-                       // Call all callbacks with the given context and arguments
-                       fireWith: function( context, args ) {
-                               if ( !locked ) {
-                                       args = args || [];
-                                       args = [ context, args.slice ? args.slice() : args ];
-                                       queue.push( args );
-                                       if ( !firing ) {
-                                               fire();
-                                       }
-                               }
-                               return this;
-                       },
-
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-
-                       // To know if the callbacks have already been called at least once
-                       fired: function() {
-                               return !!fired;
-                       }
-               };
-
-       return self;
-};
-
-
-function Identity( v ) {
-       return v;
-}
-function Thrower( ex ) {
-       throw ex;
-}
-
-function adoptValue( value, resolve, reject, noValue ) {
-       var method;
-
-       try {
-
-               // Check for promise aspect first to privilege synchronous behavior
-               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
-                       method.call( value ).done( resolve ).fail( reject );
-
-               // Other thenables
-               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
-                       method.call( value, resolve, reject );
-
-               // Other non-thenables
-               } else {
-
-                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
-                       // * false: [ value ].slice( 0 ) => resolve( value )
-                       // * true: [ value ].slice( 1 ) => resolve()
-                       resolve.apply( undefined, [ value ].slice( noValue ) );
-               }
-
-       // For Promises/A+, convert exceptions into rejections
-       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
-       // Deferred#then to conditionally suppress rejection.
-       } catch ( value ) {
-
-               // Support: Android 4.0 only
-               // Strict mode functions invoked without .call/.apply get global-object context
-               reject.apply( undefined, [ value ] );
-       }
-}
-
-jQuery.extend( {
-
-       Deferred: function( func ) {
-               var tuples = [
-
-                               // action, add listener, callbacks,
-                               // ... .then handlers, argument index, [final state]
-                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
-                                       jQuery.Callbacks( "memory" ), 2 ],
-                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
-                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
-                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
-                       ],
-                       state = "pending",
-                       promise = {
-                               state: function() {
-                                       return state;
-                               },
-                               always: function() {
-                                       deferred.done( arguments ).fail( arguments );
-                                       return this;
-                               },
-                               "catch": function( fn ) {
-                                       return promise.then( null, fn );
-                               },
-
-                               // Keep pipe for back-compat
-                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
-                                       var fns = arguments;
-
-                                       return jQuery.Deferred( function( newDefer ) {
-                                               jQuery.each( tuples, function( i, tuple ) {
-
-                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
-                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
-                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
-                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
-                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
-                                                       deferred[ tuple[ 1 ] ]( function() {
-                                                               var returned = fn && fn.apply( this, arguments );
-                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                       returned.promise()
-                                                                               .progress( newDefer.notify )
-                                                                               .done( newDefer.resolve )
-                                                                               .fail( newDefer.reject );
-                                                               } else {
-                                                                       newDefer[ tuple[ 0 ] + "With" ](
-                                                                               this,
-                                                                               fn ? [ returned ] : arguments
-                                                                       );
-                                                               }
-                                                       } );
-                                               } );
-                                               fns = null;
-                                       } ).promise();
-                               },
-                               then: function( onFulfilled, onRejected, onProgress ) {
-                                       var maxDepth = 0;
-                                       function resolve( depth, deferred, handler, special ) {
-                                               return function() {
-                                                       var that = this,
-                                                               args = arguments,
-                                                               mightThrow = function() {
-                                                                       var returned, then;
-
-                                                                       // Support: Promises/A+ section 2.3.3.3.3
-                                                                       // https://promisesaplus.com/#point-59
-                                                                       // Ignore double-resolution attempts
-                                                                       if ( depth < maxDepth ) {
-                                                                               return;
-                                                                       }
-
-                                                                       returned = handler.apply( that, args );
-
-                                                                       // Support: Promises/A+ section 2.3.1
-                                                                       // https://promisesaplus.com/#point-48
-                                                                       if ( returned === deferred.promise() ) {
-                                                                               throw new TypeError( "Thenable self-resolution" );
-                                                                       }
-
-                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
-                                                                       // https://promisesaplus.com/#point-54
-                                                                       // https://promisesaplus.com/#point-75
-                                                                       // Retrieve `then` only once
-                                                                       then = returned &&
-
-                                                                               // Support: Promises/A+ section 2.3.4
-                                                                               // https://promisesaplus.com/#point-64
-                                                                               // Only check objects and functions for thenability
-                                                                               ( typeof returned === "object" ||
-                                                                                       typeof returned === "function" ) &&
-                                                                               returned.then;
-
-                                                                       // Handle a returned thenable
-                                                                       if ( jQuery.isFunction( then ) ) {
-
-                                                                               // Special processors (notify) just wait for resolution
-                                                                               if ( special ) {
-                                                                                       then.call(
-                                                                                               returned,
-                                                                                               resolve( maxDepth, deferred, Identity, special ),
-                                                                                               resolve( maxDepth, deferred, Thrower, special )
-                                                                                       );
-
-                                                                               // Normal processors (resolve) also hook into progress
-                                                                               } else {
-
-                                                                                       // ...and disregard older resolution values
-                                                                                       maxDepth++;
-
-                                                                                       then.call(
-                                                                                               returned,
-                                                                                               resolve( maxDepth, deferred, Identity, special ),
-                                                                                               resolve( maxDepth, deferred, Thrower, special ),
-                                                                                               resolve( maxDepth, deferred, Identity,
-                                                                                                       deferred.notifyWith )
-                                                                                       );
-                                                                               }
-
-                                                                       // Handle all other returned values
-                                                                       } else {
-
-                                                                               // Only substitute handlers pass on context
-                                                                               // and multiple values (non-spec behavior)
-                                                                               if ( handler !== Identity ) {
-                                                                                       that = undefined;
-                                                                                       args = [ returned ];
-                                                                               }
-
-                                                                               // Process the value(s)
-                                                                               // Default process is resolve
-                                                                               ( special || deferred.resolveWith )( that, args );
-                                                                       }
-                                                               },
-
-                                                               // Only normal processors (resolve) catch and reject exceptions
-                                                               process = special ?
-                                                                       mightThrow :
-                                                                       function() {
-                                                                               try {
-                                                                                       mightThrow();
-                                                                               } catch ( e ) {
-
-                                                                                       if ( jQuery.Deferred.exceptionHook ) {
-                                                                                               jQuery.Deferred.exceptionHook( e,
-                                                                                                       process.stackTrace );
-                                                                                       }
-
-                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
-                                                                                       // https://promisesaplus.com/#point-61
-                                                                                       // Ignore post-resolution exceptions
-                                                                                       if ( depth + 1 >= maxDepth ) {
-
-                                                                                               // Only substitute handlers pass on context
-                                                                                               // and multiple values (non-spec behavior)
-                                                                                               if ( handler !== Thrower ) {
-                                                                                                       that = undefined;
-                                                                                                       args = [ e ];
-                                                                                               }
-
-                                                                                               deferred.rejectWith( that, args );
-                                                                                       }
-                                                                               }
-                                                                       };
-
-                                                       // Support: Promises/A+ section 2.3.3.3.1
-                                                       // https://promisesaplus.com/#point-57
-                                                       // Re-resolve promises immediately to dodge false rejection from
-                                                       // subsequent errors
-                                                       if ( depth ) {
-                                                               process();
-                                                       } else {
-
-                                                               // Call an optional hook to record the stack, in case of exception
-                                                               // since it's otherwise lost when execution goes async
-                                                               if ( jQuery.Deferred.getStackHook ) {
-                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
-                                                               }
-                                                               window.setTimeout( process );
-                                                       }
-                                               };
-                                       }
-
-                                       return jQuery.Deferred( function( newDefer ) {
-
-                                               // progress_handlers.add( ... )
-                                               tuples[ 0 ][ 3 ].add(
-                                                       resolve(
-                                                               0,
-                                                               newDefer,
-                                                               jQuery.isFunction( onProgress ) ?
-                                                                       onProgress :
-                                                                       Identity,
-                                                               newDefer.notifyWith
-                                                       )
-                                               );
-
-                                               // fulfilled_handlers.add( ... )
-                                               tuples[ 1 ][ 3 ].add(
-                                                       resolve(
-                                                               0,
-                                                               newDefer,
-                                                               jQuery.isFunction( onFulfilled ) ?
-                                                                       onFulfilled :
-                                                                       Identity
-                                                       )
-                                               );
-
-                                               // rejected_handlers.add( ... )
-                                               tuples[ 2 ][ 3 ].add(
-                                                       resolve(
-                                                               0,
-                                                               newDefer,
-                                                               jQuery.isFunction( onRejected ) ?
-                                                                       onRejected :
-                                                                       Thrower
-                                                       )
-                                               );
-                                       } ).promise();
-                               },
-
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is added to the object
-                               promise: function( obj ) {
-                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
-                               }
-                       },
-                       deferred = {};
-
-               // Add list-specific methods
-               jQuery.each( tuples, function( i, tuple ) {
-                       var list = tuple[ 2 ],
-                               stateString = tuple[ 5 ];
-
-                       // promise.progress = list.add
-                       // promise.done = list.add
-                       // promise.fail = list.add
-                       promise[ tuple[ 1 ] ] = list.add;
-
-                       // Handle state
-                       if ( stateString ) {
-                               list.add(
-                                       function() {
-
-                                               // state = "resolved" (i.e., fulfilled)
-                                               // state = "rejected"
-                                               state = stateString;
-                                       },
-
-                                       // rejected_callbacks.disable
-                                       // fulfilled_callbacks.disable
-                                       tuples[ 3 - i ][ 2 ].disable,
-
-                                       // progress_callbacks.lock
-                                       tuples[ 0 ][ 2 ].lock
-                               );
-                       }
-
-                       // progress_handlers.fire
-                       // fulfilled_handlers.fire
-                       // rejected_handlers.fire
-                       list.add( tuple[ 3 ].fire );
-
-                       // deferred.notify = function() { deferred.notifyWith(...) }
-                       // deferred.resolve = function() { deferred.resolveWith(...) }
-                       // deferred.reject = function() { deferred.rejectWith(...) }
-                       deferred[ tuple[ 0 ] ] = function() {
-                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
-                               return this;
-                       };
-
-                       // deferred.notifyWith = list.fireWith
-                       // deferred.resolveWith = list.fireWith
-                       // deferred.rejectWith = list.fireWith
-                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
-               } );
-
-               // Make the deferred a promise
-               promise.promise( deferred );
-
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
-
-               // All done!
-               return deferred;
-       },
-
-       // Deferred helper
-       when: function( singleValue ) {
-               var
-
-                       // count of uncompleted subordinates
-                       remaining = arguments.length,
-
-                       // count of unprocessed arguments
-                       i = remaining,
-
-                       // subordinate fulfillment data
-                       resolveContexts = Array( i ),
-                       resolveValues = slice.call( arguments ),
-
-                       // the master Deferred
-                       master = jQuery.Deferred(),
-
-                       // subordinate callback factory
-                       updateFunc = function( i ) {
-                               return function( value ) {
-                                       resolveContexts[ i ] = this;
-                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-                                       if ( !( --remaining ) ) {
-                                               master.resolveWith( resolveContexts, resolveValues );
-                                       }
-                               };
-                       };
-
-               // Single- and empty arguments are adopted like Promise.resolve
-               if ( remaining <= 1 ) {
-                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
-                               !remaining );
-
-                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
-                       if ( master.state() === "pending" ||
-                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
-                               return master.then();
-                       }
-               }
-
-               // Multiple arguments are aggregated like Promise.all array elements
-               while ( i-- ) {
-                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
-               }
-
-               return master.promise();
-       }
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
-       // Support: IE 8 - 9 only
-       // Console exists when dev tools are open, which can happen at any time
-       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
-               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
-       }
-};
-
-
-
-
-jQuery.readyException = function( error ) {
-       window.setTimeout( function() {
-               throw error;
-       } );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
-       readyList
-               .then( fn )
-
-               // Wrap jQuery.readyException in a function so that the lookup
-               // happens at the time of error handling instead of callback
-               // registration.
-               .catch( function( error ) {
-                       jQuery.readyException( error );
-               } );
-
-       return this;
-};
-
-jQuery.extend( {
-
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
-
-       // Handle when the DOM is ready
-       ready: function( wait ) {
-
-               // Abort if there are pending holds or we're already ready
-               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-                       return;
-               }
-
-               // Remember that the DOM is ready
-               jQuery.isReady = true;
-
-               // If a normal DOM Ready event fired, decrement, and wait if need be
-               if ( wait !== true && --jQuery.readyWait > 0 ) {
-                       return;
-               }
-
-               // If there are functions bound, to execute
-               readyList.resolveWith( document, [ jQuery ] );
-       }
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
-       document.removeEventListener( "DOMContentLoaded", completed );
-       window.removeEventListener( "load", completed );
-       jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
-       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
-       // Handle it asynchronously to allow scripts the opportunity to delay ready
-       window.setTimeout( jQuery.ready );
-
-} else {
-
-       // Use the handy event callback
-       document.addEventListener( "DOMContentLoaded", completed );
-
-       // A fallback to window.onload, that will always work
-       window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
-       var i = 0,
-               len = elems.length,
-               bulk = key == null;
-
-       // Sets many values
-       if ( jQuery.type( key ) === "object" ) {
-               chainable = true;
-               for ( i in key ) {
-                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
-               }
-
-       // Sets one value
-       } else if ( value !== undefined ) {
-               chainable = true;
-
-               if ( !jQuery.isFunction( value ) ) {
-                       raw = true;
-               }
-
-               if ( bulk ) {
-
-                       // Bulk operations run against the entire set
-                       if ( raw ) {
-                               fn.call( elems, value );
-                               fn = null;
-
-                       // ...except when executing function values
-                       } else {
-                               bulk = fn;
-                               fn = function( elem, key, value ) {
-                                       return bulk.call( jQuery( elem ), value );
-                               };
-                       }
-               }
-
-               if ( fn ) {
-                       for ( ; i < len; i++ ) {
-                               fn(
-                                       elems[ i ], key, raw ?
-                                       value :
-                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
-                               );
-                       }
-               }
-       }
-
-       if ( chainable ) {
-               return elems;
-       }
-
-       // Gets
-       if ( bulk ) {
-               return fn.call( elems );
-       }
-
-       return len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-var acceptData = function( owner ) {
-
-       // Accepts only:
-       //  - Node
-       //    - Node.ELEMENT_NODE
-       //    - Node.DOCUMENT_NODE
-       //  - Object
-       //    - Any
-       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
-       this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
-       cache: function( owner ) {
-
-               // Check if the owner object already has a cache
-               var value = owner[ this.expando ];
-
-               // If not, create one
-               if ( !value ) {
-                       value = {};
-
-                       // We can accept data for non-element nodes in modern browsers,
-                       // but we should not, see #8335.
-                       // Always return an empty object.
-                       if ( acceptData( owner ) ) {
-
-                               // If it is a node unlikely to be stringify-ed or looped over
-                               // use plain assignment
-                               if ( owner.nodeType ) {
-                                       owner[ this.expando ] = value;
-
-                               // Otherwise secure it in a non-enumerable property
-                               // configurable must be true to allow the property to be
-                               // deleted when data is removed
-                               } else {
-                                       Object.defineProperty( owner, this.expando, {
-                                               value: value,
-                                               configurable: true
-                                       } );
-                               }
-                       }
-               }
-
-               return value;
-       },
-       set: function( owner, data, value ) {
-               var prop,
-                       cache = this.cache( owner );
-
-               // Handle: [ owner, key, value ] args
-               // Always use camelCase key (gh-2257)
-               if ( typeof data === "string" ) {
-                       cache[ jQuery.camelCase( data ) ] = value;
-
-               // Handle: [ owner, { properties } ] args
-               } else {
-
-                       // Copy the properties one-by-one to the cache object
-                       for ( prop in data ) {
-                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
-                       }
-               }
-               return cache;
-       },
-       get: function( owner, key ) {
-               return key === undefined ?
-                       this.cache( owner ) :
-
-                       // Always use camelCase key (gh-2257)
-                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
-       },
-       access: function( owner, key, value ) {
-
-               // In cases where either:
-               //
-               //   1. No key was specified
-               //   2. A string key was specified, but no value provided
-               //
-               // Take the "read" path and allow the get method to determine
-               // which value to return, respectively either:
-               //
-               //   1. The entire cache object
-               //   2. The data stored at the key
-               //
-               if ( key === undefined ||
-                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
-
-                       return this.get( owner, key );
-               }
-
-               // When the key is not a string, or both a key and value
-               // are specified, set or extend (existing objects) with either:
-               //
-               //   1. An object of properties
-               //   2. A key and value
-               //
-               this.set( owner, key, value );
-
-               // Since the "set" path can have two possible entry points
-               // return the expected data based on which path was taken[*]
-               return value !== undefined ? value : key;
-       },
-       remove: function( owner, key ) {
-               var i,
-                       cache = owner[ this.expando ];
-
-               if ( cache === undefined ) {
-                       return;
-               }
-
-               if ( key !== undefined ) {
-
-                       // Support array or space separated string of keys
-                       if ( Array.isArray( key ) ) {
-
-                               // If key is an array of keys...
-                               // We always set camelCase keys, so remove that.
-                               key = key.map( jQuery.camelCase );
-                       } else {
-                               key = jQuery.camelCase( key );
-
-                               // If a key with the spaces exists, use it.
-                               // Otherwise, create an array by matching non-whitespace
-                               key = key in cache ?
-                                       [ key ] :
-                                       ( key.match( rnothtmlwhite ) || [] );
-                       }
-
-                       i = key.length;
-
-                       while ( i-- ) {
-                               delete cache[ key[ i ] ];
-                       }
-               }
-
-               // Remove the expando if there's no more data
-               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
-                       // Support: Chrome <=35 - 45
-                       // Webkit & Blink performance suffers when deleting properties
-                       // from DOM nodes, so set to undefined instead
-                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
-                       if ( owner.nodeType ) {
-                               owner[ this.expando ] = undefined;
-                       } else {
-                               delete owner[ this.expando ];
-                       }
-               }
-       },
-       hasData: function( owner ) {
-               var cache = owner[ this.expando ];
-               return cache !== undefined && !jQuery.isEmptyObject( cache );
-       }
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-//     Implementation Summary
-//
-//     1. Enforce API surface and semantic compatibility with 1.9.x branch
-//     2. Improve the module's maintainability by reducing the storage
-//             paths to a single mechanism.
-//     3. Use the same single mechanism to support "private" and "user" data.
-//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-//     5. Avoid exposing implementation details on user objects (eg. expando properties)
-//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-       rmultiDash = /[A-Z]/g;
-
-function getData( data ) {
-       if ( data === "true" ) {
-               return true;
-       }
-
-       if ( data === "false" ) {
-               return false;
-       }
-
-       if ( data === "null" ) {
-               return null;
-       }
-
-       // Only convert to a number if it doesn't change the string
-       if ( data === +data + "" ) {
-               return +data;
-       }
-
-       if ( rbrace.test( data ) ) {
-               return JSON.parse( data );
-       }
-
-       return data;
-}
-
-function dataAttr( elem, key, data ) {
-       var name;
-
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
-               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
-               data = elem.getAttribute( name );
-
-               if ( typeof data === "string" ) {
-                       try {
-                               data = getData( data );
-                       } catch ( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       dataUser.set( elem, key, data );
-               } else {
-                       data = undefined;
-               }
-       }
-       return data;
-}
-
-jQuery.extend( {
-       hasData: function( elem ) {
-               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
-       },
-
-       data: function( elem, name, data ) {
-               return dataUser.access( elem, name, data );
-       },
-
-       removeData: function( elem, name ) {
-               dataUser.remove( elem, name );
-       },
-
-       // TODO: Now that all calls to _data and _removeData have been replaced
-       // with direct calls to dataPriv methods, these can be deprecated.
-       _data: function( elem, name, data ) {
-               return dataPriv.access( elem, name, data );
-       },
-
-       _removeData: function( elem, name ) {
-               dataPriv.remove( elem, name );
-       }
-} );
-
-jQuery.fn.extend( {
-       data: function( key, value ) {
-               var i, name, data,
-                       elem = this[ 0 ],
-                       attrs = elem && elem.attributes;
-
-               // Gets all values
-               if ( key === undefined ) {
-                       if ( this.length ) {
-                               data = dataUser.get( elem );
-
-                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
-                                       i = attrs.length;
-                                       while ( i-- ) {
-
-                                               // Support: IE 11 only
-                                               // The attrs elements can be null (#14894)
-                                               if ( attrs[ i ] ) {
-                                                       name = attrs[ i ].name;
-                                                       if ( name.indexOf( "data-" ) === 0 ) {
-                                                               name = jQuery.camelCase( name.slice( 5 ) );
-                                                               dataAttr( elem, name, data[ name ] );
-                                                       }
-                                               }
-                                       }
-                                       dataPriv.set( elem, "hasDataAttrs", true );
-                               }
-                       }
-
-                       return data;
-               }
-
-               // Sets multiple values
-               if ( typeof key === "object" ) {
-                       return this.each( function() {
-                               dataUser.set( this, key );
-                       } );
-               }
-
-               return access( this, function( value ) {
-                       var data;
-
-                       // The calling jQuery object (element matches) is not empty
-                       // (and therefore has an element appears at this[ 0 ]) and the
-                       // `value` parameter was not undefined. An empty jQuery object
-                       // will result in `undefined` for elem = this[ 0 ] which will
-                       // throw an exception if an attempt to read a data cache is made.
-                       if ( elem && value === undefined ) {
-
-                               // Attempt to get data from the cache
-                               // The key will always be camelCased in Data
-                               data = dataUser.get( elem, key );
-                               if ( data !== undefined ) {
-                                       return data;
-                               }
-
-                               // Attempt to "discover" the data in
-                               // HTML5 custom data-* attrs
-                               data = dataAttr( elem, key );
-                               if ( data !== undefined ) {
-                                       return data;
-                               }
-
-                               // We tried really hard, but the data doesn't exist.
-                               return;
-                       }
-
-                       // Set the data...
-                       this.each( function() {
-
-                               // We always store the camelCased key
-                               dataUser.set( this, key, value );
-                       } );
-               }, null, value, arguments.length > 1, null, true );
-       },
-
-       removeData: function( key ) {
-               return this.each( function() {
-                       dataUser.remove( this, key );
-               } );
-       }
-} );
-
-
-jQuery.extend( {
-       queue: function( elem, type, data ) {
-               var queue;
-
-               if ( elem ) {
-                       type = ( type || "fx" ) + "queue";
-                       queue = dataPriv.get( elem, type );
-
-                       // Speed up dequeue by getting out quickly if this is just a lookup
-                       if ( data ) {
-                               if ( !queue || Array.isArray( data ) ) {
-                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
-                               } else {
-                                       queue.push( data );
-                               }
-                       }
-                       return queue || [];
-               }
-       },
-
-       dequeue: function( elem, type ) {
-               type = type || "fx";
-
-               var queue = jQuery.queue( elem, type ),
-                       startLength = queue.length,
-                       fn = queue.shift(),
-                       hooks = jQuery._queueHooks( elem, type ),
-                       next = function() {
-                               jQuery.dequeue( elem, type );
-                       };
-
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-                       startLength--;
-               }
-
-               if ( fn ) {
-
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift( "inprogress" );
-                       }
-
-                       // Clear up the last queue stop function
-                       delete hooks.stop;
-                       fn.call( elem, next, hooks );
-               }
-
-               if ( !startLength && hooks ) {
-                       hooks.empty.fire();
-               }
-       },
-
-       // Not public - generate a queueHooks object, or return the current one
-       _queueHooks: function( elem, type ) {
-               var key = type + "queueHooks";
-               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
-                       empty: jQuery.Callbacks( "once memory" ).add( function() {
-                               dataPriv.remove( elem, [ type + "queue", key ] );
-                       } )
-               } );
-       }
-} );
-
-jQuery.fn.extend( {
-       queue: function( type, data ) {
-               var setter = 2;
-
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-                       setter--;
-               }
-
-               if ( arguments.length < setter ) {
-                       return jQuery.queue( this[ 0 ], type );
-               }
-
-               return data === undefined ?
-                       this :
-                       this.each( function() {
-                               var queue = jQuery.queue( this, type, data );
-
-                               // Ensure a hooks for this queue
-                               jQuery._queueHooks( this, type );
-
-                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
-                                       jQuery.dequeue( this, type );
-                               }
-                       } );
-       },
-       dequeue: function( type ) {
-               return this.each( function() {
-                       jQuery.dequeue( this, type );
-               } );
-       },
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       },
-
-       // Get a promise resolved when queues of a certain type
-       // are emptied (fx is the type by default)
-       promise: function( type, obj ) {
-               var tmp,
-                       count = 1,
-                       defer = jQuery.Deferred(),
-                       elements = this,
-                       i = this.length,
-                       resolve = function() {
-                               if ( !( --count ) ) {
-                                       defer.resolveWith( elements, [ elements ] );
-                               }
-                       };
-
-               if ( typeof type !== "string" ) {
-                       obj = type;
-                       type = undefined;
-               }
-               type = type || "fx";
-
-               while ( i-- ) {
-                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
-                       if ( tmp && tmp.empty ) {
-                               count++;
-                               tmp.empty.add( resolve );
-                       }
-               }
-               resolve();
-               return defer.promise( obj );
-       }
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHiddenWithinTree = function( elem, el ) {
-
-               // isHiddenWithinTree might be called from jQuery#filter function;
-               // in that case, element will be second argument
-               elem = el || elem;
-
-               // Inline style trumps all
-               return elem.style.display === "none" ||
-                       elem.style.display === "" &&
-
-                       // Otherwise, check computed style
-                       // Support: Firefox <=43 - 45
-                       // Disconnected elements can have computed display: none, so first confirm that elem is
-                       // in the document.
-                       jQuery.contains( elem.ownerDocument, elem ) &&
-
-                       jQuery.css( elem, "display" ) === "none";
-       };
-
-var swap = function( elem, options, callback, args ) {
-       var ret, name,
-               old = {};
-
-       // Remember the old values, and insert the new ones
-       for ( name in options ) {
-               old[ name ] = elem.style[ name ];
-               elem.style[ name ] = options[ name ];
-       }
-
-       ret = callback.apply( elem, args || [] );
-
-       // Revert the old values
-       for ( name in options ) {
-               elem.style[ name ] = old[ name ];
-       }
-
-       return ret;
-};
-
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
-       var adjusted,
-               scale = 1,
-               maxIterations = 20,
-               currentValue = tween ?
-                       function() {
-                               return tween.cur();
-                       } :
-                       function() {
-                               return jQuery.css( elem, prop, "" );
-                       },
-               initial = currentValue(),
-               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-               // Starting value computation is required for potential unit mismatches
-               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
-                       rcssNum.exec( jQuery.css( elem, prop ) );
-
-       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
-               // Trust units reported by jQuery.css
-               unit = unit || initialInUnit[ 3 ];
-
-               // Make sure we update the tween properties later on
-               valueParts = valueParts || [];
-
-               // Iteratively approximate from a nonzero starting point
-               initialInUnit = +initial || 1;
-
-               do {
-
-                       // If previous iteration zeroed out, double until we get *something*.
-                       // Use string for doubling so we don't accidentally see scale as unchanged below
-                       scale = scale || ".5";
-
-                       // Adjust and apply
-                       initialInUnit = initialInUnit / scale;
-                       jQuery.style( elem, prop, initialInUnit + unit );
-
-               // Update scale, tolerating zero or NaN from tween.cur()
-               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
-               } while (
-                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
-               );
-       }
-
-       if ( valueParts ) {
-               initialInUnit = +initialInUnit || +initial || 0;
-
-               // Apply relative offset (+=/-=) if specified
-               adjusted = valueParts[ 1 ] ?
-                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
-                       +valueParts[ 2 ];
-               if ( tween ) {
-                       tween.unit = unit;
-                       tween.start = initialInUnit;
-                       tween.end = adjusted;
-               }
-       }
-       return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
-       var temp,
-               doc = elem.ownerDocument,
-               nodeName = elem.nodeName,
-               display = defaultDisplayMap[ nodeName ];
-
-       if ( display ) {
-               return display;
-       }
-
-       temp = doc.body.appendChild( doc.createElement( nodeName ) );
-       display = jQuery.css( temp, "display" );
-
-       temp.parentNode.removeChild( temp );
-
-       if ( display === "none" ) {
-               display = "block";
-       }
-       defaultDisplayMap[ nodeName ] = display;
-
-       return display;
-}
-
-function showHide( elements, show ) {
-       var display, elem,
-               values = [],
-               index = 0,
-               length = elements.length;
-
-       // Determine new display value for elements that need to change
-       for ( ; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-
-               display = elem.style.display;
-               if ( show ) {
-
-                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
-                       // check is required in this first loop unless we have a nonempty display value (either
-                       // inline or about-to-be-restored)
-                       if ( display === "none" ) {
-                               values[ index ] = dataPriv.get( elem, "display" ) || null;
-                               if ( !values[ index ] ) {
-                                       elem.style.display = "";
-                               }
-                       }
-                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
-                               values[ index ] = getDefaultDisplay( elem );
-                       }
-               } else {
-                       if ( display !== "none" ) {
-                               values[ index ] = "none";
-
-                               // Remember what we're overwriting
-                               dataPriv.set( elem, "display", display );
-                       }
-               }
-       }
-
-       // Set the display of the elements in a second loop to avoid constant reflow
-       for ( index = 0; index < length; index++ ) {
-               if ( values[ index ] != null ) {
-                       elements[ index ].style.display = values[ index ];
-               }
-       }
-
-       return elements;
-}
-
-jQuery.fn.extend( {
-       show: function() {
-               return showHide( this, true );
-       },
-       hide: function() {
-               return showHide( this );
-       },
-       toggle: function( state ) {
-               if ( typeof state === "boolean" ) {
-                       return state ? this.show() : this.hide();
-               }
-
-               return this.each( function() {
-                       if ( isHiddenWithinTree( this ) ) {
-                               jQuery( this ).show();
-                       } else {
-                               jQuery( this ).hide();
-                       }
-               } );
-       }
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
-       // Support: IE <=9 only
-       option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
-       // XHTML parsers do not magically insert elements in the
-       // same way that tag soup parsers do. So we cannot shorten
-       // this by omitting <tbody> or other required elements.
-       thead: [ 1, "<table>", "</table>" ],
-       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
-       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-       _default: [ 0, "", "" ]
-};
-
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-
-       // Support: IE <=9 - 11 only
-       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
-       var ret;
-
-       if ( typeof context.getElementsByTagName !== "undefined" ) {
-               ret = context.getElementsByTagName( tag || "*" );
-
-       } else if ( typeof context.querySelectorAll !== "undefined" ) {
-               ret = context.querySelectorAll( tag || "*" );
-
-       } else {
-               ret = [];
-       }
-
-       if ( tag === undefined || tag && nodeName( context, tag ) ) {
-               return jQuery.merge( [ context ], ret );
-       }
-
-       return ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-       var i = 0,
-               l = elems.length;
-
-       for ( ; i < l; i++ ) {
-               dataPriv.set(
-                       elems[ i ],
-                       "globalEval",
-                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
-               );
-       }
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
-       var elem, tmp, tag, wrap, contains, j,
-               fragment = context.createDocumentFragment(),
-               nodes = [],
-               i = 0,
-               l = elems.length;
-
-       for ( ; i < l; i++ ) {
-               elem = elems[ i ];
-
-               if ( elem || elem === 0 ) {
-
-                       // Add nodes directly
-                       if ( jQuery.type( elem ) === "object" ) {
-
-                               // Support: Android <=4.0 only, PhantomJS 1 only
-                               // push.apply(_, arraylike) throws on ancient WebKit
-                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-                       // Convert non-html into a text node
-                       } else if ( !rhtml.test( elem ) ) {
-                               nodes.push( context.createTextNode( elem ) );
-
-                       // Convert html into DOM nodes
-                       } else {
-                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
-                               // Deserialize a standard representation
-                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
-                               wrap = wrapMap[ tag ] || wrapMap._default;
-                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
-                               // Descend through wrappers to the right content
-                               j = wrap[ 0 ];
-                               while ( j-- ) {
-                                       tmp = tmp.lastChild;
-                               }
-
-                               // Support: Android <=4.0 only, PhantomJS 1 only
-                               // push.apply(_, arraylike) throws on ancient WebKit
-                               jQuery.merge( nodes, tmp.childNodes );
-
-                               // Remember the top-level container
-                               tmp = fragment.firstChild;
-
-                               // Ensure the created nodes are orphaned (#12392)
-                               tmp.textContent = "";
-                       }
-               }
-       }
-
-       // Remove wrapper from fragment
-       fragment.textContent = "";
-
-       i = 0;
-       while ( ( elem = nodes[ i++ ] ) ) {
-
-               // Skip elements already in the context collection (trac-4087)
-               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
-                       if ( ignored ) {
-                               ignored.push( elem );
-                       }
-                       continue;
-               }
-
-               contains = jQuery.contains( elem.ownerDocument, elem );
-
-               // Append to fragment
-               tmp = getAll( fragment.appendChild( elem ), "script" );
-
-               // Preserve script evaluation history
-               if ( contains ) {
-                       setGlobalEval( tmp );
-               }
-
-               // Capture executables
-               if ( scripts ) {
-                       j = 0;
-                       while ( ( elem = tmp[ j++ ] ) ) {
-                               if ( rscriptType.test( elem.type || "" ) ) {
-                                       scripts.push( elem );
-                               }
-                       }
-               }
-       }
-
-       return fragment;
-}
-
-
-( function() {
-       var fragment = document.createDocumentFragment(),
-               div = fragment.appendChild( document.createElement( "div" ) ),
-               input = document.createElement( "input" );
-
-       // Support: Android 4.0 - 4.3 only
-       // Check state lost if the name is set (#11217)
-       // Support: Windows Web Apps (WWA)
-       // `name` and `type` must use .setAttribute for WWA (#14901)
-       input.setAttribute( "type", "radio" );
-       input.setAttribute( "checked", "checked" );
-       input.setAttribute( "name", "t" );
-
-       div.appendChild( input );
-
-       // Support: Android <=4.1 only
-       // Older WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-       // Support: IE <=11 only
-       // Make sure textarea (and checkbox) defaultValue is properly cloned
-       div.innerHTML = "<textarea>x</textarea>";
-       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-var documentElement = document.documentElement;
-
-
-
-var
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
-       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
-       return true;
-}
-
-function returnFalse() {
-       return false;
-}
-
-// Support: IE <=9 only
-// See #13393 for more info
-function safeActiveElement() {
-       try {
-               return document.activeElement;
-       } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
-       var origFn, type;
-
-       // Types can be a map of types/handlers
-       if ( typeof types === "object" ) {
-
-               // ( types-Object, selector, data )
-               if ( typeof selector !== "string" ) {
-
-                       // ( types-Object, data )
-                       data = data || selector;
-                       selector = undefined;
-               }
-               for ( type in types ) {
-                       on( elem, type, selector, data, types[ type ], one );
-               }
-               return elem;
-       }
-
-       if ( data == null && fn == null ) {
-
-               // ( types, fn )
-               fn = selector;
-               data = selector = undefined;
-       } else if ( fn == null ) {
-               if ( typeof selector === "string" ) {
-
-                       // ( types, selector, fn )
-                       fn = data;
-                       data = undefined;
-               } else {
-
-                       // ( types, data, fn )
-                       fn = data;
-                       data = selector;
-                       selector = undefined;
-               }
-       }
-       if ( fn === false ) {
-               fn = returnFalse;
-       } else if ( !fn ) {
-               return elem;
-       }
-
-       if ( one === 1 ) {
-               origFn = fn;
-               fn = function( event ) {
-
-                       // Can use an empty set, since event contains the info
-                       jQuery().off( event );
-                       return origFn.apply( this, arguments );
-               };
-
-               // Use same guid so caller can remove using origFn
-               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-       }
-       return elem.each( function() {
-               jQuery.event.add( this, types, fn, data, selector );
-       } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-       global: {},
-
-       add: function( elem, types, handler, data, selector ) {
-
-               var handleObjIn, eventHandle, tmp,
-                       events, t, handleObj,
-                       special, handlers, type, namespaces, origType,
-                       elemData = dataPriv.get( elem );
-
-               // Don't attach events to noData or text/comment nodes (but allow plain objects)
-               if ( !elemData ) {
-                       return;
-               }
-
-               // Caller can pass in an object of custom data in lieu of the handler
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-                       selector = handleObjIn.selector;
-               }
-
-               // Ensure that invalid selectors throw exceptions at attach time
-               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
-               if ( selector ) {
-                       jQuery.find.matchesSelector( documentElement, selector );
-               }
-
-               // Make sure that the handler has a unique ID, used to find/remove it later
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
-
-               // Init the element's event structure and main handler, if this is the first
-               if ( !( events = elemData.events ) ) {
-                       events = elemData.events = {};
-               }
-               if ( !( eventHandle = elemData.handle ) ) {
-                       eventHandle = elemData.handle = function( e ) {
-
-                               // Discard the second event of a jQuery.event.trigger() and
-                               // when an event is called after a page has unloaded
-                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
-                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
-                       };
-               }
-
-               // Handle multiple events separated by a space
-               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[ t ] ) || [];
-                       type = origType = tmp[ 1 ];
-                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-                       // There *must* be a type, no attaching namespace-only handlers
-                       if ( !type ) {
-                               continue;
-                       }
-
-                       // If event changes its type, use the special event handlers for the changed type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // If selector defined, determine special event api type, otherwise given type
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-
-                       // Update special based on newly reset type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend( {
-                               type: type,
-                               origType: origType,
-                               data: data,
-                               handler: handler,
-                               guid: handler.guid,
-                               selector: selector,
-                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-                               namespace: namespaces.join( "." )
-                       }, handleObjIn );
-
-                       // Init the event handler queue if we're the first
-                       if ( !( handlers = events[ type ] ) ) {
-                               handlers = events[ type ] = [];
-                               handlers.delegateCount = 0;
-
-                               // Only use addEventListener if the special events handler returns false
-                               if ( !special.setup ||
-                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle );
-                                       }
-                               }
-                       }
-
-                       if ( special.add ) {
-                               special.add.call( elem, handleObj );
-
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
-                               }
-                       }
-
-                       // Add to the element's handler list, delegates in front
-                       if ( selector ) {
-                               handlers.splice( handlers.delegateCount++, 0, handleObj );
-                       } else {
-                               handlers.push( handleObj );
-                       }
-
-                       // Keep track of which events have ever been used, for event optimization
-                       jQuery.event.global[ type ] = true;
-               }
-
-       },
-
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, selector, mappedTypes ) {
-
-               var j, origCount, tmp,
-                       events, t, handleObj,
-                       special, handlers, type, namespaces, origType,
-                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
-               if ( !elemData || !( events = elemData.events ) ) {
-                       return;
-               }
-
-               // Once for each type.namespace in types; type may be omitted
-               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[ t ] ) || [];
-                       type = origType = tmp[ 1 ];
-                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-                       // Unbind all events (on this namespace, if provided) for the element
-                       if ( !type ) {
-                               for ( type in events ) {
-                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-                               }
-                               continue;
-                       }
-
-                       special = jQuery.event.special[ type ] || {};
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-                       handlers = events[ type ] || [];
-                       tmp = tmp[ 2 ] &&
-                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
-                       // Remove matching events
-                       origCount = j = handlers.length;
-                       while ( j-- ) {
-                               handleObj = handlers[ j ];
-
-                               if ( ( mappedTypes || origType === handleObj.origType ) &&
-                                       ( !handler || handler.guid === handleObj.guid ) &&
-                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
-                                       ( !selector || selector === handleObj.selector ||
-                                               selector === "**" && handleObj.selector ) ) {
-                                       handlers.splice( j, 1 );
-
-                                       if ( handleObj.selector ) {
-                                               handlers.delegateCount--;
-                                       }
-                                       if ( special.remove ) {
-                                               special.remove.call( elem, handleObj );
-                                       }
-                               }
-                       }
-
-                       // Remove generic event handler if we removed something and no more handlers exist
-                       // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( origCount && !handlers.length ) {
-                               if ( !special.teardown ||
-                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
-                                       jQuery.removeEvent( elem, type, elemData.handle );
-                               }
-
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove data and the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       dataPriv.remove( elem, "handle events" );
-               }
-       },
-
-       dispatch: function( nativeEvent ) {
-
-               // Make a writable jQuery.Event from the native event object
-               var event = jQuery.event.fix( nativeEvent );
-
-               var i, j, ret, matched, handleObj, handlerQueue,
-                       args = new Array( arguments.length ),
-                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
-                       special = jQuery.event.special[ event.type ] || {};
-
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[ 0 ] = event;
-
-               for ( i = 1; i < arguments.length; i++ ) {
-                       args[ i ] = arguments[ i ];
-               }
-
-               event.delegateTarget = this;
-
-               // Call the preDispatch hook for the mapped type, and let it bail if desired
-               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                       return;
-               }
-
-               // Determine handlers
-               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-               // Run delegates first; they may want to stop propagation beneath us
-               i = 0;
-               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
-                       event.currentTarget = matched.elem;
-
-                       j = 0;
-                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
-                               !event.isImmediatePropagationStopped() ) {
-
-                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
-                               // a subset or equal to those in the bound event (both can have no namespace).
-                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
-
-                                       event.handleObj = handleObj;
-                                       event.data = handleObj.data;
-
-                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
-                                               handleObj.handler ).apply( matched.elem, args );
-
-                                       if ( ret !== undefined ) {
-                                               if ( ( event.result = ret ) === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               // Call the postDispatch hook for the mapped type
-               if ( special.postDispatch ) {
-                       special.postDispatch.call( this, event );
-               }
-
-               return event.result;
-       },
-
-       handlers: function( event, handlers ) {
-               var i, handleObj, sel, matchedHandlers, matchedSelectors,
-                       handlerQueue = [],
-                       delegateCount = handlers.delegateCount,
-                       cur = event.target;
-
-               // Find delegate handlers
-               if ( delegateCount &&
-
-                       // Support: IE <=9
-                       // Black-hole SVG <use> instance trees (trac-13180)
-                       cur.nodeType &&
-
-                       // Support: Firefox <=42
-                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
-                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
-                       // Support: IE 11 only
-                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
-                       !( event.type === "click" && event.button >= 1 ) ) {
-
-                       for ( ; cur !== this; cur = cur.parentNode || this ) {
-
-                               // Don't check non-elements (#13208)
-                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
-                                       matchedHandlers = [];
-                                       matchedSelectors = {};
-                                       for ( i = 0; i < delegateCount; i++ ) {
-                                               handleObj = handlers[ i ];
-
-                                               // Don't conflict with Object.prototype properties (#13203)
-                                               sel = handleObj.selector + " ";
-
-                                               if ( matchedSelectors[ sel ] === undefined ) {
-                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
-                                                               jQuery( sel, this ).index( cur ) > -1 :
-                                                               jQuery.find( sel, this, null, [ cur ] ).length;
-                                               }
-                                               if ( matchedSelectors[ sel ] ) {
-                                                       matchedHandlers.push( handleObj );
-                                               }
-                                       }
-                                       if ( matchedHandlers.length ) {
-                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
-                                       }
-                               }
-                       }
-               }
-
-               // Add the remaining (directly-bound) handlers
-               cur = this;
-               if ( delegateCount < handlers.length ) {
-                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
-               }
-
-               return handlerQueue;
-       },
-
-       addProp: function( name, hook ) {
-               Object.defineProperty( jQuery.Event.prototype, name, {
-                       enumerable: true,
-                       configurable: true,
-
-                       get: jQuery.isFunction( hook ) ?
-                               function() {
-                                       if ( this.originalEvent ) {
-                                                       return hook( this.originalEvent );
-                                       }
-                               } :
-                               function() {
-                                       if ( this.originalEvent ) {
-                                                       return this.originalEvent[ name ];
-                                       }
-                               },
-
-                       set: function( value ) {
-                               Object.defineProperty( this, name, {
-                                       enumerable: true,
-                                       configurable: true,
-                                       writable: true,
-                                       value: value
-                               } );
-                       }
-               } );
-       },
-
-       fix: function( originalEvent ) {
-               return originalEvent[ jQuery.expando ] ?
-                       originalEvent :
-                       new jQuery.Event( originalEvent );
-       },
-
-       special: {
-               load: {
-
-                       // Prevent triggered image.load events from bubbling to window.load
-                       noBubble: true
-               },
-               focus: {
-
-                       // Fire native event if possible so blur/focus sequence is correct
-                       trigger: function() {
-                               if ( this !== safeActiveElement() && this.focus ) {
-                                       this.focus();
-                                       return false;
-                               }
-                       },
-                       delegateType: "focusin"
-               },
-               blur: {
-                       trigger: function() {
-                               if ( this === safeActiveElement() && this.blur ) {
-                                       this.blur();
-                                       return false;
-                               }
-                       },
-                       delegateType: "focusout"
-               },
-               click: {
-
-                       // For checkbox, fire native event so checked state will be right
-                       trigger: function() {
-                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
-                                       this.click();
-                                       return false;
-                               }
-                       },
-
-                       // For cross-browser consistency, don't fire native .click() on links
-                       _default: function( event ) {
-                               return nodeName( event.target, "a" );
-                       }
-               },
-
-               beforeunload: {
-                       postDispatch: function( event ) {
-
-                               // Support: Firefox 20+
-                               // Firefox doesn't alert if the returnValue field is not set.
-                               if ( event.result !== undefined && event.originalEvent ) {
-                                       event.originalEvent.returnValue = event.result;
-                               }
-                       }
-               }
-       }
-};
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
-       // This "if" is needed for plain objects
-       if ( elem.removeEventListener ) {
-               elem.removeEventListener( type, handle );
-       }
-};
-
-jQuery.Event = function( src, props ) {
-
-       // Allow instantiation without the 'new' keyword
-       if ( !( this instanceof jQuery.Event ) ) {
-               return new jQuery.Event( src, props );
-       }
-
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
-
-               // Events bubbling up the document may have been marked as prevented
-               // by a handler lower down the tree; reflect the correct value.
-               this.isDefaultPrevented = src.defaultPrevented ||
-                               src.defaultPrevented === undefined &&
-
-                               // Support: Android <=2.3 only
-                               src.returnValue === false ?
-                       returnTrue :
-                       returnFalse;
-
-               // Create target properties
-               // Support: Safari <=6 - 7 only
-               // Target should not be a text node (#504, #13143)
-               this.target = ( src.target && src.target.nodeType === 3 ) ?
-                       src.target.parentNode :
-                       src.target;
-
-               this.currentTarget = src.currentTarget;
-               this.relatedTarget = src.relatedTarget;
-
-       // Event type
-       } else {
-               this.type = src;
-       }
-
-       // Put explicitly provided properties onto the event object
-       if ( props ) {
-               jQuery.extend( this, props );
-       }
-
-       // Create a timestamp if incoming event doesn't have one
-       this.timeStamp = src && src.timeStamp || jQuery.now();
-
-       // Mark it as fixed
-       this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-       constructor: jQuery.Event,
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse,
-       isSimulated: false,
-
-       preventDefault: function() {
-               var e = this.originalEvent;
-
-               this.isDefaultPrevented = returnTrue;
-
-               if ( e && !this.isSimulated ) {
-                       e.preventDefault();
-               }
-       },
-       stopPropagation: function() {
-               var e = this.originalEvent;
-
-               this.isPropagationStopped = returnTrue;
-
-               if ( e && !this.isSimulated ) {
-                       e.stopPropagation();
-               }
-       },
-       stopImmediatePropagation: function() {
-               var e = this.originalEvent;
-
-               this.isImmediatePropagationStopped = returnTrue;
-
-               if ( e && !this.isSimulated ) {
-                       e.stopImmediatePropagation();
-               }
-
-               this.stopPropagation();
-       }
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
-       altKey: true,
-       bubbles: true,
-       cancelable: true,
-       changedTouches: true,
-       ctrlKey: true,
-       detail: true,
-       eventPhase: true,
-       metaKey: true,
-       pageX: true,
-       pageY: true,
-       shiftKey: true,
-       view: true,
-       "char": true,
-       charCode: true,
-       key: true,
-       keyCode: true,
-       button: true,
-       buttons: true,
-       clientX: true,
-       clientY: true,
-       offsetX: true,
-       offsetY: true,
-       pointerId: true,
-       pointerType: true,
-       screenX: true,
-       screenY: true,
-       targetTouches: true,
-       toElement: true,
-       touches: true,
-
-       which: function( event ) {
-               var button = event.button;
-
-               // Add which for key events
-               if ( event.which == null && rkeyEvent.test( event.type ) ) {
-                       return event.charCode != null ? event.charCode : event.keyCode;
-               }
-
-               // Add which for click: 1 === left; 2 === middle; 3 === right
-               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
-                       if ( button & 1 ) {
-                               return 1;
-                       }
-
-                       if ( button & 2 ) {
-                               return 3;
-                       }
-
-                       if ( button & 4 ) {
-                               return 2;
-                       }
-
-                       return 0;
-               }
-
-               return event.which;
-       }
-}, jQuery.event.addProp );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
-       mouseenter: "mouseover",
-       mouseleave: "mouseout",
-       pointerenter: "pointerover",
-       pointerleave: "pointerout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = {
-               delegateType: fix,
-               bindType: fix,
-
-               handle: function( event ) {
-                       var ret,
-                               target = this,
-                               related = event.relatedTarget,
-                               handleObj = event.handleObj;
-
-                       // For mouseenter/leave call the handler if related is outside the target.
-                       // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
-                               event.type = handleObj.origType;
-                               ret = handleObj.handler.apply( this, arguments );
-                               event.type = fix;
-                       }
-                       return ret;
-               }
-       };
-} );
-
-jQuery.fn.extend( {
-
-       on: function( types, selector, data, fn ) {
-               return on( this, types, selector, data, fn );
-       },
-       one: function( types, selector, data, fn ) {
-               return on( this, types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               var handleObj, type;
-               if ( types && types.preventDefault && types.handleObj ) {
-
-                       // ( event )  dispatched jQuery.Event
-                       handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace ?
-                                       handleObj.origType + "." + handleObj.namespace :
-                                       handleObj.origType,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-
-                       // ( types-object [, selector] )
-                       for ( type in types ) {
-                               this.off( type, selector, types[ type ] );
-                       }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               }
-               return this.each( function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               } );
-       }
-} );
-
-
-var
-
-       /* eslint-disable max-len */
-
-       // See https://github.com/eslint/eslint/issues/3229
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
-       /* eslint-enable */
-
-       // Support: IE <=10 - 11, Edge 12 - 13
-       // In IE/Edge using regex groups here causes severe slowdowns.
-       // See https://connect.microsoft.com/IE/feedback/details/1736512/
-       rnoInnerhtml = /<script|<style|<link/i,
-
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptTypeMasked = /^true\/(.*)/,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-// Prefer a tbody over its parent table for containing new rows
-function manipulationTarget( elem, content ) {
-       if ( nodeName( elem, "table" ) &&
-               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
-               return jQuery( ">tbody", elem )[ 0 ] || elem;
-       }
-
-       return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
-       return elem;
-}
-function restoreScript( elem ) {
-       var match = rscriptTypeMasked.exec( elem.type );
-
-       if ( match ) {
-               elem.type = match[ 1 ];
-       } else {
-               elem.removeAttribute( "type" );
-       }
-
-       return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
-
-       // 1. Copy private data: events, handlers, etc.
-       if ( dataPriv.hasData( src ) ) {
-               pdataOld = dataPriv.access( src );
-               pdataCur = dataPriv.set( dest, pdataOld );
-               events = pdataOld.events;
-
-               if ( events ) {
-                       delete pdataCur.handle;
-                       pdataCur.events = {};
-
-                       for ( type in events ) {
-                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                                       jQuery.event.add( dest, type, events[ type ][ i ] );
-                               }
-                       }
-               }
-       }
-
-       // 2. Copy user data
-       if ( dataUser.hasData( src ) ) {
-               udataOld = dataUser.access( src );
-               udataCur = jQuery.extend( {}, udataOld );
-
-               dataUser.set( dest, udataCur );
-       }
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
-       var nodeName = dest.nodeName.toLowerCase();
-
-       // Fails to persist the checked state of a cloned checkbox or radio button.
-       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-               dest.checked = src.checked;
-
-       // Fails to return the selected option to the default selected state when cloning options
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
-       }
-}
-
-function domManip( collection, args, callback, ignored ) {
-
-       // Flatten any nested arrays
-       args = concat.apply( [], args );
-
-       var fragment, first, scripts, hasScripts, node, doc,
-               i = 0,
-               l = collection.length,
-               iNoClone = l - 1,
-               value = args[ 0 ],
-               isFunction = jQuery.isFunction( value );
-
-       // We can't cloneNode fragments that contain checked, in WebKit
-       if ( isFunction ||
-                       ( l > 1 && typeof value === "string" &&
-                               !support.checkClone && rchecked.test( value ) ) ) {
-               return collection.each( function( index ) {
-                       var self = collection.eq( index );
-                       if ( isFunction ) {
-                               args[ 0 ] = value.call( this, index, self.html() );
-                       }
-                       domManip( self, args, callback, ignored );
-               } );
-       }
-
-       if ( l ) {
-               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
-               first = fragment.firstChild;
-
-               if ( fragment.childNodes.length === 1 ) {
-                       fragment = first;
-               }
-
-               // Require either new content or an interest in ignored elements to invoke the callback
-               if ( first || ignored ) {
-                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-                       hasScripts = scripts.length;
-
-                       // Use the original fragment for the last item
-                       // instead of the first because it can end up
-                       // being emptied incorrectly in certain situations (#8070).
-                       for ( ; i < l; i++ ) {
-                               node = fragment;
-
-                               if ( i !== iNoClone ) {
-                                       node = jQuery.clone( node, true, true );
-
-                                       // Keep references to cloned scripts for later restoration
-                                       if ( hasScripts ) {
-
-                                               // Support: Android <=4.0 only, PhantomJS 1 only
-                                               // push.apply(_, arraylike) throws on ancient WebKit
-                                               jQuery.merge( scripts, getAll( node, "script" ) );
-                                       }
-                               }
-
-                               callback.call( collection[ i ], node, i );
-                       }
-
-                       if ( hasScripts ) {
-                               doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-                               // Reenable scripts
-                               jQuery.map( scripts, restoreScript );
-
-                               // Evaluate executable scripts on first document insertion
-                               for ( i = 0; i < hasScripts; i++ ) {
-                                       node = scripts[ i ];
-                                       if ( rscriptType.test( node.type || "" ) &&
-                                               !dataPriv.access( node, "globalEval" ) &&
-                                               jQuery.contains( doc, node ) ) {
-
-                                               if ( node.src ) {
-
-                                                       // Optional AJAX dependency, but won't run scripts if not present
-                                                       if ( jQuery._evalUrl ) {
-                                                               jQuery._evalUrl( node.src );
-                                                       }
-                                               } else {
-                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       return collection;
-}
-
-function remove( elem, selector, keepData ) {
-       var node,
-               nodes = selector ? jQuery.filter( selector, elem ) : elem,
-               i = 0;
-
-       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
-               if ( !keepData && node.nodeType === 1 ) {
-                       jQuery.cleanData( getAll( node ) );
-               }
-
-               if ( node.parentNode ) {
-                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
-                               setGlobalEval( getAll( node, "script" ) );
-                       }
-                       node.parentNode.removeChild( node );
-               }
-       }
-
-       return elem;
-}
-
-jQuery.extend( {
-       htmlPrefilter: function( html ) {
-               return html.replace( rxhtmlTag, "<$1></$2>" );
-       },
-
-       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var i, l, srcElements, destElements,
-                       clone = elem.cloneNode( true ),
-                       inPage = jQuery.contains( elem.ownerDocument, elem );
-
-               // Fix IE cloning issues
-               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
-                               !jQuery.isXMLDoc( elem ) ) {
-
-                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
-                       destElements = getAll( clone );
-                       srcElements = getAll( elem );
-
-                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
-                               fixInput( srcElements[ i ], destElements[ i ] );
-                       }
-               }
-
-               // Copy the events from the original to the clone
-               if ( dataAndEvents ) {
-                       if ( deepDataAndEvents ) {
-                               srcElements = srcElements || getAll( elem );
-                               destElements = destElements || getAll( clone );
-
-                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
-                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
-                               }
-                       } else {
-                               cloneCopyEvent( elem, clone );
-                       }
-               }
-
-               // Preserve script evaluation history
-               destElements = getAll( clone, "script" );
-               if ( destElements.length > 0 ) {
-                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-               }
-
-               // Return the cloned set
-               return clone;
-       },
-
-       cleanData: function( elems ) {
-               var data, elem, type,
-                       special = jQuery.event.special,
-                       i = 0;
-
-               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
-                       if ( acceptData( elem ) ) {
-                               if ( ( data = elem[ dataPriv.expando ] ) ) {
-                                       if ( data.events ) {
-                                               for ( type in data.events ) {
-                                                       if ( special[ type ] ) {
-                                                               jQuery.event.remove( elem, type );
-
-                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
-                                                       } else {
-                                                               jQuery.removeEvent( elem, type, data.handle );
-                                                       }
-                                               }
-                                       }
-
-                                       // Support: Chrome <=35 - 45+
-                                       // Assign undefined instead of using delete, see Data#remove
-                                       elem[ dataPriv.expando ] = undefined;
-                               }
-                               if ( elem[ dataUser.expando ] ) {
-
-                                       // Support: Chrome <=35 - 45+
-                                       // Assign undefined instead of using delete, see Data#remove
-                                       elem[ dataUser.expando ] = undefined;
-                               }
-                       }
-               }
-       }
-} );
-
-jQuery.fn.extend( {
-       detach: function( selector ) {
-               return remove( this, selector, true );
-       },
-
-       remove: function( selector ) {
-               return remove( this, selector );
-       },
-
-       text: function( value ) {
-               return access( this, function( value ) {
-                       return value === undefined ?
-                               jQuery.text( this ) :
-                               this.empty().each( function() {
-                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                                               this.textContent = value;
-                                       }
-                               } );
-               }, null, value, arguments.length );
-       },
-
-       append: function() {
-               return domManip( this, arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.appendChild( elem );
-                       }
-               } );
-       },
-
-       prepend: function() {
-               return domManip( this, arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.insertBefore( elem, target.firstChild );
-                       }
-               } );
-       },
-
-       before: function() {
-               return domManip( this, arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this );
-                       }
-               } );
-       },
-
-       after: function() {
-               return domManip( this, arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       }
-               } );
-       },
-
-       empty: function() {
-               var elem,
-                       i = 0;
-
-               for ( ; ( elem = this[ i ] ) != null; i++ ) {
-                       if ( elem.nodeType === 1 ) {
-
-                               // Prevent memory leaks
-                               jQuery.cleanData( getAll( elem, false ) );
-
-                               // Remove any remaining nodes
-                               elem.textContent = "";
-                       }
-               }
-
-               return this;
-       },
-
-       clone: function( dataAndEvents, deepDataAndEvents ) {
-               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-               return this.map( function() {
-                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               } );
-       },
-
-       html: function( value ) {
-               return access( this, function( value ) {
-                       var elem = this[ 0 ] || {},
-                               i = 0,
-                               l = this.length;
-
-                       if ( value === undefined && elem.nodeType === 1 ) {
-                               return elem.innerHTML;
-                       }
-
-                       // See if we can take a shortcut and just use innerHTML
-                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
-                               value = jQuery.htmlPrefilter( value );
-
-                               try {
-                                       for ( ; i < l; i++ ) {
-                                               elem = this[ i ] || {};
-
-                                               // Remove element nodes and prevent memory leaks
-                                               if ( elem.nodeType === 1 ) {
-                                                       jQuery.cleanData( getAll( elem, false ) );
-                                                       elem.innerHTML = value;
-                                               }
-                                       }
-
-                                       elem = 0;
-
-                               // If using innerHTML throws an exception, use the fallback method
-                               } catch ( e ) {}
-                       }
-
-                       if ( elem ) {
-                               this.empty().append( value );
-                       }
-               }, null, value, arguments.length );
-       },
-
-       replaceWith: function() {
-               var ignored = [];
-
-               // Make the changes, replacing each non-ignored context element with the new content
-               return domManip( this, arguments, function( elem ) {
-                       var parent = this.parentNode;
-
-                       if ( jQuery.inArray( this, ignored ) < 0 ) {
-                               jQuery.cleanData( getAll( this ) );
-                               if ( parent ) {
-                                       parent.replaceChild( elem, this );
-                               }
-                       }
-
-               // Force callback invocation
-               }, ignored );
-       }
-} );
-
-jQuery.each( {
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var elems,
-                       ret = [],
-                       insert = jQuery( selector ),
-                       last = insert.length - 1,
-                       i = 0;
-
-               for ( ; i <= last; i++ ) {
-                       elems = i === last ? this : this.clone( true );
-                       jQuery( insert[ i ] )[ original ]( elems );
-
-                       // Support: Android <=4.0 only, PhantomJS 1 only
-                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
-                       push.apply( ret, elems.get() );
-               }
-
-               return this.pushStack( ret );
-       };
-} );
-var rmargin = ( /^margin/ );
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
-               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
-               // IE throws on elements created in popups
-               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-               var view = elem.ownerDocument.defaultView;
-
-               if ( !view || !view.opener ) {
-                       view = window;
-               }
-
-               return view.getComputedStyle( elem );
-       };
-
-
-
-( function() {
-
-       // Executing both pixelPosition & boxSizingReliable tests require only one layout
-       // so they're executed at the same time to save the second computation.
-       function computeStyleTests() {
-
-               // This is a singleton, we need to execute it only once
-               if ( !div ) {
-                       return;
-               }
-
-               div.style.cssText =
-                       "box-sizing:border-box;" +
-                       "position:relative;display:block;" +
-                       "margin:auto;border:1px;padding:1px;" +
-                       "top:1%;width:50%";
-               div.innerHTML = "";
-               documentElement.appendChild( container );
-
-               var divStyle = window.getComputedStyle( div );
-               pixelPositionVal = divStyle.top !== "1%";
-
-               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
-               reliableMarginLeftVal = divStyle.marginLeft === "2px";
-               boxSizingReliableVal = divStyle.width === "4px";
-
-               // Support: Android 4.0 - 4.3 only
-               // Some styles come back with percentage values, even though they shouldn't
-               div.style.marginRight = "50%";
-               pixelMarginRightVal = divStyle.marginRight === "4px";
-
-               documentElement.removeChild( container );
-
-               // Nullify the div so it wouldn't be stored in the memory and
-               // it will also be a sign that checks already performed
-               div = null;
-       }
-
-       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
-               container = document.createElement( "div" ),
-               div = document.createElement( "div" );
-
-       // Finish early in limited (non-browser) environments
-       if ( !div.style ) {
-               return;
-       }
-
-       // Support: IE <=9 - 11 only
-       // Style of cloned element affects source element cloned (#8908)
-       div.style.backgroundClip = "content-box";
-       div.cloneNode( true ).style.backgroundClip = "";
-       support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
-               "padding:0;margin-top:1px;position:absolute";
-       container.appendChild( div );
-
-       jQuery.extend( support, {
-               pixelPosition: function() {
-                       computeStyleTests();
-                       return pixelPositionVal;
-               },
-               boxSizingReliable: function() {
-                       computeStyleTests();
-                       return boxSizingReliableVal;
-               },
-               pixelMarginRight: function() {
-                       computeStyleTests();
-                       return pixelMarginRightVal;
-               },
-               reliableMarginLeft: function() {
-                       computeStyleTests();
-                       return reliableMarginLeftVal;
-               }
-       } );
-} )();
-
-
-function curCSS( elem, name, computed ) {
-       var width, minWidth, maxWidth, ret,
-
-               // Support: Firefox 51+
-               // Retrieving style before computed somehow
-               // fixes an issue with getting wrong values
-               // on detached elements
-               style = elem.style;
-
-       computed = computed || getStyles( elem );
-
-       // getPropertyValue is needed for:
-       //   .css('filter') (IE 9 only, #12537)
-       //   .css('--customProperty) (#3144)
-       if ( computed ) {
-               ret = computed.getPropertyValue( name ) || computed[ name ];
-
-               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-                       ret = jQuery.style( elem, name );
-               }
-
-               // A tribute to the "awesome hack by Dean Edwards"
-               // Android Browser returns percentage for some values,
-               // but width seems to be reliably pixels.
-               // This is against the CSSOM draft spec:
-               // https://drafts.csswg.org/cssom/#resolved-values
-               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
-                       // Remember the original values
-                       width = style.width;
-                       minWidth = style.minWidth;
-                       maxWidth = style.maxWidth;
-
-                       // Put in the new values to get a computed value out
-                       style.minWidth = style.maxWidth = style.width = ret;
-                       ret = computed.width;
-
-                       // Revert the changed values
-                       style.width = width;
-                       style.minWidth = minWidth;
-                       style.maxWidth = maxWidth;
-               }
-       }
-
-       return ret !== undefined ?
-
-               // Support: IE <=9 - 11 only
-               // IE returns zIndex value as an integer.
-               ret + "" :
-               ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
-       // Define the hook, we'll check on the first run if it's really needed.
-       return {
-               get: function() {
-                       if ( conditionFn() ) {
-
-                               // Hook not needed (or it's not possible to use it due
-                               // to missing dependency), remove it.
-                               delete this.get;
-                               return;
-                       }
-
-                       // Hook needed; redefine it so that the support test is not executed again.
-                       return ( this.get = hookFn ).apply( this, arguments );
-               }
-       };
-}
-
-
-var
-
-       // Swappable if display is none or starts with table
-       // except "table", "table-cell", or "table-caption"
-       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
-       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-       rcustomProp = /^--/,
-       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-       cssNormalTransform = {
-               letterSpacing: "0",
-               fontWeight: "400"
-       },
-
-       cssPrefixes = [ "Webkit", "Moz", "ms" ],
-       emptyStyle = document.createElement( "div" ).style;
-
-// Return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( name ) {
-
-       // Shortcut for names that are not vendor prefixed
-       if ( name in emptyStyle ) {
-               return name;
-       }
-
-       // Check for vendor prefixed names
-       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
-               i = cssPrefixes.length;
-
-       while ( i-- ) {
-               name = cssPrefixes[ i ] + capName;
-               if ( name in emptyStyle ) {
-                       return name;
-               }
-       }
-}
-
-// Return a property mapped along what jQuery.cssProps suggests or to
-// a vendor prefixed property.
-function finalPropName( name ) {
-       var ret = jQuery.cssProps[ name ];
-       if ( !ret ) {
-               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
-       }
-       return ret;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-
-       // Any relative (+/-) values have already been
-       // normalized at this point
-       var matches = rcssNum.exec( value );
-       return matches ?
-
-               // Guard against undefined "subtract", e.g., when used as in cssHooks
-               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
-               value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-       var i,
-               val = 0;
-
-       // If we already have the right measurement, avoid augmentation
-       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
-               i = 4;
-
-       // Otherwise initialize for horizontal or vertical properties
-       } else {
-               i = name === "width" ? 1 : 0;
-       }
-
-       for ( ; i < 4; i += 2 ) {
-
-               // Both box models exclude margin, so add it if we want it
-               if ( extra === "margin" ) {
-                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
-               }
-
-               if ( isBorderBox ) {
-
-                       // border-box includes padding, so remove it if we want content
-                       if ( extra === "content" ) {
-                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-                       }
-
-                       // At this point, extra isn't border nor margin, so remove border
-                       if ( extra !== "margin" ) {
-                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               } else {
-
-                       // At this point, extra isn't content, so add padding
-                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-                       // At this point, extra isn't content nor padding, so add border
-                       if ( extra !== "padding" ) {
-                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               }
-       }
-
-       return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
-       // Start with computed style
-       var valueIsBorderBox,
-               styles = getStyles( elem ),
-               val = curCSS( elem, name, styles ),
-               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-       // Computed unit is not pixels. Stop here and return.
-       if ( rnumnonpx.test( val ) ) {
-               return val;
-       }
-
-       // Check for style in case a browser which returns unreliable values
-       // for getComputedStyle silently falls back to the reliable elem.style
-       valueIsBorderBox = isBorderBox &&
-               ( support.boxSizingReliable() || val === elem.style[ name ] );
-
-       // Fall back to offsetWidth/Height when value is "auto"
-       // This happens for inline elements with no explicit setting (gh-3571)
-       if ( val === "auto" ) {
-               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
-       }
-
-       // Normalize "", auto, and prepare for extra
-       val = parseFloat( val ) || 0;
-
-       // Use the active box-sizing model to add/subtract irrelevant styles
-       return ( val +
-               augmentWidthOrHeight(
-                       elem,
-                       name,
-                       extra || ( isBorderBox ? "border" : "content" ),
-                       valueIsBorderBox,
-                       styles
-               )
-       ) + "px";
-}
-
-jQuery.extend( {
-
-       // Add in style property hooks for overriding the default
-       // behavior of getting and setting a style property
-       cssHooks: {
-               opacity: {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-
-                                       // We should always get a number back from opacity
-                                       var ret = curCSS( elem, "opacity" );
-                                       return ret === "" ? "1" : ret;
-                               }
-                       }
-               }
-       },
-
-       // Don't automatically add "px" to these possibly-unitless properties
-       cssNumber: {
-               "animationIterationCount": true,
-               "columnCount": true,
-               "fillOpacity": true,
-               "flexGrow": true,
-               "flexShrink": true,
-               "fontWeight": true,
-               "lineHeight": true,
-               "opacity": true,
-               "order": true,
-               "orphans": true,
-               "widows": true,
-               "zIndex": true,
-               "zoom": true
-       },
-
-       // Add in properties whose names you wish to fix before
-       // setting or getting the value
-       cssProps: {
-               "float": "cssFloat"
-       },
-
-       // Get and set the style property on a DOM Node
-       style: function( elem, name, value, extra ) {
-
-               // Don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                       return;
-               }
-
-               // Make sure that we're working with the right name
-               var ret, type, hooks,
-                       origName = jQuery.camelCase( name ),
-                       isCustomProp = rcustomProp.test( name ),
-                       style = elem.style;
-
-               // Make sure that we're working with the right name. We don't
-               // want to query the value if it is a CSS custom property
-               // since they are user-defined.
-               if ( !isCustomProp ) {
-                       name = finalPropName( origName );
-               }
-
-               // Gets hook for the prefixed version, then unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // Check if we're setting a value
-               if ( value !== undefined ) {
-                       type = typeof value;
-
-                       // Convert "+=" or "-=" to relative numbers (#7345)
-                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
-                               value = adjustCSS( elem, name, ret );
-
-                               // Fixes bug #9237
-                               type = "number";
-                       }
-
-                       // Make sure that null and NaN values aren't set (#7116)
-                       if ( value == null || value !== value ) {
-                               return;
-                       }
-
-                       // If a number was passed in, add the unit (except for certain CSS properties)
-                       if ( type === "number" ) {
-                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
-                       }
-
-                       // background-* props affect original clone's values
-                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
-                               style[ name ] = "inherit";
-                       }
-
-                       // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !( "set" in hooks ) ||
-                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
-                               if ( isCustomProp ) {
-                                       style.setProperty( name, value );
-                               } else {
-                                       style[ name ] = value;
-                               }
-                       }
-
-               } else {
-
-                       // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks &&
-                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
-                               return ret;
-                       }
-
-                       // Otherwise just get the value from the style object
-                       return style[ name ];
-               }
-       },
-
-       css: function( elem, name, extra, styles ) {
-               var val, num, hooks,
-                       origName = jQuery.camelCase( name ),
-                       isCustomProp = rcustomProp.test( name );
-
-               // Make sure that we're working with the right name. We don't
-               // want to modify the value if it is a CSS custom property
-               // since they are user-defined.
-               if ( !isCustomProp ) {
-                       name = finalPropName( origName );
-               }
-
-               // Try prefixed name followed by the unprefixed name
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks ) {
-                       val = hooks.get( elem, true, extra );
-               }
-
-               // Otherwise, if a way to get the computed value exists, use that
-               if ( val === undefined ) {
-                       val = curCSS( elem, name, styles );
-               }
-
-               // Convert "normal" to computed value
-               if ( val === "normal" && name in cssNormalTransform ) {
-                       val = cssNormalTransform[ name ];
-               }
-
-               // Make numeric if forced or a qualifier was provided and val looks numeric
-               if ( extra === "" || extra ) {
-                       num = parseFloat( val );
-                       return extra === true || isFinite( num ) ? num || 0 : val;
-               }
-
-               return val;
-       }
-} );
-
-jQuery.each( [ "height", "width" ], function( i, name ) {
-       jQuery.cssHooks[ name ] = {
-               get: function( elem, computed, extra ) {
-                       if ( computed ) {
-
-                               // Certain elements can have dimension info if we invisibly show them
-                               // but it must have a current display style that would benefit
-                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
-                                       // Support: Safari 8+
-                                       // Table columns in Safari have non-zero offsetWidth & zero
-                                       // getBoundingClientRect().width unless display is changed.
-                                       // Support: IE <=11 only
-                                       // Running getBoundingClientRect on a disconnected node
-                                       // in IE throws an error.
-                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
-                                               swap( elem, cssShow, function() {
-                                                       return getWidthOrHeight( elem, name, extra );
-                                               } ) :
-                                               getWidthOrHeight( elem, name, extra );
-                       }
-               },
-
-               set: function( elem, value, extra ) {
-                       var matches,
-                               styles = extra && getStyles( elem ),
-                               subtract = extra && augmentWidthOrHeight(
-                                       elem,
-                                       name,
-                                       extra,
-                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-                                       styles
-                               );
-
-                       // Convert to pixels if value adjustment is needed
-                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
-                               ( matches[ 3 ] || "px" ) !== "px" ) {
-
-                               elem.style[ name ] = value;
-                               value = jQuery.css( elem, name );
-                       }
-
-                       return setPositiveNumber( elem, value, subtract );
-               }
-       };
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
-       function( elem, computed ) {
-               if ( computed ) {
-                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
-                               elem.getBoundingClientRect().left -
-                                       swap( elem, { marginLeft: 0 }, function() {
-                                               return elem.getBoundingClientRect().left;
-                                       } )
-                               ) + "px";
-               }
-       }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
-       margin: "",
-       padding: "",
-       border: "Width"
-}, function( prefix, suffix ) {
-       jQuery.cssHooks[ prefix + suffix ] = {
-               expand: function( value ) {
-                       var i = 0,
-                               expanded = {},
-
-                               // Assumes a single number if not a string
-                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
-                       for ( ; i < 4; i++ ) {
-                               expanded[ prefix + cssExpand[ i ] + suffix ] =
-                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-                       }
-
-                       return expanded;
-               }
-       };
-
-       if ( !rmargin.test( prefix ) ) {
-               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-       }
-} );
-
-jQuery.fn.extend( {
-       css: function( name, value ) {
-               return access( this, function( elem, name, value ) {
-                       var styles, len,
-                               map = {},
-                               i = 0;
-
-                       if ( Array.isArray( name ) ) {
-                               styles = getStyles( elem );
-                               len = name.length;
-
-                               for ( ; i < len; i++ ) {
-                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-                               }
-
-                               return map;
-                       }
-
-                       return value !== undefined ?
-                               jQuery.style( elem, name, value ) :
-                               jQuery.css( elem, name );
-               }, name, value, arguments.length > 1 );
-       }
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
-       return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-       constructor: Tween,
-       init: function( elem, options, prop, end, easing, unit ) {
-               this.elem = elem;
-               this.prop = prop;
-               this.easing = easing || jQuery.easing._default;
-               this.options = options;
-               this.start = this.now = this.cur();
-               this.end = end;
-               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-       },
-       cur: function() {
-               var hooks = Tween.propHooks[ this.prop ];
-
-               return hooks && hooks.get ?
-                       hooks.get( this ) :
-                       Tween.propHooks._default.get( this );
-       },
-       run: function( percent ) {
-               var eased,
-                       hooks = Tween.propHooks[ this.prop ];
-
-               if ( this.options.duration ) {
-                       this.pos = eased = jQuery.easing[ this.easing ](
-                               percent, this.options.duration * percent, 0, 1, this.options.duration
-                       );
-               } else {
-                       this.pos = eased = percent;
-               }
-               this.now = ( this.end - this.start ) * eased + this.start;
-
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
-
-               if ( hooks && hooks.set ) {
-                       hooks.set( this );
-               } else {
-                       Tween.propHooks._default.set( this );
-               }
-               return this;
-       }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-       _default: {
-               get: function( tween ) {
-                       var result;
-
-                       // Use a property on the element directly when it is not a DOM element,
-                       // or when there is no matching style property that exists.
-                       if ( tween.elem.nodeType !== 1 ||
-                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
-                               return tween.elem[ tween.prop ];
-                       }
-
-                       // Passing an empty string as a 3rd parameter to .css will automatically
-                       // attempt a parseFloat and fallback to a string if the parse fails.
-                       // Simple values such as "10px" are parsed to Float;
-                       // complex values such as "rotate(1rad)" are returned as-is.
-                       result = jQuery.css( tween.elem, tween.prop, "" );
-
-                       // Empty strings, null, undefined and "auto" are converted to 0.
-                       return !result || result === "auto" ? 0 : result;
-               },
-               set: function( tween ) {
-
-                       // Use step hook for back compat.
-                       // Use cssHook if its there.
-                       // Use .style if available and use plain properties where available.
-                       if ( jQuery.fx.step[ tween.prop ] ) {
-                               jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.nodeType === 1 &&
-                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
-                                       jQuery.cssHooks[ tween.prop ] ) ) {
-                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-                       } else {
-                               tween.elem[ tween.prop ] = tween.now;
-                       }
-               }
-       }
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-       set: function( tween ) {
-               if ( tween.elem.nodeType && tween.elem.parentNode ) {
-                       tween.elem[ tween.prop ] = tween.now;
-               }
-       }
-};
-
-jQuery.easing = {
-       linear: function( p ) {
-               return p;
-       },
-       swing: function( p ) {
-               return 0.5 - Math.cos( p * Math.PI ) / 2;
-       },
-       _default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
-       fxNow, inProgress,
-       rfxtypes = /^(?:toggle|show|hide)$/,
-       rrun = /queueHooks$/;
-
-function schedule() {
-       if ( inProgress ) {
-               if ( document.hidden === false && window.requestAnimationFrame ) {
-                       window.requestAnimationFrame( schedule );
-               } else {
-                       window.setTimeout( schedule, jQuery.fx.interval );
-               }
-
-               jQuery.fx.tick();
-       }
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       window.setTimeout( function() {
-               fxNow = undefined;
-       } );
-       return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-       var which,
-               i = 0,
-               attrs = { height: type };
-
-       // If we include width, step value is 1 to do all cssExpand values,
-       // otherwise step value is 2 to skip over Left and Right
-       includeWidth = includeWidth ? 1 : 0;
-       for ( ; i < 4; i += 2 - includeWidth ) {
-               which = cssExpand[ i ];
-               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-       }
-
-       if ( includeWidth ) {
-               attrs.opacity = attrs.width = type;
-       }
-
-       return attrs;
-}
-
-function createTween( value, prop, animation ) {
-       var tween,
-               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
-               index = 0,
-               length = collection.length;
-       for ( ; index < length; index++ ) {
-               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
-                       // We're done with this property
-                       return tween;
-               }
-       }
-}
-
-function defaultPrefilter( elem, props, opts ) {
-       var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
-               isBox = "width" in props || "height" in props,
-               anim = this,
-               orig = {},
-               style = elem.style,
-               hidden = elem.nodeType && isHiddenWithinTree( elem ),
-               dataShow = dataPriv.get( elem, "fxshow" );
-
-       // Queue-skipping animations hijack the fx hooks
-       if ( !opts.queue ) {
-               hooks = jQuery._queueHooks( elem, "fx" );
-               if ( hooks.unqueued == null ) {
-                       hooks.unqueued = 0;
-                       oldfire = hooks.empty.fire;
-                       hooks.empty.fire = function() {
-                               if ( !hooks.unqueued ) {
-                                       oldfire();
-                               }
-                       };
-               }
-               hooks.unqueued++;
-
-               anim.always( function() {
-
-                       // Ensure the complete handler is called before this completes
-                       anim.always( function() {
-                               hooks.unqueued--;
-                               if ( !jQuery.queue( elem, "fx" ).length ) {
-                                       hooks.empty.fire();
-                               }
-                       } );
-               } );
-       }
-
-       // Detect show/hide animations
-       for ( prop in props ) {
-               value = props[ prop ];
-               if ( rfxtypes.test( value ) ) {
-                       delete props[ prop ];
-                       toggle = toggle || value === "toggle";
-                       if ( value === ( hidden ? "hide" : "show" ) ) {
-
-                               // Pretend to be hidden if this is a "show" and
-                               // there is still data from a stopped show/hide
-                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
-                                       hidden = true;
-
-                               // Ignore all other no-op show/hide data
-                               } else {
-                                       continue;
-                               }
-                       }
-                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-               }
-       }
-
-       // Bail out if this is a no-op like .hide().hide()
-       propTween = !jQuery.isEmptyObject( props );
-       if ( !propTween && jQuery.isEmptyObject( orig ) ) {
-               return;
-       }
-
-       // Restrict "overflow" and "display" styles during box animations
-       if ( isBox && elem.nodeType === 1 ) {
-
-               // Support: IE <=9 - 11, Edge 12 - 13
-               // Record all 3 overflow attributes because IE does not infer the shorthand
-               // from identically-valued overflowX and overflowY
-               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-               // Identify a display type, preferring old show/hide data over the CSS cascade
-               restoreDisplay = dataShow && dataShow.display;
-               if ( restoreDisplay == null ) {
-                       restoreDisplay = dataPriv.get( elem, "display" );
-               }
-               display = jQuery.css( elem, "display" );
-               if ( display === "none" ) {
-                       if ( restoreDisplay ) {
-                               display = restoreDisplay;
-                       } else {
-
-                               // Get nonempty value(s) by temporarily forcing visibility
-                               showHide( [ elem ], true );
-                               restoreDisplay = elem.style.display || restoreDisplay;
-                               display = jQuery.css( elem, "display" );
-                               showHide( [ elem ] );
-                       }
-               }
-
-               // Animate inline elements as inline-block
-               if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
-                       if ( jQuery.css( elem, "float" ) === "none" ) {
-
-                               // Restore the original display value at the end of pure show/hide animations
-                               if ( !propTween ) {
-                                       anim.done( function() {
-                                               style.display = restoreDisplay;
-                                       } );
-                                       if ( restoreDisplay == null ) {
-                                               display = style.display;
-                                               restoreDisplay = display === "none" ? "" : display;
-                                       }
-                               }
-                               style.display = "inline-block";
-                       }
-               }
-       }
-
-       if ( opts.overflow ) {
-               style.overflow = "hidden";
-               anim.always( function() {
-                       style.overflow = opts.overflow[ 0 ];
-                       style.overflowX = opts.overflow[ 1 ];
-                       style.overflowY = opts.overflow[ 2 ];
-               } );
-       }
-
-       // Implement show/hide animations
-       propTween = false;
-       for ( prop in orig ) {
-
-               // General show/hide setup for this element animation
-               if ( !propTween ) {
-                       if ( dataShow ) {
-                               if ( "hidden" in dataShow ) {
-                                       hidden = dataShow.hidden;
-                               }
-                       } else {
-                               dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
-                       }
-
-                       // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
-                       if ( toggle ) {
-                               dataShow.hidden = !hidden;
-                       }
-
-                       // Show elements before animating them
-                       if ( hidden ) {
-                               showHide( [ elem ], true );
-                       }
-
-                       /* eslint-disable no-loop-func */
-
-                       anim.done( function() {
-
-                       /* eslint-enable no-loop-func */
-
-                               // The final step of a "hide" animation is actually hiding the element
-                               if ( !hidden ) {
-                                       showHide( [ elem ] );
-                               }
-                               dataPriv.remove( elem, "fxshow" );
-                               for ( prop in orig ) {
-                                       jQuery.style( elem, prop, orig[ prop ] );
-                               }
-                       } );
-               }
-
-               // Per-property setup
-               propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-               if ( !( prop in dataShow ) ) {
-                       dataShow[ prop ] = propTween.start;
-                       if ( hidden ) {
-                               propTween.end = propTween.start;
-                               propTween.start = 0;
-                       }
-               }
-       }
-}
-
-function propFilter( props, specialEasing ) {
-       var index, name, easing, value, hooks;
-
-       // camelCase, specialEasing and expand cssHook pass
-       for ( index in props ) {
-               name = jQuery.camelCase( index );
-               easing = specialEasing[ name ];
-               value = props[ index ];
-               if ( Array.isArray( value ) ) {
-                       easing = value[ 1 ];
-                       value = props[ index ] = value[ 0 ];
-               }
-
-               if ( index !== name ) {
-                       props[ name ] = value;
-                       delete props[ index ];
-               }
-
-               hooks = jQuery.cssHooks[ name ];
-               if ( hooks && "expand" in hooks ) {
-                       value = hooks.expand( value );
-                       delete props[ name ];
-
-                       // Not quite $.extend, this won't overwrite existing keys.
-                       // Reusing 'index' because we have the correct "name"
-                       for ( index in value ) {
-                               if ( !( index in props ) ) {
-                                       props[ index ] = value[ index ];
-                                       specialEasing[ index ] = easing;
-                               }
-                       }
-               } else {
-                       specialEasing[ name ] = easing;
-               }
-       }
-}
-
-function Animation( elem, properties, options ) {
-       var result,
-               stopped,
-               index = 0,
-               length = Animation.prefilters.length,
-               deferred = jQuery.Deferred().always( function() {
-
-                       // Don't match elem in the :animated selector
-                       delete tick.elem;
-               } ),
-               tick = function() {
-                       if ( stopped ) {
-                               return false;
-                       }
-                       var currentTime = fxNow || createFxNow(),
-                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
-                               // Support: Android 2.3 only
-                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
-                               temp = remaining / animation.duration || 0,
-                               percent = 1 - temp,
-                               index = 0,
-                               length = animation.tweens.length;
-
-                       for ( ; index < length; index++ ) {
-                               animation.tweens[ index ].run( percent );
-                       }
-
-                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
-                       // If there's more to do, yield
-                       if ( percent < 1 && length ) {
-                               return remaining;
-                       }
-
-                       // If this was an empty animation, synthesize a final progress notification
-                       if ( !length ) {
-                               deferred.notifyWith( elem, [ animation, 1, 0 ] );
-                       }
-
-                       // Resolve the animation and report its conclusion
-                       deferred.resolveWith( elem, [ animation ] );
-                       return false;
-               },
-               animation = deferred.promise( {
-                       elem: elem,
-                       props: jQuery.extend( {}, properties ),
-                       opts: jQuery.extend( true, {
-                               specialEasing: {},
-                               easing: jQuery.easing._default
-                       }, options ),
-                       originalProperties: properties,
-                       originalOptions: options,
-                       startTime: fxNow || createFxNow(),
-                       duration: options.duration,
-                       tweens: [],
-                       createTween: function( prop, end ) {
-                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
-                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
-                               animation.tweens.push( tween );
-                               return tween;
-                       },
-                       stop: function( gotoEnd ) {
-                               var index = 0,
-
-                                       // If we are going to the end, we want to run all the tweens
-                                       // otherwise we skip this part
-                                       length = gotoEnd ? animation.tweens.length : 0;
-                               if ( stopped ) {
-                                       return this;
-                               }
-                               stopped = true;
-                               for ( ; index < length; index++ ) {
-                                       animation.tweens[ index ].run( 1 );
-                               }
-
-                               // Resolve when we played the last frame; otherwise, reject
-                               if ( gotoEnd ) {
-                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
-                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
-                               } else {
-                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
-                               }
-                               return this;
-                       }
-               } ),
-               props = animation.props;
-
-       propFilter( props, animation.opts.specialEasing );
-
-       for ( ; index < length; index++ ) {
-               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
-               if ( result ) {
-                       if ( jQuery.isFunction( result.stop ) ) {
-                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
-                                       jQuery.proxy( result.stop, result );
-                       }
-                       return result;
-               }
-       }
-
-       jQuery.map( props, createTween, animation );
-
-       if ( jQuery.isFunction( animation.opts.start ) ) {
-               animation.opts.start.call( elem, animation );
-       }
-
-       // Attach callbacks from options
-       animation
-               .progress( animation.opts.progress )
-               .done( animation.opts.done, animation.opts.complete )
-               .fail( animation.opts.fail )
-               .always( animation.opts.always );
-
-       jQuery.fx.timer(
-               jQuery.extend( tick, {
-                       elem: elem,
-                       anim: animation,
-                       queue: animation.opts.queue
-               } )
-       );
-
-       return animation;
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
-       tweeners: {
-               "*": [ function( prop, value ) {
-                       var tween = this.createTween( prop, value );
-                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
-                       return tween;
-               } ]
-       },
-
-       tweener: function( props, callback ) {
-               if ( jQuery.isFunction( props ) ) {
-                       callback = props;
-                       props = [ "*" ];
-               } else {
-                       props = props.match( rnothtmlwhite );
-               }
-
-               var prop,
-                       index = 0,
-                       length = props.length;
-
-               for ( ; index < length; index++ ) {
-                       prop = props[ index ];
-                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
-                       Animation.tweeners[ prop ].unshift( callback );
-               }
-       },
-
-       prefilters: [ defaultPrefilter ],
-
-       prefilter: function( callback, prepend ) {
-               if ( prepend ) {
-                       Animation.prefilters.unshift( callback );
-               } else {
-                       Animation.prefilters.push( callback );
-               }
-       }
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
-       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-               complete: fn || !fn && easing ||
-                       jQuery.isFunction( speed ) && speed,
-               duration: speed,
-               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-       };
-
-       // Go to the end state if fx are off
-       if ( jQuery.fx.off ) {
-               opt.duration = 0;
-
-       } else {
-               if ( typeof opt.duration !== "number" ) {
-                       if ( opt.duration in jQuery.fx.speeds ) {
-                               opt.duration = jQuery.fx.speeds[ opt.duration ];
-
-                       } else {
-                               opt.duration = jQuery.fx.speeds._default;
-                       }
-               }
-       }
-
-       // Normalize opt.queue - true/undefined/null -> "fx"
-       if ( opt.queue == null || opt.queue === true ) {
-               opt.queue = "fx";
-       }
-
-       // Queueing
-       opt.old = opt.complete;
-
-       opt.complete = function() {
-               if ( jQuery.isFunction( opt.old ) ) {
-                       opt.old.call( this );
-               }
-
-               if ( opt.queue ) {
-                       jQuery.dequeue( this, opt.queue );
-               }
-       };
-
-       return opt;
-};
-
-jQuery.fn.extend( {
-       fadeTo: function( speed, to, easing, callback ) {
-
-               // Show any hidden elements after setting opacity to 0
-               return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
-                       // Animate to the value specified
-                       .end().animate( { opacity: to }, speed, easing, callback );
-       },
-       animate: function( prop, speed, easing, callback ) {
-               var empty = jQuery.isEmptyObject( prop ),
-                       optall = jQuery.speed( speed, easing, callback ),
-                       doAnimation = function() {
-
-                               // Operate on a copy of prop so per-property easing won't be lost
-                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-                               // Empty animations, or finishing resolves immediately
-                               if ( empty || dataPriv.get( this, "finish" ) ) {
-                                       anim.stop( true );
-                               }
-                       };
-                       doAnimation.finish = doAnimation;
-
-               return empty || optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-       stop: function( type, clearQueue, gotoEnd ) {
-               var stopQueue = function( hooks ) {
-                       var stop = hooks.stop;
-                       delete hooks.stop;
-                       stop( gotoEnd );
-               };
-
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
-
-               return this.each( function() {
-                       var dequeue = true,
-                               index = type != null && type + "queueHooks",
-                               timers = jQuery.timers,
-                               data = dataPriv.get( this );
-
-                       if ( index ) {
-                               if ( data[ index ] && data[ index ].stop ) {
-                                       stopQueue( data[ index ] );
-                               }
-                       } else {
-                               for ( index in data ) {
-                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-                                               stopQueue( data[ index ] );
-                                       }
-                               }
-                       }
-
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this &&
-                                       ( type == null || timers[ index ].queue === type ) ) {
-
-                                       timers[ index ].anim.stop( gotoEnd );
-                                       dequeue = false;
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // Start the next in the queue if the last step wasn't forced.
-                       // Timers currently will call their complete callbacks, which
-                       // will dequeue but only if they were gotoEnd.
-                       if ( dequeue || !gotoEnd ) {
-                               jQuery.dequeue( this, type );
-                       }
-               } );
-       },
-       finish: function( type ) {
-               if ( type !== false ) {
-                       type = type || "fx";
-               }
-               return this.each( function() {
-                       var index,
-                               data = dataPriv.get( this ),
-                               queue = data[ type + "queue" ],
-                               hooks = data[ type + "queueHooks" ],
-                               timers = jQuery.timers,
-                               length = queue ? queue.length : 0;
-
-                       // Enable finishing flag on private data
-                       data.finish = true;
-
-                       // Empty the queue first
-                       jQuery.queue( this, type, [] );
-
-                       if ( hooks && hooks.stop ) {
-                               hooks.stop.call( this, true );
-                       }
-
-                       // Look for any active animations, and finish them
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-                                       timers[ index ].anim.stop( true );
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // Look for any animations in the old queue and finish them
-                       for ( index = 0; index < length; index++ ) {
-                               if ( queue[ index ] && queue[ index ].finish ) {
-                                       queue[ index ].finish.call( this );
-                               }
-                       }
-
-                       // Turn off finishing flag
-                       delete data.finish;
-               } );
-       }
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
-       var cssFn = jQuery.fn[ name ];
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return speed == null || typeof speed === "boolean" ?
-                       cssFn.apply( this, arguments ) :
-                       this.animate( genFx( name, true ), speed, easing, callback );
-       };
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
-       slideDown: genFx( "show" ),
-       slideUp: genFx( "hide" ),
-       slideToggle: genFx( "toggle" ),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
-       };
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
-       var timer,
-               i = 0,
-               timers = jQuery.timers;
-
-       fxNow = jQuery.now();
-
-       for ( ; i < timers.length; i++ ) {
-               timer = timers[ i ];
-
-               // Run the timer and safely remove it when done (allowing for external removal)
-               if ( !timer() && timers[ i ] === timer ) {
-                       timers.splice( i--, 1 );
-               }
-       }
-
-       if ( !timers.length ) {
-               jQuery.fx.stop();
-       }
-       fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-       jQuery.timers.push( timer );
-       jQuery.fx.start();
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
-       if ( inProgress ) {
-               return;
-       }
-
-       inProgress = true;
-       schedule();
-};
-
-jQuery.fx.stop = function() {
-       inProgress = null;
-};
-
-jQuery.fx.speeds = {
-       slow: 600,
-       fast: 200,
-
-       // Default speed
-       _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
-       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-       type = type || "fx";
-
-       return this.queue( type, function( next, hooks ) {
-               var timeout = window.setTimeout( next, time );
-               hooks.stop = function() {
-                       window.clearTimeout( timeout );
-               };
-       } );
-};
-
-
-( function() {
-       var input = document.createElement( "input" ),
-               select = document.createElement( "select" ),
-               opt = select.appendChild( document.createElement( "option" ) );
-
-       input.type = "checkbox";
-
-       // Support: Android <=4.3 only
-       // Default value for a checkbox should be "on"
-       support.checkOn = input.value !== "";
-
-       // Support: IE <=11 only
-       // Must access selectedIndex to make default options select
-       support.optSelected = opt.selected;
-
-       // Support: IE <=11 only
-       // An input loses its value after becoming a radio
-       input = document.createElement( "input" );
-       input.value = "t";
-       input.type = "radio";
-       support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
-       attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
-       attr: function( name, value ) {
-               return access( this, jQuery.attr, name, value, arguments.length > 1 );
-       },
-
-       removeAttr: function( name ) {
-               return this.each( function() {
-                       jQuery.removeAttr( this, name );
-               } );
-       }
-} );
-
-jQuery.extend( {
-       attr: function( elem, name, value ) {
-               var ret, hooks,
-                       nType = elem.nodeType;
-
-               // Don't get/set attributes on text, comment and attribute nodes
-               if ( nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               // Fallback to prop when attributes are not supported
-               if ( typeof elem.getAttribute === "undefined" ) {
-                       return jQuery.prop( elem, name, value );
-               }
-
-               // Attribute hooks are determined by the lowercase version
-               // Grab necessary hook if one is defined
-               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
-                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
-               }
-
-               if ( value !== undefined ) {
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-                               return;
-                       }
-
-                       if ( hooks && "set" in hooks &&
-                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-                               return ret;
-                       }
-
-                       elem.setAttribute( name, value + "" );
-                       return value;
-               }
-
-               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-                       return ret;
-               }
-
-               ret = jQuery.find.attr( elem, name );
-
-               // Non-existent attributes return null, we normalize to undefined
-               return ret == null ? undefined : ret;
-       },
-
-       attrHooks: {
-               type: {
-                       set: function( elem, value ) {
-                               if ( !support.radioValue && value === "radio" &&
-                                       nodeName( elem, "input" ) ) {
-                                       var val = elem.value;
-                                       elem.setAttribute( "type", value );
-                                       if ( val ) {
-                                               elem.value = val;
-                                       }
-                                       return value;
-                               }
-                       }
-               }
-       },
-
-       removeAttr: function( elem, value ) {
-               var name,
-                       i = 0,
-
-                       // Attribute names can contain non-HTML whitespace characters
-                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
-                       attrNames = value && value.match( rnothtmlwhite );
-
-               if ( attrNames && elem.nodeType === 1 ) {
-                       while ( ( name = attrNames[ i++ ] ) ) {
-                               elem.removeAttribute( name );
-                       }
-               }
-       }
-} );
-
-// Hooks for boolean attributes
-boolHook = {
-       set: function( elem, value, name ) {
-               if ( value === false ) {
-
-                       // Remove boolean attributes when set to false
-                       jQuery.removeAttr( elem, name );
-               } else {
-                       elem.setAttribute( name, name );
-               }
-               return name;
-       }
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-       var getter = attrHandle[ name ] || jQuery.find.attr;
-
-       attrHandle[ name ] = function( elem, name, isXML ) {
-               var ret, handle,
-                       lowercaseName = name.toLowerCase();
-
-               if ( !isXML ) {
-
-                       // Avoid an infinite loop by temporarily removing this function from the getter
-                       handle = attrHandle[ lowercaseName ];
-                       attrHandle[ lowercaseName ] = ret;
-                       ret = getter( elem, name, isXML ) != null ?
-                               lowercaseName :
-                               null;
-                       attrHandle[ lowercaseName ] = handle;
-               }
-               return ret;
-       };
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
-       rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
-       prop: function( name, value ) {
-               return access( this, jQuery.prop, name, value, arguments.length > 1 );
-       },
-
-       removeProp: function( name ) {
-               return this.each( function() {
-                       delete this[ jQuery.propFix[ name ] || name ];
-               } );
-       }
-} );
-
-jQuery.extend( {
-       prop: function( elem, name, value ) {
-               var ret, hooks,
-                       nType = elem.nodeType;
-
-               // Don't get/set properties on text, comment and attribute nodes
-               if ( nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
-                       // Fix name and attach hooks
-                       name = jQuery.propFix[ name ] || name;
-                       hooks = jQuery.propHooks[ name ];
-               }
-
-               if ( value !== undefined ) {
-                       if ( hooks && "set" in hooks &&
-                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-                               return ret;
-                       }
-
-                       return ( elem[ name ] = value );
-               }
-
-               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-                       return ret;
-               }
-
-               return elem[ name ];
-       },
-
-       propHooks: {
-               tabIndex: {
-                       get: function( elem ) {
-
-                               // Support: IE <=9 - 11 only
-                               // elem.tabIndex doesn't always return the
-                               // correct value when it hasn't been explicitly set
-                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               // Use proper attribute retrieval(#12072)
-                               var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-                               if ( tabindex ) {
-                                       return parseInt( tabindex, 10 );
-                               }
-
-                               if (
-                                       rfocusable.test( elem.nodeName ) ||
-                                       rclickable.test( elem.nodeName ) &&
-                                       elem.href
-                               ) {
-                                       return 0;
-                               }
-
-                               return -1;
-                       }
-               }
-       },
-
-       propFix: {
-               "for": "htmlFor",
-               "class": "className"
-       }
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-// eslint rule "no-unused-expressions" is disabled for this code
-// since it considers such accessions noop
-if ( !support.optSelected ) {
-       jQuery.propHooks.selected = {
-               get: function( elem ) {
-
-                       /* eslint no-unused-expressions: "off" */
-
-                       var parent = elem.parentNode;
-                       if ( parent && parent.parentNode ) {
-                               parent.parentNode.selectedIndex;
-                       }
-                       return null;
-               },
-               set: function( elem ) {
-
-                       /* eslint no-unused-expressions: "off" */
-
-                       var parent = elem.parentNode;
-                       if ( parent ) {
-                               parent.selectedIndex;
-
-                               if ( parent.parentNode ) {
-                                       parent.parentNode.selectedIndex;
-                               }
-                       }
-               }
-       };
-}
-
-jQuery.each( [
-       "tabIndex",
-       "readOnly",
-       "maxLength",
-       "cellSpacing",
-       "cellPadding",
-       "rowSpan",
-       "colSpan",
-       "useMap",
-       "frameBorder",
-       "contentEditable"
-], function() {
-       jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
-       // Strip and collapse whitespace according to HTML spec
-       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
-       function stripAndCollapse( value ) {
-               var tokens = value.match( rnothtmlwhite ) || [];
-               return tokens.join( " " );
-       }
-
-
-function getClass( elem ) {
-       return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-jQuery.fn.extend( {
-       addClass: function( value ) {
-               var classes, elem, cur, curValue, clazz, j, finalValue,
-                       i = 0;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each( function( j ) {
-                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
-                       } );
-               }
-
-               if ( typeof value === "string" && value ) {
-                       classes = value.match( rnothtmlwhite ) || [];
-
-                       while ( ( elem = this[ i++ ] ) ) {
-                               curValue = getClass( elem );
-                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( ( clazz = classes[ j++ ] ) ) {
-                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-                                                       cur += clazz + " ";
-                                               }
-                                       }
-
-                                       // Only assign if different to avoid unneeded rendering.
-                                       finalValue = stripAndCollapse( cur );
-                                       if ( curValue !== finalValue ) {
-                                               elem.setAttribute( "class", finalValue );
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       removeClass: function( value ) {
-               var classes, elem, cur, curValue, clazz, j, finalValue,
-                       i = 0;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each( function( j ) {
-                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
-                       } );
-               }
-
-               if ( !arguments.length ) {
-                       return this.attr( "class", "" );
-               }
-
-               if ( typeof value === "string" && value ) {
-                       classes = value.match( rnothtmlwhite ) || [];
-
-                       while ( ( elem = this[ i++ ] ) ) {
-                               curValue = getClass( elem );
-
-                               // This expression is here for better compressibility (see addClass)
-                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( ( clazz = classes[ j++ ] ) ) {
-
-                                               // Remove *all* instances
-                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
-                                                       cur = cur.replace( " " + clazz + " ", " " );
-                                               }
-                                       }
-
-                                       // Only assign if different to avoid unneeded rendering.
-                                       finalValue = stripAndCollapse( cur );
-                                       if ( curValue !== finalValue ) {
-                                               elem.setAttribute( "class", finalValue );
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value;
-
-               if ( typeof stateVal === "boolean" && type === "string" ) {
-                       return stateVal ? this.addClass( value ) : this.removeClass( value );
-               }
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each( function( i ) {
-                               jQuery( this ).toggleClass(
-                                       value.call( this, i, getClass( this ), stateVal ),
-                                       stateVal
-                               );
-                       } );
-               }
-
-               return this.each( function() {
-                       var className, i, self, classNames;
-
-                       if ( type === "string" ) {
-
-                               // Toggle individual class names
-                               i = 0;
-                               self = jQuery( this );
-                               classNames = value.match( rnothtmlwhite ) || [];
-
-                               while ( ( className = classNames[ i++ ] ) ) {
-
-                                       // Check each className given, space separated list
-                                       if ( self.hasClass( className ) ) {
-                                               self.removeClass( className );
-                                       } else {
-                                               self.addClass( className );
-                                       }
-                               }
-
-                       // Toggle whole class name
-                       } else if ( value === undefined || type === "boolean" ) {
-                               className = getClass( this );
-                               if ( className ) {
-
-                                       // Store className if set
-                                       dataPriv.set( this, "__className__", className );
-                               }
-
-                               // If the element has a class name or if we're passed `false`,
-                               // then remove the whole classname (if there was one, the above saved it).
-                               // Otherwise bring back whatever was previously saved (if anything),
-                               // falling back to the empty string if nothing was stored.
-                               if ( this.setAttribute ) {
-                                       this.setAttribute( "class",
-                                               className || value === false ?
-                                               "" :
-                                               dataPriv.get( this, "__className__" ) || ""
-                                       );
-                               }
-                       }
-               } );
-       },
-
-       hasClass: function( selector ) {
-               var className, elem,
-                       i = 0;
-
-               className = " " + selector + " ";
-               while ( ( elem = this[ i++ ] ) ) {
-                       if ( elem.nodeType === 1 &&
-                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
-                                       return true;
-                       }
-               }
-
-               return false;
-       }
-} );
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
-       val: function( value ) {
-               var hooks, ret, isFunction,
-                       elem = this[ 0 ];
-
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.type ] ||
-                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-                               if ( hooks &&
-                                       "get" in hooks &&
-                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
-                               ) {
-                                       return ret;
-                               }
-
-                               ret = elem.value;
-
-                               // Handle most common string cases
-                               if ( typeof ret === "string" ) {
-                                       return ret.replace( rreturn, "" );
-                               }
-
-                               // Handle cases where value is null/undef or number
-                               return ret == null ? "" : ret;
-                       }
-
-                       return;
-               }
-
-               isFunction = jQuery.isFunction( value );
-
-               return this.each( function( i ) {
-                       var val;
-
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
-
-                       if ( isFunction ) {
-                               val = value.call( this, i, jQuery( this ).val() );
-                       } else {
-                               val = value;
-                       }
-
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-
-                       } else if ( Array.isArray( val ) ) {
-                               val = jQuery.map( val, function( value ) {
-                                       return value == null ? "" : value + "";
-                               } );
-                       }
-
-                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
-                       }
-               } );
-       }
-} );
-
-jQuery.extend( {
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-
-                               var val = jQuery.find.attr( elem, "value" );
-                               return val != null ?
-                                       val :
-
-                                       // Support: IE <=10 - 11 only
-                                       // option.text throws exceptions (#14686, #14858)
-                                       // Strip and collapse whitespace
-                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
-                                       stripAndCollapse( jQuery.text( elem ) );
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, option, i,
-                                       options = elem.options,
-                                       index = elem.selectedIndex,
-                                       one = elem.type === "select-one",
-                                       values = one ? null : [],
-                                       max = one ? index + 1 : options.length;
-
-                               if ( index < 0 ) {
-                                       i = max;
-
-                               } else {
-                                       i = one ? index : 0;
-                               }
-
-                               // Loop through all the selected options
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
-
-                                       // Support: IE <=9 only
-                                       // IE8-9 doesn't update selected after form reset (#2551)
-                                       if ( ( option.selected || i === index ) &&
-
-                                                       // Don't return options that are disabled or in a disabled optgroup
-                                                       !option.disabled &&
-                                                       ( !option.parentNode.disabled ||
-                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
-
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
-
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
-                                               }
-
-                                               // Multi-Selects return an array
-                                               values.push( value );
-                                       }
-                               }
-
-                               return values;
-                       },
-
-                       set: function( elem, value ) {
-                               var optionSet, option,
-                                       options = elem.options,
-                                       values = jQuery.makeArray( value ),
-                                       i = options.length;
-
-                               while ( i-- ) {
-                                       option = options[ i ];
-
-                                       /* eslint-disable no-cond-assign */
-
-                                       if ( option.selected =
-                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
-                                       ) {
-                                               optionSet = true;
-                                       }
-
-                                       /* eslint-enable no-cond-assign */
-                               }
-
-                               // Force browsers to behave consistently when non-matching value is set
-                               if ( !optionSet ) {
-                                       elem.selectedIndex = -1;
-                               }
-                               return values;
-                       }
-               }
-       }
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = {
-               set: function( elem, value ) {
-                       if ( Array.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
-                       }
-               }
-       };
-       if ( !support.checkOn ) {
-               jQuery.valHooks[ this ].get = function( elem ) {
-                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
-               };
-       }
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
-
-jQuery.extend( jQuery.event, {
-
-       trigger: function( event, data, elem, onlyHandlers ) {
-
-               var i, cur, tmp, bubbleType, ontype, handle, special,
-                       eventPath = [ elem || document ],
-                       type = hasOwn.call( event, "type" ) ? event.type : event,
-                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
-               cur = tmp = elem = elem || document;
-
-               // Don't do events on text and comment nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
-
-               // focus/blur morphs to focusin/out; ensure we're not firing them right now
-               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                       return;
-               }
-
-               if ( type.indexOf( "." ) > -1 ) {
-
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split( "." );
-                       type = namespaces.shift();
-                       namespaces.sort();
-               }
-               ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
-               // Caller can pass in a jQuery.Event object, Object, or just an event type string
-               event = event[ jQuery.expando ] ?
-                       event :
-                       new jQuery.Event( type, typeof event === "object" && event );
-
-               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-               event.isTrigger = onlyHandlers ? 2 : 3;
-               event.namespace = namespaces.join( "." );
-               event.rnamespace = event.namespace ?
-                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
-                       null;
-
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
-               }
-
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data == null ?
-                       [ event ] :
-                       jQuery.makeArray( data, [ event ] );
-
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
-               }
-
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                       bubbleType = special.delegateType || type;
-                       if ( !rfocusMorph.test( bubbleType + type ) ) {
-                               cur = cur.parentNode;
-                       }
-                       for ( ; cur; cur = cur.parentNode ) {
-                               eventPath.push( cur );
-                               tmp = cur;
-                       }
-
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( tmp === ( elem.ownerDocument || document ) ) {
-                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-                       }
-               }
-
-               // Fire handlers on the event path
-               i = 0;
-               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-
-                       event.type = i > 1 ?
-                               bubbleType :
-                               special.bindType || type;
-
-                       // jQuery handler
-                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
-                               dataPriv.get( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-
-                       // Native handler
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && handle.apply && acceptData( cur ) ) {
-                               event.result = handle.apply( cur, data );
-                               if ( event.result === false ) {
-                                       event.preventDefault();
-                               }
-                       }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-                       if ( ( !special._default ||
-                               special._default.apply( eventPath.pop(), data ) === false ) &&
-                               acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name as the event.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
-
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       tmp = elem[ ontype ];
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = null;
-                                       }
-
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       elem[ type ]();
-                                       jQuery.event.triggered = undefined;
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = tmp;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       // Piggyback on a donor event to simulate a different one
-       // Used only for `focus(in | out)` events
-       simulate: function( type, elem, event ) {
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       {
-                               type: type,
-                               isSimulated: true
-                       }
-               );
-
-               jQuery.event.trigger( e, null, elem );
-       }
-
-} );
-
-jQuery.fn.extend( {
-
-       trigger: function( type, data ) {
-               return this.each( function() {
-                       jQuery.event.trigger( type, data, this );
-               } );
-       },
-       triggerHandler: function( type, data ) {
-               var elem = this[ 0 ];
-               if ( elem ) {
-                       return jQuery.event.trigger( type, data, elem, true );
-               }
-       }
-} );
-
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
-       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
-       function( i, name ) {
-
-       // Handle event binding
-       jQuery.fn[ name ] = function( data, fn ) {
-               return arguments.length > 0 ?
-                       this.on( name, null, data, fn ) :
-                       this.trigger( name );
-       };
-} );
-
-jQuery.fn.extend( {
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       }
-} );
-
-
-
-
-support.focusin = "onfocusin" in window;
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
-       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-               // Attach a single capturing handler on the document while someone wants focusin/focusout
-               var handler = function( event ) {
-                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
-               };
-
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = dataPriv.access( doc, fix );
-
-                               if ( !attaches ) {
-                                       doc.addEventListener( orig, handler, true );
-                               }
-                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
-                       },
-                       teardown: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = dataPriv.access( doc, fix ) - 1;
-
-                               if ( !attaches ) {
-                                       doc.removeEventListener( orig, handler, true );
-                                       dataPriv.remove( doc, fix );
-
-                               } else {
-                                       dataPriv.access( doc, fix, attaches );
-                               }
-                       }
-               };
-       } );
-}
-var location = window.location;
-
-var nonce = jQuery.now();
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-       var xml;
-       if ( !data || typeof data !== "string" ) {
-               return null;
-       }
-
-       // Support: IE 9 - 11 only
-       // IE throws on parseFromString with invalid input.
-       try {
-               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
-       } catch ( e ) {
-               xml = undefined;
-       }
-
-       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
-               jQuery.error( "Invalid XML: " + data );
-       }
-       return xml;
-};
-
-
-var
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-       rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-       var name;
-
-       if ( Array.isArray( obj ) ) {
-
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-
-                               // Item is non-scalar (array or object), encode its numeric index.
-                               buildParams(
-                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
-                                       v,
-                                       traditional,
-                                       add
-                               );
-                       }
-               } );
-
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-
-               // Serialize object item.
-               for ( name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-               }
-
-       } else {
-
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-       var prefix,
-               s = [],
-               add = function( key, valueOrFunction ) {
-
-                       // If value is a function, invoke it and use its return value
-                       var value = jQuery.isFunction( valueOrFunction ) ?
-                               valueOrFunction() :
-                               valueOrFunction;
-
-                       s[ s.length ] = encodeURIComponent( key ) + "=" +
-                               encodeURIComponent( value == null ? "" : value );
-               };
-
-       // If an array was passed in, assume that it is an array of form elements.
-       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
-               // Serialize the form elements
-               jQuery.each( a, function() {
-                       add( this.name, this.value );
-               } );
-
-       } else {
-
-               // If traditional, encode the "old" way (the way 1.3.2 or older
-               // did it), otherwise encode params recursively.
-               for ( prefix in a ) {
-                       buildParams( prefix, a[ prefix ], traditional, add );
-               }
-       }
-
-       // Return the resulting serialization
-       return s.join( "&" );
-};
-
-jQuery.fn.extend( {
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-       serializeArray: function() {
-               return this.map( function() {
-
-                       // Can add propHook for "elements" to filter or add form elements
-                       var elements = jQuery.prop( this, "elements" );
-                       return elements ? jQuery.makeArray( elements ) : this;
-               } )
-               .filter( function() {
-                       var type = this.type;
-
-                       // Use .is( ":disabled" ) so that fieldset[disabled] works
-                       return this.name && !jQuery( this ).is( ":disabled" ) &&
-                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-                               ( this.checked || !rcheckableType.test( type ) );
-               } )
-               .map( function( i, elem ) {
-                       var val = jQuery( this ).val();
-
-                       if ( val == null ) {
-                               return null;
-                       }
-
-                       if ( Array.isArray( val ) ) {
-                               return jQuery.map( val, function( val ) {
-                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                               } );
-                       }
-
-                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               } ).get();
-       }
-} );
-
-
-var
-       r20 = /%20/g,
-       rhash = /#.*$/,
-       rantiCache = /([?&])_=[^&]*/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
-       // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-       rnoContent = /^(?:GET|HEAD)$/,
-       rprotocol = /^\/\//,
-
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-       prefilters = {},
-
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-       transports = {},
-
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = "*/".concat( "*" ),
-
-       // Anchor tag for parsing the document origin
-       originAnchor = document.createElement( "a" );
-       originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-       // dataTypeExpression is optional and defaults to "*"
-       return function( dataTypeExpression, func ) {
-
-               if ( typeof dataTypeExpression !== "string" ) {
-                       func = dataTypeExpression;
-                       dataTypeExpression = "*";
-               }
-
-               var dataType,
-                       i = 0,
-                       dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
-
-               if ( jQuery.isFunction( func ) ) {
-
-                       // For each dataType in the dataTypeExpression
-                       while ( ( dataType = dataTypes[ i++ ] ) ) {
-
-                               // Prepend if requested
-                               if ( dataType[ 0 ] === "+" ) {
-                                       dataType = dataType.slice( 1 ) || "*";
-                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
-                               // Otherwise append
-                               } else {
-                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
-                               }
-                       }
-               }
-       };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-       var inspected = {},
-               seekingTransport = ( structure === transports );
-
-       function inspect( dataType ) {
-               var selected;
-               inspected[ dataType ] = true;
-               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-                       if ( typeof dataTypeOrTransport === "string" &&
-                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
-                               options.dataTypes.unshift( dataTypeOrTransport );
-                               inspect( dataTypeOrTransport );
-                               return false;
-                       } else if ( seekingTransport ) {
-                               return !( selected = dataTypeOrTransport );
-                       }
-               } );
-               return selected;
-       }
-
-       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-       var key, deep,
-               flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-       for ( key in src ) {
-               if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-               }
-       }
-       if ( deep ) {
-               jQuery.extend( true, target, deep );
-       }
-
-       return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-       var ct, type, finalDataType, firstDataType,
-               contents = s.contents,
-               dataTypes = s.dataTypes;
-
-       // Remove auto dataType and get content-type in the process
-       while ( dataTypes[ 0 ] === "*" ) {
-               dataTypes.shift();
-               if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
-               }
-       }
-
-       // Check if we're dealing with a known content-type
-       if ( ct ) {
-               for ( type in contents ) {
-                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                               dataTypes.unshift( type );
-                               break;
-                       }
-               }
-       }
-
-       // Check to see if we have a response for the expected dataType
-       if ( dataTypes[ 0 ] in responses ) {
-               finalDataType = dataTypes[ 0 ];
-       } else {
-
-               // Try convertible dataTypes
-               for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
-                               finalDataType = type;
-                               break;
-                       }
-                       if ( !firstDataType ) {
-                               firstDataType = type;
-                       }
-               }
-
-               // Or just use first one
-               finalDataType = finalDataType || firstDataType;
-       }
-
-       // If we found a dataType
-       // We add the dataType to the list if needed
-       // and return the corresponding response
-       if ( finalDataType ) {
-               if ( finalDataType !== dataTypes[ 0 ] ) {
-                       dataTypes.unshift( finalDataType );
-               }
-               return responses[ finalDataType ];
-       }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-       var conv2, current, conv, tmp, prev,
-               converters = {},
-
-               // Work with a copy of dataTypes in case we need to modify it for conversion
-               dataTypes = s.dataTypes.slice();
-
-       // Create converters map with lowercased keys
-       if ( dataTypes[ 1 ] ) {
-               for ( conv in s.converters ) {
-                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
-               }
-       }
-
-       current = dataTypes.shift();
-
-       // Convert to each sequential dataType
-       while ( current ) {
-
-               if ( s.responseFields[ current ] ) {
-                       jqXHR[ s.responseFields[ current ] ] = response;
-               }
-
-               // Apply the dataFilter if provided
-               if ( !prev && isSuccess && s.dataFilter ) {
-                       response = s.dataFilter( response, s.dataType );
-               }
-
-               prev = current;
-               current = dataTypes.shift();
-
-               if ( current ) {
-
-                       // There's only work to do if current dataType is non-auto
-                       if ( current === "*" ) {
-
-                               current = prev;
-
-                       // Convert response if prev dataType is non-auto and differs from current
-                       } else if ( prev !== "*" && prev !== current ) {
-
-                               // Seek a direct converter
-                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-                               // If none found, seek a pair
-                               if ( !conv ) {
-                                       for ( conv2 in converters ) {
-
-                                               // If conv2 outputs current
-                                               tmp = conv2.split( " " );
-                                               if ( tmp[ 1 ] === current ) {
-
-                                                       // If prev can be converted to accepted input
-                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
-                                                               converters[ "* " + tmp[ 0 ] ];
-                                                       if ( conv ) {
-
-                                                               // Condense equivalence converters
-                                                               if ( conv === true ) {
-                                                                       conv = converters[ conv2 ];
-
-                                                               // Otherwise, insert the intermediate dataType
-                                                               } else if ( converters[ conv2 ] !== true ) {
-                                                                       current = tmp[ 0 ];
-                                                                       dataTypes.unshift( tmp[ 1 ] );
-                                                               }
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Apply converter (if not an equivalence)
-                               if ( conv !== true ) {
-
-                                       // Unless errors are allowed to bubble, catch and return them
-                                       if ( conv && s.throws ) {
-                                               response = conv( response );
-                                       } else {
-                                               try {
-                                                       response = conv( response );
-                                               } catch ( e ) {
-                                                       return {
-                                                               state: "parsererror",
-                                                               error: conv ? e : "No conversion from " + prev + " to " + current
-                                                       };
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {},
-
-       ajaxSettings: {
-               url: location.href,
-               type: "GET",
-               isLocal: rlocalProtocol.test( location.protocol ),
-               global: true,
-               processData: true,
-               async: true,
-               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
-               /*
-               timeout: 0,
-               data: null,
-               dataType: null,
-               username: null,
-               password: null,
-               cache: null,
-               throws: false,
-               traditional: false,
-               headers: {},
-               */
-
-               accepts: {
-                       "*": allTypes,
-                       text: "text/plain",
-                       html: "text/html",
-                       xml: "application/xml, text/xml",
-                       json: "application/json, text/javascript"
-               },
-
-               contents: {
-                       xml: /\bxml\b/,
-                       html: /\bhtml/,
-                       json: /\bjson\b/
-               },
-
-               responseFields: {
-                       xml: "responseXML",
-                       text: "responseText",
-                       json: "responseJSON"
-               },
-
-               // Data converters
-               // Keys separate source (or catchall "*") and destination types with a single space
-               converters: {
-
-                       // Convert anything to text
-                       "* text": String,
-
-                       // Text to html (true = no transformation)
-                       "text html": true,
-
-                       // Evaluate text as a json expression
-                       "text json": JSON.parse,
-
-                       // Parse text as xml
-                       "text xml": jQuery.parseXML
-               },
-
-               // For options that shouldn't be deep extended:
-               // you can add your own custom options here if
-               // and when you create one that shouldn't be
-               // deep extended (see ajaxExtend)
-               flatOptions: {
-                       url: true,
-                       context: true
-               }
-       },
-
-       // Creates a full fledged settings object into target
-       // with both ajaxSettings and settings fields.
-       // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function( target, settings ) {
-               return settings ?
-
-                       // Building a settings object
-                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-                       // Extending ajaxSettings
-                       ajaxExtend( jQuery.ajaxSettings, target );
-       },
-
-       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-       ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-       // Main method
-       ajax: function( url, options ) {
-
-               // If url is an object, simulate pre-1.5 signature
-               if ( typeof url === "object" ) {
-                       options = url;
-                       url = undefined;
-               }
-
-               // Force options to be an object
-               options = options || {};
-
-               var transport,
-
-                       // URL without anti-cache param
-                       cacheURL,
-
-                       // Response headers
-                       responseHeadersString,
-                       responseHeaders,
-
-                       // timeout handle
-                       timeoutTimer,
-
-                       // Url cleanup var
-                       urlAnchor,
-
-                       // Request state (becomes false upon send and true upon completion)
-                       completed,
-
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-
-                       // Loop variable
-                       i,
-
-                       // uncached part of the url
-                       uncached,
-
-                       // Create the final options object
-                       s = jQuery.ajaxSetup( {}, options ),
-
-                       // Callbacks context
-                       callbackContext = s.context || s,
-
-                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
-                       globalEventContext = s.context &&
-                               ( callbackContext.nodeType || callbackContext.jquery ) ?
-                                       jQuery( callbackContext ) :
-                                       jQuery.event,
-
-                       // Deferreds
-                       deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks( "once memory" ),
-
-                       // Status-dependent callbacks
-                       statusCode = s.statusCode || {},
-
-                       // Headers (they are sent all at once)
-                       requestHeaders = {},
-                       requestHeadersNames = {},
-
-                       // Default abort message
-                       strAbort = "canceled",
-
-                       // Fake xhr
-                       jqXHR = {
-                               readyState: 0,
-
-                               // Builds headers hashtable if needed
-                               getResponseHeader: function( key ) {
-                                       var match;
-                                       if ( completed ) {
-                                               if ( !responseHeaders ) {
-                                                       responseHeaders = {};
-                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
-                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
-                                                       }
-                                               }
-                                               match = responseHeaders[ key.toLowerCase() ];
-                                       }
-                                       return match == null ? null : match;
-                               },
-
-                               // Raw string
-                               getAllResponseHeaders: function() {
-                                       return completed ? responseHeadersString : null;
-                               },
-
-                               // Caches the header
-                               setRequestHeader: function( name, value ) {
-                                       if ( completed == null ) {
-                                               name = requestHeadersNames[ name.toLowerCase() ] =
-                                                       requestHeadersNames[ name.toLowerCase() ] || name;
-                                               requestHeaders[ name ] = value;
-                                       }
-                                       return this;
-                               },
-
-                               // Overrides response content-type header
-                               overrideMimeType: function( type ) {
-                                       if ( completed == null ) {
-                                               s.mimeType = type;
-                                       }
-                                       return this;
-                               },
-
-                               // Status-dependent callbacks
-                               statusCode: function( map ) {
-                                       var code;
-                                       if ( map ) {
-                                               if ( completed ) {
-
-                                                       // Execute the appropriate callbacks
-                                                       jqXHR.always( map[ jqXHR.status ] );
-                                               } else {
-
-                                                       // Lazy-add the new callbacks in a way that preserves old ones
-                                                       for ( code in map ) {
-                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-                                                       }
-                                               }
-                                       }
-                                       return this;
-                               },
-
-                               // Cancel the request
-                               abort: function( statusText ) {
-                                       var finalText = statusText || strAbort;
-                                       if ( transport ) {
-                                               transport.abort( finalText );
-                                       }
-                                       done( 0, finalText );
-                                       return this;
-                               }
-                       };
-
-               // Attach deferreds
-               deferred.promise( jqXHR );
-
-               // Add protocol if not provided (prefilters might expect it)
-               // Handle falsy url in the settings object (#10093: consistency with old signature)
-               // We also use the url parameter if available
-               s.url = ( ( url || s.url || location.href ) + "" )
-                       .replace( rprotocol, location.protocol + "//" );
-
-               // Alias method option to type as per ticket #12004
-               s.type = options.method || options.type || s.method || s.type;
-
-               // Extract dataTypes list
-               s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
-
-               // A cross-domain request is in order when the origin doesn't match the current origin.
-               if ( s.crossDomain == null ) {
-                       urlAnchor = document.createElement( "a" );
-
-                       // Support: IE <=8 - 11, Edge 12 - 13
-                       // IE throws exception on accessing the href property if url is malformed,
-                       // e.g. http://example.com:80x/
-                       try {
-                               urlAnchor.href = s.url;
-
-                               // Support: IE <=8 - 11 only
-                               // Anchor's host property isn't correctly set when s.url is relative
-                               urlAnchor.href = urlAnchor.href;
-                               s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
-                                       urlAnchor.protocol + "//" + urlAnchor.host;
-                       } catch ( e ) {
-
-                               // If there is an error parsing the URL, assume it is crossDomain,
-                               // it can be rejected by the transport if it is invalid
-                               s.crossDomain = true;
-                       }
-               }
-
-               // Convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
-
-               // Apply prefilters
-               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-               // If request was aborted inside a prefilter, stop there
-               if ( completed ) {
-                       return jqXHR;
-               }
-
-               // We can fire global events as of now if asked to
-               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
-               fireGlobals = jQuery.event && s.global;
-
-               // Watch for a new set of requests
-               if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger( "ajaxStart" );
-               }
-
-               // Uppercase the type
-               s.type = s.type.toUpperCase();
-
-               // Determine if request has content
-               s.hasContent = !rnoContent.test( s.type );
-
-               // Save the URL in case we're toying with the If-Modified-Since
-               // and/or If-None-Match header later on
-               // Remove hash to simplify url manipulation
-               cacheURL = s.url.replace( rhash, "" );
-
-               // More options handling for requests with no content
-               if ( !s.hasContent ) {
-
-                       // Remember the hash so we can put it back
-                       uncached = s.url.slice( cacheURL.length );
-
-                       // If data is available, append data to url
-                       if ( s.data ) {
-                               cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
-                               // #9682: remove data so that it's not used in an eventual retry
-                               delete s.data;
-                       }
-
-                       // Add or update anti-cache param if needed
-                       if ( s.cache === false ) {
-                               cacheURL = cacheURL.replace( rantiCache, "$1" );
-                               uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
-                       }
-
-                       // Put hash and anti-cache on the URL that will be requested (gh-1732)
-                       s.url = cacheURL + uncached;
-
-               // Change '%20' to '+' if this is encoded form body content (gh-2658)
-               } else if ( s.data && s.processData &&
-                       ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
-                       s.data = s.data.replace( r20, "+" );
-               }
-
-               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-               if ( s.ifModified ) {
-                       if ( jQuery.lastModified[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-                       }
-                       if ( jQuery.etag[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-                       }
-               }
-
-               // Set the correct header, if data is being sent
-               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
-               }
-
-               // Set the Accepts header for the server, depending on the dataType
-               jqXHR.setRequestHeader(
-                       "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
-                               s.accepts[ s.dataTypes[ 0 ] ] +
-                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                               s.accepts[ "*" ]
-               );
-
-               // Check for headers option
-               for ( i in s.headers ) {
-                       jqXHR.setRequestHeader( i, s.headers[ i ] );
-               }
-
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend &&
-                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
-                       // Abort if not done already and return
-                       return jqXHR.abort();
-               }
-
-               // Aborting is no longer a cancellation
-               strAbort = "abort";
-
-               // Install callbacks on deferreds
-               completeDeferred.add( s.complete );
-               jqXHR.done( s.success );
-               jqXHR.fail( s.error );
-
-               // Get transport
-               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-               // If no transport, we auto-abort
-               if ( !transport ) {
-                       done( -1, "No Transport" );
-               } else {
-                       jqXHR.readyState = 1;
-
-                       // Send global event
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                       }
-
-                       // If request was aborted inside ajaxSend, stop there
-                       if ( completed ) {
-                               return jqXHR;
-                       }
-
-                       // Timeout
-                       if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = window.setTimeout( function() {
-                                       jqXHR.abort( "timeout" );
-                               }, s.timeout );
-                       }
-
-                       try {
-                               completed = false;
-                               transport.send( requestHeaders, done );
-                       } catch ( e ) {
-
-                               // Rethrow post-completion exceptions
-                               if ( completed ) {
-                                       throw e;
-                               }
-
-                               // Propagate others as results
-                               done( -1, e );
-                       }
-               }
-
-               // Callback for when everything is done
-               function done( status, nativeStatusText, responses, headers ) {
-                       var isSuccess, success, error, response, modified,
-                               statusText = nativeStatusText;
-
-                       // Ignore repeat invocations
-                       if ( completed ) {
-                               return;
-                       }
-
-                       completed = true;
-
-                       // Clear timeout if it exists
-                       if ( timeoutTimer ) {
-                               window.clearTimeout( timeoutTimer );
-                       }
-
-                       // Dereference transport for early garbage collection
-                       // (no matter how long the jqXHR object will be used)
-                       transport = undefined;
-
-                       // Cache response headers
-                       responseHeadersString = headers || "";
-
-                       // Set readyState
-                       jqXHR.readyState = status > 0 ? 4 : 0;
-
-                       // Determine if successful
-                       isSuccess = status >= 200 && status < 300 || status === 304;
-
-                       // Get response data
-                       if ( responses ) {
-                               response = ajaxHandleResponses( s, jqXHR, responses );
-                       }
-
-                       // Convert no matter what (that way responseXXX fields are always set)
-                       response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-                       // If successful, handle type chaining
-                       if ( isSuccess ) {
-
-                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                               if ( s.ifModified ) {
-                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
-                                       if ( modified ) {
-                                               jQuery.lastModified[ cacheURL ] = modified;
-                                       }
-                                       modified = jqXHR.getResponseHeader( "etag" );
-                                       if ( modified ) {
-                                               jQuery.etag[ cacheURL ] = modified;
-                                       }
-                               }
-
-                               // if no content
-                               if ( status === 204 || s.type === "HEAD" ) {
-                                       statusText = "nocontent";
-
-                               // if not modified
-                               } else if ( status === 304 ) {
-                                       statusText = "notmodified";
-
-                               // If we have data, let's convert it
-                               } else {
-                                       statusText = response.state;
-                                       success = response.data;
-                                       error = response.error;
-                                       isSuccess = !error;
-                               }
-                       } else {
-
-                               // Extract error from statusText and normalize for non-aborts
-                               error = statusText;
-                               if ( status || !statusText ) {
-                                       statusText = "error";
-                                       if ( status < 0 ) {
-                                               status = 0;
-                                       }
-                               }
-                       }
-
-                       // Set data for the fake xhr object
-                       jqXHR.status = status;
-                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-                       // Success/Error
-                       if ( isSuccess ) {
-                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                       } else {
-                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                       }
-
-                       // Status-dependent callbacks
-                       jqXHR.statusCode( statusCode );
-                       statusCode = undefined;
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-                                       [ jqXHR, s, isSuccess ? success : error ] );
-                       }
-
-                       // Complete
-                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
-                               // Handle the global AJAX counter
-                               if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger( "ajaxStop" );
-                               }
-                       }
-               }
-
-               return jqXHR;
-       },
-
-       getJSON: function( url, data, callback ) {
-               return jQuery.get( url, data, callback, "json" );
-       },
-
-       getScript: function( url, callback ) {
-               return jQuery.get( url, undefined, callback, "script" );
-       }
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-       jQuery[ method ] = function( url, data, callback, type ) {
-
-               // Shift arguments if data argument was omitted
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = undefined;
-               }
-
-               // The url can be an options object (which then must have .url)
-               return jQuery.ajax( jQuery.extend( {
-                       url: url,
-                       type: method,
-                       dataType: type,
-                       data: data,
-                       success: callback
-               }, jQuery.isPlainObject( url ) && url ) );
-       };
-} );
-
-
-jQuery._evalUrl = function( url ) {
-       return jQuery.ajax( {
-               url: url,
-
-               // Make this explicit, since user can override this through ajaxSetup (#11264)
-               type: "GET",
-               dataType: "script",
-               cache: true,
-               async: false,
-               global: false,
-               "throws": true
-       } );
-};
-
-
-jQuery.fn.extend( {
-       wrapAll: function( html ) {
-               var wrap;
-
-               if ( this[ 0 ] ) {
-                       if ( jQuery.isFunction( html ) ) {
-                               html = html.call( this[ 0 ] );
-                       }
-
-                       // The elements to wrap the target around
-                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
-                       if ( this[ 0 ].parentNode ) {
-                               wrap.insertBefore( this[ 0 ] );
-                       }
-
-                       wrap.map( function() {
-                               var elem = this;
-
-                               while ( elem.firstElementChild ) {
-                                       elem = elem.firstElementChild;
-                               }
-
-                               return elem;
-                       } ).append( this );
-               }
-
-               return this;
-       },
-
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each( function( i ) {
-                               jQuery( this ).wrapInner( html.call( this, i ) );
-                       } );
-               }
-
-               return this.each( function() {
-                       var self = jQuery( this ),
-                               contents = self.contents();
-
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
-
-                       } else {
-                               self.append( html );
-                       }
-               } );
-       },
-
-       wrap: function( html ) {
-               var isFunction = jQuery.isFunction( html );
-
-               return this.each( function( i ) {
-                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
-               } );
-       },
-
-       unwrap: function( selector ) {
-               this.parent( selector ).not( "body" ).each( function() {
-                       jQuery( this ).replaceWith( this.childNodes );
-               } );
-               return this;
-       }
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
-       return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
-       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
-               // File protocol always yields status code 0, assume 200
-               0: 200,
-
-               // Support: IE <=9 only
-               // #1450: sometimes IE returns 1223 when it should be 204
-               1223: 204
-       },
-       xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
-       var callback, errorCallback;
-
-       // Cross domain only allowed if supported through XMLHttpRequest
-       if ( support.cors || xhrSupported && !options.crossDomain ) {
-               return {
-                       send: function( headers, complete ) {
-                               var i,
-                                       xhr = options.xhr();
-
-                               xhr.open(
-                                       options.type,
-                                       options.url,
-                                       options.async,
-                                       options.username,
-                                       options.password
-                               );
-
-                               // Apply custom fields if provided
-                               if ( options.xhrFields ) {
-                                       for ( i in options.xhrFields ) {
-                                               xhr[ i ] = options.xhrFields[ i ];
-                                       }
-                               }
-
-                               // Override mime type if needed
-                               if ( options.mimeType && xhr.overrideMimeType ) {
-                                       xhr.overrideMimeType( options.mimeType );
-                               }
-
-                               // X-Requested-With header
-                               // For cross-domain requests, seeing as conditions for a preflight are
-                               // akin to a jigsaw puzzle, we simply never set it to be sure.
-                               // (it can always be set on a per-request basis or even using ajaxSetup)
-                               // For same-domain requests, won't change header if already provided.
-                               if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
-                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
-                               }
-
-                               // Set headers
-                               for ( i in headers ) {
-                                       xhr.setRequestHeader( i, headers[ i ] );
-                               }
-
-                               // Callback
-                               callback = function( type ) {
-                                       return function() {
-                                               if ( callback ) {
-                                                       callback = errorCallback = xhr.onload =
-                                                               xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
-
-                                                       if ( type === "abort" ) {
-                                                               xhr.abort();
-                                                       } else if ( type === "error" ) {
-
-                                                               // Support: IE <=9 only
-                                                               // On a manual native abort, IE9 throws
-                                                               // errors on any property access that is not readyState
-                                                               if ( typeof xhr.status !== "number" ) {
-                                                                       complete( 0, "error" );
-                                                               } else {
-                                                                       complete(
-
-                                                                               // File: protocol always yields status 0; see #8605, #14207
-                                                                               xhr.status,
-                                                                               xhr.statusText
-                                                                       );
-                                                               }
-                                                       } else {
-                                                               complete(
-                                                                       xhrSuccessStatus[ xhr.status ] || xhr.status,
-                                                                       xhr.statusText,
-
-                                                                       // Support: IE <=9 only
-                                                                       // IE9 has no XHR2 but throws on binary (trac-11426)
-                                                                       // For XHR2 non-text, let the caller handle it (gh-2498)
-                                                                       ( xhr.responseType || "text" ) !== "text"  ||
-                                                                       typeof xhr.responseText !== "string" ?
-                                                                               { binary: xhr.response } :
-                                                                               { text: xhr.responseText },
-                                                                       xhr.getAllResponseHeaders()
-                                                               );
-                                                       }
-                                               }
-                                       };
-                               };
-
-                               // Listen to events
-                               xhr.onload = callback();
-                               errorCallback = xhr.onerror = callback( "error" );
-
-                               // Support: IE 9 only
-                               // Use onreadystatechange to replace onabort
-                               // to handle uncaught aborts
-                               if ( xhr.onabort !== undefined ) {
-                                       xhr.onabort = errorCallback;
-                               } else {
-                                       xhr.onreadystatechange = function() {
-
-                                               // Check readyState before timeout as it changes
-                                               if ( xhr.readyState === 4 ) {
-
-                                                       // Allow onerror to be called first,
-                                                       // but that will not handle a native abort
-                                                       // Also, save errorCallback to a variable
-                                                       // as xhr.onerror cannot be accessed
-                                                       window.setTimeout( function() {
-                                                               if ( callback ) {
-                                                                       errorCallback();
-                                                               }
-                                                       } );
-                                               }
-                                       };
-                               }
-
-                               // Create the abort callback
-                               callback = callback( "abort" );
-
-                               try {
-
-                                       // Do send the request (this may raise an exception)
-                                       xhr.send( options.hasContent && options.data || null );
-                               } catch ( e ) {
-
-                                       // #14683: Only rethrow if this hasn't been notified as an error yet
-                                       if ( callback ) {
-                                               throw e;
-                                       }
-                               }
-                       },
-
-                       abort: function() {
-                               if ( callback ) {
-                                       callback();
-                               }
-                       }
-               };
-       }
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
-       if ( s.crossDomain ) {
-               s.contents.script = false;
-       }
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
-       accepts: {
-               script: "text/javascript, application/javascript, " +
-                       "application/ecmascript, application/x-ecmascript"
-       },
-       contents: {
-               script: /\b(?:java|ecma)script\b/
-       },
-       converters: {
-               "text script": function( text ) {
-                       jQuery.globalEval( text );
-                       return text;
-               }
-       }
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
-       if ( s.cache === undefined ) {
-               s.cache = false;
-       }
-       if ( s.crossDomain ) {
-               s.type = "GET";
-       }
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
-               var script, callback;
-               return {
-                       send: function( _, complete ) {
-                               script = jQuery( "<script>" ).prop( {
-                                       charset: s.scriptCharset,
-                                       src: s.url
-                               } ).on(
-                                       "load error",
-                                       callback = function( evt ) {
-                                               script.remove();
-                                               callback = null;
-                                               if ( evt ) {
-                                                       complete( evt.type === "error" ? 404 : 200, evt.type );
-                                               }
-                                       }
-                               );
-
-                               // Use native DOM manipulation to avoid our domManip AJAX trickery
-                               document.head.appendChild( script[ 0 ] );
-                       },
-                       abort: function() {
-                               if ( callback ) {
-                                       callback();
-                               }
-                       }
-               };
-       }
-} );
-
-
-
-
-var oldCallbacks = [],
-       rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
-       jsonp: "callback",
-       jsonpCallback: function() {
-               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-               this[ callback ] = true;
-               return callback;
-       }
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-       var callbackName, overwritten, responseContainer,
-               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-                       "url" :
-                       typeof s.data === "string" &&
-                               ( s.contentType || "" )
-                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
-                               rjsonp.test( s.data ) && "data"
-               );
-
-       // Handle iff the expected data type is "jsonp" or we have a parameter to set
-       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-               // Get callback name, remembering preexisting value associated with it
-               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-                       s.jsonpCallback() :
-                       s.jsonpCallback;
-
-               // Insert callback into url or form data
-               if ( jsonProp ) {
-                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-               } else if ( s.jsonp !== false ) {
-                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-               }
-
-               // Use data converter to retrieve json after script execution
-               s.converters[ "script json" ] = function() {
-                       if ( !responseContainer ) {
-                               jQuery.error( callbackName + " was not called" );
-                       }
-                       return responseContainer[ 0 ];
-               };
-
-               // Force json dataType
-               s.dataTypes[ 0 ] = "json";
-
-               // Install callback
-               overwritten = window[ callbackName ];
-               window[ callbackName ] = function() {
-                       responseContainer = arguments;
-               };
-
-               // Clean-up function (fires after converters)
-               jqXHR.always( function() {
-
-                       // If previous value didn't exist - remove it
-                       if ( overwritten === undefined ) {
-                               jQuery( window ).removeProp( callbackName );
-
-                       // Otherwise restore preexisting value
-                       } else {
-                               window[ callbackName ] = overwritten;
-                       }
-
-                       // Save back as free
-                       if ( s[ callbackName ] ) {
-
-                               // Make sure that re-using the options doesn't screw things around
-                               s.jsonpCallback = originalSettings.jsonpCallback;
-
-                               // Save the callback name for future use
-                               oldCallbacks.push( callbackName );
-                       }
-
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-                               overwritten( responseContainer[ 0 ] );
-                       }
-
-                       responseContainer = overwritten = undefined;
-               } );
-
-               // Delegate to script
-               return "script";
-       }
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
-       var body = document.implementation.createHTMLDocument( "" ).body;
-       body.innerHTML = "<form></form><form></form>";
-       return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
-       if ( typeof data !== "string" ) {
-               return [];
-       }
-       if ( typeof context === "boolean" ) {
-               keepScripts = context;
-               context = false;
-       }
-
-       var base, parsed, scripts;
-
-       if ( !context ) {
-
-               // Stop scripts or inline event handlers from being executed immediately
-               // by using document.implementation
-               if ( support.createHTMLDocument ) {
-                       context = document.implementation.createHTMLDocument( "" );
-
-                       // Set the base href for the created document
-                       // so any parsed elements with URLs
-                       // are based on the document's URL (gh-2965)
-                       base = context.createElement( "base" );
-                       base.href = document.location.href;
-                       context.head.appendChild( base );
-               } else {
-                       context = document;
-               }
-       }
-
-       parsed = rsingleTag.exec( data );
-       scripts = !keepScripts && [];
-
-       // Single tag
-       if ( parsed ) {
-               return [ context.createElement( parsed[ 1 ] ) ];
-       }
-
-       parsed = buildFragment( [ data ], context, scripts );
-
-       if ( scripts && scripts.length ) {
-               jQuery( scripts ).remove();
-       }
-
-       return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
-       var selector, type, response,
-               self = this,
-               off = url.indexOf( " " );
-
-       if ( off > -1 ) {
-               selector = stripAndCollapse( url.slice( off ) );
-               url = url.slice( 0, off );
-       }
-
-       // If it's a function
-       if ( jQuery.isFunction( params ) ) {
-
-               // We assume that it's the callback
-               callback = params;
-               params = undefined;
-
-       // Otherwise, build a param string
-       } else if ( params && typeof params === "object" ) {
-               type = "POST";
-       }
-
-       // If we have elements to modify, make the request
-       if ( self.length > 0 ) {
-               jQuery.ajax( {
-                       url: url,
-
-                       // If "type" variable is undefined, then "GET" method will be used.
-                       // Make value of this field explicit since
-                       // user can override it through ajaxSetup method
-                       type: type || "GET",
-                       dataType: "html",
-                       data: params
-               } ).done( function( responseText ) {
-
-                       // Save response for use in complete callback
-                       response = arguments;
-
-                       self.html( selector ?
-
-                               // If a selector was specified, locate the right elements in a dummy div
-                               // Exclude scripts to avoid IE 'Permission Denied' errors
-                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-                               // Otherwise use the full result
-                               responseText );
-
-               // If the request succeeds, this function gets "data", "status", "jqXHR"
-               // but they are ignored because response was set above.
-               // If it fails, this function gets "jqXHR", "status", "error"
-               } ).always( callback && function( jqXHR, status ) {
-                       self.each( function() {
-                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
-                       } );
-               } );
-       }
-
-       return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
-       "ajaxStart",
-       "ajaxStop",
-       "ajaxComplete",
-       "ajaxError",
-       "ajaxSuccess",
-       "ajaxSend"
-], function( i, type ) {
-       jQuery.fn[ type ] = function( fn ) {
-               return this.on( type, fn );
-       };
-} );
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
-       return jQuery.grep( jQuery.timers, function( fn ) {
-               return elem === fn.elem;
-       } ).length;
-};
-
-
-
-
-jQuery.offset = {
-       setOffset: function( elem, options, i ) {
-               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
-                       position = jQuery.css( elem, "position" ),
-                       curElem = jQuery( elem ),
-                       props = {};
-
-               // Set position first, in-case top/left are set even on static elem
-               if ( position === "static" ) {
-                       elem.style.position = "relative";
-               }
-
-               curOffset = curElem.offset();
-               curCSSTop = jQuery.css( elem, "top" );
-               curCSSLeft = jQuery.css( elem, "left" );
-               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
-               // Need to be able to calculate position if either
-               // top or left is auto and position is either absolute or fixed
-               if ( calculatePosition ) {
-                       curPosition = curElem.position();
-                       curTop = curPosition.top;
-                       curLeft = curPosition.left;
-
-               } else {
-                       curTop = parseFloat( curCSSTop ) || 0;
-                       curLeft = parseFloat( curCSSLeft ) || 0;
-               }
-
-               if ( jQuery.isFunction( options ) ) {
-
-                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
-                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
-               }
-
-               if ( options.top != null ) {
-                       props.top = ( options.top - curOffset.top ) + curTop;
-               }
-               if ( options.left != null ) {
-                       props.left = ( options.left - curOffset.left ) + curLeft;
-               }
-
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
-
-jQuery.fn.extend( {
-       offset: function( options ) {
-
-               // Preserve chaining for setter
-               if ( arguments.length ) {
-                       return options === undefined ?
-                               this :
-                               this.each( function( i ) {
-                                       jQuery.offset.setOffset( this, options, i );
-                               } );
-               }
-
-               var doc, docElem, rect, win,
-                       elem = this[ 0 ];
-
-               if ( !elem ) {
-                       return;
-               }
-
-               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
-               // Support: IE <=11 only
-               // Running getBoundingClientRect on a
-               // disconnected node in IE throws an error
-               if ( !elem.getClientRects().length ) {
-                       return { top: 0, left: 0 };
-               }
-
-               rect = elem.getBoundingClientRect();
-
-               doc = elem.ownerDocument;
-               docElem = doc.documentElement;
-               win = doc.defaultView;
-
-               return {
-                       top: rect.top + win.pageYOffset - docElem.clientTop,
-                       left: rect.left + win.pageXOffset - docElem.clientLeft
-               };
-       },
-
-       position: function() {
-               if ( !this[ 0 ] ) {
-                       return;
-               }
-
-               var offsetParent, offset,
-                       elem = this[ 0 ],
-                       parentOffset = { top: 0, left: 0 };
-
-               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
-               // because it is its only offset parent
-               if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
-                       // Assume getBoundingClientRect is there when computed position is fixed
-                       offset = elem.getBoundingClientRect();
-
-               } else {
-
-                       // Get *real* offsetParent
-                       offsetParent = this.offsetParent();
-
-                       // Get correct offsets
-                       offset = this.offset();
-                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
-                               parentOffset = offsetParent.offset();
-                       }
-
-                       // Add offsetParent borders
-                       parentOffset = {
-                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
-                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
-                       };
-               }
-
-               // Subtract parent offsets and element margins
-               return {
-                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
-               };
-       },
-
-       // This method will return documentElement in the following cases:
-       // 1) For the element inside the iframe without offsetParent, this method will return
-       //    documentElement of the parent window
-       // 2) For the hidden or detached element
-       // 3) For body or html element, i.e. in case of the html node - it will return itself
-       //
-       // but those exceptions were never presented as a real life use-cases
-       // and might be considered as more preferable results.
-       //
-       // This logic, however, is not guaranteed and can change at any point in the future
-       offsetParent: function() {
-               return this.map( function() {
-                       var offsetParent = this.offsetParent;
-
-                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-
-                       return offsetParent || documentElement;
-               } );
-       }
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-       var top = "pageYOffset" === prop;
-
-       jQuery.fn[ method ] = function( val ) {
-               return access( this, function( elem, method, val ) {
-
-                       // Coalesce documents and windows
-                       var win;
-                       if ( jQuery.isWindow( elem ) ) {
-                               win = elem;
-                       } else if ( elem.nodeType === 9 ) {
-                               win = elem.defaultView;
-                       }
-
-                       if ( val === undefined ) {
-                               return win ? win[ prop ] : elem[ method ];
-                       }
-
-                       if ( win ) {
-                               win.scrollTo(
-                                       !top ? val : win.pageXOffset,
-                                       top ? val : win.pageYOffset
-                               );
-
-                       } else {
-                               elem[ method ] = val;
-                       }
-               }, method, val, arguments.length );
-       };
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
-       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
-               function( elem, computed ) {
-                       if ( computed ) {
-                               computed = curCSS( elem, prop );
-
-                               // If curCSS returns percentage, fallback to offset
-                               return rnumnonpx.test( computed ) ?
-                                       jQuery( elem ).position()[ prop ] + "px" :
-                                       computed;
-                       }
-               }
-       );
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
-               function( defaultExtra, funcName ) {
-
-               // Margin is only for outerHeight, outerWidth
-               jQuery.fn[ funcName ] = function( margin, value ) {
-                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-                       return access( this, function( elem, type, value ) {
-                               var doc;
-
-                               if ( jQuery.isWindow( elem ) ) {
-
-                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
-                                       return funcName.indexOf( "outer" ) === 0 ?
-                                               elem[ "inner" + name ] :
-                                               elem.document.documentElement[ "client" + name ];
-                               }
-
-                               // Get document width or height
-                               if ( elem.nodeType === 9 ) {
-                                       doc = elem.documentElement;
-
-                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
-                                       // whichever is greatest
-                                       return Math.max(
-                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
-                                               doc[ "client" + name ]
-                                       );
-                               }
-
-                               return value === undefined ?
-
-                                       // Get width or height on the element, requesting but not forcing parseFloat
-                                       jQuery.css( elem, type, extra ) :
-
-                                       // Set width or height on the element
-                                       jQuery.style( elem, type, value, extra );
-                       }, type, chainable ? margin : undefined, chainable );
-               };
-       } );
-} );
-
-
-jQuery.fn.extend( {
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length === 1 ?
-                       this.off( selector, "**" ) :
-                       this.off( types, selector || "**", fn );
-       }
-} );
-
-jQuery.holdReady = function( hold ) {
-       if ( hold ) {
-               jQuery.readyWait++;
-       } else {
-               jQuery.ready( true );
-       }
-};
-jQuery.isArray = Array.isArray;
-jQuery.parseJSON = JSON.parse;
-jQuery.nodeName = nodeName;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
-       define( "jquery", [], function() {
-               return jQuery;
-       } );
-}
-
-
-
-
-var
-
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
-       if ( window.$ === jQuery ) {
-               window.$ = _$;
-       }
-
-       if ( deep && window.jQuery === jQuery ) {
-               window.jQuery = _jQuery;
-       }
-
-       return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
-       window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-} );
index d7e65e1..42eb8c2 100644 (file)
@@ -20,5 +20,6 @@
        "ooui-dialog-process-continue": "palalid",
        "ooui-selectfile-button-select": "mipili’ cacay a tangan",
        "ooui-selectfile-not-supported": "la’cus midama mipili’ay a tangan",
-       "ooui-selectfile-placeholder": "caay henay mipili’ tu tangan"
+       "ooui-selectfile-placeholder": "caay henay mipili’ tu tangan",
+       "ooui-selectfile-dragdrop-placeholder": "mutengteng tangan katukuh itini"
 }
index ceb27c9..8b3bcd8 100644 (file)
@@ -10,6 +10,7 @@
        "ooui-toolbar-more": "Plus",
        "ooui-toolgroup-expand": "Plus",
        "ooui-toolgroup-collapse": "Minus",
+       "ooui-item-remove": "Remover",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Cancellar",
        "ooui-dialog-process-error": "Qualcosa ha vadite mal",
index c53e058..10c7e22 100644 (file)
@@ -10,7 +10,8 @@
                        "Rv77ax",
                        "William Surya Permana",
                        "Rachmat.Wahidi",
-                       "Rachmat04"
+                       "Rachmat04",
+                       "Gombang"
                ]
        },
        "ooui-outline-control-move-down": "Pindahkan butir ke bawah",
@@ -19,6 +20,7 @@
        "ooui-toolbar-more": "Lainnya",
        "ooui-toolgroup-expand": "Selengkapnya",
        "ooui-toolgroup-collapse": "Secukupnya",
+       "ooui-item-remove": "Hapus",
        "ooui-dialog-message-accept": "Oke",
        "ooui-dialog-message-reject": "Batal",
        "ooui-dialog-process-error": "Ada yang tidak beres",
index 31df169..8abe495 100644 (file)
@@ -8,7 +8,8 @@
                        "MIKHEIL",
                        "NoiX180",
                        "Pras",
-                       "Tokoko"
+                       "Tokoko",
+                       "Kintrbr"
                ]
        },
        "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
@@ -17,6 +18,7 @@
        "ooui-toolbar-more": "მეტი",
        "ooui-toolgroup-expand": "მეტი",
        "ooui-toolgroup-collapse": "რამდენიმე",
+       "ooui-item-remove": "წაშლა",
        "ooui-dialog-message-accept": "დიახ",
        "ooui-dialog-message-reject": "გაუქმება",
        "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა",
index 6be2354..1a2af2b 100644 (file)
@@ -7,6 +7,7 @@
        "ooui-toolbar-more": "ٻئے",
        "ooui-toolgroup-expand": "ٻئے",
        "ooui-toolgroup-collapse": "گھٹ",
+       "ooui-item-remove": "ہٹاؤ",
        "ooui-dialog-message-accept": "ٹھیک ہے",
        "ooui-dialog-message-reject": "منسوخ",
        "ooui-dialog-process-error": "کجھ خراب تھی ڳئے",
index 62a1765..ce0235c 100644 (file)
@@ -10,6 +10,7 @@
        "ooui-toolbar-more": "مزید",
        "ooui-toolgroup-expand": "مزید",
        "ooui-toolgroup-collapse": "کم کریں",
+       "ooui-item-remove": "حذف کریں",
        "ooui-dialog-message-accept": "ٹھیک",
        "ooui-dialog-message-reject": "منسوخ کریں",
        "ooui-dialog-process-error": "کچھ غلط ہو گیا ہے",
index 027b7be..127f483 100644 (file)
@@ -15,7 +15,8 @@
                        "Waihorace",
                        "Cwlin0416",
                        "LNDDYL",
-                       "Shangkuanlc"
+                       "Shangkuanlc",
+                       "A2093064"
                ]
        },
        "ooui-outline-control-move-down": "項目下移",
@@ -24,6 +25,7 @@
        "ooui-toolbar-more": "更多",
        "ooui-toolgroup-expand": "更多",
        "ooui-toolgroup-collapse": "更少",
+       "ooui-item-remove": "移除",
        "ooui-dialog-message-accept": "確定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "發生不明錯誤",
index 66cf43c..9fe1e3f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
index e07b97e..361e3f0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 .oo-ui-element-hidden {
   display: none !important;
   border-color: transparent;
   padding: 0;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.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-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-}
 .oo-ui-buttonElement-frameless {
   position: relative;
 }
 .oo-ui-buttonElement.oo-ui-labelElement .oo-ui-labelElement-label {
   line-height: 1.875em;
 }
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-iconElement-icon {
-  height: 100%;
-  margin-left: 0;
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+  display: inline-block;
+  vertical-align: middle;
 }
 .oo-ui-buttonElement.oo-ui-iconElement .oo-ui-indicatorElement-indicator {
   margin-left: 0.46875em;
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
+  position: absolute;
+  top: 0;
   min-width: 24px;
   width: 1.875em;
   min-height: 24px;
-  height: 1.875em;
+  height: 100%;
 }
 .oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-iconElement.oo-ui-iconElement-icon {
+  position: static;
+  top: auto;
+  height: 1.875em;
   opacity: 0.8;
 }
 .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
+  position: absolute;
+  top: 0;
   min-width: 12px;
   width: 0.9375em;
   min-height: 12px;
-  height: 0.9375em;
+  height: 100%;
 }
 .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
 .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+  position: static;
+  top: auto;
+  height: 0.9375em;
   opacity: 0.8;
 }
 .oo-ui-labelElement .oo-ui-labelElement-label-highlight {
 body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: table-cell;
 }
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-fieldsetLayout-header > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-}
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-fieldsetLayout-header {
   color: inherit;
   display: inline-table;
@@ -491,8 +489,10 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   line-height: 1.8em;
 }
 .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-fieldsetLayout-header > .oo-ui-iconElement-icon {
-  left: 0;
+  display: block;
+  position: absolute;
   top: 0.25em;
+  left: 0;
 }
 .oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-header > .oo-ui-popupButtonWidget {
   margin-right: 0;
@@ -548,6 +548,20 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-horizontalLayout > .oo-ui-layout {
   margin-top: 0;
 }
+.oo-ui-widget .oo-ui-iconElement-icon,
+.oo-ui-widget .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-iconElement .oo-ui-widget .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-indicatorElement .oo-ui-widget .oo-ui-indicatorElement-indicator {
+  display: none;
+}
+.oo-ui-widget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-iconElement > * > .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-iconElement .oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-indicatorElement > * > .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-indicatorElement .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+  display: block;
+}
 .oo-ui-optionWidget {
   position: relative;
   display: block;
@@ -585,12 +599,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-decoratedOptionWidget {
   padding: 0.5em 2em 0.5em 3em;
 }
-.oo-ui-decoratedOptionWidget > .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget > .oo-ui-indicatorElement-indicator {
-  position: absolute;
-}
 .oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+  position: absolute;
   top: 0;
   height: 100%;
 }
@@ -638,6 +649,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   vertical-align: middle;
   line-height: 2.5em;
 }
+.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-iconElement-icon {
+  display: inline-block;
+  position: static;
+  top: auto;
+  height: 1.875em;
+}
 .oo-ui-iconWidget.oo-ui-widget-disabled {
   opacity: 0.2;
 }
@@ -647,6 +664,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   line-height: 2.5em;
   margin: 0.46875em;
 }
+.oo-ui-indicatorWidget.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+  display: inline-block;
+  position: static;
+  top: auto;
+  height: 1.875em;
+}
 .oo-ui-indicatorWidget.oo-ui-widget-disabled {
   opacity: 0.2;
 }
@@ -1000,18 +1023,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget [type='search']::-webkit-search-cancel-button {
   display: none;
 }
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-  display: none;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
-  display: block;
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
   cursor: text;
@@ -1116,19 +1127,25 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   border-color: #ddd;
   background-color: #f3f3f3;
 }
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
   opacity: 0.2;
 }
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
   color: #ddd;
   text-shadow: 0 1px 1px #fff;
 }
+.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
 .oo-ui-textInputWidget.oo-ui-iconElement input,
 .oo-ui-textInputWidget.oo-ui-iconElement textarea {
   padding-left: 2.475em;
 }
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
   max-height: 2.5em;
   margin-left: 0.3em;
 }
@@ -1136,11 +1153,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
   padding-right: 2.4875em;
 }
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
   max-height: 2.5em;
   margin-right: 0.775em;
 }
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
+  display: none;
   top: 1px;
   padding: 0.546875em 0.4em 0.625em 0.4em;
   line-height: 1.172em;
@@ -1168,6 +1186,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-menuSelectWidget-invisible {
   display: none;
 }
+.oo-ui-menuOptionWidget.oo-ui-optionWidget > .oo-ui-indicatorElement-indicator {
+  display: none;
+}
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
   background-color: transparent;
 }
@@ -1180,6 +1201,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-repeat: no-repeat;
   background-size: contain;
   display: block;
+  position: absolute;
   left: 0.5em;
   top: 0;
   min-width: 24px;
@@ -1223,12 +1245,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 }
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
   cursor: pointer;
 }
@@ -1246,6 +1262,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-dropdownWidget-handle:focus {
   outline: 0;
 }
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
   left: 0.25em;
   margin: 0 0.3em;
index ca75a05..96956ff 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 /**
  * WikimediaUI Base v0.9.2
   border-color: transparent;
   padding: 0;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.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-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-}
 .oo-ui-buttonElement-frameless {
   position: relative;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button:focus {
   outline: 0;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: block;
-}
 .oo-ui-buttonElement > input.oo-ui-buttonElement-button {
   -webkit-appearance: none;
 }
@@ -99,9 +80,6 @@
 .oo-ui-buttonElement.oo-ui-labelElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
   padding-right: 2.5em;
 }
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: block;
-}
 .oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
 .oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   right: 0.9375em;
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
+  position: absolute;
+  top: 0;
   min-width: 24px;
   width: 1.875em;
   min-height: 24px;
-  height: 1.875em;
+  height: 100%;
 }
 .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
 .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
+  position: absolute;
+  top: 0;
   min-width: 12px;
   width: 0.9375em;
   min-height: 12px;
-  height: 0.9375em;
+  height: 100%;
 }
 .oo-ui-labelElement .oo-ui-labelElement-label-highlight {
   font-weight: bold;
 }
 .oo-ui-fieldLayout {
   display: block;
-  margin-top: 1.640625em;
+  margin-top: 1.25em;
 }
 .oo-ui-fieldLayout:before,
 .oo-ui-fieldLayout:after {
 }
 .oo-ui-fieldLayout.oo-ui-labelElement,
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
-  margin-top: 1.171875em;
+  margin-top: 0.9375em;
 }
 .oo-ui-fieldLayout:first-child,
 .oo-ui-fieldLayout.oo-ui-labelElement:first-child,
   padding: 0;
   display: table;
 }
-.oo-ui-fieldLayout-messages .oo-ui-iconWidget {
+.oo-ui-fieldLayout-messages .oo-ui-iconElement.oo-ui-iconElement-icon {
   display: table-cell;
+  position: static;
+  top: auto;
+  height: 1.875em;
 }
 .oo-ui-fieldLayout-messages .oo-ui-labelWidget {
   display: table-cell;
   line-height: 1.4;
   vertical-align: middle;
 }
+.oo-ui-fieldLayout.oo-ui-fieldLayout-messages.oo-ui-iconElement .oo-ui-iconElement-icon {
+  display: table-cell;
+}
 .oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header > .oo-ui-labelElement-label {
   color: #72777d;
 }
 body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: table-cell;
 }
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-fieldsetLayout-header > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-}
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-fieldsetLayout-header {
   color: inherit;
   display: inline-table;
@@ -663,6 +647,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-fieldsetLayout .oo-ui-fieldsetLayout-header {
   max-width: 50em;
 }
+.oo-ui-fieldsetLayout .oo-ui-fieldsetLayout-header .oo-ui-iconElement-icon {
+  height: 1.875em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-fieldsetLayout-header .oo-ui-iconElement-icon {
+  display: block;
+}
 .oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
 .oo-ui-fieldsetLayout + .oo-ui-formLayout {
   margin-top: 2em;
@@ -678,10 +668,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   padding-left: 1.76630435em;
   line-height: 1.63043478em;
 }
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-fieldsetLayout-header > .oo-ui-iconElement-icon {
-  top: 0;
-  left: 0;
-}
 .oo-ui-fieldsetLayout .oo-ui-fieldsetLayout-help {
   margin-right: 0;
   margin-top: -0.234375em;
@@ -751,6 +737,20 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-horizontalLayout > .oo-ui-layout {
   margin-top: 0;
 }
+.oo-ui-widget .oo-ui-iconElement-icon,
+.oo-ui-widget .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-iconElement .oo-ui-widget .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-indicatorElement .oo-ui-widget .oo-ui-indicatorElement-indicator {
+  display: none;
+}
+.oo-ui-widget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-iconElement > * > .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-iconElement .oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-widget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-indicatorElement > * > .oo-ui-indicatorElement-indicator,
+.oo-ui-widget.oo-ui-indicatorElement .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+  display: block;
+}
 .oo-ui-optionWidget {
   position: relative;
   display: block;
@@ -780,15 +780,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   padding: 0.703125em 0.9375em 0.625em;
   line-height: 1;
 }
-.oo-ui-decoratedOptionWidget > .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget > .oo-ui-indicatorElement-indicator {
-  position: absolute;
-}
-.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  top: 0;
-  height: 100%;
-}
 .oo-ui-decoratedOptionWidget.oo-ui-iconElement {
   padding-left: 2.96875em;
 }
@@ -844,6 +835,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   vertical-align: middle;
   line-height: 2.5;
 }
+.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-iconElement-icon {
+  display: inline-block;
+  position: static;
+  top: auto;
+  height: 1.875em;
+}
 .oo-ui-iconWidget.oo-ui-widget-disabled {
   opacity: 0.51;
 }
@@ -853,6 +850,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   line-height: 2.5;
   margin: 0.46875em;
 }
+.oo-ui-indicatorWidget.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+  display: inline-block;
+  position: static;
+  top: auto;
+  height: 0.9375em;
+}
 .oo-ui-indicatorWidget.oo-ui-widget-disabled {
   opacity: 0.51;
 }
@@ -1086,7 +1089,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-popupWidget-body-padded {
   margin: 0.703125em 0.9375em 0.625em;
 }
-.oo-ui-popupWidget-body-padded :first-child {
+.oo-ui-popupWidget-body-padded :first-child {
   margin-top: 0;
 }
 .oo-ui-popupWidget-footer {
@@ -1197,10 +1200,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   box-shadow: inset 0 0 0 1px #2a4b8d;
 }
 .oo-ui-checkboxMultiselectInputWidget .oo-ui-fieldLayout {
-  margin-top: 0;
-}
-.oo-ui-checkboxMultiselectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body {
-  padding: 0.3125em 0;
+  margin-top: 0.3125em;
 }
 .oo-ui-checkboxMultiselectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body .oo-ui-labelElement-label {
   line-height: 1.5;
@@ -1250,7 +1250,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-dropdownInputWidget select::-ms-expand {
   display: none;
 }
-.oo-ui-dropdownInputWidget select:not( [no-ie] ) {
+.oo-ui-dropdownInputWidget select:not( [ no-ie ] ) {
   background-position: right 1.75em center;
   width: calc( 100% + 1em );
   height: 2.5em;
@@ -1374,10 +1374,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   border-color: #2a4b8d;
 }
 .oo-ui-radioSelectInputWidget .oo-ui-fieldLayout {
-  margin-top: 0;
-}
-.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body {
-  padding: 0.3125em 0;
+  margin-top: 0.3125em;
 }
 .oo-ui-radioSelectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body .oo-ui-labelElement-label {
   line-height: 1.5;
@@ -1421,18 +1418,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget [type='search']::-webkit-search-cancel-button {
   display: none;
 }
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-  display: none;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
-  display: block;
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
   cursor: text;
@@ -1495,28 +1480,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   -moz-transition: border-color 200ms cubic-bezier(0.4, 0.55, 0.55, 1), box-shadow 200ms cubic-bezier(0.4, 0.55, 0.55, 1);
   transition: border-color 200ms cubic-bezier(0.4, 0.55, 0.55, 1), box-shadow 200ms cubic-bezier(0.4, 0.55, 0.55, 1);
 }
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:hover,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:hover {
-  border-color: #72777d;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
-  outline: 0;
-  border-color: #36c;
-  box-shadow: inset 0 0 0 1px #36c;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
-  background-color: #f8f9fa;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:hover,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:hover {
-  border-color: #c8ccd1;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
-  border-color: #36c;
-}
 .oo-ui-textInputWidget.oo-ui-widget-enabled input::-webkit-input-placeholder,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-webkit-input-placeholder {
   color: #72777d;
@@ -1542,6 +1505,20 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   color: #72777d;
   opacity: 1;
 }
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+  outline: 0;
+  border-color: #36c;
+  box-shadow: inset 0 0 0 1px #36c;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
+  background-color: #f8f9fa;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled:hover input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled:hover textarea {
+  border-color: #72777d;
+}
 @media screen and (min-width: 0) {
   .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
     outline: 1px solid #36c;
@@ -1569,8 +1546,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   text-shadow: 0 1px 1px #fff;
   border-color: #c8ccd1;
 }
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
   opacity: 0.51;
 }
 .oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-labelElement-label {
@@ -1581,7 +1558,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget.oo-ui-iconElement textarea {
   padding-left: 2.5em;
 }
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
   left: 0.46875em;
 }
 .oo-ui-textInputWidget.oo-ui-iconElement textarea + .oo-ui-iconElement-icon {
@@ -1600,7 +1577,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget.oo-ui-indicatorElement.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
   padding-right: 0;
 }
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
   max-height: 2.5em;
   margin-right: 0.9375em;
 }
@@ -1652,6 +1629,15 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-menuSectionOptionWidget.oo-ui-widget-enabled {
   cursor: default;
 }
+.oo-ui-menuSectionOptionWidget ~ .oo-ui-menuOptionWidget {
+  padding-left: 1.875em;
+}
+.oo-ui-menuSectionOptionWidget ~ .oo-ui-menuOptionWidget.oo-ui-iconElement {
+  padding-left: 3.90625em;
+}
+.oo-ui-menuSectionOptionWidget ~ .oo-ui-menuOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+  left: 1.875em;
+}
 .oo-ui-dropdownWidget {
   display: inline-block;
   position: relative;
@@ -1676,12 +1662,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 }
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
   cursor: pointer;
 }
@@ -1834,6 +1814,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   right: 0.9375em;
   margin: 0;
 }
+.oo-ui-comboBoxInputWidget-open .oo-ui-comboBoxInputWidget-dropdownButton > .oo-ui-buttonElement-button {
+  background-color: #fff;
+}
+.oo-ui-comboBoxInputWidget-open .oo-ui-comboBoxInputWidget-dropdownButton > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+  opacity: 1;
+}
 .oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
   opacity: 1;
 }
index 74340f2..20c58ff 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
@@ -581,7 +581,9 @@ OO.ui.mixin = {};
  *  Data can also be specified with the #setData method.
  */
 OO.ui.Element = function OoUiElement( config ) {
-       this.initialConfig = config;
+       if ( OO.ui.isDemo ) {
+               this.initialConfig = config;
+       }
        // Configuration initialization
        config = config || {};
 
@@ -5358,7 +5360,9 @@ OO.ui.PopupWidget.prototype.computePosition = function () {
        floatablePos = this.$floatableContainer.offset();
        floatablePos[ far ] = floatablePos[ near ] + this.$floatableContainer[ 'outer' + sizeProp ]();
        // Measure where the offsetParent is and compute our position based on that and parentPosition
-       offsetParentPos = this.$element.offsetParent().offset();
+       offsetParentPos = this.$element.offsetParent()[ 0 ] === document.documentElement ?
+               { top: 0, left: 0 } :
+               this.$element.offsetParent().offset();
 
        if ( positionProp === near ) {
                popupPos[ near ] = offsetParentPos[ near ] + parentPosition[ near ];
@@ -5394,7 +5398,9 @@ OO.ui.PopupWidget.prototype.computePosition = function () {
        }
 
        // Check if the popup will go beyond the edge of this.$container
-       containerPos = this.$container.offset();
+       containerPos = this.$container[ 0 ] === document.documentElement ?
+               { top: 0, left: 0 } :
+               this.$container.offset();
        containerPos[ far ] = containerPos[ near ] + this.$container[ 'inner' + sizeProp ]();
        // Take into account how much the popup will move because of the adjustments we're going to make
        popupPos[ near ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment;
@@ -7549,7 +7555,7 @@ OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
  * Handle menu toggle events.
  *
  * @private
- * @param {boolean} isVisible Menu toggle event
+ * @param {boolean} isVisible Open state of the menu
  */
 OO.ui.DropdownWidget.prototype.onMenuToggle = function ( isVisible ) {
        this.$element.toggleClass( 'oo-ui-dropdownWidget-open', isVisible );
@@ -7583,10 +7589,15 @@ OO.ui.DropdownWidget.prototype.onKeyDown = function ( e ) {
                !this.isDisabled() &&
                (
                        e.which === OO.ui.Keys.ENTER ||
+                       (
+                               e.which === OO.ui.Keys.SPACE &&
+                               // Avoid conflicts with type-to-search, see SelectWidget#onKeyPress.
+                               // Space only closes the menu is the user is not typing to search.
+                               this.menu.keyPressBuffer === ''
+                       ) ||
                        (
                                !this.menu.isVisible() &&
                                (
-                                       e.which === OO.ui.Keys.SPACE ||
                                        e.which === OO.ui.Keys.UP ||
                                        e.which === OO.ui.Keys.DOWN
                                )
@@ -9948,7 +9959,7 @@ OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
  *
  * @param {Object} config Configuration options
  * @return {string|null}
- * @private
+ * @protected
  */
 OO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {
        var allowedTypes = [
@@ -10276,10 +10287,6 @@ OO.ui.SearchInputWidget = function OoUiSearchInputWidget( config ) {
                icon: 'search'
        }, config );
 
-       // Set type to text so that TextInputWidget doesn't
-       // get stuck in an infinite loop.
-       config.type = 'text';
-
        // Parent constructor
        OO.ui.SearchInputWidget.parent.call( this, config );
 
@@ -10289,7 +10296,6 @@ OO.ui.SearchInputWidget = function OoUiSearchInputWidget( config ) {
        } );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-textInputWidget-type-search' );
        this.updateSearchIndicator();
        this.connect( this, {
                disable: 'onDisable'
@@ -10306,8 +10312,8 @@ OO.inheritClass( OO.ui.SearchInputWidget, OO.ui.TextInputWidget );
  * @inheritdoc
  * @protected
  */
-OO.ui.SearchInputWidget.prototype.getInputElement = function () {
-       return $( '<input>' ).attr( 'type', 'search' );
+OO.ui.SearchInputWidget.prototype.getSaneType = function () {
+       return 'search';
 };
 
 /**
@@ -10678,7 +10684,8 @@ OO.ui.ComboBoxInputWidget = function OoUiComboBoxInputWidget( config ) {
        this.menu.connect( this, {
                choose: 'onMenuChoose',
                add: 'onMenuItemsChange',
-               remove: 'onMenuItemsChange'
+               remove: 'onMenuItemsChange',
+               toggle: 'onMenuToggle'
        } );
 
        // Initialization
@@ -10789,6 +10796,16 @@ OO.ui.ComboBoxInputWidget.prototype.onMenuItemsChange = function () {
        this.$element.toggleClass( 'oo-ui-comboBoxInputWidget-empty', this.menu.isEmpty() );
 };
 
+/**
+ * Handle menu toggle events.
+ *
+ * @private
+ * @param {boolean} isVisible Open state of the menu
+ */
+OO.ui.ComboBoxInputWidget.prototype.onMenuToggle = function ( isVisible ) {
+       this.$element.toggleClass( 'oo-ui-comboBoxInputWidget-open', isVisible );
+};
+
 /**
  * @inheritdoc
  */
index 1a00f8e..e2a93c8 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["../src/intro.js.txt","../src/core.js","../src/mixin.js","../src/Element.js","../src/HtmlSnippet.js","../src/Layout.js","../src/Widget.js","../src/Theme.js","../src/mixins/TabIndexedElement.js","../src/mixins/ButtonElement.js","../src/mixins/GroupElement.js","../src/mixins/IconElement.js","../src/mixins/IndicatorElement.js","../src/mixins/LabelElement.js","../src/mixins/FlaggedElement.js","../src/mixins/TitledElement.js","../src/mixins/AccessKeyedElement.js","../src/widgets/ButtonWidget.js","../src/widgets/ButtonGroupWidget.js","../src/widgets/IconWidget.js","../src/widgets/IndicatorWidget.js","../src/widgets/LabelWidget.js","../src/mixins/PendingElement.js","../src/mixins/FloatableElement.js","../src/mixins/ClippableElement.js","../src/widgets/PopupWidget.js","../src/mixins/PopupElement.js","../src/widgets/PopupButtonWidget.js","../src/mixins/GroupWidget.js","../src/mixins/ItemWidget.js","../src/widgets/OptionWidget.js","../src/widgets/SelectWidget.js","../src/widgets/DecoratedOptionWidget.js","../src/widgets/MenuOptionWidget.js","../src/widgets/MenuSectionOptionWidget.js","../src/widgets/MenuSelectWidget.js","../src/widgets/DropdownWidget.js","../src/widgets/RadioOptionWidget.js","../src/widgets/RadioSelectWidget.js","../src/widgets/MultioptionWidget.js","../src/widgets/MultiselectWidget.js","../src/widgets/CheckboxMultioptionWidget.js","../src/widgets/CheckboxMultiselectWidget.js","../src/widgets/ProgressBarWidget.js","../src/widgets/InputWidget.js","../src/widgets/HiddenInputWidget.js","../src/widgets/ButtonInputWidget.js","../src/widgets/CheckboxInputWidget.js","../src/widgets/DropdownInputWidget.js","../src/widgets/RadioInputWidget.js","../src/widgets/RadioSelectInputWidget.js","../src/widgets/CheckboxMultiselectInputWidget.js","../src/widgets/TextInputWidget.js","../src/widgets/SearchInputWidget.js","../src/widgets/MultilineTextInputWidget.js","../src/widgets/ComboBoxInputWidget.js","../src/layouts/FieldLayout.js","../src/layouts/ActionFieldLayout.js","../src/layouts/FieldsetLayout.js","../src/layouts/FormLayout.js","../src/layouts/PanelLayout.js","../src/layouts/HorizontalLayout.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-core.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * Namespace for all classes, static methods and static properties.\n *\n * @class\n * @singleton\n */\nOO.ui = {};\n\nOO.ui.bind = $.proxy;\n\n/**\n * @property {Object}\n */\nOO.ui.Keys = {\n\tUNDEFINED: 0,\n\tBACKSPACE: 8,\n\tDELETE: 46,\n\tLEFT: 37,\n\tRIGHT: 39,\n\tUP: 38,\n\tDOWN: 40,\n\tENTER: 13,\n\tEND: 35,\n\tHOME: 36,\n\tTAB: 9,\n\tPAGEUP: 33,\n\tPAGEDOWN: 34,\n\tESCAPE: 27,\n\tSHIFT: 16,\n\tSPACE: 32\n};\n\n/**\n * Constants for MouseEvent.which\n *\n * @property {Object}\n */\nOO.ui.MouseButtons = {\n\tLEFT: 1,\n\tMIDDLE: 2,\n\tRIGHT: 3\n};\n\n/**\n * @property {number}\n * @private\n */\nOO.ui.elementId = 0;\n\n/**\n * Generate a unique ID for element\n *\n * @return {string} ID\n */\nOO.ui.generateElementId = function () {\n\tOO.ui.elementId++;\n\treturn 'oojsui-' + OO.ui.elementId;\n};\n\n/**\n * Check if an element is focusable.\n * Inspired by :focusable in jQueryUI v1.11.4 - 2015-04-14\n *\n * @param {jQuery} $element Element to test\n * @return {boolean} Element is focusable\n */\nOO.ui.isFocusableElement = function ( $element ) {\n\tvar nodeName,\n\t\telement = $element[ 0 ];\n\n\t// Anything disabled is not focusable\n\tif ( element.disabled ) {\n\t\treturn false;\n\t}\n\n\t// Check if the element is visible\n\tif ( !(\n\t\t// This is quicker than calling $element.is( ':visible' )\n\t\t$.expr.pseudos.visible( element ) &&\n\t\t// Check that all parents are visible\n\t\t!$element.parents().addBack().filter( function () {\n\t\t\treturn $.css( this, 'visibility' ) === 'hidden';\n\t\t} ).length\n\t) ) {\n\t\treturn false;\n\t}\n\n\t// Check if the element is ContentEditable, which is the string 'true'\n\tif ( element.contentEditable === 'true' ) {\n\t\treturn true;\n\t}\n\n\t// Anything with a non-negative numeric tabIndex is focusable.\n\t// Use .prop to avoid browser bugs\n\tif ( $element.prop( 'tabIndex' ) >= 0 ) {\n\t\treturn true;\n\t}\n\n\t// Some element types are naturally focusable\n\t// (indexOf is much faster than regex in Chrome and about the\n\t// same in FF: https://jsperf.com/regex-vs-indexof-array2)\n\tnodeName = element.nodeName.toLowerCase();\n\tif ( [ 'input', 'select', 'textarea', 'button', 'object' ].indexOf( nodeName ) !== -1 ) {\n\t\treturn true;\n\t}\n\n\t// Links and areas are focusable if they have an href\n\tif ( ( nodeName === 'a' || nodeName === 'area' ) && $element.attr( 'href' ) !== undefined ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Find a focusable child\n *\n * @param {jQuery} $container Container to search in\n * @param {boolean} [backwards] Search backwards\n * @return {jQuery} Focusable child, or an empty jQuery object if none found\n */\nOO.ui.findFocusable = function ( $container, backwards ) {\n\tvar $focusable = $( [] ),\n\t\t// $focusableCandidates is a superset of things that\n\t\t// could get matched by isFocusableElement\n\t\t$focusableCandidates = $container\n\t\t\t.find( 'input, select, textarea, button, object, a, area, [contenteditable], [tabindex]' );\n\n\tif ( backwards ) {\n\t\t$focusableCandidates = Array.prototype.reverse.call( $focusableCandidates );\n\t}\n\n\t$focusableCandidates.each( function () {\n\t\tvar $this = $( this );\n\t\tif ( OO.ui.isFocusableElement( $this ) ) {\n\t\t\t$focusable = $this;\n\t\t\treturn false;\n\t\t}\n\t} );\n\treturn $focusable;\n};\n\n/**\n * Get the user's language and any fallback languages.\n *\n * These language codes are used to localize user interface elements in the user's language.\n *\n * In environments that provide a localization system, this function should be overridden to\n * return the user's language(s). The default implementation returns English (en) only.\n *\n * @return {string[]} Language codes, in descending order of priority\n */\nOO.ui.getUserLanguages = function () {\n\treturn [ 'en' ];\n};\n\n/**\n * Get a value in an object keyed by language code.\n *\n * @param {Object.<string,Mixed>} obj Object keyed by language code\n * @param {string|null} [lang] Language code, if omitted or null defaults to any user language\n * @param {string} [fallback] Fallback code, used if no matching language can be found\n * @return {Mixed} Local value\n */\nOO.ui.getLocalValue = function ( obj, lang, fallback ) {\n\tvar i, len, langs;\n\n\t// Requested language\n\tif ( obj[ lang ] ) {\n\t\treturn obj[ lang ];\n\t}\n\t// Known user language\n\tlangs = OO.ui.getUserLanguages();\n\tfor ( i = 0, len = langs.length; i < len; i++ ) {\n\t\tlang = langs[ i ];\n\t\tif ( obj[ lang ] ) {\n\t\t\treturn obj[ lang ];\n\t\t}\n\t}\n\t// Fallback language\n\tif ( obj[ fallback ] ) {\n\t\treturn obj[ fallback ];\n\t}\n\t// First existing language\n\tfor ( lang in obj ) {\n\t\treturn obj[ lang ];\n\t}\n\n\treturn undefined;\n};\n\n/**\n * Check if a node is contained within another node\n *\n * Similar to jQuery#contains except a list of containers can be supplied\n * and a boolean argument allows you to include the container in the match list\n *\n * @param {HTMLElement|HTMLElement[]} containers Container node(s) to search in\n * @param {HTMLElement} contained Node to find\n * @param {boolean} [matchContainers] Include the container(s) in the list of nodes to match, otherwise only match descendants\n * @return {boolean} The node is in the list of target nodes\n */\nOO.ui.contains = function ( containers, contained, matchContainers ) {\n\tvar i;\n\tif ( !Array.isArray( containers ) ) {\n\t\tcontainers = [ containers ];\n\t}\n\tfor ( i = containers.length - 1; i >= 0; i-- ) {\n\t\tif ( ( matchContainers && contained === containers[ i ] ) || $.contains( containers[ i ], contained ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/**\n * Return a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n *\n * Ported from: http://underscorejs.org/underscore.js\n *\n * @param {Function} func Function to debounce\n * @param {number} [wait=0] Wait period in milliseconds\n * @param {boolean} [immediate] Trigger on leading edge\n * @return {Function} Debounced function\n */\nOO.ui.debounce = function ( func, wait, immediate ) {\n\tvar timeout;\n\treturn function () {\n\t\tvar context = this,\n\t\t\targs = arguments,\n\t\t\tlater = function () {\n\t\t\t\ttimeout = null;\n\t\t\t\tif ( !immediate ) {\n\t\t\t\t\tfunc.apply( context, args );\n\t\t\t\t}\n\t\t\t};\n\t\tif ( immediate && !timeout ) {\n\t\t\tfunc.apply( context, args );\n\t\t}\n\t\tif ( !timeout || wait ) {\n\t\t\tclearTimeout( timeout );\n\t\t\ttimeout = setTimeout( later, wait );\n\t\t}\n\t};\n};\n\n/**\n * Puts a console warning with provided message.\n *\n * @param {string} message Message\n */\nOO.ui.warnDeprecation = function ( message ) {\n\tif ( OO.getProp( window, 'console', 'warn' ) !== undefined ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn( message );\n\t}\n};\n\n/**\n * Returns a function, that, when invoked, will only be triggered at most once\n * during a given window of time. If called again during that window, it will\n * wait until the window ends and then trigger itself again.\n *\n * As it's not knowable to the caller whether the function will actually run\n * when the wrapper is called, return values from the function are entirely\n * discarded.\n *\n * @param {Function} func Function to throttle\n * @param {number} wait Throttle window length, in milliseconds\n * @return {Function} Throttled function\n */\nOO.ui.throttle = function ( func, wait ) {\n\tvar context, args, timeout,\n\t\tprevious = 0,\n\t\trun = function () {\n\t\t\ttimeout = null;\n\t\t\tprevious = OO.ui.now();\n\t\t\tfunc.apply( context, args );\n\t\t};\n\treturn function () {\n\t\t// Check how long it's been since the last time the function was\n\t\t// called, and whether it's more or less than the requested throttle\n\t\t// period. If it's less, run the function immediately. If it's more,\n\t\t// set a timeout for the remaining time -- but don't replace an\n\t\t// existing timeout, since that'd indefinitely prolong the wait.\n\t\tvar remaining = wait - ( OO.ui.now() - previous );\n\t\tcontext = this;\n\t\targs = arguments;\n\t\tif ( remaining <= 0 ) {\n\t\t\t// Note: unless wait was ridiculously large, this means we'll\n\t\t\t// automatically run the first time the function was called in a\n\t\t\t// given period. (If you provide a wait period larger than the\n\t\t\t// current Unix timestamp, you *deserve* unexpected behavior.)\n\t\t\tclearTimeout( timeout );\n\t\t\trun();\n\t\t} else if ( !timeout ) {\n\t\t\ttimeout = setTimeout( run, remaining );\n\t\t}\n\t};\n};\n\n/**\n * A (possibly faster) way to get the current timestamp as an integer\n *\n * @return {number} Current timestamp, in milliseconds since the Unix epoch\n */\nOO.ui.now = Date.now || function () {\n\treturn new Date().getTime();\n};\n\n/**\n * Reconstitute a JavaScript object corresponding to a widget created by\n * the PHP implementation.\n *\n * This is an alias for `OO.ui.Element.static.infuse()`.\n *\n * @param {string|HTMLElement|jQuery} idOrNode\n *   A DOM id (if a string) or node for the widget to infuse.\n * @return {OO.ui.Element}\n *   The `OO.ui.Element` corresponding to this (infusable) document node.\n */\nOO.ui.infuse = function ( idOrNode ) {\n\treturn OO.ui.Element.static.infuse( idOrNode );\n};\n\n( function () {\n\t/**\n\t * Message store for the default implementation of OO.ui.msg\n\t *\n\t * Environments that provide a localization system should not use this, but should override\n\t * OO.ui.msg altogether.\n\t *\n\t * @private\n\t */\n\tvar messages = {\n\t\t// Tool tip for a button that moves items in a list down one place\n\t\t'ooui-outline-control-move-down': 'Move item down',\n\t\t// Tool tip for a button that moves items in a list up one place\n\t\t'ooui-outline-control-move-up': 'Move item up',\n\t\t// Tool tip for a button that removes items from a list\n\t\t'ooui-outline-control-remove': 'Remove item',\n\t\t// Label for the toolbar group that contains a list of all other available tools\n\t\t'ooui-toolbar-more': 'More',\n\t\t// Label for the fake tool that expands the full list of tools in a toolbar group\n\t\t'ooui-toolgroup-expand': 'More',\n\t\t// Label for the fake tool that collapses the full list of tools in a toolbar group\n\t\t'ooui-toolgroup-collapse': 'Fewer',\n\t\t// Default label for the tooltip for the button that removes a tag item\n\t\t'ooui-item-remove': 'Remove',\n\t\t// Default label for the accept button of a confirmation dialog\n\t\t'ooui-dialog-message-accept': 'OK',\n\t\t// Default label for the reject button of a confirmation dialog\n\t\t'ooui-dialog-message-reject': 'Cancel',\n\t\t// Title for process dialog error description\n\t\t'ooui-dialog-process-error': 'Something went wrong',\n\t\t// Label for process dialog dismiss error button, visible when describing errors\n\t\t'ooui-dialog-process-dismiss': 'Dismiss',\n\t\t// Label for process dialog retry action button, visible when describing only recoverable errors\n\t\t'ooui-dialog-process-retry': 'Try again',\n\t\t// Label for process dialog retry action button, visible when describing only warnings\n\t\t'ooui-dialog-process-continue': 'Continue',\n\t\t// Label for the file selection widget's select file button\n\t\t'ooui-selectfile-button-select': 'Select a file',\n\t\t// Label for the file selection widget if file selection is not supported\n\t\t'ooui-selectfile-not-supported': 'File selection is not supported',\n\t\t// Label for the file selection widget when no file is currently selected\n\t\t'ooui-selectfile-placeholder': 'No file is selected',\n\t\t// Label for the file selection widget's drop target\n\t\t'ooui-selectfile-dragdrop-placeholder': 'Drop file here'\n\t};\n\n\t/**\n\t * Get a localized message.\n\t *\n\t * After the message key, message parameters may optionally be passed. In the default implementation,\n\t * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.\n\t * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as\n\t * they support unnamed, ordered message parameters.\n\t *\n\t * In environments that provide a localization system, this function should be overridden to\n\t * return the message translated in the user's language. The default implementation always returns\n\t * English messages. An example of doing this with [jQuery.i18n](https://github.com/wikimedia/jquery.i18n)\n\t * follows.\n\t *\n\t *     @example\n\t *     var i, iLen, button,\n\t *         messagePath = 'oojs-ui/dist/i18n/',\n\t *         languages = [ $.i18n().locale, 'ur', 'en' ],\n\t *         languageMap = {};\n\t *\n\t *     for ( i = 0, iLen = languages.length; i < iLen; i++ ) {\n\t *         languageMap[ languages[ i ] ] = messagePath + languages[ i ].toLowerCase() + '.json';\n\t *     }\n\t *\n\t *     $.i18n().load( languageMap ).done( function() {\n\t *         // Replace the built-in `msg` only once we've loaded the internationalization.\n\t *         // OOjs UI uses `OO.ui.deferMsg` for all initially-loaded messages. So long as\n\t *         // you put off creating any widgets until this promise is complete, no English\n\t *         // will be displayed.\n\t *         OO.ui.msg = $.i18n;\n\t *\n\t *         // A button displaying \"OK\" in the default locale\n\t *         button = new OO.ui.ButtonWidget( {\n\t *             label: OO.ui.msg( 'ooui-dialog-message-accept' ),\n\t *             icon: 'check'\n\t *         } );\n\t *         $( 'body' ).append( button.$element );\n\t *\n\t *         // A button displaying \"OK\" in Urdu\n\t *         $.i18n().locale = 'ur';\n\t *         button = new OO.ui.ButtonWidget( {\n\t *             label: OO.ui.msg( 'ooui-dialog-message-accept' ),\n\t *             icon: 'check'\n\t *         } );\n\t *         $( 'body' ).append( button.$element );\n\t *     } );\n\t *\n\t * @param {string} key Message key\n\t * @param {...Mixed} [params] Message parameters\n\t * @return {string} Translated message with parameters substituted\n\t */\n\tOO.ui.msg = function ( key ) {\n\t\tvar message = messages[ key ],\n\t\t\tparams = Array.prototype.slice.call( arguments, 1 );\n\t\tif ( typeof message === 'string' ) {\n\t\t\t// Perform $1 substitution\n\t\t\tmessage = message.replace( /\\$(\\d+)/g, function ( unused, n ) {\n\t\t\t\tvar i = parseInt( n, 10 );\n\t\t\t\treturn params[ i - 1 ] !== undefined ? params[ i - 1 ] : '$' + n;\n\t\t\t} );\n\t\t} else {\n\t\t\t// Return placeholder if message not found\n\t\t\tmessage = '[' + key + ']';\n\t\t}\n\t\treturn message;\n\t};\n}() );\n\n/**\n * Package a message and arguments for deferred resolution.\n *\n * Use this when you are statically specifying a message and the message may not yet be present.\n *\n * @param {string} key Message key\n * @param {...Mixed} [params] Message parameters\n * @return {Function} Function that returns the resolved message when executed\n */\nOO.ui.deferMsg = function () {\n\tvar args = arguments;\n\treturn function () {\n\t\treturn OO.ui.msg.apply( OO.ui, args );\n\t};\n};\n\n/**\n * Resolve a message.\n *\n * If the message is a function it will be executed, otherwise it will pass through directly.\n *\n * @param {Function|string} msg Deferred message, or message text\n * @return {string} Resolved message\n */\nOO.ui.resolveMsg = function ( msg ) {\n\tif ( $.isFunction( msg ) ) {\n\t\treturn msg();\n\t}\n\treturn msg;\n};\n\n/**\n * @param {string} url\n * @return {boolean}\n */\nOO.ui.isSafeUrl = function ( url ) {\n\t// Keep this function in sync with php/Tag.php\n\tvar i, protocolWhitelist;\n\n\tfunction stringStartsWith( haystack, needle ) {\n\t\treturn haystack.substr( 0, needle.length ) === needle;\n\t}\n\n\tprotocolWhitelist = [\n\t\t'bitcoin', 'ftp', 'ftps', 'geo', 'git', 'gopher', 'http', 'https', 'irc', 'ircs',\n\t\t'magnet', 'mailto', 'mms', 'news', 'nntp', 'redis', 'sftp', 'sip', 'sips', 'sms', 'ssh',\n\t\t'svn', 'tel', 'telnet', 'urn', 'worldwind', 'xmpp'\n\t];\n\n\tif ( url === '' ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < protocolWhitelist.length; i++ ) {\n\t\tif ( stringStartsWith( url, protocolWhitelist[ i ] + ':' ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// This matches '//' too\n\tif ( stringStartsWith( url, '/' ) || stringStartsWith( url, './' ) ) {\n\t\treturn true;\n\t}\n\tif ( stringStartsWith( url, '?' ) || stringStartsWith( url, '#' ) ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Check if the user has a 'mobile' device.\n *\n * For our purposes this means the user is primarily using an\n * on-screen keyboard, touch input instead of a mouse and may\n * have a physically small display.\n *\n * It is left up to implementors to decide how to compute this\n * so the default implementation always returns false.\n *\n * @return {boolean} Use is on a mobile device\n */\nOO.ui.isMobile = function () {\n\treturn false;\n};\n","/*!\n * Mixin namespace.\n */\n\n/**\n * Namespace for OOjs UI mixins.\n *\n * Mixins are named according to the type of object they are intended to\n * be mixed in to.  For example, OO.ui.mixin.GroupElement is intended to be\n * mixed in to an instance of OO.ui.Element, and OO.ui.mixin.GroupWidget\n * is intended to be mixed in to an instance of OO.ui.Widget.\n *\n * @class\n * @singleton\n */\nOO.ui.mixin = {};\n","/**\n * Each Element represents a rendering in the DOM—a button or an icon, for example, or anything\n * that is visible to a user. Unlike {@link OO.ui.Widget widgets}, plain elements usually do not have events\n * connected to them and can't be interacted with.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added\n *  to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]\n *  for an example.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample\n * @cfg {string} [id] The HTML id attribute used in the rendered tag.\n * @cfg {string} [text] Text to insert\n * @cfg {Array} [content] An array of content elements to append (after #text).\n *  Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.\n *  Instances of OO.ui.Element will have their $element appended.\n * @cfg {jQuery} [$content] Content elements to append (after #text).\n * @cfg {jQuery} [$element] Wrapper element. Defaults to a new element with #getTagName.\n * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).\n *  Data can also be specified with the #setData method.\n */\nOO.ui.Element = function OoUiElement( config ) {\n\tthis.initialConfig = config;\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$ = $;\n\tthis.elementId = null;\n\tthis.visible = true;\n\tthis.data = config.data;\n\tthis.$element = config.$element ||\n\t\t$( document.createElement( this.getTagName() ) );\n\tthis.elementGroup = null;\n\n\t// Initialization\n\tif ( Array.isArray( config.classes ) ) {\n\t\tthis.$element.addClass( config.classes.join( ' ' ) );\n\t}\n\tif ( config.id ) {\n\t\tthis.setElementId( config.id );\n\t}\n\tif ( config.text ) {\n\t\tthis.$element.text( config.text );\n\t}\n\tif ( config.content ) {\n\t\t// The `content` property treats plain strings as text; use an\n\t\t// HtmlSnippet to append HTML content.  `OO.ui.Element`s get their\n\t\t// appropriate $element appended.\n\t\tthis.$element.append( config.content.map( function ( v ) {\n\t\t\tif ( typeof v === 'string' ) {\n\t\t\t\t// Escape string so it is properly represented in HTML.\n\t\t\t\treturn document.createTextNode( v );\n\t\t\t} else if ( v instanceof OO.ui.HtmlSnippet ) {\n\t\t\t\t// Bypass escaping.\n\t\t\t\treturn v.toString();\n\t\t\t} else if ( v instanceof OO.ui.Element ) {\n\t\t\t\treturn v.$element;\n\t\t\t}\n\t\t\treturn v;\n\t\t} ) );\n\t}\n\tif ( config.$content ) {\n\t\t// The `$content` property treats plain strings as HTML.\n\t\tthis.$element.append( config.$content );\n\t}\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.Element );\n\n/* Static Properties */\n\n/**\n * The name of the HTML tag used by the element.\n *\n * The static value may be ignored if the #getTagName method is overridden.\n *\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Element.static.tagName = 'div';\n\n/* Static Methods */\n\n/**\n * Reconstitute a JavaScript object corresponding to a widget created\n * by the PHP implementation.\n *\n * @param {string|HTMLElement|jQuery} idOrNode\n *   A DOM id (if a string) or node for the widget to infuse.\n * @return {OO.ui.Element}\n *   The `OO.ui.Element` corresponding to this (infusable) document node.\n *   For `Tag` objects emitted on the HTML side (used occasionally for content)\n *   the value returned is a newly-created Element wrapping around the existing\n *   DOM node.\n */\nOO.ui.Element.static.infuse = function ( idOrNode ) {\n\tvar obj = OO.ui.Element.static.unsafeInfuse( idOrNode, false );\n\t// Verify that the type matches up.\n\t// FIXME: uncomment after T89721 is fixed, see T90929.\n\t/*\n\tif ( !( obj instanceof this['class'] ) ) {\n\t\tthrow new Error( 'Infusion type mismatch!' );\n\t}\n\t*/\n\treturn obj;\n};\n\n/**\n * Implementation helper for `infuse`; skips the type check and has an\n * extra property so that only the top-level invocation touches the DOM.\n *\n * @private\n * @param {string|HTMLElement|jQuery} idOrNode\n * @param {jQuery.Promise|boolean} domPromise A promise that will be resolved\n *     when the top-level widget of this infusion is inserted into DOM,\n *     replacing the original node; or false for top-level invocation.\n * @return {OO.ui.Element}\n */\nOO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {\n\t// look for a cached result of a previous infusion.\n\tvar id, $elem, error, data, cls, parts, parent, obj, top, state, infusedChildren;\n\tif ( typeof idOrNode === 'string' ) {\n\t\tid = idOrNode;\n\t\t$elem = $( document.getElementById( id ) );\n\t} else {\n\t\t$elem = $( idOrNode );\n\t\tid = $elem.attr( 'id' );\n\t}\n\tif ( !$elem.length ) {\n\t\tif ( typeof idOrNode === 'string' ) {\n\t\t\terror = 'Widget not found: ' + idOrNode;\n\t\t} else if ( idOrNode && idOrNode.selector ) {\n\t\t\terror = 'Widget not found: ' + idOrNode.selector;\n\t\t} else {\n\t\t\terror = 'Widget not found';\n\t\t}\n\t\tthrow new Error( error );\n\t}\n\tif ( $elem[ 0 ].oouiInfused ) {\n\t\t$elem = $elem[ 0 ].oouiInfused;\n\t}\n\tdata = $elem.data( 'ooui-infused' );\n\tif ( data ) {\n\t\t// cached!\n\t\tif ( data === true ) {\n\t\t\tthrow new Error( 'Circular dependency! ' + id );\n\t\t}\n\t\tif ( domPromise ) {\n\t\t\t// pick up dynamic state, like focus, value of form inputs, scroll position, etc.\n\t\t\tstate = data.constructor.static.gatherPreInfuseState( $elem, data );\n\t\t\t// restore dynamic state after the new element is re-inserted into DOM under infused parent\n\t\t\tdomPromise.done( data.restorePreInfuseState.bind( data, state ) );\n\t\t\tinfusedChildren = $elem.data( 'ooui-infused-children' );\n\t\t\tif ( infusedChildren && infusedChildren.length ) {\n\t\t\t\tinfusedChildren.forEach( function ( data ) {\n\t\t\t\t\tvar state = data.constructor.static.gatherPreInfuseState( $elem, data );\n\t\t\t\t\tdomPromise.done( data.restorePreInfuseState.bind( data, state ) );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\tdata = $elem.attr( 'data-ooui' );\n\tif ( !data ) {\n\t\tthrow new Error( 'No infusion data found: ' + id );\n\t}\n\ttry {\n\t\tdata = JSON.parse( data );\n\t} catch ( _ ) {\n\t\tdata = null;\n\t}\n\tif ( !( data && data._ ) ) {\n\t\tthrow new Error( 'No valid infusion data found: ' + id );\n\t}\n\tif ( data._ === 'Tag' ) {\n\t\t// Special case: this is a raw Tag; wrap existing node, don't rebuild.\n\t\treturn new OO.ui.Element( { $element: $elem } );\n\t}\n\tparts = data._.split( '.' );\n\tcls = OO.getProp.apply( OO, [ window ].concat( parts ) );\n\tif ( cls === undefined ) {\n\t\tthrow new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );\n\t}\n\n\t// Verify that we're creating an OO.ui.Element instance\n\tparent = cls.parent;\n\n\twhile ( parent !== undefined ) {\n\t\tif ( parent === OO.ui.Element ) {\n\t\t\t// Safe\n\t\t\tbreak;\n\t\t}\n\n\t\tparent = parent.parent;\n\t}\n\n\tif ( parent !== OO.ui.Element ) {\n\t\tthrow new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );\n\t}\n\n\tif ( domPromise === false ) {\n\t\ttop = $.Deferred();\n\t\tdomPromise = top.promise();\n\t}\n\t$elem.data( 'ooui-infused', true ); // prevent loops\n\tdata.id = id; // implicit\n\tinfusedChildren = [];\n\tdata = OO.copy( data, null, function deserialize( value ) {\n\t\tvar infused;\n\t\tif ( OO.isPlainObject( value ) ) {\n\t\t\tif ( value.tag ) {\n\t\t\t\tinfused = OO.ui.Element.static.unsafeInfuse( value.tag, domPromise );\n\t\t\t\tinfusedChildren.push( infused );\n\t\t\t\t// Flatten the structure\n\t\t\t\tinfusedChildren.push.apply( infusedChildren, infused.$element.data( 'ooui-infused-children' ) || [] );\n\t\t\t\tinfused.$element.removeData( 'ooui-infused-children' );\n\t\t\t\treturn infused;\n\t\t\t}\n\t\t\tif ( value.html !== undefined ) {\n\t\t\t\treturn new OO.ui.HtmlSnippet( value.html );\n\t\t\t}\n\t\t}\n\t} );\n\t// allow widgets to reuse parts of the DOM\n\tdata = cls.static.reusePreInfuseDOM( $elem[ 0 ], data );\n\t// pick up dynamic state, like focus, value of form inputs, scroll position, etc.\n\tstate = cls.static.gatherPreInfuseState( $elem[ 0 ], data );\n\t// rebuild widget\n\t// eslint-disable-next-line new-cap\n\tobj = new cls( data );\n\t// now replace old DOM with this new DOM.\n\tif ( top ) {\n\t\t// An efficient constructor might be able to reuse the entire DOM tree of the original element,\n\t\t// so only mutate the DOM if we need to.\n\t\tif ( $elem[ 0 ] !== obj.$element[ 0 ] ) {\n\t\t\t$elem.replaceWith( obj.$element );\n\t\t\t// This element is now gone from the DOM, but if anyone is holding a reference to it,\n\t\t\t// let's allow them to OO.ui.infuse() it and do what they expect, see T105828.\n\t\t\t// Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.\n\t\t\t$elem[ 0 ].oouiInfused = obj.$element;\n\t\t}\n\t\ttop.resolve();\n\t}\n\tobj.$element.data( 'ooui-infused', obj );\n\tobj.$element.data( 'ooui-infused-children', infusedChildren );\n\t// set the 'data-ooui' attribute so we can identify infused widgets\n\tobj.$element.attr( 'data-ooui', '' );\n\t// restore dynamic state after the new element is inserted into DOM\n\tdomPromise.done( obj.restorePreInfuseState.bind( obj, state ) );\n\treturn obj;\n};\n\n/**\n * Pick out parts of `node`'s DOM to be reused when infusing a widget.\n *\n * This method **must not** make any changes to the DOM, only find interesting pieces and add them\n * to `config` (which should then be returned). Actual DOM juggling should then be done by the\n * constructor, which will be given the enhanced config.\n *\n * @protected\n * @param {HTMLElement} node\n * @param {Object} config\n * @return {Object}\n */\nOO.ui.Element.static.reusePreInfuseDOM = function ( node, config ) {\n\treturn config;\n};\n\n/**\n * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of an HTML DOM node\n * (and its children) that represent an Element of the same class and the given configuration,\n * generated by the PHP implementation.\n *\n * This method is called just before `node` is detached from the DOM. The return value of this\n * function will be passed to #restorePreInfuseState after the newly created widget's #$element\n * is inserted into DOM to replace `node`.\n *\n * @protected\n * @param {HTMLElement} node\n * @param {Object} config\n * @return {Object}\n */\nOO.ui.Element.static.gatherPreInfuseState = function () {\n\treturn {};\n};\n\n/**\n * Get a jQuery function within a specific document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} context Context to bind the function to\n * @param {jQuery} [$iframe] HTML iframe element that contains the document, omit if document is\n *   not in an iframe\n * @return {Function} Bound jQuery function\n */\nOO.ui.Element.static.getJQuery = function ( context, $iframe ) {\n\tfunction wrapper( selector ) {\n\t\treturn $( selector, wrapper.context );\n\t}\n\n\twrapper.context = this.getDocument( context );\n\n\tif ( $iframe ) {\n\t\twrapper.$iframe = $iframe;\n\t}\n\n\treturn wrapper;\n};\n\n/**\n * Get the document of an element.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Object to get the document for\n * @return {HTMLDocument|null} Document object\n */\nOO.ui.Element.static.getDocument = function ( obj ) {\n\t// jQuery - selections created \"offscreen\" won't have a context, so .context isn't reliable\n\treturn ( obj[ 0 ] && obj[ 0 ].ownerDocument ) ||\n\t\t// Empty jQuery selections might have a context\n\t\tobj.context ||\n\t\t// HTMLElement\n\t\tobj.ownerDocument ||\n\t\t// Window\n\t\tobj.document ||\n\t\t// HTMLDocument\n\t\t( obj.nodeType === Node.DOCUMENT_NODE && obj ) ||\n\t\tnull;\n};\n\n/**\n * Get the window of an element or document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the window for\n * @return {Window} Window object\n */\nOO.ui.Element.static.getWindow = function ( obj ) {\n\tvar doc = this.getDocument( obj );\n\treturn doc.defaultView;\n};\n\n/**\n * Get the direction of an element or document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for\n * @return {string} Text direction, either 'ltr' or 'rtl'\n */\nOO.ui.Element.static.getDir = function ( obj ) {\n\tvar isDoc, isWin;\n\n\tif ( obj instanceof jQuery ) {\n\t\tobj = obj[ 0 ];\n\t}\n\tisDoc = obj.nodeType === Node.DOCUMENT_NODE;\n\tisWin = obj.document !== undefined;\n\tif ( isDoc || isWin ) {\n\t\tif ( isWin ) {\n\t\t\tobj = obj.document;\n\t\t}\n\t\tobj = obj.body;\n\t}\n\treturn $( obj ).css( 'direction' );\n};\n\n/**\n * Get the offset between two frames.\n *\n * TODO: Make this function not use recursion.\n *\n * @static\n * @param {Window} from Window of the child frame\n * @param {Window} [to=window] Window of the parent frame\n * @param {Object} [offset] Offset to start with, used internally\n * @return {Object} Offset object, containing left and top properties\n */\nOO.ui.Element.static.getFrameOffset = function ( from, to, offset ) {\n\tvar i, len, frames, frame, rect;\n\n\tif ( !to ) {\n\t\tto = window;\n\t}\n\tif ( !offset ) {\n\t\toffset = { top: 0, left: 0 };\n\t}\n\tif ( from.parent === from ) {\n\t\treturn offset;\n\t}\n\n\t// Get iframe element\n\tframes = from.parent.document.getElementsByTagName( 'iframe' );\n\tfor ( i = 0, len = frames.length; i < len; i++ ) {\n\t\tif ( frames[ i ].contentWindow === from ) {\n\t\t\tframe = frames[ i ];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Recursively accumulate offset values\n\tif ( frame ) {\n\t\trect = frame.getBoundingClientRect();\n\t\toffset.left += rect.left;\n\t\toffset.top += rect.top;\n\t\tif ( from !== to ) {\n\t\t\tthis.getFrameOffset( from.parent, offset );\n\t\t}\n\t}\n\treturn offset;\n};\n\n/**\n * Get the offset between two elements.\n *\n * The two elements may be in a different frame, but in that case the frame $element is in must\n * be contained in the frame $anchor is in.\n *\n * @static\n * @param {jQuery} $element Element whose position to get\n * @param {jQuery} $anchor Element to get $element's position relative to\n * @return {Object} Translated position coordinates, containing top and left properties\n */\nOO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {\n\tvar iframe, iframePos,\n\t\tpos = $element.offset(),\n\t\tanchorPos = $anchor.offset(),\n\t\telementDocument = this.getDocument( $element ),\n\t\tanchorDocument = this.getDocument( $anchor );\n\n\t// If $element isn't in the same document as $anchor, traverse up\n\twhile ( elementDocument !== anchorDocument ) {\n\t\tiframe = elementDocument.defaultView.frameElement;\n\t\tif ( !iframe ) {\n\t\t\tthrow new Error( '$element frame is not contained in $anchor frame' );\n\t\t}\n\t\tiframePos = $( iframe ).offset();\n\t\tpos.left += iframePos.left;\n\t\tpos.top += iframePos.top;\n\t\telementDocument = iframe.ownerDocument;\n\t}\n\tpos.left -= anchorPos.left;\n\tpos.top -= anchorPos.top;\n\treturn pos;\n};\n\n/**\n * Get element border sizes.\n *\n * @static\n * @param {HTMLElement} el Element to measure\n * @return {Object} Dimensions object with `top`, `left`, `bottom` and `right` properties\n */\nOO.ui.Element.static.getBorders = function ( el ) {\n\tvar doc = el.ownerDocument,\n\t\twin = doc.defaultView,\n\t\tstyle = win.getComputedStyle( el, null ),\n\t\t$el = $( el ),\n\t\ttop = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,\n\t\tleft = parseFloat( style ? style.borderLeftWidth : $el.css( 'borderLeftWidth' ) ) || 0,\n\t\tbottom = parseFloat( style ? style.borderBottomWidth : $el.css( 'borderBottomWidth' ) ) || 0,\n\t\tright = parseFloat( style ? style.borderRightWidth : $el.css( 'borderRightWidth' ) ) || 0;\n\n\treturn {\n\t\ttop: top,\n\t\tleft: left,\n\t\tbottom: bottom,\n\t\tright: right\n\t};\n};\n\n/**\n * Get dimensions of an element or window.\n *\n * @static\n * @param {HTMLElement|Window} el Element to measure\n * @return {Object} Dimensions object with `borders`, `scroll`, `scrollbar` and `rect` properties\n */\nOO.ui.Element.static.getDimensions = function ( el ) {\n\tvar $el, $win,\n\t\tdoc = el.ownerDocument || el.document,\n\t\twin = doc.defaultView;\n\n\tif ( win === el || el === doc.documentElement ) {\n\t\t$win = $( win );\n\t\treturn {\n\t\t\tborders: { top: 0, left: 0, bottom: 0, right: 0 },\n\t\t\tscroll: {\n\t\t\t\ttop: $win.scrollTop(),\n\t\t\t\tleft: $win.scrollLeft()\n\t\t\t},\n\t\t\tscrollbar: { right: 0, bottom: 0 },\n\t\t\trect: {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tbottom: $win.innerHeight(),\n\t\t\t\tright: $win.innerWidth()\n\t\t\t}\n\t\t};\n\t} else {\n\t\t$el = $( el );\n\t\treturn {\n\t\t\tborders: this.getBorders( el ),\n\t\t\tscroll: {\n\t\t\t\ttop: $el.scrollTop(),\n\t\t\t\tleft: $el.scrollLeft()\n\t\t\t},\n\t\t\tscrollbar: {\n\t\t\t\tright: $el.innerWidth() - el.clientWidth,\n\t\t\t\tbottom: $el.innerHeight() - el.clientHeight\n\t\t\t},\n\t\t\trect: el.getBoundingClientRect()\n\t\t};\n\t}\n};\n\n/**\n * Get the number of pixels that an element's content is scrolled to the left.\n *\n * Adapted from <https://github.com/othree/jquery.rtl-scroll-type>.\n * Original code copyright 2012 Wei-Ko Kao, licensed under the MIT License.\n *\n * This function smooths out browser inconsistencies (nicely described in the README at\n * <https://github.com/othree/jquery.rtl-scroll-type>) and produces a result consistent\n * with Firefox's 'scrollLeft', which seems the sanest.\n *\n * @static\n * @method\n * @param {HTMLElement|Window} el Element to measure\n * @return {number} Scroll position from the left.\n *  If the element's direction is LTR, this is a positive number between `0` (initial scroll position)\n *  and `el.scrollWidth - el.clientWidth` (furthest possible scroll position).\n *  If the element's direction is RTL, this is a negative number between `0` (initial scroll position)\n *  and `-el.scrollWidth + el.clientWidth` (furthest possible scroll position).\n */\nOO.ui.Element.static.getScrollLeft = ( function () {\n\tvar rtlScrollType = null;\n\n\tfunction test() {\n\t\tvar $definer = $( '<div dir=\"rtl\" style=\"font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll\">A</div>' ),\n\t\t\tdefiner = $definer[ 0 ];\n\n\t\t$definer.appendTo( 'body' );\n\t\tif ( definer.scrollLeft > 0 ) {\n\t\t\t// Safari, Chrome\n\t\t\trtlScrollType = 'default';\n\t\t} else {\n\t\t\tdefiner.scrollLeft = 1;\n\t\t\tif ( definer.scrollLeft === 0 ) {\n\t\t\t\t// Firefox, old Opera\n\t\t\t\trtlScrollType = 'negative';\n\t\t\t} else {\n\t\t\t\t// Internet Explorer, Edge\n\t\t\t\trtlScrollType = 'reverse';\n\t\t\t}\n\t\t}\n\t\t$definer.remove();\n\t}\n\n\treturn function getScrollLeft( el ) {\n\t\tvar isRoot = el.window === el ||\n\t\t\t\tel === el.ownerDocument.body ||\n\t\t\t\tel === el.ownerDocument.documentElement,\n\t\t\tscrollLeft = isRoot ? $( window ).scrollLeft() : el.scrollLeft,\n\t\t\t// All browsers use the correct scroll type ('negative') on the root, so don't\n\t\t\t// do any fixups when looking at the root element\n\t\t\tdirection = isRoot ? 'ltr' : $( el ).css( 'direction' );\n\n\t\tif ( direction === 'rtl' ) {\n\t\t\tif ( rtlScrollType === null ) {\n\t\t\t\ttest();\n\t\t\t}\n\t\t\tif ( rtlScrollType === 'reverse' ) {\n\t\t\t\tscrollLeft = -scrollLeft;\n\t\t\t} else if ( rtlScrollType === 'default' ) {\n\t\t\t\tscrollLeft = scrollLeft - el.scrollWidth + el.clientWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn scrollLeft;\n\t};\n}() );\n\n/**\n * Get the root scrollable element of given element's document.\n *\n * On Blink-based browsers (Chrome etc.), `document.documentElement` can't be used to get or set\n * the scrollTop property; instead we have to use `document.body`. Changing and testing the value\n * lets us use 'body' or 'documentElement' based on what is working.\n *\n * https://code.google.com/p/chromium/issues/detail?id=303131\n *\n * @static\n * @param {HTMLElement} el Element to find root scrollable parent for\n * @return {HTMLElement} Scrollable parent, `document.body` or `document.documentElement`\n *     depending on browser\n */\nOO.ui.Element.static.getRootScrollableElement = function ( el ) {\n\tvar scrollTop, body;\n\n\tif ( OO.ui.scrollableElement === undefined ) {\n\t\tbody = el.ownerDocument.body;\n\t\tscrollTop = body.scrollTop;\n\t\tbody.scrollTop = 1;\n\n\t\t// In some browsers (observed in Chrome 56 on Linux Mint 18.1),\n\t\t// body.scrollTop doesn't become exactly 1, but a fractional value like 0.76\n\t\tif ( Math.round( body.scrollTop ) === 1 ) {\n\t\t\tbody.scrollTop = scrollTop;\n\t\t\tOO.ui.scrollableElement = 'body';\n\t\t} else {\n\t\t\tOO.ui.scrollableElement = 'documentElement';\n\t\t}\n\t}\n\n\treturn el.ownerDocument[ OO.ui.scrollableElement ];\n};\n\n/**\n * Get closest scrollable container.\n *\n * Traverses up until either a scrollable element or the root is reached, in which case the root\n * scrollable element will be returned (see #getRootScrollableElement).\n *\n * @static\n * @param {HTMLElement} el Element to find scrollable container for\n * @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either\n * @return {HTMLElement} Closest scrollable container\n */\nOO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {\n\tvar i, val,\n\t\t// Browsers do not correctly return the computed value of 'overflow' when 'overflow-x' and\n\t\t// 'overflow-y' have different values, so we need to check the separate properties.\n\t\tprops = [ 'overflow-x', 'overflow-y' ],\n\t\t$parent = $( el ).parent();\n\n\tif ( dimension === 'x' || dimension === 'y' ) {\n\t\tprops = [ 'overflow-' + dimension ];\n\t}\n\n\t// Special case for the document root (which doesn't really have any scrollable container, since\n\t// it is the ultimate scrollable container, but this is probably saner than null or exception)\n\tif ( $( el ).is( 'html, body' ) ) {\n\t\treturn this.getRootScrollableElement( el );\n\t}\n\n\twhile ( $parent.length ) {\n\t\tif ( $parent[ 0 ] === this.getRootScrollableElement( el ) ) {\n\t\t\treturn $parent[ 0 ];\n\t\t}\n\t\ti = props.length;\n\t\twhile ( i-- ) {\n\t\t\tval = $parent.css( props[ i ] );\n\t\t\t// We assume that elements with 'overflow' (in any direction) set to 'hidden' will never be\n\t\t\t// scrolled in that direction, but they can actually be scrolled programatically. The user can\n\t\t\t// unintentionally perform a scroll in such case even if the application doesn't scroll\n\t\t\t// programatically, e.g. when jumping to an anchor, or when using built-in find functionality.\n\t\t\t// This could cause funny issues...\n\t\t\tif ( val === 'auto' || val === 'scroll' ) {\n\t\t\t\treturn $parent[ 0 ];\n\t\t\t}\n\t\t}\n\t\t$parent = $parent.parent();\n\t}\n\t// The element is unattached... return something mostly sane\n\treturn this.getRootScrollableElement( el );\n};\n\n/**\n * Scroll element into view.\n *\n * @static\n * @param {HTMLElement} el Element to scroll into view\n * @param {Object} [config] Configuration options\n * @param {string} [config.duration='fast'] jQuery animation duration value\n * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit\n *  to scroll in both directions\n * @return {jQuery.Promise} Promise which resolves when the scroll is complete\n */\nOO.ui.Element.static.scrollIntoView = function ( el, config ) {\n\tvar position, animations, container, $container, elementDimensions, containerDimensions, $window,\n\t\tdeferred = $.Deferred();\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\tanimations = {};\n\tcontainer = this.getClosestScrollableContainer( el, config.direction );\n\t$container = $( container );\n\telementDimensions = this.getDimensions( el );\n\tcontainerDimensions = this.getDimensions( container );\n\t$window = $( this.getWindow( el ) );\n\n\t// Compute the element's position relative to the container\n\tif ( $container.is( 'html, body' ) ) {\n\t\t// If the scrollable container is the root, this is easy\n\t\tposition = {\n\t\t\ttop: elementDimensions.rect.top,\n\t\t\tbottom: $window.innerHeight() - elementDimensions.rect.bottom,\n\t\t\tleft: elementDimensions.rect.left,\n\t\t\tright: $window.innerWidth() - elementDimensions.rect.right\n\t\t};\n\t} else {\n\t\t// Otherwise, we have to subtract el's coordinates from container's coordinates\n\t\tposition = {\n\t\t\ttop: elementDimensions.rect.top - ( containerDimensions.rect.top + containerDimensions.borders.top ),\n\t\t\tbottom: containerDimensions.rect.bottom - containerDimensions.borders.bottom - containerDimensions.scrollbar.bottom - elementDimensions.rect.bottom,\n\t\t\tleft: elementDimensions.rect.left - ( containerDimensions.rect.left + containerDimensions.borders.left ),\n\t\t\tright: containerDimensions.rect.right - containerDimensions.borders.right - containerDimensions.scrollbar.right - elementDimensions.rect.right\n\t\t};\n\t}\n\n\tif ( !config.direction || config.direction === 'y' ) {\n\t\tif ( position.top < 0 ) {\n\t\t\tanimations.scrollTop = containerDimensions.scroll.top + position.top;\n\t\t} else if ( position.top > 0 && position.bottom < 0 ) {\n\t\t\tanimations.scrollTop = containerDimensions.scroll.top + Math.min( position.top, -position.bottom );\n\t\t}\n\t}\n\tif ( !config.direction || config.direction === 'x' ) {\n\t\tif ( position.left < 0 ) {\n\t\t\tanimations.scrollLeft = containerDimensions.scroll.left + position.left;\n\t\t} else if ( position.left > 0 && position.right < 0 ) {\n\t\t\tanimations.scrollLeft = containerDimensions.scroll.left + Math.min( position.left, -position.right );\n\t\t}\n\t}\n\tif ( !$.isEmptyObject( animations ) ) {\n\t\t$container.stop( true ).animate( animations, config.duration === undefined ? 'fast' : config.duration );\n\t\t$container.queue( function ( next ) {\n\t\t\tdeferred.resolve();\n\t\t\tnext();\n\t\t} );\n\t} else {\n\t\tdeferred.resolve();\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Force the browser to reconsider whether it really needs to render scrollbars inside the element\n * and reserve space for them, because it probably doesn't.\n *\n * Workaround primarily for <https://code.google.com/p/chromium/issues/detail?id=387290>, but also\n * similar bugs in other browsers. \"Just\" forcing a reflow is not sufficient in all cases, we need\n * to first actually detach (or hide, but detaching is simpler) all children, *then* force a reflow,\n * and then reattach (or show) them back.\n *\n * @static\n * @param {HTMLElement} el Element to reconsider the scrollbars on\n */\nOO.ui.Element.static.reconsiderScrollbars = function ( el ) {\n\tvar i, len, scrollLeft, scrollTop, nodes = [];\n\t// Save scroll position\n\tscrollLeft = el.scrollLeft;\n\tscrollTop = el.scrollTop;\n\t// Detach all children\n\twhile ( el.firstChild ) {\n\t\tnodes.push( el.firstChild );\n\t\tel.removeChild( el.firstChild );\n\t}\n\t// Force reflow\n\tvoid el.offsetHeight;\n\t// Reattach all children\n\tfor ( i = 0, len = nodes.length; i < len; i++ ) {\n\t\tel.appendChild( nodes[ i ] );\n\t}\n\t// Restore scroll position (no-op if scrollbars disappeared)\n\tel.scrollLeft = scrollLeft;\n\tel.scrollTop = scrollTop;\n};\n\n/* Methods */\n\n/**\n * Toggle visibility of an element.\n *\n * @param {boolean} [show] Make element visible, omit to toggle visibility\n * @fires visible\n * @chainable\n */\nOO.ui.Element.prototype.toggle = function ( show ) {\n\tshow = show === undefined ? !this.visible : !!show;\n\n\tif ( show !== this.isVisible() ) {\n\t\tthis.visible = show;\n\t\tthis.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );\n\t\tthis.emit( 'toggle', show );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if element is visible.\n *\n * @return {boolean} element is visible\n */\nOO.ui.Element.prototype.isVisible = function () {\n\treturn this.visible;\n};\n\n/**\n * Get element data.\n *\n * @return {Mixed} Element data\n */\nOO.ui.Element.prototype.getData = function () {\n\treturn this.data;\n};\n\n/**\n * Set element data.\n *\n * @param {Mixed} data Element data\n * @chainable\n */\nOO.ui.Element.prototype.setData = function ( data ) {\n\tthis.data = data;\n\treturn this;\n};\n\n/**\n * Set the element has an 'id' attribute.\n *\n * @param {string} id\n * @chainable\n */\nOO.ui.Element.prototype.setElementId = function ( id ) {\n\tthis.elementId = id;\n\tthis.$element.attr( 'id', id );\n\treturn this;\n};\n\n/**\n * Ensure that the element has an 'id' attribute, setting it to an unique value if it's missing,\n * and return its value.\n *\n * @return {string}\n */\nOO.ui.Element.prototype.getElementId = function () {\n\tif ( this.elementId === null ) {\n\t\tthis.setElementId( OO.ui.generateElementId() );\n\t}\n\treturn this.elementId;\n};\n\n/**\n * Check if element supports one or more methods.\n *\n * @param {string|string[]} methods Method or list of methods to check\n * @return {boolean} All methods are supported\n */\nOO.ui.Element.prototype.supports = function ( methods ) {\n\tvar i, len,\n\t\tsupport = 0;\n\n\tmethods = Array.isArray( methods ) ? methods : [ methods ];\n\tfor ( i = 0, len = methods.length; i < len; i++ ) {\n\t\tif ( $.isFunction( this[ methods[ i ] ] ) ) {\n\t\t\tsupport++;\n\t\t}\n\t}\n\n\treturn methods.length === support;\n};\n\n/**\n * Update the theme-provided classes.\n *\n * @localdoc This is called in element mixins and widget classes any time state changes.\n *   Updating is debounced, minimizing overhead of changing multiple attributes and\n *   guaranteeing that theme updates do not occur within an element's constructor\n */\nOO.ui.Element.prototype.updateThemeClasses = function () {\n\tOO.ui.theme.queueUpdateElementClasses( this );\n};\n\n/**\n * Get the HTML tag name.\n *\n * Override this method to base the result on instance information.\n *\n * @return {string} HTML tag name\n */\nOO.ui.Element.prototype.getTagName = function () {\n\treturn this.constructor.static.tagName;\n};\n\n/**\n * Check if the element is attached to the DOM\n *\n * @return {boolean} The element is attached to the DOM\n */\nOO.ui.Element.prototype.isElementAttached = function () {\n\treturn $.contains( this.getElementDocument(), this.$element[ 0 ] );\n};\n\n/**\n * Get the DOM document.\n *\n * @return {HTMLDocument} Document object\n */\nOO.ui.Element.prototype.getElementDocument = function () {\n\t// Don't cache this in other ways either because subclasses could can change this.$element\n\treturn OO.ui.Element.static.getDocument( this.$element );\n};\n\n/**\n * Get the DOM window.\n *\n * @return {Window} Window object\n */\nOO.ui.Element.prototype.getElementWindow = function () {\n\treturn OO.ui.Element.static.getWindow( this.$element );\n};\n\n/**\n * Get closest scrollable container.\n *\n * @return {HTMLElement} Closest scrollable container\n */\nOO.ui.Element.prototype.getClosestScrollableElementContainer = function () {\n\treturn OO.ui.Element.static.getClosestScrollableContainer( this.$element[ 0 ] );\n};\n\n/**\n * Get group element is in.\n *\n * @return {OO.ui.mixin.GroupElement|null} Group element, null if none\n */\nOO.ui.Element.prototype.getElementGroup = function () {\n\treturn this.elementGroup;\n};\n\n/**\n * Set group element is in.\n *\n * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none\n * @chainable\n */\nOO.ui.Element.prototype.setElementGroup = function ( group ) {\n\tthis.elementGroup = group;\n\treturn this;\n};\n\n/**\n * Scroll element into view.\n *\n * @param {Object} [config] Configuration options\n * @return {jQuery.Promise} Promise which resolves when the scroll is complete\n */\nOO.ui.Element.prototype.scrollElementIntoView = function ( config ) {\n\tif (\n\t\t!this.isElementAttached() ||\n\t\t!this.isVisible() ||\n\t\t( this.getElementGroup() && !this.getElementGroup().isVisible() )\n\t) {\n\t\treturn $.Deferred().resolve();\n\t}\n\treturn OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );\n};\n\n/**\n * Restore the pre-infusion dynamic state for this widget.\n *\n * This method is called after #$element has been inserted into DOM. The parameter is the return\n * value of #gatherPreInfuseState.\n *\n * @protected\n * @param {Object} state\n */\nOO.ui.Element.prototype.restorePreInfuseState = function () {\n};\n","/**\n * Wraps an HTML snippet for use with configuration values which default\n * to strings.  This bypasses the default html-escaping done to string\n * values.\n *\n * @class\n *\n * @constructor\n * @param {string} [content] HTML content\n */\nOO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {\n\t// Properties\n\tthis.content = content;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.HtmlSnippet );\n\n/* Methods */\n\n/**\n * Render into HTML.\n *\n * @return {string} Unchanged HTML snippet.\n */\nOO.ui.HtmlSnippet.prototype.toString = function () {\n\treturn this.content;\n};\n","/**\n * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way\n * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.\n * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},\n * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},\n * {@link OO.ui.HorizontalLayout HorizontalLayout}, and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.Layout = function OoUiLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Layout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-layout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Layout, OO.ui.Element );\nOO.mixinClass( OO.ui.Layout, OO.EventEmitter );\n","/**\n * Widgets are compositions of one or more OOjs UI elements that users can both view\n * and interact with. All widgets can be configured and modified via a standard API,\n * and their state can change dynamically according to a model.\n *\n * @abstract\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [disabled=false] Disable the widget. Disabled widgets cannot be used and their\n *  appearance reflects this state.\n */\nOO.ui.Widget = function OoUiWidget( config ) {\n\t// Initialize config\n\tconfig = $.extend( { disabled: false }, config );\n\n\t// Parent constructor\n\tOO.ui.Widget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\n\t// Properties\n\tthis.disabled = null;\n\tthis.wasDisabled = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-widget' );\n\tthis.setDisabled( !!config.disabled );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Widget, OO.ui.Element );\nOO.mixinClass( OO.ui.Widget, OO.EventEmitter );\n\n/* Events */\n\n/**\n * @event disable\n *\n * A 'disable' event is emitted when the disabled state of the widget changes\n * (i.e. on disable **and** enable).\n *\n * @param {boolean} disabled Widget is disabled\n */\n\n/**\n * @event toggle\n *\n * A 'toggle' event is emitted when the visibility of the widget changes.\n *\n * @param {boolean} visible Widget is visible\n */\n\n/* Methods */\n\n/**\n * Check if the widget is disabled.\n *\n * @return {boolean} Widget is disabled\n */\nOO.ui.Widget.prototype.isDisabled = function () {\n\treturn this.disabled;\n};\n\n/**\n * Set the 'disabled' state of the widget.\n *\n * When a widget is disabled, it cannot be used and its appearance is updated to reflect this state.\n *\n * @param {boolean} disabled Disable widget\n * @chainable\n */\nOO.ui.Widget.prototype.setDisabled = function ( disabled ) {\n\tvar isDisabled;\n\n\tthis.disabled = !!disabled;\n\tisDisabled = this.isDisabled();\n\tif ( isDisabled !== this.wasDisabled ) {\n\t\tthis.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );\n\t\tthis.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );\n\t\tthis.$element.attr( 'aria-disabled', isDisabled.toString() );\n\t\tthis.emit( 'disable', isDisabled );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.wasDisabled = isDisabled;\n\n\treturn this;\n};\n\n/**\n * Update the disabled state, in case of changes in parent widget.\n *\n * @chainable\n */\nOO.ui.Widget.prototype.updateDisabled = function () {\n\tthis.setDisabled( this.disabled );\n\treturn this;\n};\n\n/**\n * Get an ID of a labelable node which is part of this widget, if any, to be used for `<label for>`\n * value.\n *\n * If this function returns null, the widget should have a meaningful #simulateLabelClick method\n * instead.\n *\n * @return {string|null} The ID of the labelable element\n */\nOO.ui.Widget.prototype.getInputId = function () {\n\treturn null;\n};\n\n/**\n * Simulate the behavior of clicking on a label (a HTML `<label>` element) bound to this input.\n * HTML only allows `<label>` to act on specific \"labelable\" elements; complex widgets might need to\n * override this method to provide intuitive, accessible behavior.\n *\n * By default, this does nothing. OO.ui.mixin.TabIndexedElement overrides it for focusable widgets.\n * Individual widgets may override it too.\n *\n * This method is called by OO.ui.LabelWidget and OO.ui.FieldLayout. It should not be called\n * directly.\n */\nOO.ui.Widget.prototype.simulateLabelClick = function () {\n};\n","/**\n * Theme logic.\n *\n * @abstract\n * @class\n *\n * @constructor\n */\nOO.ui.Theme = function OoUiTheme() {\n\tthis.elementClassesQueue = [];\n\tthis.debouncedUpdateQueuedElementClasses = OO.ui.debounce( this.updateQueuedElementClasses );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.Theme );\n\n/* Methods */\n\n/**\n * Get a list of classes to be applied to a widget.\n *\n * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,\n * otherwise state transitions will not work properly.\n *\n * @param {OO.ui.Element} element Element for which to get classes\n * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists\n */\nOO.ui.Theme.prototype.getElementClasses = function () {\n\treturn { on: [], off: [] };\n};\n\n/**\n * Update CSS classes provided by the theme.\n *\n * For elements with theme logic hooks, this should be called any time there's a state change.\n *\n * @param {OO.ui.Element} element Element for which to update classes\n */\nOO.ui.Theme.prototype.updateElementClasses = function ( element ) {\n\tvar $elements = $( [] ),\n\t\tclasses = this.getElementClasses( element );\n\n\tif ( element.$icon ) {\n\t\t$elements = $elements.add( element.$icon );\n\t}\n\tif ( element.$indicator ) {\n\t\t$elements = $elements.add( element.$indicator );\n\t}\n\n\t$elements\n\t\t.removeClass( classes.off.join( ' ' ) )\n\t\t.addClass( classes.on.join( ' ' ) );\n};\n\n/**\n * @private\n */\nOO.ui.Theme.prototype.updateQueuedElementClasses = function () {\n\tvar i;\n\tfor ( i = 0; i < this.elementClassesQueue.length; i++ ) {\n\t\tthis.updateElementClasses( this.elementClassesQueue[ i ] );\n\t}\n\t// Clear the queue\n\tthis.elementClassesQueue = [];\n};\n\n/**\n * Queue #updateElementClasses to be called for this element.\n *\n * @localdoc QUnit tests override this method to directly call #queueUpdateElementClasses,\n *   to make them synchronous.\n *\n * @param {OO.ui.Element} element Element for which to update classes\n */\nOO.ui.Theme.prototype.queueUpdateElementClasses = function ( element ) {\n\t// Keep items in the queue unique. Use lastIndexOf to start checking from the end because that's\n\t// the most common case (this method is often called repeatedly for the same element).\n\tif ( this.elementClassesQueue.lastIndexOf( element ) !== -1 ) {\n\t\treturn;\n\t}\n\tthis.elementClassesQueue.push( element );\n\tthis.debouncedUpdateQueuedElementClasses();\n};\n\n/**\n * Get the transition duration in milliseconds for dialogs opening/closing\n *\n * The dialog should be fully rendered this many milliseconds after the\n * ready process has executed.\n *\n * @return {number} Transition duration in milliseconds\n */\nOO.ui.Theme.prototype.getDialogTransitionDuration = function () {\n\treturn 0;\n};\n","/**\n * The TabIndexedElement class is an attribute mixin used to add additional functionality to an\n * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the\n * order in which users will navigate through the focusable elements via the \"tab\" key.\n *\n *     @example\n *     // TabIndexedElement is mixed into the ButtonWidget class\n *     // to provide a tabIndex property.\n *     var button1 = new OO.ui.ButtonWidget( {\n *         label: 'fourth',\n *         tabIndex: 4\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'second',\n *         tabIndex: 2\n *     } );\n *     var button3 = new OO.ui.ButtonWidget( {\n *         label: 'third',\n *         tabIndex: 3\n *     } );\n *     var button4 = new OO.ui.ButtonWidget( {\n *         label: 'first',\n *         tabIndex: 1\n *     } );\n *     $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$tabIndexed] The element that should use the tabindex functionality. By default,\n *  the functionality is applied to the element created by the class ($element). If a different element is specified, the tabindex\n *  functionality will be applied to it instead.\n * @cfg {string|number|null} [tabIndex=0] Number that specifies the element’s position in the tab-navigation\n *  order (e.g., 1 for the first focusable element). Use 0 to use the default navigation order; use -1\n *  to remove the element from the tab-navigation flow.\n */\nOO.ui.mixin.TabIndexedElement = function OoUiMixinTabIndexedElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { tabIndex: 0 }, config );\n\n\t// Properties\n\tthis.$tabIndexed = null;\n\tthis.tabIndex = null;\n\n\t// Events\n\tthis.connect( this, { disable: 'onTabIndexedElementDisable' } );\n\n\t// Initialization\n\tthis.setTabIndex( config.tabIndex );\n\tthis.setTabIndexedElement( config.$tabIndexed || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Set the element that should use the tabindex functionality.\n *\n * This method is used to retarget a tabindex mixin so that its functionality applies\n * to the specified element. If an element is currently using the functionality, the mixin’s\n * effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $tabIndexed Element that should use the tabindex functionality\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {\n\tvar tabIndex = this.tabIndex;\n\t// Remove attributes from old $tabIndexed\n\tthis.setTabIndex( null );\n\t// Force update of new $tabIndexed\n\tthis.$tabIndexed = $tabIndexed;\n\tthis.tabIndex = tabIndex;\n\treturn this.updateTabIndex();\n};\n\n/**\n * Set the value of the tabindex.\n *\n * @param {string|number|null} tabIndex Tabindex value, or `null` for no tabindex\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {\n\ttabIndex = /^-?\\d+$/.test( tabIndex ) ? Number( tabIndex ) : null;\n\n\tif ( this.tabIndex !== tabIndex ) {\n\t\tthis.tabIndex = tabIndex;\n\t\tthis.updateTabIndex();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the `tabindex` attribute, in case of changes to tab index or\n * disabled state.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.updateTabIndex = function () {\n\tif ( this.$tabIndexed ) {\n\t\tif ( this.tabIndex !== null ) {\n\t\t\t// Do not index over disabled elements\n\t\t\tthis.$tabIndexed.attr( {\n\t\t\t\ttabindex: this.isDisabled() ? -1 : this.tabIndex,\n\t\t\t\t// Support: ChromeVox and NVDA\n\t\t\t\t// These do not seem to inherit aria-disabled from parent elements\n\t\t\t\t'aria-disabled': this.isDisabled().toString()\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.$tabIndexed.removeAttr( 'tabindex aria-disabled' );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Handle disable events.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.mixin.TabIndexedElement.prototype.onTabIndexedElementDisable = function () {\n\tthis.updateTabIndex();\n};\n\n/**\n * Get the value of the tabindex.\n *\n * @return {number|null} Tabindex value\n */\nOO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {\n\treturn this.tabIndex;\n};\n\n/**\n * Get an ID of a focusable element of this widget, if any, to be used for `<label for>` value.\n *\n * If the element already has an ID then that is returned, otherwise unique ID is\n * generated, set on the element, and returned.\n *\n * @return {string|null} The ID of the focusable element\n */\nOO.ui.mixin.TabIndexedElement.prototype.getInputId = function () {\n\tvar id;\n\n\tif ( !this.$tabIndexed ) {\n\t\treturn null;\n\t}\n\tif ( !this.isLabelableNode( this.$tabIndexed ) ) {\n\t\treturn null;\n\t}\n\n\tid = this.$tabIndexed.attr( 'id' );\n\tif ( id === undefined ) {\n\t\tid = OO.ui.generateElementId();\n\t\tthis.$tabIndexed.attr( 'id', id );\n\t}\n\n\treturn id;\n};\n\n/**\n * Whether the node is 'labelable' according to the HTML spec\n * (i.e., whether it can be interacted with through a `<label for=\"…\">`).\n * See: <https://html.spec.whatwg.org/multipage/forms.html#category-label>.\n *\n * @private\n * @param {jQuery} $node\n * @return {boolean}\n */\nOO.ui.mixin.TabIndexedElement.prototype.isLabelableNode = function ( $node ) {\n\tvar\n\t\tlabelableTags = [ 'button', 'meter', 'output', 'progress', 'select', 'textarea' ],\n\t\ttagName = $node.prop( 'tagName' ).toLowerCase();\n\n\tif ( tagName === 'input' && $node.attr( 'type' ) !== 'hidden' ) {\n\t\treturn true;\n\t}\n\tif ( labelableTags.indexOf( tagName ) !== -1 ) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/**\n * Focus this element.\n *\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$tabIndexed.focus();\n\t}\n\treturn this;\n};\n\n/**\n * Blur this element.\n *\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.blur = function () {\n\tthis.$tabIndexed.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.Widget\n */\nOO.ui.mixin.TabIndexedElement.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * ButtonElement is often mixed into other classes to generate a button, which is a clickable\n * interface element that can be configured with access keys for accessibility.\n * See the [OOjs UI documentation on MediaWiki] [1] for examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$button] The button element created by the class.\n *  If this configuration is omitted, the button element will use a generated `<a>`.\n * @cfg {boolean} [framed=true] Render the button with a frame\n */\nOO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$button = null;\n\tthis.framed = null;\n\tthis.active = config.active !== undefined && config.active;\n\tthis.onMouseUpHandler = this.onMouseUp.bind( this );\n\tthis.onMouseDownHandler = this.onMouseDown.bind( this );\n\tthis.onKeyDownHandler = this.onKeyDown.bind( this );\n\tthis.onKeyUpHandler = this.onKeyUp.bind( this );\n\tthis.onClickHandler = this.onClick.bind( this );\n\tthis.onKeyPressHandler = this.onKeyPress.bind( this );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonElement' );\n\tthis.toggleFramed( config.framed === undefined || config.framed );\n\tthis.setButtonElement( config.$button || $( '<a>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.ButtonElement );\n\n/* Static Properties */\n\n/**\n * Cancel mouse down events.\n *\n * This property is usually set to `true` to prevent the focus from changing when the button is clicked.\n * Classes such as {@link OO.ui.mixin.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}\n * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a\n * parent widget.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.mixin.ButtonElement.static.cancelButtonMouseDownEvents = true;\n\n/* Events */\n\n/**\n * A 'click' event is emitted when the button element is clicked.\n *\n * @event click\n */\n\n/* Methods */\n\n/**\n * Set the button element.\n *\n * This method is used to retarget a button mixin so that its functionality applies to\n * the specified button element instead of the one created by the class. If a button element\n * is already set, the method will remove the mixin’s effect on that element.\n *\n * @param {jQuery} $button Element to use as button\n */\nOO.ui.mixin.ButtonElement.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button\n\t\t\t.removeClass( 'oo-ui-buttonElement-button' )\n\t\t\t.removeAttr( 'role accesskey' )\n\t\t\t.off( {\n\t\t\t\tmousedown: this.onMouseDownHandler,\n\t\t\t\tkeydown: this.onKeyDownHandler,\n\t\t\t\tclick: this.onClickHandler,\n\t\t\t\tkeypress: this.onKeyPressHandler\n\t\t\t} );\n\t}\n\n\tthis.$button = $button\n\t\t.addClass( 'oo-ui-buttonElement-button' )\n\t\t.on( {\n\t\t\tmousedown: this.onMouseDownHandler,\n\t\t\tkeydown: this.onKeyDownHandler,\n\t\t\tclick: this.onClickHandler,\n\t\t\tkeypress: this.onKeyPressHandler\n\t\t} );\n\n\t// Add `role=\"button\"` on `<a>` elements, where it's needed\n\t// `toUppercase()` is added for XHTML documents\n\tif ( this.$button.prop( 'tagName' ).toUpperCase() === 'A' ) {\n\t\tthis.$button.attr( 'role', 'button' );\n\t}\n};\n\n/**\n * Handles mouse down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.mixin.ButtonElement.prototype.onMouseDown = function ( e ) {\n\tif ( this.isDisabled() || e.which !== OO.ui.MouseButtons.LEFT ) {\n\t\treturn;\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonElement-pressed' );\n\t// Run the mouseup handler no matter where the mouse is when the button is let go, so we can\n\t// reliably remove the pressed class\n\tthis.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );\n\t// Prevent change of focus unless specifically configured otherwise\n\tif ( this.constructor.static.cancelButtonMouseDownEvents ) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handles mouse up events.\n *\n * @protected\n * @param {MouseEvent} e Mouse up event\n */\nOO.ui.mixin.ButtonElement.prototype.onMouseUp = function ( e ) {\n\tif ( this.isDisabled() || e.which !== OO.ui.MouseButtons.LEFT ) {\n\t\treturn;\n\t}\n\tthis.$element.removeClass( 'oo-ui-buttonElement-pressed' );\n\t// Stop listening for mouseup, since we only needed this once\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );\n};\n\n/**\n * Handles mouse click events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse click event\n * @fires click\n */\nOO.ui.mixin.ButtonElement.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tif ( this.emit( 'click' ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Handles key down events.\n *\n * @protected\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyDown = function ( e ) {\n\tif ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {\n\t\treturn;\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonElement-pressed' );\n\t// Run the keyup handler no matter where the key is when the button is let go, so we can\n\t// reliably remove the pressed class\n\tthis.getElementDocument().addEventListener( 'keyup', this.onKeyUpHandler, true );\n};\n\n/**\n * Handles key up events.\n *\n * @protected\n * @param {KeyboardEvent} e Key up event\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyUp = function ( e ) {\n\tif ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {\n\t\treturn;\n\t}\n\tthis.$element.removeClass( 'oo-ui-buttonElement-pressed' );\n\t// Stop listening for keyup, since we only needed this once\n\tthis.getElementDocument().removeEventListener( 'keyup', this.onKeyUpHandler, true );\n};\n\n/**\n * Handles key press events.\n *\n * @protected\n * @param {jQuery.Event} e Key press event\n * @fires click\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tif ( this.emit( 'click' ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Check if button has a frame.\n *\n * @return {boolean} Button is framed\n */\nOO.ui.mixin.ButtonElement.prototype.isFramed = function () {\n\treturn this.framed;\n};\n\n/**\n * Render the button with or without a frame. Omit the `framed` parameter to toggle the button frame on and off.\n *\n * @param {boolean} [framed] Make button framed, omit to toggle\n * @chainable\n */\nOO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {\n\tframed = framed === undefined ? !this.framed : !!framed;\n\tif ( framed !== this.framed ) {\n\t\tthis.framed = framed;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-buttonElement-frameless', !framed )\n\t\t\t.toggleClass( 'oo-ui-buttonElement-framed', framed );\n\t\tthis.updateThemeClasses();\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the button's active state.\n *\n * The active state can be set on:\n *\n *  - {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} when it is selected\n *  - {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} when it is toggle on\n *  - {@link OO.ui.ButtonWidget ButtonWidget} when clicking the button would only refresh the page\n *\n * @protected\n * @param {boolean} value Make button active\n * @chainable\n */\nOO.ui.mixin.ButtonElement.prototype.setActive = function ( value ) {\n\tthis.active = !!value;\n\tthis.$element.toggleClass( 'oo-ui-buttonElement-active', this.active );\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Check if the button is active\n *\n * @protected\n * @return {boolean} The button is active\n */\nOO.ui.mixin.ButtonElement.prototype.isActive = function () {\n\treturn this.active;\n};\n","/**\n * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or\n * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing\n * items from the group is done through the interface the class provides.\n * For more information, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups\n *\n * @abstract\n * @mixins OO.EmitterList\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$group] The container element created by the class. If this configuration\n *  is omitted, the group element will use a generated `<div>`.\n */\nOO.ui.mixin.GroupElement = function OoUiMixinGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Mixin constructors\n\tOO.EmitterList.call( this, config );\n\n\t// Properties\n\tthis.$group = null;\n\n\t// Initialization\n\tthis.setGroupElement( config.$group || $( '<div>' ) );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.GroupElement, OO.EmitterList );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of selected items changes.\n *\n * @param {OO.ui.Element[]} items Items currently in the group\n */\n\n/* Methods */\n\n/**\n * Set the group element.\n *\n * If an element is already set, items will be moved to the new element.\n *\n * @param {jQuery} $group Element to use as group\n */\nOO.ui.mixin.GroupElement.prototype.setGroupElement = function ( $group ) {\n\tvar i, len;\n\n\tthis.$group = $group;\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.$group.append( this.items[ i ].$element );\n\t}\n};\n\n/**\n * Get an item by its data.\n *\n * Only the first item with matching data will be returned. To return all matching items,\n * use the #getItemsFromData method.\n *\n * @param {Object} data Item data to search for\n * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists\n */\nOO.ui.mixin.GroupElement.prototype.getItemFromData = function ( data ) {\n\tvar i, len, item,\n\t\thash = OO.getHash( data );\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( hash === OO.getHash( item.getData() ) ) {\n\t\t\treturn item;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * Get items by their data.\n *\n * All items with matching data will be returned. To return only the first match, use the #getItemFromData method instead.\n *\n * @param {Object} data Item data to search for\n * @return {OO.ui.Element[]} Items with equivalent data\n */\nOO.ui.mixin.GroupElement.prototype.getItemsFromData = function ( data ) {\n\tvar i, len, item,\n\t\thash = OO.getHash( data ),\n\t\titems = [];\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( hash === OO.getHash( item.getData() ) ) {\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\treturn items;\n};\n\n/**\n * Add items to the group.\n *\n * Items will be added to the end of the group array unless the optional `index` parameter specifies\n * a different insertion point. Adding an existing item will move it to the end of the array or the point specified by the `index`.\n *\n * @param {OO.ui.Element[]} items An array of items to add to the group\n * @param {number} [index] Index of the insertion point\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {\n\t// Mixin method\n\tOO.EmitterList.prototype.addItems.call( this, items, index );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.mixin.GroupElement.prototype.moveItem = function ( items, newIndex ) {\n\t// insertItemElements expects this.items to not have been modified yet, so call before the mixin\n\tthis.insertItemElements( items, newIndex );\n\n\t// Mixin method\n\tnewIndex = OO.EmitterList.prototype.moveItem.call( this, items, newIndex );\n\n\treturn newIndex;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.mixin.GroupElement.prototype.insertItem = function ( item, index ) {\n\titem.setElementGroup( this );\n\tthis.insertItemElements( item, index );\n\n\t// Mixin method\n\tindex = OO.EmitterList.prototype.insertItem.call( this, item, index );\n\n\treturn index;\n};\n\n/**\n * Insert elements into the group\n *\n * @private\n * @param {OO.ui.Element} itemWidget Item to insert\n * @param {number} index Insertion index\n */\nOO.ui.mixin.GroupElement.prototype.insertItemElements = function ( itemWidget, index ) {\n\tif ( index === undefined || index < 0 || index >= this.items.length ) {\n\t\tthis.$group.append( itemWidget.$element );\n\t} else if ( index === 0 ) {\n\t\tthis.$group.prepend( itemWidget.$element );\n\t} else {\n\t\tthis.items[ index ].$element.before( itemWidget.$element );\n\t}\n};\n\n/**\n * Remove the specified items from a group.\n *\n * Removed items are detached (not removed) from the DOM so that they may be reused.\n * To remove all items from a group, you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Element[]} items An array of items to remove\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {\n\tvar i, len, item, index;\n\n\t// Remove specific items elements\n\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\titem = items[ i ];\n\t\tindex = this.items.indexOf( item );\n\t\tif ( index !== -1 ) {\n\t\t\titem.setElementGroup( null );\n\t\t\titem.$element.detach();\n\t\t}\n\t}\n\n\t// Mixin method\n\tOO.EmitterList.prototype.removeItems.call( this, items );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n\n/**\n * Clear all items from the group.\n *\n * Cleared items are detached from the DOM, not removed, so that they may be reused.\n * To remove only a subset of items from a group, use the #removeItems method.\n *\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.clearItems = function () {\n\tvar i, len;\n\n\t// Remove all item elements\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.items[ i ].setElementGroup( null );\n\t\tthis.items[ i ].$element.detach();\n\t}\n\n\t// Mixin method\n\tOO.EmitterList.prototype.clearItems.call( this );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n","/**\n * IconElement is often mixed into other classes to generate an icon.\n * Icons are graphics, about the size of normal text. They are used to aid the user\n * in locating a control or to convey information in a space-efficient way. See the\n * [OOjs UI documentation on MediaWiki] [1] for a list of icons\n * included in the library.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,\n *  the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that\n *  the icon element be set to an existing icon instead of the one generated by this class, set a\n *  value using a jQuery selection. For example:\n *\n *      // Use a <div> tag instead of a <span>\n *     $icon: $(\"<div>\")\n *     // Use an existing icon element instead of the one generated by the class\n *     $icon: this.$element\n *     // Use an icon element from a child widget\n *     $icon: this.childwidget.$element\n * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of\n *  symbolic names.  A map is used for i18n purposes and contains a `default` icon\n *  name and additional names keyed by language code. The `default` name is used when no icon is keyed\n *  by the user's language.\n *\n *  Example of an i18n map:\n *\n *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }\n *  See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title\n *  text. The icon title is displayed when users move the mouse over the icon.\n */\nOO.ui.mixin.IconElement = function OoUiMixinIconElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$icon = null;\n\tthis.icon = null;\n\tthis.iconTitle = null;\n\n\t// Initialization\n\tthis.setIcon( config.icon || this.constructor.static.icon );\n\tthis.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );\n\tthis.setIconElement( config.$icon || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.IconElement );\n\n/* Static Properties */\n\n/**\n * The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names. A map is used\n * for i18n purposes and contains a `default` icon name and additional names keyed by\n * language code. The `default` name is used when no icon is keyed by the user's language.\n *\n * Example of an i18n map:\n *\n *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }\n *\n * Note: the static property will be overridden if the #icon configuration is used.\n *\n * @static\n * @inheritable\n * @property {Object|string}\n */\nOO.ui.mixin.IconElement.static.icon = null;\n\n/**\n * The icon title, displayed when users move the mouse over the icon. The value can be text, a\n * function that returns title text, or `null` for no title.\n *\n * The static property will be overridden if the #iconTitle configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.IconElement.static.iconTitle = null;\n\n/* Methods */\n\n/**\n * Set the icon element. This method is used to retarget an icon mixin so that its functionality\n * applies to the specified icon element instead of the one created by the class. If an icon\n * element is already set, the mixin’s effect on that element is removed. Generated CSS classes\n * and mixin methods will no longer affect the element.\n *\n * @param {jQuery} $icon Element to use as icon\n */\nOO.ui.mixin.IconElement.prototype.setIconElement = function ( $icon ) {\n\tif ( this.$icon ) {\n\t\tthis.$icon\n\t\t\t.removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )\n\t\t\t.removeAttr( 'title' );\n\t}\n\n\tthis.$icon = $icon\n\t\t.addClass( 'oo-ui-iconElement-icon' )\n\t\t.toggleClass( 'oo-ui-icon-' + this.icon, !!this.icon );\n\tif ( this.iconTitle !== null ) {\n\t\tthis.$icon.attr( 'title', this.iconTitle );\n\t}\n\n\tthis.updateThemeClasses();\n};\n\n/**\n * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.\n * The icon parameter can also be set to a map of icon names. See the #icon config setting\n * for an example.\n *\n * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed\n *  by language code, or `null` to remove the icon.\n * @chainable\n */\nOO.ui.mixin.IconElement.prototype.setIcon = function ( icon ) {\n\ticon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;\n\ticon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;\n\n\tif ( this.icon !== icon ) {\n\t\tif ( this.$icon ) {\n\t\t\tif ( this.icon !== null ) {\n\t\t\t\tthis.$icon.removeClass( 'oo-ui-icon-' + this.icon );\n\t\t\t}\n\t\t\tif ( icon !== null ) {\n\t\t\t\tthis.$icon.addClass( 'oo-ui-icon-' + icon );\n\t\t\t}\n\t\t}\n\t\tthis.icon = icon;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n\n/**\n * Set the icon title. Use `null` to remove the title.\n *\n * @param {string|Function|null} iconTitle A text string used as the icon title,\n *  a function that returns title text, or `null` for no title.\n * @chainable\n */\nOO.ui.mixin.IconElement.prototype.setIconTitle = function ( iconTitle ) {\n\ticonTitle =\n\t\t( typeof iconTitle === 'function' || ( typeof iconTitle === 'string' && iconTitle.length ) ) ?\n\t\t\tOO.ui.resolveMsg( iconTitle ) : null;\n\n\tif ( this.iconTitle !== iconTitle ) {\n\t\tthis.iconTitle = iconTitle;\n\t\tif ( this.$icon ) {\n\t\t\tif ( this.iconTitle !== null ) {\n\t\t\t\tthis.$icon.attr( 'title', iconTitle );\n\t\t\t} else {\n\t\t\t\tthis.$icon.removeAttr( 'title' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get the symbolic name of the icon.\n *\n * @return {string} Icon name\n */\nOO.ui.mixin.IconElement.prototype.getIcon = function () {\n\treturn this.icon;\n};\n\n/**\n * Get the icon title. The title text is displayed when a user moves the mouse over the icon.\n *\n * @return {string} Icon title text\n */\nOO.ui.mixin.IconElement.prototype.getIconTitle = function () {\n\treturn this.iconTitle;\n};\n","/**\n * IndicatorElement is often mixed into other classes to generate an indicator.\n * Indicators are small graphics that are generally used in two ways:\n *\n * - To draw attention to the status of an item. For example, an indicator might be\n *   used to show that an item in a list has errors that need to be resolved.\n * - To clarify the function of a control that acts in an exceptional way (a button\n *   that opens a menu instead of performing an action directly, for example).\n *\n * For a list of indicators included in the library, please see the\n * [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$indicator] The indicator element created by the class. If this\n *  configuration is omitted, the indicator element will use a generated `<span>`.\n * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n *  See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included\n *  in the library.\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,\n *  or a function that returns title text. The indicator title is displayed when users move\n *  the mouse over the indicator.\n */\nOO.ui.mixin.IndicatorElement = function OoUiMixinIndicatorElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$indicator = null;\n\tthis.indicator = null;\n\tthis.indicatorTitle = null;\n\n\t// Initialization\n\tthis.setIndicator( config.indicator || this.constructor.static.indicator );\n\tthis.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );\n\tthis.setIndicatorElement( config.$indicator || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.IndicatorElement );\n\n/* Static Properties */\n\n/**\n * Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n * The static property will be overridden if the #indicator configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|null}\n */\nOO.ui.mixin.IndicatorElement.static.indicator = null;\n\n/**\n * A text string used as the indicator title, a function that returns title text, or `null`\n * for no title. The static property will be overridden if the #indicatorTitle configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.IndicatorElement.static.indicatorTitle = null;\n\n/* Methods */\n\n/**\n * Set the indicator element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $indicator Element to use as indicator\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {\n\tif ( this.$indicator ) {\n\t\tthis.$indicator\n\t\t\t.removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )\n\t\t\t.removeAttr( 'title' );\n\t}\n\n\tthis.$indicator = $indicator\n\t\t.addClass( 'oo-ui-indicatorElement-indicator' )\n\t\t.toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );\n\tif ( this.indicatorTitle !== null ) {\n\t\tthis.$indicator.attr( 'title', this.indicatorTitle );\n\t}\n\n\tthis.updateThemeClasses();\n};\n\n/**\n * Set the indicator by its symbolic name: ‘alert’, ‘down’, ‘next’, ‘previous’, ‘required’, ‘up’. Use `null` to remove the indicator.\n *\n * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator\n * @chainable\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicator = function ( indicator ) {\n\tindicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;\n\n\tif ( this.indicator !== indicator ) {\n\t\tif ( this.$indicator ) {\n\t\t\tif ( this.indicator !== null ) {\n\t\t\t\tthis.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );\n\t\t\t}\n\t\t\tif ( indicator !== null ) {\n\t\t\t\tthis.$indicator.addClass( 'oo-ui-indicator-' + indicator );\n\t\t\t}\n\t\t}\n\t\tthis.indicator = indicator;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n\n/**\n * Set the indicator title.\n *\n * The title is displayed when a user moves the mouse over the indicator.\n *\n * @param {string|Function|null} indicatorTitle Indicator title text, a function that returns text, or\n *   `null` for no indicator title\n * @chainable\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {\n\tindicatorTitle =\n\t\t( typeof indicatorTitle === 'function' || ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ) ?\n\t\t\tOO.ui.resolveMsg( indicatorTitle ) : null;\n\n\tif ( this.indicatorTitle !== indicatorTitle ) {\n\t\tthis.indicatorTitle = indicatorTitle;\n\t\tif ( this.$indicator ) {\n\t\t\tif ( this.indicatorTitle !== null ) {\n\t\t\t\tthis.$indicator.attr( 'title', indicatorTitle );\n\t\t\t} else {\n\t\t\t\tthis.$indicator.removeAttr( 'title' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get the symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n *\n * @return {string} Symbolic name of indicator\n */\nOO.ui.mixin.IndicatorElement.prototype.getIndicator = function () {\n\treturn this.indicator;\n};\n\n/**\n * Get the indicator title.\n *\n * The title is displayed when a user moves the mouse over the indicator.\n *\n * @return {string} Indicator title text\n */\nOO.ui.mixin.IndicatorElement.prototype.getIndicatorTitle = function () {\n\treturn this.indicatorTitle;\n};\n","/**\n * LabelElement is often mixed into other classes to generate a label, which\n * helps identify the function of an interface element.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$label] The label element created by the class. If this\n *  configuration is omitted, the label element will use a generated `<span>`.\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] The label text. The label can be specified\n *  as a plaintext string, a jQuery selection of elements, or a function that will produce a string\n *  in the future. See the [OOjs UI documentation on MediaWiki] [2] for examples.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels\n */\nOO.ui.mixin.LabelElement = function OoUiMixinLabelElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$label = null;\n\tthis.label = null;\n\n\t// Initialization\n\tthis.setLabel( config.label || this.constructor.static.label );\n\tthis.setLabelElement( config.$label || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.LabelElement );\n\n/* Events */\n\n/**\n * @event labelChange\n * @param {string} value\n */\n\n/* Static Properties */\n\n/**\n * The label text. The label can be specified as a plaintext string, a function that will\n * produce a string in the future, or `null` for no label. The static value will\n * be overridden if a label is specified with the #label config option.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.LabelElement.static.label = null;\n\n/* Static methods */\n\n/**\n * Highlight the first occurrence of the query in the given text\n *\n * @param {string} text Text\n * @param {string} query Query to find\n * @param {Function} [compare] Optional string comparator, e.g. Intl.Collator().compare\n * @return {jQuery} Text with the first match of the query\n *  sub-string wrapped in highlighted span\n */\nOO.ui.mixin.LabelElement.static.highlightQuery = function ( text, query, compare ) {\n\tvar i, tLen, qLen,\n\t\toffset = -1,\n\t\t$result = $( '<span>' );\n\n\tif ( compare ) {\n\t\ttLen = text.length;\n\t\tqLen = query.length;\n\t\tfor ( i = 0; offset === -1 && i <= tLen - qLen; i++ ) {\n\t\t\tif ( compare( query, text.slice( i, i + qLen ) ) === 0 ) {\n\t\t\t\toffset = i;\n\t\t\t}\n\t\t}\n\t} else {\n\t\toffset = text.toLowerCase().indexOf( query.toLowerCase() );\n\t}\n\n\tif ( !query.length || offset === -1 ) {\n\t\t$result.text( text );\n\t} else {\n\t\t$result.append(\n\t\t\tdocument.createTextNode( text.slice( 0, offset ) ),\n\t\t\t$( '<span>' )\n\t\t\t\t.addClass( 'oo-ui-labelElement-label-highlight' )\n\t\t\t\t.text( text.slice( offset, offset + query.length ) ),\n\t\t\tdocument.createTextNode( text.slice( offset + query.length ) )\n\t\t);\n\t}\n\treturn $result.contents();\n};\n\n/* Methods */\n\n/**\n * Set the label element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $label Element to use as label\n */\nOO.ui.mixin.LabelElement.prototype.setLabelElement = function ( $label ) {\n\tif ( this.$label ) {\n\t\tthis.$label.removeClass( 'oo-ui-labelElement-label' ).empty();\n\t}\n\n\tthis.$label = $label.addClass( 'oo-ui-labelElement-label' );\n\tthis.setLabelContent( this.label );\n};\n\n/**\n * Set the label.\n *\n * An empty string will result in the label being hidden. A string containing only whitespace will\n * be converted to a single `&nbsp;`.\n *\n * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n * @chainable\n */\nOO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) {\n\tlabel = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;\n\tlabel = ( ( typeof label === 'string' || label instanceof jQuery ) && label.length ) || ( label instanceof OO.ui.HtmlSnippet && label.toString().length ) ? label : null;\n\n\tif ( this.label !== label ) {\n\t\tif ( this.$label ) {\n\t\t\tthis.setLabelContent( label );\n\t\t}\n\t\tthis.label = label;\n\t\tthis.emit( 'labelChange' );\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-labelElement', !!this.label );\n\n\treturn this;\n};\n\n/**\n * Set the label as plain text with a highlighted query\n *\n * @param {string} text Text label to set\n * @param {string} query Substring of text to highlight\n * @param {Function} [compare] Optional string comparator, e.g. Intl.Collator().compare\n * @chainable\n */\nOO.ui.mixin.LabelElement.prototype.setHighlightedQuery = function ( text, query, compare ) {\n\treturn this.setLabel( this.constructor.static.highlightQuery( text, query, compare ) );\n};\n\n/**\n * Get the label.\n *\n * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n */\nOO.ui.mixin.LabelElement.prototype.getLabel = function () {\n\treturn this.label;\n};\n\n/**\n * Set the content of the label.\n *\n * Do not call this method until after the label element has been set by #setLabelElement.\n *\n * @private\n * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n */\nOO.ui.mixin.LabelElement.prototype.setLabelContent = function ( label ) {\n\tif ( typeof label === 'string' ) {\n\t\tif ( label.match( /^\\s*$/ ) ) {\n\t\t\t// Convert whitespace only string to a single non-breaking space\n\t\t\tthis.$label.html( '&nbsp;' );\n\t\t} else {\n\t\t\tthis.$label.text( label );\n\t\t}\n\t} else if ( label instanceof OO.ui.HtmlSnippet ) {\n\t\tthis.$label.html( label.toString() );\n\t} else if ( label instanceof jQuery ) {\n\t\tthis.$label.empty().append( label );\n\t} else {\n\t\tthis.$label.empty();\n\t}\n};\n","/**\n * The FlaggedElement class is an attribute mixin, meaning that it is used to add\n * additional functionality to an element created by another class. The class provides\n * a ‘flags’ property assigned the name (or an array of names) of styling flags,\n * which are used to customize the look and feel of a widget to better describe its\n * importance and functionality.\n *\n * The library currently contains the following styling flags for general use:\n *\n * - **progressive**:  Progressive styling is applied to convey that the widget will move the user forward in a process.\n * - **destructive**: Destructive styling is applied to convey that the widget will remove something.\n * - **constructive**: Constructive styling is deprecated since v0.23.2 and equivalent to progressive.\n *\n * The flags affect the appearance of the buttons:\n *\n *     @example\n *     // FlaggedElement is mixed into ButtonWidget to provide styling flags\n *     var button1 = new OO.ui.ButtonWidget( {\n *         label: 'Progressive',\n *         flags: 'progressive'\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'Destructive',\n *         flags: 'destructive'\n *     } );\n *     $( 'body' ).append( button1.$element, button2.$element );\n *\n * {@link OO.ui.ActionWidget ActionWidgets}, which are a special kind of button that execute an action, use these flags: **primary** and **safe**.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\n *  Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged\n * @cfg {jQuery} [$flagged] The flagged element. By default,\n *  the flagged functionality is applied to the element created by the class ($element).\n *  If a different element is specified, the flagged functionality will be applied to it instead.\n */\nOO.ui.mixin.FlaggedElement = function OoUiMixinFlaggedElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.flags = {};\n\tthis.$flagged = null;\n\n\t// Initialization\n\tthis.setFlags( config.flags );\n\tthis.setFlaggedElement( config.$flagged || this.$element );\n};\n\n/* Events */\n\n/**\n * @event flag\n * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`\n * parameter contains the name of each modified flag and indicates whether it was\n * added or removed.\n *\n * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates\n * that the flag was added, `false` that the flag was removed.\n */\n\n/* Methods */\n\n/**\n * Set the flagged element.\n *\n * This method is used to retarget a flagged mixin so that its functionality applies to the specified element.\n * If an element is already set, the method will remove the mixin’s effect on that element.\n *\n * @param {jQuery} $flagged Element that should be flagged\n */\nOO.ui.mixin.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {\n\tvar classNames = Object.keys( this.flags ).map( function ( flag ) {\n\t\treturn 'oo-ui-flaggedElement-' + flag;\n\t} ).join( ' ' );\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged.removeClass( classNames );\n\t}\n\n\tthis.$flagged = $flagged.addClass( classNames );\n};\n\n/**\n * Check if the specified flag is set.\n *\n * @param {string} flag Name of flag\n * @return {boolean} The flag is set\n */\nOO.ui.mixin.FlaggedElement.prototype.hasFlag = function ( flag ) {\n\t// This may be called before the constructor, thus before this.flags is set\n\treturn this.flags && ( flag in this.flags );\n};\n\n/**\n * Get the names of all flags set.\n *\n * @return {string[]} Flag names\n */\nOO.ui.mixin.FlaggedElement.prototype.getFlags = function () {\n\t// This may be called before the constructor, thus before this.flags is set\n\treturn Object.keys( this.flags || {} );\n};\n\n/**\n * Clear all flags.\n *\n * @chainable\n * @fires flag\n */\nOO.ui.mixin.FlaggedElement.prototype.clearFlags = function () {\n\tvar flag, className,\n\t\tchanges = {},\n\t\tremove = [],\n\t\tclassPrefix = 'oo-ui-flaggedElement-';\n\n\tfor ( flag in this.flags ) {\n\t\tclassName = classPrefix + flag;\n\t\tchanges[ flag ] = false;\n\t\tdelete this.flags[ flag ];\n\t\tremove.push( className );\n\t}\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged.removeClass( remove.join( ' ' ) );\n\t}\n\n\tthis.updateThemeClasses();\n\tthis.emit( 'flag', changes );\n\n\treturn this;\n};\n\n/**\n * Add one or more flags.\n *\n * @param {string|string[]|Object.<string, boolean>} flags A flag name, an array of flag names,\n *  or an object keyed by flag name with a boolean value that indicates whether the flag should\n *  be added (`true`) or removed (`false`).\n * @chainable\n * @fires flag\n */\nOO.ui.mixin.FlaggedElement.prototype.setFlags = function ( flags ) {\n\tvar i, len, flag, className,\n\t\tchanges = {},\n\t\tadd = [],\n\t\tremove = [],\n\t\tclassPrefix = 'oo-ui-flaggedElement-';\n\n\tif ( typeof flags === 'string' ) {\n\t\tclassName = classPrefix + flags;\n\t\t// Set\n\t\tif ( !this.flags[ flags ] ) {\n\t\t\tthis.flags[ flags ] = true;\n\t\t\tadd.push( className );\n\t\t}\n\t} else if ( Array.isArray( flags ) ) {\n\t\tfor ( i = 0, len = flags.length; i < len; i++ ) {\n\t\t\tflag = flags[ i ];\n\t\t\tclassName = classPrefix + flag;\n\t\t\t// Set\n\t\t\tif ( !this.flags[ flag ] ) {\n\t\t\t\tchanges[ flag ] = true;\n\t\t\t\tthis.flags[ flag ] = true;\n\t\t\t\tadd.push( className );\n\t\t\t}\n\t\t}\n\t} else if ( OO.isPlainObject( flags ) ) {\n\t\tfor ( flag in flags ) {\n\t\t\tclassName = classPrefix + flag;\n\t\t\tif ( flags[ flag ] ) {\n\t\t\t\t// Set\n\t\t\t\tif ( !this.flags[ flag ] ) {\n\t\t\t\t\tchanges[ flag ] = true;\n\t\t\t\t\tthis.flags[ flag ] = true;\n\t\t\t\t\tadd.push( className );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Remove\n\t\t\t\tif ( this.flags[ flag ] ) {\n\t\t\t\t\tchanges[ flag ] = false;\n\t\t\t\t\tdelete this.flags[ flag ];\n\t\t\t\t\tremove.push( className );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged\n\t\t\t.addClass( add.join( ' ' ) )\n\t\t\t.removeClass( remove.join( ' ' ) );\n\t}\n\n\tthis.updateThemeClasses();\n\tthis.emit( 'flag', changes );\n\n\treturn this;\n};\n","/**\n * TitledElement is mixed into other classes to provide a `title` attribute.\n * Titles are rendered by the browser and are made visible when the user moves\n * the mouse over the element. Titles are not visible on touch devices.\n *\n *     @example\n *     // TitledElement provides a 'title' attribute to the\n *     // ButtonWidget class\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Title',\n *         title: 'I am a button'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.\n *  If this config is omitted, the title functionality is applied to $element, the\n *  element created by the class.\n * @cfg {string|Function} [title] The title text or a function that returns text. If\n *  this config is omitted, the value of the {@link #static-title static title} property is used.\n */\nOO.ui.mixin.TitledElement = function OoUiMixinTitledElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$titled = null;\n\tthis.title = null;\n\n\t// Initialization\n\tthis.setTitle( config.title !== undefined ? config.title : this.constructor.static.title );\n\tthis.setTitledElement( config.$titled || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * The title text, a function that returns text, or `null` for no title. The value of the static property\n * is overridden if the #title config option is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.TitledElement.static.title = null;\n\n/* Methods */\n\n/**\n * Set the titled element.\n *\n * This method is used to retarget a titledElement mixin so that its functionality applies to the specified element.\n * If an element is already set, the mixin’s effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $titled Element that should use the 'titled' functionality\n */\nOO.ui.mixin.TitledElement.prototype.setTitledElement = function ( $titled ) {\n\tif ( this.$titled ) {\n\t\tthis.$titled.removeAttr( 'title' );\n\t}\n\n\tthis.$titled = $titled;\n\tif ( this.title ) {\n\t\tthis.updateTitle();\n\t}\n};\n\n/**\n * Set title.\n *\n * @param {string|Function|null} title Title text, a function that returns text, or `null` for no title\n * @chainable\n */\nOO.ui.mixin.TitledElement.prototype.setTitle = function ( title ) {\n\ttitle = typeof title === 'function' ? OO.ui.resolveMsg( title ) : title;\n\ttitle = ( typeof title === 'string' && title.length ) ? title : null;\n\n\tif ( this.title !== title ) {\n\t\tthis.title = title;\n\t\tthis.updateTitle();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the title attribute, in case of changes to title or accessKey.\n *\n * @protected\n * @chainable\n */\nOO.ui.mixin.TitledElement.prototype.updateTitle = function () {\n\tvar title = this.getTitle();\n\tif ( this.$titled ) {\n\t\tif ( title !== null ) {\n\t\t\t// Only if this is an AccessKeyedElement\n\t\t\tif ( this.formatTitleWithAccessKey ) {\n\t\t\t\ttitle = this.formatTitleWithAccessKey( title );\n\t\t\t}\n\t\t\tthis.$titled.attr( 'title', title );\n\t\t} else {\n\t\t\tthis.$titled.removeAttr( 'title' );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Get title.\n *\n * @return {string} Title string\n */\nOO.ui.mixin.TitledElement.prototype.getTitle = function () {\n\treturn this.title;\n};\n","/**\n * AccessKeyedElement is mixed into other classes to provide an `accesskey` attribute.\n * Accesskeys allow an user to go to a specific element by using\n * a shortcut combination of a browser specific keys + the key\n * set to the field.\n *\n *     @example\n *     // AccessKeyedElement provides an 'accesskey' attribute to the\n *     // ButtonWidget class\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Accesskey',\n *         accessKey: 'k'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$accessKeyed] The element to which the `accesskey` attribute is applied.\n *  If this config is omitted, the accesskey functionality is applied to $element, the\n *  element created by the class.\n * @cfg {string|Function} [accessKey] The key or a function that returns the key. If\n *  this config is omitted, no accesskey will be added.\n */\nOO.ui.mixin.AccessKeyedElement = function OoUiMixinAccessKeyedElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$accessKeyed = null;\n\tthis.accessKey = null;\n\n\t// Initialization\n\tthis.setAccessKey( config.accessKey || null );\n\tthis.setAccessKeyedElement( config.$accessKeyed || this.$element );\n\n\t// If this is also a TitledElement and it initialized before we did, we may have\n\t// to update the title with the access key\n\tif ( this.updateTitle ) {\n\t\tthis.updateTitle();\n\t}\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * The access key, a function that returns a key, or `null` for no accesskey.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.AccessKeyedElement.static.accessKey = null;\n\n/* Methods */\n\n/**\n * Set the accesskeyed element.\n *\n * This method is used to retarget a AccessKeyedElement mixin so that its functionality applies to the specified element.\n * If an element is already set, the mixin's effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $accessKeyed Element that should use the 'accesskeyes' functionality\n */\nOO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement = function ( $accessKeyed ) {\n\tif ( this.$accessKeyed ) {\n\t\tthis.$accessKeyed.removeAttr( 'accesskey' );\n\t}\n\n\tthis.$accessKeyed = $accessKeyed;\n\tif ( this.accessKey ) {\n\t\tthis.$accessKeyed.attr( 'accesskey', this.accessKey );\n\t}\n};\n\n/**\n * Set accesskey.\n *\n * @param {string|Function|null} accessKey Key, a function that returns a key, or `null` for no accesskey\n * @chainable\n */\nOO.ui.mixin.AccessKeyedElement.prototype.setAccessKey = function ( accessKey ) {\n\taccessKey = typeof accessKey === 'string' ? OO.ui.resolveMsg( accessKey ) : null;\n\n\tif ( this.accessKey !== accessKey ) {\n\t\tif ( this.$accessKeyed ) {\n\t\t\tif ( accessKey !== null ) {\n\t\t\t\tthis.$accessKeyed.attr( 'accesskey', accessKey );\n\t\t\t} else {\n\t\t\t\tthis.$accessKeyed.removeAttr( 'accesskey' );\n\t\t\t}\n\t\t}\n\t\tthis.accessKey = accessKey;\n\n\t\t// Only if this is a TitledElement\n\t\tif ( this.updateTitle ) {\n\t\t\tthis.updateTitle();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get accesskey.\n *\n * @return {string} accessKey string\n */\nOO.ui.mixin.AccessKeyedElement.prototype.getAccessKey = function () {\n\treturn this.accessKey;\n};\n\n/**\n * Add information about the access key to the element's tooltip label.\n * (This is only public for hacky usage in FieldLayout.)\n *\n * @param {string} title Tooltip label for `title` attribute\n * @return {string}\n */\nOO.ui.mixin.AccessKeyedElement.prototype.formatTitleWithAccessKey = function ( title ) {\n\tvar accessKey;\n\n\tif ( !this.$accessKeyed ) {\n\t\t// Not initialized yet; the constructor will call updateTitle() which will rerun this function\n\t\treturn title;\n\t}\n\t// Use jquery.accessKeyLabel if available to show modifiers, otherwise just display the single key\n\tif ( $.fn.updateTooltipAccessKeys && $.fn.updateTooltipAccessKeys.getAccessKeyLabel ) {\n\t\taccessKey = $.fn.updateTooltipAccessKeys.getAccessKeyLabel( this.$accessKeyed[ 0 ] );\n\t} else {\n\t\taccessKey = this.getAccessKey();\n\t}\n\tif ( accessKey ) {\n\t\ttitle += ' [' + accessKey + ']';\n\t}\n\treturn title;\n};\n","/**\n * ButtonWidget is a generic widget for buttons. A wide variety of looks,\n * feels, and functionality can be customized via the class’s configuration options\n * and methods. Please see the [OOjs UI documentation on MediaWiki] [1] for more information\n * and examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches\n *\n *     @example\n *     // A button widget\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Icon',\n *         icon: 'trash',\n *         iconTitle: 'Remove'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * NOTE: HTML form buttons should use the OO.ui.ButtonInputWidget class.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [active=false] Whether button should be shown as active\n * @cfg {string} [href] Hyperlink to visit when the button is clicked.\n * @cfg {string} [target] The frame or window in which to open the hyperlink.\n * @cfg {boolean} [noFollow] Search engine traversal hint (default: true)\n */\nOO.ui.ButtonWidget = function OoUiButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\tOO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$button } ) );\n\n\t// Properties\n\tthis.href = null;\n\tthis.target = null;\n\tthis.noFollow = false;\n\n\t// Events\n\tthis.connect( this, { disable: 'onDisable' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-buttonWidget' )\n\t\t.append( this.$button );\n\tthis.setActive( config.active );\n\tthis.setHref( config.href );\n\tthis.setTarget( config.target );\n\tthis.setNoFollow( config.noFollow );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Get hyperlink location.\n *\n * @return {string} Hyperlink location\n */\nOO.ui.ButtonWidget.prototype.getHref = function () {\n\treturn this.href;\n};\n\n/**\n * Get hyperlink target.\n *\n * @return {string} Hyperlink target\n */\nOO.ui.ButtonWidget.prototype.getTarget = function () {\n\treturn this.target;\n};\n\n/**\n * Get search engine traversal hint.\n *\n * @return {boolean} Whether search engines should avoid traversing this hyperlink\n */\nOO.ui.ButtonWidget.prototype.getNoFollow = function () {\n\treturn this.noFollow;\n};\n\n/**\n * Set hyperlink location.\n *\n * @param {string|null} href Hyperlink location, null to remove\n */\nOO.ui.ButtonWidget.prototype.setHref = function ( href ) {\n\thref = typeof href === 'string' ? href : null;\n\tif ( href !== null && !OO.ui.isSafeUrl( href ) ) {\n\t\thref = './' + href;\n\t}\n\n\tif ( href !== this.href ) {\n\t\tthis.href = href;\n\t\tthis.updateHref();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the `href` attribute, in case of changes to href or\n * disabled state.\n *\n * @private\n * @chainable\n */\nOO.ui.ButtonWidget.prototype.updateHref = function () {\n\tif ( this.href !== null && !this.isDisabled() ) {\n\t\tthis.$button.attr( 'href', this.href );\n\t} else {\n\t\tthis.$button.removeAttr( 'href' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Handle disable events.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.ButtonWidget.prototype.onDisable = function () {\n\tthis.updateHref();\n};\n\n/**\n * Set hyperlink target.\n *\n * @param {string|null} target Hyperlink target, null to remove\n */\nOO.ui.ButtonWidget.prototype.setTarget = function ( target ) {\n\ttarget = typeof target === 'string' ? target : null;\n\n\tif ( target !== this.target ) {\n\t\tthis.target = target;\n\t\tif ( target !== null ) {\n\t\t\tthis.$button.attr( 'target', target );\n\t\t} else {\n\t\t\tthis.$button.removeAttr( 'target' );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Set search engine traversal hint.\n *\n * @param {boolean} noFollow True if search engines should avoid traversing this hyperlink\n */\nOO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {\n\tnoFollow = typeof noFollow === 'boolean' ? noFollow : true;\n\n\tif ( noFollow !== this.noFollow ) {\n\t\tthis.noFollow = noFollow;\n\t\tif ( noFollow ) {\n\t\t\tthis.$button.attr( 'rel', 'nofollow' );\n\t\t} else {\n\t\t\tthis.$button.removeAttr( 'rel' );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n// Override method visibility hints from ButtonElement\n/**\n * @method setActive\n * @inheritdoc\n */\n/**\n * @method isActive\n * @inheritdoc\n */\n","/**\n * A ButtonGroupWidget groups related buttons and is used together with OO.ui.ButtonWidget and\n * its subclasses. Each button in a group is addressed by a unique reference. Buttons can be added,\n * removed, and cleared from the group.\n *\n *     @example\n *     // Example: A ButtonGroupWidget with two buttons\n *     var button1 = new OO.ui.PopupButtonWidget( {\n *         label: 'Select a category',\n *         icon: 'menu',\n *         popup: {\n *             $content: $( '<p>List of categories...</p>' ),\n *             padded: true,\n *             align: 'left'\n *         }\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'Add item'\n *     });\n *     var buttonGroup = new OO.ui.ButtonGroupWidget( {\n *         items: [button1, button2]\n *     } );\n *     $( 'body' ).append( buttonGroup.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add\n */\nOO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonGroupWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonGroupWidget' );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.mixin.GroupElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonGroupWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.ButtonGroupWidget.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tif ( this.items[ 0 ] ) {\n\t\t\tthis.items[ 0 ].focus();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonGroupWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * IconWidget is a generic widget for {@link OO.ui.mixin.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,\n * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]\n * for a list of icons included in the library.\n *\n *     @example\n *     // An icon widget with a label\n *     var myIcon = new OO.ui.IconWidget( {\n *         icon: 'help',\n *         iconTitle: 'Help'\n *      } );\n *      // Create a label.\n *      var iconLabel = new OO.ui.LabelWidget( {\n *          label: 'Help'\n *      } );\n *      $( 'body' ).append( myIcon.$element, iconLabel.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.IconWidget = function OoUiIconWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.IconWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-iconWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.IconWidget.static.tagName = 'span';\n","/**\n * IndicatorWidgets create indicators, which are small graphics that are generally used to draw\n * attention to the status of an item or to clarify the function of a control. For a list of\n * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of an indicator widget\n *     var indicator1 = new OO.ui.IndicatorWidget( {\n *         indicator: 'alert'\n *     } );\n *\n *     // Create a fieldset layout to add a label\n *     var fieldset = new OO.ui.FieldsetLayout();\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.IndicatorWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indicatorWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.IndicatorWidget.static.tagName = 'span';\n","/**\n * LabelWidgets help identify the function of interface elements. Each LabelWidget can\n * be configured with a `label` option that is set to a string, a label node, or a function:\n *\n * - String: a plaintext string\n * - jQuery selection: a jQuery selection, used for anything other than a plaintext label, e.g., a\n *   label that includes a link or special styling, such as a gray color or additional graphical elements.\n * - Function: a function that will produce a string in the future. Functions are used\n *   in cases where the value of the label is not currently defined.\n *\n * In addition, the LabelWidget can be associated with an {@link OO.ui.InputWidget input widget}, which\n * will come into focus when the label is clicked.\n *\n *     @example\n *     // Examples of LabelWidgets\n *     var label1 = new OO.ui.LabelWidget( {\n *         label: 'plaintext label'\n *     } );\n *     var label2 = new OO.ui.LabelWidget( {\n *         label: $( '<a href=\"default.html\">jQuery label</a>' )\n *     } );\n *     // Create a fieldset layout with fields for each example\n *     var fieldset = new OO.ui.FieldsetLayout();\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( label1 ),\n *         new OO.ui.FieldLayout( label2 )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.InputWidget} [input] {@link OO.ui.InputWidget Input widget} that uses the label.\n *  Clicking the label will focus the specified input field.\n */\nOO.ui.LabelWidget = function OoUiLabelWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.LabelWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, config );\n\n\t// Properties\n\tthis.input = config.input;\n\n\t// Initialization\n\tif ( this.input ) {\n\t\tif ( this.input.getInputId() ) {\n\t\t\tthis.$element.attr( 'for', this.input.getInputId() );\n\t\t} else {\n\t\t\tthis.$label.on( 'click', function () {\n\t\t\t\tthis.input.simulateLabelClick();\n\t\t\t\treturn false;\n\t\t\t}.bind( this ) );\n\t\t}\n\t}\n\tthis.$element.addClass( 'oo-ui-labelWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.LabelWidget.static.tagName = 'label';\n","/**\n * PendingElement is a mixin that is used to create elements that notify users that something is happening\n * and that they should wait before proceeding. The pending state is visually represented with a pending\n * texture that appears in the head of a pending {@link OO.ui.ProcessDialog process dialog} or in the input\n * field of a {@link OO.ui.TextInputWidget text input widget}.\n *\n * Currently, {@link OO.ui.ActionWidget Action widgets}, which mix in this class, can also be marked as pending, but only when\n * used in {@link OO.ui.MessageDialog message dialogs}. The behavior is not currently supported for action widgets used\n * in process dialogs.\n *\n *     @example\n *     function MessageDialog( config ) {\n *         MessageDialog.parent.call( this, config );\n *     }\n *     OO.inheritClass( MessageDialog, OO.ui.MessageDialog );\n *\n *     MessageDialog.static.name = 'myMessageDialog';\n *     MessageDialog.static.actions = [\n *         { action: 'save', label: 'Done', flags: 'primary' },\n *         { label: 'Cancel', flags: 'safe' }\n *     ];\n *\n *     MessageDialog.prototype.initialize = function () {\n *         MessageDialog.parent.prototype.initialize.apply( this, arguments );\n *         this.content = new OO.ui.PanelLayout( { $: this.$, padded: true } );\n *         this.content.$element.append( '<p>Click the \\'Done\\' action widget to see its pending state. Note that action widgets can be marked pending in message dialogs but not process dialogs.</p>' );\n *         this.$body.append( this.content.$element );\n *     };\n *     MessageDialog.prototype.getBodyHeight = function () {\n *         return 100;\n *     }\n *     MessageDialog.prototype.getActionProcess = function ( action ) {\n *         var dialog = this;\n *         if ( action === 'save' ) {\n *             dialog.getActions().get({actions: 'save'})[0].pushPending();\n *             return new OO.ui.Process()\n *             .next( 1000 )\n *             .next( function () {\n *                 dialog.getActions().get({actions: 'save'})[0].popPending();\n *             } );\n *         }\n *         return MessageDialog.parent.prototype.getActionProcess.call( this, action );\n *     };\n *\n *     var windowManager = new OO.ui.WindowManager();\n *     $( 'body' ).append( windowManager.$element );\n *\n *     var dialog = new MessageDialog();\n *     windowManager.addWindows( [ dialog ] );\n *     windowManager.openWindow( dialog );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element\n */\nOO.ui.mixin.PendingElement = function OoUiMixinPendingElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.pending = 0;\n\tthis.$pending = null;\n\n\t// Initialisation\n\tthis.setPendingElement( config.$pending || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.PendingElement );\n\n/* Methods */\n\n/**\n * Set the pending element (and clean up any existing one).\n *\n * @param {jQuery} $pending The element to set to pending.\n */\nOO.ui.mixin.PendingElement.prototype.setPendingElement = function ( $pending ) {\n\tif ( this.$pending ) {\n\t\tthis.$pending.removeClass( 'oo-ui-pendingElement-pending' );\n\t}\n\n\tthis.$pending = $pending;\n\tif ( this.pending > 0 ) {\n\t\tthis.$pending.addClass( 'oo-ui-pendingElement-pending' );\n\t}\n};\n\n/**\n * Check if an element is pending.\n *\n * @return {boolean} Element is pending\n */\nOO.ui.mixin.PendingElement.prototype.isPending = function () {\n\treturn !!this.pending;\n};\n\n/**\n * Increase the pending counter. The pending state will remain active until the counter is zero\n * (i.e., the number of calls to #pushPending and #popPending is the same).\n *\n * @chainable\n */\nOO.ui.mixin.PendingElement.prototype.pushPending = function () {\n\tif ( this.pending === 0 ) {\n\t\tthis.$pending.addClass( 'oo-ui-pendingElement-pending' );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.pending++;\n\n\treturn this;\n};\n\n/**\n * Decrease the pending counter. The pending state will remain active until the counter is zero\n * (i.e., the number of calls to #pushPending and #popPending is the same).\n *\n * @chainable\n */\nOO.ui.mixin.PendingElement.prototype.popPending = function () {\n\tif ( this.pending === 1 ) {\n\t\tthis.$pending.removeClass( 'oo-ui-pendingElement-pending' );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.pending = Math.max( 0, this.pending - 1 );\n\n\treturn this;\n};\n","/**\n * Element that will stick adjacent to a specified container, even when it is inserted elsewhere\n * in the document (for example, in an OO.ui.Window's $overlay).\n *\n * The elements's position is automatically calculated and maintained when window is resized or the\n * page is scrolled. If you reposition the container manually, you have to call #position to make\n * sure the element is still placed correctly.\n *\n * As positioning is only possible when both the element and the container are attached to the DOM\n * and visible, it's only done after you call #togglePositioning. You might want to do this inside\n * the #toggle method to display a floating popup, for example.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$floatable] Node to position, assigned to #$floatable, omit to use #$element\n * @cfg {jQuery} [$floatableContainer] Node to position adjacent to\n * @cfg {string} [verticalPosition='below'] Where to position $floatable vertically:\n *  'below': Directly below $floatableContainer, aligning f's top edge with fC's bottom edge\n *  'above': Directly above $floatableContainer, aligning f's bottom edge with fC's top edge\n *  'top': Align the top edge with $floatableContainer's top edge\n *  'bottom': Align the bottom edge with $floatableContainer's bottom edge\n *  'center': Vertically align the center with $floatableContainer's center\n * @cfg {string} [horizontalPosition='start'] Where to position $floatable horizontally:\n *  'before': Directly before $floatableContainer, aligning f's end edge with fC's start edge\n *  'after': Directly after $floatableContainer, algining f's start edge with fC's end edge\n *  'start': Align the start (left in LTR, right in RTL) edge with $floatableContainer's start edge\n *  'end': Align the end (right in LTR, left in RTL) edge with $floatableContainer's end edge\n *  'center': Horizontally align the center with $floatableContainer's center\n * @cfg {boolean} [hideWhenOutOfView=true] Whether to hide the floatable element if the container\n *  is out of view\n */\nOO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$floatable = null;\n\tthis.$floatableContainer = null;\n\tthis.$floatableWindow = null;\n\tthis.$floatableClosestScrollable = null;\n\tthis.onFloatableScrollHandler = this.position.bind( this );\n\tthis.onFloatableWindowResizeHandler = this.position.bind( this );\n\n\t// Initialization\n\tthis.setFloatableContainer( config.$floatableContainer );\n\tthis.setFloatableElement( config.$floatable || this.$element );\n\tthis.setVerticalPosition( config.verticalPosition || 'below' );\n\tthis.setHorizontalPosition( config.horizontalPosition || 'start' );\n\tthis.hideWhenOutOfView = config.hideWhenOutOfView === undefined ? true : !!config.hideWhenOutOfView;\n};\n\n/* Methods */\n\n/**\n * Set floatable element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $floatable Element to make floatable\n */\nOO.ui.mixin.FloatableElement.prototype.setFloatableElement = function ( $floatable ) {\n\tif ( this.$floatable ) {\n\t\tthis.$floatable.removeClass( 'oo-ui-floatableElement-floatable' );\n\t\tthis.$floatable.css( { left: '', top: '' } );\n\t}\n\n\tthis.$floatable = $floatable.addClass( 'oo-ui-floatableElement-floatable' );\n\tthis.position();\n};\n\n/**\n * Set floatable container.\n *\n * The element will be positioned relative to the specified container.\n *\n * @param {jQuery|null} $floatableContainer Container to keep visible, or null to unset\n */\nOO.ui.mixin.FloatableElement.prototype.setFloatableContainer = function ( $floatableContainer ) {\n\tthis.$floatableContainer = $floatableContainer;\n\tif ( this.$floatable ) {\n\t\tthis.position();\n\t}\n};\n\n/**\n * Change how the element is positioned vertically.\n *\n * @param {string} position 'below', 'above', 'top', 'bottom' or 'center'\n */\nOO.ui.mixin.FloatableElement.prototype.setVerticalPosition = function ( position ) {\n\tif ( [ 'below', 'above', 'top', 'bottom', 'center' ].indexOf( position ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for vertical position: ' + position );\n\t}\n\tif ( this.verticalPosition !== position ) {\n\t\tthis.verticalPosition = position;\n\t\tif ( this.$floatable ) {\n\t\t\tthis.position();\n\t\t}\n\t}\n};\n\n/**\n * Change how the element is positioned horizontally.\n *\n * @param {string} position 'before', 'after', 'start', 'end' or 'center'\n */\nOO.ui.mixin.FloatableElement.prototype.setHorizontalPosition = function ( position ) {\n\tif ( [ 'before', 'after', 'start', 'end', 'center' ].indexOf( position ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for horizontal position: ' + position );\n\t}\n\tif ( this.horizontalPosition !== position ) {\n\t\tthis.horizontalPosition = position;\n\t\tif ( this.$floatable ) {\n\t\t\tthis.position();\n\t\t}\n\t}\n};\n\n/**\n * Toggle positioning.\n *\n * Do not turn positioning on until after the element is attached to the DOM and visible.\n *\n * @param {boolean} [positioning] Enable positioning, omit to toggle\n * @chainable\n */\nOO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positioning ) {\n\tvar closestScrollableOfContainer;\n\n\tif ( !this.$floatable || !this.$floatableContainer ) {\n\t\treturn this;\n\t}\n\n\tpositioning = positioning === undefined ? !this.positioning : !!positioning;\n\n\tif ( positioning && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'FloatableElement#togglePositioning: Before calling this method, the element must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( this.positioning !== positioning ) {\n\t\tthis.positioning = positioning;\n\n\t\tthis.needsCustomPosition =\n\t\t\tthis.verticalPostion !== 'below' ||\n\t\t\tthis.horizontalPosition !== 'start' ||\n\t\t\t!OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] );\n\n\t\tclosestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] );\n\t\t// If the scrollable is the root, we have to listen to scroll events\n\t\t// on the window because of browser inconsistencies.\n\t\tif ( $( closestScrollableOfContainer ).is( 'html, body' ) ) {\n\t\t\tclosestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer );\n\t\t}\n\n\t\tif ( positioning ) {\n\t\t\tthis.$floatableWindow = $( this.getElementWindow() );\n\t\t\tthis.$floatableWindow.on( 'resize', this.onFloatableWindowResizeHandler );\n\n\t\t\tthis.$floatableClosestScrollable = $( closestScrollableOfContainer );\n\t\t\tthis.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler );\n\n\t\t\t// Initial position after visible\n\t\t\tthis.position();\n\t\t} else {\n\t\t\tif ( this.$floatableWindow ) {\n\t\t\t\tthis.$floatableWindow.off( 'resize', this.onFloatableWindowResizeHandler );\n\t\t\t\tthis.$floatableWindow = null;\n\t\t\t}\n\n\t\t\tif ( this.$floatableClosestScrollable ) {\n\t\t\t\tthis.$floatableClosestScrollable.off( 'scroll', this.onFloatableScrollHandler );\n\t\t\t\tthis.$floatableClosestScrollable = null;\n\t\t\t}\n\n\t\t\tthis.$floatable.css( { left: '', right: '', top: '' } );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Check whether the bottom edge of the given element is within the viewport of the given container.\n *\n * @private\n * @param {jQuery} $element\n * @param {jQuery} $container\n * @return {boolean}\n */\nOO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) {\n\tvar elemRect, contRect, topEdgeInBounds, bottomEdgeInBounds, leftEdgeInBounds, rightEdgeInBounds,\n\t\tstartEdgeInBounds, endEdgeInBounds,\n\t\tdirection = $element.css( 'direction' );\n\n\telemRect = $element[ 0 ].getBoundingClientRect();\n\tif ( $container[ 0 ] === window ) {\n\t\tcontRect = {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tright: document.documentElement.clientWidth,\n\t\t\tbottom: document.documentElement.clientHeight\n\t\t};\n\t} else {\n\t\tcontRect = $container[ 0 ].getBoundingClientRect();\n\t}\n\n\ttopEdgeInBounds = elemRect.top >= contRect.top && elemRect.top <= contRect.bottom;\n\tbottomEdgeInBounds = elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom;\n\tleftEdgeInBounds = elemRect.left >= contRect.left && elemRect.left <= contRect.right;\n\trightEdgeInBounds = elemRect.right >= contRect.left && elemRect.right <= contRect.right;\n\tif ( direction === 'rtl' ) {\n\t\tstartEdgeInBounds = rightEdgeInBounds;\n\t\tendEdgeInBounds = leftEdgeInBounds;\n\t} else {\n\t\tstartEdgeInBounds = leftEdgeInBounds;\n\t\tendEdgeInBounds = rightEdgeInBounds;\n\t}\n\n\tif ( this.verticalPosition === 'below' && !bottomEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.verticalPosition === 'above' && !topEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.horizontalPosition === 'before' && !startEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.horizontalPosition === 'after' && !endEdgeInBounds ) {\n\t\treturn false;\n\t}\n\n\t// The other positioning values are all about being inside the container,\n\t// so in those cases all we care about is that any part of the container is visible.\n\treturn elemRect.top <= contRect.bottom && elemRect.bottom >= contRect.top &&\n\t\telemRect.left <= contRect.right && elemRect.right >= contRect.left;\n};\n\n/**\n * Position the floatable below its container.\n *\n * This should only be done when both of them are attached to the DOM and visible.\n *\n * @chainable\n */\nOO.ui.mixin.FloatableElement.prototype.position = function () {\n\tif ( !this.positioning ) {\n\t\treturn this;\n\t}\n\n\tif ( !(\n\t\t// To continue, some things need to be true:\n\t\t// The element must actually be in the DOM\n\t\tthis.isElementAttached() && (\n\t\t\t// The closest scrollable is the current window\n\t\t\tthis.$floatableClosestScrollable[ 0 ] === this.getElementWindow() ||\n\t\t\t// OR is an element in the element's DOM\n\t\t\t$.contains( this.getElementDocument(), this.$floatableClosestScrollable[ 0 ] )\n\t\t)\n\t) ) {\n\t\t// Abort early if important parts of the widget are no longer attached to the DOM\n\t\treturn this;\n\t}\n\n\tif ( this.hideWhenOutOfView && !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) {\n\t\tthis.$floatable.addClass( 'oo-ui-element-hidden' );\n\t\treturn this;\n\t} else {\n\t\tthis.$floatable.removeClass( 'oo-ui-element-hidden' );\n\t}\n\n\tif ( !this.needsCustomPosition ) {\n\t\treturn this;\n\t}\n\n\tthis.$floatable.css( this.computePosition() );\n\n\t// We updated the position, so re-evaluate the clipping state.\n\t// (ClippableElement does not listen to 'scroll' events on $floatableContainer's parent, and so\n\t// will not notice the need to update itself.)\n\t// TODO: This is terrible, we shouldn't need to know about ClippableElement at all here. Why does\n\t// it not listen to the right events in the right places?\n\tif ( this.clip ) {\n\t\tthis.clip();\n\t}\n\n\treturn this;\n};\n\n/**\n * Compute how #$floatable should be positioned based on the position of #$floatableContainer\n * and the positioning settings. This is a helper for #position that shouldn't be called directly,\n * but may be overridden by subclasses if they want to change or add to the positioning logic.\n *\n * @return {Object} New position to apply with .css(). Keys are 'top', 'left', 'bottom' and 'right'.\n */\nOO.ui.mixin.FloatableElement.prototype.computePosition = function () {\n\tvar isBody, scrollableX, scrollableY, containerPos,\n\t\thorizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft,\n\t\tnewPos = { top: '', left: '', bottom: '', right: '' },\n\t\tdirection = this.$floatableContainer.css( 'direction' ),\n\t\t$offsetParent = this.$floatable.offsetParent();\n\n\tif ( $offsetParent.is( 'html' ) ) {\n\t\t// The innerHeight/Width and clientHeight/Width calculations don't work well on the\n\t\t// <html> element, but they do work on the <body>\n\t\t$offsetParent = $( $offsetParent[ 0 ].ownerDocument.body );\n\t}\n\tisBody = $offsetParent.is( 'body' );\n\tscrollableX = $offsetParent.css( 'overflow-x' ) === 'scroll' || $offsetParent.css( 'overflow-x' ) === 'auto';\n\tscrollableY = $offsetParent.css( 'overflow-y' ) === 'scroll' || $offsetParent.css( 'overflow-y' ) === 'auto';\n\n\tvertScrollbarWidth = $offsetParent.innerWidth() - $offsetParent.prop( 'clientWidth' );\n\thorizScrollbarHeight = $offsetParent.innerHeight() - $offsetParent.prop( 'clientHeight' );\n\t// We don't need to compute and add scrollTop and scrollLeft if the scrollable container is the body,\n\t// or if it isn't scrollable\n\tscrollTop = scrollableY && !isBody ? $offsetParent.scrollTop() : 0;\n\tscrollLeft = scrollableX && !isBody ? OO.ui.Element.static.getScrollLeft( $offsetParent[ 0 ] ) : 0;\n\n\t// Avoid passing the <body> to getRelativePosition(), because it won't return what we expect\n\t// if the <body> has a margin\n\tcontainerPos = isBody ?\n\t\tthis.$floatableContainer.offset() :\n\t\tOO.ui.Element.static.getRelativePosition( this.$floatableContainer, $offsetParent );\n\tcontainerPos.bottom = containerPos.top + this.$floatableContainer.outerHeight();\n\tcontainerPos.right = containerPos.left + this.$floatableContainer.outerWidth();\n\tcontainerPos.start = direction === 'rtl' ? containerPos.right : containerPos.left;\n\tcontainerPos.end = direction === 'rtl' ? containerPos.left : containerPos.right;\n\n\tif ( this.verticalPosition === 'below' ) {\n\t\tnewPos.top = containerPos.bottom;\n\t} else if ( this.verticalPosition === 'above' ) {\n\t\tnewPos.bottom = $offsetParent.outerHeight() - containerPos.top;\n\t} else if ( this.verticalPosition === 'top' ) {\n\t\tnewPos.top = containerPos.top;\n\t} else if ( this.verticalPosition === 'bottom' ) {\n\t\tnewPos.bottom = $offsetParent.outerHeight() - containerPos.bottom;\n\t} else if ( this.verticalPosition === 'center' ) {\n\t\tnewPos.top = containerPos.top +\n\t\t\t( this.$floatableContainer.height() - this.$floatable.height() ) / 2;\n\t}\n\n\tif ( this.horizontalPosition === 'before' ) {\n\t\tnewPos.end = containerPos.start;\n\t} else if ( this.horizontalPosition === 'after' ) {\n\t\tnewPos.start = containerPos.end;\n\t} else if ( this.horizontalPosition === 'start' ) {\n\t\tnewPos.start = containerPos.start;\n\t} else if ( this.horizontalPosition === 'end' ) {\n\t\tnewPos.end = containerPos.end;\n\t} else if ( this.horizontalPosition === 'center' ) {\n\t\tnewPos.left = containerPos.left +\n\t\t\t( this.$floatableContainer.width() - this.$floatable.width() ) / 2;\n\t}\n\n\tif ( newPos.start !== undefined ) {\n\t\tif ( direction === 'rtl' ) {\n\t\t\tnewPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.start;\n\t\t} else {\n\t\t\tnewPos.left = newPos.start;\n\t\t}\n\t\tdelete newPos.start;\n\t}\n\tif ( newPos.end !== undefined ) {\n\t\tif ( direction === 'rtl' ) {\n\t\t\tnewPos.left = newPos.end;\n\t\t} else {\n\t\t\tnewPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.end;\n\t\t}\n\t\tdelete newPos.end;\n\t}\n\n\t// Account for scroll position\n\tif ( newPos.top !== '' ) {\n\t\tnewPos.top += scrollTop;\n\t}\n\tif ( newPos.bottom !== '' ) {\n\t\tnewPos.bottom -= scrollTop;\n\t}\n\tif ( newPos.left !== '' ) {\n\t\tnewPos.left += scrollLeft;\n\t}\n\tif ( newPos.right !== '' ) {\n\t\tnewPos.right -= scrollLeft;\n\t}\n\n\t// Account for scrollbar gutter\n\tif ( newPos.bottom !== '' ) {\n\t\tnewPos.bottom -= horizScrollbarHeight;\n\t}\n\tif ( direction === 'rtl' ) {\n\t\tif ( newPos.left !== '' ) {\n\t\t\tnewPos.left -= vertScrollbarWidth;\n\t\t}\n\t} else {\n\t\tif ( newPos.right !== '' ) {\n\t\t\tnewPos.right -= vertScrollbarWidth;\n\t\t}\n\t}\n\n\treturn newPos;\n};\n","/**\n * Element that can be automatically clipped to visible boundaries.\n *\n * Whenever the element's natural height changes, you have to call\n * {@link OO.ui.mixin.ClippableElement#clip} to make sure it's still\n * clipping correctly.\n *\n * The dimensions of #$clippableContainer will be compared to the boundaries of the\n * nearest scrollable container. If #$clippableContainer is too tall and/or too wide,\n * then #$clippable will be given a fixed reduced height and/or width and will be made\n * scrollable. By default, #$clippable and #$clippableContainer are the same element,\n * but you can build a static footer by setting #$clippableContainer to an element that contains\n * #$clippable and the footer.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$clippable] Node to clip, assigned to #$clippable, omit to use #$element\n * @cfg {jQuery} [$clippableContainer] Node to keep visible, assigned to #$clippableContainer,\n *   omit to use #$clippable\n */\nOO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$clippable = null;\n\tthis.$clippableContainer = null;\n\tthis.clipping = false;\n\tthis.clippedHorizontally = false;\n\tthis.clippedVertically = false;\n\tthis.$clippableScrollableContainer = null;\n\tthis.$clippableScroller = null;\n\tthis.$clippableWindow = null;\n\tthis.idealWidth = null;\n\tthis.idealHeight = null;\n\tthis.onClippableScrollHandler = this.clip.bind( this );\n\tthis.onClippableWindowResizeHandler = this.clip.bind( this );\n\n\t// Initialization\n\tif ( config.$clippableContainer ) {\n\t\tthis.setClippableContainer( config.$clippableContainer );\n\t}\n\tthis.setClippableElement( config.$clippable || this.$element );\n};\n\n/* Methods */\n\n/**\n * Set clippable element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $clippable Element to make clippable\n */\nOO.ui.mixin.ClippableElement.prototype.setClippableElement = function ( $clippable ) {\n\tif ( this.$clippable ) {\n\t\tthis.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );\n\t\tthis.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );\n\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\t}\n\n\tthis.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );\n\tthis.clip();\n};\n\n/**\n * Set clippable container.\n *\n * This is the container that will be measured when deciding whether to clip. When clipping,\n * #$clippable will be resized in order to keep the clippable container fully visible.\n *\n * If the clippable container is unset, #$clippable will be used.\n *\n * @param {jQuery|null} $clippableContainer Container to keep visible, or null to unset\n */\nOO.ui.mixin.ClippableElement.prototype.setClippableContainer = function ( $clippableContainer ) {\n\tthis.$clippableContainer = $clippableContainer;\n\tif ( this.$clippable ) {\n\t\tthis.clip();\n\t}\n};\n\n/**\n * Toggle clipping.\n *\n * Do not turn clipping on until after the element is attached to the DOM and visible.\n *\n * @param {boolean} [clipping] Enable clipping, omit to toggle\n * @chainable\n */\nOO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {\n\tclipping = clipping === undefined ? !this.clipping : !!clipping;\n\n\tif ( clipping && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'ClippableElement#toggleClipping: Before calling this method, the element must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( this.clipping !== clipping ) {\n\t\tthis.clipping = clipping;\n\t\tif ( clipping ) {\n\t\t\tthis.$clippableScrollableContainer = $( this.getClosestScrollableElementContainer() );\n\t\t\t// If the clippable container is the root, we have to listen to scroll events and check\n\t\t\t// jQuery.scrollTop on the window because of browser inconsistencies\n\t\t\tthis.$clippableScroller = this.$clippableScrollableContainer.is( 'html, body' ) ?\n\t\t\t\t$( OO.ui.Element.static.getWindow( this.$clippableScrollableContainer ) ) :\n\t\t\t\tthis.$clippableScrollableContainer;\n\t\t\tthis.$clippableScroller.on( 'scroll', this.onClippableScrollHandler );\n\t\t\tthis.$clippableWindow = $( this.getElementWindow() )\n\t\t\t\t.on( 'resize', this.onClippableWindowResizeHandler );\n\t\t\t// Initial clip after visible\n\t\t\tthis.clip();\n\t\t} else {\n\t\t\tthis.$clippable.css( {\n\t\t\t\twidth: '',\n\t\t\t\theight: '',\n\t\t\t\tmaxWidth: '',\n\t\t\t\tmaxHeight: '',\n\t\t\t\toverflowX: '',\n\t\t\t\toverflowY: ''\n\t\t\t} );\n\t\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\n\t\t\tthis.$clippableScrollableContainer = null;\n\t\t\tthis.$clippableScroller.off( 'scroll', this.onClippableScrollHandler );\n\t\t\tthis.$clippableScroller = null;\n\t\t\tthis.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );\n\t\t\tthis.$clippableWindow = null;\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if the element will be clipped to fit the visible area of the nearest scrollable container.\n *\n * @return {boolean} Element will be clipped to the visible area\n */\nOO.ui.mixin.ClippableElement.prototype.isClipping = function () {\n\treturn this.clipping;\n};\n\n/**\n * Check if the bottom or right of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClipped = function () {\n\treturn this.clippedHorizontally || this.clippedVertically;\n};\n\n/**\n * Check if the right of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClippedHorizontally = function () {\n\treturn this.clippedHorizontally;\n};\n\n/**\n * Check if the bottom of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClippedVertically = function () {\n\treturn this.clippedVertically;\n};\n\n/**\n * Set the ideal size. These are the dimensions #$clippable will have when it's not being clipped.\n *\n * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix\n * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix\n */\nOO.ui.mixin.ClippableElement.prototype.setIdealSize = function ( width, height ) {\n\tthis.idealWidth = width;\n\tthis.idealHeight = height;\n\n\tif ( !this.clipping ) {\n\t\t// Update dimensions\n\t\tthis.$clippable.css( { width: width, height: height } );\n\t}\n\t// While clipping, idealWidth and idealHeight are not considered\n};\n\n/**\n * Clip element to visible boundaries and allow scrolling when needed. You should call this method\n * when the element's natural height changes.\n *\n * Element will be clipped the bottom or right of the element is within 10px of the edge of, or\n * overlapped by, the visible area of the nearest scrollable container.\n *\n * Because calling clip() when the natural height changes isn't always possible, we also set\n * max-height when the element isn't being clipped. This means that if the element tries to grow\n * beyond the edge, something reasonable will happen before clip() is called.\n *\n * @chainable\n */\nOO.ui.mixin.ClippableElement.prototype.clip = function () {\n\tvar $container, extraHeight, extraWidth, ccOffset,\n\t\t$scrollableContainer, scOffset, scHeight, scWidth,\n\t\tccWidth, scrollerIsWindow, scrollTop, scrollLeft,\n\t\tdesiredWidth, desiredHeight, allotedWidth, allotedHeight,\n\t\tnaturalWidth, naturalHeight, clipWidth, clipHeight,\n\t\tbuffer = 7; // Chosen by fair dice roll\n\n\tif ( !this.clipping ) {\n\t\t// this.$clippableScrollableContainer and this.$clippableWindow are null, so the below will fail\n\t\treturn this;\n\t}\n\n\t$container = this.$clippableContainer || this.$clippable;\n\textraHeight = $container.outerHeight() - this.$clippable.outerHeight();\n\textraWidth = $container.outerWidth() - this.$clippable.outerWidth();\n\tccOffset = $container.offset();\n\tif ( this.$clippableScrollableContainer.is( 'html, body' ) ) {\n\t\t$scrollableContainer = this.$clippableWindow;\n\t\tscOffset = { top: 0, left: 0 };\n\t} else {\n\t\t$scrollableContainer = this.$clippableScrollableContainer;\n\t\tscOffset = $scrollableContainer.offset();\n\t}\n\tscHeight = $scrollableContainer.innerHeight() - buffer;\n\tscWidth = $scrollableContainer.innerWidth() - buffer;\n\tccWidth = $container.outerWidth() + buffer;\n\tscrollerIsWindow = this.$clippableScroller[ 0 ] === this.$clippableWindow[ 0 ];\n\tscrollTop = scrollerIsWindow ? this.$clippableScroller.scrollTop() : 0;\n\tscrollLeft = scrollerIsWindow ? this.$clippableScroller.scrollLeft() : 0;\n\tdesiredWidth = ccOffset.left < 0 ?\n\t\tccWidth + ccOffset.left :\n\t\t( scOffset.left + scrollLeft + scWidth ) - ccOffset.left;\n\tdesiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top;\n\t// It should never be desirable to exceed the dimensions of the browser viewport... right?\n\tdesiredWidth = Math.min( desiredWidth, document.documentElement.clientWidth );\n\tdesiredHeight = Math.min( desiredHeight, document.documentElement.clientHeight );\n\tallotedWidth = Math.ceil( desiredWidth - extraWidth );\n\tallotedHeight = Math.ceil( desiredHeight - extraHeight );\n\tnaturalWidth = this.$clippable.prop( 'scrollWidth' );\n\tnaturalHeight = this.$clippable.prop( 'scrollHeight' );\n\tclipWidth = allotedWidth < naturalWidth;\n\tclipHeight = allotedHeight < naturalHeight;\n\n\tif ( clipWidth ) {\n\t\t// The order matters here. If overflow is not set first, Chrome displays bogus scrollbars. See T157672.\n\t\t// Forcing a reflow is a smaller workaround than calling reconsiderScrollbars() for this case.\n\t\tthis.$clippable.css( 'overflowX', 'scroll' );\n\t\tvoid this.$clippable[ 0 ].offsetHeight; // Force reflow\n\t\tthis.$clippable.css( {\n\t\t\twidth: Math.max( 0, allotedWidth ),\n\t\t\tmaxWidth: ''\n\t\t} );\n\t} else {\n\t\tthis.$clippable.css( {\n\t\t\toverflowX: '',\n\t\t\twidth: this.idealWidth || '',\n\t\t\tmaxWidth: Math.max( 0, allotedWidth )\n\t\t} );\n\t}\n\tif ( clipHeight ) {\n\t\t// The order matters here. If overflow is not set first, Chrome displays bogus scrollbars. See T157672.\n\t\t// Forcing a reflow is a smaller workaround than calling reconsiderScrollbars() for this case.\n\t\tthis.$clippable.css( 'overflowY', 'scroll' );\n\t\tvoid this.$clippable[ 0 ].offsetHeight; // Force reflow\n\t\tthis.$clippable.css( {\n\t\t\theight: Math.max( 0, allotedHeight ),\n\t\t\tmaxHeight: ''\n\t\t} );\n\t} else {\n\t\tthis.$clippable.css( {\n\t\t\toverflowY: '',\n\t\t\theight: this.idealHeight || '',\n\t\t\tmaxHeight: Math.max( 0, allotedHeight )\n\t\t} );\n\t}\n\n\t// If we stopped clipping in at least one of the dimensions\n\tif ( ( this.clippedHorizontally && !clipWidth ) || ( this.clippedVertically && !clipHeight ) ) {\n\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\t}\n\n\tthis.clippedHorizontally = clipWidth;\n\tthis.clippedVertically = clipHeight;\n\n\treturn this;\n};\n","/**\n * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.\n * By default, each popup has an anchor that points toward its origin.\n * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.\n *\n * Unlike most widgets, PopupWidget is initially hidden and must be shown by calling #toggle.\n *\n *     @example\n *     // A popup widget.\n *     var popup = new OO.ui.PopupWidget( {\n *         $content: $( '<p>Hi there!</p>' ),\n *         padded: true,\n *         width: 300\n *     } );\n *\n *     $( 'body' ).append( popup.$element );\n *     // To display the popup, toggle the visibility to 'true'.\n *     popup.toggle( true );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.FloatableElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [width=320] Width of popup in pixels\n * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.\n * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup\n * @cfg {string} [position='below'] Where to position the popup relative to $floatableContainer\n *  'above': Put popup above $floatableContainer; anchor points down to the horizontal center\n *           of $floatableContainer\n *  'below': Put popup below $floatableContainer; anchor points up to the horizontal center\n *           of $floatableContainer\n *  'before': Put popup to the left (LTR) / right (RTL) of $floatableContainer; anchor points\n *            endwards (right/left) to the vertical center of $floatableContainer\n *  'after': Put popup to the right (LTR) / left (RTL) of $floatableContainer; anchor points\n *            startwards (left/right) to the vertical center of $floatableContainer\n * @cfg {string} [align='center'] How to align the popup to $floatableContainer\n *  'forwards': If position is above/below, move the popup as far endwards (right in LTR, left in RTL)\n *              as possible while still keeping the anchor within the popup;\n *              if position is before/after, move the popup as far downwards as possible.\n *  'backwards': If position is above/below, move the popup as far startwards (left in LTR, right in RTL)\n *               as possible while still keeping the anchor within the popup;\n *               if position in before/after, move the popup as far upwards as possible.\n *  'center': Horizontally (if position is above/below) or vertically (before/after) align the center\n *            of the popup with the center of $floatableContainer.\n * 'force-left': Alias for 'forwards' in LTR and 'backwards' in RTL\n * 'force-right': Alias for 'backwards' in RTL and 'forwards' in LTR\n * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.\n *  See the [OOjs UI docs on MediaWiki][3] for an example.\n *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample\n * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.\n * @cfg {jQuery} [$content] Content to append to the popup's body\n * @cfg {jQuery} [$footer] Content to append to the popup's footer\n * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.\n * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.\n *  This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]\n *  for an example.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#autocloseExample\n * @cfg {boolean} [head=false] Show a popup header that contains a #label (if specified) and close\n *  button.\n * @cfg {boolean} [padded=false] Add padding to the popup's body\n */\nOO.ui.PopupWidget = function OoUiPopupWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupWidget.parent.call( this, config );\n\n\t// Properties (must be set before ClippableElement constructor call)\n\tthis.$body = $( '<div>' );\n\tthis.$popup = $( '<div>' );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, {\n\t\t$clippable: this.$body,\n\t\t$clippableContainer: this.$popup\n\t} ) );\n\tOO.ui.mixin.FloatableElement.call( this, config );\n\n\t// Properties\n\tthis.$anchor = $( '<div>' );\n\t// If undefined, will be computed lazily in computePosition()\n\tthis.$container = config.$container;\n\tthis.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;\n\tthis.autoClose = !!config.autoClose;\n\tthis.$autoCloseIgnore = config.$autoCloseIgnore;\n\tthis.transitionTimeout = null;\n\tthis.anchored = false;\n\tthis.width = config.width !== undefined ? config.width : 320;\n\tthis.height = config.height !== undefined ? config.height : null;\n\tthis.onMouseDownHandler = this.onMouseDown.bind( this );\n\tthis.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );\n\n\t// Initialization\n\tthis.toggleAnchor( config.anchor === undefined || config.anchor );\n\tthis.setAlignment( config.align || 'center' );\n\tthis.setPosition( config.position || 'below' );\n\tthis.$body.addClass( 'oo-ui-popupWidget-body' );\n\tthis.$anchor.addClass( 'oo-ui-popupWidget-anchor' );\n\tthis.$popup\n\t\t.addClass( 'oo-ui-popupWidget-popup' )\n\t\t.append( this.$body );\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupWidget' )\n\t\t.append( this.$popup, this.$anchor );\n\t// Move content, which was added to #$element by OO.ui.Widget, to the body\n\t// FIXME This is gross, we should use '$body' or something for the config\n\tif ( config.$content instanceof jQuery ) {\n\t\tthis.$body.append( config.$content );\n\t}\n\n\tif ( config.padded ) {\n\t\tthis.$body.addClass( 'oo-ui-popupWidget-body-padded' );\n\t}\n\n\tif ( config.head ) {\n\t\tthis.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );\n\t\tthis.closeButton.connect( this, { click: 'onCloseButtonClick' } );\n\t\tthis.$head = $( '<div>' )\n\t\t\t.addClass( 'oo-ui-popupWidget-head' )\n\t\t\t.append( this.$label, this.closeButton.$element );\n\t\tthis.$popup.prepend( this.$head );\n\t}\n\n\tif ( config.$footer ) {\n\t\tthis.$footer = $( '<div>' )\n\t\t\t.addClass( 'oo-ui-popupWidget-footer' )\n\t\t\t.append( config.$footer );\n\t\tthis.$popup.append( this.$footer );\n\t}\n\n\t// Initially hidden - using #toggle may cause errors if subclasses override toggle with methods\n\t// that reference properties not initialized at that time of parent class construction\n\t// TODO: Find a better way to handle post-constructor setup\n\tthis.visible = false;\n\tthis.$element.addClass( 'oo-ui-element-hidden' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.FloatableElement );\n\n/* Events */\n\n/**\n * @event ready\n *\n * The popup is ready: it is visible and has been positioned and clipped.\n */\n\n/* Methods */\n\n/**\n * Handles mouse down events.\n *\n * @private\n * @param {MouseEvent} e Mouse down event\n */\nOO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {\n\tif (\n\t\tthis.isVisible() &&\n\t\t!OO.ui.contains( this.$element.add( this.$autoCloseIgnore ).get(), e.target, true )\n\t) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * Bind mouse down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.bindMouseDownListener = function () {\n\t// Capture clicks outside popup\n\tthis.getElementWindow().addEventListener( 'mousedown', this.onMouseDownHandler, true );\n};\n\n/**\n * Handles close button click events.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.onCloseButtonClick = function () {\n\tif ( this.isVisible() ) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * Unbind mouse down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );\n};\n\n/**\n * Handles key down events.\n *\n * @private\n * @param {KeyboardEvent} e Key down event\n */\nOO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {\n\tif (\n\t\te.which === OO.ui.Keys.ESCAPE &&\n\t\tthis.isVisible()\n\t) {\n\t\tthis.toggle( false );\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n};\n\n/**\n * Bind key down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.bindKeyDownListener = function () {\n\tthis.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );\n};\n\n/**\n * Show, hide, or toggle the visibility of the anchor.\n *\n * @param {boolean} [show] Show anchor, omit to toggle\n */\nOO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {\n\tshow = show === undefined ? !this.anchored : !!show;\n\n\tif ( this.anchored !== show ) {\n\t\tif ( show ) {\n\t\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored' );\n\t\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t\t} else {\n\t\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored' );\n\t\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t\t}\n\t\tthis.anchored = show;\n\t}\n};\n/**\n * Change which edge the anchor appears on.\n *\n * @param {string} edge 'top', 'bottom', 'start' or 'end'\n */\nOO.ui.PopupWidget.prototype.setAnchorEdge = function ( edge ) {\n\tif ( [ 'top', 'bottom', 'start', 'end' ].indexOf( edge ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for edge: ' + edge );\n\t}\n\tif ( this.anchorEdge !== null ) {\n\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t}\n\tthis.anchorEdge = edge;\n\tif ( this.anchored ) {\n\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored-' + edge );\n\t}\n};\n\n/**\n * Check if the anchor is visible.\n *\n * @return {boolean} Anchor is visible\n */\nOO.ui.PopupWidget.prototype.hasAnchor = function () {\n\treturn this.anchored;\n};\n\n/**\n * Toggle visibility of the popup. The popup is initially hidden and must be shown by calling\n * `.toggle( true )` after its #$element is attached to the DOM.\n *\n * Do not show the popup while it is not attached to the DOM. The calculations required to display\n * it in the right place and with the right dimensions only work correctly while it is attached.\n * Side-effects may include broken interface and exceptions being thrown. This wasn't always\n * strictly enforced, so currently it only generates a warning in the browser console.\n *\n * @fires ready\n * @inheritdoc\n */\nOO.ui.PopupWidget.prototype.toggle = function ( show ) {\n\tvar change;\n\tshow = show === undefined ? !this.isVisible() : !!show;\n\n\tchange = show !== this.isVisible();\n\n\tif ( show && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\tif ( show && !this.$floatableContainer && this.isElementAttached() ) {\n\t\t// Fall back to the parent node if the floatableContainer is not set\n\t\tthis.setFloatableContainer( this.$element.parent() );\n\t}\n\n\t// Parent method\n\tOO.ui.PopupWidget.parent.prototype.toggle.call( this, show );\n\n\tif ( change ) {\n\t\tthis.togglePositioning( show && !!this.$floatableContainer );\n\n\t\tif ( show ) {\n\t\t\tif ( this.autoClose ) {\n\t\t\t\tthis.bindMouseDownListener();\n\t\t\t\tthis.bindKeyDownListener();\n\t\t\t}\n\t\t\tthis.updateDimensions();\n\t\t\tthis.toggleClipping( true );\n\t\t\tthis.emit( 'ready' );\n\t\t} else {\n\t\t\tthis.toggleClipping( false );\n\t\t\tif ( this.autoClose ) {\n\t\t\t\tthis.unbindMouseDownListener();\n\t\t\t\tthis.unbindKeyDownListener();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the size of the popup.\n *\n * Changing the size may also change the popup's position depending on the alignment.\n *\n * @param {number} width Width in pixels\n * @param {number} height Height in pixels\n * @param {boolean} [transition=false] Use a smooth transition\n * @chainable\n */\nOO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {\n\tthis.width = width;\n\tthis.height = height !== undefined ? height : null;\n\tif ( this.isVisible() ) {\n\t\tthis.updateDimensions( transition );\n\t}\n};\n\n/**\n * Update the size and position.\n *\n * Only use this to keep the popup properly anchored. Use #setSize to change the size, and this will\n * be called automatically.\n *\n * @param {boolean} [transition=false] Use a smooth transition\n * @chainable\n */\nOO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {\n\tvar widget = this;\n\n\t// Prevent transition from being interrupted\n\tclearTimeout( this.transitionTimeout );\n\tif ( transition ) {\n\t\t// Enable transition\n\t\tthis.$element.addClass( 'oo-ui-popupWidget-transitioning' );\n\t}\n\n\tthis.position();\n\n\tif ( transition ) {\n\t\t// Prevent transitioning after transition is complete\n\t\tthis.transitionTimeout = setTimeout( function () {\n\t\t\twidget.$element.removeClass( 'oo-ui-popupWidget-transitioning' );\n\t\t}, 200 );\n\t} else {\n\t\t// Prevent transitioning immediately\n\t\tthis.$element.removeClass( 'oo-ui-popupWidget-transitioning' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupWidget.prototype.computePosition = function () {\n\tvar direction, align, vertical, start, end, near, far, sizeProp, popupSize, anchorSize, anchorPos,\n\t\tanchorOffset, anchorMargin, parentPosition, positionProp, positionAdjustment, floatablePos,\n\t\toffsetParentPos, containerPos,\n\t\tpopupPos = {},\n\t\tanchorCss = { left: '', right: '', top: '', bottom: '' },\n\t\talignMap = {\n\t\t\tltr: {\n\t\t\t\t'force-left': 'backwards',\n\t\t\t\t'force-right': 'forwards'\n\t\t\t},\n\t\t\trtl: {\n\t\t\t\t'force-left': 'forwards',\n\t\t\t\t'force-right': 'backwards'\n\t\t\t}\n\t\t},\n\t\tanchorEdgeMap = {\n\t\t\tabove: 'bottom',\n\t\t\tbelow: 'top',\n\t\t\tbefore: 'end',\n\t\t\tafter: 'start'\n\t\t},\n\t\thPosMap = {\n\t\t\tforwards: 'start',\n\t\t\tcenter: 'center',\n\t\t\tbackwards: this.anchored ? 'before' : 'end'\n\t\t},\n\t\tvPosMap = {\n\t\t\tforwards: 'top',\n\t\t\tcenter: 'center',\n\t\t\tbackwards: 'bottom'\n\t\t};\n\n\tif ( !this.$container ) {\n\t\t// Lazy-initialize $container if not specified in constructor\n\t\tthis.$container = $( this.getClosestScrollableElementContainer() );\n\t}\n\tdirection = this.$container.css( 'direction' );\n\n\t// Set height and width before we do anything else, since it might cause our measurements\n\t// to change (e.g. due to scrollbars appearing or disappearing), and it also affects centering\n\tthis.$popup.css( {\n\t\twidth: this.width,\n\t\theight: this.height !== null ? this.height : 'auto'\n\t} );\n\n\talign = alignMap[ direction ][ this.align ] || this.align;\n\t// If the popup is positioned before or after, then the anchor positioning is vertical, otherwise horizontal\n\tvertical = this.popupPosition === 'before' || this.popupPosition === 'after';\n\tstart = vertical ? 'top' : ( direction === 'rtl' ? 'right' : 'left' );\n\tend = vertical ? 'bottom' : ( direction === 'rtl' ? 'left' : 'right' );\n\tnear = vertical ? 'top' : 'left';\n\tfar = vertical ? 'bottom' : 'right';\n\tsizeProp = vertical ? 'Height' : 'Width';\n\tpopupSize = vertical ? ( this.height || this.$popup.height() ) : this.width;\n\n\tthis.setAnchorEdge( anchorEdgeMap[ this.popupPosition ] );\n\tthis.horizontalPosition = vertical ? this.popupPosition : hPosMap[ align ];\n\tthis.verticalPosition = vertical ? vPosMap[ align ] : this.popupPosition;\n\n\t// Parent method\n\tparentPosition = OO.ui.mixin.FloatableElement.prototype.computePosition.call( this );\n\t// Find out which property FloatableElement used for positioning, and adjust that value\n\tpositionProp = vertical ?\n\t\t( parentPosition.top !== '' ? 'top' : 'bottom' ) :\n\t\t( parentPosition.left !== '' ? 'left' : 'right' );\n\n\t// Figure out where the near and far edges of the popup and $floatableContainer are\n\tfloatablePos = this.$floatableContainer.offset();\n\tfloatablePos[ far ] = floatablePos[ near ] + this.$floatableContainer[ 'outer' + sizeProp ]();\n\t// Measure where the offsetParent is and compute our position based on that and parentPosition\n\toffsetParentPos = this.$element.offsetParent().offset();\n\n\tif ( positionProp === near ) {\n\t\tpopupPos[ near ] = offsetParentPos[ near ] + parentPosition[ near ];\n\t\tpopupPos[ far ] = popupPos[ near ] + popupSize;\n\t} else {\n\t\tpopupPos[ far ] = offsetParentPos[ near ] +\n\t\t\tthis.$element.offsetParent()[ 'inner' + sizeProp ]() - parentPosition[ far ];\n\t\tpopupPos[ near ] = popupPos[ far ] - popupSize;\n\t}\n\n\tif ( this.anchored ) {\n\t\t// Position the anchor (which is positioned relative to the popup) to point to $floatableContainer\n\t\tanchorPos = ( floatablePos[ start ] + floatablePos[ end ] ) / 2;\n\t\tanchorOffset = ( start === far ? -1 : 1 ) * ( anchorPos - popupPos[ start ] );\n\n\t\t// If the anchor is less than 2*anchorSize from either edge, move the popup to make more space\n\t\t// this.$anchor.width()/height() returns 0 because of the CSS trickery we use, so use scrollWidth/Height\n\t\tanchorSize = this.$anchor[ 0 ][ 'scroll' + sizeProp ];\n\t\tanchorMargin = parseFloat( this.$anchor.css( 'margin-' + start ) );\n\t\tif ( anchorOffset + anchorMargin < 2 * anchorSize ) {\n\t\t\t// Not enough space for the anchor on the start side; pull the popup startwards\n\t\t\tpositionAdjustment = ( positionProp === start ? -1 : 1 ) *\n\t\t\t\t( 2 * anchorSize - ( anchorOffset + anchorMargin ) );\n\t\t} else if ( anchorOffset + anchorMargin > popupSize - 2 * anchorSize ) {\n\t\t\t// Not enough space for the anchor on the end side; pull the popup endwards\n\t\t\tpositionAdjustment = ( positionProp === end ? -1 : 1 ) *\n\t\t\t\t( anchorOffset + anchorMargin - ( popupSize - 2 * anchorSize ) );\n\t\t} else {\n\t\t\tpositionAdjustment = 0;\n\t\t}\n\t} else {\n\t\tpositionAdjustment = 0;\n\t}\n\n\t// Check if the popup will go beyond the edge of this.$container\n\tcontainerPos = this.$container.offset();\n\tcontainerPos[ far ] = containerPos[ near ] + this.$container[ 'inner' + sizeProp ]();\n\t// Take into account how much the popup will move because of the adjustments we're going to make\n\tpopupPos[ near ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment;\n\tpopupPos[ far ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment;\n\tif ( containerPos[ near ] + this.containerPadding > popupPos[ near ] ) {\n\t\t// Popup goes beyond the near (left/top) edge, move it to the right/bottom\n\t\tpositionAdjustment += ( positionProp === near ? 1 : -1 ) *\n\t\t\t( containerPos[ near ] + this.containerPadding - popupPos[ near ] );\n\t} else if ( containerPos[ far ] - this.containerPadding < popupPos[ far ] ) {\n\t\t// Popup goes beyond the far (right/bottom) edge, move it to the left/top\n\t\tpositionAdjustment += ( positionProp === far ? 1 : -1 ) *\n\t\t\t( popupPos[ far ] - ( containerPos[ far ] - this.containerPadding ) );\n\t}\n\n\tif ( this.anchored ) {\n\t\t// Adjust anchorOffset for positionAdjustment\n\t\tanchorOffset += ( positionProp === start ? -1 : 1 ) * positionAdjustment;\n\n\t\t// Position the anchor\n\t\tanchorCss[ start ] = anchorOffset;\n\t\tthis.$anchor.css( anchorCss );\n\t}\n\n\t// Move the popup if needed\n\tparentPosition[ positionProp ] += positionAdjustment;\n\n\treturn parentPosition;\n};\n\n/**\n * Set popup alignment\n *\n * @param {string} [align=center] Alignment of the popup, `center`, `force-left`, `force-right`,\n *  `backwards` or `forwards`.\n */\nOO.ui.PopupWidget.prototype.setAlignment = function ( align ) {\n\t// Validate alignment\n\tif ( [ 'force-left', 'force-right', 'backwards', 'forwards', 'center' ].indexOf( align ) > -1 ) {\n\t\tthis.align = align;\n\t} else {\n\t\tthis.align = 'center';\n\t}\n\tthis.position();\n};\n\n/**\n * Get popup alignment\n *\n * @return {string} Alignment of the popup, `center`, `force-left`, `force-right`,\n *  `backwards` or `forwards`.\n */\nOO.ui.PopupWidget.prototype.getAlignment = function () {\n\treturn this.align;\n};\n\n/**\n * Change the positioning of the popup.\n *\n * @param {string} position 'above', 'below', 'before' or 'after'\n */\nOO.ui.PopupWidget.prototype.setPosition = function ( position ) {\n\tif ( [ 'above', 'below', 'before', 'after' ].indexOf( position ) === -1 ) {\n\t\tposition = 'below';\n\t}\n\tthis.popupPosition = position;\n\tthis.position();\n};\n\n/**\n * Get popup positioning.\n *\n * @return {string} 'above', 'below', 'before' or 'after'\n */\nOO.ui.PopupWidget.prototype.getPosition = function () {\n\treturn this.popupPosition;\n};\n\n/**\n * Get an ID of the body element, this can be used as the\n * `aria-describedby` attribute for an input field.\n *\n * @return {string} The ID of the body element\n */\nOO.ui.PopupWidget.prototype.getBodyId = function () {\n\tvar id = this.$body.attr( 'id' );\n\tif ( id === undefined ) {\n\t\tid = OO.ui.generateElementId();\n\t\tthis.$body.attr( 'id', id );\n\t}\n\treturn id;\n};\n","/**\n * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.\n * A popup is a container for content. It is overlaid and positioned absolutely. By default, each\n * popup has an anchor, which is an arrow-like protrusion that points toward the popup’s origin.\n * See {@link OO.ui.PopupWidget PopupWidget} for an example.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [popup] Configuration to pass to popup\n * @cfg {boolean} [popup.autoClose=true] Popup auto-closes when it loses focus\n */\nOO.ui.mixin.PopupElement = function OoUiMixinPopupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.popup = new OO.ui.PopupWidget( $.extend(\n\t\t{\n\t\t\tautoClose: true,\n\t\t\t$floatableContainer: this.$element\n\t\t},\n\t\tconfig.popup,\n\t\t{\n\t\t\t$autoCloseIgnore: this.$element.add( config.popup && config.popup.$autoCloseIgnore )\n\t\t}\n\t) );\n};\n\n/* Methods */\n\n/**\n * Get popup.\n *\n * @return {OO.ui.PopupWidget} Popup widget\n */\nOO.ui.mixin.PopupElement.prototype.getPopup = function () {\n\treturn this.popup;\n};\n","/**\n * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},\n * which is used to display additional information or options.\n *\n *     @example\n *     // Example of a popup button.\n *     var popupButton = new OO.ui.PopupButtonWidget( {\n *         label: 'Popup button with options',\n *         icon: 'menu',\n *         popup: {\n *             $content: $( '<p>Additional options here.</p>' ),\n *             padded: true,\n *             align: 'force-left'\n *         }\n *     } );\n *     // Append the button to the DOM.\n *     $( 'body' ).append( popupButton.$element );\n *\n * @class\n * @extends OO.ui.ButtonWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Render the popup into a separate layer. This configuration is useful in cases where\n *  the expanded popup is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the popup uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupButtonWidget' )\n\t\t.attr( 'aria-haspopup', 'true' );\n\tthis.popup.$element\n\t\t.addClass( 'oo-ui-popupButtonWidget-popup' )\n\t\t.toggleClass( 'oo-ui-popupButtonWidget-framed-popup', this.isFramed() )\n\t\t.toggleClass( 'oo-ui-popupButtonWidget-frameless-popup', !this.isFramed() );\n\tthis.$overlay.append( this.popup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );\nOO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.PopupButtonWidget.prototype.onAction = function () {\n\tthis.popup.toggle();\n};\n","/**\n * Mixin for OO.ui.Widget subclasses to provide OO.ui.mixin.GroupElement.\n *\n * Use together with OO.ui.mixin.ItemWidget to make disabled state inheritable.\n *\n * @private\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.mixin.GroupWidget = function OoUiMixinGroupWidget( config ) {\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.GroupWidget, OO.ui.mixin.GroupElement );\n\n/* Methods */\n\n/**\n * Set the disabled state of the widget.\n *\n * This will also update the disabled state of child widgets.\n *\n * @param {boolean} disabled Disable widget\n * @chainable\n */\nOO.ui.mixin.GroupWidget.prototype.setDisabled = function ( disabled ) {\n\tvar i, len;\n\n\t// Parent method\n\t// Note: Calling #setDisabled this way assumes this is mixed into an OO.ui.Widget\n\tOO.ui.Widget.prototype.setDisabled.call( this, disabled );\n\n\t// During construction, #setDisabled is called before the OO.ui.mixin.GroupElement constructor\n\tif ( this.items ) {\n\t\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\t\tthis.items[ i ].updateDisabled();\n\t\t}\n\t}\n\n\treturn this;\n};\n","/**\n * Mixin for widgets used as items in widgets that mix in OO.ui.mixin.GroupWidget.\n *\n * Item widgets have a reference to a OO.ui.mixin.GroupWidget while they are attached to the group. This\n * allows bidirectional communication.\n *\n * Use together with OO.ui.mixin.GroupWidget to make disabled state inheritable.\n *\n * @private\n * @abstract\n * @class\n *\n * @constructor\n */\nOO.ui.mixin.ItemWidget = function OoUiMixinItemWidget() {\n\t//\n};\n\n/* Methods */\n\n/**\n * Check if widget is disabled.\n *\n * Checks parent if present, making disabled state inheritable.\n *\n * @return {boolean} Widget is disabled\n */\nOO.ui.mixin.ItemWidget.prototype.isDisabled = function () {\n\treturn this.disabled ||\n\t\t( this.elementGroup instanceof OO.ui.Widget && this.elementGroup.isDisabled() );\n};\n\n/**\n * Set group element is in.\n *\n * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none\n * @chainable\n */\nOO.ui.mixin.ItemWidget.prototype.setElementGroup = function ( group ) {\n\t// Parent method\n\t// Note: Calling #setElementGroup this way assumes this is mixed into an OO.ui.Element\n\tOO.ui.Element.prototype.setElementGroup.call( this, group );\n\n\t// Initialize item disabled states\n\tthis.updateDisabled();\n\n\treturn this;\n};\n","/**\n * OptionWidgets are special elements that can be selected and configured with data. The\n * data is often unique for each option, but it does not have to be. OptionWidgets are used\n * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information\n * and examples, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OptionWidget = function OoUiOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.AccessKeyedElement.call( this, config );\n\n\t// Properties\n\tthis.selected = false;\n\tthis.highlighted = false;\n\tthis.pressed = false;\n\n\t// Initialization\n\tthis.$element\n\t\t.data( 'oo-ui-optionWidget', this )\n\t\t// Allow programmatic focussing (and by accesskey), but not tabbing\n\t\t.attr( 'tabindex', '-1' )\n\t\t.attr( 'role', 'option' )\n\t\t.attr( 'aria-selected', 'false' )\n\t\t.addClass( 'oo-ui-optionWidget' )\n\t\t.append( this.$label );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * Whether this option can be selected. See #setSelected.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.selectable = true;\n\n/**\n * Whether this option can be highlighted. See #setHighlighted.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.highlightable = true;\n\n/**\n * Whether this option can be pressed. See #setPressed.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.pressable = true;\n\n/**\n * Whether this option will be scrolled into view when it is selected.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;\n\n/* Methods */\n\n/**\n * Check if the option can be selected.\n *\n * @return {boolean} Item is selectable\n */\nOO.ui.OptionWidget.prototype.isSelectable = function () {\n\treturn this.constructor.static.selectable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option can be highlighted. A highlight indicates that the option\n * may be selected when a user presses enter or clicks. Disabled items cannot\n * be highlighted.\n *\n * @return {boolean} Item is highlightable\n */\nOO.ui.OptionWidget.prototype.isHighlightable = function () {\n\treturn this.constructor.static.highlightable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option can be pressed. The pressed state occurs when a user mouses\n * down on an item, but has not yet let go of the mouse.\n *\n * @return {boolean} Item is pressable\n */\nOO.ui.OptionWidget.prototype.isPressable = function () {\n\treturn this.constructor.static.pressable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option is selected.\n *\n * @return {boolean} Item is selected\n */\nOO.ui.OptionWidget.prototype.isSelected = function () {\n\treturn this.selected;\n};\n\n/**\n * Check if the option is highlighted. A highlight indicates that the\n * item may be selected when a user presses enter or clicks.\n *\n * @return {boolean} Item is highlighted\n */\nOO.ui.OptionWidget.prototype.isHighlighted = function () {\n\treturn this.highlighted;\n};\n\n/**\n * Check if the option is pressed. The pressed state occurs when a user mouses\n * down on an item, but has not yet let go of the mouse. The item may appear\n * selected, but it will not be selected until the user releases the mouse.\n *\n * @return {boolean} Item is pressed\n */\nOO.ui.OptionWidget.prototype.isPressed = function () {\n\treturn this.pressed;\n};\n\n/**\n * Set the option’s selected state. In general, all modifications to the selection\n * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Select option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setSelected = function ( state ) {\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.selected = !!state;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-optionWidget-selected', state )\n\t\t\t.attr( 'aria-selected', state.toString() );\n\t\tif ( state && this.constructor.static.scrollIntoViewOnSelect ) {\n\t\t\tthis.scrollElementIntoView();\n\t\t}\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Set the option’s highlighted state. In general, all programmatic\n * modifications to the highlight should be handled by the\n * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Highlight option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {\n\tif ( this.constructor.static.highlightable ) {\n\t\tthis.highlighted = !!state;\n\t\tthis.$element.toggleClass( 'oo-ui-optionWidget-highlighted', state );\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Set the option’s pressed state. In general, all\n * programmatic modifications to the pressed state should be handled by the\n * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Press option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setPressed = function ( state ) {\n\tif ( this.constructor.static.pressable ) {\n\t\tthis.pressed = !!state;\n\t\tthis.$element.toggleClass( 'oo-ui-optionWidget-pressed', state );\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Get text to match search strings against.\n *\n * The default implementation returns the label text, but subclasses\n * can override this to provide more complex behavior.\n *\n * @return {string|boolean} String to match search string against\n */\nOO.ui.OptionWidget.prototype.getMatchText = function () {\n\tvar label = this.getLabel();\n\treturn typeof label === 'string' ? label : this.$label.text();\n};\n","/**\n * A SelectWidget is of a generic selection of options. The OOjs UI library contains several types of\n * select widgets, including {@link OO.ui.ButtonSelectWidget button selects},\n * {@link OO.ui.RadioSelectWidget radio selects}, and {@link OO.ui.MenuSelectWidget\n * menu selects}.\n *\n * This class should be used together with OO.ui.OptionWidget or OO.ui.DecoratedOptionWidget. For more\n * information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of a select widget with three options\n *     var select = new OO.ui.SelectWidget( {\n *         items: [\n *             new OO.ui.OptionWidget( {\n *                 data: 'a',\n *                 label: 'Option One',\n *             } ),\n *             new OO.ui.OptionWidget( {\n *                 data: 'b',\n *                 label: 'Option Two',\n *             } ),\n *             new OO.ui.OptionWidget( {\n *                 data: 'c',\n *                 label: 'Option Three',\n *             } )\n *         ]\n *     } );\n *     $( 'body' ).append( select.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.\n *  Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See\n *  the [OOjs UI documentation on MediaWiki] [2] for examples.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n */\nOO.ui.SelectWidget = function OoUiSelectWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.pressed = false;\n\tthis.selecting = null;\n\tthis.onMouseUpHandler = this.onMouseUp.bind( this );\n\tthis.onMouseMoveHandler = this.onMouseMove.bind( this );\n\tthis.onKeyDownHandler = this.onKeyDown.bind( this );\n\tthis.onKeyPressHandler = this.onKeyPress.bind( this );\n\tthis.keyPressBuffer = '';\n\tthis.keyPressBufferTimer = null;\n\tthis.blockMouseOverEvents = 0;\n\n\t// Events\n\tthis.connect( this, {\n\t\ttoggle: 'onToggle'\n\t} );\n\tthis.$element.on( {\n\t\tfocusin: this.onFocus.bind( this ),\n\t\tmousedown: this.onMouseDown.bind( this ),\n\t\tmouseover: this.onMouseOver.bind( this ),\n\t\tmouseleave: this.onMouseLeave.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' )\n\t\t.attr( 'role', 'listbox' );\n\tthis.setFocusOwner( this.$element );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectWidget, OO.ui.mixin.GroupWidget );\n\n/* Events */\n\n/**\n * @event highlight\n *\n * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.\n *\n * @param {OO.ui.OptionWidget|null} item Highlighted item\n */\n\n/**\n * @event press\n *\n * A `press` event is emitted when the #pressItem method is used to programmatically modify the\n * pressed state of an option.\n *\n * @param {OO.ui.OptionWidget|null} item Pressed item\n */\n\n/**\n * @event select\n *\n * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.\n *\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\n\n/**\n * @event choose\n * A `choose` event is emitted when an item is chosen with the #chooseItem method.\n * @param {OO.ui.OptionWidget} item Chosen item\n */\n\n/**\n * @event add\n *\n * An `add` event is emitted when options are added to the select with the #addItems method.\n *\n * @param {OO.ui.OptionWidget[]} items Added items\n * @param {number} index Index of insertion point\n */\n\n/**\n * @event remove\n *\n * A `remove` event is emitted when options are removed from the select with the #clearItems\n * or #removeItems methods.\n *\n * @param {OO.ui.OptionWidget[]} items Removed items\n */\n\n/* Methods */\n\n/**\n * Handle focus events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.SelectWidget.prototype.onFocus = function ( event ) {\n\tvar item;\n\tif ( event.target === this.$element[ 0 ] ) {\n\t\t// This widget was focussed, e.g. by the user tabbing to it.\n\t\t// The styles for focus state depend on one of the items being selected.\n\t\tif ( !this.getSelectedItem() ) {\n\t\t\titem = this.findFirstSelectableItem();\n\t\t}\n\t} else {\n\t\tif ( event.target.tabIndex === -1 ) {\n\t\t\t// One of the options got focussed (and the event bubbled up here).\n\t\t\t// They can't be tabbed to, but they can be activated using accesskeys.\n\t\t\t// OptionWidgets and focusable UI elements inside them have tabindex=\"-1\" set.\n\t\t\titem = this.findTargetItem( event );\n\t\t} else {\n\t\t\t// There is something actually user-focusable in one of the labels of the options, and the\n\t\t\t// user focussed it (e.g. by tabbing to it). Do nothing (especially, don't change the focus).\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif ( item ) {\n\t\tif ( item.constructor.static.highlightable ) {\n\t\t\tthis.highlightItem( item );\n\t\t} else {\n\t\t\tthis.selectItem( item );\n\t\t}\n\t}\n\n\tif ( event.target !== this.$element[ 0 ] ) {\n\t\tthis.$focusOwner.focus();\n\t}\n};\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {\n\tvar item;\n\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.togglePressed( true );\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item.isSelectable() ) {\n\t\t\tthis.pressItem( item );\n\t\t\tthis.selecting = item;\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'mousemove', this.onMouseMoveHandler, true );\n\t\t}\n\t}\n\treturn false;\n};\n\n/**\n * Handle mouse up events.\n *\n * @private\n * @param {MouseEvent} e Mouse up event\n */\nOO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {\n\tvar item;\n\n\tthis.togglePressed( false );\n\tif ( !this.selecting ) {\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item.isSelectable() ) {\n\t\t\tthis.selecting = item;\n\t\t}\n\t}\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT && this.selecting ) {\n\t\tthis.pressItem( null );\n\t\tthis.chooseItem( this.selecting );\n\t\tthis.selecting = null;\n\t}\n\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );\n\tthis.getElementDocument().removeEventListener( 'mousemove', this.onMouseMoveHandler, true );\n\n\treturn false;\n};\n\n/**\n * Handle mouse move events.\n *\n * @private\n * @param {MouseEvent} e Mouse move event\n */\nOO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {\n\tvar item;\n\n\tif ( !this.isDisabled() && this.pressed ) {\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item !== this.selecting && item.isSelectable() ) {\n\t\t\tthis.pressItem( item );\n\t\t\tthis.selecting = item;\n\t\t}\n\t}\n};\n\n/**\n * Handle mouse over events.\n *\n * @private\n * @param {jQuery.Event} e Mouse over event\n */\nOO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {\n\tvar item;\n\tif ( this.blockMouseOverEvents ) {\n\t\treturn;\n\t}\n\tif ( !this.isDisabled() ) {\n\t\titem = this.findTargetItem( e );\n\t\tthis.highlightItem( item && item.isHighlightable() ? item : null );\n\t}\n\treturn false;\n};\n\n/**\n * Handle mouse leave events.\n *\n * @private\n * @param {jQuery.Event} e Mouse over event\n */\nOO.ui.SelectWidget.prototype.onMouseLeave = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.highlightItem( null );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key down events.\n *\n * @protected\n * @param {KeyboardEvent} e Key down event\n */\nOO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {\n\tvar nextItem,\n\t\thandled = false,\n\t\tcurrentItem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( !this.isDisabled() && this.isVisible() ) {\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase OO.ui.Keys.ENTER:\n\t\t\t\tif ( currentItem && currentItem.constructor.static.highlightable ) {\n\t\t\t\t\t// Was only highlighted, now let's select it. No-op if already selected.\n\t\t\t\t\tthis.chooseItem( currentItem );\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.UP:\n\t\t\tcase OO.ui.Keys.LEFT:\n\t\t\t\tthis.clearKeyPressBuffer();\n\t\t\t\tnextItem = this.findRelativeSelectableItem( currentItem, -1 );\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.DOWN:\n\t\t\tcase OO.ui.Keys.RIGHT:\n\t\t\t\tthis.clearKeyPressBuffer();\n\t\t\t\tnextItem = this.findRelativeSelectableItem( currentItem, 1 );\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.ESCAPE:\n\t\t\tcase OO.ui.Keys.TAB:\n\t\t\t\tif ( currentItem && currentItem.constructor.static.highlightable ) {\n\t\t\t\t\tcurrentItem.setHighlighted( false );\n\t\t\t\t}\n\t\t\t\tthis.unbindKeyDownListener();\n\t\t\t\tthis.unbindKeyPressListener();\n\t\t\t\t// Don't prevent tabbing away / defocusing\n\t\t\t\thandled = false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( nextItem ) {\n\t\t\tif ( nextItem.constructor.static.highlightable ) {\n\t\t\t\tthis.highlightItem( nextItem );\n\t\t\t} else {\n\t\t\t\tthis.chooseItem( nextItem );\n\t\t\t}\n\t\t\tthis.scrollItemIntoView( nextItem );\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n};\n\n/**\n * Bind key down listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.bindKeyDownListener = function () {\n\tthis.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );\n};\n\n/**\n * Scroll item into view, preventing spurious mouse highlight actions from happening.\n *\n * @param {OO.ui.OptionWidget} item Item to scroll into view\n */\nOO.ui.SelectWidget.prototype.scrollItemIntoView = function ( item ) {\n\tvar widget = this;\n\t// Chromium's Blink engine will generate spurious 'mouseover' events during programmatic scrolling\n\t// and around 100-150 ms after it is finished.\n\tthis.blockMouseOverEvents++;\n\titem.scrollElementIntoView().done( function () {\n\t\tsetTimeout( function () {\n\t\t\twidget.blockMouseOverEvents--;\n\t\t}, 200 );\n\t} );\n};\n\n/**\n * Clear the key-press buffer\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.clearKeyPressBuffer = function () {\n\tif ( this.keyPressBufferTimer ) {\n\t\tclearTimeout( this.keyPressBufferTimer );\n\t\tthis.keyPressBufferTimer = null;\n\t}\n\tthis.keyPressBuffer = '';\n};\n\n/**\n * Handle key press events.\n *\n * @protected\n * @param {KeyboardEvent} e Key press event\n */\nOO.ui.SelectWidget.prototype.onKeyPress = function ( e ) {\n\tvar c, filter, item;\n\n\tif ( !e.charCode ) {\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE && this.keyPressBuffer !== '' ) {\n\t\t\tthis.keyPressBuffer = this.keyPressBuffer.substr( 0, this.keyPressBuffer.length - 1 );\n\t\t\treturn false;\n\t\t}\n\t\treturn;\n\t}\n\tif ( String.fromCodePoint ) {\n\t\tc = String.fromCodePoint( e.charCode );\n\t} else {\n\t\tc = String.fromCharCode( e.charCode );\n\t}\n\n\tif ( this.keyPressBufferTimer ) {\n\t\tclearTimeout( this.keyPressBufferTimer );\n\t}\n\tthis.keyPressBufferTimer = setTimeout( this.clearKeyPressBuffer.bind( this ), 1500 );\n\n\titem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( this.keyPressBuffer === c ) {\n\t\t// Common (if weird) special case: typing \"xxxx\" will cycle through all\n\t\t// the items beginning with \"x\".\n\t\tif ( item ) {\n\t\t\titem = this.findRelativeSelectableItem( item, 1 );\n\t\t}\n\t} else {\n\t\tthis.keyPressBuffer += c;\n\t}\n\n\tfilter = this.getItemMatcher( this.keyPressBuffer, false );\n\tif ( !item || !filter( item ) ) {\n\t\titem = this.findRelativeSelectableItem( item, 1, filter );\n\t}\n\tif ( item ) {\n\t\tif ( this.isVisible() && item.constructor.static.highlightable ) {\n\t\t\tthis.highlightItem( item );\n\t\t} else {\n\t\t\tthis.chooseItem( item );\n\t\t}\n\t\tthis.scrollItemIntoView( item );\n\t}\n\n\te.preventDefault();\n\te.stopPropagation();\n};\n\n/**\n * Get a matcher for the specific string\n *\n * @protected\n * @param {string} s String to match against items\n * @param {boolean} [exact=false] Only accept exact matches\n * @return {Function} function ( OO.ui.OptionWidget ) => boolean\n */\nOO.ui.SelectWidget.prototype.getItemMatcher = function ( s, exact ) {\n\tvar re;\n\n\tif ( s.normalize ) {\n\t\ts = s.normalize();\n\t}\n\ts = exact ? s.trim() : s.replace( /^\\s+/, '' );\n\tre = '^\\\\s*' + s.replace( /([\\\\{}()|.?*+\\-^$[\\]])/g, '\\\\$1' ).replace( /\\s+/g, '\\\\s+' );\n\tif ( exact ) {\n\t\tre += '\\\\s*$';\n\t}\n\tre = new RegExp( re, 'i' );\n\treturn function ( item ) {\n\t\tvar matchText = item.getMatchText();\n\t\tif ( matchText.normalize ) {\n\t\t\tmatchText = matchText.normalize();\n\t\t}\n\t\treturn re.test( matchText );\n\t};\n};\n\n/**\n * Bind key press listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.bindKeyPressListener = function () {\n\tthis.getElementWindow().addEventListener( 'keypress', this.onKeyPressHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * If you override this, be sure to call this.clearKeyPressBuffer() from your\n * implementation.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.unbindKeyPressListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keypress', this.onKeyPressHandler, true );\n\tthis.clearKeyPressBuffer();\n};\n\n/**\n * Visibility change handler\n *\n * @protected\n * @param {boolean} visible\n */\nOO.ui.SelectWidget.prototype.onToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\tthis.clearKeyPressBuffer();\n\t}\n};\n\n/**\n * Get the closest item to a jQuery.Event.\n *\n * @private\n * @param {jQuery.Event} e\n * @return {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found\n */\nOO.ui.SelectWidget.prototype.findTargetItem = function ( e ) {\n\tvar $option = $( e.target ).closest( '.oo-ui-optionWidget' );\n\tif ( !$option.closest( '.oo-ui-selectWidget' ).is( this.$element ) ) {\n\t\treturn null;\n\t}\n\treturn $option.data( 'oo-ui-optionWidget' ) || null;\n};\n\n/**\n * Get selected item.\n *\n * @return {OO.ui.OptionWidget|null} Selected item, `null` if no item is selected\n */\nOO.ui.SelectWidget.prototype.getSelectedItem = function () {\n\tvar i, len;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tif ( this.items[ i ].isSelected() ) {\n\t\t\treturn this.items[ i ];\n\t\t}\n\t}\n\treturn null;\n};\n\n/**\n * Find highlighted item.\n *\n * @return {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted\n */\nOO.ui.SelectWidget.prototype.findHighlightedItem = function () {\n\tvar i, len;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tif ( this.items[ i ].isHighlighted() ) {\n\t\t\treturn this.items[ i ];\n\t\t}\n\t}\n\treturn null;\n};\n\n/**\n * Get highlighted item.\n *\n * @deprecated 0.23.1 Use {@link #findHighlightedItem} instead.\n * @return {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted\n */\nOO.ui.SelectWidget.prototype.getHighlightedItem = function () {\n\tOO.ui.warnDeprecation( 'SelectWidget#getHighlightedItem: Deprecated function. Use findHighlightedItem instead. See T76630.' );\n\treturn this.findHighlightedItem();\n};\n\n/**\n * Toggle pressed state.\n *\n * Press is a state that occurs when a user mouses down on an item, but\n * has not yet let go of the mouse. The item may appear selected, but it will not be selected\n * until the user releases the mouse.\n *\n * @param {boolean} pressed An option is being pressed\n */\nOO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {\n\tif ( pressed === undefined ) {\n\t\tpressed = !this.pressed;\n\t}\n\tif ( pressed !== this.pressed ) {\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-selectWidget-pressed', pressed )\n\t\t\t.toggleClass( 'oo-ui-selectWidget-depressed', !pressed );\n\t\tthis.pressed = pressed;\n\t}\n};\n\n/**\n * Highlight an option. If the `item` param is omitted, no options will be highlighted\n * and any existing highlight will be removed. The highlight is mutually exclusive.\n *\n * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight\n * @fires highlight\n * @chainable\n */\nOO.ui.SelectWidget.prototype.highlightItem = function ( item ) {\n\tvar i, len, highlighted,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\thighlighted = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isHighlighted() !== highlighted ) {\n\t\t\tthis.items[ i ].setHighlighted( highlighted );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tif ( item ) {\n\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', item.getElementId() );\n\t\t} else {\n\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t}\n\t\tthis.emit( 'highlight', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Fetch an item by its label.\n *\n * @param {string} label Label of the item to select.\n * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches\n * @return {OO.ui.Element|null} Item with equivalent label, `null` if none exists\n */\nOO.ui.SelectWidget.prototype.getItemFromLabel = function ( label, prefix ) {\n\tvar i, item, found,\n\t\tlen = this.items.length,\n\t\tfilter = this.getItemMatcher( label, true );\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {\n\t\t\treturn item;\n\t\t}\n\t}\n\n\tif ( prefix ) {\n\t\tfound = null;\n\t\tfilter = this.getItemMatcher( label, false );\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {\n\t\t\t\tif ( found ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfound = item;\n\t\t\t}\n\t\t}\n\t\tif ( found ) {\n\t\t\treturn found;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * Programmatically select an option by its label. If the item does not exist,\n * all options will be deselected.\n *\n * @param {string} [label] Label of the item to select.\n * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItemByLabel = function ( label, prefix ) {\n\tvar itemFromLabel = this.getItemFromLabel( label, !!prefix );\n\tif ( label === undefined || !itemFromLabel ) {\n\t\treturn this.selectItem();\n\t}\n\treturn this.selectItem( itemFromLabel );\n};\n\n/**\n * Programmatically select an option by its data. If the `data` parameter is omitted,\n * or if the item does not exist, all options will be deselected.\n *\n * @param {Object|string} [data] Value of the item to select, omit to deselect all\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {\n\tvar itemFromData = this.getItemFromData( data );\n\tif ( data === undefined || !itemFromData ) {\n\t\treturn this.selectItem();\n\t}\n\treturn this.selectItem( itemFromData );\n};\n\n/**\n * Programmatically select an option by its reference. If the `item` parameter is omitted,\n * all options will be deselected.\n *\n * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItem = function ( item ) {\n\tvar i, len, selected,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tselected = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isSelected() !== selected ) {\n\t\t\tthis.items[ i ].setSelected( selected );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tif ( item && !item.constructor.static.highlightable ) {\n\t\t\tif ( item ) {\n\t\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', item.getElementId() );\n\t\t\t} else {\n\t\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t\t}\n\t\t}\n\t\tthis.emit( 'select', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Press an item.\n *\n * Press is a state that occurs when a user mouses down on an item, but has not\n * yet let go of the mouse. The item may appear selected, but it will not be selected until the user\n * releases the mouse.\n *\n * @param {OO.ui.OptionWidget} [item] Item to press, omit to depress all\n * @fires press\n * @chainable\n */\nOO.ui.SelectWidget.prototype.pressItem = function ( item ) {\n\tvar i, len, pressed,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tpressed = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isPressed() !== pressed ) {\n\t\t\tthis.items[ i ].setPressed( pressed );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tthis.emit( 'press', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Choose an item.\n *\n * Note that ‘choose’ should never be modified programmatically. A user can choose\n * an option with the keyboard or mouse and it becomes selected. To select an item programmatically,\n * use the #selectItem method.\n *\n * This method is identical to #selectItem, but may vary in subclasses that take additional action\n * when users choose an item with the keyboard or mouse.\n *\n * @param {OO.ui.OptionWidget} item Item to choose\n * @fires choose\n * @chainable\n */\nOO.ui.SelectWidget.prototype.chooseItem = function ( item ) {\n\tif ( item ) {\n\t\tthis.selectItem( item );\n\t\tthis.emit( 'choose', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Find an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @param {Function} [filter] Only consider items for which this function returns\n *  true. Function takes an OO.ui.OptionWidget and returns a boolean.\n * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.SelectWidget.prototype.findRelativeSelectableItem = function ( item, direction, filter ) {\n\tvar currentIndex, nextIndex, i,\n\t\tincrease = direction > 0 ? 1 : -1,\n\t\tlen = this.items.length;\n\n\tif ( item instanceof OO.ui.OptionWidget ) {\n\t\tcurrentIndex = this.items.indexOf( item );\n\t\tnextIndex = ( currentIndex + increase + len ) % len;\n\t} else {\n\t\t// If no item is selected and moving forward, start at the beginning.\n\t\t// If moving backward, start at the end.\n\t\tnextIndex = direction > 0 ? 0 : len - 1;\n\t}\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ nextIndex ];\n\t\tif (\n\t\t\titem instanceof OO.ui.OptionWidget && item.isSelectable() &&\n\t\t\t( !filter || filter( item ) )\n\t\t) {\n\t\t\treturn item;\n\t\t}\n\t\tnextIndex = ( nextIndex + increase + len ) % len;\n\t}\n\treturn null;\n};\n\n/**\n * Get an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @deprecated 0.23.1 Use {@link #findRelativeSelectableItem} instead\n * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @param {Function} [filter] Only consider items for which this function returns\n *  true. Function takes an OO.ui.OptionWidget and returns a boolean.\n * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction, filter ) {\n\tOO.ui.warnDeprecation( 'SelectWidget#getRelativeSelectableItem: Deprecated function. Use findRelativeSelectableItem instead. See T76630.' );\n\treturn this.findRelativeSelectableItem( item, direction, filter );\n};\n\n/**\n * Find the next selectable item or `null` if there are no selectable items.\n * Disabled options and menu-section markers and breaks are not selectable.\n *\n * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items\n */\nOO.ui.SelectWidget.prototype.findFirstSelectableItem = function () {\n\treturn this.findRelativeSelectableItem( null, 1 );\n};\n\n/**\n * Get the next selectable item or `null` if there are no selectable items.\n * Disabled options and menu-section markers and breaks are not selectable.\n *\n * @deprecated 0.23.1 Use {@link OO.ui.SelectWidget#findFirstSelectableItem} instead.\n * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items\n */\nOO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {\n\tOO.ui.warnDeprecation( 'SelectWidget#getFirstSelectableItem: Deprecated function. Use findFirstSelectableItem instead. See T76630.' );\n\treturn this.findFirstSelectableItem();\n};\n\n/**\n * Add an array of options to the select. Optionally, an index number can be used to\n * specify an insertion point.\n *\n * @param {OO.ui.OptionWidget[]} items Items to add\n * @param {number} [index] Index to insert items after\n * @fires add\n * @chainable\n */\nOO.ui.SelectWidget.prototype.addItems = function ( items, index ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.addItems.call( this, items, index );\n\n\t// Always provide an index, even if it was omitted\n\tthis.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified array of options from the select. Options will be detached\n * from the DOM, not removed, so they can be reused later. To remove all options from\n * the select, you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.OptionWidget[]} items Items to remove\n * @fires remove\n * @chainable\n */\nOO.ui.SelectWidget.prototype.removeItems = function ( items ) {\n\tvar i, len, item;\n\n\t// Deselect items being removed\n\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\titem = items[ i ];\n\t\tif ( item.isSelected() ) {\n\t\t\tthis.selectItem( null );\n\t\t}\n\t}\n\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.removeItems.call( this, items );\n\n\tthis.emit( 'remove', items );\n\n\treturn this;\n};\n\n/**\n * Clear all options from the select. Options will be detached from the DOM, not removed,\n * so that they can be reused later. To remove a subset of options from the select, use\n * the #removeItems method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.SelectWidget.prototype.clearItems = function () {\n\tvar items = this.items.slice();\n\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.clearItems.call( this );\n\n\t// Clear selection\n\tthis.selectItem( null );\n\n\tthis.emit( 'remove', items );\n\n\treturn this;\n};\n\n/**\n * Set the DOM element which has focus while the user is interacting with this SelectWidget.\n *\n * Currently this is just used to set `aria-activedescendant` on it.\n *\n * @protected\n * @param {jQuery} $focusOwner\n */\nOO.ui.SelectWidget.prototype.setFocusOwner = function ( $focusOwner ) {\n\tthis.$focusOwner = $focusOwner;\n};\n","/**\n * DecoratedOptionWidgets are {@link OO.ui.OptionWidget options} that can be configured\n * with an {@link OO.ui.mixin.IconElement icon} and/or {@link OO.ui.mixin.IndicatorElement indicator}.\n * This class is used with OO.ui.SelectWidget to create a selection of mutually exclusive\n * options. For more information about options and selects, please see the\n * [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Decorated options in a select widget\n *     var select = new OO.ui.SelectWidget( {\n *         items: [\n *             new OO.ui.DecoratedOptionWidget( {\n *                 data: 'a',\n *                 label: 'Option with icon',\n *                 icon: 'help'\n *             } ),\n *             new OO.ui.DecoratedOptionWidget( {\n *                 data: 'b',\n *                 label: 'Option with indicator',\n *                 indicator: 'next'\n *             } )\n *         ]\n *     } );\n *     $( 'body' ).append( select.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.DecoratedOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-decoratedOptionWidget' )\n\t\t.prepend( this.$icon )\n\t\t.append( this.$indicator );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );\n","/**\n * MenuOptionWidget is an option widget that looks like a menu item. The class is used with\n * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see\n * the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MenuOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuOptionWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;\n","/**\n * MenuSectionOptionWidgets are used inside {@link OO.ui.MenuSelectWidget menu select widgets} to group one or more related\n * {@link OO.ui.MenuOptionWidget menu options}. MenuSectionOptionWidgets cannot be highlighted or selected.\n *\n *     @example\n *     var myDropdown = new OO.ui.DropdownWidget( {\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuSectionOptionWidget( {\n *                     label: 'Dogs'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'corgi',\n *                     label: 'Welsh Corgi'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'poodle',\n *                     label: 'Standard Poodle'\n *                 } ),\n *                 new OO.ui.MenuSectionOptionWidget( {\n *                     label: 'Cats'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'lion',\n *                     label: 'Lion'\n *                 } )\n *             ]\n *         }\n *     } );\n *     $( 'body' ).append( myDropdown.$element );\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuSectionOptionWidget = function OoUiMenuSectionOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MenuSectionOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuSectionOptionWidget' )\n\t\t.removeAttr( 'role aria-selected' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuSectionOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuSectionOptionWidget.static.selectable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuSectionOptionWidget.static.highlightable = false;\n","/**\n * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and\n * is used together with OO.ui.MenuOptionWidget. It is designed be used as part of another widget.\n * See {@link OO.ui.DropdownWidget DropdownWidget}, {@link OO.ui.ComboBoxInputWidget ComboBoxInputWidget},\n * and {@link OO.ui.mixin.LookupElement LookupElement} for examples of widgets that contain menus.\n * MenuSelectWidgets themselves are not instantiated directly, rather subclassed\n * and customized to be opened, closed, and displayed as needed.\n *\n * By default, menus are clipped to the visible viewport and are not visible when a user presses the\n * mouse outside the menu.\n *\n * Menus also have support for keyboard interaction:\n *\n * - Enter/Return key: choose and select a menu option\n * - Up-arrow key: highlight the previous menu option\n * - Down-arrow key: highlight the next menu option\n * - Esc key: hide the menu\n *\n * Unlike most widgets, MenuSelectWidget is initially hidden and must be shown by calling #toggle.\n *\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.FloatableElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match\n *  the text the user types. This config is used by {@link OO.ui.ComboBoxInputWidget ComboBoxInputWidget}\n *  and {@link OO.ui.mixin.LookupElement LookupElement}\n * @cfg {jQuery} [$input] Text input used to implement option highlighting for menu items that match\n *  the text the user types. This config is used by {@link OO.ui.CapsuleMultiselectWidget CapsuleMultiselectWidget}\n * @cfg {OO.ui.Widget} [widget] Widget associated with the menu's active state. If the user clicks the mouse\n *  anywhere on the page outside of this widget, the menu is hidden. For example, if there is a button\n *  that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks\n *  that button, unless the button (or its parent widget) is passed in here.\n * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.\n * @cfg {jQuery} [$autoCloseIgnore] If these elements are clicked, don't auto-hide the menu.\n * @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option.\n * @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input\n * @cfg {boolean} [highlightOnFilter] Highlight the first result when filtering\n * @cfg {number} [width] Width of the menu\n */\nOO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );\n\tOO.ui.mixin.FloatableElement.call( this, config );\n\n\t// Properties\n\tthis.autoHide = config.autoHide === undefined || !!config.autoHide;\n\tthis.hideOnChoose = config.hideOnChoose === undefined || !!config.hideOnChoose;\n\tthis.filterFromInput = !!config.filterFromInput;\n\tthis.$input = config.$input ? config.$input : config.input ? config.input.$input : null;\n\tthis.$widget = config.widget ? config.widget.$element : null;\n\tthis.$autoCloseIgnore = config.$autoCloseIgnore || $( [] );\n\tthis.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );\n\tthis.onInputEditHandler = OO.ui.debounce( this.updateItemVisibility.bind( this ), 100 );\n\tthis.highlightOnFilter = !!config.highlightOnFilter;\n\tthis.width = config.width;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuSelectWidget' );\n\tif ( config.widget ) {\n\t\tthis.setFocusOwner( config.widget.$tabIndexed );\n\t}\n\n\t// Initially hidden - using #toggle may cause errors if subclasses override toggle with methods\n\t// that reference properties not initialized at that time of parent class construction\n\t// TODO: Find a better way to handle post-constructor setup\n\tthis.visible = false;\n\tthis.$element.addClass( 'oo-ui-element-hidden' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.FloatableElement );\n\n/* Events */\n\n/**\n * @event ready\n *\n * The menu is ready: it is visible and has been positioned and clipped.\n */\n\n/* Methods */\n\n/**\n * Handles document mouse down events.\n *\n * @protected\n * @param {MouseEvent} e Mouse down event\n */\nOO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {\n\tif (\n\t\tthis.isVisible() &&\n\t\t!OO.ui.contains(\n\t\t\tthis.$element.add( this.$widget ).add( this.$autoCloseIgnore ).get(),\n\t\t\te.target,\n\t\t\ttrue\n\t\t)\n\t) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {\n\tvar currentItem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( !this.isDisabled() && this.isVisible() ) {\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase OO.ui.Keys.LEFT:\n\t\t\tcase OO.ui.Keys.RIGHT:\n\t\t\t\t// Do nothing if a text field is associated, arrow keys will be handled natively\n\t\t\t\tif ( !this.$input ) {\n\t\t\t\t\tOO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.ESCAPE:\n\t\t\tcase OO.ui.Keys.TAB:\n\t\t\t\tif ( currentItem ) {\n\t\t\t\t\tcurrentItem.setHighlighted( false );\n\t\t\t\t}\n\t\t\t\tthis.toggle( false );\n\t\t\t\t// Don't prevent tabbing away, prevent defocusing\n\t\t\t\tif ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tOO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );\n\t\t\t\treturn;\n\t\t}\n\t}\n};\n\n/**\n * Update menu item visibility and clipping after input changes (if filterFromInput is enabled)\n * or after items were added/removed (always).\n *\n * @protected\n */\nOO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {\n\tvar i, item, visible, section, sectionEmpty, filter, exactFilter,\n\t\tfirstItemFound = false,\n\t\tanyVisible = false,\n\t\tlen = this.items.length,\n\t\tshowAll = !this.isVisible(),\n\t\texactMatch = false;\n\n\tif ( this.$input && this.filterFromInput ) {\n\t\tfilter = showAll ? null : this.getItemMatcher( this.$input.val() );\n\t\texactFilter = this.getItemMatcher( this.$input.val(), true );\n\n\t\t// Hide non-matching options, and also hide section headers if all options\n\t\t// in their section are hidden.\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( item instanceof OO.ui.MenuSectionOptionWidget ) {\n\t\t\t\tif ( section ) {\n\t\t\t\t\t// If the previous section was empty, hide its header\n\t\t\t\t\tsection.toggle( showAll || !sectionEmpty );\n\t\t\t\t}\n\t\t\t\tsection = item;\n\t\t\t\tsectionEmpty = true;\n\t\t\t} else if ( item instanceof OO.ui.OptionWidget ) {\n\t\t\t\tvisible = showAll || filter( item );\n\t\t\t\texactMatch = exactMatch || exactFilter( item );\n\t\t\t\tanyVisible = anyVisible || visible;\n\t\t\t\tsectionEmpty = sectionEmpty && !visible;\n\t\t\t\titem.toggle( visible );\n\t\t\t\tif ( this.highlightOnFilter && visible && !firstItemFound ) {\n\t\t\t\t\t// Highlight the first item in the list\n\t\t\t\t\tthis.highlightItem( item );\n\t\t\t\t\tfirstItemFound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Process the final section\n\t\tif ( section ) {\n\t\t\tsection.toggle( showAll || !sectionEmpty );\n\t\t}\n\n\t\tif ( anyVisible && this.items.length && !exactMatch ) {\n\t\t\tthis.scrollItemIntoView( this.items[ 0 ] );\n\t\t}\n\n\t\tthis.$element.toggleClass( 'oo-ui-menuSelectWidget-invisible', !anyVisible );\n\t}\n\n\t// Reevaluate clipping\n\tthis.clip();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.on( 'keydown', this.onKeyDownHandler );\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.bindKeyDownListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.off( 'keydown', this.onKeyDownHandler );\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.unbindKeyDownListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.bindKeyPressListener = function () {\n\tif ( this.$input ) {\n\t\tif ( this.filterFromInput ) {\n\t\t\tthis.$input.on( 'keydown mouseup cut paste change input select', this.onInputEditHandler );\n\t\t\tthis.updateItemVisibility();\n\t\t}\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.bindKeyPressListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () {\n\tif ( this.$input ) {\n\t\tif ( this.filterFromInput ) {\n\t\t\tthis.$input.off( 'keydown mouseup cut paste change input select', this.onInputEditHandler );\n\t\t\tthis.updateItemVisibility();\n\t\t}\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.unbindKeyPressListener.call( this );\n\t}\n};\n\n/**\n * Choose an item.\n *\n * When a user chooses an item, the menu is closed, unless the hideOnChoose config option is set to false.\n *\n * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard\n * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.\n *\n * @param {OO.ui.OptionWidget} item Item to choose\n * @chainable\n */\nOO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {\n\tOO.ui.MenuSelectWidget.parent.prototype.chooseItem.call( this, item );\n\tif ( this.hideOnChoose ) {\n\t\tthis.toggle( false );\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.addItems.call( this, items, index );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.removeItems.call( this, items );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.clearItems = function () {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.clearItems.call( this );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * Toggle visibility of the menu. The menu is initially hidden and must be shown by calling\n * `.toggle( true )` after its #$element is attached to the DOM.\n *\n * Do not show the menu while it is not attached to the DOM. The calculations required to display\n * it in the right place and with the right dimensions only work correctly while it is attached.\n * Side-effects may include broken interface and exceptions being thrown. This wasn't always\n * strictly enforced, so currently it only generates a warning in the browser console.\n *\n * @fires ready\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {\n\tvar change;\n\n\tvisible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;\n\tchange = visible !== this.isVisible();\n\n\tif ( visible && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'MenuSelectWidget#toggle: Before calling this method, the menu must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( change && visible && ( this.width || this.$floatableContainer ) ) {\n\t\tthis.setIdealSize( this.width || this.$floatableContainer.width() );\n\t}\n\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );\n\n\tif ( change ) {\n\t\tif ( visible ) {\n\t\t\tthis.bindKeyDownListener();\n\t\t\tthis.bindKeyPressListener();\n\n\t\t\tthis.togglePositioning( !!this.$floatableContainer );\n\t\t\tthis.toggleClipping( true );\n\n\t\t\tthis.$focusOwner.attr( 'aria-expanded', 'true' );\n\n\t\t\tif ( this.getSelectedItem() ) {\n\t\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', this.getSelectedItem().getElementId() );\n\t\t\t\tthis.getSelectedItem().scrollElementIntoView( { duration: 0 } );\n\t\t\t}\n\n\t\t\t// Auto-hide\n\t\t\tif ( this.autoHide ) {\n\t\t\t\tthis.getElementDocument().addEventListener( 'mousedown', this.onDocumentMouseDownHandler, true );\n\t\t\t}\n\n\t\t\tthis.emit( 'ready' );\n\t\t} else {\n\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t\tthis.unbindKeyDownListener();\n\t\t\tthis.unbindKeyPressListener();\n\t\t\tthis.$focusOwner.attr( 'aria-expanded', 'false' );\n\t\t\tthis.getElementDocument().removeEventListener( 'mousedown', this.onDocumentMouseDownHandler, true );\n\t\t\tthis.togglePositioning( false );\n\t\t\tthis.toggleClipping( false );\n\t\t}\n\t}\n\n\treturn this;\n};\n","/**\n * DropdownWidgets are not menus themselves, rather they contain a menu of options created with\n * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that\n * users can interact with it.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.DropdownInputWidget instead.\n *\n *     @example\n *     // Example: A DropdownWidget with a menu that contains three options\n *     var dropDown = new OO.ui.DropdownWidget( {\n *         label: 'Dropdown menu: Select a menu option',\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'a',\n *                     label: 'First'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'b',\n *                     label: 'Second'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'c',\n *                     label: 'Third'\n *                 } )\n *             ]\n *         }\n *     } );\n *\n *     $( 'body' ).append( dropDown.$element );\n *\n *     dropDown.getMenu().selectItemByData( 'b' );\n *\n *     dropDown.getMenu().getSelectedItem().getData(); // returns 'b'\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.MenuSelectWidget menu select widget}\n * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where\n *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { indicator: 'down' }, config );\n\n\t// Parent constructor\n\tOO.ui.DropdownWidget.parent.call( this, config );\n\n\t// Properties (must be set before TabIndexedElement constructor call)\n\tthis.$handle = this.$( '<span>' );\n\tthis.$overlay = config.$overlay || this.$element;\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );\n\n\t// Properties\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend( {\n\t\twidget: this,\n\t\t$floatableContainer: this.$element\n\t}, config.menu ) );\n\n\t// Events\n\tthis.$handle.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t// Hack? Handle type-to-search when menu is not expanded and not handling its own events\n\t\tkeypress: this.menu.onKeyPressHandler,\n\t\tblur: this.menu.clearKeyPressBuffer.bind( this.menu )\n\t} );\n\tthis.menu.connect( this, {\n\t\tselect: 'onMenuSelect',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\n\t// Initialization\n\tthis.$handle\n\t\t.addClass( 'oo-ui-dropdownWidget-handle' )\n\t\t.attr( {\n\t\t\trole: 'combobox',\n\t\t\t'aria-owns': this.menu.getElementId(),\n\t\t\t'aria-autocomplete': 'list'\n\t\t} )\n\t\t.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-dropdownWidget' )\n\t\t.append( this.$handle );\n\tthis.$overlay.append( this.menu.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Get the menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu of widget\n */\nOO.ui.DropdownWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.MenuOptionWidget} item Selected menu item\n */\nOO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {\n\tvar selectedLabel;\n\n\tif ( !item ) {\n\t\tthis.setLabel( null );\n\t\treturn;\n\t}\n\n\tselectedLabel = item.getLabel();\n\n\t// If the label is a DOM element, clone it, because setLabel will append() it\n\tif ( selectedLabel instanceof jQuery ) {\n\t\tselectedLabel = selectedLabel.clone();\n\t}\n\n\tthis.setLabel( selectedLabel );\n};\n\n/**\n * Handle menu toggle events.\n *\n * @private\n * @param {boolean} isVisible Menu toggle event\n */\nOO.ui.DropdownWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tthis.$element.toggleClass( 'oo-ui-dropdownWidget-open', isVisible );\n\tthis.$handle.attr(\n\t\t'aria-expanded',\n\t\tthis.$element.hasClass( 'oo-ui-dropdownWidget-open' ).toString()\n\t);\n};\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n */\nOO.ui.DropdownWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.menu.toggle();\n\t}\n\treturn false;\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.DropdownWidget.prototype.onKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t(\n\t\t\te.which === OO.ui.Keys.ENTER ||\n\t\t\t(\n\t\t\t\t!this.menu.isVisible() &&\n\t\t\t\t(\n\t\t\t\t\te.which === OO.ui.Keys.SPACE ||\n\t\t\t\t\te.which === OO.ui.Keys.UP ||\n\t\t\t\t\te.which === OO.ui.Keys.DOWN\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t) {\n\t\tthis.menu.toggle();\n\t\treturn false;\n\t}\n};\n","/**\n * RadioOptionWidget is an option widget that looks like a radio button.\n * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );\n\n\t// Parent constructor\n\tOO.ui.RadioOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\t// Remove implicit role, we're handling it ourselves\n\tthis.radio.$input.attr( 'role', 'presentation' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioOptionWidget' )\n\t\t.attr( 'role', 'radio' )\n\t\t.attr( 'aria-checked', 'false' )\n\t\t.removeAttr( 'aria-selected' )\n\t\t.prepend( this.radio.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.highlightable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.pressable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.tagName = 'label';\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.RadioOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tthis.radio.setSelected( state );\n\tthis.$element\n\t\t.attr( 'aria-checked', state.toString() )\n\t\t.removeAttr( 'aria-selected' );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.RadioOptionWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tthis.radio.setDisabled( this.isDisabled() );\n\n\treturn this;\n};\n","/**\n * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio\n * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides\n * an interface for adding, removing and selecting options.\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.RadioSelectInputWidget instead.\n *\n *     @example\n *     // A RadioSelectWidget with RadioOptions.\n *     var option1 = new OO.ui.RadioOptionWidget( {\n *         data: 'a',\n *         label: 'Selected radio option'\n *     } );\n *\n *     var option2 = new OO.ui.RadioOptionWidget( {\n *         data: 'b',\n *         label: 'Unselected radio option'\n *     } );\n *\n *     var radioSelect=new OO.ui.RadioSelectWidget( {\n *         items: [ option1, option2 ]\n *      } );\n *\n *     // Select 'option 1' using the RadioSelectWidget's selectItem() method.\n *     radioSelect.selectItem( option1 );\n *\n *     $( 'body' ).append( radioSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.RadioSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioSelectWidget' )\n\t\t.attr( 'role', 'radiogroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * MultioptionWidgets are special elements that can be selected and configured with data. The\n * data is often unique for each option, but it does not have to be. MultioptionWidgets are used\n * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information\n * and examples, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Multioptions\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Whether the option is initially selected\n */\nOO.ui.MultioptionWidget = function OoUiMultioptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MultioptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.selected = null;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-multioptionWidget' )\n\t\t.append( this.$label );\n\tthis.setSelected( config.selected );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultioptionWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.MultioptionWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.MultioptionWidget, OO.ui.mixin.LabelElement );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the selected state of the option changes.\n *\n * @param {boolean} selected Whether the option is now selected\n */\n\n/* Methods */\n\n/**\n * Check if the option is selected.\n *\n * @return {boolean} Item is selected\n */\nOO.ui.MultioptionWidget.prototype.isSelected = function () {\n\treturn this.selected;\n};\n\n/**\n * Set the option’s selected state. In general, all modifications to the selection\n * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Select option\n * @chainable\n */\nOO.ui.MultioptionWidget.prototype.setSelected = function ( state ) {\n\tstate = !!state;\n\tif ( this.selected !== state ) {\n\t\tthis.selected = state;\n\t\tthis.emit( 'change', state );\n\t\tthis.$element.toggleClass( 'oo-ui-multioptionWidget-selected', state );\n\t}\n\treturn this;\n};\n","/**\n * MultiselectWidget allows selecting multiple options from a list.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @abstract\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.MultioptionWidget[]} [items] An array of options to add to the multiselect.\n */\nOO.ui.MultiselectWidget = function OoUiMultiselectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MultiselectWidget.parent.call( this, config );\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\n\t// Events\n\tthis.aggregate( { change: 'select' } );\n\t// This is mostly for compatibility with CapsuleMultiselectWidget... normally, 'change' is emitted\n\t// by GroupElement only when items are added/removed\n\tthis.connect( this, { select: [ 'emit', 'change' ] } );\n\n\t// Initialization\n\tif ( config.items ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$group.addClass( 'oo-ui-multiselectWidget-group' );\n\tthis.$element.addClass( 'oo-ui-multiselectWidget' )\n\t\t.append( this.$group );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.MultiselectWidget, OO.ui.mixin.GroupWidget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of items changes, or an item is selected or deselected.\n */\n\n/**\n * @event select\n *\n * A select event is emitted when an item is selected or deselected.\n */\n\n/* Methods */\n\n/**\n * Get options that are selected.\n *\n * @return {OO.ui.MultioptionWidget[]} Selected options\n */\nOO.ui.MultiselectWidget.prototype.getSelectedItems = function () {\n\treturn this.items.filter( function ( item ) {\n\t\treturn item.isSelected();\n\t} );\n};\n\n/**\n * Get the data of options that are selected.\n *\n * @return {Object[]|string[]} Values of selected options\n */\nOO.ui.MultiselectWidget.prototype.getSelectedItemsData = function () {\n\treturn this.getSelectedItems().map( function ( item ) {\n\t\treturn item.data;\n\t} );\n};\n\n/**\n * Select options by reference. Options not mentioned in the `items` array will be deselected.\n *\n * @param {OO.ui.MultioptionWidget[]} items Items to select\n * @chainable\n */\nOO.ui.MultiselectWidget.prototype.selectItems = function ( items ) {\n\tthis.items.forEach( function ( item ) {\n\t\tvar selected = items.indexOf( item ) !== -1;\n\t\titem.setSelected( selected );\n\t} );\n\treturn this;\n};\n\n/**\n * Select items by their data. Options not mentioned in the `datas` array will be deselected.\n *\n * @param {Object[]|string[]} datas Values of items to select\n * @chainable\n */\nOO.ui.MultiselectWidget.prototype.selectItemsByData = function ( datas ) {\n\tvar items,\n\t\twidget = this;\n\titems = datas.map( function ( data ) {\n\t\treturn widget.getItemFromData( data );\n\t} );\n\tthis.selectItems( items );\n\treturn this;\n};\n","/**\n * CheckboxMultioptionWidget is an option widget that looks like a checkbox.\n * The class is used with OO.ui.CheckboxMultiselectWidget to create a selection of checkbox options.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option\n *\n * @class\n * @extends OO.ui.MultioptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CheckboxMultioptionWidget = function OoUiCheckboxMultioptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.checkbox = new OO.ui.CheckboxInputWidget();\n\n\t// Parent constructor\n\tOO.ui.CheckboxMultioptionWidget.parent.call( this, config );\n\n\t// Events\n\tthis.checkbox.on( 'change', this.onCheckboxChange.bind( this ) );\n\tthis.$element.on( 'keydown', this.onKeyDown.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultioptionWidget' )\n\t\t.prepend( this.checkbox.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultioptionWidget, OO.ui.MultioptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.static.tagName = 'label';\n\n/* Methods */\n\n/**\n * Handle checkbox selected state change.\n *\n * @private\n */\nOO.ui.CheckboxMultioptionWidget.prototype.onCheckboxChange = function () {\n\tthis.setSelected( this.checkbox.isSelected() );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.CheckboxMultioptionWidget.parent.prototype.setSelected.call( this, state );\n\tthis.checkbox.setSelected( state );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.CheckboxMultioptionWidget.parent.prototype.setDisabled.call( this, disabled );\n\tthis.checkbox.setDisabled( this.isDisabled() );\n\treturn this;\n};\n\n/**\n * Focus the widget.\n */\nOO.ui.CheckboxMultioptionWidget.prototype.focus = function () {\n\tthis.checkbox.focus();\n};\n\n/**\n * Handle key down events.\n *\n * @protected\n * @param {jQuery.Event} e\n */\nOO.ui.CheckboxMultioptionWidget.prototype.onKeyDown = function ( e ) {\n\tvar\n\t\telement = this.getElementGroup(),\n\t\tnextItem;\n\n\tif ( e.keyCode === OO.ui.Keys.LEFT || e.keyCode === OO.ui.Keys.UP ) {\n\t\tnextItem = element.getRelativeFocusableItem( this, -1 );\n\t} else if ( e.keyCode === OO.ui.Keys.RIGHT || e.keyCode === OO.ui.Keys.DOWN ) {\n\t\tnextItem = element.getRelativeFocusableItem( this, 1 );\n\t}\n\n\tif ( nextItem ) {\n\t\te.preventDefault();\n\t\tnextItem.focus();\n\t}\n};\n","/**\n * CheckboxMultiselectWidget is a {@link OO.ui.MultiselectWidget multiselect widget} that contains\n * checkboxes and is used together with OO.ui.CheckboxMultioptionWidget. The\n * CheckboxMultiselectWidget provides an interface for adding, removing and selecting options.\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.CheckboxMultiselectInputWidget instead.\n *\n *     @example\n *     // A CheckboxMultiselectWidget with CheckboxMultioptions.\n *     var option1 = new OO.ui.CheckboxMultioptionWidget( {\n *         data: 'a',\n *         selected: true,\n *         label: 'Selected checkbox'\n *     } );\n *\n *     var option2 = new OO.ui.CheckboxMultioptionWidget( {\n *         data: 'b',\n *         label: 'Unselected checkbox'\n *     } );\n *\n *     var multiselect=new OO.ui.CheckboxMultiselectWidget( {\n *         items: [ option1, option2 ]\n *      } );\n *\n *     $( 'body' ).append( multiselect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.MultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CheckboxMultiselectWidget = function OoUiCheckboxMultiselectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.CheckboxMultiselectWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$lastClicked = null;\n\n\t// Events\n\tthis.$group.on( 'click', this.onClick.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultiselectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultiselectWidget, OO.ui.MultiselectWidget );\n\n/* Methods */\n\n/**\n * Get an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @param {OO.ui.CheckboxMultioptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @return {OO.ui.CheckboxMultioptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.CheckboxMultiselectWidget.prototype.getRelativeFocusableItem = function ( item, direction ) {\n\tvar currentIndex, nextIndex, i,\n\t\tincrease = direction > 0 ? 1 : -1,\n\t\tlen = this.items.length;\n\n\tif ( item ) {\n\t\tcurrentIndex = this.items.indexOf( item );\n\t\tnextIndex = ( currentIndex + increase + len ) % len;\n\t} else {\n\t\t// If no item is selected and moving forward, start at the beginning.\n\t\t// If moving backward, start at the end.\n\t\tnextIndex = direction > 0 ? 0 : len - 1;\n\t}\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ nextIndex ];\n\t\tif ( item && !item.isDisabled() ) {\n\t\t\treturn item;\n\t\t}\n\t\tnextIndex = ( nextIndex + increase + len ) % len;\n\t}\n\treturn null;\n};\n\n/**\n * Handle click events on checkboxes.\n *\n * @param {jQuery.Event} e\n */\nOO.ui.CheckboxMultiselectWidget.prototype.onClick = function ( e ) {\n\tvar $options, lastClickedIndex, nowClickedIndex, i, direction, wasSelected, items,\n\t\t$lastClicked = this.$lastClicked,\n\t\t$nowClicked = $( e.target ).closest( '.oo-ui-checkboxMultioptionWidget' )\n\t\t\t.not( '.oo-ui-widget-disabled' );\n\n\t// Allow selecting multiple options at once by Shift-clicking them\n\tif ( $lastClicked && $nowClicked.length && e.shiftKey ) {\n\t\t$options = this.$group.find( '.oo-ui-checkboxMultioptionWidget' );\n\t\tlastClickedIndex = $options.index( $lastClicked );\n\t\tnowClickedIndex = $options.index( $nowClicked );\n\t\t// If it's the same item, either the user is being silly, or it's a fake event generated by the\n\t\t// browser. In either case we don't need custom handling.\n\t\tif ( nowClickedIndex !== lastClickedIndex ) {\n\t\t\titems = this.items;\n\t\t\twasSelected = items[ nowClickedIndex ].isSelected();\n\t\t\tdirection = nowClickedIndex > lastClickedIndex ? 1 : -1;\n\n\t\t\t// This depends on the DOM order of the items and the order of the .items array being the same.\n\t\t\tfor ( i = lastClickedIndex; i !== nowClickedIndex; i += direction ) {\n\t\t\t\tif ( !items[ i ].isDisabled() ) {\n\t\t\t\t\titems[ i ].setSelected( !wasSelected );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// For the now-clicked element, use immediate timeout to allow the browser to do its own\n\t\t\t// handling first, then set our value. The order in which events happen is different for\n\t\t\t// clicks on the <input> and on the <label> and there are additional fake clicks fired for\n\t\t\t// non-click actions that change the checkboxes.\n\t\t\te.preventDefault();\n\t\t\tsetTimeout( function () {\n\t\t\t\tif ( !items[ nowClickedIndex ].isDisabled() ) {\n\t\t\t\t\titems[ nowClickedIndex ].setSelected( !wasSelected );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tif ( $nowClicked.length ) {\n\t\tthis.$lastClicked = $nowClicked;\n\t}\n};\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.CheckboxMultiselectWidget.prototype.focus = function () {\n\tvar item;\n\tif ( !this.isDisabled() ) {\n\t\titem = this.getRelativeFocusableItem( null, 1 );\n\t\tif ( item ) {\n\t\t\titem.focus();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * Progress bars visually display the status of an operation, such as a download,\n * and can be either determinate or indeterminate:\n *\n * - **determinate** process bars show the percent of an operation that is complete.\n *\n * - **indeterminate** process bars use a visual display of motion to indicate that an operation\n *   is taking place. Because the extent of an indeterminate operation is unknown, the bar does\n *   not use percentages.\n *\n * The value of the `progress` configuration determines whether the bar is determinate or indeterminate.\n *\n *     @example\n *     // Examples of determinate and indeterminate progress bars.\n *     var progressBar1 = new OO.ui.ProgressBarWidget( {\n *         progress: 33\n *     } );\n *     var progressBar2 = new OO.ui.ProgressBarWidget();\n *\n *     // Create a FieldsetLayout to layout progress bars\n *     var fieldset = new OO.ui.FieldsetLayout;\n *     fieldset.addItems( [\n *        new OO.ui.FieldLayout( progressBar1, {label: 'Determinate', align: 'top'}),\n *        new OO.ui.FieldLayout( progressBar2, {label: 'Indeterminate', align: 'top'})\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number|boolean} [progress=false] The type of progress bar (determinate or indeterminate).\n *  To create a determinate progress bar, specify a number that reflects the initial percent complete.\n *  By default, the progress bar is indeterminate.\n */\nOO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ProgressBarWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$bar = $( '<div>' );\n\tthis.progress = null;\n\n\t// Initialization\n\tthis.setProgress( config.progress !== undefined ? config.progress : false );\n\tthis.$bar.addClass( 'oo-ui-progressBarWidget-bar' );\n\tthis.$element\n\t\t.attr( {\n\t\t\trole: 'progressbar',\n\t\t\t'aria-valuemin': 0,\n\t\t\t'aria-valuemax': 100\n\t\t} )\n\t\t.addClass( 'oo-ui-progressBarWidget' )\n\t\t.append( this.$bar );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ProgressBarWidget.static.tagName = 'div';\n\n/* Methods */\n\n/**\n * Get the percent of the progress that has been completed. Indeterminate progresses will return `false`.\n *\n * @return {number|boolean} Progress percent\n */\nOO.ui.ProgressBarWidget.prototype.getProgress = function () {\n\treturn this.progress;\n};\n\n/**\n * Set the percent of the process completed or `false` for an indeterminate process.\n *\n * @param {number|boolean} progress Progress percent or `false` for indeterminate\n */\nOO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {\n\tthis.progress = progress;\n\n\tif ( progress !== false ) {\n\t\tthis.$bar.css( 'width', this.progress + '%' );\n\t\tthis.$element.attr( 'aria-valuenow', this.progress );\n\t} else {\n\t\tthis.$bar.css( 'width', '' );\n\t\tthis.$element.removeAttr( 'aria-valuenow' );\n\t}\n\tthis.$element.toggleClass( 'oo-ui-progressBarWidget-indeterminate', progress === false );\n};\n","/**\n * InputWidget is the base class for all input widgets, which\n * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},\n * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.\n * @cfg {string} [value=''] The value of the input.\n * @cfg {string} [dir] The directionality of the input (ltr/rtl).\n * @cfg {string} [inputId] The value of the input’s HTML `id` attribute.\n * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input\n *  before it is accepted.\n */\nOO.ui.InputWidget = function OoUiInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.InputWidget.parent.call( this, config );\n\n\t// Properties\n\t// See #reusePreInfuseDOM about config.$input\n\tthis.$input = config.$input || this.getInputElement( config );\n\tthis.value = '';\n\tthis.inputFilter = config.inputFilter;\n\n\t// Mixin constructors\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );\n\tOO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$input } ) );\n\n\t// Events\n\tthis.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );\n\n\t// Initialization\n\tthis.$input\n\t\t.addClass( 'oo-ui-inputWidget-input' )\n\t\t.attr( 'name', config.name )\n\t\t.prop( 'disabled', this.isDisabled() );\n\tthis.$element\n\t\t.addClass( 'oo-ui-inputWidget' )\n\t\t.append( this.$input );\n\tthis.setValue( config.value );\n\tif ( config.dir ) {\n\t\tthis.setDir( config.dir );\n\t}\n\tif ( config.inputId !== undefined ) {\n\t\tthis.setInputId( config.inputId );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.InputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Reusing `$input` lets browsers preserve inputted values across page reloads, see T114134.\n\tconfig.$input = $( node ).find( '.oo-ui-inputWidget-input' );\n\treturn config;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config );\n\tif ( config.$input && config.$input.length ) {\n\t\tstate.value = config.$input.val();\n\t\t// Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward\n\t\tstate.focus = config.$input.is( ':focus' );\n\t}\n\treturn state;\n};\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the value of the input changes.\n *\n * @param {string} value\n */\n\n/* Methods */\n\n/**\n * Get input element.\n *\n * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in\n * different circumstances. The element must have a `value` property (like form elements).\n *\n * @protected\n * @param {Object} config Configuration options\n * @return {jQuery} Input element\n */\nOO.ui.InputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' );\n};\n\n/**\n * Handle potentially value-changing events.\n *\n * @private\n * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event\n */\nOO.ui.InputWidget.prototype.onEdit = function () {\n\tvar widget = this;\n\tif ( !this.isDisabled() ) {\n\t\t// Allow the stack to clear so the value will be updated\n\t\tsetTimeout( function () {\n\t\t\twidget.setValue( widget.$input.val() );\n\t\t} );\n\t}\n};\n\n/**\n * Get the value of the input.\n *\n * @return {string} Input value\n */\nOO.ui.InputWidget.prototype.getValue = function () {\n\t// Resynchronize our internal data with DOM data. Other scripts executing on the page can modify\n\t// it, and we won't know unless they're kind enough to trigger a 'change' event.\n\tvar value = this.$input.val();\n\tif ( this.value !== value ) {\n\t\tthis.setValue( value );\n\t}\n\treturn this.value;\n};\n\n/**\n * Set the directionality of the input.\n *\n * @param {string} dir Text directionality: 'ltr', 'rtl' or 'auto'\n * @chainable\n */\nOO.ui.InputWidget.prototype.setDir = function ( dir ) {\n\tthis.$input.prop( 'dir', dir );\n\treturn this;\n};\n\n/**\n * Set the value of the input.\n *\n * @param {string} value New value\n * @fires change\n * @chainable\n */\nOO.ui.InputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\t// Update the DOM if it has changed. Note that with cleanUpValue, it\n\t// is possible for the DOM value to change without this.value changing.\n\tif ( this.$input.val() !== value ) {\n\t\tthis.$input.val( value );\n\t}\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', this.value );\n\t}\n\treturn this;\n};\n\n/**\n * Clean up incoming value.\n *\n * Ensures value is a string, and converts undefined and null to empty string.\n *\n * @private\n * @param {string} value Original value\n * @return {string} Cleaned up value\n */\nOO.ui.InputWidget.prototype.cleanUpValue = function ( value ) {\n\tif ( value === undefined || value === null ) {\n\t\treturn '';\n\t} else if ( this.inputFilter ) {\n\t\treturn this.inputFilter( String( value ) );\n\t} else {\n\t\treturn String( value );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.prototype.setDisabled = function ( state ) {\n\tOO.ui.InputWidget.parent.prototype.setDisabled.call( this, state );\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t}\n\treturn this;\n};\n\n/**\n * Set the 'id' attribute of the `<input>` element.\n *\n * @param {string} id\n * @chainable\n */\nOO.ui.InputWidget.prototype.setInputId = function ( id ) {\n\tthis.$input.attr( 'id', id );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.InputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.value !== undefined && state.value !== this.getValue() ) {\n\t\tthis.setValue( state.value );\n\t}\n\tif ( state.focus ) {\n\t\tthis.focus();\n\t}\n};\n","/**\n * Data widget intended for creating 'hidden'-type inputs.\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [value=''] The value of the input.\n * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.\n */\nOO.ui.HiddenInputWidget = function OoUiHiddenInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { value: '', name: '' }, config );\n\n\t// Parent constructor\n\tOO.ui.HiddenInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.attr( {\n\t\ttype: 'hidden',\n\t\tvalue: config.value,\n\t\tname: config.name\n\t} );\n\tthis.$element.removeAttr( 'aria-disabled' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.HiddenInputWidget, OO.ui.Widget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.HiddenInputWidget.static.tagName = 'input';\n","/**\n * ButtonInputWidget is used to submit HTML forms and is intended to be used within\n * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably\n * want to use OO.ui.ButtonWidget instead. Button input widgets can be rendered as either an\n * HTML `<button>` (the default) or an HTML `<input>` tags. See the\n * [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // A ButtonInputWidget rendered as an HTML button, the default.\n *     var button = new OO.ui.ButtonInputWidget( {\n *         label: 'Input button',\n *         icon: 'check',\n *         value: 'check'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs#Button_inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [type='button'] The value of the HTML `'type'` attribute: 'button', 'submit' or 'reset'.\n * @cfg {boolean} [useInputTag=false] Use an `<input>` tag instead of a `<button>` tag, the default.\n *  Widgets configured to be an `<input>` do not support {@link #icon icons} and {@link #indicator indicators},\n *  non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only\n *  be set to `true` when there’s need to support IE 6 in a form with multiple buttons.\n */\nOO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { type: 'button', useInputTag: false }, config );\n\n\t// See InputWidget#reusePreInfuseDOM about config.$input\n\tif ( config.$input ) {\n\t\tconfig.$input.empty();\n\t}\n\n\t// Properties (must be set before parent constructor, which calls #setValue)\n\tthis.useInputTag = config.useInputTag;\n\n\t// Parent constructor\n\tOO.ui.ButtonInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );\n\n\t// Initialization\n\tif ( !config.useInputTag ) {\n\t\tthis.$input.append( this.$icon, this.$label, this.$indicator );\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonInputWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonInputWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {\n\tvar type;\n\ttype = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button';\n\treturn $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type=\"' + type + '\">' );\n};\n\n/**\n * Set label value.\n *\n * If #useInputTag is `true`, the label is set as the `value` of the `<input>` tag.\n *\n * @param {jQuery|string|Function|null} label Label nodes, text, a function that returns nodes or\n *  text, or `null` for no label\n * @chainable\n */\nOO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {\n\tif ( typeof label === 'function' ) {\n\t\tlabel = OO.ui.resolveMsg( label );\n\t}\n\n\tif ( this.useInputTag ) {\n\t\t// Discard non-plaintext labels\n\t\tif ( typeof label !== 'string' ) {\n\t\t\tlabel = '';\n\t\t}\n\n\t\tthis.$input.val( label );\n\t}\n\n\treturn OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label );\n};\n\n/**\n * Set the value of the input.\n *\n * This method is disabled for button inputs configured as {@link #useInputTag <input> tags}, as\n * they do not support {@link #value values}.\n *\n * @param {string} value New value\n * @chainable\n */\nOO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {\n\tif ( !this.useInputTag ) {\n\t\tOO.ui.ButtonInputWidget.parent.prototype.setValue.call( this, value );\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonInputWidget.prototype.getInputId = function () {\n\t// Disable generating `<label>` elements for buttons. One would very rarely need additional label\n\t// for a button, and it's already a big clickable target, and it causes unexpected rendering.\n\treturn null;\n};\n","/**\n * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.\n * Note that these {@link OO.ui.InputWidget input widgets} are best laid out\n * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}\n * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // An example of selected, unselected, and disabled checkbox inputs\n *     var checkbox1=new OO.ui.CheckboxInputWidget( {\n *          value: 'a',\n *          selected: true\n *     } );\n *     var checkbox2=new OO.ui.CheckboxInputWidget( {\n *         value: 'b'\n *     } );\n *     var checkbox3=new OO.ui.CheckboxInputWidget( {\n *         value:'c',\n *         disabled: true\n *     } );\n *     // Create a fieldset layout with fields for each checkbox.\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Checkboxes'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( checkbox1, { label: 'Selected checkbox', align: 'inline' } ),\n *         new OO.ui.FieldLayout( checkbox2, { label: 'Unselected checkbox', align: 'inline' } ),\n *         new OO.ui.FieldLayout( checkbox3, { label: 'Disabled checkbox', align: 'inline' } ),\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Select the checkbox initially. By default, the checkbox is not selected.\n */\nOO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.CheckboxInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxInputWidget' )\n\t\t// Required for pretty styling in WikimediaUI theme\n\t\t.append( $( '<span>' ) );\n\tthis.setSelected( config.selected !== undefined ? config.selected : false );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.static.tagName = 'span';\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.checked = config.$input.prop( 'checked' );\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.CheckboxInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'checkbox' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.onEdit = function () {\n\tvar widget = this;\n\tif ( !this.isDisabled() ) {\n\t\t// Allow the stack to clear so the value will be updated\n\t\tsetTimeout( function () {\n\t\t\twidget.setSelected( widget.$input.prop( 'checked' ) );\n\t\t} );\n\t}\n};\n\n/**\n * Set selection state of this checkbox.\n *\n * @param {boolean} state `true` for selected\n * @chainable\n */\nOO.ui.CheckboxInputWidget.prototype.setSelected = function ( state ) {\n\tstate = !!state;\n\tif ( this.selected !== state ) {\n\t\tthis.selected = state;\n\t\tthis.$input.prop( 'checked', this.selected );\n\t\tthis.emit( 'change', this.selected );\n\t}\n\treturn this;\n};\n\n/**\n * Check if this checkbox is selected.\n *\n * @return {boolean} Checkbox is selected\n */\nOO.ui.CheckboxInputWidget.prototype.isSelected = function () {\n\t// Resynchronize our internal data with DOM data. Other scripts executing on the page can modify\n\t// it, and we won't know unless they're kind enough to trigger a 'change' event.\n\tvar selected = this.$input.prop( 'checked' );\n\tif ( this.selected !== selected ) {\n\t\tthis.setSelected( selected );\n\t}\n\treturn this.selected;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$input.click();\n\t}\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.CheckboxInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.checked !== undefined && state.checked !== this.isSelected() ) {\n\t\tthis.setSelected( state.checked );\n\t}\n};\n","/**\n * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used\n * within an HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value\n * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n * A DropdownInputWidget always has a value (one of the options is always selected), unless there\n * are no options. If no `value` configuration option is provided, the first option is selected.\n * If you need a state representing no value (no option being selected), use a DropdownWidget.\n *\n * This and OO.ui.RadioSelectInputWidget support the same configuration options.\n *\n *     @example\n *     // Example: A DropdownInputWidget with three options\n *     var dropdownInput = new OO.ui.DropdownInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( dropdownInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n * @cfg {Object} [dropdown] Configuration options for {@link OO.ui.DropdownWidget DropdownWidget}\n */\nOO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// See InputWidget#reusePreInfuseDOM about config.$input\n\tif ( config.$input ) {\n\t\tconfig.$input.addClass( 'oo-ui-element-hidden' );\n\t}\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown );\n\n\t// Parent constructor\n\tOO.ui.DropdownInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TitledElement.call( this, config );\n\n\t// Events\n\tthis.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );\n\n\t// Initialization\n\tthis.setOptions( config.options || [] );\n\t// Set the value again, after we did setOptions(). The call from parent doesn't work because the\n\t// widget has no valid options when it happens.\n\tthis.setValue( config.value );\n\tthis.$element\n\t\t.addClass( 'oo-ui-dropdownInputWidget' )\n\t\t.append( this.dropdownWidget.$element );\n\tthis.setTabIndexedElement( null );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement );\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.DropdownInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'hidden' );\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.MenuOptionWidget|null} item Selected menu item\n */\nOO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {\n\tthis.setValue( item ? item.getData() : '' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {\n\tvar selected;\n\tvalue = this.cleanUpValue( value );\n\t// Only allow setting values that are actually present in the dropdown\n\tselected = this.dropdownWidget.getMenu().getItemFromData( value ) ||\n\t\tthis.dropdownWidget.getMenu().findFirstSelectableItem();\n\tthis.dropdownWidget.getMenu().selectItem( selected );\n\tvalue = selected ? selected.getData() : '';\n\tOO.ui.DropdownInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.dropdownWidget.setDisabled( state );\n\tOO.ui.DropdownInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.DropdownInputWidget.prototype.setOptions = function ( options ) {\n\tvar\n\t\tvalue = this.getValue(),\n\t\twidget = this;\n\n\t// Rebuild the dropdown menu\n\tthis.dropdownWidget.getMenu()\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue = widget.cleanUpValue( opt.data );\n\n\t\t\tif ( opt.optgroup === undefined ) {\n\t\t\t\treturn new OO.ui.MenuOptionWidget( {\n\t\t\t\t\tdata: optValue,\n\t\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\treturn new OO.ui.MenuSectionOptionWidget( {\n\t\t\t\t\tlabel: opt.optgroup\n\t\t\t\t} );\n\t\t\t}\n\t\t} ) );\n\n\t// Restore the previous value, or reset to something sensible\n\tif ( this.dropdownWidget.getMenu().getItemFromData( value ) ) {\n\t\t// Previous value is still available, ensure consistency with the dropdown\n\t\tthis.setValue( value );\n\t} else {\n\t\t// No longer valid, reset\n\t\tif ( options.length ) {\n\t\t\tthis.setValue( options[ 0 ].data );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.focus = function () {\n\tthis.dropdownWidget.focus();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.blur = function () {\n\tthis.dropdownWidget.blur();\n\treturn this;\n};\n","/**\n * RadioInputWidget creates a single radio button. Because radio buttons are usually used as a set,\n * in most cases you will want to use a {@link OO.ui.RadioSelectWidget radio select}\n * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // An example of selected, unselected, and disabled radio inputs\n *     var radio1 = new OO.ui.RadioInputWidget( {\n *         value: 'a',\n *         selected: true\n *     } );\n *     var radio2 = new OO.ui.RadioInputWidget( {\n *         value: 'b'\n *     } );\n *     var radio3 = new OO.ui.RadioInputWidget( {\n *         value: 'c',\n *         disabled: true\n *     } );\n *     // Create a fieldset layout with fields for each radio button.\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Radio inputs'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( radio1, { label: 'Selected', align: 'inline' } ),\n *         new OO.ui.FieldLayout( radio2, { label: 'Unselected', align: 'inline' } ),\n *         new OO.ui.FieldLayout( radio3, { label: 'Disabled', align: 'inline' } ),\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Select the radio button initially. By default, the radio button is not selected.\n */\nOO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.RadioInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioInputWidget' )\n\t\t// Required for pretty styling in WikimediaUI theme\n\t\t.append( $( '<span>' ) );\n\tthis.setSelected( config.selected !== undefined ? config.selected : false );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.static.tagName = 'span';\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.checked = config.$input.prop( 'checked' );\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.RadioInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'radio' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.onEdit = function () {\n\t// RadioInputWidget doesn't track its state.\n};\n\n/**\n * Set selection state of this radio button.\n *\n * @param {boolean} state `true` for selected\n * @chainable\n */\nOO.ui.RadioInputWidget.prototype.setSelected = function ( state ) {\n\t// RadioInputWidget doesn't track its state.\n\tthis.$input.prop( 'checked', state );\n\treturn this;\n};\n\n/**\n * Check if this radio button is selected.\n *\n * @return {boolean} Radio is selected\n */\nOO.ui.RadioInputWidget.prototype.isSelected = function () {\n\treturn this.$input.prop( 'checked' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$input.click();\n\t}\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.RadioInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.checked !== undefined && state.checked !== this.isSelected() ) {\n\t\tthis.setSelected( state.checked );\n\t}\n};\n","/**\n * RadioSelectInputWidget is a {@link OO.ui.RadioSelectWidget RadioSelectWidget} intended to be used\n * within an HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value\n * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n * This and OO.ui.DropdownInputWidget support the same configuration options.\n *\n *     @example\n *     // Example: A RadioSelectInputWidget with three options\n *     var radioSelectInput = new OO.ui.RadioSelectInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( radioSelectInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.RadioSelectInputWidget = function OoUiRadioSelectInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.radioSelectWidget = new OO.ui.RadioSelectWidget();\n\n\t// Parent constructor\n\tOO.ui.RadioSelectInputWidget.parent.call( this, config );\n\n\t// Events\n\tthis.radioSelectWidget.connect( this, { select: 'onMenuSelect' } );\n\n\t// Initialization\n\tthis.setOptions( config.options || [] );\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioSelectInputWidget' )\n\t\t.append( this.radioSelectWidget.$element );\n\tthis.setTabIndexedElement( null );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioSelectInputWidget, OO.ui.InputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.RadioSelectInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.value = $( node ).find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked' ).val();\n\treturn state;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.RadioSelectInputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Cannot reuse the `<input type=radio>` set\n\tdelete config.$input;\n\treturn config;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.RadioSelectInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'hidden' );\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.RadioOptionWidget} item Selected menu item\n */\nOO.ui.RadioSelectInputWidget.prototype.onMenuSelect = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\tthis.radioSelectWidget.selectItemByData( value );\n\tOO.ui.RadioSelectInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.radioSelectWidget.setDisabled( state );\n\tOO.ui.RadioSelectInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {\n\tvar\n\t\tvalue = this.getValue(),\n\t\twidget = this;\n\n\t// Rebuild the radioSelect menu\n\tthis.radioSelectWidget\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue = widget.cleanUpValue( opt.data );\n\t\t\treturn new OO.ui.RadioOptionWidget( {\n\t\t\t\tdata: optValue,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue\n\t\t\t} );\n\t\t} ) );\n\n\t// Restore the previous value, or reset to something sensible\n\tif ( this.radioSelectWidget.getItemFromData( value ) ) {\n\t\t// Previous value is still available, ensure consistency with the radioSelect\n\t\tthis.setValue( value );\n\t} else {\n\t\t// No longer valid, reset\n\t\tif ( options.length ) {\n\t\t\tthis.setValue( options[ 0 ].data );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.focus = function () {\n\tthis.radioSelectWidget.focus();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.blur = function () {\n\tthis.radioSelectWidget.blur();\n\treturn this;\n};\n","/**\n * CheckboxMultiselectInputWidget is a\n * {@link OO.ui.CheckboxMultiselectWidget CheckboxMultiselectWidget} intended to be used within a\n * HTML form, such as a OO.ui.FormLayout. The selected values are synchronized with the value of\n * HTML `<input type=checkbox>` tags. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n *     @example\n *     // Example: A CheckboxMultiselectInputWidget with three options\n *     var multiselectInput = new OO.ui.CheckboxMultiselectInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( multiselectInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: …, disabled: … }`\n */\nOO.ui.CheckboxMultiselectInputWidget = function OoUiCheckboxMultiselectInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.checkboxMultiselectWidget = new OO.ui.CheckboxMultiselectWidget();\n\n\t// Parent constructor\n\tOO.ui.CheckboxMultiselectInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.inputName = config.name;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultiselectInputWidget' )\n\t\t.append( this.checkboxMultiselectWidget.$element );\n\t// We don't use this.$input, but rather the CheckboxInputWidgets inside each option\n\tthis.$input.detach();\n\tthis.setOptions( config.options || [] );\n\t// Have to repeat this from parent, as we need options to be set up for this to make sense\n\tthis.setValue( config.value );\n\n\t// setValue when checkboxMultiselectWidget changes\n\tthis.checkboxMultiselectWidget.on( 'change', function () {\n\t\tthis.setValue( this.checkboxMultiselectWidget.getSelectedItemsData() );\n\t}.bind( this ) );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultiselectInputWidget, OO.ui.InputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.CheckboxMultiselectInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.value = $( node ).find( '.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked' )\n\t\t.toArray().map( function ( el ) { return el.value; } );\n\treturn state;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.CheckboxMultiselectInputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Cannot reuse the `<input type=checkbox>` set\n\tdelete config.$input;\n\treturn config;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.getInputElement = function () {\n\t// Actually unused\n\treturn $( '<unused>' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.getValue = function () {\n\tvar value = this.$element.find( '.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked' )\n\t\t.toArray().map( function ( el ) { return el.value; } );\n\tif ( this.value !== value ) {\n\t\tthis.setValue( value );\n\t}\n\treturn this.value;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\tthis.checkboxMultiselectWidget.selectItemsByData( value );\n\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * Clean up incoming value.\n *\n * @param {string[]} value Original value\n * @return {string[]} Cleaned up value\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.cleanUpValue = function ( value ) {\n\tvar i, singleValue,\n\t\tcleanValue = [];\n\tif ( !Array.isArray( value ) ) {\n\t\treturn cleanValue;\n\t}\n\tfor ( i = 0; i < value.length; i++ ) {\n\t\tsingleValue =\n\t\t\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.cleanUpValue.call( this, value[ i ] );\n\t\t// Remove options that we don't have here\n\t\tif ( !this.checkboxMultiselectWidget.getItemFromData( singleValue ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tcleanValue.push( singleValue );\n\t}\n\treturn cleanValue;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.checkboxMultiselectWidget.setDisabled( state );\n\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: …, disabled: … }`\n * @chainable\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setOptions = function ( options ) {\n\tvar widget = this;\n\n\t// Rebuild the checkboxMultiselectWidget menu\n\tthis.checkboxMultiselectWidget\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue, item, optDisabled;\n\t\t\toptValue =\n\t\t\t\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.cleanUpValue.call( widget, opt.data );\n\t\t\toptDisabled = opt.disabled !== undefined ? opt.disabled : false;\n\t\t\titem = new OO.ui.CheckboxMultioptionWidget( {\n\t\t\t\tdata: optValue,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue,\n\t\t\t\tdisabled: optDisabled\n\t\t\t} );\n\t\t\t// Set the 'name' and 'value' for form submission\n\t\t\titem.checkbox.$input.attr( 'name', widget.inputName );\n\t\t\titem.checkbox.setValue( optValue );\n\t\t\treturn item;\n\t\t} ) );\n\n\t// Re-set the value, checking the checkboxes as needed.\n\t// This will also get rid of any stale options that we just removed.\n\tthis.setValue( this.getValue() );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.focus = function () {\n\tthis.checkboxMultiselectWidget.focus();\n\treturn this;\n};\n","/**\n * TextInputWidgets, like HTML text inputs, can be configured with options that customize the\n * size of the field as well as its presentation. In addition, these widgets can be configured\n * with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators}, an optional\n * validation-pattern (used to determine if an input value is valid or not) and an input filter,\n * which modifies incoming values rather than validating them.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // Example of a text input widget\n *     var textInput = new OO.ui.TextInputWidget( {\n *         value: 'Text input'\n *     } )\n *     $( 'body' ).append( textInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password'\n *  'email', 'url' or 'number'.\n * @cfg {string} [placeholder] Placeholder text\n * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to\n *  instruct the browser to focus this widget.\n * @cfg {boolean} [readOnly=false] Prevent changes to the value of the text input.\n * @cfg {number} [maxLength] Maximum number of characters allowed in the input.\n * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of\n *  the value or placeholder text: `'before'` or `'after'`\n * @cfg {boolean} [required=false] Mark the field as required. Implies `indicator: 'required'`.\n * @cfg {boolean} [autocomplete=true] Should the browser support autocomplete for this field\n * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a\n *  pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'\n *  (the value must contain only numbers); when RegExp, a regular expression that must match the\n *  value for it to be considered valid; when Function, a function receiving the value as parameter\n *  that must return true, or promise resolving to true, for it to be considered valid.\n */\nOO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\ttype: 'text',\n\t\tlabelPosition: 'after'\n\t}, config );\n\n\tif ( config.multiline ) {\n\t\tOO.ui.warnDeprecation( 'TextInputWidget: config.multiline is deprecated. Use the MultilineTextInputWidget instead. See T130434.' );\n\t\treturn new OO.ui.MultilineTextInputWidget( config );\n\t}\n\n\t// Parent constructor\n\tOO.ui.TextInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$input } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.type = this.getSaneType( config );\n\tthis.readOnly = false;\n\tthis.required = false;\n\tthis.validate = null;\n\tthis.styleHeight = null;\n\tthis.scrollWidth = null;\n\n\tthis.setValidation( config.validate );\n\tthis.setLabelPosition( config.labelPosition );\n\n\t// Events\n\tthis.$input.on( {\n\t\tkeypress: this.onKeyPress.bind( this ),\n\t\tblur: this.onBlur.bind( this ),\n\t\tfocus: this.onFocus.bind( this )\n\t} );\n\tthis.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );\n\tthis.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );\n\tthis.on( 'labelChange', this.updatePosition.bind( this ) );\n\tthis.on( 'change', OO.ui.debounce( this.onDebouncedChange.bind( this ), 250 ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-textInputWidget oo-ui-textInputWidget-type-' + this.type )\n\t\t.append( this.$icon, this.$indicator );\n\tthis.setReadOnly( !!config.readOnly );\n\tthis.setRequired( !!config.required );\n\tif ( config.placeholder !== undefined ) {\n\t\tthis.$input.attr( 'placeholder', config.placeholder );\n\t}\n\tif ( config.maxLength !== undefined ) {\n\t\tthis.$input.attr( 'maxlength', config.maxLength );\n\t}\n\tif ( config.autofocus ) {\n\t\tthis.$input.attr( 'autofocus', 'autofocus' );\n\t}\n\tif ( config.autocomplete === false ) {\n\t\tthis.$input.attr( 'autocomplete', 'off' );\n\t\t// Turning off autocompletion also disables \"form caching\" when the user navigates to a\n\t\t// different page and then clicks \"Back\". Re-enable it when leaving. Borrowed from jQuery UI.\n\t\t$( window ).on( {\n\t\t\tbeforeunload: function () {\n\t\t\t\tthis.$input.removeAttr( 'autocomplete' );\n\t\t\t}.bind( this ),\n\t\t\tpageshow: function () {\n\t\t\t\t// Browsers don't seem to actually fire this event on \"Back\", they instead just reload the\n\t\t\t\t// whole page... it shouldn't hurt, though.\n\t\t\t\tthis.$input.attr( 'autocomplete', 'off' );\n\t\t\t}.bind( this )\n\t\t} );\n\t}\n\tif ( this.label ) {\n\t\tthis.isWaitingToBeAttached = true;\n\t\tthis.installParentChangeDetector();\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\nOO.ui.TextInputWidget.static.validationPatterns = {\n\t'non-empty': /.+/,\n\tinteger: /^\\d+$/\n};\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.TextInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config );\n\treturn state;\n};\n\n/* Events */\n\n/**\n * An `enter` event is emitted when the user presses 'enter' inside the text box.\n *\n * @event enter\n */\n\n/* Methods */\n\n/**\n * Handle icon mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle indicator mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @fires enter If enter key is pressed\n */\nOO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {\n\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\tthis.emit( 'enter', e );\n\t}\n};\n\n/**\n * Handle blur events.\n *\n * @private\n * @param {jQuery.Event} e Blur event\n */\nOO.ui.TextInputWidget.prototype.onBlur = function () {\n\tthis.setValidityFlag();\n};\n\n/**\n * Handle focus events.\n *\n * @private\n * @param {jQuery.Event} e Focus event\n */\nOO.ui.TextInputWidget.prototype.onFocus = function () {\n\tif ( this.isWaitingToBeAttached ) {\n\t\t// If we've received focus, then we must be attached to the document, and if\n\t\t// isWaitingToBeAttached is still true, that means the handler never fired. Fire it now.\n\t\tthis.onElementAttach();\n\t}\n\tthis.setValidityFlag( true );\n};\n\n/**\n * Handle element attach events.\n *\n * @private\n * @param {jQuery.Event} e Element attach event\n */\nOO.ui.TextInputWidget.prototype.onElementAttach = function () {\n\tthis.isWaitingToBeAttached = false;\n\t// Any previously calculated size is now probably invalid if we reattached elsewhere\n\tthis.valCache = null;\n\tthis.positionLabel();\n};\n\n/**\n * Handle debounced change events.\n *\n * @param {string} value\n * @private\n */\nOO.ui.TextInputWidget.prototype.onDebouncedChange = function () {\n\tthis.setValidityFlag();\n};\n\n/**\n * Check if the input is {@link #readOnly read-only}.\n *\n * @return {boolean}\n */\nOO.ui.TextInputWidget.prototype.isReadOnly = function () {\n\treturn this.readOnly;\n};\n\n/**\n * Set the {@link #readOnly read-only} state of the input.\n *\n * @param {boolean} state Make input read-only\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {\n\tthis.readOnly = !!state;\n\tthis.$input.prop( 'readOnly', this.readOnly );\n\treturn this;\n};\n\n/**\n * Check if the input is {@link #required required}.\n *\n * @return {boolean}\n */\nOO.ui.TextInputWidget.prototype.isRequired = function () {\n\treturn this.required;\n};\n\n/**\n * Set the {@link #required required} state of the input.\n *\n * @param {boolean} state Make input required\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setRequired = function ( state ) {\n\tthis.required = !!state;\n\tif ( this.required ) {\n\t\tthis.$input\n\t\t\t.prop( 'required', true )\n\t\t\t.attr( 'aria-required', 'true' );\n\t\tif ( this.getIndicator() === null ) {\n\t\t\tthis.setIndicator( 'required' );\n\t\t}\n\t} else {\n\t\tthis.$input\n\t\t\t.prop( 'required', false )\n\t\t\t.removeAttr( 'aria-required' );\n\t\tif ( this.getIndicator() === 'required' ) {\n\t\t\tthis.setIndicator( null );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Support function for making #onElementAttach work across browsers.\n *\n * This whole function could be replaced with one line of code using the DOMNodeInsertedIntoDocument\n * event, but it's not supported by Firefox and allegedly deprecated, so we only use it as fallback.\n *\n * Due to MutationObserver performance woes, #onElementAttach is only somewhat reliably called the\n * first time that the element gets attached to the documented.\n */\nOO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {\n\tvar mutationObserver, onRemove, topmostNode, fakeParentNode,\n\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,\n\t\twidget = this;\n\n\tif ( MutationObserver ) {\n\t\t// The new way. If only it wasn't so ugly.\n\n\t\tif ( this.isElementAttached() ) {\n\t\t\t// Widget is attached already, do nothing. This breaks the functionality of this function when\n\t\t\t// the widget is detached and reattached. Alas, doing this correctly with MutationObserver\n\t\t\t// would require observation of the whole document, which would hurt performance of other,\n\t\t\t// more important code.\n\t\t\treturn;\n\t\t}\n\n\t\t// Find topmost node in the tree\n\t\ttopmostNode = this.$element[ 0 ];\n\t\twhile ( topmostNode.parentNode ) {\n\t\t\ttopmostNode = topmostNode.parentNode;\n\t\t}\n\n\t\t// We have no way to detect the $element being attached somewhere without observing the entire\n\t\t// DOM with subtree modifications, which would hurt performance. So we cheat: we hook to the\n\t\t// parent node of $element, and instead detect when $element is removed from it (and thus\n\t\t// probably attached somewhere else). If there is no parent, we create a \"fake\" one. If it\n\t\t// doesn't get attached, we end up back here and create the parent.\n\n\t\tmutationObserver = new MutationObserver( function ( mutations ) {\n\t\t\tvar i, j, removedNodes;\n\t\t\tfor ( i = 0; i < mutations.length; i++ ) {\n\t\t\t\tremovedNodes = mutations[ i ].removedNodes;\n\t\t\t\tfor ( j = 0; j < removedNodes.length; j++ ) {\n\t\t\t\t\tif ( removedNodes[ j ] === topmostNode ) {\n\t\t\t\t\t\tsetTimeout( onRemove, 0 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tonRemove = function () {\n\t\t\t// If the node was attached somewhere else, report it\n\t\t\tif ( widget.isElementAttached() ) {\n\t\t\t\twidget.onElementAttach();\n\t\t\t}\n\t\t\tmutationObserver.disconnect();\n\t\t\twidget.installParentChangeDetector();\n\t\t};\n\n\t\t// Create a fake parent and observe it\n\t\tfakeParentNode = $( '<div>' ).append( topmostNode )[ 0 ];\n\t\tmutationObserver.observe( fakeParentNode, { childList: true } );\n\t} else {\n\t\t// Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for\n\t\t// detachment and reattachment, but it's not supported by Firefox and allegedly deprecated.\n\t\tthis.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );\n\t}\n};\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {\n\tif ( this.getSaneType( config ) === 'number' ) {\n\t\treturn $( '<input>' )\n\t\t\t.attr( 'step', 'any' )\n\t\t\t.attr( 'type', 'number' );\n\t} else {\n\t\treturn $( '<input>' ).attr( 'type', this.getSaneType( config ) );\n\t}\n};\n\n/**\n * Get sanitized value for 'type' for given config.\n *\n * @param {Object} config Configuration options\n * @return {string|null}\n * @private\n */\nOO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {\n\tvar allowedTypes = [\n\t\t'text',\n\t\t'password',\n\t\t'email',\n\t\t'url',\n\t\t'number'\n\t];\n\treturn allowedTypes.indexOf( config.type ) !== -1 ? config.type : 'text';\n};\n\n/**\n * Focus the input and select a specified range within the text.\n *\n * @param {number} from Select from offset\n * @param {number} [to] Select to offset, defaults to from\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {\n\tvar isBackwards, start, end,\n\t\tinput = this.$input[ 0 ];\n\n\tto = to || from;\n\n\tisBackwards = to < from;\n\tstart = isBackwards ? to : from;\n\tend = isBackwards ? from : to;\n\n\tthis.focus();\n\n\ttry {\n\t\tinput.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );\n\t} catch ( e ) {\n\t\t// IE throws an exception if you call setSelectionRange on a unattached DOM node.\n\t\t// Rather than expensively check if the input is attached every time, just check\n\t\t// if it was the cause of an error being thrown. If not, rethrow the error.\n\t\tif ( this.getElementDocument().body.contains( input ) ) {\n\t\t\tthrow e;\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Get an object describing the current selection range in a directional manner\n *\n * @return {Object} Object containing 'from' and 'to' offsets\n */\nOO.ui.TextInputWidget.prototype.getRange = function () {\n\tvar input = this.$input[ 0 ],\n\t\tstart = input.selectionStart,\n\t\tend = input.selectionEnd,\n\t\tisBackwards = input.selectionDirection === 'backward';\n\n\treturn {\n\t\tfrom: isBackwards ? end : start,\n\t\tto: isBackwards ? start : end\n\t};\n};\n\n/**\n * Get the length of the text input value.\n *\n * This could differ from the length of #getValue if the\n * value gets filtered\n *\n * @return {number} Input length\n */\nOO.ui.TextInputWidget.prototype.getInputLength = function () {\n\treturn this.$input[ 0 ].value.length;\n};\n\n/**\n * Focus the input and select the entire text.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.select = function () {\n\treturn this.selectRange( 0, this.getInputLength() );\n};\n\n/**\n * Focus the input and move the cursor to the start.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.moveCursorToStart = function () {\n\treturn this.selectRange( 0 );\n};\n\n/**\n * Focus the input and move the cursor to the end.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {\n\treturn this.selectRange( this.getInputLength() );\n};\n\n/**\n * Insert new content into the input.\n *\n * @param {string} content Content to be inserted\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.insertContent = function ( content ) {\n\tvar start, end,\n\t\trange = this.getRange(),\n\t\tvalue = this.getValue();\n\n\tstart = Math.min( range.from, range.to );\n\tend = Math.max( range.from, range.to );\n\n\tthis.setValue( value.slice( 0, start ) + content + value.slice( end ) );\n\tthis.selectRange( start + content.length );\n\treturn this;\n};\n\n/**\n * Insert new content either side of a selection.\n *\n * @param {string} pre Content to be inserted before the selection\n * @param {string} post Content to be inserted after the selection\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.encapsulateContent = function ( pre, post ) {\n\tvar start, end,\n\t\trange = this.getRange(),\n\t\toffset = pre.length;\n\n\tstart = Math.min( range.from, range.to );\n\tend = Math.max( range.from, range.to );\n\n\tthis.selectRange( start ).insertContent( pre );\n\tthis.selectRange( offset + end ).insertContent( post );\n\n\tthis.selectRange( offset + start, offset + end );\n\treturn this;\n};\n\n/**\n * Set the validation pattern.\n *\n * The validation pattern is either a regular expression, a function, or the symbolic name of a\n * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the\n * value must contain only numbers).\n *\n * @param {RegExp|Function|string|null} validate Regular expression, function, or the symbolic name\n *  of a pattern (either ‘integer’ or ‘non-empty’) defined by the class.\n */\nOO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {\n\tif ( validate instanceof RegExp || validate instanceof Function ) {\n\t\tthis.validate = validate;\n\t} else {\n\t\tthis.validate = this.constructor.static.validationPatterns[ validate ] || /.*/;\n\t}\n};\n\n/**\n * Sets the 'invalid' flag appropriately.\n *\n * @param {boolean} [isValid] Optionally override validation result\n */\nOO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {\n\tvar widget = this,\n\t\tsetFlag = function ( valid ) {\n\t\t\tif ( !valid ) {\n\t\t\t\twidget.$input.attr( 'aria-invalid', 'true' );\n\t\t\t} else {\n\t\t\t\twidget.$input.removeAttr( 'aria-invalid' );\n\t\t\t}\n\t\t\twidget.setFlags( { invalid: !valid } );\n\t\t};\n\n\tif ( isValid !== undefined ) {\n\t\tsetFlag( isValid );\n\t} else {\n\t\tthis.getValidity().then( function () {\n\t\t\tsetFlag( true );\n\t\t}, function () {\n\t\t\tsetFlag( false );\n\t\t} );\n\t}\n};\n\n/**\n * Get the validity of current value.\n *\n * This method returns a promise that resolves if the value is valid and rejects if\n * it isn't. Uses the {@link #validate validation pattern}  to check for validity.\n *\n * @return {jQuery.Promise} A promise that resolves if the value is valid, rejects if not.\n */\nOO.ui.TextInputWidget.prototype.getValidity = function () {\n\tvar result;\n\n\tfunction rejectOrResolve( valid ) {\n\t\tif ( valid ) {\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t} else {\n\t\t\treturn $.Deferred().reject().promise();\n\t\t}\n\t}\n\n\t// Check browser validity and reject if it is invalid\n\tif (\n\t\tthis.$input[ 0 ].checkValidity !== undefined &&\n\t\tthis.$input[ 0 ].checkValidity() === false\n\t) {\n\t\treturn rejectOrResolve( false );\n\t}\n\n\t// Run our checks if the browser thinks the field is valid\n\tif ( this.validate instanceof Function ) {\n\t\tresult = this.validate( this.getValue() );\n\t\tif ( result && $.isFunction( result.promise ) ) {\n\t\t\treturn result.promise().then( function ( valid ) {\n\t\t\t\treturn rejectOrResolve( valid );\n\t\t\t} );\n\t\t} else {\n\t\t\treturn rejectOrResolve( result );\n\t\t}\n\t} else {\n\t\treturn rejectOrResolve( this.getValue().match( this.validate ) );\n\t}\n};\n\n/**\n * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.\n *\n * @param {string} labelPosition Label position, 'before' or 'after'\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {\n\tthis.labelPosition = labelPosition;\n\tif ( this.label ) {\n\t\t// If there is no label and we only change the position, #updatePosition is a no-op,\n\t\t// but it takes really a lot of work to do nothing.\n\t\tthis.updatePosition();\n\t}\n\treturn this;\n};\n\n/**\n * Update the position of the inline label.\n *\n * This method is called by #setLabelPosition, and can also be called on its own if\n * something causes the label to be mispositioned.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.updatePosition = function () {\n\tvar after = this.labelPosition === 'after';\n\n\tthis.$element\n\t\t.toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )\n\t\t.toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );\n\n\tthis.valCache = null;\n\tthis.scrollWidth = null;\n\tthis.positionLabel();\n\n\treturn this;\n};\n\n/**\n * Position the label by setting the correct padding on the input.\n *\n * @private\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.positionLabel = function () {\n\tvar after, rtl, property, newCss;\n\n\tif ( this.isWaitingToBeAttached ) {\n\t\t// #onElementAttach will be called soon, which calls this method\n\t\treturn this;\n\t}\n\n\tnewCss = {\n\t\t'padding-right': '',\n\t\t'padding-left': ''\n\t};\n\n\tif ( this.label ) {\n\t\tthis.$element.append( this.$label );\n\t} else {\n\t\tthis.$label.detach();\n\t\t// Clear old values if present\n\t\tthis.$input.css( newCss );\n\t\treturn;\n\t}\n\n\tafter = this.labelPosition === 'after';\n\trtl = this.$element.css( 'direction' ) === 'rtl';\n\tproperty = after === rtl ? 'padding-left' : 'padding-right';\n\n\tnewCss[ property ] = this.$label.outerWidth( true ) + ( after ? this.scrollWidth : 0 );\n\t// We have to clear the padding on the other side, in case the element direction changed\n\tthis.$input.css( newCss );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TextInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.TextInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.scrollTop !== undefined ) {\n\t\tthis.$input.scrollTop( state.scrollTop );\n\t}\n};\n","/**\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.SearchInputWidget = function OoUiSearchInputWidget( config ) {\n\tconfig = $.extend( {\n\t\ticon: 'search'\n\t}, config );\n\n\t// Set type to text so that TextInputWidget doesn't\n\t// get stuck in an infinite loop.\n\tconfig.type = 'text';\n\n\t// Parent constructor\n\tOO.ui.SearchInputWidget.parent.call( this, config );\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onChange'\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-textInputWidget-type-search' );\n\tthis.updateSearchIndicator();\n\tthis.connect( this, {\n\t\tdisable: 'onDisable'\n\t} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.SearchInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'search' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SearchInputWidget.prototype.onIndicatorMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\t// Clear the text field\n\t\tthis.setValue( '' );\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Update the 'clear' indicator displayed on type: 'search' text\n * fields, hiding it when the field is already empty or when it's not\n * editable.\n */\nOO.ui.SearchInputWidget.prototype.updateSearchIndicator = function () {\n\tif ( this.getValue() === '' || this.isDisabled() || this.isReadOnly() ) {\n\t\tthis.setIndicator( null );\n\t} else {\n\t\tthis.setIndicator( 'clear' );\n\t}\n};\n\n/**\n * Handle change events.\n *\n * @private\n */\nOO.ui.SearchInputWidget.prototype.onChange = function () {\n\tthis.updateSearchIndicator();\n};\n\n/**\n * Handle disable events.\n *\n * @param {boolean} disabled Element is disabled\n * @private\n */\nOO.ui.SearchInputWidget.prototype.onDisable = function () {\n\tthis.updateSearchIndicator();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SearchInputWidget.prototype.setReadOnly = function ( state ) {\n\tOO.ui.SearchInputWidget.parent.prototype.setReadOnly.call( this, state );\n\tthis.updateSearchIndicator();\n\treturn this;\n};\n","/**\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [rows] Number of visible lines in textarea. If used with `autosize`,\n *  specifies minimum number of rows to display.\n * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of\n * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content.\n *  Use the #maxRows config to specify a maximum number of displayed rows.\n * @cfg {boolean} [maxRows] Maximum number of rows to display when #autosize is set to true.\n *  Defaults to the maximum of `10` and `2 * rows`, or `10` if `rows` isn't provided.\n */\nOO.ui.MultilineTextInputWidget = function OoUiMultilineTextInputWidget( config ) {\n\tconfig = $.extend( {\n\t\ttype: 'text'\n\t}, config );\n\tconfig.multiline = false;\n\t// Parent constructor\n\tOO.ui.MultilineTextInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.multiline = true;\n\tthis.autosize = !!config.autosize;\n\tthis.minRows = config.rows !== undefined ? config.rows : '';\n\tthis.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );\n\n\t// Clone for resizing\n\tif ( this.autosize ) {\n\t\tthis.$clone = this.$input\n\t\t\t.clone()\n\t\t\t.insertAfter( this.$input )\n\t\t\t.attr( 'aria-hidden', 'true' )\n\t\t\t.addClass( 'oo-ui-element-hidden' );\n\t}\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onChange'\n\t} );\n\n\t// Initialization\n\tif ( this.multiline && config.rows ) {\n\t\tthis.$input.attr( 'rows', config.rows );\n\t}\n\tif ( this.autosize ) {\n\t\tthis.isWaitingToBeAttached = true;\n\t\tthis.installParentChangeDetector();\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultilineTextInputWidget, OO.ui.TextInputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.MultilineTextInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.scrollTop = config.$input.scrollTop();\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.prototype.onElementAttach = function () {\n\tOO.ui.MultilineTextInputWidget.parent.prototype.onElementAttach.call( this );\n\tthis.adjustSize();\n};\n\n/**\n * Handle change events.\n *\n * @private\n */\nOO.ui.MultilineTextInputWidget.prototype.onChange = function () {\n\tthis.adjustSize();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.prototype.updatePosition = function () {\n\tOO.ui.MultilineTextInputWidget.parent.prototype.updatePosition.call( this );\n\tthis.adjustSize();\n};\n\n/**\n * Override TextInputWidget so it doesn't emit the 'enter' event.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.MultilineTextInputWidget.prototype.onKeyPress = function () {\n\treturn;\n};\n\n/**\n * Automatically adjust the size of the text input.\n *\n * This only affects multiline inputs that are {@link #autosize autosized}.\n *\n * @chainable\n * @fires resize\n */\nOO.ui.MultilineTextInputWidget.prototype.adjustSize = function () {\n\tvar scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError,\n\t\tidealHeight, newHeight, scrollWidth, property;\n\n\tif ( this.$input.val() !== this.valCache ) {\n\t\tif ( this.autosize ) {\n\t\t\tthis.$clone\n\t\t\t\t.val( this.$input.val() )\n\t\t\t\t.attr( 'rows', this.minRows )\n\t\t\t\t// Set inline height property to 0 to measure scroll height\n\t\t\t\t.css( 'height', 0 );\n\n\t\t\tthis.$clone.removeClass( 'oo-ui-element-hidden' );\n\n\t\t\tthis.valCache = this.$input.val();\n\n\t\t\tscrollHeight = this.$clone[ 0 ].scrollHeight;\n\n\t\t\t// Remove inline height property to measure natural heights\n\t\t\tthis.$clone.css( 'height', '' );\n\t\t\tinnerHeight = this.$clone.innerHeight();\n\t\t\touterHeight = this.$clone.outerHeight();\n\n\t\t\t// Measure max rows height\n\t\t\tthis.$clone\n\t\t\t\t.attr( 'rows', this.maxRows )\n\t\t\t\t.css( 'height', 'auto' )\n\t\t\t\t.val( '' );\n\t\t\tmaxInnerHeight = this.$clone.innerHeight();\n\n\t\t\t// Difference between reported innerHeight and scrollHeight with no scrollbars present.\n\t\t\t// This is sometimes non-zero on Blink-based browsers, depending on zoom level.\n\t\t\tmeasurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;\n\t\t\tidealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );\n\n\t\t\tthis.$clone.addClass( 'oo-ui-element-hidden' );\n\n\t\t\t// Only apply inline height when expansion beyond natural height is needed\n\t\t\t// Use the difference between the inner and outer height as a buffer\n\t\t\tnewHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';\n\t\t\tif ( newHeight !== this.styleHeight ) {\n\t\t\t\tthis.$input.css( 'height', newHeight );\n\t\t\t\tthis.styleHeight = newHeight;\n\t\t\t\tthis.emit( 'resize' );\n\t\t\t}\n\t\t}\n\t\tscrollWidth = this.$input[ 0 ].offsetWidth - this.$input[ 0 ].clientWidth;\n\t\tif ( scrollWidth !== this.scrollWidth ) {\n\t\t\tproperty = this.$element.css( 'direction' ) === 'rtl' ? 'left' : 'right';\n\t\t\t// Reset\n\t\t\tthis.$label.css( { right: '', left: '' } );\n\t\t\tthis.$indicator.css( { right: '', left: '' } );\n\n\t\t\tif ( scrollWidth ) {\n\t\t\t\tthis.$indicator.css( property, scrollWidth );\n\t\t\t\tif ( this.labelPosition === 'after' ) {\n\t\t\t\t\tthis.$label.css( property, scrollWidth );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.scrollWidth = scrollWidth;\n\t\t\tthis.positionLabel();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.MultilineTextInputWidget.prototype.getInputElement = function () {\n\treturn $( '<textarea>' );\n};\n\n/**\n * Check if the input supports multiple lines.\n *\n * @return {boolean}\n */\nOO.ui.MultilineTextInputWidget.prototype.isMultiline = function () {\n\treturn !!this.multiline;\n};\n\n/**\n * Check if the input automatically adjusts its size.\n *\n * @return {boolean}\n */\nOO.ui.MultilineTextInputWidget.prototype.isAutosizing = function () {\n\treturn !!this.autosize;\n};\n","/**\n * ComboBoxInputWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value\n * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which\n * a value can be chosen instead). Users can choose options from the combo box in one of two ways:\n *\n * - by typing a value in the text input field. If the value exactly matches the value of a menu\n *   option, that option will appear to be selected.\n * - by choosing a value from the menu. The value of the chosen option will then appear in the text\n *   input field.\n *\n * After the user chooses an option, its `data` will be used as a new value for the widget.\n * A `label` also can be specified for each option: if given, it will be shown instead of the\n * `data` in the dropdown menu.\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A ComboBoxInputWidget.\n *     var comboBox = new OO.ui.ComboBoxInputWidget( {\n *         value: 'Option 1',\n *         options: [\n *             { data: 'Option 1' },\n *             { data: 'Option 2' },\n *             { data: 'Option 3' }\n *         ]\n *     } );\n *     $( 'body' ).append( comboBox.$element );\n *\n *     @example\n *     // Example: A ComboBoxInputWidget with additional option labels.\n *     var comboBox = new OO.ui.ComboBoxInputWidget( {\n *         value: 'Option 1',\n *         options: [\n *             {\n *                 data: 'Option 1',\n *                 label: 'Option One'\n *             },\n *             {\n *                 data: 'Option 2',\n *                 label: 'Option Two'\n *             },\n *             {\n *                 data: 'Option 3',\n *                 label: 'Option Three'\n *             }\n *         ]\n *     } );\n *     $( 'body' ).append( comboBox.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.\n * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where\n *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.ComboBoxInputWidget = function OoUiComboBoxInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tautocomplete: false\n\t}, config );\n\n\t// ComboBoxInputWidget shouldn't support `multiline`\n\tconfig.multiline = false;\n\n\t// See InputWidget#reusePreInfuseDOM about `config.$input`\n\tif ( config.$input ) {\n\t\tconfig.$input.removeAttr( 'list' );\n\t}\n\n\t// Parent constructor\n\tOO.ui.ComboBoxInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\tthis.dropdownButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-comboBoxInputWidget-dropdownButton' ],\n\t\tindicator: 'down',\n\t\tdisabled: this.disabled\n\t} );\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend(\n\t\t{\n\t\t\twidget: this,\n\t\t\tinput: this,\n\t\t\t$floatableContainer: this.$element,\n\t\t\tdisabled: this.isDisabled()\n\t\t},\n\t\tconfig.menu\n\t) );\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onInputChange',\n\t\tenter: 'onInputEnter'\n\t} );\n\tthis.dropdownButton.connect( this, {\n\t\tclick: 'onDropdownButtonClick'\n\t} );\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\tadd: 'onMenuItemsChange',\n\t\tremove: 'onMenuItemsChange'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.menu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\t// Do not override options set via config.menu.items\n\tif ( config.options !== undefined ) {\n\t\tthis.setOptions( config.options );\n\t}\n\tthis.$field = $( '<div>' )\n\t\t.addClass( 'oo-ui-comboBoxInputWidget-field' )\n\t\t.append( this.$input, this.dropdownButton.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-comboBoxInputWidget' )\n\t\t.append( this.$field );\n\tthis.$overlay.append( this.menu.$element );\n\tthis.onMenuItemsChange();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ComboBoxInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * Get the combobox's menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.ComboBoxInputWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the combobox's text input widget.\n *\n * @return {OO.ui.TextInputWidget} Text input widget\n */\nOO.ui.ComboBoxInputWidget.prototype.getInput = function () {\n\treturn this;\n};\n\n/**\n * Handle input change events.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.ComboBoxInputWidget.prototype.onInputChange = function ( value ) {\n\tvar match = this.menu.getItemFromData( value );\n\n\tthis.menu.selectItem( match );\n\tif ( this.menu.findHighlightedItem() ) {\n\t\tthis.menu.highlightItem( match );\n\t}\n\n\tif ( !this.isDisabled() ) {\n\t\tthis.menu.toggle( true );\n\t}\n};\n\n/**\n * Handle input enter events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onInputEnter = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.menu.toggle( false );\n\t}\n};\n\n/**\n * Handle button click events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onDropdownButtonClick = function () {\n\tthis.menu.toggle();\n\tthis.focus();\n};\n\n/**\n * Handle menu choose events.\n *\n * @private\n * @param {OO.ui.OptionWidget} item Chosen item\n */\nOO.ui.ComboBoxInputWidget.prototype.onMenuChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Handle menu item change events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onMenuItemsChange = function () {\n\tvar match = this.menu.getItemFromData( this.getValue() );\n\tthis.menu.selectItem( match );\n\tif ( this.menu.findHighlightedItem() ) {\n\t\tthis.menu.highlightItem( match );\n\t}\n\tthis.$element.toggleClass( 'oo-ui-comboBoxInputWidget-empty', this.menu.isEmpty() );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ComboBoxInputWidget.prototype.setDisabled = function ( disabled ) {\n\t// Parent method\n\tOO.ui.ComboBoxInputWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.dropdownButton ) {\n\t\tthis.dropdownButton.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.menu ) {\n\t\tthis.menu.setDisabled( this.isDisabled() );\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.ComboBoxInputWidget.prototype.setOptions = function ( options ) {\n\tthis.getMenu()\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\treturn new OO.ui.MenuOptionWidget( {\n\t\t\t\tdata: opt.data,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : opt.data\n\t\t\t} );\n\t\t} ) );\n\n\treturn this;\n};\n","/**\n * FieldLayouts are used with OO.ui.FieldsetLayout. Each FieldLayout requires a field-widget,\n * which is a widget that is specified by reference before any optional configuration settings.\n *\n * Field layouts can be configured with help text and/or labels. Labels are aligned in one of four ways:\n *\n * - **left**: The label is placed before the field-widget and aligned with the left margin.\n *   A left-alignment is used for forms with many fields.\n * - **right**: The label is placed before the field-widget and aligned to the right margin.\n *   A right-alignment is used for long but familiar forms which users tab through,\n *   verifying the current field with a quick glance at the label.\n * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms\n *   that users fill out from top to bottom.\n * - **inline**: The label is placed after the field-widget and aligned to the left.\n *   An inline-alignment is best used with checkboxes or radio buttons.\n *\n * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {OO.ui.Widget} fieldWidget Field widget\n * @param {Object} [config] Configuration options\n * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'\n * @cfg {Array} [errors] Error messages about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @cfg {Array} [notices] Notices about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a \"help\" icon will appear\n *  in the upper-right corner of the rendered field; clicking it will display the text in a popup.\n *  For important messages, you are advised to use `notices`, as they are always shown.\n * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n *\n * @throws {Error} An error is thrown if no widget is specified\n */\nOO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( fieldWidget ) && config === undefined ) {\n\t\tconfig = fieldWidget;\n\t\tfieldWidget = config.fieldWidget;\n\t}\n\n\t// Make sure we have required constructor arguments\n\tif ( fieldWidget === undefined ) {\n\t\tthrow new Error( 'Widget not found' );\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { align: 'left' }, config );\n\n\t// Parent constructor\n\tOO.ui.FieldLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {\n\t\t$label: $( '<label>' )\n\t} ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );\n\n\t// Properties\n\tthis.fieldWidget = fieldWidget;\n\tthis.errors = [];\n\tthis.notices = [];\n\tthis.$field = this.isFieldInline() ? $( '<span>' ) : $( '<div>' );\n\tthis.$messages = $( '<ul>' );\n\tthis.$header = $( '<span>' );\n\tthis.$body = $( '<div>' );\n\tthis.align = null;\n\tif ( config.help ) {\n\t\tthis.popupButtonWidget = new OO.ui.PopupButtonWidget( {\n\t\t\t$overlay: config.$overlay,\n\t\t\tpopup: {\n\t\t\t\tpadded: true\n\t\t\t},\n\t\t\tclasses: [ 'oo-ui-fieldLayout-help' ],\n\t\t\tframed: false,\n\t\t\ticon: 'info'\n\t\t} );\n\t\tif ( config.help instanceof OO.ui.HtmlSnippet ) {\n\t\t\tthis.popupButtonWidget.getPopup().$body.html( config.help.toString() );\n\t\t} else {\n\t\t\tthis.popupButtonWidget.getPopup().$body.text( config.help );\n\t\t}\n\t\tthis.$help = this.popupButtonWidget.$element;\n\t} else {\n\t\tthis.$help = $( [] );\n\t}\n\n\t// Events\n\tthis.fieldWidget.connect( this, { disable: 'onFieldDisable' } );\n\n\t// Initialization\n\tif ( config.help ) {\n\t\t// Set the 'aria-describedby' attribute on the fieldWidget\n\t\t// Preference given to an input or a button\n\t\t(\n\t\t\tthis.fieldWidget.$input ||\n\t\t\tthis.fieldWidget.$button ||\n\t\t\tthis.fieldWidget.$element\n\t\t).attr(\n\t\t\t'aria-describedby',\n\t\t\tthis.popupButtonWidget.getPopup().getBodyId()\n\t\t);\n\t}\n\tif ( this.fieldWidget.getInputId() ) {\n\t\tthis.$label.attr( 'for', this.fieldWidget.getInputId() );\n\t} else {\n\t\tthis.$label.on( 'click', function () {\n\t\t\tthis.fieldWidget.simulateLabelClick();\n\t\t\treturn false;\n\t\t}.bind( this ) );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-fieldLayout' )\n\t\t.toggleClass( 'oo-ui-fieldLayout-disabled', this.fieldWidget.isDisabled() )\n\t\t.append( this.$body );\n\tthis.$body.addClass( 'oo-ui-fieldLayout-body' );\n\tthis.$header.addClass( 'oo-ui-fieldLayout-header' );\n\tthis.$messages.addClass( 'oo-ui-fieldLayout-messages' );\n\tthis.$field\n\t\t.addClass( 'oo-ui-fieldLayout-field' )\n\t\t.append( this.fieldWidget.$element );\n\n\tthis.setErrors( config.errors || [] );\n\tthis.setNotices( config.notices || [] );\n\tthis.setAlignment( config.align );\n\t// Call this again to take into account the widget's accessKey\n\tthis.updateTitle();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.TitledElement );\n\n/* Methods */\n\n/**\n * Handle field disable events.\n *\n * @private\n * @param {boolean} value Field is disabled\n */\nOO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {\n\tthis.$element.toggleClass( 'oo-ui-fieldLayout-disabled', value );\n};\n\n/**\n * Get the widget contained by the field.\n *\n * @return {OO.ui.Widget} Field widget\n */\nOO.ui.FieldLayout.prototype.getField = function () {\n\treturn this.fieldWidget;\n};\n\n/**\n * Return `true` if the given field widget can be used with `'inline'` alignment (see\n * #setAlignment). Return `false` if it can't or if this can't be determined.\n *\n * @return {boolean}\n */\nOO.ui.FieldLayout.prototype.isFieldInline = function () {\n\t// This is very simplistic, but should be good enough.\n\treturn this.getField().$element.prop( 'tagName' ).toLowerCase() === 'span';\n};\n\n/**\n * @protected\n * @param {string} kind 'error' or 'notice'\n * @param {string|OO.ui.HtmlSnippet} text\n * @return {jQuery}\n */\nOO.ui.FieldLayout.prototype.makeMessage = function ( kind, text ) {\n\tvar $listItem, $icon, message;\n\t$listItem = $( '<li>' );\n\tif ( kind === 'error' ) {\n\t\t$icon = new OO.ui.IconWidget( { icon: 'alert', flags: [ 'warning' ] } ).$element;\n\t\t$listItem.attr( 'role', 'alert' );\n\t} else if ( kind === 'notice' ) {\n\t\t$icon = new OO.ui.IconWidget( { icon: 'info' } ).$element;\n\t} else {\n\t\t$icon = '';\n\t}\n\tmessage = new OO.ui.LabelWidget( { label: text } );\n\t$listItem\n\t\t.append( $icon, message.$element )\n\t\t.addClass( 'oo-ui-fieldLayout-messages-' + kind );\n\treturn $listItem;\n};\n\n/**\n * Set the field alignment mode.\n *\n * @private\n * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setAlignment = function ( value ) {\n\tif ( value !== this.align ) {\n\t\t// Default to 'left'\n\t\tif ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {\n\t\t\tvalue = 'left';\n\t\t}\n\t\t// Validate\n\t\tif ( value === 'inline' && !this.isFieldInline() ) {\n\t\t\tvalue = 'top';\n\t\t}\n\t\t// Reorder elements\n\t\tif ( value === 'top' ) {\n\t\t\tthis.$header.append( this.$label, this.$help );\n\t\t\tthis.$body.append( this.$header, this.$field );\n\t\t} else if ( value === 'inline' ) {\n\t\t\tthis.$header.append( this.$label, this.$help );\n\t\t\tthis.$body.append( this.$field, this.$header );\n\t\t} else {\n\t\t\tthis.$header.append( this.$label );\n\t\t\tthis.$body.append( this.$header, this.$help, this.$field );\n\t\t}\n\t\t// Set classes. The following classes can be used here:\n\t\t// * oo-ui-fieldLayout-align-left\n\t\t// * oo-ui-fieldLayout-align-right\n\t\t// * oo-ui-fieldLayout-align-top\n\t\t// * oo-ui-fieldLayout-align-inline\n\t\tif ( this.align ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );\n\t\t}\n\t\tthis.$element.addClass( 'oo-ui-fieldLayout-align-' + value );\n\t\tthis.align = value;\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the list of error messages.\n *\n * @param {Array} errors Error messages about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setErrors = function ( errors ) {\n\tthis.errors = errors.slice();\n\tthis.updateMessages();\n\treturn this;\n};\n\n/**\n * Set the list of notice messages.\n *\n * @param {Array} notices Notices about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setNotices = function ( notices ) {\n\tthis.notices = notices.slice();\n\tthis.updateMessages();\n\treturn this;\n};\n\n/**\n * Update the rendering of error and notice messages.\n *\n * @private\n */\nOO.ui.FieldLayout.prototype.updateMessages = function () {\n\tvar i;\n\tthis.$messages.empty();\n\n\tif ( this.errors.length || this.notices.length ) {\n\t\tthis.$body.after( this.$messages );\n\t} else {\n\t\tthis.$messages.remove();\n\t\treturn;\n\t}\n\n\tfor ( i = 0; i < this.notices.length; i++ ) {\n\t\tthis.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );\n\t}\n\tfor ( i = 0; i < this.errors.length; i++ ) {\n\t\tthis.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );\n\t}\n};\n\n/**\n * Include information about the widget's accessKey in our title. TitledElement calls this method.\n * (This is a bit of a hack.)\n *\n * @protected\n * @param {string} title Tooltip label for 'title' attribute\n * @return {string}\n */\nOO.ui.FieldLayout.prototype.formatTitleWithAccessKey = function ( title ) {\n\tif ( this.fieldWidget && this.fieldWidget.formatTitleWithAccessKey ) {\n\t\treturn this.fieldWidget.formatTitleWithAccessKey( title );\n\t}\n\treturn title;\n};\n","/**\n * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,\n * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),\n * is required and is specified before any optional configuration settings.\n *\n * Labels can be aligned in one of four ways:\n *\n * - **left**: The label is placed before the field-widget and aligned with the left margin.\n *   A left-alignment is used for forms with many fields.\n * - **right**: The label is placed before the field-widget and aligned to the right margin.\n *   A right-alignment is used for long but familiar forms which users tab through,\n *   verifying the current field with a quick glance at the label.\n * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms\n *   that users fill out from top to bottom.\n * - **inline**: The label is placed after the field-widget and aligned to the left.\n *   An inline-alignment is best used with checkboxes or radio buttons.\n *\n * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout when help\n * text is specified.\n *\n *     @example\n *     // Example of an ActionFieldLayout\n *     var actionFieldLayout = new OO.ui.ActionFieldLayout(\n *         new OO.ui.TextInputWidget( {\n *             placeholder: 'Field widget'\n *         } ),\n *         new OO.ui.ButtonWidget( {\n *             label: 'Button'\n *         } ),\n *         {\n *             label: 'An ActionFieldLayout. This label is aligned top',\n *             align: 'top',\n *             help: 'This is help text'\n *         }\n *     );\n *\n *     $( 'body' ).append( actionFieldLayout.$element );\n *\n * @class\n * @extends OO.ui.FieldLayout\n *\n * @constructor\n * @param {OO.ui.Widget} fieldWidget Field widget\n * @param {OO.ui.ButtonWidget} buttonWidget Button widget\n * @param {Object} config\n */\nOO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( fieldWidget ) && config === undefined ) {\n\t\tconfig = fieldWidget;\n\t\tfieldWidget = config.fieldWidget;\n\t\tbuttonWidget = config.buttonWidget;\n\t}\n\n\t// Parent constructor\n\tOO.ui.ActionFieldLayout.parent.call( this, fieldWidget, config );\n\n\t// Properties\n\tthis.buttonWidget = buttonWidget;\n\tthis.$button = $( '<span>' );\n\tthis.$input = this.isFieldInline() ? $( '<span>' ) : $( '<div>' );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-actionFieldLayout' );\n\tthis.$button\n\t\t.addClass( 'oo-ui-actionFieldLayout-button' )\n\t\t.append( this.buttonWidget.$element );\n\tthis.$input\n\t\t.addClass( 'oo-ui-actionFieldLayout-input' )\n\t\t.append( this.fieldWidget.$element );\n\tthis.$field\n\t\t.append( this.$input, this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );\n","/**\n * FieldsetLayouts are composed of one or more {@link OO.ui.FieldLayout FieldLayouts},\n * which each contain an individual widget and, optionally, a label. Each Fieldset can be\n * configured with a label as well. For more information and examples,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of a fieldset layout\n *     var input1 = new OO.ui.TextInputWidget( {\n *         placeholder: 'A text input field'\n *     } );\n *\n *     var input2 = new OO.ui.TextInputWidget( {\n *         placeholder: 'A text input field'\n *     } );\n *\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Example of a fieldset layout'\n *     } );\n *\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( input1, {\n *             label: 'Field One'\n *         } ),\n *         new OO.ui.FieldLayout( input2, {\n *             label: 'Field Two'\n *         } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.FieldLayout[]} [items] An array of fields to add to the fieldset. See OO.ui.FieldLayout for more information about fields.\n * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a \"help\" icon will appear\n *  in the upper-right corner of the rendered field; clicking it will display the text in a popup.\n *  For important messages, you are advised to use `notices`, as they are always shown.\n * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.FieldsetLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.$header = $( '<legend>' );\n\tif ( config.help ) {\n\t\tthis.popupButtonWidget = new OO.ui.PopupButtonWidget( {\n\t\t\t$overlay: config.$overlay,\n\t\t\tpopup: {\n\t\t\t\tpadded: true\n\t\t\t},\n\t\t\tclasses: [ 'oo-ui-fieldsetLayout-help' ],\n\t\t\tframed: false,\n\t\t\ticon: 'info'\n\t\t} );\n\t\tif ( config.help instanceof OO.ui.HtmlSnippet ) {\n\t\t\tthis.popupButtonWidget.getPopup().$body.html( config.help.toString() );\n\t\t} else {\n\t\t\tthis.popupButtonWidget.getPopup().$body.text( config.help );\n\t\t}\n\t\tthis.$help = this.popupButtonWidget.$element;\n\t} else {\n\t\tthis.$help = $( [] );\n\t}\n\n\t// Initialization\n\tthis.$header\n\t\t.addClass( 'oo-ui-fieldsetLayout-header' )\n\t\t.append( this.$icon, this.$label, this.$help );\n\tthis.$group.addClass( 'oo-ui-fieldsetLayout-group' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-fieldsetLayout' )\n\t\t.prepend( this.$header, this.$group );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.GroupElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.FieldsetLayout.static.tagName = 'fieldset';\n","/**\n * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based\n * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an\n * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * Only widgets from the {@link OO.ui.InputWidget InputWidget} family support form submission. It\n * includes standard form elements like {@link OO.ui.CheckboxInputWidget checkboxes}, {@link\n * OO.ui.RadioInputWidget radio buttons} and {@link OO.ui.TextInputWidget text fields}, as well as\n * some fancier controls. Some controls have both regular and InputWidget variants, for example\n * OO.ui.DropdownWidget and OO.ui.DropdownInputWidget – only the latter support form submission and\n * often have simplified APIs to match the capabilities of HTML forms.\n * See the [OOjs UI Inputs documentation on MediaWiki] [2] for more information about InputWidgets.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Forms\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n *     @example\n *     // Example of a form layout that wraps a fieldset layout\n *     var input1 = new OO.ui.TextInputWidget( {\n *         placeholder: 'Username'\n *     } );\n *     var input2 = new OO.ui.TextInputWidget( {\n *         placeholder: 'Password',\n *         type: 'password'\n *     } );\n *     var submit = new OO.ui.ButtonInputWidget( {\n *         label: 'Submit'\n *     } );\n *\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'A form layout'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( input1, {\n *             label: 'Username',\n *             align: 'top'\n *         } ),\n *         new OO.ui.FieldLayout( input2, {\n *             label: 'Password',\n *             align: 'top'\n *         } ),\n *         new OO.ui.FieldLayout( submit )\n *     ] );\n *     var form = new OO.ui.FormLayout( {\n *         items: [ fieldset ],\n *         action: '/api/formhandler',\n *         method: 'get'\n *     } )\n *     $( 'body' ).append( form.$element );\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [method] HTML form `method` attribute\n * @cfg {string} [action] HTML form `action` attribute\n * @cfg {string} [enctype] HTML form `enctype` attribute\n * @cfg {OO.ui.FieldsetLayout[]} [items] Fieldset layouts to add to the form layout.\n */\nOO.ui.FormLayout = function OoUiFormLayout( config ) {\n\tvar action;\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.FormLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Events\n\tthis.$element.on( 'submit', this.onFormSubmit.bind( this ) );\n\n\t// Make sure the action is safe\n\taction = config.action;\n\tif ( action !== undefined && !OO.ui.isSafeUrl( action ) ) {\n\t\taction = './' + action;\n\t}\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-formLayout' )\n\t\t.attr( {\n\t\t\tmethod: config.method,\n\t\t\taction: action,\n\t\t\tenctype: config.enctype\n\t\t} );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FormLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'submit' event is emitted when the form is submitted.\n *\n * @event submit\n */\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.FormLayout.static.tagName = 'form';\n\n/* Methods */\n\n/**\n * Handle form submit events.\n *\n * @private\n * @param {jQuery.Event} e Submit event\n * @fires submit\n */\nOO.ui.FormLayout.prototype.onFormSubmit = function () {\n\tif ( this.emit( 'submit' ) ) {\n\t\treturn false;\n\t}\n};\n","/**\n * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,\n * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.\n *\n *     @example\n *     // Example of a panel layout\n *     var panel = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true,\n *         padded: true,\n *         $content: $( '<p>A panel layout with padding and a frame.</p>' )\n *     } );\n *     $( 'body' ).append( panel.$element );\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [scrollable=false] Allow vertical scrolling\n * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.\n * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.\n * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.\n */\nOO.ui.PanelLayout = function OoUiPanelLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tscrollable: false,\n\t\tpadded: false,\n\t\texpanded: true,\n\t\tframed: false\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.PanelLayout.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-panelLayout' );\n\tif ( config.scrollable ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-scrollable' );\n\t}\n\tif ( config.padded ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-padded' );\n\t}\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-expanded' );\n\t}\n\tif ( config.framed ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-framed' );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Focus the panel layout\n *\n * The default implementation just focuses the first focusable element in the panel\n */\nOO.ui.PanelLayout.prototype.focus = function () {\n\tOO.ui.findFocusable( this.$element ).focus();\n};\n","/**\n * HorizontalLayout arranges its contents in a single line (using `display: inline-block` for its\n * items), with small margins between them. Convenient when you need to put a number of block-level\n * widgets on a single line next to each other.\n *\n * Note that inline elements, such as OO.ui.ButtonWidgets, do not need this wrapper.\n *\n *     @example\n *     // HorizontalLayout with a text input and a label\n *     var layout = new OO.ui.HorizontalLayout( {\n *       items: [\n *         new OO.ui.LabelWidget( { label: 'Label' } ),\n *         new OO.ui.TextInputWidget( { value: 'Text' } )\n *       ]\n *     } );\n *     $( 'body' ).append( layout.$element );\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.Widget[]|OO.ui.Layout[]} [items] Widgets or other layouts to add to the layout.\n */\nOO.ui.HorizontalLayout = function OoUiHorizontalLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.HorizontalLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-horizontalLayout' );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.HorizontalLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement );\n","}( OO ) );\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/intro.js.txt","../src/core.js","../src/mixin.js","../src/Element.js","../src/HtmlSnippet.js","../src/Layout.js","../src/Widget.js","../src/Theme.js","../src/mixins/TabIndexedElement.js","../src/mixins/ButtonElement.js","../src/mixins/GroupElement.js","../src/mixins/IconElement.js","../src/mixins/IndicatorElement.js","../src/mixins/LabelElement.js","../src/mixins/FlaggedElement.js","../src/mixins/TitledElement.js","../src/mixins/AccessKeyedElement.js","../src/widgets/ButtonWidget.js","../src/widgets/ButtonGroupWidget.js","../src/widgets/IconWidget.js","../src/widgets/IndicatorWidget.js","../src/widgets/LabelWidget.js","../src/mixins/PendingElement.js","../src/mixins/FloatableElement.js","../src/mixins/ClippableElement.js","../src/widgets/PopupWidget.js","../src/mixins/PopupElement.js","../src/widgets/PopupButtonWidget.js","../src/mixins/GroupWidget.js","../src/mixins/ItemWidget.js","../src/widgets/OptionWidget.js","../src/widgets/SelectWidget.js","../src/widgets/DecoratedOptionWidget.js","../src/widgets/MenuOptionWidget.js","../src/widgets/MenuSectionOptionWidget.js","../src/widgets/MenuSelectWidget.js","../src/widgets/DropdownWidget.js","../src/widgets/RadioOptionWidget.js","../src/widgets/RadioSelectWidget.js","../src/widgets/MultioptionWidget.js","../src/widgets/MultiselectWidget.js","../src/widgets/CheckboxMultioptionWidget.js","../src/widgets/CheckboxMultiselectWidget.js","../src/widgets/ProgressBarWidget.js","../src/widgets/InputWidget.js","../src/widgets/HiddenInputWidget.js","../src/widgets/ButtonInputWidget.js","../src/widgets/CheckboxInputWidget.js","../src/widgets/DropdownInputWidget.js","../src/widgets/RadioInputWidget.js","../src/widgets/RadioSelectInputWidget.js","../src/widgets/CheckboxMultiselectInputWidget.js","../src/widgets/TextInputWidget.js","../src/widgets/SearchInputWidget.js","../src/widgets/MultilineTextInputWidget.js","../src/widgets/ComboBoxInputWidget.js","../src/layouts/FieldLayout.js","../src/layouts/ActionFieldLayout.js","../src/layouts/FieldsetLayout.js","../src/layouts/FormLayout.js","../src/layouts/PanelLayout.js","../src/layouts/HorizontalLayout.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-core.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * Namespace for all classes, static methods and static properties.\n *\n * @class\n * @singleton\n */\nOO.ui = {};\n\nOO.ui.bind = $.proxy;\n\n/**\n * @property {Object}\n */\nOO.ui.Keys = {\n\tUNDEFINED: 0,\n\tBACKSPACE: 8,\n\tDELETE: 46,\n\tLEFT: 37,\n\tRIGHT: 39,\n\tUP: 38,\n\tDOWN: 40,\n\tENTER: 13,\n\tEND: 35,\n\tHOME: 36,\n\tTAB: 9,\n\tPAGEUP: 33,\n\tPAGEDOWN: 34,\n\tESCAPE: 27,\n\tSHIFT: 16,\n\tSPACE: 32\n};\n\n/**\n * Constants for MouseEvent.which\n *\n * @property {Object}\n */\nOO.ui.MouseButtons = {\n\tLEFT: 1,\n\tMIDDLE: 2,\n\tRIGHT: 3\n};\n\n/**\n * @property {number}\n * @private\n */\nOO.ui.elementId = 0;\n\n/**\n * Generate a unique ID for element\n *\n * @return {string} ID\n */\nOO.ui.generateElementId = function () {\n\tOO.ui.elementId++;\n\treturn 'oojsui-' + OO.ui.elementId;\n};\n\n/**\n * Check if an element is focusable.\n * Inspired by :focusable in jQueryUI v1.11.4 - 2015-04-14\n *\n * @param {jQuery} $element Element to test\n * @return {boolean} Element is focusable\n */\nOO.ui.isFocusableElement = function ( $element ) {\n\tvar nodeName,\n\t\telement = $element[ 0 ];\n\n\t// Anything disabled is not focusable\n\tif ( element.disabled ) {\n\t\treturn false;\n\t}\n\n\t// Check if the element is visible\n\tif ( !(\n\t\t// This is quicker than calling $element.is( ':visible' )\n\t\t$.expr.pseudos.visible( element ) &&\n\t\t// Check that all parents are visible\n\t\t!$element.parents().addBack().filter( function () {\n\t\t\treturn $.css( this, 'visibility' ) === 'hidden';\n\t\t} ).length\n\t) ) {\n\t\treturn false;\n\t}\n\n\t// Check if the element is ContentEditable, which is the string 'true'\n\tif ( element.contentEditable === 'true' ) {\n\t\treturn true;\n\t}\n\n\t// Anything with a non-negative numeric tabIndex is focusable.\n\t// Use .prop to avoid browser bugs\n\tif ( $element.prop( 'tabIndex' ) >= 0 ) {\n\t\treturn true;\n\t}\n\n\t// Some element types are naturally focusable\n\t// (indexOf is much faster than regex in Chrome and about the\n\t// same in FF: https://jsperf.com/regex-vs-indexof-array2)\n\tnodeName = element.nodeName.toLowerCase();\n\tif ( [ 'input', 'select', 'textarea', 'button', 'object' ].indexOf( nodeName ) !== -1 ) {\n\t\treturn true;\n\t}\n\n\t// Links and areas are focusable if they have an href\n\tif ( ( nodeName === 'a' || nodeName === 'area' ) && $element.attr( 'href' ) !== undefined ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Find a focusable child\n *\n * @param {jQuery} $container Container to search in\n * @param {boolean} [backwards] Search backwards\n * @return {jQuery} Focusable child, or an empty jQuery object if none found\n */\nOO.ui.findFocusable = function ( $container, backwards ) {\n\tvar $focusable = $( [] ),\n\t\t// $focusableCandidates is a superset of things that\n\t\t// could get matched by isFocusableElement\n\t\t$focusableCandidates = $container\n\t\t\t.find( 'input, select, textarea, button, object, a, area, [contenteditable], [tabindex]' );\n\n\tif ( backwards ) {\n\t\t$focusableCandidates = Array.prototype.reverse.call( $focusableCandidates );\n\t}\n\n\t$focusableCandidates.each( function () {\n\t\tvar $this = $( this );\n\t\tif ( OO.ui.isFocusableElement( $this ) ) {\n\t\t\t$focusable = $this;\n\t\t\treturn false;\n\t\t}\n\t} );\n\treturn $focusable;\n};\n\n/**\n * Get the user's language and any fallback languages.\n *\n * These language codes are used to localize user interface elements in the user's language.\n *\n * In environments that provide a localization system, this function should be overridden to\n * return the user's language(s). The default implementation returns English (en) only.\n *\n * @return {string[]} Language codes, in descending order of priority\n */\nOO.ui.getUserLanguages = function () {\n\treturn [ 'en' ];\n};\n\n/**\n * Get a value in an object keyed by language code.\n *\n * @param {Object.<string,Mixed>} obj Object keyed by language code\n * @param {string|null} [lang] Language code, if omitted or null defaults to any user language\n * @param {string} [fallback] Fallback code, used if no matching language can be found\n * @return {Mixed} Local value\n */\nOO.ui.getLocalValue = function ( obj, lang, fallback ) {\n\tvar i, len, langs;\n\n\t// Requested language\n\tif ( obj[ lang ] ) {\n\t\treturn obj[ lang ];\n\t}\n\t// Known user language\n\tlangs = OO.ui.getUserLanguages();\n\tfor ( i = 0, len = langs.length; i < len; i++ ) {\n\t\tlang = langs[ i ];\n\t\tif ( obj[ lang ] ) {\n\t\t\treturn obj[ lang ];\n\t\t}\n\t}\n\t// Fallback language\n\tif ( obj[ fallback ] ) {\n\t\treturn obj[ fallback ];\n\t}\n\t// First existing language\n\tfor ( lang in obj ) {\n\t\treturn obj[ lang ];\n\t}\n\n\treturn undefined;\n};\n\n/**\n * Check if a node is contained within another node\n *\n * Similar to jQuery#contains except a list of containers can be supplied\n * and a boolean argument allows you to include the container in the match list\n *\n * @param {HTMLElement|HTMLElement[]} containers Container node(s) to search in\n * @param {HTMLElement} contained Node to find\n * @param {boolean} [matchContainers] Include the container(s) in the list of nodes to match, otherwise only match descendants\n * @return {boolean} The node is in the list of target nodes\n */\nOO.ui.contains = function ( containers, contained, matchContainers ) {\n\tvar i;\n\tif ( !Array.isArray( containers ) ) {\n\t\tcontainers = [ containers ];\n\t}\n\tfor ( i = containers.length - 1; i >= 0; i-- ) {\n\t\tif ( ( matchContainers && contained === containers[ i ] ) || $.contains( containers[ i ], contained ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/**\n * Return a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n *\n * Ported from: http://underscorejs.org/underscore.js\n *\n * @param {Function} func Function to debounce\n * @param {number} [wait=0] Wait period in milliseconds\n * @param {boolean} [immediate] Trigger on leading edge\n * @return {Function} Debounced function\n */\nOO.ui.debounce = function ( func, wait, immediate ) {\n\tvar timeout;\n\treturn function () {\n\t\tvar context = this,\n\t\t\targs = arguments,\n\t\t\tlater = function () {\n\t\t\t\ttimeout = null;\n\t\t\t\tif ( !immediate ) {\n\t\t\t\t\tfunc.apply( context, args );\n\t\t\t\t}\n\t\t\t};\n\t\tif ( immediate && !timeout ) {\n\t\t\tfunc.apply( context, args );\n\t\t}\n\t\tif ( !timeout || wait ) {\n\t\t\tclearTimeout( timeout );\n\t\t\ttimeout = setTimeout( later, wait );\n\t\t}\n\t};\n};\n\n/**\n * Puts a console warning with provided message.\n *\n * @param {string} message Message\n */\nOO.ui.warnDeprecation = function ( message ) {\n\tif ( OO.getProp( window, 'console', 'warn' ) !== undefined ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn( message );\n\t}\n};\n\n/**\n * Returns a function, that, when invoked, will only be triggered at most once\n * during a given window of time. If called again during that window, it will\n * wait until the window ends and then trigger itself again.\n *\n * As it's not knowable to the caller whether the function will actually run\n * when the wrapper is called, return values from the function are entirely\n * discarded.\n *\n * @param {Function} func Function to throttle\n * @param {number} wait Throttle window length, in milliseconds\n * @return {Function} Throttled function\n */\nOO.ui.throttle = function ( func, wait ) {\n\tvar context, args, timeout,\n\t\tprevious = 0,\n\t\trun = function () {\n\t\t\ttimeout = null;\n\t\t\tprevious = OO.ui.now();\n\t\t\tfunc.apply( context, args );\n\t\t};\n\treturn function () {\n\t\t// Check how long it's been since the last time the function was\n\t\t// called, and whether it's more or less than the requested throttle\n\t\t// period. If it's less, run the function immediately. If it's more,\n\t\t// set a timeout for the remaining time -- but don't replace an\n\t\t// existing timeout, since that'd indefinitely prolong the wait.\n\t\tvar remaining = wait - ( OO.ui.now() - previous );\n\t\tcontext = this;\n\t\targs = arguments;\n\t\tif ( remaining <= 0 ) {\n\t\t\t// Note: unless wait was ridiculously large, this means we'll\n\t\t\t// automatically run the first time the function was called in a\n\t\t\t// given period. (If you provide a wait period larger than the\n\t\t\t// current Unix timestamp, you *deserve* unexpected behavior.)\n\t\t\tclearTimeout( timeout );\n\t\t\trun();\n\t\t} else if ( !timeout ) {\n\t\t\ttimeout = setTimeout( run, remaining );\n\t\t}\n\t};\n};\n\n/**\n * A (possibly faster) way to get the current timestamp as an integer\n *\n * @return {number} Current timestamp, in milliseconds since the Unix epoch\n */\nOO.ui.now = Date.now || function () {\n\treturn new Date().getTime();\n};\n\n/**\n * Reconstitute a JavaScript object corresponding to a widget created by\n * the PHP implementation.\n *\n * This is an alias for `OO.ui.Element.static.infuse()`.\n *\n * @param {string|HTMLElement|jQuery} idOrNode\n *   A DOM id (if a string) or node for the widget to infuse.\n * @return {OO.ui.Element}\n *   The `OO.ui.Element` corresponding to this (infusable) document node.\n */\nOO.ui.infuse = function ( idOrNode ) {\n\treturn OO.ui.Element.static.infuse( idOrNode );\n};\n\n( function () {\n\t/**\n\t * Message store for the default implementation of OO.ui.msg\n\t *\n\t * Environments that provide a localization system should not use this, but should override\n\t * OO.ui.msg altogether.\n\t *\n\t * @private\n\t */\n\tvar messages = {\n\t\t// Tool tip for a button that moves items in a list down one place\n\t\t'ooui-outline-control-move-down': 'Move item down',\n\t\t// Tool tip for a button that moves items in a list up one place\n\t\t'ooui-outline-control-move-up': 'Move item up',\n\t\t// Tool tip for a button that removes items from a list\n\t\t'ooui-outline-control-remove': 'Remove item',\n\t\t// Label for the toolbar group that contains a list of all other available tools\n\t\t'ooui-toolbar-more': 'More',\n\t\t// Label for the fake tool that expands the full list of tools in a toolbar group\n\t\t'ooui-toolgroup-expand': 'More',\n\t\t// Label for the fake tool that collapses the full list of tools in a toolbar group\n\t\t'ooui-toolgroup-collapse': 'Fewer',\n\t\t// Default label for the tooltip for the button that removes a tag item\n\t\t'ooui-item-remove': 'Remove',\n\t\t// Default label for the accept button of a confirmation dialog\n\t\t'ooui-dialog-message-accept': 'OK',\n\t\t// Default label for the reject button of a confirmation dialog\n\t\t'ooui-dialog-message-reject': 'Cancel',\n\t\t// Title for process dialog error description\n\t\t'ooui-dialog-process-error': 'Something went wrong',\n\t\t// Label for process dialog dismiss error button, visible when describing errors\n\t\t'ooui-dialog-process-dismiss': 'Dismiss',\n\t\t// Label for process dialog retry action button, visible when describing only recoverable errors\n\t\t'ooui-dialog-process-retry': 'Try again',\n\t\t// Label for process dialog retry action button, visible when describing only warnings\n\t\t'ooui-dialog-process-continue': 'Continue',\n\t\t// Label for the file selection widget's select file button\n\t\t'ooui-selectfile-button-select': 'Select a file',\n\t\t// Label for the file selection widget if file selection is not supported\n\t\t'ooui-selectfile-not-supported': 'File selection is not supported',\n\t\t// Label for the file selection widget when no file is currently selected\n\t\t'ooui-selectfile-placeholder': 'No file is selected',\n\t\t// Label for the file selection widget's drop target\n\t\t'ooui-selectfile-dragdrop-placeholder': 'Drop file here'\n\t};\n\n\t/**\n\t * Get a localized message.\n\t *\n\t * After the message key, message parameters may optionally be passed. In the default implementation,\n\t * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.\n\t * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as\n\t * they support unnamed, ordered message parameters.\n\t *\n\t * In environments that provide a localization system, this function should be overridden to\n\t * return the message translated in the user's language. The default implementation always returns\n\t * English messages. An example of doing this with [jQuery.i18n](https://github.com/wikimedia/jquery.i18n)\n\t * follows.\n\t *\n\t *     @example\n\t *     var i, iLen, button,\n\t *         messagePath = 'oojs-ui/dist/i18n/',\n\t *         languages = [ $.i18n().locale, 'ur', 'en' ],\n\t *         languageMap = {};\n\t *\n\t *     for ( i = 0, iLen = languages.length; i < iLen; i++ ) {\n\t *         languageMap[ languages[ i ] ] = messagePath + languages[ i ].toLowerCase() + '.json';\n\t *     }\n\t *\n\t *     $.i18n().load( languageMap ).done( function() {\n\t *         // Replace the built-in `msg` only once we've loaded the internationalization.\n\t *         // OOjs UI uses `OO.ui.deferMsg` for all initially-loaded messages. So long as\n\t *         // you put off creating any widgets until this promise is complete, no English\n\t *         // will be displayed.\n\t *         OO.ui.msg = $.i18n;\n\t *\n\t *         // A button displaying \"OK\" in the default locale\n\t *         button = new OO.ui.ButtonWidget( {\n\t *             label: OO.ui.msg( 'ooui-dialog-message-accept' ),\n\t *             icon: 'check'\n\t *         } );\n\t *         $( 'body' ).append( button.$element );\n\t *\n\t *         // A button displaying \"OK\" in Urdu\n\t *         $.i18n().locale = 'ur';\n\t *         button = new OO.ui.ButtonWidget( {\n\t *             label: OO.ui.msg( 'ooui-dialog-message-accept' ),\n\t *             icon: 'check'\n\t *         } );\n\t *         $( 'body' ).append( button.$element );\n\t *     } );\n\t *\n\t * @param {string} key Message key\n\t * @param {...Mixed} [params] Message parameters\n\t * @return {string} Translated message with parameters substituted\n\t */\n\tOO.ui.msg = function ( key ) {\n\t\tvar message = messages[ key ],\n\t\t\tparams = Array.prototype.slice.call( arguments, 1 );\n\t\tif ( typeof message === 'string' ) {\n\t\t\t// Perform $1 substitution\n\t\t\tmessage = message.replace( /\\$(\\d+)/g, function ( unused, n ) {\n\t\t\t\tvar i = parseInt( n, 10 );\n\t\t\t\treturn params[ i - 1 ] !== undefined ? params[ i - 1 ] : '$' + n;\n\t\t\t} );\n\t\t} else {\n\t\t\t// Return placeholder if message not found\n\t\t\tmessage = '[' + key + ']';\n\t\t}\n\t\treturn message;\n\t};\n}() );\n\n/**\n * Package a message and arguments for deferred resolution.\n *\n * Use this when you are statically specifying a message and the message may not yet be present.\n *\n * @param {string} key Message key\n * @param {...Mixed} [params] Message parameters\n * @return {Function} Function that returns the resolved message when executed\n */\nOO.ui.deferMsg = function () {\n\tvar args = arguments;\n\treturn function () {\n\t\treturn OO.ui.msg.apply( OO.ui, args );\n\t};\n};\n\n/**\n * Resolve a message.\n *\n * If the message is a function it will be executed, otherwise it will pass through directly.\n *\n * @param {Function|string} msg Deferred message, or message text\n * @return {string} Resolved message\n */\nOO.ui.resolveMsg = function ( msg ) {\n\tif ( $.isFunction( msg ) ) {\n\t\treturn msg();\n\t}\n\treturn msg;\n};\n\n/**\n * @param {string} url\n * @return {boolean}\n */\nOO.ui.isSafeUrl = function ( url ) {\n\t// Keep this function in sync with php/Tag.php\n\tvar i, protocolWhitelist;\n\n\tfunction stringStartsWith( haystack, needle ) {\n\t\treturn haystack.substr( 0, needle.length ) === needle;\n\t}\n\n\tprotocolWhitelist = [\n\t\t'bitcoin', 'ftp', 'ftps', 'geo', 'git', 'gopher', 'http', 'https', 'irc', 'ircs',\n\t\t'magnet', 'mailto', 'mms', 'news', 'nntp', 'redis', 'sftp', 'sip', 'sips', 'sms', 'ssh',\n\t\t'svn', 'tel', 'telnet', 'urn', 'worldwind', 'xmpp'\n\t];\n\n\tif ( url === '' ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < protocolWhitelist.length; i++ ) {\n\t\tif ( stringStartsWith( url, protocolWhitelist[ i ] + ':' ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// This matches '//' too\n\tif ( stringStartsWith( url, '/' ) || stringStartsWith( url, './' ) ) {\n\t\treturn true;\n\t}\n\tif ( stringStartsWith( url, '?' ) || stringStartsWith( url, '#' ) ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Check if the user has a 'mobile' device.\n *\n * For our purposes this means the user is primarily using an\n * on-screen keyboard, touch input instead of a mouse and may\n * have a physically small display.\n *\n * It is left up to implementors to decide how to compute this\n * so the default implementation always returns false.\n *\n * @return {boolean} Use is on a mobile device\n */\nOO.ui.isMobile = function () {\n\treturn false;\n};\n","/*!\n * Mixin namespace.\n */\n\n/**\n * Namespace for OOjs UI mixins.\n *\n * Mixins are named according to the type of object they are intended to\n * be mixed in to.  For example, OO.ui.mixin.GroupElement is intended to be\n * mixed in to an instance of OO.ui.Element, and OO.ui.mixin.GroupWidget\n * is intended to be mixed in to an instance of OO.ui.Widget.\n *\n * @class\n * @singleton\n */\nOO.ui.mixin = {};\n","/**\n * Each Element represents a rendering in the DOM—a button or an icon, for example, or anything\n * that is visible to a user. Unlike {@link OO.ui.Widget widgets}, plain elements usually do not have events\n * connected to them and can't be interacted with.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added\n *  to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]\n *  for an example.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample\n * @cfg {string} [id] The HTML id attribute used in the rendered tag.\n * @cfg {string} [text] Text to insert\n * @cfg {Array} [content] An array of content elements to append (after #text).\n *  Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.\n *  Instances of OO.ui.Element will have their $element appended.\n * @cfg {jQuery} [$content] Content elements to append (after #text).\n * @cfg {jQuery} [$element] Wrapper element. Defaults to a new element with #getTagName.\n * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).\n *  Data can also be specified with the #setData method.\n */\nOO.ui.Element = function OoUiElement( config ) {\n\tif ( OO.ui.isDemo ) {\n\t\tthis.initialConfig = config;\n\t}\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$ = $;\n\tthis.elementId = null;\n\tthis.visible = true;\n\tthis.data = config.data;\n\tthis.$element = config.$element ||\n\t\t$( document.createElement( this.getTagName() ) );\n\tthis.elementGroup = null;\n\n\t// Initialization\n\tif ( Array.isArray( config.classes ) ) {\n\t\tthis.$element.addClass( config.classes.join( ' ' ) );\n\t}\n\tif ( config.id ) {\n\t\tthis.setElementId( config.id );\n\t}\n\tif ( config.text ) {\n\t\tthis.$element.text( config.text );\n\t}\n\tif ( config.content ) {\n\t\t// The `content` property treats plain strings as text; use an\n\t\t// HtmlSnippet to append HTML content.  `OO.ui.Element`s get their\n\t\t// appropriate $element appended.\n\t\tthis.$element.append( config.content.map( function ( v ) {\n\t\t\tif ( typeof v === 'string' ) {\n\t\t\t\t// Escape string so it is properly represented in HTML.\n\t\t\t\treturn document.createTextNode( v );\n\t\t\t} else if ( v instanceof OO.ui.HtmlSnippet ) {\n\t\t\t\t// Bypass escaping.\n\t\t\t\treturn v.toString();\n\t\t\t} else if ( v instanceof OO.ui.Element ) {\n\t\t\t\treturn v.$element;\n\t\t\t}\n\t\t\treturn v;\n\t\t} ) );\n\t}\n\tif ( config.$content ) {\n\t\t// The `$content` property treats plain strings as HTML.\n\t\tthis.$element.append( config.$content );\n\t}\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.Element );\n\n/* Static Properties */\n\n/**\n * The name of the HTML tag used by the element.\n *\n * The static value may be ignored if the #getTagName method is overridden.\n *\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Element.static.tagName = 'div';\n\n/* Static Methods */\n\n/**\n * Reconstitute a JavaScript object corresponding to a widget created\n * by the PHP implementation.\n *\n * @param {string|HTMLElement|jQuery} idOrNode\n *   A DOM id (if a string) or node for the widget to infuse.\n * @return {OO.ui.Element}\n *   The `OO.ui.Element` corresponding to this (infusable) document node.\n *   For `Tag` objects emitted on the HTML side (used occasionally for content)\n *   the value returned is a newly-created Element wrapping around the existing\n *   DOM node.\n */\nOO.ui.Element.static.infuse = function ( idOrNode ) {\n\tvar obj = OO.ui.Element.static.unsafeInfuse( idOrNode, false );\n\t// Verify that the type matches up.\n\t// FIXME: uncomment after T89721 is fixed, see T90929.\n\t/*\n\tif ( !( obj instanceof this['class'] ) ) {\n\t\tthrow new Error( 'Infusion type mismatch!' );\n\t}\n\t*/\n\treturn obj;\n};\n\n/**\n * Implementation helper for `infuse`; skips the type check and has an\n * extra property so that only the top-level invocation touches the DOM.\n *\n * @private\n * @param {string|HTMLElement|jQuery} idOrNode\n * @param {jQuery.Promise|boolean} domPromise A promise that will be resolved\n *     when the top-level widget of this infusion is inserted into DOM,\n *     replacing the original node; or false for top-level invocation.\n * @return {OO.ui.Element}\n */\nOO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {\n\t// look for a cached result of a previous infusion.\n\tvar id, $elem, error, data, cls, parts, parent, obj, top, state, infusedChildren;\n\tif ( typeof idOrNode === 'string' ) {\n\t\tid = idOrNode;\n\t\t$elem = $( document.getElementById( id ) );\n\t} else {\n\t\t$elem = $( idOrNode );\n\t\tid = $elem.attr( 'id' );\n\t}\n\tif ( !$elem.length ) {\n\t\tif ( typeof idOrNode === 'string' ) {\n\t\t\terror = 'Widget not found: ' + idOrNode;\n\t\t} else if ( idOrNode && idOrNode.selector ) {\n\t\t\terror = 'Widget not found: ' + idOrNode.selector;\n\t\t} else {\n\t\t\terror = 'Widget not found';\n\t\t}\n\t\tthrow new Error( error );\n\t}\n\tif ( $elem[ 0 ].oouiInfused ) {\n\t\t$elem = $elem[ 0 ].oouiInfused;\n\t}\n\tdata = $elem.data( 'ooui-infused' );\n\tif ( data ) {\n\t\t// cached!\n\t\tif ( data === true ) {\n\t\t\tthrow new Error( 'Circular dependency! ' + id );\n\t\t}\n\t\tif ( domPromise ) {\n\t\t\t// pick up dynamic state, like focus, value of form inputs, scroll position, etc.\n\t\t\tstate = data.constructor.static.gatherPreInfuseState( $elem, data );\n\t\t\t// restore dynamic state after the new element is re-inserted into DOM under infused parent\n\t\t\tdomPromise.done( data.restorePreInfuseState.bind( data, state ) );\n\t\t\tinfusedChildren = $elem.data( 'ooui-infused-children' );\n\t\t\tif ( infusedChildren && infusedChildren.length ) {\n\t\t\t\tinfusedChildren.forEach( function ( data ) {\n\t\t\t\t\tvar state = data.constructor.static.gatherPreInfuseState( $elem, data );\n\t\t\t\t\tdomPromise.done( data.restorePreInfuseState.bind( data, state ) );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\tdata = $elem.attr( 'data-ooui' );\n\tif ( !data ) {\n\t\tthrow new Error( 'No infusion data found: ' + id );\n\t}\n\ttry {\n\t\tdata = JSON.parse( data );\n\t} catch ( _ ) {\n\t\tdata = null;\n\t}\n\tif ( !( data && data._ ) ) {\n\t\tthrow new Error( 'No valid infusion data found: ' + id );\n\t}\n\tif ( data._ === 'Tag' ) {\n\t\t// Special case: this is a raw Tag; wrap existing node, don't rebuild.\n\t\treturn new OO.ui.Element( { $element: $elem } );\n\t}\n\tparts = data._.split( '.' );\n\tcls = OO.getProp.apply( OO, [ window ].concat( parts ) );\n\tif ( cls === undefined ) {\n\t\tthrow new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );\n\t}\n\n\t// Verify that we're creating an OO.ui.Element instance\n\tparent = cls.parent;\n\n\twhile ( parent !== undefined ) {\n\t\tif ( parent === OO.ui.Element ) {\n\t\t\t// Safe\n\t\t\tbreak;\n\t\t}\n\n\t\tparent = parent.parent;\n\t}\n\n\tif ( parent !== OO.ui.Element ) {\n\t\tthrow new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );\n\t}\n\n\tif ( domPromise === false ) {\n\t\ttop = $.Deferred();\n\t\tdomPromise = top.promise();\n\t}\n\t$elem.data( 'ooui-infused', true ); // prevent loops\n\tdata.id = id; // implicit\n\tinfusedChildren = [];\n\tdata = OO.copy( data, null, function deserialize( value ) {\n\t\tvar infused;\n\t\tif ( OO.isPlainObject( value ) ) {\n\t\t\tif ( value.tag ) {\n\t\t\t\tinfused = OO.ui.Element.static.unsafeInfuse( value.tag, domPromise );\n\t\t\t\tinfusedChildren.push( infused );\n\t\t\t\t// Flatten the structure\n\t\t\t\tinfusedChildren.push.apply( infusedChildren, infused.$element.data( 'ooui-infused-children' ) || [] );\n\t\t\t\tinfused.$element.removeData( 'ooui-infused-children' );\n\t\t\t\treturn infused;\n\t\t\t}\n\t\t\tif ( value.html !== undefined ) {\n\t\t\t\treturn new OO.ui.HtmlSnippet( value.html );\n\t\t\t}\n\t\t}\n\t} );\n\t// allow widgets to reuse parts of the DOM\n\tdata = cls.static.reusePreInfuseDOM( $elem[ 0 ], data );\n\t// pick up dynamic state, like focus, value of form inputs, scroll position, etc.\n\tstate = cls.static.gatherPreInfuseState( $elem[ 0 ], data );\n\t// rebuild widget\n\t// eslint-disable-next-line new-cap\n\tobj = new cls( data );\n\t// now replace old DOM with this new DOM.\n\tif ( top ) {\n\t\t// An efficient constructor might be able to reuse the entire DOM tree of the original element,\n\t\t// so only mutate the DOM if we need to.\n\t\tif ( $elem[ 0 ] !== obj.$element[ 0 ] ) {\n\t\t\t$elem.replaceWith( obj.$element );\n\t\t\t// This element is now gone from the DOM, but if anyone is holding a reference to it,\n\t\t\t// let's allow them to OO.ui.infuse() it and do what they expect, see T105828.\n\t\t\t// Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.\n\t\t\t$elem[ 0 ].oouiInfused = obj.$element;\n\t\t}\n\t\ttop.resolve();\n\t}\n\tobj.$element.data( 'ooui-infused', obj );\n\tobj.$element.data( 'ooui-infused-children', infusedChildren );\n\t// set the 'data-ooui' attribute so we can identify infused widgets\n\tobj.$element.attr( 'data-ooui', '' );\n\t// restore dynamic state after the new element is inserted into DOM\n\tdomPromise.done( obj.restorePreInfuseState.bind( obj, state ) );\n\treturn obj;\n};\n\n/**\n * Pick out parts of `node`'s DOM to be reused when infusing a widget.\n *\n * This method **must not** make any changes to the DOM, only find interesting pieces and add them\n * to `config` (which should then be returned). Actual DOM juggling should then be done by the\n * constructor, which will be given the enhanced config.\n *\n * @protected\n * @param {HTMLElement} node\n * @param {Object} config\n * @return {Object}\n */\nOO.ui.Element.static.reusePreInfuseDOM = function ( node, config ) {\n\treturn config;\n};\n\n/**\n * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of an HTML DOM node\n * (and its children) that represent an Element of the same class and the given configuration,\n * generated by the PHP implementation.\n *\n * This method is called just before `node` is detached from the DOM. The return value of this\n * function will be passed to #restorePreInfuseState after the newly created widget's #$element\n * is inserted into DOM to replace `node`.\n *\n * @protected\n * @param {HTMLElement} node\n * @param {Object} config\n * @return {Object}\n */\nOO.ui.Element.static.gatherPreInfuseState = function () {\n\treturn {};\n};\n\n/**\n * Get a jQuery function within a specific document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} context Context to bind the function to\n * @param {jQuery} [$iframe] HTML iframe element that contains the document, omit if document is\n *   not in an iframe\n * @return {Function} Bound jQuery function\n */\nOO.ui.Element.static.getJQuery = function ( context, $iframe ) {\n\tfunction wrapper( selector ) {\n\t\treturn $( selector, wrapper.context );\n\t}\n\n\twrapper.context = this.getDocument( context );\n\n\tif ( $iframe ) {\n\t\twrapper.$iframe = $iframe;\n\t}\n\n\treturn wrapper;\n};\n\n/**\n * Get the document of an element.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Object to get the document for\n * @return {HTMLDocument|null} Document object\n */\nOO.ui.Element.static.getDocument = function ( obj ) {\n\t// jQuery - selections created \"offscreen\" won't have a context, so .context isn't reliable\n\treturn ( obj[ 0 ] && obj[ 0 ].ownerDocument ) ||\n\t\t// Empty jQuery selections might have a context\n\t\tobj.context ||\n\t\t// HTMLElement\n\t\tobj.ownerDocument ||\n\t\t// Window\n\t\tobj.document ||\n\t\t// HTMLDocument\n\t\t( obj.nodeType === Node.DOCUMENT_NODE && obj ) ||\n\t\tnull;\n};\n\n/**\n * Get the window of an element or document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the window for\n * @return {Window} Window object\n */\nOO.ui.Element.static.getWindow = function ( obj ) {\n\tvar doc = this.getDocument( obj );\n\treturn doc.defaultView;\n};\n\n/**\n * Get the direction of an element or document.\n *\n * @static\n * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for\n * @return {string} Text direction, either 'ltr' or 'rtl'\n */\nOO.ui.Element.static.getDir = function ( obj ) {\n\tvar isDoc, isWin;\n\n\tif ( obj instanceof jQuery ) {\n\t\tobj = obj[ 0 ];\n\t}\n\tisDoc = obj.nodeType === Node.DOCUMENT_NODE;\n\tisWin = obj.document !== undefined;\n\tif ( isDoc || isWin ) {\n\t\tif ( isWin ) {\n\t\t\tobj = obj.document;\n\t\t}\n\t\tobj = obj.body;\n\t}\n\treturn $( obj ).css( 'direction' );\n};\n\n/**\n * Get the offset between two frames.\n *\n * TODO: Make this function not use recursion.\n *\n * @static\n * @param {Window} from Window of the child frame\n * @param {Window} [to=window] Window of the parent frame\n * @param {Object} [offset] Offset to start with, used internally\n * @return {Object} Offset object, containing left and top properties\n */\nOO.ui.Element.static.getFrameOffset = function ( from, to, offset ) {\n\tvar i, len, frames, frame, rect;\n\n\tif ( !to ) {\n\t\tto = window;\n\t}\n\tif ( !offset ) {\n\t\toffset = { top: 0, left: 0 };\n\t}\n\tif ( from.parent === from ) {\n\t\treturn offset;\n\t}\n\n\t// Get iframe element\n\tframes = from.parent.document.getElementsByTagName( 'iframe' );\n\tfor ( i = 0, len = frames.length; i < len; i++ ) {\n\t\tif ( frames[ i ].contentWindow === from ) {\n\t\t\tframe = frames[ i ];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Recursively accumulate offset values\n\tif ( frame ) {\n\t\trect = frame.getBoundingClientRect();\n\t\toffset.left += rect.left;\n\t\toffset.top += rect.top;\n\t\tif ( from !== to ) {\n\t\t\tthis.getFrameOffset( from.parent, offset );\n\t\t}\n\t}\n\treturn offset;\n};\n\n/**\n * Get the offset between two elements.\n *\n * The two elements may be in a different frame, but in that case the frame $element is in must\n * be contained in the frame $anchor is in.\n *\n * @static\n * @param {jQuery} $element Element whose position to get\n * @param {jQuery} $anchor Element to get $element's position relative to\n * @return {Object} Translated position coordinates, containing top and left properties\n */\nOO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {\n\tvar iframe, iframePos,\n\t\tpos = $element.offset(),\n\t\tanchorPos = $anchor.offset(),\n\t\telementDocument = this.getDocument( $element ),\n\t\tanchorDocument = this.getDocument( $anchor );\n\n\t// If $element isn't in the same document as $anchor, traverse up\n\twhile ( elementDocument !== anchorDocument ) {\n\t\tiframe = elementDocument.defaultView.frameElement;\n\t\tif ( !iframe ) {\n\t\t\tthrow new Error( '$element frame is not contained in $anchor frame' );\n\t\t}\n\t\tiframePos = $( iframe ).offset();\n\t\tpos.left += iframePos.left;\n\t\tpos.top += iframePos.top;\n\t\telementDocument = iframe.ownerDocument;\n\t}\n\tpos.left -= anchorPos.left;\n\tpos.top -= anchorPos.top;\n\treturn pos;\n};\n\n/**\n * Get element border sizes.\n *\n * @static\n * @param {HTMLElement} el Element to measure\n * @return {Object} Dimensions object with `top`, `left`, `bottom` and `right` properties\n */\nOO.ui.Element.static.getBorders = function ( el ) {\n\tvar doc = el.ownerDocument,\n\t\twin = doc.defaultView,\n\t\tstyle = win.getComputedStyle( el, null ),\n\t\t$el = $( el ),\n\t\ttop = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,\n\t\tleft = parseFloat( style ? style.borderLeftWidth : $el.css( 'borderLeftWidth' ) ) || 0,\n\t\tbottom = parseFloat( style ? style.borderBottomWidth : $el.css( 'borderBottomWidth' ) ) || 0,\n\t\tright = parseFloat( style ? style.borderRightWidth : $el.css( 'borderRightWidth' ) ) || 0;\n\n\treturn {\n\t\ttop: top,\n\t\tleft: left,\n\t\tbottom: bottom,\n\t\tright: right\n\t};\n};\n\n/**\n * Get dimensions of an element or window.\n *\n * @static\n * @param {HTMLElement|Window} el Element to measure\n * @return {Object} Dimensions object with `borders`, `scroll`, `scrollbar` and `rect` properties\n */\nOO.ui.Element.static.getDimensions = function ( el ) {\n\tvar $el, $win,\n\t\tdoc = el.ownerDocument || el.document,\n\t\twin = doc.defaultView;\n\n\tif ( win === el || el === doc.documentElement ) {\n\t\t$win = $( win );\n\t\treturn {\n\t\t\tborders: { top: 0, left: 0, bottom: 0, right: 0 },\n\t\t\tscroll: {\n\t\t\t\ttop: $win.scrollTop(),\n\t\t\t\tleft: $win.scrollLeft()\n\t\t\t},\n\t\t\tscrollbar: { right: 0, bottom: 0 },\n\t\t\trect: {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tbottom: $win.innerHeight(),\n\t\t\t\tright: $win.innerWidth()\n\t\t\t}\n\t\t};\n\t} else {\n\t\t$el = $( el );\n\t\treturn {\n\t\t\tborders: this.getBorders( el ),\n\t\t\tscroll: {\n\t\t\t\ttop: $el.scrollTop(),\n\t\t\t\tleft: $el.scrollLeft()\n\t\t\t},\n\t\t\tscrollbar: {\n\t\t\t\tright: $el.innerWidth() - el.clientWidth,\n\t\t\t\tbottom: $el.innerHeight() - el.clientHeight\n\t\t\t},\n\t\t\trect: el.getBoundingClientRect()\n\t\t};\n\t}\n};\n\n/**\n * Get the number of pixels that an element's content is scrolled to the left.\n *\n * Adapted from <https://github.com/othree/jquery.rtl-scroll-type>.\n * Original code copyright 2012 Wei-Ko Kao, licensed under the MIT License.\n *\n * This function smooths out browser inconsistencies (nicely described in the README at\n * <https://github.com/othree/jquery.rtl-scroll-type>) and produces a result consistent\n * with Firefox's 'scrollLeft', which seems the sanest.\n *\n * @static\n * @method\n * @param {HTMLElement|Window} el Element to measure\n * @return {number} Scroll position from the left.\n *  If the element's direction is LTR, this is a positive number between `0` (initial scroll position)\n *  and `el.scrollWidth - el.clientWidth` (furthest possible scroll position).\n *  If the element's direction is RTL, this is a negative number between `0` (initial scroll position)\n *  and `-el.scrollWidth + el.clientWidth` (furthest possible scroll position).\n */\nOO.ui.Element.static.getScrollLeft = ( function () {\n\tvar rtlScrollType = null;\n\n\tfunction test() {\n\t\tvar $definer = $( '<div dir=\"rtl\" style=\"font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll\">A</div>' ),\n\t\t\tdefiner = $definer[ 0 ];\n\n\t\t$definer.appendTo( 'body' );\n\t\tif ( definer.scrollLeft > 0 ) {\n\t\t\t// Safari, Chrome\n\t\t\trtlScrollType = 'default';\n\t\t} else {\n\t\t\tdefiner.scrollLeft = 1;\n\t\t\tif ( definer.scrollLeft === 0 ) {\n\t\t\t\t// Firefox, old Opera\n\t\t\t\trtlScrollType = 'negative';\n\t\t\t} else {\n\t\t\t\t// Internet Explorer, Edge\n\t\t\t\trtlScrollType = 'reverse';\n\t\t\t}\n\t\t}\n\t\t$definer.remove();\n\t}\n\n\treturn function getScrollLeft( el ) {\n\t\tvar isRoot = el.window === el ||\n\t\t\t\tel === el.ownerDocument.body ||\n\t\t\t\tel === el.ownerDocument.documentElement,\n\t\t\tscrollLeft = isRoot ? $( window ).scrollLeft() : el.scrollLeft,\n\t\t\t// All browsers use the correct scroll type ('negative') on the root, so don't\n\t\t\t// do any fixups when looking at the root element\n\t\t\tdirection = isRoot ? 'ltr' : $( el ).css( 'direction' );\n\n\t\tif ( direction === 'rtl' ) {\n\t\t\tif ( rtlScrollType === null ) {\n\t\t\t\ttest();\n\t\t\t}\n\t\t\tif ( rtlScrollType === 'reverse' ) {\n\t\t\t\tscrollLeft = -scrollLeft;\n\t\t\t} else if ( rtlScrollType === 'default' ) {\n\t\t\t\tscrollLeft = scrollLeft - el.scrollWidth + el.clientWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn scrollLeft;\n\t};\n}() );\n\n/**\n * Get the root scrollable element of given element's document.\n *\n * On Blink-based browsers (Chrome etc.), `document.documentElement` can't be used to get or set\n * the scrollTop property; instead we have to use `document.body`. Changing and testing the value\n * lets us use 'body' or 'documentElement' based on what is working.\n *\n * https://code.google.com/p/chromium/issues/detail?id=303131\n *\n * @static\n * @param {HTMLElement} el Element to find root scrollable parent for\n * @return {HTMLElement} Scrollable parent, `document.body` or `document.documentElement`\n *     depending on browser\n */\nOO.ui.Element.static.getRootScrollableElement = function ( el ) {\n\tvar scrollTop, body;\n\n\tif ( OO.ui.scrollableElement === undefined ) {\n\t\tbody = el.ownerDocument.body;\n\t\tscrollTop = body.scrollTop;\n\t\tbody.scrollTop = 1;\n\n\t\t// In some browsers (observed in Chrome 56 on Linux Mint 18.1),\n\t\t// body.scrollTop doesn't become exactly 1, but a fractional value like 0.76\n\t\tif ( Math.round( body.scrollTop ) === 1 ) {\n\t\t\tbody.scrollTop = scrollTop;\n\t\t\tOO.ui.scrollableElement = 'body';\n\t\t} else {\n\t\t\tOO.ui.scrollableElement = 'documentElement';\n\t\t}\n\t}\n\n\treturn el.ownerDocument[ OO.ui.scrollableElement ];\n};\n\n/**\n * Get closest scrollable container.\n *\n * Traverses up until either a scrollable element or the root is reached, in which case the root\n * scrollable element will be returned (see #getRootScrollableElement).\n *\n * @static\n * @param {HTMLElement} el Element to find scrollable container for\n * @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either\n * @return {HTMLElement} Closest scrollable container\n */\nOO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {\n\tvar i, val,\n\t\t// Browsers do not correctly return the computed value of 'overflow' when 'overflow-x' and\n\t\t// 'overflow-y' have different values, so we need to check the separate properties.\n\t\tprops = [ 'overflow-x', 'overflow-y' ],\n\t\t$parent = $( el ).parent();\n\n\tif ( dimension === 'x' || dimension === 'y' ) {\n\t\tprops = [ 'overflow-' + dimension ];\n\t}\n\n\t// Special case for the document root (which doesn't really have any scrollable container, since\n\t// it is the ultimate scrollable container, but this is probably saner than null or exception)\n\tif ( $( el ).is( 'html, body' ) ) {\n\t\treturn this.getRootScrollableElement( el );\n\t}\n\n\twhile ( $parent.length ) {\n\t\tif ( $parent[ 0 ] === this.getRootScrollableElement( el ) ) {\n\t\t\treturn $parent[ 0 ];\n\t\t}\n\t\ti = props.length;\n\t\twhile ( i-- ) {\n\t\t\tval = $parent.css( props[ i ] );\n\t\t\t// We assume that elements with 'overflow' (in any direction) set to 'hidden' will never be\n\t\t\t// scrolled in that direction, but they can actually be scrolled programatically. The user can\n\t\t\t// unintentionally perform a scroll in such case even if the application doesn't scroll\n\t\t\t// programatically, e.g. when jumping to an anchor, or when using built-in find functionality.\n\t\t\t// This could cause funny issues...\n\t\t\tif ( val === 'auto' || val === 'scroll' ) {\n\t\t\t\treturn $parent[ 0 ];\n\t\t\t}\n\t\t}\n\t\t$parent = $parent.parent();\n\t}\n\t// The element is unattached... return something mostly sane\n\treturn this.getRootScrollableElement( el );\n};\n\n/**\n * Scroll element into view.\n *\n * @static\n * @param {HTMLElement} el Element to scroll into view\n * @param {Object} [config] Configuration options\n * @param {string} [config.duration='fast'] jQuery animation duration value\n * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit\n *  to scroll in both directions\n * @return {jQuery.Promise} Promise which resolves when the scroll is complete\n */\nOO.ui.Element.static.scrollIntoView = function ( el, config ) {\n\tvar position, animations, container, $container, elementDimensions, containerDimensions, $window,\n\t\tdeferred = $.Deferred();\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\tanimations = {};\n\tcontainer = this.getClosestScrollableContainer( el, config.direction );\n\t$container = $( container );\n\telementDimensions = this.getDimensions( el );\n\tcontainerDimensions = this.getDimensions( container );\n\t$window = $( this.getWindow( el ) );\n\n\t// Compute the element's position relative to the container\n\tif ( $container.is( 'html, body' ) ) {\n\t\t// If the scrollable container is the root, this is easy\n\t\tposition = {\n\t\t\ttop: elementDimensions.rect.top,\n\t\t\tbottom: $window.innerHeight() - elementDimensions.rect.bottom,\n\t\t\tleft: elementDimensions.rect.left,\n\t\t\tright: $window.innerWidth() - elementDimensions.rect.right\n\t\t};\n\t} else {\n\t\t// Otherwise, we have to subtract el's coordinates from container's coordinates\n\t\tposition = {\n\t\t\ttop: elementDimensions.rect.top - ( containerDimensions.rect.top + containerDimensions.borders.top ),\n\t\t\tbottom: containerDimensions.rect.bottom - containerDimensions.borders.bottom - containerDimensions.scrollbar.bottom - elementDimensions.rect.bottom,\n\t\t\tleft: elementDimensions.rect.left - ( containerDimensions.rect.left + containerDimensions.borders.left ),\n\t\t\tright: containerDimensions.rect.right - containerDimensions.borders.right - containerDimensions.scrollbar.right - elementDimensions.rect.right\n\t\t};\n\t}\n\n\tif ( !config.direction || config.direction === 'y' ) {\n\t\tif ( position.top < 0 ) {\n\t\t\tanimations.scrollTop = containerDimensions.scroll.top + position.top;\n\t\t} else if ( position.top > 0 && position.bottom < 0 ) {\n\t\t\tanimations.scrollTop = containerDimensions.scroll.top + Math.min( position.top, -position.bottom );\n\t\t}\n\t}\n\tif ( !config.direction || config.direction === 'x' ) {\n\t\tif ( position.left < 0 ) {\n\t\t\tanimations.scrollLeft = containerDimensions.scroll.left + position.left;\n\t\t} else if ( position.left > 0 && position.right < 0 ) {\n\t\t\tanimations.scrollLeft = containerDimensions.scroll.left + Math.min( position.left, -position.right );\n\t\t}\n\t}\n\tif ( !$.isEmptyObject( animations ) ) {\n\t\t$container.stop( true ).animate( animations, config.duration === undefined ? 'fast' : config.duration );\n\t\t$container.queue( function ( next ) {\n\t\t\tdeferred.resolve();\n\t\t\tnext();\n\t\t} );\n\t} else {\n\t\tdeferred.resolve();\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Force the browser to reconsider whether it really needs to render scrollbars inside the element\n * and reserve space for them, because it probably doesn't.\n *\n * Workaround primarily for <https://code.google.com/p/chromium/issues/detail?id=387290>, but also\n * similar bugs in other browsers. \"Just\" forcing a reflow is not sufficient in all cases, we need\n * to first actually detach (or hide, but detaching is simpler) all children, *then* force a reflow,\n * and then reattach (or show) them back.\n *\n * @static\n * @param {HTMLElement} el Element to reconsider the scrollbars on\n */\nOO.ui.Element.static.reconsiderScrollbars = function ( el ) {\n\tvar i, len, scrollLeft, scrollTop, nodes = [];\n\t// Save scroll position\n\tscrollLeft = el.scrollLeft;\n\tscrollTop = el.scrollTop;\n\t// Detach all children\n\twhile ( el.firstChild ) {\n\t\tnodes.push( el.firstChild );\n\t\tel.removeChild( el.firstChild );\n\t}\n\t// Force reflow\n\tvoid el.offsetHeight;\n\t// Reattach all children\n\tfor ( i = 0, len = nodes.length; i < len; i++ ) {\n\t\tel.appendChild( nodes[ i ] );\n\t}\n\t// Restore scroll position (no-op if scrollbars disappeared)\n\tel.scrollLeft = scrollLeft;\n\tel.scrollTop = scrollTop;\n};\n\n/* Methods */\n\n/**\n * Toggle visibility of an element.\n *\n * @param {boolean} [show] Make element visible, omit to toggle visibility\n * @fires visible\n * @chainable\n */\nOO.ui.Element.prototype.toggle = function ( show ) {\n\tshow = show === undefined ? !this.visible : !!show;\n\n\tif ( show !== this.isVisible() ) {\n\t\tthis.visible = show;\n\t\tthis.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );\n\t\tthis.emit( 'toggle', show );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if element is visible.\n *\n * @return {boolean} element is visible\n */\nOO.ui.Element.prototype.isVisible = function () {\n\treturn this.visible;\n};\n\n/**\n * Get element data.\n *\n * @return {Mixed} Element data\n */\nOO.ui.Element.prototype.getData = function () {\n\treturn this.data;\n};\n\n/**\n * Set element data.\n *\n * @param {Mixed} data Element data\n * @chainable\n */\nOO.ui.Element.prototype.setData = function ( data ) {\n\tthis.data = data;\n\treturn this;\n};\n\n/**\n * Set the element has an 'id' attribute.\n *\n * @param {string} id\n * @chainable\n */\nOO.ui.Element.prototype.setElementId = function ( id ) {\n\tthis.elementId = id;\n\tthis.$element.attr( 'id', id );\n\treturn this;\n};\n\n/**\n * Ensure that the element has an 'id' attribute, setting it to an unique value if it's missing,\n * and return its value.\n *\n * @return {string}\n */\nOO.ui.Element.prototype.getElementId = function () {\n\tif ( this.elementId === null ) {\n\t\tthis.setElementId( OO.ui.generateElementId() );\n\t}\n\treturn this.elementId;\n};\n\n/**\n * Check if element supports one or more methods.\n *\n * @param {string|string[]} methods Method or list of methods to check\n * @return {boolean} All methods are supported\n */\nOO.ui.Element.prototype.supports = function ( methods ) {\n\tvar i, len,\n\t\tsupport = 0;\n\n\tmethods = Array.isArray( methods ) ? methods : [ methods ];\n\tfor ( i = 0, len = methods.length; i < len; i++ ) {\n\t\tif ( $.isFunction( this[ methods[ i ] ] ) ) {\n\t\t\tsupport++;\n\t\t}\n\t}\n\n\treturn methods.length === support;\n};\n\n/**\n * Update the theme-provided classes.\n *\n * @localdoc This is called in element mixins and widget classes any time state changes.\n *   Updating is debounced, minimizing overhead of changing multiple attributes and\n *   guaranteeing that theme updates do not occur within an element's constructor\n */\nOO.ui.Element.prototype.updateThemeClasses = function () {\n\tOO.ui.theme.queueUpdateElementClasses( this );\n};\n\n/**\n * Get the HTML tag name.\n *\n * Override this method to base the result on instance information.\n *\n * @return {string} HTML tag name\n */\nOO.ui.Element.prototype.getTagName = function () {\n\treturn this.constructor.static.tagName;\n};\n\n/**\n * Check if the element is attached to the DOM\n *\n * @return {boolean} The element is attached to the DOM\n */\nOO.ui.Element.prototype.isElementAttached = function () {\n\treturn $.contains( this.getElementDocument(), this.$element[ 0 ] );\n};\n\n/**\n * Get the DOM document.\n *\n * @return {HTMLDocument} Document object\n */\nOO.ui.Element.prototype.getElementDocument = function () {\n\t// Don't cache this in other ways either because subclasses could can change this.$element\n\treturn OO.ui.Element.static.getDocument( this.$element );\n};\n\n/**\n * Get the DOM window.\n *\n * @return {Window} Window object\n */\nOO.ui.Element.prototype.getElementWindow = function () {\n\treturn OO.ui.Element.static.getWindow( this.$element );\n};\n\n/**\n * Get closest scrollable container.\n *\n * @return {HTMLElement} Closest scrollable container\n */\nOO.ui.Element.prototype.getClosestScrollableElementContainer = function () {\n\treturn OO.ui.Element.static.getClosestScrollableContainer( this.$element[ 0 ] );\n};\n\n/**\n * Get group element is in.\n *\n * @return {OO.ui.mixin.GroupElement|null} Group element, null if none\n */\nOO.ui.Element.prototype.getElementGroup = function () {\n\treturn this.elementGroup;\n};\n\n/**\n * Set group element is in.\n *\n * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none\n * @chainable\n */\nOO.ui.Element.prototype.setElementGroup = function ( group ) {\n\tthis.elementGroup = group;\n\treturn this;\n};\n\n/**\n * Scroll element into view.\n *\n * @param {Object} [config] Configuration options\n * @return {jQuery.Promise} Promise which resolves when the scroll is complete\n */\nOO.ui.Element.prototype.scrollElementIntoView = function ( config ) {\n\tif (\n\t\t!this.isElementAttached() ||\n\t\t!this.isVisible() ||\n\t\t( this.getElementGroup() && !this.getElementGroup().isVisible() )\n\t) {\n\t\treturn $.Deferred().resolve();\n\t}\n\treturn OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );\n};\n\n/**\n * Restore the pre-infusion dynamic state for this widget.\n *\n * This method is called after #$element has been inserted into DOM. The parameter is the return\n * value of #gatherPreInfuseState.\n *\n * @protected\n * @param {Object} state\n */\nOO.ui.Element.prototype.restorePreInfuseState = function () {\n};\n","/**\n * Wraps an HTML snippet for use with configuration values which default\n * to strings.  This bypasses the default html-escaping done to string\n * values.\n *\n * @class\n *\n * @constructor\n * @param {string} [content] HTML content\n */\nOO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {\n\t// Properties\n\tthis.content = content;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.HtmlSnippet );\n\n/* Methods */\n\n/**\n * Render into HTML.\n *\n * @return {string} Unchanged HTML snippet.\n */\nOO.ui.HtmlSnippet.prototype.toString = function () {\n\treturn this.content;\n};\n","/**\n * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way\n * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.\n * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},\n * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},\n * {@link OO.ui.HorizontalLayout HorizontalLayout}, and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.Layout = function OoUiLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Layout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-layout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Layout, OO.ui.Element );\nOO.mixinClass( OO.ui.Layout, OO.EventEmitter );\n","/**\n * Widgets are compositions of one or more OOjs UI elements that users can both view\n * and interact with. All widgets can be configured and modified via a standard API,\n * and their state can change dynamically according to a model.\n *\n * @abstract\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [disabled=false] Disable the widget. Disabled widgets cannot be used and their\n *  appearance reflects this state.\n */\nOO.ui.Widget = function OoUiWidget( config ) {\n\t// Initialize config\n\tconfig = $.extend( { disabled: false }, config );\n\n\t// Parent constructor\n\tOO.ui.Widget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\n\t// Properties\n\tthis.disabled = null;\n\tthis.wasDisabled = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-widget' );\n\tthis.setDisabled( !!config.disabled );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Widget, OO.ui.Element );\nOO.mixinClass( OO.ui.Widget, OO.EventEmitter );\n\n/* Events */\n\n/**\n * @event disable\n *\n * A 'disable' event is emitted when the disabled state of the widget changes\n * (i.e. on disable **and** enable).\n *\n * @param {boolean} disabled Widget is disabled\n */\n\n/**\n * @event toggle\n *\n * A 'toggle' event is emitted when the visibility of the widget changes.\n *\n * @param {boolean} visible Widget is visible\n */\n\n/* Methods */\n\n/**\n * Check if the widget is disabled.\n *\n * @return {boolean} Widget is disabled\n */\nOO.ui.Widget.prototype.isDisabled = function () {\n\treturn this.disabled;\n};\n\n/**\n * Set the 'disabled' state of the widget.\n *\n * When a widget is disabled, it cannot be used and its appearance is updated to reflect this state.\n *\n * @param {boolean} disabled Disable widget\n * @chainable\n */\nOO.ui.Widget.prototype.setDisabled = function ( disabled ) {\n\tvar isDisabled;\n\n\tthis.disabled = !!disabled;\n\tisDisabled = this.isDisabled();\n\tif ( isDisabled !== this.wasDisabled ) {\n\t\tthis.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );\n\t\tthis.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );\n\t\tthis.$element.attr( 'aria-disabled', isDisabled.toString() );\n\t\tthis.emit( 'disable', isDisabled );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.wasDisabled = isDisabled;\n\n\treturn this;\n};\n\n/**\n * Update the disabled state, in case of changes in parent widget.\n *\n * @chainable\n */\nOO.ui.Widget.prototype.updateDisabled = function () {\n\tthis.setDisabled( this.disabled );\n\treturn this;\n};\n\n/**\n * Get an ID of a labelable node which is part of this widget, if any, to be used for `<label for>`\n * value.\n *\n * If this function returns null, the widget should have a meaningful #simulateLabelClick method\n * instead.\n *\n * @return {string|null} The ID of the labelable element\n */\nOO.ui.Widget.prototype.getInputId = function () {\n\treturn null;\n};\n\n/**\n * Simulate the behavior of clicking on a label (a HTML `<label>` element) bound to this input.\n * HTML only allows `<label>` to act on specific \"labelable\" elements; complex widgets might need to\n * override this method to provide intuitive, accessible behavior.\n *\n * By default, this does nothing. OO.ui.mixin.TabIndexedElement overrides it for focusable widgets.\n * Individual widgets may override it too.\n *\n * This method is called by OO.ui.LabelWidget and OO.ui.FieldLayout. It should not be called\n * directly.\n */\nOO.ui.Widget.prototype.simulateLabelClick = function () {\n};\n","/**\n * Theme logic.\n *\n * @abstract\n * @class\n *\n * @constructor\n */\nOO.ui.Theme = function OoUiTheme() {\n\tthis.elementClassesQueue = [];\n\tthis.debouncedUpdateQueuedElementClasses = OO.ui.debounce( this.updateQueuedElementClasses );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.Theme );\n\n/* Methods */\n\n/**\n * Get a list of classes to be applied to a widget.\n *\n * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,\n * otherwise state transitions will not work properly.\n *\n * @param {OO.ui.Element} element Element for which to get classes\n * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists\n */\nOO.ui.Theme.prototype.getElementClasses = function () {\n\treturn { on: [], off: [] };\n};\n\n/**\n * Update CSS classes provided by the theme.\n *\n * For elements with theme logic hooks, this should be called any time there's a state change.\n *\n * @param {OO.ui.Element} element Element for which to update classes\n */\nOO.ui.Theme.prototype.updateElementClasses = function ( element ) {\n\tvar $elements = $( [] ),\n\t\tclasses = this.getElementClasses( element );\n\n\tif ( element.$icon ) {\n\t\t$elements = $elements.add( element.$icon );\n\t}\n\tif ( element.$indicator ) {\n\t\t$elements = $elements.add( element.$indicator );\n\t}\n\n\t$elements\n\t\t.removeClass( classes.off.join( ' ' ) )\n\t\t.addClass( classes.on.join( ' ' ) );\n};\n\n/**\n * @private\n */\nOO.ui.Theme.prototype.updateQueuedElementClasses = function () {\n\tvar i;\n\tfor ( i = 0; i < this.elementClassesQueue.length; i++ ) {\n\t\tthis.updateElementClasses( this.elementClassesQueue[ i ] );\n\t}\n\t// Clear the queue\n\tthis.elementClassesQueue = [];\n};\n\n/**\n * Queue #updateElementClasses to be called for this element.\n *\n * @localdoc QUnit tests override this method to directly call #queueUpdateElementClasses,\n *   to make them synchronous.\n *\n * @param {OO.ui.Element} element Element for which to update classes\n */\nOO.ui.Theme.prototype.queueUpdateElementClasses = function ( element ) {\n\t// Keep items in the queue unique. Use lastIndexOf to start checking from the end because that's\n\t// the most common case (this method is often called repeatedly for the same element).\n\tif ( this.elementClassesQueue.lastIndexOf( element ) !== -1 ) {\n\t\treturn;\n\t}\n\tthis.elementClassesQueue.push( element );\n\tthis.debouncedUpdateQueuedElementClasses();\n};\n\n/**\n * Get the transition duration in milliseconds for dialogs opening/closing\n *\n * The dialog should be fully rendered this many milliseconds after the\n * ready process has executed.\n *\n * @return {number} Transition duration in milliseconds\n */\nOO.ui.Theme.prototype.getDialogTransitionDuration = function () {\n\treturn 0;\n};\n","/**\n * The TabIndexedElement class is an attribute mixin used to add additional functionality to an\n * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the\n * order in which users will navigate through the focusable elements via the \"tab\" key.\n *\n *     @example\n *     // TabIndexedElement is mixed into the ButtonWidget class\n *     // to provide a tabIndex property.\n *     var button1 = new OO.ui.ButtonWidget( {\n *         label: 'fourth',\n *         tabIndex: 4\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'second',\n *         tabIndex: 2\n *     } );\n *     var button3 = new OO.ui.ButtonWidget( {\n *         label: 'third',\n *         tabIndex: 3\n *     } );\n *     var button4 = new OO.ui.ButtonWidget( {\n *         label: 'first',\n *         tabIndex: 1\n *     } );\n *     $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$tabIndexed] The element that should use the tabindex functionality. By default,\n *  the functionality is applied to the element created by the class ($element). If a different element is specified, the tabindex\n *  functionality will be applied to it instead.\n * @cfg {string|number|null} [tabIndex=0] Number that specifies the element’s position in the tab-navigation\n *  order (e.g., 1 for the first focusable element). Use 0 to use the default navigation order; use -1\n *  to remove the element from the tab-navigation flow.\n */\nOO.ui.mixin.TabIndexedElement = function OoUiMixinTabIndexedElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { tabIndex: 0 }, config );\n\n\t// Properties\n\tthis.$tabIndexed = null;\n\tthis.tabIndex = null;\n\n\t// Events\n\tthis.connect( this, { disable: 'onTabIndexedElementDisable' } );\n\n\t// Initialization\n\tthis.setTabIndex( config.tabIndex );\n\tthis.setTabIndexedElement( config.$tabIndexed || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Set the element that should use the tabindex functionality.\n *\n * This method is used to retarget a tabindex mixin so that its functionality applies\n * to the specified element. If an element is currently using the functionality, the mixin’s\n * effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $tabIndexed Element that should use the tabindex functionality\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {\n\tvar tabIndex = this.tabIndex;\n\t// Remove attributes from old $tabIndexed\n\tthis.setTabIndex( null );\n\t// Force update of new $tabIndexed\n\tthis.$tabIndexed = $tabIndexed;\n\tthis.tabIndex = tabIndex;\n\treturn this.updateTabIndex();\n};\n\n/**\n * Set the value of the tabindex.\n *\n * @param {string|number|null} tabIndex Tabindex value, or `null` for no tabindex\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {\n\ttabIndex = /^-?\\d+$/.test( tabIndex ) ? Number( tabIndex ) : null;\n\n\tif ( this.tabIndex !== tabIndex ) {\n\t\tthis.tabIndex = tabIndex;\n\t\tthis.updateTabIndex();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the `tabindex` attribute, in case of changes to tab index or\n * disabled state.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.updateTabIndex = function () {\n\tif ( this.$tabIndexed ) {\n\t\tif ( this.tabIndex !== null ) {\n\t\t\t// Do not index over disabled elements\n\t\t\tthis.$tabIndexed.attr( {\n\t\t\t\ttabindex: this.isDisabled() ? -1 : this.tabIndex,\n\t\t\t\t// Support: ChromeVox and NVDA\n\t\t\t\t// These do not seem to inherit aria-disabled from parent elements\n\t\t\t\t'aria-disabled': this.isDisabled().toString()\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.$tabIndexed.removeAttr( 'tabindex aria-disabled' );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Handle disable events.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.mixin.TabIndexedElement.prototype.onTabIndexedElementDisable = function () {\n\tthis.updateTabIndex();\n};\n\n/**\n * Get the value of the tabindex.\n *\n * @return {number|null} Tabindex value\n */\nOO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {\n\treturn this.tabIndex;\n};\n\n/**\n * Get an ID of a focusable element of this widget, if any, to be used for `<label for>` value.\n *\n * If the element already has an ID then that is returned, otherwise unique ID is\n * generated, set on the element, and returned.\n *\n * @return {string|null} The ID of the focusable element\n */\nOO.ui.mixin.TabIndexedElement.prototype.getInputId = function () {\n\tvar id;\n\n\tif ( !this.$tabIndexed ) {\n\t\treturn null;\n\t}\n\tif ( !this.isLabelableNode( this.$tabIndexed ) ) {\n\t\treturn null;\n\t}\n\n\tid = this.$tabIndexed.attr( 'id' );\n\tif ( id === undefined ) {\n\t\tid = OO.ui.generateElementId();\n\t\tthis.$tabIndexed.attr( 'id', id );\n\t}\n\n\treturn id;\n};\n\n/**\n * Whether the node is 'labelable' according to the HTML spec\n * (i.e., whether it can be interacted with through a `<label for=\"…\">`).\n * See: <https://html.spec.whatwg.org/multipage/forms.html#category-label>.\n *\n * @private\n * @param {jQuery} $node\n * @return {boolean}\n */\nOO.ui.mixin.TabIndexedElement.prototype.isLabelableNode = function ( $node ) {\n\tvar\n\t\tlabelableTags = [ 'button', 'meter', 'output', 'progress', 'select', 'textarea' ],\n\t\ttagName = $node.prop( 'tagName' ).toLowerCase();\n\n\tif ( tagName === 'input' && $node.attr( 'type' ) !== 'hidden' ) {\n\t\treturn true;\n\t}\n\tif ( labelableTags.indexOf( tagName ) !== -1 ) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/**\n * Focus this element.\n *\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$tabIndexed.focus();\n\t}\n\treturn this;\n};\n\n/**\n * Blur this element.\n *\n * @chainable\n */\nOO.ui.mixin.TabIndexedElement.prototype.blur = function () {\n\tthis.$tabIndexed.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.Widget\n */\nOO.ui.mixin.TabIndexedElement.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * ButtonElement is often mixed into other classes to generate a button, which is a clickable\n * interface element that can be configured with access keys for accessibility.\n * See the [OOjs UI documentation on MediaWiki] [1] for examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$button] The button element created by the class.\n *  If this configuration is omitted, the button element will use a generated `<a>`.\n * @cfg {boolean} [framed=true] Render the button with a frame\n */\nOO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$button = null;\n\tthis.framed = null;\n\tthis.active = config.active !== undefined && config.active;\n\tthis.onMouseUpHandler = this.onMouseUp.bind( this );\n\tthis.onMouseDownHandler = this.onMouseDown.bind( this );\n\tthis.onKeyDownHandler = this.onKeyDown.bind( this );\n\tthis.onKeyUpHandler = this.onKeyUp.bind( this );\n\tthis.onClickHandler = this.onClick.bind( this );\n\tthis.onKeyPressHandler = this.onKeyPress.bind( this );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonElement' );\n\tthis.toggleFramed( config.framed === undefined || config.framed );\n\tthis.setButtonElement( config.$button || $( '<a>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.ButtonElement );\n\n/* Static Properties */\n\n/**\n * Cancel mouse down events.\n *\n * This property is usually set to `true` to prevent the focus from changing when the button is clicked.\n * Classes such as {@link OO.ui.mixin.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}\n * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a\n * parent widget.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.mixin.ButtonElement.static.cancelButtonMouseDownEvents = true;\n\n/* Events */\n\n/**\n * A 'click' event is emitted when the button element is clicked.\n *\n * @event click\n */\n\n/* Methods */\n\n/**\n * Set the button element.\n *\n * This method is used to retarget a button mixin so that its functionality applies to\n * the specified button element instead of the one created by the class. If a button element\n * is already set, the method will remove the mixin’s effect on that element.\n *\n * @param {jQuery} $button Element to use as button\n */\nOO.ui.mixin.ButtonElement.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button\n\t\t\t.removeClass( 'oo-ui-buttonElement-button' )\n\t\t\t.removeAttr( 'role accesskey' )\n\t\t\t.off( {\n\t\t\t\tmousedown: this.onMouseDownHandler,\n\t\t\t\tkeydown: this.onKeyDownHandler,\n\t\t\t\tclick: this.onClickHandler,\n\t\t\t\tkeypress: this.onKeyPressHandler\n\t\t\t} );\n\t}\n\n\tthis.$button = $button\n\t\t.addClass( 'oo-ui-buttonElement-button' )\n\t\t.on( {\n\t\t\tmousedown: this.onMouseDownHandler,\n\t\t\tkeydown: this.onKeyDownHandler,\n\t\t\tclick: this.onClickHandler,\n\t\t\tkeypress: this.onKeyPressHandler\n\t\t} );\n\n\t// Add `role=\"button\"` on `<a>` elements, where it's needed\n\t// `toUppercase()` is added for XHTML documents\n\tif ( this.$button.prop( 'tagName' ).toUpperCase() === 'A' ) {\n\t\tthis.$button.attr( 'role', 'button' );\n\t}\n};\n\n/**\n * Handles mouse down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.mixin.ButtonElement.prototype.onMouseDown = function ( e ) {\n\tif ( this.isDisabled() || e.which !== OO.ui.MouseButtons.LEFT ) {\n\t\treturn;\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonElement-pressed' );\n\t// Run the mouseup handler no matter where the mouse is when the button is let go, so we can\n\t// reliably remove the pressed class\n\tthis.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );\n\t// Prevent change of focus unless specifically configured otherwise\n\tif ( this.constructor.static.cancelButtonMouseDownEvents ) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handles mouse up events.\n *\n * @protected\n * @param {MouseEvent} e Mouse up event\n */\nOO.ui.mixin.ButtonElement.prototype.onMouseUp = function ( e ) {\n\tif ( this.isDisabled() || e.which !== OO.ui.MouseButtons.LEFT ) {\n\t\treturn;\n\t}\n\tthis.$element.removeClass( 'oo-ui-buttonElement-pressed' );\n\t// Stop listening for mouseup, since we only needed this once\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );\n};\n\n/**\n * Handles mouse click events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse click event\n * @fires click\n */\nOO.ui.mixin.ButtonElement.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tif ( this.emit( 'click' ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Handles key down events.\n *\n * @protected\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyDown = function ( e ) {\n\tif ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {\n\t\treturn;\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonElement-pressed' );\n\t// Run the keyup handler no matter where the key is when the button is let go, so we can\n\t// reliably remove the pressed class\n\tthis.getElementDocument().addEventListener( 'keyup', this.onKeyUpHandler, true );\n};\n\n/**\n * Handles key up events.\n *\n * @protected\n * @param {KeyboardEvent} e Key up event\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyUp = function ( e ) {\n\tif ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {\n\t\treturn;\n\t}\n\tthis.$element.removeClass( 'oo-ui-buttonElement-pressed' );\n\t// Stop listening for keyup, since we only needed this once\n\tthis.getElementDocument().removeEventListener( 'keyup', this.onKeyUpHandler, true );\n};\n\n/**\n * Handles key press events.\n *\n * @protected\n * @param {jQuery.Event} e Key press event\n * @fires click\n */\nOO.ui.mixin.ButtonElement.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tif ( this.emit( 'click' ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Check if button has a frame.\n *\n * @return {boolean} Button is framed\n */\nOO.ui.mixin.ButtonElement.prototype.isFramed = function () {\n\treturn this.framed;\n};\n\n/**\n * Render the button with or without a frame. Omit the `framed` parameter to toggle the button frame on and off.\n *\n * @param {boolean} [framed] Make button framed, omit to toggle\n * @chainable\n */\nOO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {\n\tframed = framed === undefined ? !this.framed : !!framed;\n\tif ( framed !== this.framed ) {\n\t\tthis.framed = framed;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-buttonElement-frameless', !framed )\n\t\t\t.toggleClass( 'oo-ui-buttonElement-framed', framed );\n\t\tthis.updateThemeClasses();\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the button's active state.\n *\n * The active state can be set on:\n *\n *  - {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} when it is selected\n *  - {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} when it is toggle on\n *  - {@link OO.ui.ButtonWidget ButtonWidget} when clicking the button would only refresh the page\n *\n * @protected\n * @param {boolean} value Make button active\n * @chainable\n */\nOO.ui.mixin.ButtonElement.prototype.setActive = function ( value ) {\n\tthis.active = !!value;\n\tthis.$element.toggleClass( 'oo-ui-buttonElement-active', this.active );\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Check if the button is active\n *\n * @protected\n * @return {boolean} The button is active\n */\nOO.ui.mixin.ButtonElement.prototype.isActive = function () {\n\treturn this.active;\n};\n","/**\n * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or\n * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing\n * items from the group is done through the interface the class provides.\n * For more information, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups\n *\n * @abstract\n * @mixins OO.EmitterList\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$group] The container element created by the class. If this configuration\n *  is omitted, the group element will use a generated `<div>`.\n */\nOO.ui.mixin.GroupElement = function OoUiMixinGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Mixin constructors\n\tOO.EmitterList.call( this, config );\n\n\t// Properties\n\tthis.$group = null;\n\n\t// Initialization\n\tthis.setGroupElement( config.$group || $( '<div>' ) );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.GroupElement, OO.EmitterList );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of selected items changes.\n *\n * @param {OO.ui.Element[]} items Items currently in the group\n */\n\n/* Methods */\n\n/**\n * Set the group element.\n *\n * If an element is already set, items will be moved to the new element.\n *\n * @param {jQuery} $group Element to use as group\n */\nOO.ui.mixin.GroupElement.prototype.setGroupElement = function ( $group ) {\n\tvar i, len;\n\n\tthis.$group = $group;\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.$group.append( this.items[ i ].$element );\n\t}\n};\n\n/**\n * Get an item by its data.\n *\n * Only the first item with matching data will be returned. To return all matching items,\n * use the #getItemsFromData method.\n *\n * @param {Object} data Item data to search for\n * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists\n */\nOO.ui.mixin.GroupElement.prototype.getItemFromData = function ( data ) {\n\tvar i, len, item,\n\t\thash = OO.getHash( data );\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( hash === OO.getHash( item.getData() ) ) {\n\t\t\treturn item;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * Get items by their data.\n *\n * All items with matching data will be returned. To return only the first match, use the #getItemFromData method instead.\n *\n * @param {Object} data Item data to search for\n * @return {OO.ui.Element[]} Items with equivalent data\n */\nOO.ui.mixin.GroupElement.prototype.getItemsFromData = function ( data ) {\n\tvar i, len, item,\n\t\thash = OO.getHash( data ),\n\t\titems = [];\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( hash === OO.getHash( item.getData() ) ) {\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\treturn items;\n};\n\n/**\n * Add items to the group.\n *\n * Items will be added to the end of the group array unless the optional `index` parameter specifies\n * a different insertion point. Adding an existing item will move it to the end of the array or the point specified by the `index`.\n *\n * @param {OO.ui.Element[]} items An array of items to add to the group\n * @param {number} [index] Index of the insertion point\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {\n\t// Mixin method\n\tOO.EmitterList.prototype.addItems.call( this, items, index );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.mixin.GroupElement.prototype.moveItem = function ( items, newIndex ) {\n\t// insertItemElements expects this.items to not have been modified yet, so call before the mixin\n\tthis.insertItemElements( items, newIndex );\n\n\t// Mixin method\n\tnewIndex = OO.EmitterList.prototype.moveItem.call( this, items, newIndex );\n\n\treturn newIndex;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.mixin.GroupElement.prototype.insertItem = function ( item, index ) {\n\titem.setElementGroup( this );\n\tthis.insertItemElements( item, index );\n\n\t// Mixin method\n\tindex = OO.EmitterList.prototype.insertItem.call( this, item, index );\n\n\treturn index;\n};\n\n/**\n * Insert elements into the group\n *\n * @private\n * @param {OO.ui.Element} itemWidget Item to insert\n * @param {number} index Insertion index\n */\nOO.ui.mixin.GroupElement.prototype.insertItemElements = function ( itemWidget, index ) {\n\tif ( index === undefined || index < 0 || index >= this.items.length ) {\n\t\tthis.$group.append( itemWidget.$element );\n\t} else if ( index === 0 ) {\n\t\tthis.$group.prepend( itemWidget.$element );\n\t} else {\n\t\tthis.items[ index ].$element.before( itemWidget.$element );\n\t}\n};\n\n/**\n * Remove the specified items from a group.\n *\n * Removed items are detached (not removed) from the DOM so that they may be reused.\n * To remove all items from a group, you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Element[]} items An array of items to remove\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {\n\tvar i, len, item, index;\n\n\t// Remove specific items elements\n\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\titem = items[ i ];\n\t\tindex = this.items.indexOf( item );\n\t\tif ( index !== -1 ) {\n\t\t\titem.setElementGroup( null );\n\t\t\titem.$element.detach();\n\t\t}\n\t}\n\n\t// Mixin method\n\tOO.EmitterList.prototype.removeItems.call( this, items );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n\n/**\n * Clear all items from the group.\n *\n * Cleared items are detached from the DOM, not removed, so that they may be reused.\n * To remove only a subset of items from a group, use the #removeItems method.\n *\n * @chainable\n */\nOO.ui.mixin.GroupElement.prototype.clearItems = function () {\n\tvar i, len;\n\n\t// Remove all item elements\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.items[ i ].setElementGroup( null );\n\t\tthis.items[ i ].$element.detach();\n\t}\n\n\t// Mixin method\n\tOO.EmitterList.prototype.clearItems.call( this );\n\n\tthis.emit( 'change', this.getItems() );\n\treturn this;\n};\n","/**\n * IconElement is often mixed into other classes to generate an icon.\n * Icons are graphics, about the size of normal text. They are used to aid the user\n * in locating a control or to convey information in a space-efficient way. See the\n * [OOjs UI documentation on MediaWiki] [1] for a list of icons\n * included in the library.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,\n *  the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that\n *  the icon element be set to an existing icon instead of the one generated by this class, set a\n *  value using a jQuery selection. For example:\n *\n *      // Use a <div> tag instead of a <span>\n *     $icon: $(\"<div>\")\n *     // Use an existing icon element instead of the one generated by the class\n *     $icon: this.$element\n *     // Use an icon element from a child widget\n *     $icon: this.childwidget.$element\n * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of\n *  symbolic names.  A map is used for i18n purposes and contains a `default` icon\n *  name and additional names keyed by language code. The `default` name is used when no icon is keyed\n *  by the user's language.\n *\n *  Example of an i18n map:\n *\n *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }\n *  See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title\n *  text. The icon title is displayed when users move the mouse over the icon.\n */\nOO.ui.mixin.IconElement = function OoUiMixinIconElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$icon = null;\n\tthis.icon = null;\n\tthis.iconTitle = null;\n\n\t// Initialization\n\tthis.setIcon( config.icon || this.constructor.static.icon );\n\tthis.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );\n\tthis.setIconElement( config.$icon || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.IconElement );\n\n/* Static Properties */\n\n/**\n * The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names. A map is used\n * for i18n purposes and contains a `default` icon name and additional names keyed by\n * language code. The `default` name is used when no icon is keyed by the user's language.\n *\n * Example of an i18n map:\n *\n *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }\n *\n * Note: the static property will be overridden if the #icon configuration is used.\n *\n * @static\n * @inheritable\n * @property {Object|string}\n */\nOO.ui.mixin.IconElement.static.icon = null;\n\n/**\n * The icon title, displayed when users move the mouse over the icon. The value can be text, a\n * function that returns title text, or `null` for no title.\n *\n * The static property will be overridden if the #iconTitle configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.IconElement.static.iconTitle = null;\n\n/* Methods */\n\n/**\n * Set the icon element. This method is used to retarget an icon mixin so that its functionality\n * applies to the specified icon element instead of the one created by the class. If an icon\n * element is already set, the mixin’s effect on that element is removed. Generated CSS classes\n * and mixin methods will no longer affect the element.\n *\n * @param {jQuery} $icon Element to use as icon\n */\nOO.ui.mixin.IconElement.prototype.setIconElement = function ( $icon ) {\n\tif ( this.$icon ) {\n\t\tthis.$icon\n\t\t\t.removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )\n\t\t\t.removeAttr( 'title' );\n\t}\n\n\tthis.$icon = $icon\n\t\t.addClass( 'oo-ui-iconElement-icon' )\n\t\t.toggleClass( 'oo-ui-icon-' + this.icon, !!this.icon );\n\tif ( this.iconTitle !== null ) {\n\t\tthis.$icon.attr( 'title', this.iconTitle );\n\t}\n\n\tthis.updateThemeClasses();\n};\n\n/**\n * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.\n * The icon parameter can also be set to a map of icon names. See the #icon config setting\n * for an example.\n *\n * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed\n *  by language code, or `null` to remove the icon.\n * @chainable\n */\nOO.ui.mixin.IconElement.prototype.setIcon = function ( icon ) {\n\ticon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;\n\ticon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;\n\n\tif ( this.icon !== icon ) {\n\t\tif ( this.$icon ) {\n\t\t\tif ( this.icon !== null ) {\n\t\t\t\tthis.$icon.removeClass( 'oo-ui-icon-' + this.icon );\n\t\t\t}\n\t\t\tif ( icon !== null ) {\n\t\t\t\tthis.$icon.addClass( 'oo-ui-icon-' + icon );\n\t\t\t}\n\t\t}\n\t\tthis.icon = icon;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n\n/**\n * Set the icon title. Use `null` to remove the title.\n *\n * @param {string|Function|null} iconTitle A text string used as the icon title,\n *  a function that returns title text, or `null` for no title.\n * @chainable\n */\nOO.ui.mixin.IconElement.prototype.setIconTitle = function ( iconTitle ) {\n\ticonTitle =\n\t\t( typeof iconTitle === 'function' || ( typeof iconTitle === 'string' && iconTitle.length ) ) ?\n\t\t\tOO.ui.resolveMsg( iconTitle ) : null;\n\n\tif ( this.iconTitle !== iconTitle ) {\n\t\tthis.iconTitle = iconTitle;\n\t\tif ( this.$icon ) {\n\t\t\tif ( this.iconTitle !== null ) {\n\t\t\t\tthis.$icon.attr( 'title', iconTitle );\n\t\t\t} else {\n\t\t\t\tthis.$icon.removeAttr( 'title' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get the symbolic name of the icon.\n *\n * @return {string} Icon name\n */\nOO.ui.mixin.IconElement.prototype.getIcon = function () {\n\treturn this.icon;\n};\n\n/**\n * Get the icon title. The title text is displayed when a user moves the mouse over the icon.\n *\n * @return {string} Icon title text\n */\nOO.ui.mixin.IconElement.prototype.getIconTitle = function () {\n\treturn this.iconTitle;\n};\n","/**\n * IndicatorElement is often mixed into other classes to generate an indicator.\n * Indicators are small graphics that are generally used in two ways:\n *\n * - To draw attention to the status of an item. For example, an indicator might be\n *   used to show that an item in a list has errors that need to be resolved.\n * - To clarify the function of a control that acts in an exceptional way (a button\n *   that opens a menu instead of performing an action directly, for example).\n *\n * For a list of indicators included in the library, please see the\n * [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$indicator] The indicator element created by the class. If this\n *  configuration is omitted, the indicator element will use a generated `<span>`.\n * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n *  See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included\n *  in the library.\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,\n *  or a function that returns title text. The indicator title is displayed when users move\n *  the mouse over the indicator.\n */\nOO.ui.mixin.IndicatorElement = function OoUiMixinIndicatorElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$indicator = null;\n\tthis.indicator = null;\n\tthis.indicatorTitle = null;\n\n\t// Initialization\n\tthis.setIndicator( config.indicator || this.constructor.static.indicator );\n\tthis.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );\n\tthis.setIndicatorElement( config.$indicator || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.IndicatorElement );\n\n/* Static Properties */\n\n/**\n * Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n * The static property will be overridden if the #indicator configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|null}\n */\nOO.ui.mixin.IndicatorElement.static.indicator = null;\n\n/**\n * A text string used as the indicator title, a function that returns title text, or `null`\n * for no title. The static property will be overridden if the #indicatorTitle configuration is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.IndicatorElement.static.indicatorTitle = null;\n\n/* Methods */\n\n/**\n * Set the indicator element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $indicator Element to use as indicator\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {\n\tif ( this.$indicator ) {\n\t\tthis.$indicator\n\t\t\t.removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )\n\t\t\t.removeAttr( 'title' );\n\t}\n\n\tthis.$indicator = $indicator\n\t\t.addClass( 'oo-ui-indicatorElement-indicator' )\n\t\t.toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );\n\tif ( this.indicatorTitle !== null ) {\n\t\tthis.$indicator.attr( 'title', this.indicatorTitle );\n\t}\n\n\tthis.updateThemeClasses();\n};\n\n/**\n * Set the indicator by its symbolic name: ‘alert’, ‘down’, ‘next’, ‘previous’, ‘required’, ‘up’. Use `null` to remove the indicator.\n *\n * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator\n * @chainable\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicator = function ( indicator ) {\n\tindicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;\n\n\tif ( this.indicator !== indicator ) {\n\t\tif ( this.$indicator ) {\n\t\t\tif ( this.indicator !== null ) {\n\t\t\t\tthis.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );\n\t\t\t}\n\t\t\tif ( indicator !== null ) {\n\t\t\t\tthis.$indicator.addClass( 'oo-ui-indicator-' + indicator );\n\t\t\t}\n\t\t}\n\t\tthis.indicator = indicator;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n\n/**\n * Set the indicator title.\n *\n * The title is displayed when a user moves the mouse over the indicator.\n *\n * @param {string|Function|null} indicatorTitle Indicator title text, a function that returns text, or\n *   `null` for no indicator title\n * @chainable\n */\nOO.ui.mixin.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {\n\tindicatorTitle =\n\t\t( typeof indicatorTitle === 'function' || ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ) ?\n\t\t\tOO.ui.resolveMsg( indicatorTitle ) : null;\n\n\tif ( this.indicatorTitle !== indicatorTitle ) {\n\t\tthis.indicatorTitle = indicatorTitle;\n\t\tif ( this.$indicator ) {\n\t\t\tif ( this.indicatorTitle !== null ) {\n\t\t\t\tthis.$indicator.attr( 'title', indicatorTitle );\n\t\t\t} else {\n\t\t\t\tthis.$indicator.removeAttr( 'title' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get the symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).\n *\n * @return {string} Symbolic name of indicator\n */\nOO.ui.mixin.IndicatorElement.prototype.getIndicator = function () {\n\treturn this.indicator;\n};\n\n/**\n * Get the indicator title.\n *\n * The title is displayed when a user moves the mouse over the indicator.\n *\n * @return {string} Indicator title text\n */\nOO.ui.mixin.IndicatorElement.prototype.getIndicatorTitle = function () {\n\treturn this.indicatorTitle;\n};\n","/**\n * LabelElement is often mixed into other classes to generate a label, which\n * helps identify the function of an interface element.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$label] The label element created by the class. If this\n *  configuration is omitted, the label element will use a generated `<span>`.\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] The label text. The label can be specified\n *  as a plaintext string, a jQuery selection of elements, or a function that will produce a string\n *  in the future. See the [OOjs UI documentation on MediaWiki] [2] for examples.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels\n */\nOO.ui.mixin.LabelElement = function OoUiMixinLabelElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$label = null;\n\tthis.label = null;\n\n\t// Initialization\n\tthis.setLabel( config.label || this.constructor.static.label );\n\tthis.setLabelElement( config.$label || $( '<span>' ) );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.LabelElement );\n\n/* Events */\n\n/**\n * @event labelChange\n * @param {string} value\n */\n\n/* Static Properties */\n\n/**\n * The label text. The label can be specified as a plaintext string, a function that will\n * produce a string in the future, or `null` for no label. The static value will\n * be overridden if a label is specified with the #label config option.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.LabelElement.static.label = null;\n\n/* Static methods */\n\n/**\n * Highlight the first occurrence of the query in the given text\n *\n * @param {string} text Text\n * @param {string} query Query to find\n * @param {Function} [compare] Optional string comparator, e.g. Intl.Collator().compare\n * @return {jQuery} Text with the first match of the query\n *  sub-string wrapped in highlighted span\n */\nOO.ui.mixin.LabelElement.static.highlightQuery = function ( text, query, compare ) {\n\tvar i, tLen, qLen,\n\t\toffset = -1,\n\t\t$result = $( '<span>' );\n\n\tif ( compare ) {\n\t\ttLen = text.length;\n\t\tqLen = query.length;\n\t\tfor ( i = 0; offset === -1 && i <= tLen - qLen; i++ ) {\n\t\t\tif ( compare( query, text.slice( i, i + qLen ) ) === 0 ) {\n\t\t\t\toffset = i;\n\t\t\t}\n\t\t}\n\t} else {\n\t\toffset = text.toLowerCase().indexOf( query.toLowerCase() );\n\t}\n\n\tif ( !query.length || offset === -1 ) {\n\t\t$result.text( text );\n\t} else {\n\t\t$result.append(\n\t\t\tdocument.createTextNode( text.slice( 0, offset ) ),\n\t\t\t$( '<span>' )\n\t\t\t\t.addClass( 'oo-ui-labelElement-label-highlight' )\n\t\t\t\t.text( text.slice( offset, offset + query.length ) ),\n\t\t\tdocument.createTextNode( text.slice( offset + query.length ) )\n\t\t);\n\t}\n\treturn $result.contents();\n};\n\n/* Methods */\n\n/**\n * Set the label element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $label Element to use as label\n */\nOO.ui.mixin.LabelElement.prototype.setLabelElement = function ( $label ) {\n\tif ( this.$label ) {\n\t\tthis.$label.removeClass( 'oo-ui-labelElement-label' ).empty();\n\t}\n\n\tthis.$label = $label.addClass( 'oo-ui-labelElement-label' );\n\tthis.setLabelContent( this.label );\n};\n\n/**\n * Set the label.\n *\n * An empty string will result in the label being hidden. A string containing only whitespace will\n * be converted to a single `&nbsp;`.\n *\n * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n * @chainable\n */\nOO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) {\n\tlabel = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;\n\tlabel = ( ( typeof label === 'string' || label instanceof jQuery ) && label.length ) || ( label instanceof OO.ui.HtmlSnippet && label.toString().length ) ? label : null;\n\n\tif ( this.label !== label ) {\n\t\tif ( this.$label ) {\n\t\t\tthis.setLabelContent( label );\n\t\t}\n\t\tthis.label = label;\n\t\tthis.emit( 'labelChange' );\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-labelElement', !!this.label );\n\n\treturn this;\n};\n\n/**\n * Set the label as plain text with a highlighted query\n *\n * @param {string} text Text label to set\n * @param {string} query Substring of text to highlight\n * @param {Function} [compare] Optional string comparator, e.g. Intl.Collator().compare\n * @chainable\n */\nOO.ui.mixin.LabelElement.prototype.setHighlightedQuery = function ( text, query, compare ) {\n\treturn this.setLabel( this.constructor.static.highlightQuery( text, query, compare ) );\n};\n\n/**\n * Get the label.\n *\n * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n */\nOO.ui.mixin.LabelElement.prototype.getLabel = function () {\n\treturn this.label;\n};\n\n/**\n * Set the content of the label.\n *\n * Do not call this method until after the label element has been set by #setLabelElement.\n *\n * @private\n * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or\n *  text; or null for no label\n */\nOO.ui.mixin.LabelElement.prototype.setLabelContent = function ( label ) {\n\tif ( typeof label === 'string' ) {\n\t\tif ( label.match( /^\\s*$/ ) ) {\n\t\t\t// Convert whitespace only string to a single non-breaking space\n\t\t\tthis.$label.html( '&nbsp;' );\n\t\t} else {\n\t\t\tthis.$label.text( label );\n\t\t}\n\t} else if ( label instanceof OO.ui.HtmlSnippet ) {\n\t\tthis.$label.html( label.toString() );\n\t} else if ( label instanceof jQuery ) {\n\t\tthis.$label.empty().append( label );\n\t} else {\n\t\tthis.$label.empty();\n\t}\n};\n","/**\n * The FlaggedElement class is an attribute mixin, meaning that it is used to add\n * additional functionality to an element created by another class. The class provides\n * a ‘flags’ property assigned the name (or an array of names) of styling flags,\n * which are used to customize the look and feel of a widget to better describe its\n * importance and functionality.\n *\n * The library currently contains the following styling flags for general use:\n *\n * - **progressive**:  Progressive styling is applied to convey that the widget will move the user forward in a process.\n * - **destructive**: Destructive styling is applied to convey that the widget will remove something.\n * - **constructive**: Constructive styling is deprecated since v0.23.2 and equivalent to progressive.\n *\n * The flags affect the appearance of the buttons:\n *\n *     @example\n *     // FlaggedElement is mixed into ButtonWidget to provide styling flags\n *     var button1 = new OO.ui.ButtonWidget( {\n *         label: 'Progressive',\n *         flags: 'progressive'\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'Destructive',\n *         flags: 'destructive'\n *     } );\n *     $( 'body' ).append( button1.$element, button2.$element );\n *\n * {@link OO.ui.ActionWidget ActionWidgets}, which are a special kind of button that execute an action, use these flags: **primary** and **safe**.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\n *  Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged\n * @cfg {jQuery} [$flagged] The flagged element. By default,\n *  the flagged functionality is applied to the element created by the class ($element).\n *  If a different element is specified, the flagged functionality will be applied to it instead.\n */\nOO.ui.mixin.FlaggedElement = function OoUiMixinFlaggedElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.flags = {};\n\tthis.$flagged = null;\n\n\t// Initialization\n\tthis.setFlags( config.flags );\n\tthis.setFlaggedElement( config.$flagged || this.$element );\n};\n\n/* Events */\n\n/**\n * @event flag\n * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`\n * parameter contains the name of each modified flag and indicates whether it was\n * added or removed.\n *\n * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates\n * that the flag was added, `false` that the flag was removed.\n */\n\n/* Methods */\n\n/**\n * Set the flagged element.\n *\n * This method is used to retarget a flagged mixin so that its functionality applies to the specified element.\n * If an element is already set, the method will remove the mixin’s effect on that element.\n *\n * @param {jQuery} $flagged Element that should be flagged\n */\nOO.ui.mixin.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {\n\tvar classNames = Object.keys( this.flags ).map( function ( flag ) {\n\t\treturn 'oo-ui-flaggedElement-' + flag;\n\t} ).join( ' ' );\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged.removeClass( classNames );\n\t}\n\n\tthis.$flagged = $flagged.addClass( classNames );\n};\n\n/**\n * Check if the specified flag is set.\n *\n * @param {string} flag Name of flag\n * @return {boolean} The flag is set\n */\nOO.ui.mixin.FlaggedElement.prototype.hasFlag = function ( flag ) {\n\t// This may be called before the constructor, thus before this.flags is set\n\treturn this.flags && ( flag in this.flags );\n};\n\n/**\n * Get the names of all flags set.\n *\n * @return {string[]} Flag names\n */\nOO.ui.mixin.FlaggedElement.prototype.getFlags = function () {\n\t// This may be called before the constructor, thus before this.flags is set\n\treturn Object.keys( this.flags || {} );\n};\n\n/**\n * Clear all flags.\n *\n * @chainable\n * @fires flag\n */\nOO.ui.mixin.FlaggedElement.prototype.clearFlags = function () {\n\tvar flag, className,\n\t\tchanges = {},\n\t\tremove = [],\n\t\tclassPrefix = 'oo-ui-flaggedElement-';\n\n\tfor ( flag in this.flags ) {\n\t\tclassName = classPrefix + flag;\n\t\tchanges[ flag ] = false;\n\t\tdelete this.flags[ flag ];\n\t\tremove.push( className );\n\t}\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged.removeClass( remove.join( ' ' ) );\n\t}\n\n\tthis.updateThemeClasses();\n\tthis.emit( 'flag', changes );\n\n\treturn this;\n};\n\n/**\n * Add one or more flags.\n *\n * @param {string|string[]|Object.<string, boolean>} flags A flag name, an array of flag names,\n *  or an object keyed by flag name with a boolean value that indicates whether the flag should\n *  be added (`true`) or removed (`false`).\n * @chainable\n * @fires flag\n */\nOO.ui.mixin.FlaggedElement.prototype.setFlags = function ( flags ) {\n\tvar i, len, flag, className,\n\t\tchanges = {},\n\t\tadd = [],\n\t\tremove = [],\n\t\tclassPrefix = 'oo-ui-flaggedElement-';\n\n\tif ( typeof flags === 'string' ) {\n\t\tclassName = classPrefix + flags;\n\t\t// Set\n\t\tif ( !this.flags[ flags ] ) {\n\t\t\tthis.flags[ flags ] = true;\n\t\t\tadd.push( className );\n\t\t}\n\t} else if ( Array.isArray( flags ) ) {\n\t\tfor ( i = 0, len = flags.length; i < len; i++ ) {\n\t\t\tflag = flags[ i ];\n\t\t\tclassName = classPrefix + flag;\n\t\t\t// Set\n\t\t\tif ( !this.flags[ flag ] ) {\n\t\t\t\tchanges[ flag ] = true;\n\t\t\t\tthis.flags[ flag ] = true;\n\t\t\t\tadd.push( className );\n\t\t\t}\n\t\t}\n\t} else if ( OO.isPlainObject( flags ) ) {\n\t\tfor ( flag in flags ) {\n\t\t\tclassName = classPrefix + flag;\n\t\t\tif ( flags[ flag ] ) {\n\t\t\t\t// Set\n\t\t\t\tif ( !this.flags[ flag ] ) {\n\t\t\t\t\tchanges[ flag ] = true;\n\t\t\t\t\tthis.flags[ flag ] = true;\n\t\t\t\t\tadd.push( className );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Remove\n\t\t\t\tif ( this.flags[ flag ] ) {\n\t\t\t\t\tchanges[ flag ] = false;\n\t\t\t\t\tdelete this.flags[ flag ];\n\t\t\t\t\tremove.push( className );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( this.$flagged ) {\n\t\tthis.$flagged\n\t\t\t.addClass( add.join( ' ' ) )\n\t\t\t.removeClass( remove.join( ' ' ) );\n\t}\n\n\tthis.updateThemeClasses();\n\tthis.emit( 'flag', changes );\n\n\treturn this;\n};\n","/**\n * TitledElement is mixed into other classes to provide a `title` attribute.\n * Titles are rendered by the browser and are made visible when the user moves\n * the mouse over the element. Titles are not visible on touch devices.\n *\n *     @example\n *     // TitledElement provides a 'title' attribute to the\n *     // ButtonWidget class\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Title',\n *         title: 'I am a button'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.\n *  If this config is omitted, the title functionality is applied to $element, the\n *  element created by the class.\n * @cfg {string|Function} [title] The title text or a function that returns text. If\n *  this config is omitted, the value of the {@link #static-title static title} property is used.\n */\nOO.ui.mixin.TitledElement = function OoUiMixinTitledElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$titled = null;\n\tthis.title = null;\n\n\t// Initialization\n\tthis.setTitle( config.title !== undefined ? config.title : this.constructor.static.title );\n\tthis.setTitledElement( config.$titled || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * The title text, a function that returns text, or `null` for no title. The value of the static property\n * is overridden if the #title config option is used.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.TitledElement.static.title = null;\n\n/* Methods */\n\n/**\n * Set the titled element.\n *\n * This method is used to retarget a titledElement mixin so that its functionality applies to the specified element.\n * If an element is already set, the mixin’s effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $titled Element that should use the 'titled' functionality\n */\nOO.ui.mixin.TitledElement.prototype.setTitledElement = function ( $titled ) {\n\tif ( this.$titled ) {\n\t\tthis.$titled.removeAttr( 'title' );\n\t}\n\n\tthis.$titled = $titled;\n\tif ( this.title ) {\n\t\tthis.updateTitle();\n\t}\n};\n\n/**\n * Set title.\n *\n * @param {string|Function|null} title Title text, a function that returns text, or `null` for no title\n * @chainable\n */\nOO.ui.mixin.TitledElement.prototype.setTitle = function ( title ) {\n\ttitle = typeof title === 'function' ? OO.ui.resolveMsg( title ) : title;\n\ttitle = ( typeof title === 'string' && title.length ) ? title : null;\n\n\tif ( this.title !== title ) {\n\t\tthis.title = title;\n\t\tthis.updateTitle();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the title attribute, in case of changes to title or accessKey.\n *\n * @protected\n * @chainable\n */\nOO.ui.mixin.TitledElement.prototype.updateTitle = function () {\n\tvar title = this.getTitle();\n\tif ( this.$titled ) {\n\t\tif ( title !== null ) {\n\t\t\t// Only if this is an AccessKeyedElement\n\t\t\tif ( this.formatTitleWithAccessKey ) {\n\t\t\t\ttitle = this.formatTitleWithAccessKey( title );\n\t\t\t}\n\t\t\tthis.$titled.attr( 'title', title );\n\t\t} else {\n\t\t\tthis.$titled.removeAttr( 'title' );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Get title.\n *\n * @return {string} Title string\n */\nOO.ui.mixin.TitledElement.prototype.getTitle = function () {\n\treturn this.title;\n};\n","/**\n * AccessKeyedElement is mixed into other classes to provide an `accesskey` attribute.\n * Accesskeys allow an user to go to a specific element by using\n * a shortcut combination of a browser specific keys + the key\n * set to the field.\n *\n *     @example\n *     // AccessKeyedElement provides an 'accesskey' attribute to the\n *     // ButtonWidget class\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Accesskey',\n *         accessKey: 'k'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$accessKeyed] The element to which the `accesskey` attribute is applied.\n *  If this config is omitted, the accesskey functionality is applied to $element, the\n *  element created by the class.\n * @cfg {string|Function} [accessKey] The key or a function that returns the key. If\n *  this config is omitted, no accesskey will be added.\n */\nOO.ui.mixin.AccessKeyedElement = function OoUiMixinAccessKeyedElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$accessKeyed = null;\n\tthis.accessKey = null;\n\n\t// Initialization\n\tthis.setAccessKey( config.accessKey || null );\n\tthis.setAccessKeyedElement( config.$accessKeyed || this.$element );\n\n\t// If this is also a TitledElement and it initialized before we did, we may have\n\t// to update the title with the access key\n\tif ( this.updateTitle ) {\n\t\tthis.updateTitle();\n\t}\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * The access key, a function that returns a key, or `null` for no accesskey.\n *\n * @static\n * @inheritable\n * @property {string|Function|null}\n */\nOO.ui.mixin.AccessKeyedElement.static.accessKey = null;\n\n/* Methods */\n\n/**\n * Set the accesskeyed element.\n *\n * This method is used to retarget a AccessKeyedElement mixin so that its functionality applies to the specified element.\n * If an element is already set, the mixin's effect on that element is removed before the new element is set up.\n *\n * @param {jQuery} $accessKeyed Element that should use the 'accesskeyes' functionality\n */\nOO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement = function ( $accessKeyed ) {\n\tif ( this.$accessKeyed ) {\n\t\tthis.$accessKeyed.removeAttr( 'accesskey' );\n\t}\n\n\tthis.$accessKeyed = $accessKeyed;\n\tif ( this.accessKey ) {\n\t\tthis.$accessKeyed.attr( 'accesskey', this.accessKey );\n\t}\n};\n\n/**\n * Set accesskey.\n *\n * @param {string|Function|null} accessKey Key, a function that returns a key, or `null` for no accesskey\n * @chainable\n */\nOO.ui.mixin.AccessKeyedElement.prototype.setAccessKey = function ( accessKey ) {\n\taccessKey = typeof accessKey === 'string' ? OO.ui.resolveMsg( accessKey ) : null;\n\n\tif ( this.accessKey !== accessKey ) {\n\t\tif ( this.$accessKeyed ) {\n\t\t\tif ( accessKey !== null ) {\n\t\t\t\tthis.$accessKeyed.attr( 'accesskey', accessKey );\n\t\t\t} else {\n\t\t\t\tthis.$accessKeyed.removeAttr( 'accesskey' );\n\t\t\t}\n\t\t}\n\t\tthis.accessKey = accessKey;\n\n\t\t// Only if this is a TitledElement\n\t\tif ( this.updateTitle ) {\n\t\t\tthis.updateTitle();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get accesskey.\n *\n * @return {string} accessKey string\n */\nOO.ui.mixin.AccessKeyedElement.prototype.getAccessKey = function () {\n\treturn this.accessKey;\n};\n\n/**\n * Add information about the access key to the element's tooltip label.\n * (This is only public for hacky usage in FieldLayout.)\n *\n * @param {string} title Tooltip label for `title` attribute\n * @return {string}\n */\nOO.ui.mixin.AccessKeyedElement.prototype.formatTitleWithAccessKey = function ( title ) {\n\tvar accessKey;\n\n\tif ( !this.$accessKeyed ) {\n\t\t// Not initialized yet; the constructor will call updateTitle() which will rerun this function\n\t\treturn title;\n\t}\n\t// Use jquery.accessKeyLabel if available to show modifiers, otherwise just display the single key\n\tif ( $.fn.updateTooltipAccessKeys && $.fn.updateTooltipAccessKeys.getAccessKeyLabel ) {\n\t\taccessKey = $.fn.updateTooltipAccessKeys.getAccessKeyLabel( this.$accessKeyed[ 0 ] );\n\t} else {\n\t\taccessKey = this.getAccessKey();\n\t}\n\tif ( accessKey ) {\n\t\ttitle += ' [' + accessKey + ']';\n\t}\n\treturn title;\n};\n","/**\n * ButtonWidget is a generic widget for buttons. A wide variety of looks,\n * feels, and functionality can be customized via the class’s configuration options\n * and methods. Please see the [OOjs UI documentation on MediaWiki] [1] for more information\n * and examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches\n *\n *     @example\n *     // A button widget\n *     var button = new OO.ui.ButtonWidget( {\n *         label: 'Button with Icon',\n *         icon: 'trash',\n *         iconTitle: 'Remove'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * NOTE: HTML form buttons should use the OO.ui.ButtonInputWidget class.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [active=false] Whether button should be shown as active\n * @cfg {string} [href] Hyperlink to visit when the button is clicked.\n * @cfg {string} [target] The frame or window in which to open the hyperlink.\n * @cfg {boolean} [noFollow] Search engine traversal hint (default: true)\n */\nOO.ui.ButtonWidget = function OoUiButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\tOO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$button } ) );\n\n\t// Properties\n\tthis.href = null;\n\tthis.target = null;\n\tthis.noFollow = false;\n\n\t// Events\n\tthis.connect( this, { disable: 'onDisable' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-buttonWidget' )\n\t\t.append( this.$button );\n\tthis.setActive( config.active );\n\tthis.setHref( config.href );\n\tthis.setTarget( config.target );\n\tthis.setNoFollow( config.noFollow );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Get hyperlink location.\n *\n * @return {string} Hyperlink location\n */\nOO.ui.ButtonWidget.prototype.getHref = function () {\n\treturn this.href;\n};\n\n/**\n * Get hyperlink target.\n *\n * @return {string} Hyperlink target\n */\nOO.ui.ButtonWidget.prototype.getTarget = function () {\n\treturn this.target;\n};\n\n/**\n * Get search engine traversal hint.\n *\n * @return {boolean} Whether search engines should avoid traversing this hyperlink\n */\nOO.ui.ButtonWidget.prototype.getNoFollow = function () {\n\treturn this.noFollow;\n};\n\n/**\n * Set hyperlink location.\n *\n * @param {string|null} href Hyperlink location, null to remove\n */\nOO.ui.ButtonWidget.prototype.setHref = function ( href ) {\n\thref = typeof href === 'string' ? href : null;\n\tif ( href !== null && !OO.ui.isSafeUrl( href ) ) {\n\t\thref = './' + href;\n\t}\n\n\tif ( href !== this.href ) {\n\t\tthis.href = href;\n\t\tthis.updateHref();\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the `href` attribute, in case of changes to href or\n * disabled state.\n *\n * @private\n * @chainable\n */\nOO.ui.ButtonWidget.prototype.updateHref = function () {\n\tif ( this.href !== null && !this.isDisabled() ) {\n\t\tthis.$button.attr( 'href', this.href );\n\t} else {\n\t\tthis.$button.removeAttr( 'href' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Handle disable events.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.ButtonWidget.prototype.onDisable = function () {\n\tthis.updateHref();\n};\n\n/**\n * Set hyperlink target.\n *\n * @param {string|null} target Hyperlink target, null to remove\n */\nOO.ui.ButtonWidget.prototype.setTarget = function ( target ) {\n\ttarget = typeof target === 'string' ? target : null;\n\n\tif ( target !== this.target ) {\n\t\tthis.target = target;\n\t\tif ( target !== null ) {\n\t\t\tthis.$button.attr( 'target', target );\n\t\t} else {\n\t\t\tthis.$button.removeAttr( 'target' );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Set search engine traversal hint.\n *\n * @param {boolean} noFollow True if search engines should avoid traversing this hyperlink\n */\nOO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {\n\tnoFollow = typeof noFollow === 'boolean' ? noFollow : true;\n\n\tif ( noFollow !== this.noFollow ) {\n\t\tthis.noFollow = noFollow;\n\t\tif ( noFollow ) {\n\t\t\tthis.$button.attr( 'rel', 'nofollow' );\n\t\t} else {\n\t\t\tthis.$button.removeAttr( 'rel' );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n// Override method visibility hints from ButtonElement\n/**\n * @method setActive\n * @inheritdoc\n */\n/**\n * @method isActive\n * @inheritdoc\n */\n","/**\n * A ButtonGroupWidget groups related buttons and is used together with OO.ui.ButtonWidget and\n * its subclasses. Each button in a group is addressed by a unique reference. Buttons can be added,\n * removed, and cleared from the group.\n *\n *     @example\n *     // Example: A ButtonGroupWidget with two buttons\n *     var button1 = new OO.ui.PopupButtonWidget( {\n *         label: 'Select a category',\n *         icon: 'menu',\n *         popup: {\n *             $content: $( '<p>List of categories...</p>' ),\n *             padded: true,\n *             align: 'left'\n *         }\n *     } );\n *     var button2 = new OO.ui.ButtonWidget( {\n *         label: 'Add item'\n *     });\n *     var buttonGroup = new OO.ui.ButtonGroupWidget( {\n *         items: [button1, button2]\n *     } );\n *     $( 'body' ).append( buttonGroup.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add\n */\nOO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonGroupWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonGroupWidget' );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.mixin.GroupElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonGroupWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.ButtonGroupWidget.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tif ( this.items[ 0 ] ) {\n\t\t\tthis.items[ 0 ].focus();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonGroupWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * IconWidget is a generic widget for {@link OO.ui.mixin.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,\n * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]\n * for a list of icons included in the library.\n *\n *     @example\n *     // An icon widget with a label\n *     var myIcon = new OO.ui.IconWidget( {\n *         icon: 'help',\n *         iconTitle: 'Help'\n *      } );\n *      // Create a label.\n *      var iconLabel = new OO.ui.LabelWidget( {\n *          label: 'Help'\n *      } );\n *      $( 'body' ).append( myIcon.$element, iconLabel.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.IconWidget = function OoUiIconWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.IconWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-iconWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.IconWidget.static.tagName = 'span';\n","/**\n * IndicatorWidgets create indicators, which are small graphics that are generally used to draw\n * attention to the status of an item or to clarify the function of a control. For a list of\n * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of an indicator widget\n *     var indicator1 = new OO.ui.IndicatorWidget( {\n *         indicator: 'alert'\n *     } );\n *\n *     // Create a fieldset layout to add a label\n *     var fieldset = new OO.ui.FieldsetLayout();\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.IndicatorWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indicatorWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.IndicatorWidget.static.tagName = 'span';\n","/**\n * LabelWidgets help identify the function of interface elements. Each LabelWidget can\n * be configured with a `label` option that is set to a string, a label node, or a function:\n *\n * - String: a plaintext string\n * - jQuery selection: a jQuery selection, used for anything other than a plaintext label, e.g., a\n *   label that includes a link or special styling, such as a gray color or additional graphical elements.\n * - Function: a function that will produce a string in the future. Functions are used\n *   in cases where the value of the label is not currently defined.\n *\n * In addition, the LabelWidget can be associated with an {@link OO.ui.InputWidget input widget}, which\n * will come into focus when the label is clicked.\n *\n *     @example\n *     // Examples of LabelWidgets\n *     var label1 = new OO.ui.LabelWidget( {\n *         label: 'plaintext label'\n *     } );\n *     var label2 = new OO.ui.LabelWidget( {\n *         label: $( '<a href=\"default.html\">jQuery label</a>' )\n *     } );\n *     // Create a fieldset layout with fields for each example\n *     var fieldset = new OO.ui.FieldsetLayout();\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( label1 ),\n *         new OO.ui.FieldLayout( label2 )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.InputWidget} [input] {@link OO.ui.InputWidget Input widget} that uses the label.\n *  Clicking the label will focus the specified input field.\n */\nOO.ui.LabelWidget = function OoUiLabelWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.LabelWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );\n\tOO.ui.mixin.TitledElement.call( this, config );\n\n\t// Properties\n\tthis.input = config.input;\n\n\t// Initialization\n\tif ( this.input ) {\n\t\tif ( this.input.getInputId() ) {\n\t\t\tthis.$element.attr( 'for', this.input.getInputId() );\n\t\t} else {\n\t\t\tthis.$label.on( 'click', function () {\n\t\t\t\tthis.input.simulateLabelClick();\n\t\t\t\treturn false;\n\t\t\t}.bind( this ) );\n\t\t}\n\t}\n\tthis.$element.addClass( 'oo-ui-labelWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.LabelWidget.static.tagName = 'label';\n","/**\n * PendingElement is a mixin that is used to create elements that notify users that something is happening\n * and that they should wait before proceeding. The pending state is visually represented with a pending\n * texture that appears in the head of a pending {@link OO.ui.ProcessDialog process dialog} or in the input\n * field of a {@link OO.ui.TextInputWidget text input widget}.\n *\n * Currently, {@link OO.ui.ActionWidget Action widgets}, which mix in this class, can also be marked as pending, but only when\n * used in {@link OO.ui.MessageDialog message dialogs}. The behavior is not currently supported for action widgets used\n * in process dialogs.\n *\n *     @example\n *     function MessageDialog( config ) {\n *         MessageDialog.parent.call( this, config );\n *     }\n *     OO.inheritClass( MessageDialog, OO.ui.MessageDialog );\n *\n *     MessageDialog.static.name = 'myMessageDialog';\n *     MessageDialog.static.actions = [\n *         { action: 'save', label: 'Done', flags: 'primary' },\n *         { label: 'Cancel', flags: 'safe' }\n *     ];\n *\n *     MessageDialog.prototype.initialize = function () {\n *         MessageDialog.parent.prototype.initialize.apply( this, arguments );\n *         this.content = new OO.ui.PanelLayout( { $: this.$, padded: true } );\n *         this.content.$element.append( '<p>Click the \\'Done\\' action widget to see its pending state. Note that action widgets can be marked pending in message dialogs but not process dialogs.</p>' );\n *         this.$body.append( this.content.$element );\n *     };\n *     MessageDialog.prototype.getBodyHeight = function () {\n *         return 100;\n *     }\n *     MessageDialog.prototype.getActionProcess = function ( action ) {\n *         var dialog = this;\n *         if ( action === 'save' ) {\n *             dialog.getActions().get({actions: 'save'})[0].pushPending();\n *             return new OO.ui.Process()\n *             .next( 1000 )\n *             .next( function () {\n *                 dialog.getActions().get({actions: 'save'})[0].popPending();\n *             } );\n *         }\n *         return MessageDialog.parent.prototype.getActionProcess.call( this, action );\n *     };\n *\n *     var windowManager = new OO.ui.WindowManager();\n *     $( 'body' ).append( windowManager.$element );\n *\n *     var dialog = new MessageDialog();\n *     windowManager.addWindows( [ dialog ] );\n *     windowManager.openWindow( dialog );\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element\n */\nOO.ui.mixin.PendingElement = function OoUiMixinPendingElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.pending = 0;\n\tthis.$pending = null;\n\n\t// Initialisation\n\tthis.setPendingElement( config.$pending || this.$element );\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.PendingElement );\n\n/* Methods */\n\n/**\n * Set the pending element (and clean up any existing one).\n *\n * @param {jQuery} $pending The element to set to pending.\n */\nOO.ui.mixin.PendingElement.prototype.setPendingElement = function ( $pending ) {\n\tif ( this.$pending ) {\n\t\tthis.$pending.removeClass( 'oo-ui-pendingElement-pending' );\n\t}\n\n\tthis.$pending = $pending;\n\tif ( this.pending > 0 ) {\n\t\tthis.$pending.addClass( 'oo-ui-pendingElement-pending' );\n\t}\n};\n\n/**\n * Check if an element is pending.\n *\n * @return {boolean} Element is pending\n */\nOO.ui.mixin.PendingElement.prototype.isPending = function () {\n\treturn !!this.pending;\n};\n\n/**\n * Increase the pending counter. The pending state will remain active until the counter is zero\n * (i.e., the number of calls to #pushPending and #popPending is the same).\n *\n * @chainable\n */\nOO.ui.mixin.PendingElement.prototype.pushPending = function () {\n\tif ( this.pending === 0 ) {\n\t\tthis.$pending.addClass( 'oo-ui-pendingElement-pending' );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.pending++;\n\n\treturn this;\n};\n\n/**\n * Decrease the pending counter. The pending state will remain active until the counter is zero\n * (i.e., the number of calls to #pushPending and #popPending is the same).\n *\n * @chainable\n */\nOO.ui.mixin.PendingElement.prototype.popPending = function () {\n\tif ( this.pending === 1 ) {\n\t\tthis.$pending.removeClass( 'oo-ui-pendingElement-pending' );\n\t\tthis.updateThemeClasses();\n\t}\n\tthis.pending = Math.max( 0, this.pending - 1 );\n\n\treturn this;\n};\n","/**\n * Element that will stick adjacent to a specified container, even when it is inserted elsewhere\n * in the document (for example, in an OO.ui.Window's $overlay).\n *\n * The elements's position is automatically calculated and maintained when window is resized or the\n * page is scrolled. If you reposition the container manually, you have to call #position to make\n * sure the element is still placed correctly.\n *\n * As positioning is only possible when both the element and the container are attached to the DOM\n * and visible, it's only done after you call #togglePositioning. You might want to do this inside\n * the #toggle method to display a floating popup, for example.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$floatable] Node to position, assigned to #$floatable, omit to use #$element\n * @cfg {jQuery} [$floatableContainer] Node to position adjacent to\n * @cfg {string} [verticalPosition='below'] Where to position $floatable vertically:\n *  'below': Directly below $floatableContainer, aligning f's top edge with fC's bottom edge\n *  'above': Directly above $floatableContainer, aligning f's bottom edge with fC's top edge\n *  'top': Align the top edge with $floatableContainer's top edge\n *  'bottom': Align the bottom edge with $floatableContainer's bottom edge\n *  'center': Vertically align the center with $floatableContainer's center\n * @cfg {string} [horizontalPosition='start'] Where to position $floatable horizontally:\n *  'before': Directly before $floatableContainer, aligning f's end edge with fC's start edge\n *  'after': Directly after $floatableContainer, algining f's start edge with fC's end edge\n *  'start': Align the start (left in LTR, right in RTL) edge with $floatableContainer's start edge\n *  'end': Align the end (right in LTR, left in RTL) edge with $floatableContainer's end edge\n *  'center': Horizontally align the center with $floatableContainer's center\n * @cfg {boolean} [hideWhenOutOfView=true] Whether to hide the floatable element if the container\n *  is out of view\n */\nOO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$floatable = null;\n\tthis.$floatableContainer = null;\n\tthis.$floatableWindow = null;\n\tthis.$floatableClosestScrollable = null;\n\tthis.onFloatableScrollHandler = this.position.bind( this );\n\tthis.onFloatableWindowResizeHandler = this.position.bind( this );\n\n\t// Initialization\n\tthis.setFloatableContainer( config.$floatableContainer );\n\tthis.setFloatableElement( config.$floatable || this.$element );\n\tthis.setVerticalPosition( config.verticalPosition || 'below' );\n\tthis.setHorizontalPosition( config.horizontalPosition || 'start' );\n\tthis.hideWhenOutOfView = config.hideWhenOutOfView === undefined ? true : !!config.hideWhenOutOfView;\n};\n\n/* Methods */\n\n/**\n * Set floatable element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $floatable Element to make floatable\n */\nOO.ui.mixin.FloatableElement.prototype.setFloatableElement = function ( $floatable ) {\n\tif ( this.$floatable ) {\n\t\tthis.$floatable.removeClass( 'oo-ui-floatableElement-floatable' );\n\t\tthis.$floatable.css( { left: '', top: '' } );\n\t}\n\n\tthis.$floatable = $floatable.addClass( 'oo-ui-floatableElement-floatable' );\n\tthis.position();\n};\n\n/**\n * Set floatable container.\n *\n * The element will be positioned relative to the specified container.\n *\n * @param {jQuery|null} $floatableContainer Container to keep visible, or null to unset\n */\nOO.ui.mixin.FloatableElement.prototype.setFloatableContainer = function ( $floatableContainer ) {\n\tthis.$floatableContainer = $floatableContainer;\n\tif ( this.$floatable ) {\n\t\tthis.position();\n\t}\n};\n\n/**\n * Change how the element is positioned vertically.\n *\n * @param {string} position 'below', 'above', 'top', 'bottom' or 'center'\n */\nOO.ui.mixin.FloatableElement.prototype.setVerticalPosition = function ( position ) {\n\tif ( [ 'below', 'above', 'top', 'bottom', 'center' ].indexOf( position ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for vertical position: ' + position );\n\t}\n\tif ( this.verticalPosition !== position ) {\n\t\tthis.verticalPosition = position;\n\t\tif ( this.$floatable ) {\n\t\t\tthis.position();\n\t\t}\n\t}\n};\n\n/**\n * Change how the element is positioned horizontally.\n *\n * @param {string} position 'before', 'after', 'start', 'end' or 'center'\n */\nOO.ui.mixin.FloatableElement.prototype.setHorizontalPosition = function ( position ) {\n\tif ( [ 'before', 'after', 'start', 'end', 'center' ].indexOf( position ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for horizontal position: ' + position );\n\t}\n\tif ( this.horizontalPosition !== position ) {\n\t\tthis.horizontalPosition = position;\n\t\tif ( this.$floatable ) {\n\t\t\tthis.position();\n\t\t}\n\t}\n};\n\n/**\n * Toggle positioning.\n *\n * Do not turn positioning on until after the element is attached to the DOM and visible.\n *\n * @param {boolean} [positioning] Enable positioning, omit to toggle\n * @chainable\n */\nOO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positioning ) {\n\tvar closestScrollableOfContainer;\n\n\tif ( !this.$floatable || !this.$floatableContainer ) {\n\t\treturn this;\n\t}\n\n\tpositioning = positioning === undefined ? !this.positioning : !!positioning;\n\n\tif ( positioning && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'FloatableElement#togglePositioning: Before calling this method, the element must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( this.positioning !== positioning ) {\n\t\tthis.positioning = positioning;\n\n\t\tthis.needsCustomPosition =\n\t\t\tthis.verticalPostion !== 'below' ||\n\t\t\tthis.horizontalPosition !== 'start' ||\n\t\t\t!OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] );\n\n\t\tclosestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] );\n\t\t// If the scrollable is the root, we have to listen to scroll events\n\t\t// on the window because of browser inconsistencies.\n\t\tif ( $( closestScrollableOfContainer ).is( 'html, body' ) ) {\n\t\t\tclosestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer );\n\t\t}\n\n\t\tif ( positioning ) {\n\t\t\tthis.$floatableWindow = $( this.getElementWindow() );\n\t\t\tthis.$floatableWindow.on( 'resize', this.onFloatableWindowResizeHandler );\n\n\t\t\tthis.$floatableClosestScrollable = $( closestScrollableOfContainer );\n\t\t\tthis.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler );\n\n\t\t\t// Initial position after visible\n\t\t\tthis.position();\n\t\t} else {\n\t\t\tif ( this.$floatableWindow ) {\n\t\t\t\tthis.$floatableWindow.off( 'resize', this.onFloatableWindowResizeHandler );\n\t\t\t\tthis.$floatableWindow = null;\n\t\t\t}\n\n\t\t\tif ( this.$floatableClosestScrollable ) {\n\t\t\t\tthis.$floatableClosestScrollable.off( 'scroll', this.onFloatableScrollHandler );\n\t\t\t\tthis.$floatableClosestScrollable = null;\n\t\t\t}\n\n\t\t\tthis.$floatable.css( { left: '', right: '', top: '' } );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Check whether the bottom edge of the given element is within the viewport of the given container.\n *\n * @private\n * @param {jQuery} $element\n * @param {jQuery} $container\n * @return {boolean}\n */\nOO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) {\n\tvar elemRect, contRect, topEdgeInBounds, bottomEdgeInBounds, leftEdgeInBounds, rightEdgeInBounds,\n\t\tstartEdgeInBounds, endEdgeInBounds,\n\t\tdirection = $element.css( 'direction' );\n\n\telemRect = $element[ 0 ].getBoundingClientRect();\n\tif ( $container[ 0 ] === window ) {\n\t\tcontRect = {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tright: document.documentElement.clientWidth,\n\t\t\tbottom: document.documentElement.clientHeight\n\t\t};\n\t} else {\n\t\tcontRect = $container[ 0 ].getBoundingClientRect();\n\t}\n\n\ttopEdgeInBounds = elemRect.top >= contRect.top && elemRect.top <= contRect.bottom;\n\tbottomEdgeInBounds = elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom;\n\tleftEdgeInBounds = elemRect.left >= contRect.left && elemRect.left <= contRect.right;\n\trightEdgeInBounds = elemRect.right >= contRect.left && elemRect.right <= contRect.right;\n\tif ( direction === 'rtl' ) {\n\t\tstartEdgeInBounds = rightEdgeInBounds;\n\t\tendEdgeInBounds = leftEdgeInBounds;\n\t} else {\n\t\tstartEdgeInBounds = leftEdgeInBounds;\n\t\tendEdgeInBounds = rightEdgeInBounds;\n\t}\n\n\tif ( this.verticalPosition === 'below' && !bottomEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.verticalPosition === 'above' && !topEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.horizontalPosition === 'before' && !startEdgeInBounds ) {\n\t\treturn false;\n\t}\n\tif ( this.horizontalPosition === 'after' && !endEdgeInBounds ) {\n\t\treturn false;\n\t}\n\n\t// The other positioning values are all about being inside the container,\n\t// so in those cases all we care about is that any part of the container is visible.\n\treturn elemRect.top <= contRect.bottom && elemRect.bottom >= contRect.top &&\n\t\telemRect.left <= contRect.right && elemRect.right >= contRect.left;\n};\n\n/**\n * Position the floatable below its container.\n *\n * This should only be done when both of them are attached to the DOM and visible.\n *\n * @chainable\n */\nOO.ui.mixin.FloatableElement.prototype.position = function () {\n\tif ( !this.positioning ) {\n\t\treturn this;\n\t}\n\n\tif ( !(\n\t\t// To continue, some things need to be true:\n\t\t// The element must actually be in the DOM\n\t\tthis.isElementAttached() && (\n\t\t\t// The closest scrollable is the current window\n\t\t\tthis.$floatableClosestScrollable[ 0 ] === this.getElementWindow() ||\n\t\t\t// OR is an element in the element's DOM\n\t\t\t$.contains( this.getElementDocument(), this.$floatableClosestScrollable[ 0 ] )\n\t\t)\n\t) ) {\n\t\t// Abort early if important parts of the widget are no longer attached to the DOM\n\t\treturn this;\n\t}\n\n\tif ( this.hideWhenOutOfView && !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) {\n\t\tthis.$floatable.addClass( 'oo-ui-element-hidden' );\n\t\treturn this;\n\t} else {\n\t\tthis.$floatable.removeClass( 'oo-ui-element-hidden' );\n\t}\n\n\tif ( !this.needsCustomPosition ) {\n\t\treturn this;\n\t}\n\n\tthis.$floatable.css( this.computePosition() );\n\n\t// We updated the position, so re-evaluate the clipping state.\n\t// (ClippableElement does not listen to 'scroll' events on $floatableContainer's parent, and so\n\t// will not notice the need to update itself.)\n\t// TODO: This is terrible, we shouldn't need to know about ClippableElement at all here. Why does\n\t// it not listen to the right events in the right places?\n\tif ( this.clip ) {\n\t\tthis.clip();\n\t}\n\n\treturn this;\n};\n\n/**\n * Compute how #$floatable should be positioned based on the position of #$floatableContainer\n * and the positioning settings. This is a helper for #position that shouldn't be called directly,\n * but may be overridden by subclasses if they want to change or add to the positioning logic.\n *\n * @return {Object} New position to apply with .css(). Keys are 'top', 'left', 'bottom' and 'right'.\n */\nOO.ui.mixin.FloatableElement.prototype.computePosition = function () {\n\tvar isBody, scrollableX, scrollableY, containerPos,\n\t\thorizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft,\n\t\tnewPos = { top: '', left: '', bottom: '', right: '' },\n\t\tdirection = this.$floatableContainer.css( 'direction' ),\n\t\t$offsetParent = this.$floatable.offsetParent();\n\n\tif ( $offsetParent.is( 'html' ) ) {\n\t\t// The innerHeight/Width and clientHeight/Width calculations don't work well on the\n\t\t// <html> element, but they do work on the <body>\n\t\t$offsetParent = $( $offsetParent[ 0 ].ownerDocument.body );\n\t}\n\tisBody = $offsetParent.is( 'body' );\n\tscrollableX = $offsetParent.css( 'overflow-x' ) === 'scroll' || $offsetParent.css( 'overflow-x' ) === 'auto';\n\tscrollableY = $offsetParent.css( 'overflow-y' ) === 'scroll' || $offsetParent.css( 'overflow-y' ) === 'auto';\n\n\tvertScrollbarWidth = $offsetParent.innerWidth() - $offsetParent.prop( 'clientWidth' );\n\thorizScrollbarHeight = $offsetParent.innerHeight() - $offsetParent.prop( 'clientHeight' );\n\t// We don't need to compute and add scrollTop and scrollLeft if the scrollable container is the body,\n\t// or if it isn't scrollable\n\tscrollTop = scrollableY && !isBody ? $offsetParent.scrollTop() : 0;\n\tscrollLeft = scrollableX && !isBody ? OO.ui.Element.static.getScrollLeft( $offsetParent[ 0 ] ) : 0;\n\n\t// Avoid passing the <body> to getRelativePosition(), because it won't return what we expect\n\t// if the <body> has a margin\n\tcontainerPos = isBody ?\n\t\tthis.$floatableContainer.offset() :\n\t\tOO.ui.Element.static.getRelativePosition( this.$floatableContainer, $offsetParent );\n\tcontainerPos.bottom = containerPos.top + this.$floatableContainer.outerHeight();\n\tcontainerPos.right = containerPos.left + this.$floatableContainer.outerWidth();\n\tcontainerPos.start = direction === 'rtl' ? containerPos.right : containerPos.left;\n\tcontainerPos.end = direction === 'rtl' ? containerPos.left : containerPos.right;\n\n\tif ( this.verticalPosition === 'below' ) {\n\t\tnewPos.top = containerPos.bottom;\n\t} else if ( this.verticalPosition === 'above' ) {\n\t\tnewPos.bottom = $offsetParent.outerHeight() - containerPos.top;\n\t} else if ( this.verticalPosition === 'top' ) {\n\t\tnewPos.top = containerPos.top;\n\t} else if ( this.verticalPosition === 'bottom' ) {\n\t\tnewPos.bottom = $offsetParent.outerHeight() - containerPos.bottom;\n\t} else if ( this.verticalPosition === 'center' ) {\n\t\tnewPos.top = containerPos.top +\n\t\t\t( this.$floatableContainer.height() - this.$floatable.height() ) / 2;\n\t}\n\n\tif ( this.horizontalPosition === 'before' ) {\n\t\tnewPos.end = containerPos.start;\n\t} else if ( this.horizontalPosition === 'after' ) {\n\t\tnewPos.start = containerPos.end;\n\t} else if ( this.horizontalPosition === 'start' ) {\n\t\tnewPos.start = containerPos.start;\n\t} else if ( this.horizontalPosition === 'end' ) {\n\t\tnewPos.end = containerPos.end;\n\t} else if ( this.horizontalPosition === 'center' ) {\n\t\tnewPos.left = containerPos.left +\n\t\t\t( this.$floatableContainer.width() - this.$floatable.width() ) / 2;\n\t}\n\n\tif ( newPos.start !== undefined ) {\n\t\tif ( direction === 'rtl' ) {\n\t\t\tnewPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.start;\n\t\t} else {\n\t\t\tnewPos.left = newPos.start;\n\t\t}\n\t\tdelete newPos.start;\n\t}\n\tif ( newPos.end !== undefined ) {\n\t\tif ( direction === 'rtl' ) {\n\t\t\tnewPos.left = newPos.end;\n\t\t} else {\n\t\t\tnewPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.end;\n\t\t}\n\t\tdelete newPos.end;\n\t}\n\n\t// Account for scroll position\n\tif ( newPos.top !== '' ) {\n\t\tnewPos.top += scrollTop;\n\t}\n\tif ( newPos.bottom !== '' ) {\n\t\tnewPos.bottom -= scrollTop;\n\t}\n\tif ( newPos.left !== '' ) {\n\t\tnewPos.left += scrollLeft;\n\t}\n\tif ( newPos.right !== '' ) {\n\t\tnewPos.right -= scrollLeft;\n\t}\n\n\t// Account for scrollbar gutter\n\tif ( newPos.bottom !== '' ) {\n\t\tnewPos.bottom -= horizScrollbarHeight;\n\t}\n\tif ( direction === 'rtl' ) {\n\t\tif ( newPos.left !== '' ) {\n\t\t\tnewPos.left -= vertScrollbarWidth;\n\t\t}\n\t} else {\n\t\tif ( newPos.right !== '' ) {\n\t\t\tnewPos.right -= vertScrollbarWidth;\n\t\t}\n\t}\n\n\treturn newPos;\n};\n","/**\n * Element that can be automatically clipped to visible boundaries.\n *\n * Whenever the element's natural height changes, you have to call\n * {@link OO.ui.mixin.ClippableElement#clip} to make sure it's still\n * clipping correctly.\n *\n * The dimensions of #$clippableContainer will be compared to the boundaries of the\n * nearest scrollable container. If #$clippableContainer is too tall and/or too wide,\n * then #$clippable will be given a fixed reduced height and/or width and will be made\n * scrollable. By default, #$clippable and #$clippableContainer are the same element,\n * but you can build a static footer by setting #$clippableContainer to an element that contains\n * #$clippable and the footer.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$clippable] Node to clip, assigned to #$clippable, omit to use #$element\n * @cfg {jQuery} [$clippableContainer] Node to keep visible, assigned to #$clippableContainer,\n *   omit to use #$clippable\n */\nOO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.$clippable = null;\n\tthis.$clippableContainer = null;\n\tthis.clipping = false;\n\tthis.clippedHorizontally = false;\n\tthis.clippedVertically = false;\n\tthis.$clippableScrollableContainer = null;\n\tthis.$clippableScroller = null;\n\tthis.$clippableWindow = null;\n\tthis.idealWidth = null;\n\tthis.idealHeight = null;\n\tthis.onClippableScrollHandler = this.clip.bind( this );\n\tthis.onClippableWindowResizeHandler = this.clip.bind( this );\n\n\t// Initialization\n\tif ( config.$clippableContainer ) {\n\t\tthis.setClippableContainer( config.$clippableContainer );\n\t}\n\tthis.setClippableElement( config.$clippable || this.$element );\n};\n\n/* Methods */\n\n/**\n * Set clippable element.\n *\n * If an element is already set, it will be cleaned up before setting up the new element.\n *\n * @param {jQuery} $clippable Element to make clippable\n */\nOO.ui.mixin.ClippableElement.prototype.setClippableElement = function ( $clippable ) {\n\tif ( this.$clippable ) {\n\t\tthis.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );\n\t\tthis.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );\n\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\t}\n\n\tthis.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );\n\tthis.clip();\n};\n\n/**\n * Set clippable container.\n *\n * This is the container that will be measured when deciding whether to clip. When clipping,\n * #$clippable will be resized in order to keep the clippable container fully visible.\n *\n * If the clippable container is unset, #$clippable will be used.\n *\n * @param {jQuery|null} $clippableContainer Container to keep visible, or null to unset\n */\nOO.ui.mixin.ClippableElement.prototype.setClippableContainer = function ( $clippableContainer ) {\n\tthis.$clippableContainer = $clippableContainer;\n\tif ( this.$clippable ) {\n\t\tthis.clip();\n\t}\n};\n\n/**\n * Toggle clipping.\n *\n * Do not turn clipping on until after the element is attached to the DOM and visible.\n *\n * @param {boolean} [clipping] Enable clipping, omit to toggle\n * @chainable\n */\nOO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {\n\tclipping = clipping === undefined ? !this.clipping : !!clipping;\n\n\tif ( clipping && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'ClippableElement#toggleClipping: Before calling this method, the element must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( this.clipping !== clipping ) {\n\t\tthis.clipping = clipping;\n\t\tif ( clipping ) {\n\t\t\tthis.$clippableScrollableContainer = $( this.getClosestScrollableElementContainer() );\n\t\t\t// If the clippable container is the root, we have to listen to scroll events and check\n\t\t\t// jQuery.scrollTop on the window because of browser inconsistencies\n\t\t\tthis.$clippableScroller = this.$clippableScrollableContainer.is( 'html, body' ) ?\n\t\t\t\t$( OO.ui.Element.static.getWindow( this.$clippableScrollableContainer ) ) :\n\t\t\t\tthis.$clippableScrollableContainer;\n\t\t\tthis.$clippableScroller.on( 'scroll', this.onClippableScrollHandler );\n\t\t\tthis.$clippableWindow = $( this.getElementWindow() )\n\t\t\t\t.on( 'resize', this.onClippableWindowResizeHandler );\n\t\t\t// Initial clip after visible\n\t\t\tthis.clip();\n\t\t} else {\n\t\t\tthis.$clippable.css( {\n\t\t\t\twidth: '',\n\t\t\t\theight: '',\n\t\t\t\tmaxWidth: '',\n\t\t\t\tmaxHeight: '',\n\t\t\t\toverflowX: '',\n\t\t\t\toverflowY: ''\n\t\t\t} );\n\t\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\n\t\t\tthis.$clippableScrollableContainer = null;\n\t\t\tthis.$clippableScroller.off( 'scroll', this.onClippableScrollHandler );\n\t\t\tthis.$clippableScroller = null;\n\t\t\tthis.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );\n\t\t\tthis.$clippableWindow = null;\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if the element will be clipped to fit the visible area of the nearest scrollable container.\n *\n * @return {boolean} Element will be clipped to the visible area\n */\nOO.ui.mixin.ClippableElement.prototype.isClipping = function () {\n\treturn this.clipping;\n};\n\n/**\n * Check if the bottom or right of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClipped = function () {\n\treturn this.clippedHorizontally || this.clippedVertically;\n};\n\n/**\n * Check if the right of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClippedHorizontally = function () {\n\treturn this.clippedHorizontally;\n};\n\n/**\n * Check if the bottom of the element is being clipped by the nearest scrollable container.\n *\n * @return {boolean} Part of the element is being clipped\n */\nOO.ui.mixin.ClippableElement.prototype.isClippedVertically = function () {\n\treturn this.clippedVertically;\n};\n\n/**\n * Set the ideal size. These are the dimensions #$clippable will have when it's not being clipped.\n *\n * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix\n * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix\n */\nOO.ui.mixin.ClippableElement.prototype.setIdealSize = function ( width, height ) {\n\tthis.idealWidth = width;\n\tthis.idealHeight = height;\n\n\tif ( !this.clipping ) {\n\t\t// Update dimensions\n\t\tthis.$clippable.css( { width: width, height: height } );\n\t}\n\t// While clipping, idealWidth and idealHeight are not considered\n};\n\n/**\n * Clip element to visible boundaries and allow scrolling when needed. You should call this method\n * when the element's natural height changes.\n *\n * Element will be clipped the bottom or right of the element is within 10px of the edge of, or\n * overlapped by, the visible area of the nearest scrollable container.\n *\n * Because calling clip() when the natural height changes isn't always possible, we also set\n * max-height when the element isn't being clipped. This means that if the element tries to grow\n * beyond the edge, something reasonable will happen before clip() is called.\n *\n * @chainable\n */\nOO.ui.mixin.ClippableElement.prototype.clip = function () {\n\tvar $container, extraHeight, extraWidth, ccOffset,\n\t\t$scrollableContainer, scOffset, scHeight, scWidth,\n\t\tccWidth, scrollerIsWindow, scrollTop, scrollLeft,\n\t\tdesiredWidth, desiredHeight, allotedWidth, allotedHeight,\n\t\tnaturalWidth, naturalHeight, clipWidth, clipHeight,\n\t\tbuffer = 7; // Chosen by fair dice roll\n\n\tif ( !this.clipping ) {\n\t\t// this.$clippableScrollableContainer and this.$clippableWindow are null, so the below will fail\n\t\treturn this;\n\t}\n\n\t$container = this.$clippableContainer || this.$clippable;\n\textraHeight = $container.outerHeight() - this.$clippable.outerHeight();\n\textraWidth = $container.outerWidth() - this.$clippable.outerWidth();\n\tccOffset = $container.offset();\n\tif ( this.$clippableScrollableContainer.is( 'html, body' ) ) {\n\t\t$scrollableContainer = this.$clippableWindow;\n\t\tscOffset = { top: 0, left: 0 };\n\t} else {\n\t\t$scrollableContainer = this.$clippableScrollableContainer;\n\t\tscOffset = $scrollableContainer.offset();\n\t}\n\tscHeight = $scrollableContainer.innerHeight() - buffer;\n\tscWidth = $scrollableContainer.innerWidth() - buffer;\n\tccWidth = $container.outerWidth() + buffer;\n\tscrollerIsWindow = this.$clippableScroller[ 0 ] === this.$clippableWindow[ 0 ];\n\tscrollTop = scrollerIsWindow ? this.$clippableScroller.scrollTop() : 0;\n\tscrollLeft = scrollerIsWindow ? this.$clippableScroller.scrollLeft() : 0;\n\tdesiredWidth = ccOffset.left < 0 ?\n\t\tccWidth + ccOffset.left :\n\t\t( scOffset.left + scrollLeft + scWidth ) - ccOffset.left;\n\tdesiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top;\n\t// It should never be desirable to exceed the dimensions of the browser viewport... right?\n\tdesiredWidth = Math.min( desiredWidth, document.documentElement.clientWidth );\n\tdesiredHeight = Math.min( desiredHeight, document.documentElement.clientHeight );\n\tallotedWidth = Math.ceil( desiredWidth - extraWidth );\n\tallotedHeight = Math.ceil( desiredHeight - extraHeight );\n\tnaturalWidth = this.$clippable.prop( 'scrollWidth' );\n\tnaturalHeight = this.$clippable.prop( 'scrollHeight' );\n\tclipWidth = allotedWidth < naturalWidth;\n\tclipHeight = allotedHeight < naturalHeight;\n\n\tif ( clipWidth ) {\n\t\t// The order matters here. If overflow is not set first, Chrome displays bogus scrollbars. See T157672.\n\t\t// Forcing a reflow is a smaller workaround than calling reconsiderScrollbars() for this case.\n\t\tthis.$clippable.css( 'overflowX', 'scroll' );\n\t\tvoid this.$clippable[ 0 ].offsetHeight; // Force reflow\n\t\tthis.$clippable.css( {\n\t\t\twidth: Math.max( 0, allotedWidth ),\n\t\t\tmaxWidth: ''\n\t\t} );\n\t} else {\n\t\tthis.$clippable.css( {\n\t\t\toverflowX: '',\n\t\t\twidth: this.idealWidth || '',\n\t\t\tmaxWidth: Math.max( 0, allotedWidth )\n\t\t} );\n\t}\n\tif ( clipHeight ) {\n\t\t// The order matters here. If overflow is not set first, Chrome displays bogus scrollbars. See T157672.\n\t\t// Forcing a reflow is a smaller workaround than calling reconsiderScrollbars() for this case.\n\t\tthis.$clippable.css( 'overflowY', 'scroll' );\n\t\tvoid this.$clippable[ 0 ].offsetHeight; // Force reflow\n\t\tthis.$clippable.css( {\n\t\t\theight: Math.max( 0, allotedHeight ),\n\t\t\tmaxHeight: ''\n\t\t} );\n\t} else {\n\t\tthis.$clippable.css( {\n\t\t\toverflowY: '',\n\t\t\theight: this.idealHeight || '',\n\t\t\tmaxHeight: Math.max( 0, allotedHeight )\n\t\t} );\n\t}\n\n\t// If we stopped clipping in at least one of the dimensions\n\tif ( ( this.clippedHorizontally && !clipWidth ) || ( this.clippedVertically && !clipHeight ) ) {\n\t\tOO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );\n\t}\n\n\tthis.clippedHorizontally = clipWidth;\n\tthis.clippedVertically = clipHeight;\n\n\treturn this;\n};\n","/**\n * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.\n * By default, each popup has an anchor that points toward its origin.\n * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.\n *\n * Unlike most widgets, PopupWidget is initially hidden and must be shown by calling #toggle.\n *\n *     @example\n *     // A popup widget.\n *     var popup = new OO.ui.PopupWidget( {\n *         $content: $( '<p>Hi there!</p>' ),\n *         padded: true,\n *         width: 300\n *     } );\n *\n *     $( 'body' ).append( popup.$element );\n *     // To display the popup, toggle the visibility to 'true'.\n *     popup.toggle( true );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.FloatableElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [width=320] Width of popup in pixels\n * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.\n * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup\n * @cfg {string} [position='below'] Where to position the popup relative to $floatableContainer\n *  'above': Put popup above $floatableContainer; anchor points down to the horizontal center\n *           of $floatableContainer\n *  'below': Put popup below $floatableContainer; anchor points up to the horizontal center\n *           of $floatableContainer\n *  'before': Put popup to the left (LTR) / right (RTL) of $floatableContainer; anchor points\n *            endwards (right/left) to the vertical center of $floatableContainer\n *  'after': Put popup to the right (LTR) / left (RTL) of $floatableContainer; anchor points\n *            startwards (left/right) to the vertical center of $floatableContainer\n * @cfg {string} [align='center'] How to align the popup to $floatableContainer\n *  'forwards': If position is above/below, move the popup as far endwards (right in LTR, left in RTL)\n *              as possible while still keeping the anchor within the popup;\n *              if position is before/after, move the popup as far downwards as possible.\n *  'backwards': If position is above/below, move the popup as far startwards (left in LTR, right in RTL)\n *               as possible while still keeping the anchor within the popup;\n *               if position in before/after, move the popup as far upwards as possible.\n *  'center': Horizontally (if position is above/below) or vertically (before/after) align the center\n *            of the popup with the center of $floatableContainer.\n * 'force-left': Alias for 'forwards' in LTR and 'backwards' in RTL\n * 'force-right': Alias for 'backwards' in RTL and 'forwards' in LTR\n * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.\n *  See the [OOjs UI docs on MediaWiki][3] for an example.\n *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample\n * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.\n * @cfg {jQuery} [$content] Content to append to the popup's body\n * @cfg {jQuery} [$footer] Content to append to the popup's footer\n * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.\n * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.\n *  This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]\n *  for an example.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#autocloseExample\n * @cfg {boolean} [head=false] Show a popup header that contains a #label (if specified) and close\n *  button.\n * @cfg {boolean} [padded=false] Add padding to the popup's body\n */\nOO.ui.PopupWidget = function OoUiPopupWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupWidget.parent.call( this, config );\n\n\t// Properties (must be set before ClippableElement constructor call)\n\tthis.$body = $( '<div>' );\n\tthis.$popup = $( '<div>' );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, {\n\t\t$clippable: this.$body,\n\t\t$clippableContainer: this.$popup\n\t} ) );\n\tOO.ui.mixin.FloatableElement.call( this, config );\n\n\t// Properties\n\tthis.$anchor = $( '<div>' );\n\t// If undefined, will be computed lazily in computePosition()\n\tthis.$container = config.$container;\n\tthis.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;\n\tthis.autoClose = !!config.autoClose;\n\tthis.$autoCloseIgnore = config.$autoCloseIgnore;\n\tthis.transitionTimeout = null;\n\tthis.anchored = false;\n\tthis.width = config.width !== undefined ? config.width : 320;\n\tthis.height = config.height !== undefined ? config.height : null;\n\tthis.onMouseDownHandler = this.onMouseDown.bind( this );\n\tthis.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );\n\n\t// Initialization\n\tthis.toggleAnchor( config.anchor === undefined || config.anchor );\n\tthis.setAlignment( config.align || 'center' );\n\tthis.setPosition( config.position || 'below' );\n\tthis.$body.addClass( 'oo-ui-popupWidget-body' );\n\tthis.$anchor.addClass( 'oo-ui-popupWidget-anchor' );\n\tthis.$popup\n\t\t.addClass( 'oo-ui-popupWidget-popup' )\n\t\t.append( this.$body );\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupWidget' )\n\t\t.append( this.$popup, this.$anchor );\n\t// Move content, which was added to #$element by OO.ui.Widget, to the body\n\t// FIXME This is gross, we should use '$body' or something for the config\n\tif ( config.$content instanceof jQuery ) {\n\t\tthis.$body.append( config.$content );\n\t}\n\n\tif ( config.padded ) {\n\t\tthis.$body.addClass( 'oo-ui-popupWidget-body-padded' );\n\t}\n\n\tif ( config.head ) {\n\t\tthis.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );\n\t\tthis.closeButton.connect( this, { click: 'onCloseButtonClick' } );\n\t\tthis.$head = $( '<div>' )\n\t\t\t.addClass( 'oo-ui-popupWidget-head' )\n\t\t\t.append( this.$label, this.closeButton.$element );\n\t\tthis.$popup.prepend( this.$head );\n\t}\n\n\tif ( config.$footer ) {\n\t\tthis.$footer = $( '<div>' )\n\t\t\t.addClass( 'oo-ui-popupWidget-footer' )\n\t\t\t.append( config.$footer );\n\t\tthis.$popup.append( this.$footer );\n\t}\n\n\t// Initially hidden - using #toggle may cause errors if subclasses override toggle with methods\n\t// that reference properties not initialized at that time of parent class construction\n\t// TODO: Find a better way to handle post-constructor setup\n\tthis.visible = false;\n\tthis.$element.addClass( 'oo-ui-element-hidden' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.FloatableElement );\n\n/* Events */\n\n/**\n * @event ready\n *\n * The popup is ready: it is visible and has been positioned and clipped.\n */\n\n/* Methods */\n\n/**\n * Handles mouse down events.\n *\n * @private\n * @param {MouseEvent} e Mouse down event\n */\nOO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {\n\tif (\n\t\tthis.isVisible() &&\n\t\t!OO.ui.contains( this.$element.add( this.$autoCloseIgnore ).get(), e.target, true )\n\t) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * Bind mouse down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.bindMouseDownListener = function () {\n\t// Capture clicks outside popup\n\tthis.getElementWindow().addEventListener( 'mousedown', this.onMouseDownHandler, true );\n};\n\n/**\n * Handles close button click events.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.onCloseButtonClick = function () {\n\tif ( this.isVisible() ) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * Unbind mouse down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );\n};\n\n/**\n * Handles key down events.\n *\n * @private\n * @param {KeyboardEvent} e Key down event\n */\nOO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {\n\tif (\n\t\te.which === OO.ui.Keys.ESCAPE &&\n\t\tthis.isVisible()\n\t) {\n\t\tthis.toggle( false );\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n};\n\n/**\n * Bind key down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.bindKeyDownListener = function () {\n\tthis.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * @private\n */\nOO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );\n};\n\n/**\n * Show, hide, or toggle the visibility of the anchor.\n *\n * @param {boolean} [show] Show anchor, omit to toggle\n */\nOO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {\n\tshow = show === undefined ? !this.anchored : !!show;\n\n\tif ( this.anchored !== show ) {\n\t\tif ( show ) {\n\t\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored' );\n\t\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t\t} else {\n\t\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored' );\n\t\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t\t}\n\t\tthis.anchored = show;\n\t}\n};\n/**\n * Change which edge the anchor appears on.\n *\n * @param {string} edge 'top', 'bottom', 'start' or 'end'\n */\nOO.ui.PopupWidget.prototype.setAnchorEdge = function ( edge ) {\n\tif ( [ 'top', 'bottom', 'start', 'end' ].indexOf( edge ) === -1 ) {\n\t\tthrow new Error( 'Invalid value for edge: ' + edge );\n\t}\n\tif ( this.anchorEdge !== null ) {\n\t\tthis.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );\n\t}\n\tthis.anchorEdge = edge;\n\tif ( this.anchored ) {\n\t\tthis.$element.addClass( 'oo-ui-popupWidget-anchored-' + edge );\n\t}\n};\n\n/**\n * Check if the anchor is visible.\n *\n * @return {boolean} Anchor is visible\n */\nOO.ui.PopupWidget.prototype.hasAnchor = function () {\n\treturn this.anchored;\n};\n\n/**\n * Toggle visibility of the popup. The popup is initially hidden and must be shown by calling\n * `.toggle( true )` after its #$element is attached to the DOM.\n *\n * Do not show the popup while it is not attached to the DOM. The calculations required to display\n * it in the right place and with the right dimensions only work correctly while it is attached.\n * Side-effects may include broken interface and exceptions being thrown. This wasn't always\n * strictly enforced, so currently it only generates a warning in the browser console.\n *\n * @fires ready\n * @inheritdoc\n */\nOO.ui.PopupWidget.prototype.toggle = function ( show ) {\n\tvar change;\n\tshow = show === undefined ? !this.isVisible() : !!show;\n\n\tchange = show !== this.isVisible();\n\n\tif ( show && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\tif ( show && !this.$floatableContainer && this.isElementAttached() ) {\n\t\t// Fall back to the parent node if the floatableContainer is not set\n\t\tthis.setFloatableContainer( this.$element.parent() );\n\t}\n\n\t// Parent method\n\tOO.ui.PopupWidget.parent.prototype.toggle.call( this, show );\n\n\tif ( change ) {\n\t\tthis.togglePositioning( show && !!this.$floatableContainer );\n\n\t\tif ( show ) {\n\t\t\tif ( this.autoClose ) {\n\t\t\t\tthis.bindMouseDownListener();\n\t\t\t\tthis.bindKeyDownListener();\n\t\t\t}\n\t\t\tthis.updateDimensions();\n\t\t\tthis.toggleClipping( true );\n\t\t\tthis.emit( 'ready' );\n\t\t} else {\n\t\t\tthis.toggleClipping( false );\n\t\t\tif ( this.autoClose ) {\n\t\t\t\tthis.unbindMouseDownListener();\n\t\t\t\tthis.unbindKeyDownListener();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the size of the popup.\n *\n * Changing the size may also change the popup's position depending on the alignment.\n *\n * @param {number} width Width in pixels\n * @param {number} height Height in pixels\n * @param {boolean} [transition=false] Use a smooth transition\n * @chainable\n */\nOO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {\n\tthis.width = width;\n\tthis.height = height !== undefined ? height : null;\n\tif ( this.isVisible() ) {\n\t\tthis.updateDimensions( transition );\n\t}\n};\n\n/**\n * Update the size and position.\n *\n * Only use this to keep the popup properly anchored. Use #setSize to change the size, and this will\n * be called automatically.\n *\n * @param {boolean} [transition=false] Use a smooth transition\n * @chainable\n */\nOO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {\n\tvar widget = this;\n\n\t// Prevent transition from being interrupted\n\tclearTimeout( this.transitionTimeout );\n\tif ( transition ) {\n\t\t// Enable transition\n\t\tthis.$element.addClass( 'oo-ui-popupWidget-transitioning' );\n\t}\n\n\tthis.position();\n\n\tif ( transition ) {\n\t\t// Prevent transitioning after transition is complete\n\t\tthis.transitionTimeout = setTimeout( function () {\n\t\t\twidget.$element.removeClass( 'oo-ui-popupWidget-transitioning' );\n\t\t}, 200 );\n\t} else {\n\t\t// Prevent transitioning immediately\n\t\tthis.$element.removeClass( 'oo-ui-popupWidget-transitioning' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupWidget.prototype.computePosition = function () {\n\tvar direction, align, vertical, start, end, near, far, sizeProp, popupSize, anchorSize, anchorPos,\n\t\tanchorOffset, anchorMargin, parentPosition, positionProp, positionAdjustment, floatablePos,\n\t\toffsetParentPos, containerPos,\n\t\tpopupPos = {},\n\t\tanchorCss = { left: '', right: '', top: '', bottom: '' },\n\t\talignMap = {\n\t\t\tltr: {\n\t\t\t\t'force-left': 'backwards',\n\t\t\t\t'force-right': 'forwards'\n\t\t\t},\n\t\t\trtl: {\n\t\t\t\t'force-left': 'forwards',\n\t\t\t\t'force-right': 'backwards'\n\t\t\t}\n\t\t},\n\t\tanchorEdgeMap = {\n\t\t\tabove: 'bottom',\n\t\t\tbelow: 'top',\n\t\t\tbefore: 'end',\n\t\t\tafter: 'start'\n\t\t},\n\t\thPosMap = {\n\t\t\tforwards: 'start',\n\t\t\tcenter: 'center',\n\t\t\tbackwards: this.anchored ? 'before' : 'end'\n\t\t},\n\t\tvPosMap = {\n\t\t\tforwards: 'top',\n\t\t\tcenter: 'center',\n\t\t\tbackwards: 'bottom'\n\t\t};\n\n\tif ( !this.$container ) {\n\t\t// Lazy-initialize $container if not specified in constructor\n\t\tthis.$container = $( this.getClosestScrollableElementContainer() );\n\t}\n\tdirection = this.$container.css( 'direction' );\n\n\t// Set height and width before we do anything else, since it might cause our measurements\n\t// to change (e.g. due to scrollbars appearing or disappearing), and it also affects centering\n\tthis.$popup.css( {\n\t\twidth: this.width,\n\t\theight: this.height !== null ? this.height : 'auto'\n\t} );\n\n\talign = alignMap[ direction ][ this.align ] || this.align;\n\t// If the popup is positioned before or after, then the anchor positioning is vertical, otherwise horizontal\n\tvertical = this.popupPosition === 'before' || this.popupPosition === 'after';\n\tstart = vertical ? 'top' : ( direction === 'rtl' ? 'right' : 'left' );\n\tend = vertical ? 'bottom' : ( direction === 'rtl' ? 'left' : 'right' );\n\tnear = vertical ? 'top' : 'left';\n\tfar = vertical ? 'bottom' : 'right';\n\tsizeProp = vertical ? 'Height' : 'Width';\n\tpopupSize = vertical ? ( this.height || this.$popup.height() ) : this.width;\n\n\tthis.setAnchorEdge( anchorEdgeMap[ this.popupPosition ] );\n\tthis.horizontalPosition = vertical ? this.popupPosition : hPosMap[ align ];\n\tthis.verticalPosition = vertical ? vPosMap[ align ] : this.popupPosition;\n\n\t// Parent method\n\tparentPosition = OO.ui.mixin.FloatableElement.prototype.computePosition.call( this );\n\t// Find out which property FloatableElement used for positioning, and adjust that value\n\tpositionProp = vertical ?\n\t\t( parentPosition.top !== '' ? 'top' : 'bottom' ) :\n\t\t( parentPosition.left !== '' ? 'left' : 'right' );\n\n\t// Figure out where the near and far edges of the popup and $floatableContainer are\n\tfloatablePos = this.$floatableContainer.offset();\n\tfloatablePos[ far ] = floatablePos[ near ] + this.$floatableContainer[ 'outer' + sizeProp ]();\n\t// Measure where the offsetParent is and compute our position based on that and parentPosition\n\toffsetParentPos = this.$element.offsetParent()[ 0 ] === document.documentElement ?\n\t\t{ top: 0, left: 0 } :\n\t\tthis.$element.offsetParent().offset();\n\n\tif ( positionProp === near ) {\n\t\tpopupPos[ near ] = offsetParentPos[ near ] + parentPosition[ near ];\n\t\tpopupPos[ far ] = popupPos[ near ] + popupSize;\n\t} else {\n\t\tpopupPos[ far ] = offsetParentPos[ near ] +\n\t\t\tthis.$element.offsetParent()[ 'inner' + sizeProp ]() - parentPosition[ far ];\n\t\tpopupPos[ near ] = popupPos[ far ] - popupSize;\n\t}\n\n\tif ( this.anchored ) {\n\t\t// Position the anchor (which is positioned relative to the popup) to point to $floatableContainer\n\t\tanchorPos = ( floatablePos[ start ] + floatablePos[ end ] ) / 2;\n\t\tanchorOffset = ( start === far ? -1 : 1 ) * ( anchorPos - popupPos[ start ] );\n\n\t\t// If the anchor is less than 2*anchorSize from either edge, move the popup to make more space\n\t\t// this.$anchor.width()/height() returns 0 because of the CSS trickery we use, so use scrollWidth/Height\n\t\tanchorSize = this.$anchor[ 0 ][ 'scroll' + sizeProp ];\n\t\tanchorMargin = parseFloat( this.$anchor.css( 'margin-' + start ) );\n\t\tif ( anchorOffset + anchorMargin < 2 * anchorSize ) {\n\t\t\t// Not enough space for the anchor on the start side; pull the popup startwards\n\t\t\tpositionAdjustment = ( positionProp === start ? -1 : 1 ) *\n\t\t\t\t( 2 * anchorSize - ( anchorOffset + anchorMargin ) );\n\t\t} else if ( anchorOffset + anchorMargin > popupSize - 2 * anchorSize ) {\n\t\t\t// Not enough space for the anchor on the end side; pull the popup endwards\n\t\t\tpositionAdjustment = ( positionProp === end ? -1 : 1 ) *\n\t\t\t\t( anchorOffset + anchorMargin - ( popupSize - 2 * anchorSize ) );\n\t\t} else {\n\t\t\tpositionAdjustment = 0;\n\t\t}\n\t} else {\n\t\tpositionAdjustment = 0;\n\t}\n\n\t// Check if the popup will go beyond the edge of this.$container\n\tcontainerPos = this.$container[ 0 ] === document.documentElement ?\n\t\t{ top: 0, left: 0 } :\n\t\tthis.$container.offset();\n\tcontainerPos[ far ] = containerPos[ near ] + this.$container[ 'inner' + sizeProp ]();\n\t// Take into account how much the popup will move because of the adjustments we're going to make\n\tpopupPos[ near ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment;\n\tpopupPos[ far ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment;\n\tif ( containerPos[ near ] + this.containerPadding > popupPos[ near ] ) {\n\t\t// Popup goes beyond the near (left/top) edge, move it to the right/bottom\n\t\tpositionAdjustment += ( positionProp === near ? 1 : -1 ) *\n\t\t\t( containerPos[ near ] + this.containerPadding - popupPos[ near ] );\n\t} else if ( containerPos[ far ] - this.containerPadding < popupPos[ far ] ) {\n\t\t// Popup goes beyond the far (right/bottom) edge, move it to the left/top\n\t\tpositionAdjustment += ( positionProp === far ? 1 : -1 ) *\n\t\t\t( popupPos[ far ] - ( containerPos[ far ] - this.containerPadding ) );\n\t}\n\n\tif ( this.anchored ) {\n\t\t// Adjust anchorOffset for positionAdjustment\n\t\tanchorOffset += ( positionProp === start ? -1 : 1 ) * positionAdjustment;\n\n\t\t// Position the anchor\n\t\tanchorCss[ start ] = anchorOffset;\n\t\tthis.$anchor.css( anchorCss );\n\t}\n\n\t// Move the popup if needed\n\tparentPosition[ positionProp ] += positionAdjustment;\n\n\treturn parentPosition;\n};\n\n/**\n * Set popup alignment\n *\n * @param {string} [align=center] Alignment of the popup, `center`, `force-left`, `force-right`,\n *  `backwards` or `forwards`.\n */\nOO.ui.PopupWidget.prototype.setAlignment = function ( align ) {\n\t// Validate alignment\n\tif ( [ 'force-left', 'force-right', 'backwards', 'forwards', 'center' ].indexOf( align ) > -1 ) {\n\t\tthis.align = align;\n\t} else {\n\t\tthis.align = 'center';\n\t}\n\tthis.position();\n};\n\n/**\n * Get popup alignment\n *\n * @return {string} Alignment of the popup, `center`, `force-left`, `force-right`,\n *  `backwards` or `forwards`.\n */\nOO.ui.PopupWidget.prototype.getAlignment = function () {\n\treturn this.align;\n};\n\n/**\n * Change the positioning of the popup.\n *\n * @param {string} position 'above', 'below', 'before' or 'after'\n */\nOO.ui.PopupWidget.prototype.setPosition = function ( position ) {\n\tif ( [ 'above', 'below', 'before', 'after' ].indexOf( position ) === -1 ) {\n\t\tposition = 'below';\n\t}\n\tthis.popupPosition = position;\n\tthis.position();\n};\n\n/**\n * Get popup positioning.\n *\n * @return {string} 'above', 'below', 'before' or 'after'\n */\nOO.ui.PopupWidget.prototype.getPosition = function () {\n\treturn this.popupPosition;\n};\n\n/**\n * Get an ID of the body element, this can be used as the\n * `aria-describedby` attribute for an input field.\n *\n * @return {string} The ID of the body element\n */\nOO.ui.PopupWidget.prototype.getBodyId = function () {\n\tvar id = this.$body.attr( 'id' );\n\tif ( id === undefined ) {\n\t\tid = OO.ui.generateElementId();\n\t\tthis.$body.attr( 'id', id );\n\t}\n\treturn id;\n};\n","/**\n * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.\n * A popup is a container for content. It is overlaid and positioned absolutely. By default, each\n * popup has an anchor, which is an arrow-like protrusion that points toward the popup’s origin.\n * See {@link OO.ui.PopupWidget PopupWidget} for an example.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [popup] Configuration to pass to popup\n * @cfg {boolean} [popup.autoClose=true] Popup auto-closes when it loses focus\n */\nOO.ui.mixin.PopupElement = function OoUiMixinPopupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties\n\tthis.popup = new OO.ui.PopupWidget( $.extend(\n\t\t{\n\t\t\tautoClose: true,\n\t\t\t$floatableContainer: this.$element\n\t\t},\n\t\tconfig.popup,\n\t\t{\n\t\t\t$autoCloseIgnore: this.$element.add( config.popup && config.popup.$autoCloseIgnore )\n\t\t}\n\t) );\n};\n\n/* Methods */\n\n/**\n * Get popup.\n *\n * @return {OO.ui.PopupWidget} Popup widget\n */\nOO.ui.mixin.PopupElement.prototype.getPopup = function () {\n\treturn this.popup;\n};\n","/**\n * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},\n * which is used to display additional information or options.\n *\n *     @example\n *     // Example of a popup button.\n *     var popupButton = new OO.ui.PopupButtonWidget( {\n *         label: 'Popup button with options',\n *         icon: 'menu',\n *         popup: {\n *             $content: $( '<p>Additional options here.</p>' ),\n *             padded: true,\n *             align: 'force-left'\n *         }\n *     } );\n *     // Append the button to the DOM.\n *     $( 'body' ).append( popupButton.$element );\n *\n * @class\n * @extends OO.ui.ButtonWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Render the popup into a separate layer. This configuration is useful in cases where\n *  the expanded popup is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the popup uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupButtonWidget' )\n\t\t.attr( 'aria-haspopup', 'true' );\n\tthis.popup.$element\n\t\t.addClass( 'oo-ui-popupButtonWidget-popup' )\n\t\t.toggleClass( 'oo-ui-popupButtonWidget-framed-popup', this.isFramed() )\n\t\t.toggleClass( 'oo-ui-popupButtonWidget-frameless-popup', !this.isFramed() );\n\tthis.$overlay.append( this.popup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );\nOO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.PopupButtonWidget.prototype.onAction = function () {\n\tthis.popup.toggle();\n};\n","/**\n * Mixin for OO.ui.Widget subclasses to provide OO.ui.mixin.GroupElement.\n *\n * Use together with OO.ui.mixin.ItemWidget to make disabled state inheritable.\n *\n * @private\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.mixin.GroupWidget = function OoUiMixinGroupWidget( config ) {\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.GroupWidget, OO.ui.mixin.GroupElement );\n\n/* Methods */\n\n/**\n * Set the disabled state of the widget.\n *\n * This will also update the disabled state of child widgets.\n *\n * @param {boolean} disabled Disable widget\n * @chainable\n */\nOO.ui.mixin.GroupWidget.prototype.setDisabled = function ( disabled ) {\n\tvar i, len;\n\n\t// Parent method\n\t// Note: Calling #setDisabled this way assumes this is mixed into an OO.ui.Widget\n\tOO.ui.Widget.prototype.setDisabled.call( this, disabled );\n\n\t// During construction, #setDisabled is called before the OO.ui.mixin.GroupElement constructor\n\tif ( this.items ) {\n\t\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\t\tthis.items[ i ].updateDisabled();\n\t\t}\n\t}\n\n\treturn this;\n};\n","/**\n * Mixin for widgets used as items in widgets that mix in OO.ui.mixin.GroupWidget.\n *\n * Item widgets have a reference to a OO.ui.mixin.GroupWidget while they are attached to the group. This\n * allows bidirectional communication.\n *\n * Use together with OO.ui.mixin.GroupWidget to make disabled state inheritable.\n *\n * @private\n * @abstract\n * @class\n *\n * @constructor\n */\nOO.ui.mixin.ItemWidget = function OoUiMixinItemWidget() {\n\t//\n};\n\n/* Methods */\n\n/**\n * Check if widget is disabled.\n *\n * Checks parent if present, making disabled state inheritable.\n *\n * @return {boolean} Widget is disabled\n */\nOO.ui.mixin.ItemWidget.prototype.isDisabled = function () {\n\treturn this.disabled ||\n\t\t( this.elementGroup instanceof OO.ui.Widget && this.elementGroup.isDisabled() );\n};\n\n/**\n * Set group element is in.\n *\n * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none\n * @chainable\n */\nOO.ui.mixin.ItemWidget.prototype.setElementGroup = function ( group ) {\n\t// Parent method\n\t// Note: Calling #setElementGroup this way assumes this is mixed into an OO.ui.Element\n\tOO.ui.Element.prototype.setElementGroup.call( this, group );\n\n\t// Initialize item disabled states\n\tthis.updateDisabled();\n\n\treturn this;\n};\n","/**\n * OptionWidgets are special elements that can be selected and configured with data. The\n * data is often unique for each option, but it does not have to be. OptionWidgets are used\n * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information\n * and examples, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OptionWidget = function OoUiOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.AccessKeyedElement.call( this, config );\n\n\t// Properties\n\tthis.selected = false;\n\tthis.highlighted = false;\n\tthis.pressed = false;\n\n\t// Initialization\n\tthis.$element\n\t\t.data( 'oo-ui-optionWidget', this )\n\t\t// Allow programmatic focussing (and by accesskey), but not tabbing\n\t\t.attr( 'tabindex', '-1' )\n\t\t.attr( 'role', 'option' )\n\t\t.attr( 'aria-selected', 'false' )\n\t\t.addClass( 'oo-ui-optionWidget' )\n\t\t.append( this.$label );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Properties */\n\n/**\n * Whether this option can be selected. See #setSelected.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.selectable = true;\n\n/**\n * Whether this option can be highlighted. See #setHighlighted.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.highlightable = true;\n\n/**\n * Whether this option can be pressed. See #setPressed.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.pressable = true;\n\n/**\n * Whether this option will be scrolled into view when it is selected.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;\n\n/* Methods */\n\n/**\n * Check if the option can be selected.\n *\n * @return {boolean} Item is selectable\n */\nOO.ui.OptionWidget.prototype.isSelectable = function () {\n\treturn this.constructor.static.selectable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option can be highlighted. A highlight indicates that the option\n * may be selected when a user presses enter or clicks. Disabled items cannot\n * be highlighted.\n *\n * @return {boolean} Item is highlightable\n */\nOO.ui.OptionWidget.prototype.isHighlightable = function () {\n\treturn this.constructor.static.highlightable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option can be pressed. The pressed state occurs when a user mouses\n * down on an item, but has not yet let go of the mouse.\n *\n * @return {boolean} Item is pressable\n */\nOO.ui.OptionWidget.prototype.isPressable = function () {\n\treturn this.constructor.static.pressable && !this.isDisabled() && this.isVisible();\n};\n\n/**\n * Check if the option is selected.\n *\n * @return {boolean} Item is selected\n */\nOO.ui.OptionWidget.prototype.isSelected = function () {\n\treturn this.selected;\n};\n\n/**\n * Check if the option is highlighted. A highlight indicates that the\n * item may be selected when a user presses enter or clicks.\n *\n * @return {boolean} Item is highlighted\n */\nOO.ui.OptionWidget.prototype.isHighlighted = function () {\n\treturn this.highlighted;\n};\n\n/**\n * Check if the option is pressed. The pressed state occurs when a user mouses\n * down on an item, but has not yet let go of the mouse. The item may appear\n * selected, but it will not be selected until the user releases the mouse.\n *\n * @return {boolean} Item is pressed\n */\nOO.ui.OptionWidget.prototype.isPressed = function () {\n\treturn this.pressed;\n};\n\n/**\n * Set the option’s selected state. In general, all modifications to the selection\n * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Select option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setSelected = function ( state ) {\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.selected = !!state;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-optionWidget-selected', state )\n\t\t\t.attr( 'aria-selected', state.toString() );\n\t\tif ( state && this.constructor.static.scrollIntoViewOnSelect ) {\n\t\t\tthis.scrollElementIntoView();\n\t\t}\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Set the option’s highlighted state. In general, all programmatic\n * modifications to the highlight should be handled by the\n * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Highlight option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {\n\tif ( this.constructor.static.highlightable ) {\n\t\tthis.highlighted = !!state;\n\t\tthis.$element.toggleClass( 'oo-ui-optionWidget-highlighted', state );\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Set the option’s pressed state. In general, all\n * programmatic modifications to the pressed state should be handled by the\n * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Press option\n * @chainable\n */\nOO.ui.OptionWidget.prototype.setPressed = function ( state ) {\n\tif ( this.constructor.static.pressable ) {\n\t\tthis.pressed = !!state;\n\t\tthis.$element.toggleClass( 'oo-ui-optionWidget-pressed', state );\n\t\tthis.updateThemeClasses();\n\t}\n\treturn this;\n};\n\n/**\n * Get text to match search strings against.\n *\n * The default implementation returns the label text, but subclasses\n * can override this to provide more complex behavior.\n *\n * @return {string|boolean} String to match search string against\n */\nOO.ui.OptionWidget.prototype.getMatchText = function () {\n\tvar label = this.getLabel();\n\treturn typeof label === 'string' ? label : this.$label.text();\n};\n","/**\n * A SelectWidget is of a generic selection of options. The OOjs UI library contains several types of\n * select widgets, including {@link OO.ui.ButtonSelectWidget button selects},\n * {@link OO.ui.RadioSelectWidget radio selects}, and {@link OO.ui.MenuSelectWidget\n * menu selects}.\n *\n * This class should be used together with OO.ui.OptionWidget or OO.ui.DecoratedOptionWidget. For more\n * information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of a select widget with three options\n *     var select = new OO.ui.SelectWidget( {\n *         items: [\n *             new OO.ui.OptionWidget( {\n *                 data: 'a',\n *                 label: 'Option One',\n *             } ),\n *             new OO.ui.OptionWidget( {\n *                 data: 'b',\n *                 label: 'Option Two',\n *             } ),\n *             new OO.ui.OptionWidget( {\n *                 data: 'c',\n *                 label: 'Option Three',\n *             } )\n *         ]\n *     } );\n *     $( 'body' ).append( select.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.\n *  Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See\n *  the [OOjs UI documentation on MediaWiki] [2] for examples.\n *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n */\nOO.ui.SelectWidget = function OoUiSelectWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.pressed = false;\n\tthis.selecting = null;\n\tthis.onMouseUpHandler = this.onMouseUp.bind( this );\n\tthis.onMouseMoveHandler = this.onMouseMove.bind( this );\n\tthis.onKeyDownHandler = this.onKeyDown.bind( this );\n\tthis.onKeyPressHandler = this.onKeyPress.bind( this );\n\tthis.keyPressBuffer = '';\n\tthis.keyPressBufferTimer = null;\n\tthis.blockMouseOverEvents = 0;\n\n\t// Events\n\tthis.connect( this, {\n\t\ttoggle: 'onToggle'\n\t} );\n\tthis.$element.on( {\n\t\tfocusin: this.onFocus.bind( this ),\n\t\tmousedown: this.onMouseDown.bind( this ),\n\t\tmouseover: this.onMouseOver.bind( this ),\n\t\tmouseleave: this.onMouseLeave.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' )\n\t\t.attr( 'role', 'listbox' );\n\tthis.setFocusOwner( this.$element );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectWidget, OO.ui.mixin.GroupWidget );\n\n/* Events */\n\n/**\n * @event highlight\n *\n * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.\n *\n * @param {OO.ui.OptionWidget|null} item Highlighted item\n */\n\n/**\n * @event press\n *\n * A `press` event is emitted when the #pressItem method is used to programmatically modify the\n * pressed state of an option.\n *\n * @param {OO.ui.OptionWidget|null} item Pressed item\n */\n\n/**\n * @event select\n *\n * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.\n *\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\n\n/**\n * @event choose\n * A `choose` event is emitted when an item is chosen with the #chooseItem method.\n * @param {OO.ui.OptionWidget} item Chosen item\n */\n\n/**\n * @event add\n *\n * An `add` event is emitted when options are added to the select with the #addItems method.\n *\n * @param {OO.ui.OptionWidget[]} items Added items\n * @param {number} index Index of insertion point\n */\n\n/**\n * @event remove\n *\n * A `remove` event is emitted when options are removed from the select with the #clearItems\n * or #removeItems methods.\n *\n * @param {OO.ui.OptionWidget[]} items Removed items\n */\n\n/* Methods */\n\n/**\n * Handle focus events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.SelectWidget.prototype.onFocus = function ( event ) {\n\tvar item;\n\tif ( event.target === this.$element[ 0 ] ) {\n\t\t// This widget was focussed, e.g. by the user tabbing to it.\n\t\t// The styles for focus state depend on one of the items being selected.\n\t\tif ( !this.getSelectedItem() ) {\n\t\t\titem = this.findFirstSelectableItem();\n\t\t}\n\t} else {\n\t\tif ( event.target.tabIndex === -1 ) {\n\t\t\t// One of the options got focussed (and the event bubbled up here).\n\t\t\t// They can't be tabbed to, but they can be activated using accesskeys.\n\t\t\t// OptionWidgets and focusable UI elements inside them have tabindex=\"-1\" set.\n\t\t\titem = this.findTargetItem( event );\n\t\t} else {\n\t\t\t// There is something actually user-focusable in one of the labels of the options, and the\n\t\t\t// user focussed it (e.g. by tabbing to it). Do nothing (especially, don't change the focus).\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif ( item ) {\n\t\tif ( item.constructor.static.highlightable ) {\n\t\t\tthis.highlightItem( item );\n\t\t} else {\n\t\t\tthis.selectItem( item );\n\t\t}\n\t}\n\n\tif ( event.target !== this.$element[ 0 ] ) {\n\t\tthis.$focusOwner.focus();\n\t}\n};\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {\n\tvar item;\n\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.togglePressed( true );\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item.isSelectable() ) {\n\t\t\tthis.pressItem( item );\n\t\t\tthis.selecting = item;\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'mousemove', this.onMouseMoveHandler, true );\n\t\t}\n\t}\n\treturn false;\n};\n\n/**\n * Handle mouse up events.\n *\n * @private\n * @param {MouseEvent} e Mouse up event\n */\nOO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {\n\tvar item;\n\n\tthis.togglePressed( false );\n\tif ( !this.selecting ) {\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item.isSelectable() ) {\n\t\t\tthis.selecting = item;\n\t\t}\n\t}\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT && this.selecting ) {\n\t\tthis.pressItem( null );\n\t\tthis.chooseItem( this.selecting );\n\t\tthis.selecting = null;\n\t}\n\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );\n\tthis.getElementDocument().removeEventListener( 'mousemove', this.onMouseMoveHandler, true );\n\n\treturn false;\n};\n\n/**\n * Handle mouse move events.\n *\n * @private\n * @param {MouseEvent} e Mouse move event\n */\nOO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {\n\tvar item;\n\n\tif ( !this.isDisabled() && this.pressed ) {\n\t\titem = this.findTargetItem( e );\n\t\tif ( item && item !== this.selecting && item.isSelectable() ) {\n\t\t\tthis.pressItem( item );\n\t\t\tthis.selecting = item;\n\t\t}\n\t}\n};\n\n/**\n * Handle mouse over events.\n *\n * @private\n * @param {jQuery.Event} e Mouse over event\n */\nOO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {\n\tvar item;\n\tif ( this.blockMouseOverEvents ) {\n\t\treturn;\n\t}\n\tif ( !this.isDisabled() ) {\n\t\titem = this.findTargetItem( e );\n\t\tthis.highlightItem( item && item.isHighlightable() ? item : null );\n\t}\n\treturn false;\n};\n\n/**\n * Handle mouse leave events.\n *\n * @private\n * @param {jQuery.Event} e Mouse over event\n */\nOO.ui.SelectWidget.prototype.onMouseLeave = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.highlightItem( null );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key down events.\n *\n * @protected\n * @param {KeyboardEvent} e Key down event\n */\nOO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {\n\tvar nextItem,\n\t\thandled = false,\n\t\tcurrentItem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( !this.isDisabled() && this.isVisible() ) {\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase OO.ui.Keys.ENTER:\n\t\t\t\tif ( currentItem && currentItem.constructor.static.highlightable ) {\n\t\t\t\t\t// Was only highlighted, now let's select it. No-op if already selected.\n\t\t\t\t\tthis.chooseItem( currentItem );\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.UP:\n\t\t\tcase OO.ui.Keys.LEFT:\n\t\t\t\tthis.clearKeyPressBuffer();\n\t\t\t\tnextItem = this.findRelativeSelectableItem( currentItem, -1 );\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.DOWN:\n\t\t\tcase OO.ui.Keys.RIGHT:\n\t\t\t\tthis.clearKeyPressBuffer();\n\t\t\t\tnextItem = this.findRelativeSelectableItem( currentItem, 1 );\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.ESCAPE:\n\t\t\tcase OO.ui.Keys.TAB:\n\t\t\t\tif ( currentItem && currentItem.constructor.static.highlightable ) {\n\t\t\t\t\tcurrentItem.setHighlighted( false );\n\t\t\t\t}\n\t\t\t\tthis.unbindKeyDownListener();\n\t\t\t\tthis.unbindKeyPressListener();\n\t\t\t\t// Don't prevent tabbing away / defocusing\n\t\t\t\thandled = false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( nextItem ) {\n\t\t\tif ( nextItem.constructor.static.highlightable ) {\n\t\t\t\tthis.highlightItem( nextItem );\n\t\t\t} else {\n\t\t\t\tthis.chooseItem( nextItem );\n\t\t\t}\n\t\t\tthis.scrollItemIntoView( nextItem );\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n};\n\n/**\n * Bind key down listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.bindKeyDownListener = function () {\n\tthis.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );\n};\n\n/**\n * Scroll item into view, preventing spurious mouse highlight actions from happening.\n *\n * @param {OO.ui.OptionWidget} item Item to scroll into view\n */\nOO.ui.SelectWidget.prototype.scrollItemIntoView = function ( item ) {\n\tvar widget = this;\n\t// Chromium's Blink engine will generate spurious 'mouseover' events during programmatic scrolling\n\t// and around 100-150 ms after it is finished.\n\tthis.blockMouseOverEvents++;\n\titem.scrollElementIntoView().done( function () {\n\t\tsetTimeout( function () {\n\t\t\twidget.blockMouseOverEvents--;\n\t\t}, 200 );\n\t} );\n};\n\n/**\n * Clear the key-press buffer\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.clearKeyPressBuffer = function () {\n\tif ( this.keyPressBufferTimer ) {\n\t\tclearTimeout( this.keyPressBufferTimer );\n\t\tthis.keyPressBufferTimer = null;\n\t}\n\tthis.keyPressBuffer = '';\n};\n\n/**\n * Handle key press events.\n *\n * @protected\n * @param {KeyboardEvent} e Key press event\n */\nOO.ui.SelectWidget.prototype.onKeyPress = function ( e ) {\n\tvar c, filter, item;\n\n\tif ( !e.charCode ) {\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE && this.keyPressBuffer !== '' ) {\n\t\t\tthis.keyPressBuffer = this.keyPressBuffer.substr( 0, this.keyPressBuffer.length - 1 );\n\t\t\treturn false;\n\t\t}\n\t\treturn;\n\t}\n\tif ( String.fromCodePoint ) {\n\t\tc = String.fromCodePoint( e.charCode );\n\t} else {\n\t\tc = String.fromCharCode( e.charCode );\n\t}\n\n\tif ( this.keyPressBufferTimer ) {\n\t\tclearTimeout( this.keyPressBufferTimer );\n\t}\n\tthis.keyPressBufferTimer = setTimeout( this.clearKeyPressBuffer.bind( this ), 1500 );\n\n\titem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( this.keyPressBuffer === c ) {\n\t\t// Common (if weird) special case: typing \"xxxx\" will cycle through all\n\t\t// the items beginning with \"x\".\n\t\tif ( item ) {\n\t\t\titem = this.findRelativeSelectableItem( item, 1 );\n\t\t}\n\t} else {\n\t\tthis.keyPressBuffer += c;\n\t}\n\n\tfilter = this.getItemMatcher( this.keyPressBuffer, false );\n\tif ( !item || !filter( item ) ) {\n\t\titem = this.findRelativeSelectableItem( item, 1, filter );\n\t}\n\tif ( item ) {\n\t\tif ( this.isVisible() && item.constructor.static.highlightable ) {\n\t\t\tthis.highlightItem( item );\n\t\t} else {\n\t\t\tthis.chooseItem( item );\n\t\t}\n\t\tthis.scrollItemIntoView( item );\n\t}\n\n\te.preventDefault();\n\te.stopPropagation();\n};\n\n/**\n * Get a matcher for the specific string\n *\n * @protected\n * @param {string} s String to match against items\n * @param {boolean} [exact=false] Only accept exact matches\n * @return {Function} function ( OO.ui.OptionWidget ) => boolean\n */\nOO.ui.SelectWidget.prototype.getItemMatcher = function ( s, exact ) {\n\tvar re;\n\n\tif ( s.normalize ) {\n\t\ts = s.normalize();\n\t}\n\ts = exact ? s.trim() : s.replace( /^\\s+/, '' );\n\tre = '^\\\\s*' + s.replace( /([\\\\{}()|.?*+\\-^$[\\]])/g, '\\\\$1' ).replace( /\\s+/g, '\\\\s+' );\n\tif ( exact ) {\n\t\tre += '\\\\s*$';\n\t}\n\tre = new RegExp( re, 'i' );\n\treturn function ( item ) {\n\t\tvar matchText = item.getMatchText();\n\t\tif ( matchText.normalize ) {\n\t\t\tmatchText = matchText.normalize();\n\t\t}\n\t\treturn re.test( matchText );\n\t};\n};\n\n/**\n * Bind key press listener.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.bindKeyPressListener = function () {\n\tthis.getElementWindow().addEventListener( 'keypress', this.onKeyPressHandler, true );\n};\n\n/**\n * Unbind key down listener.\n *\n * If you override this, be sure to call this.clearKeyPressBuffer() from your\n * implementation.\n *\n * @protected\n */\nOO.ui.SelectWidget.prototype.unbindKeyPressListener = function () {\n\tthis.getElementWindow().removeEventListener( 'keypress', this.onKeyPressHandler, true );\n\tthis.clearKeyPressBuffer();\n};\n\n/**\n * Visibility change handler\n *\n * @protected\n * @param {boolean} visible\n */\nOO.ui.SelectWidget.prototype.onToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\tthis.clearKeyPressBuffer();\n\t}\n};\n\n/**\n * Get the closest item to a jQuery.Event.\n *\n * @private\n * @param {jQuery.Event} e\n * @return {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found\n */\nOO.ui.SelectWidget.prototype.findTargetItem = function ( e ) {\n\tvar $option = $( e.target ).closest( '.oo-ui-optionWidget' );\n\tif ( !$option.closest( '.oo-ui-selectWidget' ).is( this.$element ) ) {\n\t\treturn null;\n\t}\n\treturn $option.data( 'oo-ui-optionWidget' ) || null;\n};\n\n/**\n * Get selected item.\n *\n * @return {OO.ui.OptionWidget|null} Selected item, `null` if no item is selected\n */\nOO.ui.SelectWidget.prototype.getSelectedItem = function () {\n\tvar i, len;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tif ( this.items[ i ].isSelected() ) {\n\t\t\treturn this.items[ i ];\n\t\t}\n\t}\n\treturn null;\n};\n\n/**\n * Find highlighted item.\n *\n * @return {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted\n */\nOO.ui.SelectWidget.prototype.findHighlightedItem = function () {\n\tvar i, len;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tif ( this.items[ i ].isHighlighted() ) {\n\t\t\treturn this.items[ i ];\n\t\t}\n\t}\n\treturn null;\n};\n\n/**\n * Get highlighted item.\n *\n * @deprecated 0.23.1 Use {@link #findHighlightedItem} instead.\n * @return {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted\n */\nOO.ui.SelectWidget.prototype.getHighlightedItem = function () {\n\tOO.ui.warnDeprecation( 'SelectWidget#getHighlightedItem: Deprecated function. Use findHighlightedItem instead. See T76630.' );\n\treturn this.findHighlightedItem();\n};\n\n/**\n * Toggle pressed state.\n *\n * Press is a state that occurs when a user mouses down on an item, but\n * has not yet let go of the mouse. The item may appear selected, but it will not be selected\n * until the user releases the mouse.\n *\n * @param {boolean} pressed An option is being pressed\n */\nOO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {\n\tif ( pressed === undefined ) {\n\t\tpressed = !this.pressed;\n\t}\n\tif ( pressed !== this.pressed ) {\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-selectWidget-pressed', pressed )\n\t\t\t.toggleClass( 'oo-ui-selectWidget-depressed', !pressed );\n\t\tthis.pressed = pressed;\n\t}\n};\n\n/**\n * Highlight an option. If the `item` param is omitted, no options will be highlighted\n * and any existing highlight will be removed. The highlight is mutually exclusive.\n *\n * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight\n * @fires highlight\n * @chainable\n */\nOO.ui.SelectWidget.prototype.highlightItem = function ( item ) {\n\tvar i, len, highlighted,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\thighlighted = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isHighlighted() !== highlighted ) {\n\t\t\tthis.items[ i ].setHighlighted( highlighted );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tif ( item ) {\n\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', item.getElementId() );\n\t\t} else {\n\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t}\n\t\tthis.emit( 'highlight', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Fetch an item by its label.\n *\n * @param {string} label Label of the item to select.\n * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches\n * @return {OO.ui.Element|null} Item with equivalent label, `null` if none exists\n */\nOO.ui.SelectWidget.prototype.getItemFromLabel = function ( label, prefix ) {\n\tvar i, item, found,\n\t\tlen = this.items.length,\n\t\tfilter = this.getItemMatcher( label, true );\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ i ];\n\t\tif ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {\n\t\t\treturn item;\n\t\t}\n\t}\n\n\tif ( prefix ) {\n\t\tfound = null;\n\t\tfilter = this.getItemMatcher( label, false );\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {\n\t\t\t\tif ( found ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tfound = item;\n\t\t\t}\n\t\t}\n\t\tif ( found ) {\n\t\t\treturn found;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * Programmatically select an option by its label. If the item does not exist,\n * all options will be deselected.\n *\n * @param {string} [label] Label of the item to select.\n * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItemByLabel = function ( label, prefix ) {\n\tvar itemFromLabel = this.getItemFromLabel( label, !!prefix );\n\tif ( label === undefined || !itemFromLabel ) {\n\t\treturn this.selectItem();\n\t}\n\treturn this.selectItem( itemFromLabel );\n};\n\n/**\n * Programmatically select an option by its data. If the `data` parameter is omitted,\n * or if the item does not exist, all options will be deselected.\n *\n * @param {Object|string} [data] Value of the item to select, omit to deselect all\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {\n\tvar itemFromData = this.getItemFromData( data );\n\tif ( data === undefined || !itemFromData ) {\n\t\treturn this.selectItem();\n\t}\n\treturn this.selectItem( itemFromData );\n};\n\n/**\n * Programmatically select an option by its reference. If the `item` parameter is omitted,\n * all options will be deselected.\n *\n * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all\n * @fires select\n * @chainable\n */\nOO.ui.SelectWidget.prototype.selectItem = function ( item ) {\n\tvar i, len, selected,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tselected = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isSelected() !== selected ) {\n\t\t\tthis.items[ i ].setSelected( selected );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tif ( item && !item.constructor.static.highlightable ) {\n\t\t\tif ( item ) {\n\t\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', item.getElementId() );\n\t\t\t} else {\n\t\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t\t}\n\t\t}\n\t\tthis.emit( 'select', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Press an item.\n *\n * Press is a state that occurs when a user mouses down on an item, but has not\n * yet let go of the mouse. The item may appear selected, but it will not be selected until the user\n * releases the mouse.\n *\n * @param {OO.ui.OptionWidget} [item] Item to press, omit to depress all\n * @fires press\n * @chainable\n */\nOO.ui.SelectWidget.prototype.pressItem = function ( item ) {\n\tvar i, len, pressed,\n\t\tchanged = false;\n\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tpressed = this.items[ i ] === item;\n\t\tif ( this.items[ i ].isPressed() !== pressed ) {\n\t\t\tthis.items[ i ].setPressed( pressed );\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif ( changed ) {\n\t\tthis.emit( 'press', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Choose an item.\n *\n * Note that ‘choose’ should never be modified programmatically. A user can choose\n * an option with the keyboard or mouse and it becomes selected. To select an item programmatically,\n * use the #selectItem method.\n *\n * This method is identical to #selectItem, but may vary in subclasses that take additional action\n * when users choose an item with the keyboard or mouse.\n *\n * @param {OO.ui.OptionWidget} item Item to choose\n * @fires choose\n * @chainable\n */\nOO.ui.SelectWidget.prototype.chooseItem = function ( item ) {\n\tif ( item ) {\n\t\tthis.selectItem( item );\n\t\tthis.emit( 'choose', item );\n\t}\n\n\treturn this;\n};\n\n/**\n * Find an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @param {Function} [filter] Only consider items for which this function returns\n *  true. Function takes an OO.ui.OptionWidget and returns a boolean.\n * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.SelectWidget.prototype.findRelativeSelectableItem = function ( item, direction, filter ) {\n\tvar currentIndex, nextIndex, i,\n\t\tincrease = direction > 0 ? 1 : -1,\n\t\tlen = this.items.length;\n\n\tif ( item instanceof OO.ui.OptionWidget ) {\n\t\tcurrentIndex = this.items.indexOf( item );\n\t\tnextIndex = ( currentIndex + increase + len ) % len;\n\t} else {\n\t\t// If no item is selected and moving forward, start at the beginning.\n\t\t// If moving backward, start at the end.\n\t\tnextIndex = direction > 0 ? 0 : len - 1;\n\t}\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ nextIndex ];\n\t\tif (\n\t\t\titem instanceof OO.ui.OptionWidget && item.isSelectable() &&\n\t\t\t( !filter || filter( item ) )\n\t\t) {\n\t\t\treturn item;\n\t\t}\n\t\tnextIndex = ( nextIndex + increase + len ) % len;\n\t}\n\treturn null;\n};\n\n/**\n * Get an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @deprecated 0.23.1 Use {@link #findRelativeSelectableItem} instead\n * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @param {Function} [filter] Only consider items for which this function returns\n *  true. Function takes an OO.ui.OptionWidget and returns a boolean.\n * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction, filter ) {\n\tOO.ui.warnDeprecation( 'SelectWidget#getRelativeSelectableItem: Deprecated function. Use findRelativeSelectableItem instead. See T76630.' );\n\treturn this.findRelativeSelectableItem( item, direction, filter );\n};\n\n/**\n * Find the next selectable item or `null` if there are no selectable items.\n * Disabled options and menu-section markers and breaks are not selectable.\n *\n * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items\n */\nOO.ui.SelectWidget.prototype.findFirstSelectableItem = function () {\n\treturn this.findRelativeSelectableItem( null, 1 );\n};\n\n/**\n * Get the next selectable item or `null` if there are no selectable items.\n * Disabled options and menu-section markers and breaks are not selectable.\n *\n * @deprecated 0.23.1 Use {@link OO.ui.SelectWidget#findFirstSelectableItem} instead.\n * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items\n */\nOO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {\n\tOO.ui.warnDeprecation( 'SelectWidget#getFirstSelectableItem: Deprecated function. Use findFirstSelectableItem instead. See T76630.' );\n\treturn this.findFirstSelectableItem();\n};\n\n/**\n * Add an array of options to the select. Optionally, an index number can be used to\n * specify an insertion point.\n *\n * @param {OO.ui.OptionWidget[]} items Items to add\n * @param {number} [index] Index to insert items after\n * @fires add\n * @chainable\n */\nOO.ui.SelectWidget.prototype.addItems = function ( items, index ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.addItems.call( this, items, index );\n\n\t// Always provide an index, even if it was omitted\n\tthis.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified array of options from the select. Options will be detached\n * from the DOM, not removed, so they can be reused later. To remove all options from\n * the select, you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.OptionWidget[]} items Items to remove\n * @fires remove\n * @chainable\n */\nOO.ui.SelectWidget.prototype.removeItems = function ( items ) {\n\tvar i, len, item;\n\n\t// Deselect items being removed\n\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\titem = items[ i ];\n\t\tif ( item.isSelected() ) {\n\t\t\tthis.selectItem( null );\n\t\t}\n\t}\n\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.removeItems.call( this, items );\n\n\tthis.emit( 'remove', items );\n\n\treturn this;\n};\n\n/**\n * Clear all options from the select. Options will be detached from the DOM, not removed,\n * so that they can be reused later. To remove a subset of options from the select, use\n * the #removeItems method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.SelectWidget.prototype.clearItems = function () {\n\tvar items = this.items.slice();\n\n\t// Mixin method\n\tOO.ui.mixin.GroupWidget.prototype.clearItems.call( this );\n\n\t// Clear selection\n\tthis.selectItem( null );\n\n\tthis.emit( 'remove', items );\n\n\treturn this;\n};\n\n/**\n * Set the DOM element which has focus while the user is interacting with this SelectWidget.\n *\n * Currently this is just used to set `aria-activedescendant` on it.\n *\n * @protected\n * @param {jQuery} $focusOwner\n */\nOO.ui.SelectWidget.prototype.setFocusOwner = function ( $focusOwner ) {\n\tthis.$focusOwner = $focusOwner;\n};\n","/**\n * DecoratedOptionWidgets are {@link OO.ui.OptionWidget options} that can be configured\n * with an {@link OO.ui.mixin.IconElement icon} and/or {@link OO.ui.mixin.IndicatorElement indicator}.\n * This class is used with OO.ui.SelectWidget to create a selection of mutually exclusive\n * options. For more information about options and selects, please see the\n * [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Decorated options in a select widget\n *     var select = new OO.ui.SelectWidget( {\n *         items: [\n *             new OO.ui.DecoratedOptionWidget( {\n *                 data: 'a',\n *                 label: 'Option with icon',\n *                 icon: 'help'\n *             } ),\n *             new OO.ui.DecoratedOptionWidget( {\n *                 data: 'b',\n *                 label: 'Option with indicator',\n *                 indicator: 'next'\n *             } )\n *         ]\n *     } );\n *     $( 'body' ).append( select.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.DecoratedOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-decoratedOptionWidget' )\n\t\t.prepend( this.$icon )\n\t\t.append( this.$indicator );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );\n","/**\n * MenuOptionWidget is an option widget that looks like a menu item. The class is used with\n * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see\n * the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MenuOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuOptionWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;\n","/**\n * MenuSectionOptionWidgets are used inside {@link OO.ui.MenuSelectWidget menu select widgets} to group one or more related\n * {@link OO.ui.MenuOptionWidget menu options}. MenuSectionOptionWidgets cannot be highlighted or selected.\n *\n *     @example\n *     var myDropdown = new OO.ui.DropdownWidget( {\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuSectionOptionWidget( {\n *                     label: 'Dogs'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'corgi',\n *                     label: 'Welsh Corgi'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'poodle',\n *                     label: 'Standard Poodle'\n *                 } ),\n *                 new OO.ui.MenuSectionOptionWidget( {\n *                     label: 'Cats'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'lion',\n *                     label: 'Lion'\n *                 } )\n *             ]\n *         }\n *     } );\n *     $( 'body' ).append( myDropdown.$element );\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuSectionOptionWidget = function OoUiMenuSectionOptionWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MenuSectionOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuSectionOptionWidget' )\n\t\t.removeAttr( 'role aria-selected' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuSectionOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuSectionOptionWidget.static.selectable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuSectionOptionWidget.static.highlightable = false;\n","/**\n * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and\n * is used together with OO.ui.MenuOptionWidget. It is designed be used as part of another widget.\n * See {@link OO.ui.DropdownWidget DropdownWidget}, {@link OO.ui.ComboBoxInputWidget ComboBoxInputWidget},\n * and {@link OO.ui.mixin.LookupElement LookupElement} for examples of widgets that contain menus.\n * MenuSelectWidgets themselves are not instantiated directly, rather subclassed\n * and customized to be opened, closed, and displayed as needed.\n *\n * By default, menus are clipped to the visible viewport and are not visible when a user presses the\n * mouse outside the menu.\n *\n * Menus also have support for keyboard interaction:\n *\n * - Enter/Return key: choose and select a menu option\n * - Up-arrow key: highlight the previous menu option\n * - Down-arrow key: highlight the next menu option\n * - Esc key: hide the menu\n *\n * Unlike most widgets, MenuSelectWidget is initially hidden and must be shown by calling #toggle.\n *\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.FloatableElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match\n *  the text the user types. This config is used by {@link OO.ui.ComboBoxInputWidget ComboBoxInputWidget}\n *  and {@link OO.ui.mixin.LookupElement LookupElement}\n * @cfg {jQuery} [$input] Text input used to implement option highlighting for menu items that match\n *  the text the user types. This config is used by {@link OO.ui.CapsuleMultiselectWidget CapsuleMultiselectWidget}\n * @cfg {OO.ui.Widget} [widget] Widget associated with the menu's active state. If the user clicks the mouse\n *  anywhere on the page outside of this widget, the menu is hidden. For example, if there is a button\n *  that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks\n *  that button, unless the button (or its parent widget) is passed in here.\n * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.\n * @cfg {jQuery} [$autoCloseIgnore] If these elements are clicked, don't auto-hide the menu.\n * @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option.\n * @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input\n * @cfg {boolean} [highlightOnFilter] Highlight the first result when filtering\n * @cfg {number} [width] Width of the menu\n */\nOO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );\n\tOO.ui.mixin.FloatableElement.call( this, config );\n\n\t// Properties\n\tthis.autoHide = config.autoHide === undefined || !!config.autoHide;\n\tthis.hideOnChoose = config.hideOnChoose === undefined || !!config.hideOnChoose;\n\tthis.filterFromInput = !!config.filterFromInput;\n\tthis.$input = config.$input ? config.$input : config.input ? config.input.$input : null;\n\tthis.$widget = config.widget ? config.widget.$element : null;\n\tthis.$autoCloseIgnore = config.$autoCloseIgnore || $( [] );\n\tthis.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );\n\tthis.onInputEditHandler = OO.ui.debounce( this.updateItemVisibility.bind( this ), 100 );\n\tthis.highlightOnFilter = !!config.highlightOnFilter;\n\tthis.width = config.width;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuSelectWidget' );\n\tif ( config.widget ) {\n\t\tthis.setFocusOwner( config.widget.$tabIndexed );\n\t}\n\n\t// Initially hidden - using #toggle may cause errors if subclasses override toggle with methods\n\t// that reference properties not initialized at that time of parent class construction\n\t// TODO: Find a better way to handle post-constructor setup\n\tthis.visible = false;\n\tthis.$element.addClass( 'oo-ui-element-hidden' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.FloatableElement );\n\n/* Events */\n\n/**\n * @event ready\n *\n * The menu is ready: it is visible and has been positioned and clipped.\n */\n\n/* Methods */\n\n/**\n * Handles document mouse down events.\n *\n * @protected\n * @param {MouseEvent} e Mouse down event\n */\nOO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {\n\tif (\n\t\tthis.isVisible() &&\n\t\t!OO.ui.contains(\n\t\t\tthis.$element.add( this.$widget ).add( this.$autoCloseIgnore ).get(),\n\t\t\te.target,\n\t\t\ttrue\n\t\t)\n\t) {\n\t\tthis.toggle( false );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {\n\tvar currentItem = this.findHighlightedItem() || this.getSelectedItem();\n\n\tif ( !this.isDisabled() && this.isVisible() ) {\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase OO.ui.Keys.LEFT:\n\t\t\tcase OO.ui.Keys.RIGHT:\n\t\t\t\t// Do nothing if a text field is associated, arrow keys will be handled natively\n\t\t\t\tif ( !this.$input ) {\n\t\t\t\t\tOO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase OO.ui.Keys.ESCAPE:\n\t\t\tcase OO.ui.Keys.TAB:\n\t\t\t\tif ( currentItem ) {\n\t\t\t\t\tcurrentItem.setHighlighted( false );\n\t\t\t\t}\n\t\t\t\tthis.toggle( false );\n\t\t\t\t// Don't prevent tabbing away, prevent defocusing\n\t\t\t\tif ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tOO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );\n\t\t\t\treturn;\n\t\t}\n\t}\n};\n\n/**\n * Update menu item visibility and clipping after input changes (if filterFromInput is enabled)\n * or after items were added/removed (always).\n *\n * @protected\n */\nOO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {\n\tvar i, item, visible, section, sectionEmpty, filter, exactFilter,\n\t\tfirstItemFound = false,\n\t\tanyVisible = false,\n\t\tlen = this.items.length,\n\t\tshowAll = !this.isVisible(),\n\t\texactMatch = false;\n\n\tif ( this.$input && this.filterFromInput ) {\n\t\tfilter = showAll ? null : this.getItemMatcher( this.$input.val() );\n\t\texactFilter = this.getItemMatcher( this.$input.val(), true );\n\n\t\t// Hide non-matching options, and also hide section headers if all options\n\t\t// in their section are hidden.\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( item instanceof OO.ui.MenuSectionOptionWidget ) {\n\t\t\t\tif ( section ) {\n\t\t\t\t\t// If the previous section was empty, hide its header\n\t\t\t\t\tsection.toggle( showAll || !sectionEmpty );\n\t\t\t\t}\n\t\t\t\tsection = item;\n\t\t\t\tsectionEmpty = true;\n\t\t\t} else if ( item instanceof OO.ui.OptionWidget ) {\n\t\t\t\tvisible = showAll || filter( item );\n\t\t\t\texactMatch = exactMatch || exactFilter( item );\n\t\t\t\tanyVisible = anyVisible || visible;\n\t\t\t\tsectionEmpty = sectionEmpty && !visible;\n\t\t\t\titem.toggle( visible );\n\t\t\t\tif ( this.highlightOnFilter && visible && !firstItemFound ) {\n\t\t\t\t\t// Highlight the first item in the list\n\t\t\t\t\tthis.highlightItem( item );\n\t\t\t\t\tfirstItemFound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Process the final section\n\t\tif ( section ) {\n\t\t\tsection.toggle( showAll || !sectionEmpty );\n\t\t}\n\n\t\tif ( anyVisible && this.items.length && !exactMatch ) {\n\t\t\tthis.scrollItemIntoView( this.items[ 0 ] );\n\t\t}\n\n\t\tthis.$element.toggleClass( 'oo-ui-menuSelectWidget-invisible', !anyVisible );\n\t}\n\n\t// Reevaluate clipping\n\tthis.clip();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.on( 'keydown', this.onKeyDownHandler );\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.bindKeyDownListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.off( 'keydown', this.onKeyDownHandler );\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.unbindKeyDownListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.bindKeyPressListener = function () {\n\tif ( this.$input ) {\n\t\tif ( this.filterFromInput ) {\n\t\t\tthis.$input.on( 'keydown mouseup cut paste change input select', this.onInputEditHandler );\n\t\t\tthis.updateItemVisibility();\n\t\t}\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.bindKeyPressListener.call( this );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () {\n\tif ( this.$input ) {\n\t\tif ( this.filterFromInput ) {\n\t\t\tthis.$input.off( 'keydown mouseup cut paste change input select', this.onInputEditHandler );\n\t\t\tthis.updateItemVisibility();\n\t\t}\n\t} else {\n\t\tOO.ui.MenuSelectWidget.parent.prototype.unbindKeyPressListener.call( this );\n\t}\n};\n\n/**\n * Choose an item.\n *\n * When a user chooses an item, the menu is closed, unless the hideOnChoose config option is set to false.\n *\n * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard\n * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.\n *\n * @param {OO.ui.OptionWidget} item Item to choose\n * @chainable\n */\nOO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {\n\tOO.ui.MenuSelectWidget.parent.prototype.chooseItem.call( this, item );\n\tif ( this.hideOnChoose ) {\n\t\tthis.toggle( false );\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.addItems.call( this, items, index );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.removeItems.call( this, items );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.clearItems = function () {\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.clearItems.call( this );\n\n\tthis.updateItemVisibility();\n\n\treturn this;\n};\n\n/**\n * Toggle visibility of the menu. The menu is initially hidden and must be shown by calling\n * `.toggle( true )` after its #$element is attached to the DOM.\n *\n * Do not show the menu while it is not attached to the DOM. The calculations required to display\n * it in the right place and with the right dimensions only work correctly while it is attached.\n * Side-effects may include broken interface and exceptions being thrown. This wasn't always\n * strictly enforced, so currently it only generates a warning in the browser console.\n *\n * @fires ready\n * @inheritdoc\n */\nOO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {\n\tvar change;\n\n\tvisible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;\n\tchange = visible !== this.isVisible();\n\n\tif ( visible && !this.warnedUnattached && !this.isElementAttached() ) {\n\t\tOO.ui.warnDeprecation( 'MenuSelectWidget#toggle: Before calling this method, the menu must be attached to the DOM.' );\n\t\tthis.warnedUnattached = true;\n\t}\n\n\tif ( change && visible && ( this.width || this.$floatableContainer ) ) {\n\t\tthis.setIdealSize( this.width || this.$floatableContainer.width() );\n\t}\n\n\t// Parent method\n\tOO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );\n\n\tif ( change ) {\n\t\tif ( visible ) {\n\t\t\tthis.bindKeyDownListener();\n\t\t\tthis.bindKeyPressListener();\n\n\t\t\tthis.togglePositioning( !!this.$floatableContainer );\n\t\t\tthis.toggleClipping( true );\n\n\t\t\tthis.$focusOwner.attr( 'aria-expanded', 'true' );\n\n\t\t\tif ( this.getSelectedItem() ) {\n\t\t\t\tthis.$focusOwner.attr( 'aria-activedescendant', this.getSelectedItem().getElementId() );\n\t\t\t\tthis.getSelectedItem().scrollElementIntoView( { duration: 0 } );\n\t\t\t}\n\n\t\t\t// Auto-hide\n\t\t\tif ( this.autoHide ) {\n\t\t\t\tthis.getElementDocument().addEventListener( 'mousedown', this.onDocumentMouseDownHandler, true );\n\t\t\t}\n\n\t\t\tthis.emit( 'ready' );\n\t\t} else {\n\t\t\tthis.$focusOwner.removeAttr( 'aria-activedescendant' );\n\t\t\tthis.unbindKeyDownListener();\n\t\t\tthis.unbindKeyPressListener();\n\t\t\tthis.$focusOwner.attr( 'aria-expanded', 'false' );\n\t\t\tthis.getElementDocument().removeEventListener( 'mousedown', this.onDocumentMouseDownHandler, true );\n\t\t\tthis.togglePositioning( false );\n\t\t\tthis.toggleClipping( false );\n\t\t}\n\t}\n\n\treturn this;\n};\n","/**\n * DropdownWidgets are not menus themselves, rather they contain a menu of options created with\n * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that\n * users can interact with it.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.DropdownInputWidget instead.\n *\n *     @example\n *     // Example: A DropdownWidget with a menu that contains three options\n *     var dropDown = new OO.ui.DropdownWidget( {\n *         label: 'Dropdown menu: Select a menu option',\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'a',\n *                     label: 'First'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'b',\n *                     label: 'Second'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'c',\n *                     label: 'Third'\n *                 } )\n *             ]\n *         }\n *     } );\n *\n *     $( 'body' ).append( dropDown.$element );\n *\n *     dropDown.getMenu().selectItemByData( 'b' );\n *\n *     dropDown.getMenu().getSelectedItem().getData(); // returns 'b'\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.MenuSelectWidget menu select widget}\n * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where\n *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { indicator: 'down' }, config );\n\n\t// Parent constructor\n\tOO.ui.DropdownWidget.parent.call( this, config );\n\n\t// Properties (must be set before TabIndexedElement constructor call)\n\tthis.$handle = this.$( '<span>' );\n\tthis.$overlay = config.$overlay || this.$element;\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );\n\n\t// Properties\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend( {\n\t\twidget: this,\n\t\t$floatableContainer: this.$element\n\t}, config.menu ) );\n\n\t// Events\n\tthis.$handle.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t// Hack? Handle type-to-search when menu is not expanded and not handling its own events\n\t\tkeypress: this.menu.onKeyPressHandler,\n\t\tblur: this.menu.clearKeyPressBuffer.bind( this.menu )\n\t} );\n\tthis.menu.connect( this, {\n\t\tselect: 'onMenuSelect',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\n\t// Initialization\n\tthis.$handle\n\t\t.addClass( 'oo-ui-dropdownWidget-handle' )\n\t\t.attr( {\n\t\t\trole: 'combobox',\n\t\t\t'aria-owns': this.menu.getElementId(),\n\t\t\t'aria-autocomplete': 'list'\n\t\t} )\n\t\t.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-dropdownWidget' )\n\t\t.append( this.$handle );\n\tthis.$overlay.append( this.menu.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Get the menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu of widget\n */\nOO.ui.DropdownWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.MenuOptionWidget} item Selected menu item\n */\nOO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {\n\tvar selectedLabel;\n\n\tif ( !item ) {\n\t\tthis.setLabel( null );\n\t\treturn;\n\t}\n\n\tselectedLabel = item.getLabel();\n\n\t// If the label is a DOM element, clone it, because setLabel will append() it\n\tif ( selectedLabel instanceof jQuery ) {\n\t\tselectedLabel = selectedLabel.clone();\n\t}\n\n\tthis.setLabel( selectedLabel );\n};\n\n/**\n * Handle menu toggle events.\n *\n * @private\n * @param {boolean} isVisible Open state of the menu\n */\nOO.ui.DropdownWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tthis.$element.toggleClass( 'oo-ui-dropdownWidget-open', isVisible );\n\tthis.$handle.attr(\n\t\t'aria-expanded',\n\t\tthis.$element.hasClass( 'oo-ui-dropdownWidget-open' ).toString()\n\t);\n};\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n */\nOO.ui.DropdownWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.menu.toggle();\n\t}\n\treturn false;\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.DropdownWidget.prototype.onKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t(\n\t\t\te.which === OO.ui.Keys.ENTER ||\n\t\t\t(\n\t\t\t\te.which === OO.ui.Keys.SPACE &&\n\t\t\t\t// Avoid conflicts with type-to-search, see SelectWidget#onKeyPress.\n\t\t\t\t// Space only closes the menu is the user is not typing to search.\n\t\t\t\tthis.menu.keyPressBuffer === ''\n\t\t\t) ||\n\t\t\t(\n\t\t\t\t!this.menu.isVisible() &&\n\t\t\t\t(\n\t\t\t\t\te.which === OO.ui.Keys.UP ||\n\t\t\t\t\te.which === OO.ui.Keys.DOWN\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t) {\n\t\tthis.menu.toggle();\n\t\treturn false;\n\t}\n};\n","/**\n * RadioOptionWidget is an option widget that looks like a radio button.\n * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );\n\n\t// Parent constructor\n\tOO.ui.RadioOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\t// Remove implicit role, we're handling it ourselves\n\tthis.radio.$input.attr( 'role', 'presentation' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioOptionWidget' )\n\t\t.attr( 'role', 'radio' )\n\t\t.attr( 'aria-checked', 'false' )\n\t\t.removeAttr( 'aria-selected' )\n\t\t.prepend( this.radio.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.highlightable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.pressable = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.static.tagName = 'label';\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.RadioOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tthis.radio.setSelected( state );\n\tthis.$element\n\t\t.attr( 'aria-checked', state.toString() )\n\t\t.removeAttr( 'aria-selected' );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.RadioOptionWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tthis.radio.setDisabled( this.isDisabled() );\n\n\treturn this;\n};\n","/**\n * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio\n * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides\n * an interface for adding, removing and selecting options.\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.RadioSelectInputWidget instead.\n *\n *     @example\n *     // A RadioSelectWidget with RadioOptions.\n *     var option1 = new OO.ui.RadioOptionWidget( {\n *         data: 'a',\n *         label: 'Selected radio option'\n *     } );\n *\n *     var option2 = new OO.ui.RadioOptionWidget( {\n *         data: 'b',\n *         label: 'Unselected radio option'\n *     } );\n *\n *     var radioSelect=new OO.ui.RadioSelectWidget( {\n *         items: [ option1, option2 ]\n *      } );\n *\n *     // Select 'option 1' using the RadioSelectWidget's selectItem() method.\n *     radioSelect.selectItem( option1 );\n *\n *     $( 'body' ).append( radioSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.RadioSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioSelectWidget' )\n\t\t.attr( 'role', 'radiogroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * MultioptionWidgets are special elements that can be selected and configured with data. The\n * data is often unique for each option, but it does not have to be. MultioptionWidgets are used\n * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information\n * and examples, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Multioptions\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Whether the option is initially selected\n */\nOO.ui.MultioptionWidget = function OoUiMultioptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MultioptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.selected = null;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-multioptionWidget' )\n\t\t.append( this.$label );\n\tthis.setSelected( config.selected );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultioptionWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.MultioptionWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.MultioptionWidget, OO.ui.mixin.LabelElement );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the selected state of the option changes.\n *\n * @param {boolean} selected Whether the option is now selected\n */\n\n/* Methods */\n\n/**\n * Check if the option is selected.\n *\n * @return {boolean} Item is selected\n */\nOO.ui.MultioptionWidget.prototype.isSelected = function () {\n\treturn this.selected;\n};\n\n/**\n * Set the option’s selected state. In general, all modifications to the selection\n * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}\n * method instead of this method.\n *\n * @param {boolean} [state=false] Select option\n * @chainable\n */\nOO.ui.MultioptionWidget.prototype.setSelected = function ( state ) {\n\tstate = !!state;\n\tif ( this.selected !== state ) {\n\t\tthis.selected = state;\n\t\tthis.emit( 'change', state );\n\t\tthis.$element.toggleClass( 'oo-ui-multioptionWidget-selected', state );\n\t}\n\treturn this;\n};\n","/**\n * MultiselectWidget allows selecting multiple options from a list.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @abstract\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.MultioptionWidget[]} [items] An array of options to add to the multiselect.\n */\nOO.ui.MultiselectWidget = function OoUiMultiselectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.MultiselectWidget.parent.call( this, config );\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\n\t// Events\n\tthis.aggregate( { change: 'select' } );\n\t// This is mostly for compatibility with CapsuleMultiselectWidget... normally, 'change' is emitted\n\t// by GroupElement only when items are added/removed\n\tthis.connect( this, { select: [ 'emit', 'change' ] } );\n\n\t// Initialization\n\tif ( config.items ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$group.addClass( 'oo-ui-multiselectWidget-group' );\n\tthis.$element.addClass( 'oo-ui-multiselectWidget' )\n\t\t.append( this.$group );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.MultiselectWidget, OO.ui.mixin.GroupWidget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of items changes, or an item is selected or deselected.\n */\n\n/**\n * @event select\n *\n * A select event is emitted when an item is selected or deselected.\n */\n\n/* Methods */\n\n/**\n * Get options that are selected.\n *\n * @return {OO.ui.MultioptionWidget[]} Selected options\n */\nOO.ui.MultiselectWidget.prototype.getSelectedItems = function () {\n\treturn this.items.filter( function ( item ) {\n\t\treturn item.isSelected();\n\t} );\n};\n\n/**\n * Get the data of options that are selected.\n *\n * @return {Object[]|string[]} Values of selected options\n */\nOO.ui.MultiselectWidget.prototype.getSelectedItemsData = function () {\n\treturn this.getSelectedItems().map( function ( item ) {\n\t\treturn item.data;\n\t} );\n};\n\n/**\n * Select options by reference. Options not mentioned in the `items` array will be deselected.\n *\n * @param {OO.ui.MultioptionWidget[]} items Items to select\n * @chainable\n */\nOO.ui.MultiselectWidget.prototype.selectItems = function ( items ) {\n\tthis.items.forEach( function ( item ) {\n\t\tvar selected = items.indexOf( item ) !== -1;\n\t\titem.setSelected( selected );\n\t} );\n\treturn this;\n};\n\n/**\n * Select items by their data. Options not mentioned in the `datas` array will be deselected.\n *\n * @param {Object[]|string[]} datas Values of items to select\n * @chainable\n */\nOO.ui.MultiselectWidget.prototype.selectItemsByData = function ( datas ) {\n\tvar items,\n\t\twidget = this;\n\titems = datas.map( function ( data ) {\n\t\treturn widget.getItemFromData( data );\n\t} );\n\tthis.selectItems( items );\n\treturn this;\n};\n","/**\n * CheckboxMultioptionWidget is an option widget that looks like a checkbox.\n * The class is used with OO.ui.CheckboxMultiselectWidget to create a selection of checkbox options.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option\n *\n * @class\n * @extends OO.ui.MultioptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CheckboxMultioptionWidget = function OoUiCheckboxMultioptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.checkbox = new OO.ui.CheckboxInputWidget();\n\n\t// Parent constructor\n\tOO.ui.CheckboxMultioptionWidget.parent.call( this, config );\n\n\t// Events\n\tthis.checkbox.on( 'change', this.onCheckboxChange.bind( this ) );\n\tthis.$element.on( 'keydown', this.onKeyDown.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultioptionWidget' )\n\t\t.prepend( this.checkbox.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultioptionWidget, OO.ui.MultioptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.static.tagName = 'label';\n\n/* Methods */\n\n/**\n * Handle checkbox selected state change.\n *\n * @private\n */\nOO.ui.CheckboxMultioptionWidget.prototype.onCheckboxChange = function () {\n\tthis.setSelected( this.checkbox.isSelected() );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.CheckboxMultioptionWidget.parent.prototype.setSelected.call( this, state );\n\tthis.checkbox.setSelected( state );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultioptionWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.CheckboxMultioptionWidget.parent.prototype.setDisabled.call( this, disabled );\n\tthis.checkbox.setDisabled( this.isDisabled() );\n\treturn this;\n};\n\n/**\n * Focus the widget.\n */\nOO.ui.CheckboxMultioptionWidget.prototype.focus = function () {\n\tthis.checkbox.focus();\n};\n\n/**\n * Handle key down events.\n *\n * @protected\n * @param {jQuery.Event} e\n */\nOO.ui.CheckboxMultioptionWidget.prototype.onKeyDown = function ( e ) {\n\tvar\n\t\telement = this.getElementGroup(),\n\t\tnextItem;\n\n\tif ( e.keyCode === OO.ui.Keys.LEFT || e.keyCode === OO.ui.Keys.UP ) {\n\t\tnextItem = element.getRelativeFocusableItem( this, -1 );\n\t} else if ( e.keyCode === OO.ui.Keys.RIGHT || e.keyCode === OO.ui.Keys.DOWN ) {\n\t\tnextItem = element.getRelativeFocusableItem( this, 1 );\n\t}\n\n\tif ( nextItem ) {\n\t\te.preventDefault();\n\t\tnextItem.focus();\n\t}\n};\n","/**\n * CheckboxMultiselectWidget is a {@link OO.ui.MultiselectWidget multiselect widget} that contains\n * checkboxes and is used together with OO.ui.CheckboxMultioptionWidget. The\n * CheckboxMultiselectWidget provides an interface for adding, removing and selecting options.\n * Please see the [OOjs UI documentation on MediaWiki][1] for more information.\n *\n * If you want to use this within an HTML form, such as a OO.ui.FormLayout, use\n * OO.ui.CheckboxMultiselectInputWidget instead.\n *\n *     @example\n *     // A CheckboxMultiselectWidget with CheckboxMultioptions.\n *     var option1 = new OO.ui.CheckboxMultioptionWidget( {\n *         data: 'a',\n *         selected: true,\n *         label: 'Selected checkbox'\n *     } );\n *\n *     var option2 = new OO.ui.CheckboxMultioptionWidget( {\n *         data: 'b',\n *         label: 'Unselected checkbox'\n *     } );\n *\n *     var multiselect=new OO.ui.CheckboxMultiselectWidget( {\n *         items: [ option1, option2 ]\n *      } );\n *\n *     $( 'body' ).append( multiselect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.MultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CheckboxMultiselectWidget = function OoUiCheckboxMultiselectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.CheckboxMultiselectWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$lastClicked = null;\n\n\t// Events\n\tthis.$group.on( 'click', this.onClick.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultiselectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultiselectWidget, OO.ui.MultiselectWidget );\n\n/* Methods */\n\n/**\n * Get an option by its position relative to the specified item (or to the start of the option array,\n * if item is `null`). The direction in which to search through the option array is specified with a\n * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or\n * `null` if there are no options in the array.\n *\n * @param {OO.ui.CheckboxMultioptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.\n * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward\n * @return {OO.ui.CheckboxMultioptionWidget|null} Item at position, `null` if there are no items in the select\n */\nOO.ui.CheckboxMultiselectWidget.prototype.getRelativeFocusableItem = function ( item, direction ) {\n\tvar currentIndex, nextIndex, i,\n\t\tincrease = direction > 0 ? 1 : -1,\n\t\tlen = this.items.length;\n\n\tif ( item ) {\n\t\tcurrentIndex = this.items.indexOf( item );\n\t\tnextIndex = ( currentIndex + increase + len ) % len;\n\t} else {\n\t\t// If no item is selected and moving forward, start at the beginning.\n\t\t// If moving backward, start at the end.\n\t\tnextIndex = direction > 0 ? 0 : len - 1;\n\t}\n\n\tfor ( i = 0; i < len; i++ ) {\n\t\titem = this.items[ nextIndex ];\n\t\tif ( item && !item.isDisabled() ) {\n\t\t\treturn item;\n\t\t}\n\t\tnextIndex = ( nextIndex + increase + len ) % len;\n\t}\n\treturn null;\n};\n\n/**\n * Handle click events on checkboxes.\n *\n * @param {jQuery.Event} e\n */\nOO.ui.CheckboxMultiselectWidget.prototype.onClick = function ( e ) {\n\tvar $options, lastClickedIndex, nowClickedIndex, i, direction, wasSelected, items,\n\t\t$lastClicked = this.$lastClicked,\n\t\t$nowClicked = $( e.target ).closest( '.oo-ui-checkboxMultioptionWidget' )\n\t\t\t.not( '.oo-ui-widget-disabled' );\n\n\t// Allow selecting multiple options at once by Shift-clicking them\n\tif ( $lastClicked && $nowClicked.length && e.shiftKey ) {\n\t\t$options = this.$group.find( '.oo-ui-checkboxMultioptionWidget' );\n\t\tlastClickedIndex = $options.index( $lastClicked );\n\t\tnowClickedIndex = $options.index( $nowClicked );\n\t\t// If it's the same item, either the user is being silly, or it's a fake event generated by the\n\t\t// browser. In either case we don't need custom handling.\n\t\tif ( nowClickedIndex !== lastClickedIndex ) {\n\t\t\titems = this.items;\n\t\t\twasSelected = items[ nowClickedIndex ].isSelected();\n\t\t\tdirection = nowClickedIndex > lastClickedIndex ? 1 : -1;\n\n\t\t\t// This depends on the DOM order of the items and the order of the .items array being the same.\n\t\t\tfor ( i = lastClickedIndex; i !== nowClickedIndex; i += direction ) {\n\t\t\t\tif ( !items[ i ].isDisabled() ) {\n\t\t\t\t\titems[ i ].setSelected( !wasSelected );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// For the now-clicked element, use immediate timeout to allow the browser to do its own\n\t\t\t// handling first, then set our value. The order in which events happen is different for\n\t\t\t// clicks on the <input> and on the <label> and there are additional fake clicks fired for\n\t\t\t// non-click actions that change the checkboxes.\n\t\t\te.preventDefault();\n\t\t\tsetTimeout( function () {\n\t\t\t\tif ( !items[ nowClickedIndex ].isDisabled() ) {\n\t\t\t\t\titems[ nowClickedIndex ].setSelected( !wasSelected );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tif ( $nowClicked.length ) {\n\t\tthis.$lastClicked = $nowClicked;\n\t}\n};\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.CheckboxMultiselectWidget.prototype.focus = function () {\n\tvar item;\n\tif ( !this.isDisabled() ) {\n\t\titem = this.getRelativeFocusableItem( null, 1 );\n\t\tif ( item ) {\n\t\t\titem.focus();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n","/**\n * Progress bars visually display the status of an operation, such as a download,\n * and can be either determinate or indeterminate:\n *\n * - **determinate** process bars show the percent of an operation that is complete.\n *\n * - **indeterminate** process bars use a visual display of motion to indicate that an operation\n *   is taking place. Because the extent of an indeterminate operation is unknown, the bar does\n *   not use percentages.\n *\n * The value of the `progress` configuration determines whether the bar is determinate or indeterminate.\n *\n *     @example\n *     // Examples of determinate and indeterminate progress bars.\n *     var progressBar1 = new OO.ui.ProgressBarWidget( {\n *         progress: 33\n *     } );\n *     var progressBar2 = new OO.ui.ProgressBarWidget();\n *\n *     // Create a FieldsetLayout to layout progress bars\n *     var fieldset = new OO.ui.FieldsetLayout;\n *     fieldset.addItems( [\n *        new OO.ui.FieldLayout( progressBar1, {label: 'Determinate', align: 'top'}),\n *        new OO.ui.FieldLayout( progressBar2, {label: 'Indeterminate', align: 'top'})\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number|boolean} [progress=false] The type of progress bar (determinate or indeterminate).\n *  To create a determinate progress bar, specify a number that reflects the initial percent complete.\n *  By default, the progress bar is indeterminate.\n */\nOO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ProgressBarWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$bar = $( '<div>' );\n\tthis.progress = null;\n\n\t// Initialization\n\tthis.setProgress( config.progress !== undefined ? config.progress : false );\n\tthis.$bar.addClass( 'oo-ui-progressBarWidget-bar' );\n\tthis.$element\n\t\t.attr( {\n\t\t\trole: 'progressbar',\n\t\t\t'aria-valuemin': 0,\n\t\t\t'aria-valuemax': 100\n\t\t} )\n\t\t.addClass( 'oo-ui-progressBarWidget' )\n\t\t.append( this.$bar );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ProgressBarWidget.static.tagName = 'div';\n\n/* Methods */\n\n/**\n * Get the percent of the progress that has been completed. Indeterminate progresses will return `false`.\n *\n * @return {number|boolean} Progress percent\n */\nOO.ui.ProgressBarWidget.prototype.getProgress = function () {\n\treturn this.progress;\n};\n\n/**\n * Set the percent of the process completed or `false` for an indeterminate process.\n *\n * @param {number|boolean} progress Progress percent or `false` for indeterminate\n */\nOO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {\n\tthis.progress = progress;\n\n\tif ( progress !== false ) {\n\t\tthis.$bar.css( 'width', this.progress + '%' );\n\t\tthis.$element.attr( 'aria-valuenow', this.progress );\n\t} else {\n\t\tthis.$bar.css( 'width', '' );\n\t\tthis.$element.removeAttr( 'aria-valuenow' );\n\t}\n\tthis.$element.toggleClass( 'oo-ui-progressBarWidget-indeterminate', progress === false );\n};\n","/**\n * InputWidget is the base class for all input widgets, which\n * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},\n * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.AccessKeyedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.\n * @cfg {string} [value=''] The value of the input.\n * @cfg {string} [dir] The directionality of the input (ltr/rtl).\n * @cfg {string} [inputId] The value of the input’s HTML `id` attribute.\n * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input\n *  before it is accepted.\n */\nOO.ui.InputWidget = function OoUiInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.InputWidget.parent.call( this, config );\n\n\t// Properties\n\t// See #reusePreInfuseDOM about config.$input\n\tthis.$input = config.$input || this.getInputElement( config );\n\tthis.value = '';\n\tthis.inputFilter = config.inputFilter;\n\n\t// Mixin constructors\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );\n\tOO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$input } ) );\n\n\t// Events\n\tthis.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );\n\n\t// Initialization\n\tthis.$input\n\t\t.addClass( 'oo-ui-inputWidget-input' )\n\t\t.attr( 'name', config.name )\n\t\t.prop( 'disabled', this.isDisabled() );\n\tthis.$element\n\t\t.addClass( 'oo-ui-inputWidget' )\n\t\t.append( this.$input );\n\tthis.setValue( config.value );\n\tif ( config.dir ) {\n\t\tthis.setDir( config.dir );\n\t}\n\tif ( config.inputId !== undefined ) {\n\t\tthis.setInputId( config.inputId );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.AccessKeyedElement );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.InputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Reusing `$input` lets browsers preserve inputted values across page reloads, see T114134.\n\tconfig.$input = $( node ).find( '.oo-ui-inputWidget-input' );\n\treturn config;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config );\n\tif ( config.$input && config.$input.length ) {\n\t\tstate.value = config.$input.val();\n\t\t// Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward\n\t\tstate.focus = config.$input.is( ':focus' );\n\t}\n\treturn state;\n};\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the value of the input changes.\n *\n * @param {string} value\n */\n\n/* Methods */\n\n/**\n * Get input element.\n *\n * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in\n * different circumstances. The element must have a `value` property (like form elements).\n *\n * @protected\n * @param {Object} config Configuration options\n * @return {jQuery} Input element\n */\nOO.ui.InputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' );\n};\n\n/**\n * Handle potentially value-changing events.\n *\n * @private\n * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event\n */\nOO.ui.InputWidget.prototype.onEdit = function () {\n\tvar widget = this;\n\tif ( !this.isDisabled() ) {\n\t\t// Allow the stack to clear so the value will be updated\n\t\tsetTimeout( function () {\n\t\t\twidget.setValue( widget.$input.val() );\n\t\t} );\n\t}\n};\n\n/**\n * Get the value of the input.\n *\n * @return {string} Input value\n */\nOO.ui.InputWidget.prototype.getValue = function () {\n\t// Resynchronize our internal data with DOM data. Other scripts executing on the page can modify\n\t// it, and we won't know unless they're kind enough to trigger a 'change' event.\n\tvar value = this.$input.val();\n\tif ( this.value !== value ) {\n\t\tthis.setValue( value );\n\t}\n\treturn this.value;\n};\n\n/**\n * Set the directionality of the input.\n *\n * @param {string} dir Text directionality: 'ltr', 'rtl' or 'auto'\n * @chainable\n */\nOO.ui.InputWidget.prototype.setDir = function ( dir ) {\n\tthis.$input.prop( 'dir', dir );\n\treturn this;\n};\n\n/**\n * Set the value of the input.\n *\n * @param {string} value New value\n * @fires change\n * @chainable\n */\nOO.ui.InputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\t// Update the DOM if it has changed. Note that with cleanUpValue, it\n\t// is possible for the DOM value to change without this.value changing.\n\tif ( this.$input.val() !== value ) {\n\t\tthis.$input.val( value );\n\t}\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', this.value );\n\t}\n\treturn this;\n};\n\n/**\n * Clean up incoming value.\n *\n * Ensures value is a string, and converts undefined and null to empty string.\n *\n * @private\n * @param {string} value Original value\n * @return {string} Cleaned up value\n */\nOO.ui.InputWidget.prototype.cleanUpValue = function ( value ) {\n\tif ( value === undefined || value === null ) {\n\t\treturn '';\n\t} else if ( this.inputFilter ) {\n\t\treturn this.inputFilter( String( value ) );\n\t} else {\n\t\treturn String( value );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.prototype.setDisabled = function ( state ) {\n\tOO.ui.InputWidget.parent.prototype.setDisabled.call( this, state );\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t}\n\treturn this;\n};\n\n/**\n * Set the 'id' attribute of the `<input>` element.\n *\n * @param {string} id\n * @chainable\n */\nOO.ui.InputWidget.prototype.setInputId = function ( id ) {\n\tthis.$input.attr( 'id', id );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.InputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.InputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.value !== undefined && state.value !== this.getValue() ) {\n\t\tthis.setValue( state.value );\n\t}\n\tif ( state.focus ) {\n\t\tthis.focus();\n\t}\n};\n","/**\n * Data widget intended for creating 'hidden'-type inputs.\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [value=''] The value of the input.\n * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.\n */\nOO.ui.HiddenInputWidget = function OoUiHiddenInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { value: '', name: '' }, config );\n\n\t// Parent constructor\n\tOO.ui.HiddenInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.attr( {\n\t\ttype: 'hidden',\n\t\tvalue: config.value,\n\t\tname: config.name\n\t} );\n\tthis.$element.removeAttr( 'aria-disabled' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.HiddenInputWidget, OO.ui.Widget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.HiddenInputWidget.static.tagName = 'input';\n","/**\n * ButtonInputWidget is used to submit HTML forms and is intended to be used within\n * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably\n * want to use OO.ui.ButtonWidget instead. Button input widgets can be rendered as either an\n * HTML `<button>` (the default) or an HTML `<input>` tags. See the\n * [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // A ButtonInputWidget rendered as an HTML button, the default.\n *     var button = new OO.ui.ButtonInputWidget( {\n *         label: 'Input button',\n *         icon: 'check',\n *         value: 'check'\n *     } );\n *     $( 'body' ).append( button.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs#Button_inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [type='button'] The value of the HTML `'type'` attribute: 'button', 'submit' or 'reset'.\n * @cfg {boolean} [useInputTag=false] Use an `<input>` tag instead of a `<button>` tag, the default.\n *  Widgets configured to be an `<input>` do not support {@link #icon icons} and {@link #indicator indicators},\n *  non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only\n *  be set to `true` when there’s need to support IE 6 in a form with multiple buttons.\n */\nOO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { type: 'button', useInputTag: false }, config );\n\n\t// See InputWidget#reusePreInfuseDOM about config.$input\n\tif ( config.$input ) {\n\t\tconfig.$input.empty();\n\t}\n\n\t// Properties (must be set before parent constructor, which calls #setValue)\n\tthis.useInputTag = config.useInputTag;\n\n\t// Parent constructor\n\tOO.ui.ButtonInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );\n\n\t// Initialization\n\tif ( !config.useInputTag ) {\n\t\tthis.$input.append( this.$icon, this.$label, this.$indicator );\n\t}\n\tthis.$element.addClass( 'oo-ui-buttonInputWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonInputWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {\n\tvar type;\n\ttype = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button';\n\treturn $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type=\"' + type + '\">' );\n};\n\n/**\n * Set label value.\n *\n * If #useInputTag is `true`, the label is set as the `value` of the `<input>` tag.\n *\n * @param {jQuery|string|Function|null} label Label nodes, text, a function that returns nodes or\n *  text, or `null` for no label\n * @chainable\n */\nOO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {\n\tif ( typeof label === 'function' ) {\n\t\tlabel = OO.ui.resolveMsg( label );\n\t}\n\n\tif ( this.useInputTag ) {\n\t\t// Discard non-plaintext labels\n\t\tif ( typeof label !== 'string' ) {\n\t\t\tlabel = '';\n\t\t}\n\n\t\tthis.$input.val( label );\n\t}\n\n\treturn OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label );\n};\n\n/**\n * Set the value of the input.\n *\n * This method is disabled for button inputs configured as {@link #useInputTag <input> tags}, as\n * they do not support {@link #value values}.\n *\n * @param {string} value New value\n * @chainable\n */\nOO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {\n\tif ( !this.useInputTag ) {\n\t\tOO.ui.ButtonInputWidget.parent.prototype.setValue.call( this, value );\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonInputWidget.prototype.getInputId = function () {\n\t// Disable generating `<label>` elements for buttons. One would very rarely need additional label\n\t// for a button, and it's already a big clickable target, and it causes unexpected rendering.\n\treturn null;\n};\n","/**\n * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.\n * Note that these {@link OO.ui.InputWidget input widgets} are best laid out\n * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}\n * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // An example of selected, unselected, and disabled checkbox inputs\n *     var checkbox1=new OO.ui.CheckboxInputWidget( {\n *          value: 'a',\n *          selected: true\n *     } );\n *     var checkbox2=new OO.ui.CheckboxInputWidget( {\n *         value: 'b'\n *     } );\n *     var checkbox3=new OO.ui.CheckboxInputWidget( {\n *         value:'c',\n *         disabled: true\n *     } );\n *     // Create a fieldset layout with fields for each checkbox.\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Checkboxes'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( checkbox1, { label: 'Selected checkbox', align: 'inline' } ),\n *         new OO.ui.FieldLayout( checkbox2, { label: 'Unselected checkbox', align: 'inline' } ),\n *         new OO.ui.FieldLayout( checkbox3, { label: 'Disabled checkbox', align: 'inline' } ),\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Select the checkbox initially. By default, the checkbox is not selected.\n */\nOO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.CheckboxInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxInputWidget' )\n\t\t// Required for pretty styling in WikimediaUI theme\n\t\t.append( $( '<span>' ) );\n\tthis.setSelected( config.selected !== undefined ? config.selected : false );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.static.tagName = 'span';\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.checked = config.$input.prop( 'checked' );\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.CheckboxInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'checkbox' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.onEdit = function () {\n\tvar widget = this;\n\tif ( !this.isDisabled() ) {\n\t\t// Allow the stack to clear so the value will be updated\n\t\tsetTimeout( function () {\n\t\t\twidget.setSelected( widget.$input.prop( 'checked' ) );\n\t\t} );\n\t}\n};\n\n/**\n * Set selection state of this checkbox.\n *\n * @param {boolean} state `true` for selected\n * @chainable\n */\nOO.ui.CheckboxInputWidget.prototype.setSelected = function ( state ) {\n\tstate = !!state;\n\tif ( this.selected !== state ) {\n\t\tthis.selected = state;\n\t\tthis.$input.prop( 'checked', this.selected );\n\t\tthis.emit( 'change', this.selected );\n\t}\n\treturn this;\n};\n\n/**\n * Check if this checkbox is selected.\n *\n * @return {boolean} Checkbox is selected\n */\nOO.ui.CheckboxInputWidget.prototype.isSelected = function () {\n\t// Resynchronize our internal data with DOM data. Other scripts executing on the page can modify\n\t// it, and we won't know unless they're kind enough to trigger a 'change' event.\n\tvar selected = this.$input.prop( 'checked' );\n\tif ( this.selected !== selected ) {\n\t\tthis.setSelected( selected );\n\t}\n\treturn this.selected;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$input.click();\n\t}\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.CheckboxInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.checked !== undefined && state.checked !== this.isSelected() ) {\n\t\tthis.setSelected( state.checked );\n\t}\n};\n","/**\n * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used\n * within an HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value\n * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n * A DropdownInputWidget always has a value (one of the options is always selected), unless there\n * are no options. If no `value` configuration option is provided, the first option is selected.\n * If you need a state representing no value (no option being selected), use a DropdownWidget.\n *\n * This and OO.ui.RadioSelectInputWidget support the same configuration options.\n *\n *     @example\n *     // Example: A DropdownInputWidget with three options\n *     var dropdownInput = new OO.ui.DropdownInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( dropdownInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n * @cfg {Object} [dropdown] Configuration options for {@link OO.ui.DropdownWidget DropdownWidget}\n */\nOO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// See InputWidget#reusePreInfuseDOM about config.$input\n\tif ( config.$input ) {\n\t\tconfig.$input.addClass( 'oo-ui-element-hidden' );\n\t}\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown );\n\n\t// Parent constructor\n\tOO.ui.DropdownInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TitledElement.call( this, config );\n\n\t// Events\n\tthis.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );\n\n\t// Initialization\n\tthis.setOptions( config.options || [] );\n\t// Set the value again, after we did setOptions(). The call from parent doesn't work because the\n\t// widget has no valid options when it happens.\n\tthis.setValue( config.value );\n\tthis.$element\n\t\t.addClass( 'oo-ui-dropdownInputWidget' )\n\t\t.append( this.dropdownWidget.$element );\n\tthis.setTabIndexedElement( null );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement );\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.DropdownInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'hidden' );\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.MenuOptionWidget|null} item Selected menu item\n */\nOO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {\n\tthis.setValue( item ? item.getData() : '' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {\n\tvar selected;\n\tvalue = this.cleanUpValue( value );\n\t// Only allow setting values that are actually present in the dropdown\n\tselected = this.dropdownWidget.getMenu().getItemFromData( value ) ||\n\t\tthis.dropdownWidget.getMenu().findFirstSelectableItem();\n\tthis.dropdownWidget.getMenu().selectItem( selected );\n\tvalue = selected ? selected.getData() : '';\n\tOO.ui.DropdownInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.dropdownWidget.setDisabled( state );\n\tOO.ui.DropdownInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.DropdownInputWidget.prototype.setOptions = function ( options ) {\n\tvar\n\t\tvalue = this.getValue(),\n\t\twidget = this;\n\n\t// Rebuild the dropdown menu\n\tthis.dropdownWidget.getMenu()\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue = widget.cleanUpValue( opt.data );\n\n\t\t\tif ( opt.optgroup === undefined ) {\n\t\t\t\treturn new OO.ui.MenuOptionWidget( {\n\t\t\t\t\tdata: optValue,\n\t\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\treturn new OO.ui.MenuSectionOptionWidget( {\n\t\t\t\t\tlabel: opt.optgroup\n\t\t\t\t} );\n\t\t\t}\n\t\t} ) );\n\n\t// Restore the previous value, or reset to something sensible\n\tif ( this.dropdownWidget.getMenu().getItemFromData( value ) ) {\n\t\t// Previous value is still available, ensure consistency with the dropdown\n\t\tthis.setValue( value );\n\t} else {\n\t\t// No longer valid, reset\n\t\tif ( options.length ) {\n\t\t\tthis.setValue( options[ 0 ].data );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.focus = function () {\n\tthis.dropdownWidget.focus();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.DropdownInputWidget.prototype.blur = function () {\n\tthis.dropdownWidget.blur();\n\treturn this;\n};\n","/**\n * RadioInputWidget creates a single radio button. Because radio buttons are usually used as a set,\n * in most cases you will want to use a {@link OO.ui.RadioSelectWidget radio select}\n * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // An example of selected, unselected, and disabled radio inputs\n *     var radio1 = new OO.ui.RadioInputWidget( {\n *         value: 'a',\n *         selected: true\n *     } );\n *     var radio2 = new OO.ui.RadioInputWidget( {\n *         value: 'b'\n *     } );\n *     var radio3 = new OO.ui.RadioInputWidget( {\n *         value: 'c',\n *         disabled: true\n *     } );\n *     // Create a fieldset layout with fields for each radio button.\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Radio inputs'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( radio1, { label: 'Selected', align: 'inline' } ),\n *         new OO.ui.FieldLayout( radio2, { label: 'Unselected', align: 'inline' } ),\n *         new OO.ui.FieldLayout( radio3, { label: 'Disabled', align: 'inline' } ),\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [selected=false] Select the radio button initially. By default, the radio button is not selected.\n */\nOO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.RadioInputWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioInputWidget' )\n\t\t// Required for pretty styling in WikimediaUI theme\n\t\t.append( $( '<span>' ) );\n\tthis.setSelected( config.selected !== undefined ? config.selected : false );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.static.tagName = 'span';\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.checked = config.$input.prop( 'checked' );\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.RadioInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'radio' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.onEdit = function () {\n\t// RadioInputWidget doesn't track its state.\n};\n\n/**\n * Set selection state of this radio button.\n *\n * @param {boolean} state `true` for selected\n * @chainable\n */\nOO.ui.RadioInputWidget.prototype.setSelected = function ( state ) {\n\t// RadioInputWidget doesn't track its state.\n\tthis.$input.prop( 'checked', state );\n\treturn this;\n};\n\n/**\n * Check if this radio button is selected.\n *\n * @return {boolean} Radio is selected\n */\nOO.ui.RadioInputWidget.prototype.isSelected = function () {\n\treturn this.$input.prop( 'checked' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.$input.click();\n\t}\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.RadioInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.checked !== undefined && state.checked !== this.isSelected() ) {\n\t\tthis.setSelected( state.checked );\n\t}\n};\n","/**\n * RadioSelectInputWidget is a {@link OO.ui.RadioSelectWidget RadioSelectWidget} intended to be used\n * within an HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value\n * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n * This and OO.ui.DropdownInputWidget support the same configuration options.\n *\n *     @example\n *     // Example: A RadioSelectInputWidget with three options\n *     var radioSelectInput = new OO.ui.RadioSelectInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( radioSelectInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.RadioSelectInputWidget = function OoUiRadioSelectInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.radioSelectWidget = new OO.ui.RadioSelectWidget();\n\n\t// Parent constructor\n\tOO.ui.RadioSelectInputWidget.parent.call( this, config );\n\n\t// Events\n\tthis.radioSelectWidget.connect( this, { select: 'onMenuSelect' } );\n\n\t// Initialization\n\tthis.setOptions( config.options || [] );\n\tthis.$element\n\t\t.addClass( 'oo-ui-radioSelectInputWidget' )\n\t\t.append( this.radioSelectWidget.$element );\n\tthis.setTabIndexedElement( null );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.RadioSelectInputWidget, OO.ui.InputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.RadioSelectInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.value = $( node ).find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked' ).val();\n\treturn state;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.RadioSelectInputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Cannot reuse the `<input type=radio>` set\n\tdelete config.$input;\n\treturn config;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.RadioSelectInputWidget.prototype.getInputElement = function () {\n\treturn $( '<input>' ).attr( 'type', 'hidden' );\n};\n\n/**\n * Handles menu select events.\n *\n * @private\n * @param {OO.ui.RadioOptionWidget} item Selected menu item\n */\nOO.ui.RadioSelectInputWidget.prototype.onMenuSelect = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\tthis.radioSelectWidget.selectItemByData( value );\n\tOO.ui.RadioSelectInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.radioSelectWidget.setDisabled( state );\n\tOO.ui.RadioSelectInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {\n\tvar\n\t\tvalue = this.getValue(),\n\t\twidget = this;\n\n\t// Rebuild the radioSelect menu\n\tthis.radioSelectWidget\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue = widget.cleanUpValue( opt.data );\n\t\t\treturn new OO.ui.RadioOptionWidget( {\n\t\t\t\tdata: optValue,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue\n\t\t\t} );\n\t\t} ) );\n\n\t// Restore the previous value, or reset to something sensible\n\tif ( this.radioSelectWidget.getItemFromData( value ) ) {\n\t\t// Previous value is still available, ensure consistency with the radioSelect\n\t\tthis.setValue( value );\n\t} else {\n\t\t// No longer valid, reset\n\t\tif ( options.length ) {\n\t\t\tthis.setValue( options[ 0 ].data );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.focus = function () {\n\tthis.radioSelectWidget.focus();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.RadioSelectInputWidget.prototype.blur = function () {\n\tthis.radioSelectWidget.blur();\n\treturn this;\n};\n","/**\n * CheckboxMultiselectInputWidget is a\n * {@link OO.ui.CheckboxMultiselectWidget CheckboxMultiselectWidget} intended to be used within a\n * HTML form, such as a OO.ui.FormLayout. The selected values are synchronized with the value of\n * HTML `<input type=checkbox>` tags. Please see the [OOjs UI documentation on MediaWiki][1] for\n * more information about input widgets.\n *\n *     @example\n *     // Example: A CheckboxMultiselectInputWidget with three options\n *     var multiselectInput = new OO.ui.CheckboxMultiselectInputWidget( {\n *         options: [\n *             { data: 'a', label: 'First' },\n *             { data: 'b', label: 'Second'},\n *             { data: 'c', label: 'Third' }\n *         ]\n *     } );\n *     $( 'body' ).append( multiselectInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: …, disabled: … }`\n */\nOO.ui.CheckboxMultiselectInputWidget = function OoUiCheckboxMultiselectInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be done before parent constructor which calls #setDisabled)\n\tthis.checkboxMultiselectWidget = new OO.ui.CheckboxMultiselectWidget();\n\n\t// Parent constructor\n\tOO.ui.CheckboxMultiselectInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.inputName = config.name;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-checkboxMultiselectInputWidget' )\n\t\t.append( this.checkboxMultiselectWidget.$element );\n\t// We don't use this.$input, but rather the CheckboxInputWidgets inside each option\n\tthis.$input.detach();\n\tthis.setOptions( config.options || [] );\n\t// Have to repeat this from parent, as we need options to be set up for this to make sense\n\tthis.setValue( config.value );\n\n\t// setValue when checkboxMultiselectWidget changes\n\tthis.checkboxMultiselectWidget.on( 'change', function () {\n\t\tthis.setValue( this.checkboxMultiselectWidget.getSelectedItemsData() );\n\t}.bind( this ) );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CheckboxMultiselectInputWidget, OO.ui.InputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.CheckboxMultiselectInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.value = $( node ).find( '.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked' )\n\t\t.toArray().map( function ( el ) { return el.value; } );\n\treturn state;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.static.reusePreInfuseDOM = function ( node, config ) {\n\tconfig = OO.ui.CheckboxMultiselectInputWidget.parent.static.reusePreInfuseDOM( node, config );\n\t// Cannot reuse the `<input type=checkbox>` set\n\tdelete config.$input;\n\treturn config;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.getInputElement = function () {\n\t// Actually unused\n\treturn $( '<unused>' );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.getValue = function () {\n\tvar value = this.$element.find( '.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked' )\n\t\t.toArray().map( function ( el ) { return el.value; } );\n\tif ( this.value !== value ) {\n\t\tthis.setValue( value );\n\t}\n\treturn this.value;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setValue = function ( value ) {\n\tvalue = this.cleanUpValue( value );\n\tthis.checkboxMultiselectWidget.selectItemsByData( value );\n\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.setValue.call( this, value );\n\treturn this;\n};\n\n/**\n * Clean up incoming value.\n *\n * @param {string[]} value Original value\n * @return {string[]} Cleaned up value\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.cleanUpValue = function ( value ) {\n\tvar i, singleValue,\n\t\tcleanValue = [];\n\tif ( !Array.isArray( value ) ) {\n\t\treturn cleanValue;\n\t}\n\tfor ( i = 0; i < value.length; i++ ) {\n\t\tsingleValue =\n\t\t\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.cleanUpValue.call( this, value[ i ] );\n\t\t// Remove options that we don't have here\n\t\tif ( !this.checkboxMultiselectWidget.getItemFromData( singleValue ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tcleanValue.push( singleValue );\n\t}\n\treturn cleanValue;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setDisabled = function ( state ) {\n\tthis.checkboxMultiselectWidget.setDisabled( state );\n\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.setDisabled.call( this, state );\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: …, disabled: … }`\n * @chainable\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.setOptions = function ( options ) {\n\tvar widget = this;\n\n\t// Rebuild the checkboxMultiselectWidget menu\n\tthis.checkboxMultiselectWidget\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\tvar optValue, item, optDisabled;\n\t\t\toptValue =\n\t\t\t\tOO.ui.CheckboxMultiselectInputWidget.parent.prototype.cleanUpValue.call( widget, opt.data );\n\t\t\toptDisabled = opt.disabled !== undefined ? opt.disabled : false;\n\t\t\titem = new OO.ui.CheckboxMultioptionWidget( {\n\t\t\t\tdata: optValue,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : optValue,\n\t\t\t\tdisabled: optDisabled\n\t\t\t} );\n\t\t\t// Set the 'name' and 'value' for form submission\n\t\t\titem.checkbox.$input.attr( 'name', widget.inputName );\n\t\t\titem.checkbox.setValue( optValue );\n\t\t\treturn item;\n\t\t} ) );\n\n\t// Re-set the value, checking the checkboxes as needed.\n\t// This will also get rid of any stale options that we just removed.\n\tthis.setValue( this.getValue() );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CheckboxMultiselectInputWidget.prototype.focus = function () {\n\tthis.checkboxMultiselectWidget.focus();\n\treturn this;\n};\n","/**\n * TextInputWidgets, like HTML text inputs, can be configured with options that customize the\n * size of the field as well as its presentation. In addition, these widgets can be configured\n * with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators}, an optional\n * validation-pattern (used to determine if an input value is valid or not) and an input filter,\n * which modifies incoming values rather than validating them.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n *     @example\n *     // Example of a text input widget\n *     var textInput = new OO.ui.TextInputWidget( {\n *         value: 'Text input'\n *     } )\n *     $( 'body' ).append( textInput.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n * @class\n * @extends OO.ui.InputWidget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password'\n *  'email', 'url' or 'number'.\n * @cfg {string} [placeholder] Placeholder text\n * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to\n *  instruct the browser to focus this widget.\n * @cfg {boolean} [readOnly=false] Prevent changes to the value of the text input.\n * @cfg {number} [maxLength] Maximum number of characters allowed in the input.\n * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of\n *  the value or placeholder text: `'before'` or `'after'`\n * @cfg {boolean} [required=false] Mark the field as required. Implies `indicator: 'required'`.\n * @cfg {boolean} [autocomplete=true] Should the browser support autocomplete for this field\n * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a\n *  pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'\n *  (the value must contain only numbers); when RegExp, a regular expression that must match the\n *  value for it to be considered valid; when Function, a function receiving the value as parameter\n *  that must return true, or promise resolving to true, for it to be considered valid.\n */\nOO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\ttype: 'text',\n\t\tlabelPosition: 'after'\n\t}, config );\n\n\tif ( config.multiline ) {\n\t\tOO.ui.warnDeprecation( 'TextInputWidget: config.multiline is deprecated. Use the MultilineTextInputWidget instead. See T130434.' );\n\t\treturn new OO.ui.MultilineTextInputWidget( config );\n\t}\n\n\t// Parent constructor\n\tOO.ui.TextInputWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$input } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.type = this.getSaneType( config );\n\tthis.readOnly = false;\n\tthis.required = false;\n\tthis.validate = null;\n\tthis.styleHeight = null;\n\tthis.scrollWidth = null;\n\n\tthis.setValidation( config.validate );\n\tthis.setLabelPosition( config.labelPosition );\n\n\t// Events\n\tthis.$input.on( {\n\t\tkeypress: this.onKeyPress.bind( this ),\n\t\tblur: this.onBlur.bind( this ),\n\t\tfocus: this.onFocus.bind( this )\n\t} );\n\tthis.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );\n\tthis.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );\n\tthis.on( 'labelChange', this.updatePosition.bind( this ) );\n\tthis.on( 'change', OO.ui.debounce( this.onDebouncedChange.bind( this ), 250 ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-textInputWidget oo-ui-textInputWidget-type-' + this.type )\n\t\t.append( this.$icon, this.$indicator );\n\tthis.setReadOnly( !!config.readOnly );\n\tthis.setRequired( !!config.required );\n\tif ( config.placeholder !== undefined ) {\n\t\tthis.$input.attr( 'placeholder', config.placeholder );\n\t}\n\tif ( config.maxLength !== undefined ) {\n\t\tthis.$input.attr( 'maxlength', config.maxLength );\n\t}\n\tif ( config.autofocus ) {\n\t\tthis.$input.attr( 'autofocus', 'autofocus' );\n\t}\n\tif ( config.autocomplete === false ) {\n\t\tthis.$input.attr( 'autocomplete', 'off' );\n\t\t// Turning off autocompletion also disables \"form caching\" when the user navigates to a\n\t\t// different page and then clicks \"Back\". Re-enable it when leaving. Borrowed from jQuery UI.\n\t\t$( window ).on( {\n\t\t\tbeforeunload: function () {\n\t\t\t\tthis.$input.removeAttr( 'autocomplete' );\n\t\t\t}.bind( this ),\n\t\t\tpageshow: function () {\n\t\t\t\t// Browsers don't seem to actually fire this event on \"Back\", they instead just reload the\n\t\t\t\t// whole page... it shouldn't hurt, though.\n\t\t\t\tthis.$input.attr( 'autocomplete', 'off' );\n\t\t\t}.bind( this )\n\t\t} );\n\t}\n\tif ( this.label ) {\n\t\tthis.isWaitingToBeAttached = true;\n\t\tthis.installParentChangeDetector();\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\nOO.ui.TextInputWidget.static.validationPatterns = {\n\t'non-empty': /.+/,\n\tinteger: /^\\d+$/\n};\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.TextInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config );\n\treturn state;\n};\n\n/* Events */\n\n/**\n * An `enter` event is emitted when the user presses 'enter' inside the text box.\n *\n * @event enter\n */\n\n/* Methods */\n\n/**\n * Handle icon mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle indicator mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @fires enter If enter key is pressed\n */\nOO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {\n\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\tthis.emit( 'enter', e );\n\t}\n};\n\n/**\n * Handle blur events.\n *\n * @private\n * @param {jQuery.Event} e Blur event\n */\nOO.ui.TextInputWidget.prototype.onBlur = function () {\n\tthis.setValidityFlag();\n};\n\n/**\n * Handle focus events.\n *\n * @private\n * @param {jQuery.Event} e Focus event\n */\nOO.ui.TextInputWidget.prototype.onFocus = function () {\n\tif ( this.isWaitingToBeAttached ) {\n\t\t// If we've received focus, then we must be attached to the document, and if\n\t\t// isWaitingToBeAttached is still true, that means the handler never fired. Fire it now.\n\t\tthis.onElementAttach();\n\t}\n\tthis.setValidityFlag( true );\n};\n\n/**\n * Handle element attach events.\n *\n * @private\n * @param {jQuery.Event} e Element attach event\n */\nOO.ui.TextInputWidget.prototype.onElementAttach = function () {\n\tthis.isWaitingToBeAttached = false;\n\t// Any previously calculated size is now probably invalid if we reattached elsewhere\n\tthis.valCache = null;\n\tthis.positionLabel();\n};\n\n/**\n * Handle debounced change events.\n *\n * @param {string} value\n * @private\n */\nOO.ui.TextInputWidget.prototype.onDebouncedChange = function () {\n\tthis.setValidityFlag();\n};\n\n/**\n * Check if the input is {@link #readOnly read-only}.\n *\n * @return {boolean}\n */\nOO.ui.TextInputWidget.prototype.isReadOnly = function () {\n\treturn this.readOnly;\n};\n\n/**\n * Set the {@link #readOnly read-only} state of the input.\n *\n * @param {boolean} state Make input read-only\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {\n\tthis.readOnly = !!state;\n\tthis.$input.prop( 'readOnly', this.readOnly );\n\treturn this;\n};\n\n/**\n * Check if the input is {@link #required required}.\n *\n * @return {boolean}\n */\nOO.ui.TextInputWidget.prototype.isRequired = function () {\n\treturn this.required;\n};\n\n/**\n * Set the {@link #required required} state of the input.\n *\n * @param {boolean} state Make input required\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setRequired = function ( state ) {\n\tthis.required = !!state;\n\tif ( this.required ) {\n\t\tthis.$input\n\t\t\t.prop( 'required', true )\n\t\t\t.attr( 'aria-required', 'true' );\n\t\tif ( this.getIndicator() === null ) {\n\t\t\tthis.setIndicator( 'required' );\n\t\t}\n\t} else {\n\t\tthis.$input\n\t\t\t.prop( 'required', false )\n\t\t\t.removeAttr( 'aria-required' );\n\t\tif ( this.getIndicator() === 'required' ) {\n\t\t\tthis.setIndicator( null );\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Support function for making #onElementAttach work across browsers.\n *\n * This whole function could be replaced with one line of code using the DOMNodeInsertedIntoDocument\n * event, but it's not supported by Firefox and allegedly deprecated, so we only use it as fallback.\n *\n * Due to MutationObserver performance woes, #onElementAttach is only somewhat reliably called the\n * first time that the element gets attached to the documented.\n */\nOO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {\n\tvar mutationObserver, onRemove, topmostNode, fakeParentNode,\n\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,\n\t\twidget = this;\n\n\tif ( MutationObserver ) {\n\t\t// The new way. If only it wasn't so ugly.\n\n\t\tif ( this.isElementAttached() ) {\n\t\t\t// Widget is attached already, do nothing. This breaks the functionality of this function when\n\t\t\t// the widget is detached and reattached. Alas, doing this correctly with MutationObserver\n\t\t\t// would require observation of the whole document, which would hurt performance of other,\n\t\t\t// more important code.\n\t\t\treturn;\n\t\t}\n\n\t\t// Find topmost node in the tree\n\t\ttopmostNode = this.$element[ 0 ];\n\t\twhile ( topmostNode.parentNode ) {\n\t\t\ttopmostNode = topmostNode.parentNode;\n\t\t}\n\n\t\t// We have no way to detect the $element being attached somewhere without observing the entire\n\t\t// DOM with subtree modifications, which would hurt performance. So we cheat: we hook to the\n\t\t// parent node of $element, and instead detect when $element is removed from it (and thus\n\t\t// probably attached somewhere else). If there is no parent, we create a \"fake\" one. If it\n\t\t// doesn't get attached, we end up back here and create the parent.\n\n\t\tmutationObserver = new MutationObserver( function ( mutations ) {\n\t\t\tvar i, j, removedNodes;\n\t\t\tfor ( i = 0; i < mutations.length; i++ ) {\n\t\t\t\tremovedNodes = mutations[ i ].removedNodes;\n\t\t\t\tfor ( j = 0; j < removedNodes.length; j++ ) {\n\t\t\t\t\tif ( removedNodes[ j ] === topmostNode ) {\n\t\t\t\t\t\tsetTimeout( onRemove, 0 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tonRemove = function () {\n\t\t\t// If the node was attached somewhere else, report it\n\t\t\tif ( widget.isElementAttached() ) {\n\t\t\t\twidget.onElementAttach();\n\t\t\t}\n\t\t\tmutationObserver.disconnect();\n\t\t\twidget.installParentChangeDetector();\n\t\t};\n\n\t\t// Create a fake parent and observe it\n\t\tfakeParentNode = $( '<div>' ).append( topmostNode )[ 0 ];\n\t\tmutationObserver.observe( fakeParentNode, { childList: true } );\n\t} else {\n\t\t// Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for\n\t\t// detachment and reattachment, but it's not supported by Firefox and allegedly deprecated.\n\t\tthis.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );\n\t}\n};\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {\n\tif ( this.getSaneType( config ) === 'number' ) {\n\t\treturn $( '<input>' )\n\t\t\t.attr( 'step', 'any' )\n\t\t\t.attr( 'type', 'number' );\n\t} else {\n\t\treturn $( '<input>' ).attr( 'type', this.getSaneType( config ) );\n\t}\n};\n\n/**\n * Get sanitized value for 'type' for given config.\n *\n * @param {Object} config Configuration options\n * @return {string|null}\n * @protected\n */\nOO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {\n\tvar allowedTypes = [\n\t\t'text',\n\t\t'password',\n\t\t'email',\n\t\t'url',\n\t\t'number'\n\t];\n\treturn allowedTypes.indexOf( config.type ) !== -1 ? config.type : 'text';\n};\n\n/**\n * Focus the input and select a specified range within the text.\n *\n * @param {number} from Select from offset\n * @param {number} [to] Select to offset, defaults to from\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {\n\tvar isBackwards, start, end,\n\t\tinput = this.$input[ 0 ];\n\n\tto = to || from;\n\n\tisBackwards = to < from;\n\tstart = isBackwards ? to : from;\n\tend = isBackwards ? from : to;\n\n\tthis.focus();\n\n\ttry {\n\t\tinput.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );\n\t} catch ( e ) {\n\t\t// IE throws an exception if you call setSelectionRange on a unattached DOM node.\n\t\t// Rather than expensively check if the input is attached every time, just check\n\t\t// if it was the cause of an error being thrown. If not, rethrow the error.\n\t\tif ( this.getElementDocument().body.contains( input ) ) {\n\t\t\tthrow e;\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * Get an object describing the current selection range in a directional manner\n *\n * @return {Object} Object containing 'from' and 'to' offsets\n */\nOO.ui.TextInputWidget.prototype.getRange = function () {\n\tvar input = this.$input[ 0 ],\n\t\tstart = input.selectionStart,\n\t\tend = input.selectionEnd,\n\t\tisBackwards = input.selectionDirection === 'backward';\n\n\treturn {\n\t\tfrom: isBackwards ? end : start,\n\t\tto: isBackwards ? start : end\n\t};\n};\n\n/**\n * Get the length of the text input value.\n *\n * This could differ from the length of #getValue if the\n * value gets filtered\n *\n * @return {number} Input length\n */\nOO.ui.TextInputWidget.prototype.getInputLength = function () {\n\treturn this.$input[ 0 ].value.length;\n};\n\n/**\n * Focus the input and select the entire text.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.select = function () {\n\treturn this.selectRange( 0, this.getInputLength() );\n};\n\n/**\n * Focus the input and move the cursor to the start.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.moveCursorToStart = function () {\n\treturn this.selectRange( 0 );\n};\n\n/**\n * Focus the input and move the cursor to the end.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {\n\treturn this.selectRange( this.getInputLength() );\n};\n\n/**\n * Insert new content into the input.\n *\n * @param {string} content Content to be inserted\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.insertContent = function ( content ) {\n\tvar start, end,\n\t\trange = this.getRange(),\n\t\tvalue = this.getValue();\n\n\tstart = Math.min( range.from, range.to );\n\tend = Math.max( range.from, range.to );\n\n\tthis.setValue( value.slice( 0, start ) + content + value.slice( end ) );\n\tthis.selectRange( start + content.length );\n\treturn this;\n};\n\n/**\n * Insert new content either side of a selection.\n *\n * @param {string} pre Content to be inserted before the selection\n * @param {string} post Content to be inserted after the selection\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.encapsulateContent = function ( pre, post ) {\n\tvar start, end,\n\t\trange = this.getRange(),\n\t\toffset = pre.length;\n\n\tstart = Math.min( range.from, range.to );\n\tend = Math.max( range.from, range.to );\n\n\tthis.selectRange( start ).insertContent( pre );\n\tthis.selectRange( offset + end ).insertContent( post );\n\n\tthis.selectRange( offset + start, offset + end );\n\treturn this;\n};\n\n/**\n * Set the validation pattern.\n *\n * The validation pattern is either a regular expression, a function, or the symbolic name of a\n * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the\n * value must contain only numbers).\n *\n * @param {RegExp|Function|string|null} validate Regular expression, function, or the symbolic name\n *  of a pattern (either ‘integer’ or ‘non-empty’) defined by the class.\n */\nOO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {\n\tif ( validate instanceof RegExp || validate instanceof Function ) {\n\t\tthis.validate = validate;\n\t} else {\n\t\tthis.validate = this.constructor.static.validationPatterns[ validate ] || /.*/;\n\t}\n};\n\n/**\n * Sets the 'invalid' flag appropriately.\n *\n * @param {boolean} [isValid] Optionally override validation result\n */\nOO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {\n\tvar widget = this,\n\t\tsetFlag = function ( valid ) {\n\t\t\tif ( !valid ) {\n\t\t\t\twidget.$input.attr( 'aria-invalid', 'true' );\n\t\t\t} else {\n\t\t\t\twidget.$input.removeAttr( 'aria-invalid' );\n\t\t\t}\n\t\t\twidget.setFlags( { invalid: !valid } );\n\t\t};\n\n\tif ( isValid !== undefined ) {\n\t\tsetFlag( isValid );\n\t} else {\n\t\tthis.getValidity().then( function () {\n\t\t\tsetFlag( true );\n\t\t}, function () {\n\t\t\tsetFlag( false );\n\t\t} );\n\t}\n};\n\n/**\n * Get the validity of current value.\n *\n * This method returns a promise that resolves if the value is valid and rejects if\n * it isn't. Uses the {@link #validate validation pattern}  to check for validity.\n *\n * @return {jQuery.Promise} A promise that resolves if the value is valid, rejects if not.\n */\nOO.ui.TextInputWidget.prototype.getValidity = function () {\n\tvar result;\n\n\tfunction rejectOrResolve( valid ) {\n\t\tif ( valid ) {\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t} else {\n\t\t\treturn $.Deferred().reject().promise();\n\t\t}\n\t}\n\n\t// Check browser validity and reject if it is invalid\n\tif (\n\t\tthis.$input[ 0 ].checkValidity !== undefined &&\n\t\tthis.$input[ 0 ].checkValidity() === false\n\t) {\n\t\treturn rejectOrResolve( false );\n\t}\n\n\t// Run our checks if the browser thinks the field is valid\n\tif ( this.validate instanceof Function ) {\n\t\tresult = this.validate( this.getValue() );\n\t\tif ( result && $.isFunction( result.promise ) ) {\n\t\t\treturn result.promise().then( function ( valid ) {\n\t\t\t\treturn rejectOrResolve( valid );\n\t\t\t} );\n\t\t} else {\n\t\t\treturn rejectOrResolve( result );\n\t\t}\n\t} else {\n\t\treturn rejectOrResolve( this.getValue().match( this.validate ) );\n\t}\n};\n\n/**\n * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.\n *\n * @param {string} labelPosition Label position, 'before' or 'after'\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {\n\tthis.labelPosition = labelPosition;\n\tif ( this.label ) {\n\t\t// If there is no label and we only change the position, #updatePosition is a no-op,\n\t\t// but it takes really a lot of work to do nothing.\n\t\tthis.updatePosition();\n\t}\n\treturn this;\n};\n\n/**\n * Update the position of the inline label.\n *\n * This method is called by #setLabelPosition, and can also be called on its own if\n * something causes the label to be mispositioned.\n *\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.updatePosition = function () {\n\tvar after = this.labelPosition === 'after';\n\n\tthis.$element\n\t\t.toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )\n\t\t.toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );\n\n\tthis.valCache = null;\n\tthis.scrollWidth = null;\n\tthis.positionLabel();\n\n\treturn this;\n};\n\n/**\n * Position the label by setting the correct padding on the input.\n *\n * @private\n * @chainable\n */\nOO.ui.TextInputWidget.prototype.positionLabel = function () {\n\tvar after, rtl, property, newCss;\n\n\tif ( this.isWaitingToBeAttached ) {\n\t\t// #onElementAttach will be called soon, which calls this method\n\t\treturn this;\n\t}\n\n\tnewCss = {\n\t\t'padding-right': '',\n\t\t'padding-left': ''\n\t};\n\n\tif ( this.label ) {\n\t\tthis.$element.append( this.$label );\n\t} else {\n\t\tthis.$label.detach();\n\t\t// Clear old values if present\n\t\tthis.$input.css( newCss );\n\t\treturn;\n\t}\n\n\tafter = this.labelPosition === 'after';\n\trtl = this.$element.css( 'direction' ) === 'rtl';\n\tproperty = after === rtl ? 'padding-left' : 'padding-right';\n\n\tnewCss[ property ] = this.$label.outerWidth( true ) + ( after ? this.scrollWidth : 0 );\n\t// We have to clear the padding on the other side, in case the element direction changed\n\tthis.$input.css( newCss );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TextInputWidget.prototype.restorePreInfuseState = function ( state ) {\n\tOO.ui.TextInputWidget.parent.prototype.restorePreInfuseState.call( this, state );\n\tif ( state.scrollTop !== undefined ) {\n\t\tthis.$input.scrollTop( state.scrollTop );\n\t}\n};\n","/**\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.SearchInputWidget = function OoUiSearchInputWidget( config ) {\n\tconfig = $.extend( {\n\t\ticon: 'search'\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.SearchInputWidget.parent.call( this, config );\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onChange'\n\t} );\n\n\t// Initialization\n\tthis.updateSearchIndicator();\n\tthis.connect( this, {\n\t\tdisable: 'onDisable'\n\t} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.SearchInputWidget.prototype.getSaneType = function () {\n\treturn 'search';\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SearchInputWidget.prototype.onIndicatorMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\t// Clear the text field\n\t\tthis.setValue( '' );\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Update the 'clear' indicator displayed on type: 'search' text\n * fields, hiding it when the field is already empty or when it's not\n * editable.\n */\nOO.ui.SearchInputWidget.prototype.updateSearchIndicator = function () {\n\tif ( this.getValue() === '' || this.isDisabled() || this.isReadOnly() ) {\n\t\tthis.setIndicator( null );\n\t} else {\n\t\tthis.setIndicator( 'clear' );\n\t}\n};\n\n/**\n * Handle change events.\n *\n * @private\n */\nOO.ui.SearchInputWidget.prototype.onChange = function () {\n\tthis.updateSearchIndicator();\n};\n\n/**\n * Handle disable events.\n *\n * @param {boolean} disabled Element is disabled\n * @private\n */\nOO.ui.SearchInputWidget.prototype.onDisable = function () {\n\tthis.updateSearchIndicator();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SearchInputWidget.prototype.setReadOnly = function ( state ) {\n\tOO.ui.SearchInputWidget.parent.prototype.setReadOnly.call( this, state );\n\tthis.updateSearchIndicator();\n\treturn this;\n};\n","/**\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [rows] Number of visible lines in textarea. If used with `autosize`,\n *  specifies minimum number of rows to display.\n * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of\n * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content.\n *  Use the #maxRows config to specify a maximum number of displayed rows.\n * @cfg {boolean} [maxRows] Maximum number of rows to display when #autosize is set to true.\n *  Defaults to the maximum of `10` and `2 * rows`, or `10` if `rows` isn't provided.\n */\nOO.ui.MultilineTextInputWidget = function OoUiMultilineTextInputWidget( config ) {\n\tconfig = $.extend( {\n\t\ttype: 'text'\n\t}, config );\n\tconfig.multiline = false;\n\t// Parent constructor\n\tOO.ui.MultilineTextInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.multiline = true;\n\tthis.autosize = !!config.autosize;\n\tthis.minRows = config.rows !== undefined ? config.rows : '';\n\tthis.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );\n\n\t// Clone for resizing\n\tif ( this.autosize ) {\n\t\tthis.$clone = this.$input\n\t\t\t.clone()\n\t\t\t.insertAfter( this.$input )\n\t\t\t.attr( 'aria-hidden', 'true' )\n\t\t\t.addClass( 'oo-ui-element-hidden' );\n\t}\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onChange'\n\t} );\n\n\t// Initialization\n\tif ( this.multiline && config.rows ) {\n\t\tthis.$input.attr( 'rows', config.rows );\n\t}\n\tif ( this.autosize ) {\n\t\tthis.isWaitingToBeAttached = true;\n\t\tthis.installParentChangeDetector();\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MultilineTextInputWidget, OO.ui.TextInputWidget );\n\n/* Static Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.static.gatherPreInfuseState = function ( node, config ) {\n\tvar state = OO.ui.MultilineTextInputWidget.parent.static.gatherPreInfuseState( node, config );\n\tstate.scrollTop = config.$input.scrollTop();\n\treturn state;\n};\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.prototype.onElementAttach = function () {\n\tOO.ui.MultilineTextInputWidget.parent.prototype.onElementAttach.call( this );\n\tthis.adjustSize();\n};\n\n/**\n * Handle change events.\n *\n * @private\n */\nOO.ui.MultilineTextInputWidget.prototype.onChange = function () {\n\tthis.adjustSize();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MultilineTextInputWidget.prototype.updatePosition = function () {\n\tOO.ui.MultilineTextInputWidget.parent.prototype.updatePosition.call( this );\n\tthis.adjustSize();\n};\n\n/**\n * Override TextInputWidget so it doesn't emit the 'enter' event.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.MultilineTextInputWidget.prototype.onKeyPress = function () {\n\treturn;\n};\n\n/**\n * Automatically adjust the size of the text input.\n *\n * This only affects multiline inputs that are {@link #autosize autosized}.\n *\n * @chainable\n * @fires resize\n */\nOO.ui.MultilineTextInputWidget.prototype.adjustSize = function () {\n\tvar scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError,\n\t\tidealHeight, newHeight, scrollWidth, property;\n\n\tif ( this.$input.val() !== this.valCache ) {\n\t\tif ( this.autosize ) {\n\t\t\tthis.$clone\n\t\t\t\t.val( this.$input.val() )\n\t\t\t\t.attr( 'rows', this.minRows )\n\t\t\t\t// Set inline height property to 0 to measure scroll height\n\t\t\t\t.css( 'height', 0 );\n\n\t\t\tthis.$clone.removeClass( 'oo-ui-element-hidden' );\n\n\t\t\tthis.valCache = this.$input.val();\n\n\t\t\tscrollHeight = this.$clone[ 0 ].scrollHeight;\n\n\t\t\t// Remove inline height property to measure natural heights\n\t\t\tthis.$clone.css( 'height', '' );\n\t\t\tinnerHeight = this.$clone.innerHeight();\n\t\t\touterHeight = this.$clone.outerHeight();\n\n\t\t\t// Measure max rows height\n\t\t\tthis.$clone\n\t\t\t\t.attr( 'rows', this.maxRows )\n\t\t\t\t.css( 'height', 'auto' )\n\t\t\t\t.val( '' );\n\t\t\tmaxInnerHeight = this.$clone.innerHeight();\n\n\t\t\t// Difference between reported innerHeight and scrollHeight with no scrollbars present.\n\t\t\t// This is sometimes non-zero on Blink-based browsers, depending on zoom level.\n\t\t\tmeasurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;\n\t\t\tidealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );\n\n\t\t\tthis.$clone.addClass( 'oo-ui-element-hidden' );\n\n\t\t\t// Only apply inline height when expansion beyond natural height is needed\n\t\t\t// Use the difference between the inner and outer height as a buffer\n\t\t\tnewHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';\n\t\t\tif ( newHeight !== this.styleHeight ) {\n\t\t\t\tthis.$input.css( 'height', newHeight );\n\t\t\t\tthis.styleHeight = newHeight;\n\t\t\t\tthis.emit( 'resize' );\n\t\t\t}\n\t\t}\n\t\tscrollWidth = this.$input[ 0 ].offsetWidth - this.$input[ 0 ].clientWidth;\n\t\tif ( scrollWidth !== this.scrollWidth ) {\n\t\t\tproperty = this.$element.css( 'direction' ) === 'rtl' ? 'left' : 'right';\n\t\t\t// Reset\n\t\t\tthis.$label.css( { right: '', left: '' } );\n\t\t\tthis.$indicator.css( { right: '', left: '' } );\n\n\t\t\tif ( scrollWidth ) {\n\t\t\t\tthis.$indicator.css( property, scrollWidth );\n\t\t\t\tif ( this.labelPosition === 'after' ) {\n\t\t\t\t\tthis.$label.css( property, scrollWidth );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.scrollWidth = scrollWidth;\n\t\t\tthis.positionLabel();\n\t\t}\n\t}\n\treturn this;\n};\n\n/**\n * @inheritdoc\n * @protected\n */\nOO.ui.MultilineTextInputWidget.prototype.getInputElement = function () {\n\treturn $( '<textarea>' );\n};\n\n/**\n * Check if the input supports multiple lines.\n *\n * @return {boolean}\n */\nOO.ui.MultilineTextInputWidget.prototype.isMultiline = function () {\n\treturn !!this.multiline;\n};\n\n/**\n * Check if the input automatically adjusts its size.\n *\n * @return {boolean}\n */\nOO.ui.MultilineTextInputWidget.prototype.isAutosizing = function () {\n\treturn !!this.autosize;\n};\n","/**\n * ComboBoxInputWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value\n * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which\n * a value can be chosen instead). Users can choose options from the combo box in one of two ways:\n *\n * - by typing a value in the text input field. If the value exactly matches the value of a menu\n *   option, that option will appear to be selected.\n * - by choosing a value from the menu. The value of the chosen option will then appear in the text\n *   input field.\n *\n * After the user chooses an option, its `data` will be used as a new value for the widget.\n * A `label` also can be specified for each option: if given, it will be shown instead of the\n * `data` in the dropdown menu.\n *\n * This widget can be used inside an HTML form, such as a OO.ui.FormLayout.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A ComboBoxInputWidget.\n *     var comboBox = new OO.ui.ComboBoxInputWidget( {\n *         value: 'Option 1',\n *         options: [\n *             { data: 'Option 1' },\n *             { data: 'Option 2' },\n *             { data: 'Option 3' }\n *         ]\n *     } );\n *     $( 'body' ).append( comboBox.$element );\n *\n *     @example\n *     // Example: A ComboBoxInputWidget with additional option labels.\n *     var comboBox = new OO.ui.ComboBoxInputWidget( {\n *         value: 'Option 1',\n *         options: [\n *             {\n *                 data: 'Option 1',\n *                 label: 'Option One'\n *             },\n *             {\n *                 data: 'Option 2',\n *                 label: 'Option Two'\n *             },\n *             {\n *                 data: 'Option 3',\n *                 label: 'Option Three'\n *             }\n *         ]\n *     } );\n *     $( 'body' ).append( comboBox.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.\n * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where\n *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the\n *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.ComboBoxInputWidget = function OoUiComboBoxInputWidget( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tautocomplete: false\n\t}, config );\n\n\t// ComboBoxInputWidget shouldn't support `multiline`\n\tconfig.multiline = false;\n\n\t// See InputWidget#reusePreInfuseDOM about `config.$input`\n\tif ( config.$input ) {\n\t\tconfig.$input.removeAttr( 'list' );\n\t}\n\n\t// Parent constructor\n\tOO.ui.ComboBoxInputWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\tthis.dropdownButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-comboBoxInputWidget-dropdownButton' ],\n\t\tindicator: 'down',\n\t\tdisabled: this.disabled\n\t} );\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend(\n\t\t{\n\t\t\twidget: this,\n\t\t\tinput: this,\n\t\t\t$floatableContainer: this.$element,\n\t\t\tdisabled: this.isDisabled()\n\t\t},\n\t\tconfig.menu\n\t) );\n\n\t// Events\n\tthis.connect( this, {\n\t\tchange: 'onInputChange',\n\t\tenter: 'onInputEnter'\n\t} );\n\tthis.dropdownButton.connect( this, {\n\t\tclick: 'onDropdownButtonClick'\n\t} );\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\tadd: 'onMenuItemsChange',\n\t\tremove: 'onMenuItemsChange',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.menu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\t// Do not override options set via config.menu.items\n\tif ( config.options !== undefined ) {\n\t\tthis.setOptions( config.options );\n\t}\n\tthis.$field = $( '<div>' )\n\t\t.addClass( 'oo-ui-comboBoxInputWidget-field' )\n\t\t.append( this.$input, this.dropdownButton.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-comboBoxInputWidget' )\n\t\t.append( this.$field );\n\tthis.$overlay.append( this.menu.$element );\n\tthis.onMenuItemsChange();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ComboBoxInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * Get the combobox's menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.ComboBoxInputWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the combobox's text input widget.\n *\n * @return {OO.ui.TextInputWidget} Text input widget\n */\nOO.ui.ComboBoxInputWidget.prototype.getInput = function () {\n\treturn this;\n};\n\n/**\n * Handle input change events.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.ComboBoxInputWidget.prototype.onInputChange = function ( value ) {\n\tvar match = this.menu.getItemFromData( value );\n\n\tthis.menu.selectItem( match );\n\tif ( this.menu.findHighlightedItem() ) {\n\t\tthis.menu.highlightItem( match );\n\t}\n\n\tif ( !this.isDisabled() ) {\n\t\tthis.menu.toggle( true );\n\t}\n};\n\n/**\n * Handle input enter events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onInputEnter = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.menu.toggle( false );\n\t}\n};\n\n/**\n * Handle button click events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onDropdownButtonClick = function () {\n\tthis.menu.toggle();\n\tthis.focus();\n};\n\n/**\n * Handle menu choose events.\n *\n * @private\n * @param {OO.ui.OptionWidget} item Chosen item\n */\nOO.ui.ComboBoxInputWidget.prototype.onMenuChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Handle menu item change events.\n *\n * @private\n */\nOO.ui.ComboBoxInputWidget.prototype.onMenuItemsChange = function () {\n\tvar match = this.menu.getItemFromData( this.getValue() );\n\tthis.menu.selectItem( match );\n\tif ( this.menu.findHighlightedItem() ) {\n\t\tthis.menu.highlightItem( match );\n\t}\n\tthis.$element.toggleClass( 'oo-ui-comboBoxInputWidget-empty', this.menu.isEmpty() );\n};\n\n/**\n * Handle menu toggle events.\n *\n * @private\n * @param {boolean} isVisible Open state of the menu\n */\nOO.ui.ComboBoxInputWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tthis.$element.toggleClass( 'oo-ui-comboBoxInputWidget-open', isVisible );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ComboBoxInputWidget.prototype.setDisabled = function ( disabled ) {\n\t// Parent method\n\tOO.ui.ComboBoxInputWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.dropdownButton ) {\n\t\tthis.dropdownButton.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.menu ) {\n\t\tthis.menu.setDisabled( this.isDisabled() );\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the options available for this input.\n *\n * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`\n * @chainable\n */\nOO.ui.ComboBoxInputWidget.prototype.setOptions = function ( options ) {\n\tthis.getMenu()\n\t\t.clearItems()\n\t\t.addItems( options.map( function ( opt ) {\n\t\t\treturn new OO.ui.MenuOptionWidget( {\n\t\t\t\tdata: opt.data,\n\t\t\t\tlabel: opt.label !== undefined ? opt.label : opt.data\n\t\t\t} );\n\t\t} ) );\n\n\treturn this;\n};\n","/**\n * FieldLayouts are used with OO.ui.FieldsetLayout. Each FieldLayout requires a field-widget,\n * which is a widget that is specified by reference before any optional configuration settings.\n *\n * Field layouts can be configured with help text and/or labels. Labels are aligned in one of four ways:\n *\n * - **left**: The label is placed before the field-widget and aligned with the left margin.\n *   A left-alignment is used for forms with many fields.\n * - **right**: The label is placed before the field-widget and aligned to the right margin.\n *   A right-alignment is used for long but familiar forms which users tab through,\n *   verifying the current field with a quick glance at the label.\n * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms\n *   that users fill out from top to bottom.\n * - **inline**: The label is placed after the field-widget and aligned to the left.\n *   An inline-alignment is best used with checkboxes or radio buttons.\n *\n * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {OO.ui.Widget} fieldWidget Field widget\n * @param {Object} [config] Configuration options\n * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'\n * @cfg {Array} [errors] Error messages about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @cfg {Array} [notices] Notices about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a \"help\" icon will appear\n *  in the upper-right corner of the rendered field; clicking it will display the text in a popup.\n *  For important messages, you are advised to use `notices`, as they are always shown.\n * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n *\n * @throws {Error} An error is thrown if no widget is specified\n */\nOO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( fieldWidget ) && config === undefined ) {\n\t\tconfig = fieldWidget;\n\t\tfieldWidget = config.fieldWidget;\n\t}\n\n\t// Make sure we have required constructor arguments\n\tif ( fieldWidget === undefined ) {\n\t\tthrow new Error( 'Widget not found' );\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { align: 'left' }, config );\n\n\t// Parent constructor\n\tOO.ui.FieldLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {\n\t\t$label: $( '<label>' )\n\t} ) );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );\n\n\t// Properties\n\tthis.fieldWidget = fieldWidget;\n\tthis.errors = [];\n\tthis.notices = [];\n\tthis.$field = this.isFieldInline() ? $( '<span>' ) : $( '<div>' );\n\tthis.$messages = $( '<ul>' );\n\tthis.$header = $( '<span>' );\n\tthis.$body = $( '<div>' );\n\tthis.align = null;\n\tif ( config.help ) {\n\t\tthis.popupButtonWidget = new OO.ui.PopupButtonWidget( {\n\t\t\t$overlay: config.$overlay,\n\t\t\tpopup: {\n\t\t\t\tpadded: true\n\t\t\t},\n\t\t\tclasses: [ 'oo-ui-fieldLayout-help' ],\n\t\t\tframed: false,\n\t\t\ticon: 'info'\n\t\t} );\n\t\tif ( config.help instanceof OO.ui.HtmlSnippet ) {\n\t\t\tthis.popupButtonWidget.getPopup().$body.html( config.help.toString() );\n\t\t} else {\n\t\t\tthis.popupButtonWidget.getPopup().$body.text( config.help );\n\t\t}\n\t\tthis.$help = this.popupButtonWidget.$element;\n\t} else {\n\t\tthis.$help = $( [] );\n\t}\n\n\t// Events\n\tthis.fieldWidget.connect( this, { disable: 'onFieldDisable' } );\n\n\t// Initialization\n\tif ( config.help ) {\n\t\t// Set the 'aria-describedby' attribute on the fieldWidget\n\t\t// Preference given to an input or a button\n\t\t(\n\t\t\tthis.fieldWidget.$input ||\n\t\t\tthis.fieldWidget.$button ||\n\t\t\tthis.fieldWidget.$element\n\t\t).attr(\n\t\t\t'aria-describedby',\n\t\t\tthis.popupButtonWidget.getPopup().getBodyId()\n\t\t);\n\t}\n\tif ( this.fieldWidget.getInputId() ) {\n\t\tthis.$label.attr( 'for', this.fieldWidget.getInputId() );\n\t} else {\n\t\tthis.$label.on( 'click', function () {\n\t\t\tthis.fieldWidget.simulateLabelClick();\n\t\t\treturn false;\n\t\t}.bind( this ) );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-fieldLayout' )\n\t\t.toggleClass( 'oo-ui-fieldLayout-disabled', this.fieldWidget.isDisabled() )\n\t\t.append( this.$body );\n\tthis.$body.addClass( 'oo-ui-fieldLayout-body' );\n\tthis.$header.addClass( 'oo-ui-fieldLayout-header' );\n\tthis.$messages.addClass( 'oo-ui-fieldLayout-messages' );\n\tthis.$field\n\t\t.addClass( 'oo-ui-fieldLayout-field' )\n\t\t.append( this.fieldWidget.$element );\n\n\tthis.setErrors( config.errors || [] );\n\tthis.setNotices( config.notices || [] );\n\tthis.setAlignment( config.align );\n\t// Call this again to take into account the widget's accessKey\n\tthis.updateTitle();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.TitledElement );\n\n/* Methods */\n\n/**\n * Handle field disable events.\n *\n * @private\n * @param {boolean} value Field is disabled\n */\nOO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {\n\tthis.$element.toggleClass( 'oo-ui-fieldLayout-disabled', value );\n};\n\n/**\n * Get the widget contained by the field.\n *\n * @return {OO.ui.Widget} Field widget\n */\nOO.ui.FieldLayout.prototype.getField = function () {\n\treturn this.fieldWidget;\n};\n\n/**\n * Return `true` if the given field widget can be used with `'inline'` alignment (see\n * #setAlignment). Return `false` if it can't or if this can't be determined.\n *\n * @return {boolean}\n */\nOO.ui.FieldLayout.prototype.isFieldInline = function () {\n\t// This is very simplistic, but should be good enough.\n\treturn this.getField().$element.prop( 'tagName' ).toLowerCase() === 'span';\n};\n\n/**\n * @protected\n * @param {string} kind 'error' or 'notice'\n * @param {string|OO.ui.HtmlSnippet} text\n * @return {jQuery}\n */\nOO.ui.FieldLayout.prototype.makeMessage = function ( kind, text ) {\n\tvar $listItem, $icon, message;\n\t$listItem = $( '<li>' );\n\tif ( kind === 'error' ) {\n\t\t$icon = new OO.ui.IconWidget( { icon: 'alert', flags: [ 'warning' ] } ).$element;\n\t\t$listItem.attr( 'role', 'alert' );\n\t} else if ( kind === 'notice' ) {\n\t\t$icon = new OO.ui.IconWidget( { icon: 'info' } ).$element;\n\t} else {\n\t\t$icon = '';\n\t}\n\tmessage = new OO.ui.LabelWidget( { label: text } );\n\t$listItem\n\t\t.append( $icon, message.$element )\n\t\t.addClass( 'oo-ui-fieldLayout-messages-' + kind );\n\treturn $listItem;\n};\n\n/**\n * Set the field alignment mode.\n *\n * @private\n * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setAlignment = function ( value ) {\n\tif ( value !== this.align ) {\n\t\t// Default to 'left'\n\t\tif ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {\n\t\t\tvalue = 'left';\n\t\t}\n\t\t// Validate\n\t\tif ( value === 'inline' && !this.isFieldInline() ) {\n\t\t\tvalue = 'top';\n\t\t}\n\t\t// Reorder elements\n\t\tif ( value === 'top' ) {\n\t\t\tthis.$header.append( this.$label, this.$help );\n\t\t\tthis.$body.append( this.$header, this.$field );\n\t\t} else if ( value === 'inline' ) {\n\t\t\tthis.$header.append( this.$label, this.$help );\n\t\t\tthis.$body.append( this.$field, this.$header );\n\t\t} else {\n\t\t\tthis.$header.append( this.$label );\n\t\t\tthis.$body.append( this.$header, this.$help, this.$field );\n\t\t}\n\t\t// Set classes. The following classes can be used here:\n\t\t// * oo-ui-fieldLayout-align-left\n\t\t// * oo-ui-fieldLayout-align-right\n\t\t// * oo-ui-fieldLayout-align-top\n\t\t// * oo-ui-fieldLayout-align-inline\n\t\tif ( this.align ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );\n\t\t}\n\t\tthis.$element.addClass( 'oo-ui-fieldLayout-align-' + value );\n\t\tthis.align = value;\n\t}\n\n\treturn this;\n};\n\n/**\n * Set the list of error messages.\n *\n * @param {Array} errors Error messages about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setErrors = function ( errors ) {\n\tthis.errors = errors.slice();\n\tthis.updateMessages();\n\treturn this;\n};\n\n/**\n * Set the list of notice messages.\n *\n * @param {Array} notices Notices about the widget, which will be displayed below the widget.\n *  The array may contain strings or OO.ui.HtmlSnippet instances.\n * @chainable\n */\nOO.ui.FieldLayout.prototype.setNotices = function ( notices ) {\n\tthis.notices = notices.slice();\n\tthis.updateMessages();\n\treturn this;\n};\n\n/**\n * Update the rendering of error and notice messages.\n *\n * @private\n */\nOO.ui.FieldLayout.prototype.updateMessages = function () {\n\tvar i;\n\tthis.$messages.empty();\n\n\tif ( this.errors.length || this.notices.length ) {\n\t\tthis.$body.after( this.$messages );\n\t} else {\n\t\tthis.$messages.remove();\n\t\treturn;\n\t}\n\n\tfor ( i = 0; i < this.notices.length; i++ ) {\n\t\tthis.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );\n\t}\n\tfor ( i = 0; i < this.errors.length; i++ ) {\n\t\tthis.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );\n\t}\n};\n\n/**\n * Include information about the widget's accessKey in our title. TitledElement calls this method.\n * (This is a bit of a hack.)\n *\n * @protected\n * @param {string} title Tooltip label for 'title' attribute\n * @return {string}\n */\nOO.ui.FieldLayout.prototype.formatTitleWithAccessKey = function ( title ) {\n\tif ( this.fieldWidget && this.fieldWidget.formatTitleWithAccessKey ) {\n\t\treturn this.fieldWidget.formatTitleWithAccessKey( title );\n\t}\n\treturn title;\n};\n","/**\n * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,\n * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),\n * is required and is specified before any optional configuration settings.\n *\n * Labels can be aligned in one of four ways:\n *\n * - **left**: The label is placed before the field-widget and aligned with the left margin.\n *   A left-alignment is used for forms with many fields.\n * - **right**: The label is placed before the field-widget and aligned to the right margin.\n *   A right-alignment is used for long but familiar forms which users tab through,\n *   verifying the current field with a quick glance at the label.\n * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms\n *   that users fill out from top to bottom.\n * - **inline**: The label is placed after the field-widget and aligned to the left.\n *   An inline-alignment is best used with checkboxes or radio buttons.\n *\n * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout when help\n * text is specified.\n *\n *     @example\n *     // Example of an ActionFieldLayout\n *     var actionFieldLayout = new OO.ui.ActionFieldLayout(\n *         new OO.ui.TextInputWidget( {\n *             placeholder: 'Field widget'\n *         } ),\n *         new OO.ui.ButtonWidget( {\n *             label: 'Button'\n *         } ),\n *         {\n *             label: 'An ActionFieldLayout. This label is aligned top',\n *             align: 'top',\n *             help: 'This is help text'\n *         }\n *     );\n *\n *     $( 'body' ).append( actionFieldLayout.$element );\n *\n * @class\n * @extends OO.ui.FieldLayout\n *\n * @constructor\n * @param {OO.ui.Widget} fieldWidget Field widget\n * @param {OO.ui.ButtonWidget} buttonWidget Button widget\n * @param {Object} config\n */\nOO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( fieldWidget ) && config === undefined ) {\n\t\tconfig = fieldWidget;\n\t\tfieldWidget = config.fieldWidget;\n\t\tbuttonWidget = config.buttonWidget;\n\t}\n\n\t// Parent constructor\n\tOO.ui.ActionFieldLayout.parent.call( this, fieldWidget, config );\n\n\t// Properties\n\tthis.buttonWidget = buttonWidget;\n\tthis.$button = $( '<span>' );\n\tthis.$input = this.isFieldInline() ? $( '<span>' ) : $( '<div>' );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-actionFieldLayout' );\n\tthis.$button\n\t\t.addClass( 'oo-ui-actionFieldLayout-button' )\n\t\t.append( this.buttonWidget.$element );\n\tthis.$input\n\t\t.addClass( 'oo-ui-actionFieldLayout-input' )\n\t\t.append( this.fieldWidget.$element );\n\tthis.$field\n\t\t.append( this.$input, this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );\n","/**\n * FieldsetLayouts are composed of one or more {@link OO.ui.FieldLayout FieldLayouts},\n * which each contain an individual widget and, optionally, a label. Each Fieldset can be\n * configured with a label as well. For more information and examples,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example of a fieldset layout\n *     var input1 = new OO.ui.TextInputWidget( {\n *         placeholder: 'A text input field'\n *     } );\n *\n *     var input2 = new OO.ui.TextInputWidget( {\n *         placeholder: 'A text input field'\n *     } );\n *\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'Example of a fieldset layout'\n *     } );\n *\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( input1, {\n *             label: 'Field One'\n *         } ),\n *         new OO.ui.FieldLayout( input2, {\n *             label: 'Field Two'\n *         } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.FieldLayout[]} [items] An array of fields to add to the fieldset. See OO.ui.FieldLayout for more information about fields.\n * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a \"help\" icon will appear\n *  in the upper-right corner of the rendered field; clicking it will display the text in a popup.\n *  For important messages, you are advised to use `notices`, as they are always shown.\n * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.FieldsetLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.$header = $( '<legend>' );\n\tif ( config.help ) {\n\t\tthis.popupButtonWidget = new OO.ui.PopupButtonWidget( {\n\t\t\t$overlay: config.$overlay,\n\t\t\tpopup: {\n\t\t\t\tpadded: true\n\t\t\t},\n\t\t\tclasses: [ 'oo-ui-fieldsetLayout-help' ],\n\t\t\tframed: false,\n\t\t\ticon: 'info'\n\t\t} );\n\t\tif ( config.help instanceof OO.ui.HtmlSnippet ) {\n\t\t\tthis.popupButtonWidget.getPopup().$body.html( config.help.toString() );\n\t\t} else {\n\t\t\tthis.popupButtonWidget.getPopup().$body.text( config.help );\n\t\t}\n\t\tthis.$help = this.popupButtonWidget.$element;\n\t} else {\n\t\tthis.$help = $( [] );\n\t}\n\n\t// Initialization\n\tthis.$header\n\t\t.addClass( 'oo-ui-fieldsetLayout-header' )\n\t\t.append( this.$icon, this.$label, this.$help );\n\tthis.$group.addClass( 'oo-ui-fieldsetLayout-group' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-fieldsetLayout' )\n\t\t.prepend( this.$header, this.$group );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.GroupElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.FieldsetLayout.static.tagName = 'fieldset';\n","/**\n * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based\n * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an\n * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.\n * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n * Only widgets from the {@link OO.ui.InputWidget InputWidget} family support form submission. It\n * includes standard form elements like {@link OO.ui.CheckboxInputWidget checkboxes}, {@link\n * OO.ui.RadioInputWidget radio buttons} and {@link OO.ui.TextInputWidget text fields}, as well as\n * some fancier controls. Some controls have both regular and InputWidget variants, for example\n * OO.ui.DropdownWidget and OO.ui.DropdownInputWidget – only the latter support form submission and\n * often have simplified APIs to match the capabilities of HTML forms.\n * See the [OOjs UI Inputs documentation on MediaWiki] [2] for more information about InputWidgets.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Forms\n * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs\n *\n *     @example\n *     // Example of a form layout that wraps a fieldset layout\n *     var input1 = new OO.ui.TextInputWidget( {\n *         placeholder: 'Username'\n *     } );\n *     var input2 = new OO.ui.TextInputWidget( {\n *         placeholder: 'Password',\n *         type: 'password'\n *     } );\n *     var submit = new OO.ui.ButtonInputWidget( {\n *         label: 'Submit'\n *     } );\n *\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *         label: 'A form layout'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( input1, {\n *             label: 'Username',\n *             align: 'top'\n *         } ),\n *         new OO.ui.FieldLayout( input2, {\n *             label: 'Password',\n *             align: 'top'\n *         } ),\n *         new OO.ui.FieldLayout( submit )\n *     ] );\n *     var form = new OO.ui.FormLayout( {\n *         items: [ fieldset ],\n *         action: '/api/formhandler',\n *         method: 'get'\n *     } )\n *     $( 'body' ).append( form.$element );\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [method] HTML form `method` attribute\n * @cfg {string} [action] HTML form `action` attribute\n * @cfg {string} [enctype] HTML form `enctype` attribute\n * @cfg {OO.ui.FieldsetLayout[]} [items] Fieldset layouts to add to the form layout.\n */\nOO.ui.FormLayout = function OoUiFormLayout( config ) {\n\tvar action;\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.FormLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Events\n\tthis.$element.on( 'submit', this.onFormSubmit.bind( this ) );\n\n\t// Make sure the action is safe\n\taction = config.action;\n\tif ( action !== undefined && !OO.ui.isSafeUrl( action ) ) {\n\t\taction = './' + action;\n\t}\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-formLayout' )\n\t\t.attr( {\n\t\t\tmethod: config.method,\n\t\t\taction: action,\n\t\t\tenctype: config.enctype\n\t\t} );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.FormLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'submit' event is emitted when the form is submitted.\n *\n * @event submit\n */\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.FormLayout.static.tagName = 'form';\n\n/* Methods */\n\n/**\n * Handle form submit events.\n *\n * @private\n * @param {jQuery.Event} e Submit event\n * @fires submit\n */\nOO.ui.FormLayout.prototype.onFormSubmit = function () {\n\tif ( this.emit( 'submit' ) ) {\n\t\treturn false;\n\t}\n};\n","/**\n * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,\n * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.\n *\n *     @example\n *     // Example of a panel layout\n *     var panel = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true,\n *         padded: true,\n *         $content: $( '<p>A panel layout with padding and a frame.</p>' )\n *     } );\n *     $( 'body' ).append( panel.$element );\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [scrollable=false] Allow vertical scrolling\n * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.\n * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.\n * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.\n */\nOO.ui.PanelLayout = function OoUiPanelLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tscrollable: false,\n\t\tpadded: false,\n\t\texpanded: true,\n\t\tframed: false\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.PanelLayout.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-panelLayout' );\n\tif ( config.scrollable ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-scrollable' );\n\t}\n\tif ( config.padded ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-padded' );\n\t}\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-expanded' );\n\t}\n\tif ( config.framed ) {\n\t\tthis.$element.addClass( 'oo-ui-panelLayout-framed' );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Focus the panel layout\n *\n * The default implementation just focuses the first focusable element in the panel\n */\nOO.ui.PanelLayout.prototype.focus = function () {\n\tOO.ui.findFocusable( this.$element ).focus();\n};\n","/**\n * HorizontalLayout arranges its contents in a single line (using `display: inline-block` for its\n * items), with small margins between them. Convenient when you need to put a number of block-level\n * widgets on a single line next to each other.\n *\n * Note that inline elements, such as OO.ui.ButtonWidgets, do not need this wrapper.\n *\n *     @example\n *     // HorizontalLayout with a text input and a label\n *     var layout = new OO.ui.HorizontalLayout( {\n *       items: [\n *         new OO.ui.LabelWidget( { label: 'Label' } ),\n *         new OO.ui.TextInputWidget( { value: 'Text' } )\n *       ]\n *     } );\n *     $( 'body' ).append( layout.$element );\n *\n * @class\n * @extends OO.ui.Layout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.Widget[]|OO.ui.Layout[]} [items] Widgets or other layouts to add to the layout.\n */\nOO.ui.HorizontalLayout = function OoUiHorizontalLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.HorizontalLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-horizontalLayout' );\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.HorizontalLayout, OO.ui.Layout );\nOO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement );\n","}( OO ) );\n"]}
\ No newline at end of file
index 5bb0337..2abe783 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel {
   display: none;
 }
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: top;
-}
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title {
   display: none;
 }
   padding: 0.3125em;
 }
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+  display: inline-block;
+  vertical-align: top;
   height: 1.875em;
   width: 1.875em;
 }
   display: block;
   cursor: pointer;
 }
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  position: absolute;
-}
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
   outline: 0;
   cursor: default;
   vertical-align: middle;
   white-space: nowrap;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   display: table-cell;
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
   margin-right: 1.75em;
 }
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle {
-  border: 1px solid #a6cee1;
-  background-color: #cde7f4;
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #eaf4fa), color-stop(100%, #b0d9ee));
-  background-image: -webkit-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image: -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image: linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
-  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffeaf4fa', endColorstr='#ffb0d9ee' )";
-}
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:hover,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:hover,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:focus,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:focus {
-  border-color: #9dc2d4;
-}
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle,
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
-  border: 1px solid #a6cee1;
-  background-color: #cde7f4;
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #b0d9ee), color-stop(100%, #eaf4fa));
-  background-image: -webkit-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image: -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image: linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
-  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffb0d9ee', endColorstr='#ffeaf4fa' )";
-}
-.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle {
-  color: #d45353;
-}
 .oo-ui-buttonGroupWidget .oo-ui-popupToolGroup {
   margin-left: 0;
 }
   border-bottom-right-radius: 4px;
   border-top-right-radius: 4px;
 }
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+  position: absolute;
+  top: 0;
+}
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
   width: 0.9375em;
   height: 0.9375em;
   margin: 0.78125em;
-  top: 0;
   right: 0;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
   width: 1.875em;
   height: 1.875em;
   margin: 0.3125em;
-  top: 0;
   left: 0.3125em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
   font-weight: bold;
 }
 .oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-  box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
   background-color: #f8fbfd;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
   background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
   background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
   background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+  box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
 }
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
   margin: 0 -1px;
   padding: 0.3125em 0 0.3125em 0.3125em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 1.875em;
-  width: 1.875em;
+  display: table-cell !important;
   min-width: 1.875em;
+  width: 1.875em;
+  height: 1.875em;
+  vertical-align: middle;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   padding-left: 0.5em;
 }
 .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;
+  -webkit-user-select: text;
+  -moz-user-select: text;
+  -ms-user-select: text;
+  user-select: text;
 }
 .oo-ui-toolbar-bar {
   background-color: #f8fbfd;
index 75e1dd3..83a31a0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 /**
  * WikimediaUI Base v0.9.2
 }
 .oo-ui-tool.oo-ui-iconElement .oo-ui-iconElement-icon {
   display: block;
-  position: absolute;
-  top: 0;
   left: 0.625em;
-  height: 100%;
 }
 .oo-ui-tool .oo-ui-tool-title {
   line-height: 1.172em;
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel {
   display: none;
 }
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: top;
-}
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title {
   display: none;
 }
   display: block;
   cursor: pointer;
 }
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  position: absolute;
-}
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
   outline: 0;
   cursor: default;
   vertical-align: middle;
   white-space: nowrap;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   display: table-cell;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 }
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon,
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  top: 0;
-  height: 100%;
-}
 .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
   left: 0.625em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link {
   padding: 1.015625em 0.9375em 0.9375em 2.96875em;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  display: block;
-}
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   color: #222;
 }
   min-width: 8.125em;
 }
 .oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: none;
-  position: absolute;
-  top: 0;
   left: 0.625em;
-  height: 100%;
 }
 .oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
   background-image: url('themes/wikimediaui/images/icons/check-progressive.png');
 }
 .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;
+  -webkit-user-select: text;
+  -moz-user-select: text;
+  -ms-user-select: text;
+  user-select: text;
 }
 .oo-ui-toolbar-bar {
   background-color: #fff;
 .oo-ui-toolbar-narrow.oo-ui-toolbar-position-bottom .oo-ui-toolbar-bar:after {
   border-top: 1px solid #c8ccd1;
 }
-.oo-ui-toolbar-actions .oo-ui-buttonElement {
+.oo-ui-toolbar-actions .oo-ui-buttonElement {
   margin-right: 0;
 }
-.oo-ui-toolbar-actions .oo-ui-buttonElement > .oo-ui-buttonElement-button {
+.oo-ui-toolbar-actions .oo-ui-buttonElement > .oo-ui-buttonElement-button {
   border: 0;
   border-radius: 0;
   padding-top: 3.125em;
   padding-left: 1.25em;
   padding-right: 1.25em;
 }
-.oo-ui-toolbar-narrow .oo-ui-toolbar-actions .oo-ui-buttonElement > .oo-ui-buttonElement-button {
+.oo-ui-toolbar-narrow .oo-ui-toolbar-actions .oo-ui-buttonElement > .oo-ui-buttonElement-button {
   padding-left: 0.9375em;
   padding-right: 0.9375em;
 }
-.oo-ui-toolbar-actions .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button {
+.oo-ui-toolbar-actions .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button {
   padding-top: 1.015625em;
   padding-bottom: 0.9375em;
 }
index b52dae6..661489f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
@@ -1962,7 +1962,9 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                        if ( this.isClippedHorizontally() ) {
                                // Anchoring to the right also caused the popup to clip, so just make it fill the container
                                containerWidth = this.$clippableScrollableContainer.width();
-                               containerLeft = this.$clippableScrollableContainer.offset().left;
+                               containerLeft = this.$clippableScrollableContainer[ 0 ] === document.documentElement ?
+                                       0 :
+                                       this.$clippableScrollableContainer.offset().left;
 
                                this.toggleClipping( false );
                                this.$element.removeClass( 'oo-ui-popupToolGroup-right' );
index 75cce0a..846b263 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["../src/intro.js.txt","../src/Toolbar.js","../src/Tool.js","../src/ToolGroup.js","../src/ToolFactory.js","../src/ToolGroupFactory.js","../src/tools/PopupTool.js","../src/tools/ToolGroupTool.js","../src/toolgroups/BarToolGroup.js","../src/toolgroups/PopupToolGroup.js","../src/toolgroups/ListToolGroup.js","../src/toolgroups/MenuToolGroup.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-toolbars.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * Toolbars are complex interface components that permit users to easily access a variety\n * of {@link OO.ui.Tool tools} (e.g., formatting commands) and actions, which are additional commands that are\n * part of the toolbar, but not configured as tools.\n *\n * Individual tools are customized and then registered with a {@link OO.ui.ToolFactory tool factory}, which creates\n * the tools on demand. Each tool has a symbolic name (used when registering the tool), a title (e.g., ‘Insert\n * image’), and an icon.\n *\n * Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be {@link OO.ui.MenuToolGroup menus}\n * of tools, {@link OO.ui.ListToolGroup lists} of tools, or a single {@link OO.ui.BarToolGroup bar} of tools.\n * The arrangement and order of the toolgroups is customized when the toolbar is set up. Tools can be presented in\n * any order, but each can only appear once in the toolbar.\n *\n * The toolbar can be synchronized with the state of the external \"application\", like a text\n * editor's editing area, marking tools as active/inactive (e.g. a 'bold' tool would be shown as\n * active when the text cursor was inside bolded text) or enabled/disabled (e.g. a table caption\n * tool would be disabled while the user is not editing a table). A state change is signalled by\n * emitting the {@link #event-updateState 'updateState' event}, which calls Tools'\n * {@link OO.ui.Tool#onUpdateState onUpdateState method}.\n *\n * The following is an example of a basic toolbar.\n *\n *     @example\n *     // Example of a toolbar\n *     // Create the toolbar\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Toolbar example' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         this.setActive( false );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         this.setActive( false );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget).\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools' icons only, side-by-side.\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         },\n *         {\n *             // 'list' tool groups display both the titles and icons, in a dropdown list.\n *             type: 'list',\n *             indicator: 'down',\n *             label: 'More',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *         // Note how the tools themselves are toolgroup-agnostic - the same tool can be displayed\n *         // either in a 'list' or a 'bar'. There is a 'menu' tool group too, not showcased here,\n *         // since it's more complicated to use. (See the next example snippet on this page.)\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * The following example extends the previous one to illustrate 'menu' toolgroups and the usage of\n * {@link #event-updateState 'updateState' event}.\n *\n *     @example\n *     // Create the toolbar\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Toolbar example' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget). 'onUpdateState' is also already implemented.\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools' icons only, side-by-side.\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         },\n *         {\n *             // 'menu' tool groups display both the titles and icons, in a dropdown menu.\n *             // Menu label indicates which items are selected.\n *             type: 'menu',\n *             indicator: 'down',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.ToolFactory} toolFactory Factory for creating tools\n * @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating toolgroups\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [actions] Add an actions section to the toolbar. Actions are commands that are included\n *  in the toolbar, but are not configured as tools. By default, actions are displayed on the right side of\n *  the toolbar.\n * @cfg {string} [position='top'] Whether the toolbar is positioned above ('top') or below ('bottom') content.\n */\nOO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolFactory ) && config === undefined ) {\n\t\tconfig = toolFactory;\n\t\ttoolFactory = config.toolFactory;\n\t\ttoolGroupFactory = config.toolGroupFactory;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Toolbar.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.toolFactory = toolFactory;\n\tthis.toolGroupFactory = toolGroupFactory;\n\tthis.groups = [];\n\tthis.tools = {};\n\tthis.position = config.position || 'top';\n\tthis.$bar = $( '<div>' );\n\tthis.$actions = $( '<div>' );\n\tthis.initialized = false;\n\tthis.narrowThreshold = null;\n\tthis.onWindowResizeHandler = this.onWindowResize.bind( this );\n\n\t// Events\n\tthis.$element\n\t\t.add( this.$bar ).add( this.$group ).add( this.$actions )\n\t\t.on( 'mousedown keydown', this.onPointerDown.bind( this ) );\n\n\t// Initialization\n\tthis.$group.addClass( 'oo-ui-toolbar-tools' );\n\tif ( config.actions ) {\n\t\tthis.$bar.append( this.$actions.addClass( 'oo-ui-toolbar-actions' ) );\n\t}\n\tthis.$bar\n\t\t.addClass( 'oo-ui-toolbar-bar' )\n\t\t.append( this.$group, '<div style=\"clear:both\"></div>' );\n\t// Possible classes: oo-ui-toolbar-position-top, oo-ui-toolbar-position-bottom\n\tthis.$element.addClass( 'oo-ui-toolbar oo-ui-toolbar-position-' + this.position ).append( this.$bar );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Toolbar, OO.ui.Element );\nOO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );\nOO.mixinClass( OO.ui.Toolbar, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event updateState\n *\n * An 'updateState' event must be emitted on the Toolbar (by calling `toolbar.emit( 'updateState' )`)\n * every time the state of the application using the toolbar changes, and an update to the state of\n * tools is required.\n *\n * @param {...Mixed} data Application-defined parameters\n */\n\n/* Methods */\n\n/**\n * Get the tool factory.\n *\n * @return {OO.ui.ToolFactory} Tool factory\n */\nOO.ui.Toolbar.prototype.getToolFactory = function () {\n\treturn this.toolFactory;\n};\n\n/**\n * Get the toolgroup factory.\n *\n * @return {OO.Factory} Toolgroup factory\n */\nOO.ui.Toolbar.prototype.getToolGroupFactory = function () {\n\treturn this.toolGroupFactory;\n};\n\n/**\n * Handles mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.Toolbar.prototype.onPointerDown = function ( e ) {\n\tvar $closestWidgetToEvent = $( e.target ).closest( '.oo-ui-widget' ),\n\t\t$closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );\n\tif ( !$closestWidgetToEvent.length || $closestWidgetToEvent[ 0 ] === $closestWidgetToToolbar[ 0 ] ) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle window resize event.\n *\n * @private\n * @param {jQuery.Event} e Window resize event\n */\nOO.ui.Toolbar.prototype.onWindowResize = function () {\n\tthis.$element.toggleClass(\n\t\t'oo-ui-toolbar-narrow',\n\t\tthis.$bar.width() <= this.getNarrowThreshold()\n\t);\n};\n\n/**\n * Get the (lazily-computed) width threshold for applying the oo-ui-toolbar-narrow\n * class.\n *\n * @private\n * @return {number} Width threshold in pixels\n */\nOO.ui.Toolbar.prototype.getNarrowThreshold = function () {\n\tif ( this.narrowThreshold === null ) {\n\t\tthis.narrowThreshold = this.$group.width() + this.$actions.width();\n\t}\n\treturn this.narrowThreshold;\n};\n\n/**\n * Sets up handles and preloads required information for the toolbar to work.\n * This must be called after it is attached to a visible document and before doing anything else.\n */\nOO.ui.Toolbar.prototype.initialize = function () {\n\tif ( !this.initialized ) {\n\t\tthis.initialized = true;\n\t\t$( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );\n\t\tthis.onWindowResize();\n\t}\n};\n\n/**\n * Set up the toolbar.\n *\n * The toolbar is set up with a list of toolgroup configurations that specify the type of\n * toolgroup ({@link OO.ui.BarToolGroup bar}, {@link OO.ui.MenuToolGroup menu}, or {@link OO.ui.ListToolGroup list})\n * to add and which tools to include, exclude, promote, or demote within that toolgroup. Please\n * see {@link OO.ui.ToolGroup toolgroups} for more information about including tools in toolgroups.\n *\n * @param {Object.<string,Array>} groups List of toolgroup configurations\n * @param {Array|string} [groups.include] Tools to include in the toolgroup\n * @param {Array|string} [groups.exclude] Tools to exclude from the toolgroup\n * @param {Array|string} [groups.promote] Tools to promote to the beginning of the toolgroup\n * @param {Array|string} [groups.demote] Tools to demote to the end of the toolgroup\n */\nOO.ui.Toolbar.prototype.setup = function ( groups ) {\n\tvar i, len, type, group,\n\t\titems = [],\n\t\tdefaultType = 'bar';\n\n\t// Cleanup previous groups\n\tthis.reset();\n\n\t// Build out new groups\n\tfor ( i = 0, len = groups.length; i < len; i++ ) {\n\t\tgroup = groups[ i ];\n\t\tif ( group.include === '*' ) {\n\t\t\t// Apply defaults to catch-all groups\n\t\t\tif ( group.type === undefined ) {\n\t\t\t\tgroup.type = 'list';\n\t\t\t}\n\t\t\tif ( group.label === undefined ) {\n\t\t\t\tgroup.label = OO.ui.msg( 'ooui-toolbar-more' );\n\t\t\t}\n\t\t}\n\t\t// Check type has been registered\n\t\ttype = this.getToolGroupFactory().lookup( group.type ) ? group.type : defaultType;\n\t\titems.push(\n\t\t\tthis.getToolGroupFactory().create( type, this, group )\n\t\t);\n\t}\n\tthis.addItems( items );\n};\n\n/**\n * Remove all tools and toolgroups from the toolbar.\n */\nOO.ui.Toolbar.prototype.reset = function () {\n\tvar i, len;\n\n\tthis.groups = [];\n\tthis.tools = {};\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.items[ i ].destroy();\n\t}\n\tthis.clearItems();\n};\n\n/**\n * Destroy the toolbar.\n *\n * Destroying the toolbar removes all event handlers and DOM elements that constitute the toolbar. Call\n * this method whenever you are done using a toolbar.\n */\nOO.ui.Toolbar.prototype.destroy = function () {\n\t$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );\n\tthis.reset();\n\tthis.$element.remove();\n};\n\n/**\n * Check if the tool is available.\n *\n * Available tools are ones that have not yet been added to the toolbar.\n *\n * @param {string} name Symbolic name of tool\n * @return {boolean} Tool is available\n */\nOO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {\n\treturn !this.tools[ name ];\n};\n\n/**\n * Prevent tool from being used again.\n *\n * @param {OO.ui.Tool} tool Tool to reserve\n */\nOO.ui.Toolbar.prototype.reserveTool = function ( tool ) {\n\tthis.tools[ tool.getName() ] = tool;\n};\n\n/**\n * Allow tool to be used again.\n *\n * @param {OO.ui.Tool} tool Tool to release\n */\nOO.ui.Toolbar.prototype.releaseTool = function ( tool ) {\n\tdelete this.tools[ tool.getName() ];\n};\n\n/**\n * Get accelerator label for tool.\n *\n * The OOjs UI library does not contain an accelerator system, but this is the hook for one. To\n * use an accelerator system, subclass the toolbar and override this method, which is meant to return a label\n * that describes the accelerator keys for the tool passed (by symbolic name) to the method.\n *\n * @param {string} name Symbolic name of tool\n * @return {string|undefined} Tool accelerator label if available\n */\nOO.ui.Toolbar.prototype.getToolAccelerator = function () {\n\treturn undefined;\n};\n","/**\n * Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute {@link OO.ui.Toolbar toolbars}.\n * Each tool is configured with a static name, title, and icon and is customized with the command to carry\n * out when the tool is selected. Tools must also be registered with a {@link OO.ui.ToolFactory tool factory},\n * which creates the tools on demand.\n *\n * Every Tool subclass must implement two methods:\n *\n * - {@link #onUpdateState}\n * - {@link #onSelect}\n *\n * Tools are added to toolgroups ({@link OO.ui.ListToolGroup ListToolGroup},\n * {@link OO.ui.BarToolGroup BarToolGroup}, or {@link OO.ui.MenuToolGroup MenuToolGroup}), which determine how\n * the tool is displayed in the toolbar. See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki][1].\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n * @cfg {string|Function} [title] Title text or a function that returns text. If this config is omitted, the value of\n *  the {@link #static-title static title} property is used.\n *\n *  The title is used in different ways depending on the type of toolgroup that contains the tool. The\n *  title is used as a tooltip if the tool is part of a {@link OO.ui.BarToolGroup bar} toolgroup, or as the label text if the tool is\n *  part of a {@link OO.ui.ListToolGroup list} or {@link OO.ui.MenuToolGroup menu} toolgroup.\n *\n *  For bar toolgroups, a description of the accelerator key is appended to the title if an accelerator key\n *  is associated with an action by the same name as the tool and accelerator functionality has been added to the application.\n *  To add accelerator key functionality, you must subclass OO.ui.Toolbar and override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method.\n */\nOO.ui.Tool = function OoUiTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Tool.parent.call( this, config );\n\n\t// Properties\n\tthis.toolGroup = toolGroup;\n\tthis.toolbar = this.toolGroup.getToolbar();\n\tthis.active = false;\n\tthis.$title = $( '<span>' );\n\tthis.$accel = $( '<span>' );\n\tthis.$link = $( '<a>' );\n\tthis.title = null;\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );\n\n\t// Events\n\tthis.toolbar.connect( this, { updateState: 'onUpdateState' } );\n\n\t// Initialization\n\tthis.$title.addClass( 'oo-ui-tool-title' );\n\tthis.$accel\n\t\t.addClass( 'oo-ui-tool-accel' )\n\t\t.prop( {\n\t\t\t// This may need to be changed if the key names are ever localized,\n\t\t\t// but for now they are essentially written in English\n\t\t\tdir: 'ltr',\n\t\t\tlang: 'en'\n\t\t} );\n\tthis.$link\n\t\t.addClass( 'oo-ui-tool-link' )\n\t\t.append( this.$icon, this.$title, this.$accel )\n\t\t.attr( 'role', 'button' );\n\tthis.$element\n\t\t.data( 'oo-ui-tool', this )\n\t\t.addClass( 'oo-ui-tool' )\n\t\t.addClass( 'oo-ui-tool-name-' + this.constructor.static.name.replace( /^([^/]+)\\/([^/]+).*$/, '$1-$2' ) )\n\t\t.toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )\n\t\t.append( this.$link );\n\tthis.setTitle( config.title || this.constructor.static.title );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Tool, OO.ui.Widget );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.Tool.static.tagName = 'span';\n\n/**\n * Symbolic name of tool.\n *\n * The symbolic name is used internally to register the tool with a {@link OO.ui.ToolFactory ToolFactory}. It can\n * also be used when adding tools to toolgroups.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Tool.static.name = '';\n\n/**\n * Symbolic name of the group.\n *\n * The group name is used to associate tools with each other so that they can be selected later by\n * a {@link OO.ui.ToolGroup toolgroup}.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Tool.static.group = '';\n\n/**\n * Tool title text or a function that returns title text. The value of the static property is overridden if the #title config option is used.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string|Function}\n */\nOO.ui.Tool.static.title = '';\n\n/**\n * Display both icon and label when the tool is used in a {@link OO.ui.BarToolGroup bar} toolgroup.\n * Normally only the icon is displayed, or only the label if no icon is given.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.Tool.static.displayBothIconAndLabel = false;\n\n/**\n * Add tool to catch-all groups automatically.\n *\n * A catch-all group, which contains all tools that do not currently belong to a toolgroup,\n * can be included in a toolgroup using the wildcard selector, an asterisk (*).\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.Tool.static.autoAddToCatchall = true;\n\n/**\n * Add tool to named groups automatically.\n *\n * By default, tools that are configured with a static ‘group’ property are added\n * to that group and will be selected when the symbolic name of the group is specified (e.g., when\n * toolgroups include tools by group name).\n *\n * @static\n * @property {boolean}\n * @inheritable\n */\nOO.ui.Tool.static.autoAddToGroup = true;\n\n/**\n * Check if this tool is compatible with given data.\n *\n * This is a stub that can be overridden to provide support for filtering tools based on an\n * arbitrary piece of information  (e.g., where the cursor is in a document). The implementation\n * must also call this method so that the compatibility check can be performed.\n *\n * @static\n * @inheritable\n * @param {Mixed} data Data to check\n * @return {boolean} Tool can be used with data\n */\nOO.ui.Tool.static.isCompatibleWith = function () {\n\treturn false;\n};\n\n/* Methods */\n\n/**\n * Handle the toolbar state being updated. This method is called when the\n * {@link OO.ui.Toolbar#event-updateState 'updateState' event} is emitted on the\n * {@link OO.ui.Toolbar Toolbar} that uses this tool, and should set the state of this tool\n * depending on application state (usually by calling #setDisabled to enable or disable the tool,\n * or #setActive to mark is as currently in-use or not).\n *\n * This is an abstract method that must be overridden in a concrete subclass.\n *\n * @method\n * @protected\n * @abstract\n */\nOO.ui.Tool.prototype.onUpdateState = null;\n\n/**\n * Handle the tool being selected. This method is called when the user triggers this tool,\n * usually by clicking on its label/icon.\n *\n * This is an abstract method that must be overridden in a concrete subclass.\n *\n * @method\n * @protected\n * @abstract\n */\nOO.ui.Tool.prototype.onSelect = null;\n\n/**\n * Check if the tool is active.\n *\n * Tools become active when their #onSelect or #onUpdateState handlers change them to appear pressed\n * with the #setActive method. Additional CSS is applied to the tool to reflect the active state.\n *\n * @return {boolean} Tool is active\n */\nOO.ui.Tool.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Make the tool appear active or inactive.\n *\n * This method should be called within #onSelect or #onUpdateState event handlers to make the tool\n * appear pressed or not.\n *\n * @param {boolean} state Make tool appear active\n */\nOO.ui.Tool.prototype.setActive = function ( state ) {\n\tthis.active = !!state;\n\tif ( this.active ) {\n\t\tthis.$element.addClass( 'oo-ui-tool-active' );\n\t\tthis.setFlags( { progressive: true } );\n\t} else {\n\t\tthis.$element.removeClass( 'oo-ui-tool-active' );\n\t\tthis.setFlags( { progressive: false } );\n\t}\n};\n\n/**\n * Set the tool #title.\n *\n * @param {string|Function} title Title text or a function that returns text\n * @chainable\n */\nOO.ui.Tool.prototype.setTitle = function ( title ) {\n\tthis.title = OO.ui.resolveMsg( title );\n\tthis.updateTitle();\n\treturn this;\n};\n\n/**\n * Get the tool #title.\n *\n * @return {string} Title text\n */\nOO.ui.Tool.prototype.getTitle = function () {\n\treturn this.title;\n};\n\n/**\n * Get the tool's symbolic name.\n *\n * @return {string} Symbolic name of tool\n */\nOO.ui.Tool.prototype.getName = function () {\n\treturn this.constructor.static.name;\n};\n\n/**\n * Update the title.\n */\nOO.ui.Tool.prototype.updateTitle = function () {\n\tvar titleTooltips = this.toolGroup.constructor.static.titleTooltips,\n\t\taccelTooltips = this.toolGroup.constructor.static.accelTooltips,\n\t\taccel = this.toolbar.getToolAccelerator( this.constructor.static.name ),\n\t\ttooltipParts = [];\n\n\tthis.$title.text( this.title );\n\tthis.$accel.text( accel );\n\n\tif ( titleTooltips && typeof this.title === 'string' && this.title.length ) {\n\t\ttooltipParts.push( this.title );\n\t}\n\tif ( accelTooltips && typeof accel === 'string' && accel.length ) {\n\t\ttooltipParts.push( accel );\n\t}\n\tif ( tooltipParts.length ) {\n\t\tthis.$link.attr( 'title', tooltipParts.join( ' ' ) );\n\t} else {\n\t\tthis.$link.removeAttr( 'title' );\n\t}\n};\n\n/**\n * Destroy tool.\n *\n * Destroying the tool removes all event handlers and the tool’s DOM elements.\n * Call this method whenever you are done using a tool.\n */\nOO.ui.Tool.prototype.destroy = function () {\n\tthis.toolbar.disconnect( this );\n\tthis.$element.remove();\n};\n","/**\n * ToolGroups are collections of {@link OO.ui.Tool tools} that are used in a {@link OO.ui.Toolbar toolbar}.\n * The type of toolgroup ({@link OO.ui.ListToolGroup list}, {@link OO.ui.BarToolGroup bar}, or {@link OO.ui.MenuToolGroup menu})\n * to which a tool belongs determines how the tool is arranged and displayed in the toolbar. Toolgroups\n * themselves are created on demand with a {@link OO.ui.ToolGroupFactory toolgroup factory}.\n *\n * Toolgroups can contain individual tools, groups of tools, or all available tools, as specified\n * using the `include` config option. See OO.ui.ToolFactory#extract on documentation of the format.\n * The options `exclude`, `promote`, and `demote` support the same formats.\n *\n * See {@link OO.ui.Toolbar toolbars} for a full example. For more information about toolbars in general,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {Array|string} [include] List of tools to include in the toolgroup, see above.\n * @cfg {Array|string} [exclude] List of tools to exclude from the toolgroup, see above.\n * @cfg {Array|string} [promote] List of tools to promote to the beginning of the toolgroup, see above.\n * @cfg {Array|string} [demote] List of tools to demote to the end of the toolgroup, see above.\n *  This setting is particularly useful when tools have been added to the toolgroup\n *  en masse (e.g., via the catch-all selector).\n */\nOO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToolGroup.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.toolbar = toolbar;\n\tthis.tools = {};\n\tthis.pressed = null;\n\tthis.autoDisabled = false;\n\tthis.include = config.include || [];\n\tthis.exclude = config.exclude || [];\n\tthis.promote = config.promote || [];\n\tthis.demote = config.demote || [];\n\tthis.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this );\n\n\t// Events\n\tthis.$element.on( {\n\t\tmousedown: this.onMouseKeyDown.bind( this ),\n\t\tmouseup: this.onMouseKeyUp.bind( this ),\n\t\tkeydown: this.onMouseKeyDown.bind( this ),\n\t\tkeyup: this.onMouseKeyUp.bind( this ),\n\t\tfocus: this.onMouseOverFocus.bind( this ),\n\t\tblur: this.onMouseOutBlur.bind( this ),\n\t\tmouseover: this.onMouseOverFocus.bind( this ),\n\t\tmouseout: this.onMouseOutBlur.bind( this )\n\t} );\n\tthis.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );\n\tthis.aggregate( { disable: 'itemDisable' } );\n\tthis.connect( this, { itemDisable: 'updateDisabled' } );\n\n\t// Initialization\n\tthis.$group.addClass( 'oo-ui-toolGroup-tools' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toolGroup' )\n\t\t.append( this.$group );\n\tthis.populate();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );\nOO.mixinClass( OO.ui.ToolGroup, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event update\n */\n\n/* Static Properties */\n\n/**\n * Show labels in tooltips.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.titleTooltips = false;\n\n/**\n * Show acceleration labels in tooltips.\n *\n * Note: The OOjs UI library does not include an accelerator system, but does contain\n * a hook for one. To use an accelerator system, subclass the {@link OO.ui.Toolbar toolbar} and\n * override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method, which is\n * meant to return a label that describes the accelerator keys for a given tool (e.g., 'Ctrl + M').\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.accelTooltips = false;\n\n/**\n * Automatically disable the toolgroup when all tools are disabled\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.autoDisable = true;\n\n/**\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.ToolGroup.static.name = null;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ToolGroup.prototype.isDisabled = function () {\n\treturn this.autoDisabled || OO.ui.ToolGroup.parent.prototype.isDisabled.apply( this, arguments );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToolGroup.prototype.updateDisabled = function () {\n\tvar i, item, allDisabled = true;\n\n\tif ( this.constructor.static.autoDisable ) {\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( !item.isDisabled() ) {\n\t\t\t\tallDisabled = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.autoDisabled = allDisabled;\n\t}\n\tOO.ui.ToolGroup.parent.prototype.updateDisabled.apply( this, arguments );\n};\n\n/**\n * Handle mouse down and key down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down or key down event\n */\nOO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.pressed = this.findTargetTool( e );\n\t\tif ( this.pressed ) {\n\t\t\tthis.pressed.setActive( true );\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Handle captured mouse up and key up events.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );\n\tthis.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );\n\t// onMouseKeyUp may be called a second time, depending on where the mouse is when the button is\n\t// released, but since `this.pressed` will no longer be true, the second call will be ignored.\n\tthis.onMouseKeyUp( e );\n};\n\n/**\n * Handle mouse up and key up events.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif (\n\t\t!this.isDisabled() && this.pressed && this.pressed === tool &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.pressed.onSelect();\n\t\tthis.pressed = null;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\tthis.pressed = null;\n};\n\n/**\n * Handle mouse over and focus events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse over or focus event\n */\nOO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif ( this.pressed && this.pressed === tool ) {\n\t\tthis.pressed.setActive( true );\n\t}\n};\n\n/**\n * Handle mouse out and blur events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse out or blur event\n */\nOO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif ( this.pressed && this.pressed === tool ) {\n\t\tthis.pressed.setActive( false );\n\t}\n};\n\n/**\n * Get the closest tool to a jQuery.Event.\n *\n * Only tool links are considered, which prevents other elements in the tool such as popups from\n * triggering tool group interactions.\n *\n * @private\n * @param {jQuery.Event} e\n * @return {OO.ui.Tool|null} Tool, `null` if none was found\n */\nOO.ui.ToolGroup.prototype.findTargetTool = function ( e ) {\n\tvar tool,\n\t\t$item = $( e.target ).closest( '.oo-ui-tool-link' );\n\n\tif ( $item.length ) {\n\t\ttool = $item.parent().data( 'oo-ui-tool' );\n\t}\n\n\treturn tool && !tool.isDisabled() ? tool : null;\n};\n\n/**\n * Handle tool registry register events.\n *\n * If a tool is registered after the group is created, we must repopulate the list to account for:\n *\n * - a tool being added that may be included\n * - a tool already included being overridden\n *\n * @protected\n * @param {string} name Symbolic name of tool\n */\nOO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {\n\tthis.populate();\n};\n\n/**\n * Get the toolbar that contains the toolgroup.\n *\n * @return {OO.ui.Toolbar} Toolbar that contains the toolgroup\n */\nOO.ui.ToolGroup.prototype.getToolbar = function () {\n\treturn this.toolbar;\n};\n\n/**\n * Add and remove tools based on configuration.\n */\nOO.ui.ToolGroup.prototype.populate = function () {\n\tvar i, len, name, tool,\n\t\ttoolFactory = this.toolbar.getToolFactory(),\n\t\tnames = {},\n\t\tadd = [],\n\t\tremove = [],\n\t\tlist = this.toolbar.getToolFactory().getTools(\n\t\t\tthis.include, this.exclude, this.promote, this.demote\n\t\t);\n\n\t// Build a list of needed tools\n\tfor ( i = 0, len = list.length; i < len; i++ ) {\n\t\tname = list[ i ];\n\t\tif (\n\t\t\t// Tool exists\n\t\t\ttoolFactory.lookup( name ) &&\n\t\t\t// Tool is available or is already in this group\n\t\t\t( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )\n\t\t) {\n\t\t\t// Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before\n\t\t\t// creating it, but we can't call reserveTool() yet because we haven't created the tool.\n\t\t\tthis.toolbar.tools[ name ] = true;\n\t\t\ttool = this.tools[ name ];\n\t\t\tif ( !tool ) {\n\t\t\t\t// Auto-initialize tools on first use\n\t\t\t\tthis.tools[ name ] = tool = toolFactory.create( name, this );\n\t\t\t\ttool.updateTitle();\n\t\t\t}\n\t\t\tthis.toolbar.reserveTool( tool );\n\t\t\tadd.push( tool );\n\t\t\tnames[ name ] = true;\n\t\t}\n\t}\n\t// Remove tools that are no longer needed\n\tfor ( name in this.tools ) {\n\t\tif ( !names[ name ] ) {\n\t\t\tthis.tools[ name ].destroy();\n\t\t\tthis.toolbar.releaseTool( this.tools[ name ] );\n\t\t\tremove.push( this.tools[ name ] );\n\t\t\tdelete this.tools[ name ];\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeItems( remove );\n\t}\n\t// Update emptiness state\n\tif ( add.length ) {\n\t\tthis.$element.removeClass( 'oo-ui-toolGroup-empty' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-toolGroup-empty' );\n\t}\n\t// Re-add tools (moving existing ones to new locations)\n\tthis.addItems( add );\n\t// Disabled state may depend on items\n\tthis.updateDisabled();\n};\n\n/**\n * Destroy toolgroup.\n */\nOO.ui.ToolGroup.prototype.destroy = function () {\n\tvar name;\n\n\tthis.clearItems();\n\tthis.toolbar.getToolFactory().disconnect( this );\n\tfor ( name in this.tools ) {\n\t\tthis.toolbar.releaseTool( this.tools[ name ] );\n\t\tthis.tools[ name ].disconnect( this ).destroy();\n\t\tdelete this.tools[ name ];\n\t}\n\tthis.$element.remove();\n};\n","/**\n * A ToolFactory creates tools on demand. All tools ({@link OO.ui.Tool Tools}, {@link OO.ui.PopupTool PopupTools},\n * and {@link OO.ui.ToolGroupTool ToolGroupTools}) must be registered with a tool factory. Tools are\n * registered by their symbolic name. See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.Factory\n * @constructor\n */\nOO.ui.ToolFactory = function OoUiToolFactory() {\n\t// Parent constructor\n\tOO.ui.ToolFactory.parent.call( this );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolFactory, OO.Factory );\n\n/* Methods */\n\n/**\n * Get tools from the factory\n *\n * @param {Array|string} [include] Included tools, see #extract for format\n * @param {Array|string} [exclude] Excluded tools, see #extract for format\n * @param {Array|string} [promote] Promoted tools, see #extract for format\n * @param {Array|string} [demote] Demoted tools, see #extract for format\n * @return {string[]} List of tools\n */\nOO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {\n\tvar i, len, included, promoted, demoted,\n\t\tauto = [],\n\t\tused = {};\n\n\t// Collect included and not excluded tools\n\tincluded = OO.simpleArrayDifference( this.extract( include ), this.extract( exclude ) );\n\n\t// Promotion\n\tpromoted = this.extract( promote, used );\n\tdemoted = this.extract( demote, used );\n\n\t// Auto\n\tfor ( i = 0, len = included.length; i < len; i++ ) {\n\t\tif ( !used[ included[ i ] ] ) {\n\t\t\tauto.push( included[ i ] );\n\t\t}\n\t}\n\n\treturn promoted.concat( auto ).concat( demoted );\n};\n\n/**\n * Get a flat list of names from a list of names or groups.\n *\n * Normally, `collection` is an array of tool specifications. Tools can be specified in the\n * following ways:\n *\n * - To include an individual tool, use the symbolic name: `{ name: 'tool-name' }` or `'tool-name'`.\n * - To include all tools in a group, use the group name: `{ group: 'group-name' }`. (To assign the\n *   tool to a group, use OO.ui.Tool.static.group.)\n *\n * Alternatively, to include all tools that are not yet assigned to any other toolgroup, use the\n * catch-all selector `'*'`.\n *\n * If `used` is passed, tool names that appear as properties in this object will be considered\n * already assigned, and will not be returned even if specified otherwise. The tool names extracted\n * by this function call will be added as new properties in the object.\n *\n * @private\n * @param {Array|string} collection List of tools, see above\n * @param {Object} [used] Object containing information about used tools, see above\n * @return {string[]} List of extracted tool names\n */\nOO.ui.ToolFactory.prototype.extract = function ( collection, used ) {\n\tvar i, len, item, name, tool,\n\t\tnames = [];\n\n\tcollection = !Array.isArray( collection ) ? [ collection ] : collection;\n\n\tfor ( i = 0, len = collection.length; i < len; i++ ) {\n\t\titem = collection[ i ];\n\t\tif ( item === '*' ) {\n\t\t\tfor ( name in this.registry ) {\n\t\t\t\ttool = this.registry[ name ];\n\t\t\t\tif (\n\t\t\t\t\t// Only add tools by group name when auto-add is enabled\n\t\t\t\t\ttool.static.autoAddToCatchall &&\n\t\t\t\t\t// Exclude already used tools\n\t\t\t\t\t( !used || !used[ name ] )\n\t\t\t\t) {\n\t\t\t\t\tnames.push( name );\n\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\tused[ name ] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Allow plain strings as shorthand for named tools\n\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\titem = { name: item };\n\t\t\t}\n\t\t\tif ( OO.isPlainObject( item ) ) {\n\t\t\t\tif ( item.group ) {\n\t\t\t\t\tfor ( name in this.registry ) {\n\t\t\t\t\t\ttool = this.registry[ name ];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t// Include tools with matching group\n\t\t\t\t\t\t\ttool.static.group === item.group &&\n\t\t\t\t\t\t\t// Only add tools by group name when auto-add is enabled\n\t\t\t\t\t\t\ttool.static.autoAddToGroup &&\n\t\t\t\t\t\t\t// Exclude already used tools\n\t\t\t\t\t\t\t( !used || !used[ name ] )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnames.push( name );\n\t\t\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\t\t\tused[ name ] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t// Include tools with matching name and exclude already used tools\n\t\t\t\t} else if ( item.name && ( !used || !used[ item.name ] ) ) {\n\t\t\t\t\tnames.push( item.name );\n\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\tused[ item.name ] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn names;\n};\n","/**\n * ToolGroupFactories create {@link OO.ui.ToolGroup toolgroups} on demand. The toolgroup classes must\n * specify a symbolic name and be registered with the factory. The following classes are registered by\n * default:\n *\n * - {@link OO.ui.BarToolGroup BarToolGroups} (‘bar’)\n * - {@link OO.ui.MenuToolGroup MenuToolGroups} (‘menu’)\n * - {@link OO.ui.ListToolGroup ListToolGroups} (‘list’)\n *\n * See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.Factory\n * @constructor\n */\nOO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {\n\tvar i, l, defaultClasses;\n\t// Parent constructor\n\tOO.Factory.call( this );\n\n\tdefaultClasses = this.constructor.static.getDefaultClasses();\n\n\t// Register default toolgroups\n\tfor ( i = 0, l = defaultClasses.length; i < l; i++ ) {\n\t\tthis.register( defaultClasses[ i ] );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroupFactory, OO.Factory );\n\n/* Static Methods */\n\n/**\n * Get a default set of classes to be registered on construction.\n *\n * @return {Function[]} Default classes\n */\nOO.ui.ToolGroupFactory.static.getDefaultClasses = function () {\n\treturn [\n\t\tOO.ui.BarToolGroup,\n\t\tOO.ui.ListToolGroup,\n\t\tOO.ui.MenuToolGroup\n\t];\n};\n","/**\n * Popup tools open a popup window when they are selected from the {@link OO.ui.Toolbar toolbar}. Each popup tool is configured\n * with a static name, title, and icon, as well with as any popup configurations. Unlike other tools, popup tools do not require that developers specify\n * an #onSelect or #onUpdateState method, as these methods have been implemented already.\n *\n *     // Example of a popup tool. When selected, a popup tool displays\n *     // a popup window.\n *     function HelpTool( toolGroup, config ) {\n *        OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *            padded: true,\n *            label: 'Help',\n *            head: true\n *        } }, config ) );\n *        this.popup.$body.append( '<p>I am helpful!</p>' );\n *     };\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n * For an example of a toolbar that contains a popup tool, see {@link OO.ui.Toolbar toolbars}. For more information about\n * toolbars in genreral, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Tool\n * @mixins OO.ui.mixin.PopupElement\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n */\nOO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Parent constructor\n\tOO.ui.PopupTool.parent.call( this, toolGroup, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\t// Initialization\n\tthis.popup.setPosition( toolGroup.getToolbar().position === 'bottom' ? 'above' : 'below' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupTool' )\n\t\t.append( this.popup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );\nOO.mixinClass( OO.ui.PopupTool, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Handle the tool being selected.\n *\n * @inheritdoc\n */\nOO.ui.PopupTool.prototype.onSelect = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.popup.toggle();\n\t}\n\tthis.setActive( false );\n\treturn false;\n};\n\n/**\n * Handle the toolbar state being updated.\n *\n * @inheritdoc\n */\nOO.ui.PopupTool.prototype.onUpdateState = function () {\n\tthis.setActive( false );\n};\n","/**\n * A ToolGroupTool is a special sort of tool that can contain other {@link OO.ui.Tool tools}\n * and {@link OO.ui.ToolGroup toolgroups}. The ToolGroupTool was specifically designed to be used\n * inside a {@link OO.ui.BarToolGroup bar} toolgroup to provide access to additional tools from\n * the bar item. Included tools will be displayed in a dropdown {@link OO.ui.ListToolGroup list}\n * when the ToolGroupTool is selected.\n *\n *     // Example: ToolGroupTool with two nested tools, 'setting1' and 'setting2', defined elsewhere.\n *\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     };\n *     OO.inheritClass( SettingsTool, OO.ui.ToolGroupTool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.static.groupConfig = {\n *         icon: 'settings',\n *         label: 'ToolGroupTool',\n *         include: [  'setting1', 'setting2'  ]\n *     };\n *     toolFactory.register( SettingsTool );\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * Please note that this implementation is subject to change per [T74159] [2].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars#ToolGroupTool\n * [2]: https://phabricator.wikimedia.org/T74159\n *\n * @abstract\n * @class\n * @extends OO.ui.Tool\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n */\nOO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Parent constructor\n\tOO.ui.ToolGroupTool.parent.call( this, toolGroup, config );\n\n\t// Properties\n\tthis.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );\n\n\t// Events\n\tthis.innerToolGroup.connect( this, { disable: 'onToolGroupDisable' } );\n\n\t// Initialization\n\tthis.$link.remove();\n\tthis.$element\n\t\t.addClass( 'oo-ui-toolGroupTool' )\n\t\t.append( this.innerToolGroup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );\n\n/* Static Properties */\n\n/**\n * Toolgroup configuration.\n *\n * The toolgroup configuration consists of the tools to include, as well as an icon and label\n * to use for the bar item. Tools can be included by symbolic name, group, or with the\n * wildcard selector. Please see {@link OO.ui.ToolGroup toolgroup} for more information.\n *\n * @property {Object.<string,Array>}\n */\nOO.ui.ToolGroupTool.static.groupConfig = {};\n\n/* Methods */\n\n/**\n * Handle the tool being selected.\n *\n * @inheritdoc\n */\nOO.ui.ToolGroupTool.prototype.onSelect = function () {\n\tthis.innerToolGroup.setActive( !this.innerToolGroup.active );\n\treturn false;\n};\n\n/**\n * Synchronize disabledness state of the tool with the inner toolgroup.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.ToolGroupTool.prototype.onToolGroupDisable = function ( disabled ) {\n\tthis.setDisabled( disabled );\n};\n\n/**\n * Handle the toolbar state being updated.\n *\n * @inheritdoc\n */\nOO.ui.ToolGroupTool.prototype.onUpdateState = function () {\n\tthis.setActive( false );\n};\n\n/**\n * Build a {@link OO.ui.ToolGroup toolgroup} from the specified configuration.\n *\n * @param {Object.<string,Array>} group Toolgroup configuration. Please see {@link OO.ui.ToolGroup toolgroup} for\n *  more information.\n * @return {OO.ui.ListToolGroup}\n */\nOO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {\n\tif ( group.include === '*' ) {\n\t\t// Apply defaults to catch-all groups\n\t\tif ( group.label === undefined ) {\n\t\t\tgroup.label = OO.ui.msg( 'ooui-toolbar-more' );\n\t\t}\n\t}\n\n\treturn this.toolbar.getToolGroupFactory().create( 'list', this.toolbar, group );\n};\n","/**\n * BarToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup}). The {@link OO.ui.Tool tools} in a BarToolGroup are\n * displayed by icon in a single row. The title of the tool is displayed when users move the mouse over\n * the tool.\n *\n * BarToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar is\n * set up.\n *\n *     @example\n *     // Example of a BarToolGroup with two tools\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Example of a BarToolGroup with two tools.' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget).\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools by icon only\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *\n * For more information about how to add tools to a bar tool group, please see {@link OO.ui.ToolGroup toolgroup}.\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.ToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n */\nOO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Parent constructor\n\tOO.ui.BarToolGroup.parent.call( this, toolbar, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-barToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BarToolGroup, OO.ui.ToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.titleTooltips = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.accelTooltips = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.name = 'bar';\n","/**\n * PopupToolGroup is an abstract base class used by both {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup} to provide a popup--an overlaid menu or list of tools with an\n * optional icon and label. This class can be used for other base classes that also use this functionality.\n *\n * @abstract\n * @class\n * @extends OO.ui.ToolGroup\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {string} [header] Text to display at the top of the popup\n */\nOO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tindicator: config.indicator === undefined ? ( toolbar.position === 'bottom' ? 'up' : 'down' ) : config.indicator\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.PopupToolGroup.parent.call( this, toolbar, config );\n\n\t// Properties\n\tthis.active = false;\n\tthis.dragging = false;\n\tthis.onBlurHandler = this.onBlur.bind( this );\n\tthis.$handle = $( '<span>' );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );\n\n\t// Events\n\tthis.$handle.on( {\n\t\tkeydown: this.onHandleMouseKeyDown.bind( this ),\n\t\tkeyup: this.onHandleMouseKeyUp.bind( this ),\n\t\tmousedown: this.onHandleMouseKeyDown.bind( this ),\n\t\tmouseup: this.onHandleMouseKeyUp.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$handle\n\t\t.addClass( 'oo-ui-popupToolGroup-handle' )\n\t\t.attr( 'role', 'button' )\n\t\t.append( this.$icon, this.$label, this.$indicator );\n\t// If the pop-up should have a header, add it to the top of the toolGroup.\n\t// Note: If this feature is useful for other widgets, we could abstract it into an\n\t// OO.ui.HeaderedElement mixin constructor.\n\tif ( config.header !== undefined ) {\n\t\tthis.$group\n\t\t\t.prepend( $( '<span>' )\n\t\t\t\t.addClass( 'oo-ui-popupToolGroup-header' )\n\t\t\t\t.text( config.header )\n\t\t\t);\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupToolGroup' )\n\t\t.prepend( this.$handle );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupToolGroup.prototype.setDisabled = function () {\n\t// Parent method\n\tOO.ui.PopupToolGroup.parent.prototype.setDisabled.apply( this, arguments );\n\n\tif ( this.isDisabled() && this.isElementAttached() ) {\n\t\tthis.setActive( false );\n\t}\n};\n\n/**\n * Handle focus being lost.\n *\n * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {\n\t// Only deactivate when clicking outside the dropdown element\n\tif ( $( e.target ).closest( '.oo-ui-popupToolGroup' )[ 0 ] !== this.$element[ 0 ] ) {\n\t\tthis.setActive( false );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\t// Only close toolgroup when a tool was actually selected\n\tif (\n\t\t!this.isDisabled() && this.pressed && this.pressed === this.findTargetTool( e ) &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.setActive( false );\n\t}\n\treturn OO.ui.PopupToolGroup.parent.prototype.onMouseKeyUp.call( this, e );\n};\n\n/**\n * Handle mouse up and key up events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse up or key up event\n */\nOO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle mouse down and key down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down or key down event\n */\nOO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.setActive( !this.active );\n\t\treturn false;\n\t}\n};\n\n/**\n * Switch into 'active' mode.\n *\n * When active, the popup is visible. A mouseup event anywhere in the document will trigger\n * deactivation.\n *\n * @param {boolean} value The active state to set\n */\nOO.ui.PopupToolGroup.prototype.setActive = function ( value ) {\n\tvar containerWidth, containerLeft;\n\tvalue = !!value;\n\tif ( this.active !== value ) {\n\t\tthis.active = value;\n\t\tif ( value ) {\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );\n\n\t\t\tthis.$clippable.css( 'left', '' );\n\t\t\t// Try anchoring the popup to the left first\n\t\t\tthis.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );\n\t\t\tthis.setFlags( { progressive: true } );\n\t\t\tthis.toggleClipping( true );\n\t\t\tif ( this.isClippedHorizontally() ) {\n\t\t\t\t// Anchoring to the left caused the popup to clip, so anchor it to the right instead\n\t\t\t\tthis.toggleClipping( false );\n\t\t\t\tthis.$element\n\t\t\t\t\t.removeClass( 'oo-ui-popupToolGroup-left' )\n\t\t\t\t\t.addClass( 'oo-ui-popupToolGroup-right' );\n\t\t\t\tthis.toggleClipping( true );\n\t\t\t}\n\t\t\tif ( this.isClippedHorizontally() ) {\n\t\t\t\t// Anchoring to the right also caused the popup to clip, so just make it fill the container\n\t\t\t\tcontainerWidth = this.$clippableScrollableContainer.width();\n\t\t\t\tcontainerLeft = this.$clippableScrollableContainer.offset().left;\n\n\t\t\t\tthis.toggleClipping( false );\n\t\t\t\tthis.$element.removeClass( 'oo-ui-popupToolGroup-right' );\n\n\t\t\t\tthis.$clippable.css( {\n\t\t\t\t\tleft: -( this.$element.offset().left - containerLeft ),\n\t\t\t\t\twidth: containerWidth\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );\n\t\t\tthis.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );\n\t\t\tthis.$element.removeClass(\n\t\t\t\t'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left  oo-ui-popupToolGroup-right'\n\t\t\t);\n\t\t\tthis.setFlags( { progressive: false } );\n\t\t\tthis.toggleClipping( false );\n\t\t}\n\t}\n};\n","/**\n * ListToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.BarToolGroup BarToolGroup}). The {@link OO.ui.Tool tools} in a ListToolGroup are displayed\n * by label in a dropdown menu. The title of the tool is used as the label text. The menu itself can be configured\n * with a label, icon, indicator, header, and title.\n *\n * ListToolGroups can be configured to be expanded and collapsed. Collapsed lists will have a ‘More’ option that\n * users can select to see the full list of tools. If a collapsed toolgroup is expanded, a ‘Fewer’ option permits\n * users to collapse the list again.\n *\n * ListToolGroups are created by a {@link OO.ui.ToolGroupFactory toolgroup factory} when the toolbar is set up. The factory\n * requires the ListToolGroup's symbolic name, 'list', which is specified along with the other configurations. For more\n * information about how to add tools to a ListToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.\n *\n *     @example\n *     // Example of a ListToolGroup\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // Configure and register two tools\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         this.setActive( false );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'search';\n *     StuffTool.static.title = 'Change the world';\n *     StuffTool.prototype.onSelect = function () {\n *         this.setActive( false );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *     toolbar.setup( [\n *         {\n *             // Configurations for list toolgroup.\n *             type: 'list',\n *             label: 'ListToolGroup',\n *             icon: 'ellipsis',\n *             title: 'This is the title, displayed when user moves the mouse over the list toolgroup',\n *             header: 'This is the header',\n *             include: [ 'settings', 'stuff' ],\n *             allowCollapse: ['stuff']\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element\n *     );\n *     $( 'body' ).append( frame.$element );\n *     // Build the toolbar. This must be done after the toolbar has been appended to the document.\n *     toolbar.initialize();\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.PopupToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {Array} [allowCollapse] Allow the specified tools to be collapsed. By default, collapsible tools\n *  will only be displayed if users click the ‘More’ option displayed at the bottom of the list. If\n *  the list is expanded, a ‘Fewer’ option permits users to collapse the list again. Any tools that\n *  are included in the toolgroup, but are not designated as collapsible, will always be displayed.\n *  To open a collapsible list in its expanded state, set #expanded to 'true'.\n * @cfg {Array} [forceExpand] Expand the specified tools. All other tools will be designated as collapsible.\n *  Unless #expanded is set to true, the collapsible tools will be collapsed when the list is first opened.\n * @cfg {boolean} [expanded=false] Expand collapsible tools. This config is only relevant if tools have\n *  been designated as collapsible. When expanded is set to true, all tools in the group will be displayed\n *  when the list is first opened. Users can collapse the list with a ‘Fewer’ option at the bottom.\n */\nOO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be set before parent constructor, which calls #populate)\n\tthis.allowCollapse = config.allowCollapse;\n\tthis.forceExpand = config.forceExpand;\n\tthis.expanded = config.expanded !== undefined ? config.expanded : false;\n\tthis.collapsibleTools = [];\n\n\t// Parent constructor\n\tOO.ui.ListToolGroup.parent.call( this, toolbar, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-listToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ListToolGroup.static.name = 'list';\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ListToolGroup.prototype.populate = function () {\n\tvar i, len, allowCollapse = [];\n\n\tOO.ui.ListToolGroup.parent.prototype.populate.call( this );\n\n\t// Update the list of collapsible tools\n\tif ( this.allowCollapse !== undefined ) {\n\t\tallowCollapse = this.allowCollapse;\n\t} else if ( this.forceExpand !== undefined ) {\n\t\tallowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );\n\t}\n\n\tthis.collapsibleTools = [];\n\tfor ( i = 0, len = allowCollapse.length; i < len; i++ ) {\n\t\tif ( this.tools[ allowCollapse[ i ] ] !== undefined ) {\n\t\t\tthis.collapsibleTools.push( this.tools[ allowCollapse[ i ] ] );\n\t\t}\n\t}\n\n\t// Keep at the end, even when tools are added\n\tthis.$group.append( this.getExpandCollapseTool().$element );\n\n\tthis.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );\n\tthis.updateCollapsibleState();\n};\n\n/**\n * Get the expand/collapse tool for this group\n *\n * @return {OO.ui.Tool} Expand collapse tool\n */\nOO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {\n\tvar ExpandCollapseTool;\n\tif ( this.expandCollapseTool === undefined ) {\n\t\tExpandCollapseTool = function () {\n\t\t\tExpandCollapseTool.parent.apply( this, arguments );\n\t\t};\n\n\t\tOO.inheritClass( ExpandCollapseTool, OO.ui.Tool );\n\n\t\tExpandCollapseTool.prototype.onSelect = function () {\n\t\t\tthis.toolGroup.expanded = !this.toolGroup.expanded;\n\t\t\tthis.toolGroup.updateCollapsibleState();\n\t\t\tthis.setActive( false );\n\t\t};\n\t\tExpandCollapseTool.prototype.onUpdateState = function () {\n\t\t\t// Do nothing. Tool interface requires an implementation of this function.\n\t\t};\n\n\t\tExpandCollapseTool.static.name = 'more-fewer';\n\n\t\tthis.expandCollapseTool = new ExpandCollapseTool( this );\n\t}\n\treturn this.expandCollapseTool;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\t// Do not close the popup when the user wants to show more/fewer tools\n\tif (\n\t\t$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\t// HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which\n\t\t// hides the popup list when a tool is selected) and call ToolGroup's implementation directly.\n\t\treturn OO.ui.ListToolGroup.parent.parent.prototype.onMouseKeyUp.call( this, e );\n\t} else {\n\t\treturn OO.ui.ListToolGroup.parent.prototype.onMouseKeyUp.call( this, e );\n\t}\n};\n\nOO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {\n\tvar i, len;\n\n\tthis.getExpandCollapseTool()\n\t\t.setIcon( this.expanded ? 'collapse' : 'expand' )\n\t\t.setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );\n\n\tfor ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {\n\t\tthis.collapsibleTools[ i ].toggle( this.expanded );\n\t}\n\n\t// Re-evaluate clipping, because our height has changed\n\tthis.clip();\n};\n","/**\n * MenuToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.BarToolGroup BarToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup}). MenuToolGroups contain selectable {@link OO.ui.Tool tools},\n * which are displayed by label in a dropdown menu. The tool's title is used as the label text, and the\n * menu label is updated to reflect which tool or tools are currently selected. If no tools are selected,\n * the menu label is empty. The menu can be configured with an indicator, icon, title, and/or header.\n *\n * MenuToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar\n * is set up.\n *\n *     @example\n *     // Example of a MenuToolGroup\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'An example of a MenuToolGroup. Select a tool from the dropdown menu.' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             type: 'menu',\n *             header: 'This is the (optional) header',\n *             title: 'This is the (optional) title',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * For more information about how to add tools to a MenuToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.PopupToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuToolGroup.parent.call( this, toolbar, config );\n\n\t// Events\n\tthis.toolbar.connect( this, { updateState: 'onUpdateState' } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuToolGroup.static.name = 'menu';\n\n/* Methods */\n\n/**\n * Handle the toolbar state being updated.\n *\n * When the state changes, the title of each active item in the menu will be joined together and\n * used as a label for the group. The label will be empty if none of the items are active.\n *\n * @private\n */\nOO.ui.MenuToolGroup.prototype.onUpdateState = function () {\n\tvar name,\n\t\tlabelTexts = [];\n\n\tfor ( name in this.tools ) {\n\t\tif ( this.tools[ name ].isActive() ) {\n\t\t\tlabelTexts.push( this.tools[ name ].getTitle() );\n\t\t}\n\t}\n\n\tthis.setLabel( labelTexts.join( ', ' ) || ' ' );\n};\n","}( OO ) );\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/intro.js.txt","../src/Toolbar.js","../src/Tool.js","../src/ToolGroup.js","../src/ToolFactory.js","../src/ToolGroupFactory.js","../src/tools/PopupTool.js","../src/tools/ToolGroupTool.js","../src/toolgroups/BarToolGroup.js","../src/toolgroups/PopupToolGroup.js","../src/toolgroups/ListToolGroup.js","../src/toolgroups/MenuToolGroup.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-toolbars.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * Toolbars are complex interface components that permit users to easily access a variety\n * of {@link OO.ui.Tool tools} (e.g., formatting commands) and actions, which are additional commands that are\n * part of the toolbar, but not configured as tools.\n *\n * Individual tools are customized and then registered with a {@link OO.ui.ToolFactory tool factory}, which creates\n * the tools on demand. Each tool has a symbolic name (used when registering the tool), a title (e.g., ‘Insert\n * image’), and an icon.\n *\n * Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be {@link OO.ui.MenuToolGroup menus}\n * of tools, {@link OO.ui.ListToolGroup lists} of tools, or a single {@link OO.ui.BarToolGroup bar} of tools.\n * The arrangement and order of the toolgroups is customized when the toolbar is set up. Tools can be presented in\n * any order, but each can only appear once in the toolbar.\n *\n * The toolbar can be synchronized with the state of the external \"application\", like a text\n * editor's editing area, marking tools as active/inactive (e.g. a 'bold' tool would be shown as\n * active when the text cursor was inside bolded text) or enabled/disabled (e.g. a table caption\n * tool would be disabled while the user is not editing a table). A state change is signalled by\n * emitting the {@link #event-updateState 'updateState' event}, which calls Tools'\n * {@link OO.ui.Tool#onUpdateState onUpdateState method}.\n *\n * The following is an example of a basic toolbar.\n *\n *     @example\n *     // Example of a toolbar\n *     // Create the toolbar\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Toolbar example' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         this.setActive( false );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         this.setActive( false );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget).\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools' icons only, side-by-side.\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         },\n *         {\n *             // 'list' tool groups display both the titles and icons, in a dropdown list.\n *             type: 'list',\n *             indicator: 'down',\n *             label: 'More',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *         // Note how the tools themselves are toolgroup-agnostic - the same tool can be displayed\n *         // either in a 'list' or a 'bar'. There is a 'menu' tool group too, not showcased here,\n *         // since it's more complicated to use. (See the next example snippet on this page.)\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * The following example extends the previous one to illustrate 'menu' toolgroups and the usage of\n * {@link #event-updateState 'updateState' event}.\n *\n *     @example\n *     // Create the toolbar\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Toolbar example' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget). 'onUpdateState' is also already implemented.\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools' icons only, side-by-side.\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         },\n *         {\n *             // 'menu' tool groups display both the titles and icons, in a dropdown menu.\n *             // Menu label indicates which items are selected.\n *             type: 'menu',\n *             indicator: 'down',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * @class\n * @extends OO.ui.Element\n * @mixins OO.EventEmitter\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.ToolFactory} toolFactory Factory for creating tools\n * @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating toolgroups\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [actions] Add an actions section to the toolbar. Actions are commands that are included\n *  in the toolbar, but are not configured as tools. By default, actions are displayed on the right side of\n *  the toolbar.\n * @cfg {string} [position='top'] Whether the toolbar is positioned above ('top') or below ('bottom') content.\n */\nOO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolFactory ) && config === undefined ) {\n\t\tconfig = toolFactory;\n\t\ttoolFactory = config.toolFactory;\n\t\ttoolGroupFactory = config.toolGroupFactory;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Toolbar.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.EventEmitter.call( this );\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.toolFactory = toolFactory;\n\tthis.toolGroupFactory = toolGroupFactory;\n\tthis.groups = [];\n\tthis.tools = {};\n\tthis.position = config.position || 'top';\n\tthis.$bar = $( '<div>' );\n\tthis.$actions = $( '<div>' );\n\tthis.initialized = false;\n\tthis.narrowThreshold = null;\n\tthis.onWindowResizeHandler = this.onWindowResize.bind( this );\n\n\t// Events\n\tthis.$element\n\t\t.add( this.$bar ).add( this.$group ).add( this.$actions )\n\t\t.on( 'mousedown keydown', this.onPointerDown.bind( this ) );\n\n\t// Initialization\n\tthis.$group.addClass( 'oo-ui-toolbar-tools' );\n\tif ( config.actions ) {\n\t\tthis.$bar.append( this.$actions.addClass( 'oo-ui-toolbar-actions' ) );\n\t}\n\tthis.$bar\n\t\t.addClass( 'oo-ui-toolbar-bar' )\n\t\t.append( this.$group, '<div style=\"clear:both\"></div>' );\n\t// Possible classes: oo-ui-toolbar-position-top, oo-ui-toolbar-position-bottom\n\tthis.$element.addClass( 'oo-ui-toolbar oo-ui-toolbar-position-' + this.position ).append( this.$bar );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Toolbar, OO.ui.Element );\nOO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );\nOO.mixinClass( OO.ui.Toolbar, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event updateState\n *\n * An 'updateState' event must be emitted on the Toolbar (by calling `toolbar.emit( 'updateState' )`)\n * every time the state of the application using the toolbar changes, and an update to the state of\n * tools is required.\n *\n * @param {...Mixed} data Application-defined parameters\n */\n\n/* Methods */\n\n/**\n * Get the tool factory.\n *\n * @return {OO.ui.ToolFactory} Tool factory\n */\nOO.ui.Toolbar.prototype.getToolFactory = function () {\n\treturn this.toolFactory;\n};\n\n/**\n * Get the toolgroup factory.\n *\n * @return {OO.Factory} Toolgroup factory\n */\nOO.ui.Toolbar.prototype.getToolGroupFactory = function () {\n\treturn this.toolGroupFactory;\n};\n\n/**\n * Handles mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.Toolbar.prototype.onPointerDown = function ( e ) {\n\tvar $closestWidgetToEvent = $( e.target ).closest( '.oo-ui-widget' ),\n\t\t$closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );\n\tif ( !$closestWidgetToEvent.length || $closestWidgetToEvent[ 0 ] === $closestWidgetToToolbar[ 0 ] ) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle window resize event.\n *\n * @private\n * @param {jQuery.Event} e Window resize event\n */\nOO.ui.Toolbar.prototype.onWindowResize = function () {\n\tthis.$element.toggleClass(\n\t\t'oo-ui-toolbar-narrow',\n\t\tthis.$bar.width() <= this.getNarrowThreshold()\n\t);\n};\n\n/**\n * Get the (lazily-computed) width threshold for applying the oo-ui-toolbar-narrow\n * class.\n *\n * @private\n * @return {number} Width threshold in pixels\n */\nOO.ui.Toolbar.prototype.getNarrowThreshold = function () {\n\tif ( this.narrowThreshold === null ) {\n\t\tthis.narrowThreshold = this.$group.width() + this.$actions.width();\n\t}\n\treturn this.narrowThreshold;\n};\n\n/**\n * Sets up handles and preloads required information for the toolbar to work.\n * This must be called after it is attached to a visible document and before doing anything else.\n */\nOO.ui.Toolbar.prototype.initialize = function () {\n\tif ( !this.initialized ) {\n\t\tthis.initialized = true;\n\t\t$( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );\n\t\tthis.onWindowResize();\n\t}\n};\n\n/**\n * Set up the toolbar.\n *\n * The toolbar is set up with a list of toolgroup configurations that specify the type of\n * toolgroup ({@link OO.ui.BarToolGroup bar}, {@link OO.ui.MenuToolGroup menu}, or {@link OO.ui.ListToolGroup list})\n * to add and which tools to include, exclude, promote, or demote within that toolgroup. Please\n * see {@link OO.ui.ToolGroup toolgroups} for more information about including tools in toolgroups.\n *\n * @param {Object.<string,Array>} groups List of toolgroup configurations\n * @param {Array|string} [groups.include] Tools to include in the toolgroup\n * @param {Array|string} [groups.exclude] Tools to exclude from the toolgroup\n * @param {Array|string} [groups.promote] Tools to promote to the beginning of the toolgroup\n * @param {Array|string} [groups.demote] Tools to demote to the end of the toolgroup\n */\nOO.ui.Toolbar.prototype.setup = function ( groups ) {\n\tvar i, len, type, group,\n\t\titems = [],\n\t\tdefaultType = 'bar';\n\n\t// Cleanup previous groups\n\tthis.reset();\n\n\t// Build out new groups\n\tfor ( i = 0, len = groups.length; i < len; i++ ) {\n\t\tgroup = groups[ i ];\n\t\tif ( group.include === '*' ) {\n\t\t\t// Apply defaults to catch-all groups\n\t\t\tif ( group.type === undefined ) {\n\t\t\t\tgroup.type = 'list';\n\t\t\t}\n\t\t\tif ( group.label === undefined ) {\n\t\t\t\tgroup.label = OO.ui.msg( 'ooui-toolbar-more' );\n\t\t\t}\n\t\t}\n\t\t// Check type has been registered\n\t\ttype = this.getToolGroupFactory().lookup( group.type ) ? group.type : defaultType;\n\t\titems.push(\n\t\t\tthis.getToolGroupFactory().create( type, this, group )\n\t\t);\n\t}\n\tthis.addItems( items );\n};\n\n/**\n * Remove all tools and toolgroups from the toolbar.\n */\nOO.ui.Toolbar.prototype.reset = function () {\n\tvar i, len;\n\n\tthis.groups = [];\n\tthis.tools = {};\n\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\tthis.items[ i ].destroy();\n\t}\n\tthis.clearItems();\n};\n\n/**\n * Destroy the toolbar.\n *\n * Destroying the toolbar removes all event handlers and DOM elements that constitute the toolbar. Call\n * this method whenever you are done using a toolbar.\n */\nOO.ui.Toolbar.prototype.destroy = function () {\n\t$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );\n\tthis.reset();\n\tthis.$element.remove();\n};\n\n/**\n * Check if the tool is available.\n *\n * Available tools are ones that have not yet been added to the toolbar.\n *\n * @param {string} name Symbolic name of tool\n * @return {boolean} Tool is available\n */\nOO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {\n\treturn !this.tools[ name ];\n};\n\n/**\n * Prevent tool from being used again.\n *\n * @param {OO.ui.Tool} tool Tool to reserve\n */\nOO.ui.Toolbar.prototype.reserveTool = function ( tool ) {\n\tthis.tools[ tool.getName() ] = tool;\n};\n\n/**\n * Allow tool to be used again.\n *\n * @param {OO.ui.Tool} tool Tool to release\n */\nOO.ui.Toolbar.prototype.releaseTool = function ( tool ) {\n\tdelete this.tools[ tool.getName() ];\n};\n\n/**\n * Get accelerator label for tool.\n *\n * The OOjs UI library does not contain an accelerator system, but this is the hook for one. To\n * use an accelerator system, subclass the toolbar and override this method, which is meant to return a label\n * that describes the accelerator keys for the tool passed (by symbolic name) to the method.\n *\n * @param {string} name Symbolic name of tool\n * @return {string|undefined} Tool accelerator label if available\n */\nOO.ui.Toolbar.prototype.getToolAccelerator = function () {\n\treturn undefined;\n};\n","/**\n * Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute {@link OO.ui.Toolbar toolbars}.\n * Each tool is configured with a static name, title, and icon and is customized with the command to carry\n * out when the tool is selected. Tools must also be registered with a {@link OO.ui.ToolFactory tool factory},\n * which creates the tools on demand.\n *\n * Every Tool subclass must implement two methods:\n *\n * - {@link #onUpdateState}\n * - {@link #onSelect}\n *\n * Tools are added to toolgroups ({@link OO.ui.ListToolGroup ListToolGroup},\n * {@link OO.ui.BarToolGroup BarToolGroup}, or {@link OO.ui.MenuToolGroup MenuToolGroup}), which determine how\n * the tool is displayed in the toolbar. See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki][1].\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n * @cfg {string|Function} [title] Title text or a function that returns text. If this config is omitted, the value of\n *  the {@link #static-title static title} property is used.\n *\n *  The title is used in different ways depending on the type of toolgroup that contains the tool. The\n *  title is used as a tooltip if the tool is part of a {@link OO.ui.BarToolGroup bar} toolgroup, or as the label text if the tool is\n *  part of a {@link OO.ui.ListToolGroup list} or {@link OO.ui.MenuToolGroup menu} toolgroup.\n *\n *  For bar toolgroups, a description of the accelerator key is appended to the title if an accelerator key\n *  is associated with an action by the same name as the tool and accelerator functionality has been added to the application.\n *  To add accelerator key functionality, you must subclass OO.ui.Toolbar and override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method.\n */\nOO.ui.Tool = function OoUiTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.Tool.parent.call( this, config );\n\n\t// Properties\n\tthis.toolGroup = toolGroup;\n\tthis.toolbar = this.toolGroup.getToolbar();\n\tthis.active = false;\n\tthis.$title = $( '<span>' );\n\tthis.$accel = $( '<span>' );\n\tthis.$link = $( '<a>' );\n\tthis.title = null;\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );\n\n\t// Events\n\tthis.toolbar.connect( this, { updateState: 'onUpdateState' } );\n\n\t// Initialization\n\tthis.$title.addClass( 'oo-ui-tool-title' );\n\tthis.$accel\n\t\t.addClass( 'oo-ui-tool-accel' )\n\t\t.prop( {\n\t\t\t// This may need to be changed if the key names are ever localized,\n\t\t\t// but for now they are essentially written in English\n\t\t\tdir: 'ltr',\n\t\t\tlang: 'en'\n\t\t} );\n\tthis.$link\n\t\t.addClass( 'oo-ui-tool-link' )\n\t\t.append( this.$icon, this.$title, this.$accel )\n\t\t.attr( 'role', 'button' );\n\tthis.$element\n\t\t.data( 'oo-ui-tool', this )\n\t\t.addClass( 'oo-ui-tool' )\n\t\t.addClass( 'oo-ui-tool-name-' + this.constructor.static.name.replace( /^([^/]+)\\/([^/]+).*$/, '$1-$2' ) )\n\t\t.toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )\n\t\t.append( this.$link );\n\tthis.setTitle( config.title || this.constructor.static.title );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.Tool, OO.ui.Widget );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.Tool, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.Tool.static.tagName = 'span';\n\n/**\n * Symbolic name of tool.\n *\n * The symbolic name is used internally to register the tool with a {@link OO.ui.ToolFactory ToolFactory}. It can\n * also be used when adding tools to toolgroups.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Tool.static.name = '';\n\n/**\n * Symbolic name of the group.\n *\n * The group name is used to associate tools with each other so that they can be selected later by\n * a {@link OO.ui.ToolGroup toolgroup}.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.Tool.static.group = '';\n\n/**\n * Tool title text or a function that returns title text. The value of the static property is overridden if the #title config option is used.\n *\n * @abstract\n * @static\n * @inheritable\n * @property {string|Function}\n */\nOO.ui.Tool.static.title = '';\n\n/**\n * Display both icon and label when the tool is used in a {@link OO.ui.BarToolGroup bar} toolgroup.\n * Normally only the icon is displayed, or only the label if no icon is given.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.Tool.static.displayBothIconAndLabel = false;\n\n/**\n * Add tool to catch-all groups automatically.\n *\n * A catch-all group, which contains all tools that do not currently belong to a toolgroup,\n * can be included in a toolgroup using the wildcard selector, an asterisk (*).\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.Tool.static.autoAddToCatchall = true;\n\n/**\n * Add tool to named groups automatically.\n *\n * By default, tools that are configured with a static ‘group’ property are added\n * to that group and will be selected when the symbolic name of the group is specified (e.g., when\n * toolgroups include tools by group name).\n *\n * @static\n * @property {boolean}\n * @inheritable\n */\nOO.ui.Tool.static.autoAddToGroup = true;\n\n/**\n * Check if this tool is compatible with given data.\n *\n * This is a stub that can be overridden to provide support for filtering tools based on an\n * arbitrary piece of information  (e.g., where the cursor is in a document). The implementation\n * must also call this method so that the compatibility check can be performed.\n *\n * @static\n * @inheritable\n * @param {Mixed} data Data to check\n * @return {boolean} Tool can be used with data\n */\nOO.ui.Tool.static.isCompatibleWith = function () {\n\treturn false;\n};\n\n/* Methods */\n\n/**\n * Handle the toolbar state being updated. This method is called when the\n * {@link OO.ui.Toolbar#event-updateState 'updateState' event} is emitted on the\n * {@link OO.ui.Toolbar Toolbar} that uses this tool, and should set the state of this tool\n * depending on application state (usually by calling #setDisabled to enable or disable the tool,\n * or #setActive to mark is as currently in-use or not).\n *\n * This is an abstract method that must be overridden in a concrete subclass.\n *\n * @method\n * @protected\n * @abstract\n */\nOO.ui.Tool.prototype.onUpdateState = null;\n\n/**\n * Handle the tool being selected. This method is called when the user triggers this tool,\n * usually by clicking on its label/icon.\n *\n * This is an abstract method that must be overridden in a concrete subclass.\n *\n * @method\n * @protected\n * @abstract\n */\nOO.ui.Tool.prototype.onSelect = null;\n\n/**\n * Check if the tool is active.\n *\n * Tools become active when their #onSelect or #onUpdateState handlers change them to appear pressed\n * with the #setActive method. Additional CSS is applied to the tool to reflect the active state.\n *\n * @return {boolean} Tool is active\n */\nOO.ui.Tool.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Make the tool appear active or inactive.\n *\n * This method should be called within #onSelect or #onUpdateState event handlers to make the tool\n * appear pressed or not.\n *\n * @param {boolean} state Make tool appear active\n */\nOO.ui.Tool.prototype.setActive = function ( state ) {\n\tthis.active = !!state;\n\tif ( this.active ) {\n\t\tthis.$element.addClass( 'oo-ui-tool-active' );\n\t\tthis.setFlags( { progressive: true } );\n\t} else {\n\t\tthis.$element.removeClass( 'oo-ui-tool-active' );\n\t\tthis.setFlags( { progressive: false } );\n\t}\n};\n\n/**\n * Set the tool #title.\n *\n * @param {string|Function} title Title text or a function that returns text\n * @chainable\n */\nOO.ui.Tool.prototype.setTitle = function ( title ) {\n\tthis.title = OO.ui.resolveMsg( title );\n\tthis.updateTitle();\n\treturn this;\n};\n\n/**\n * Get the tool #title.\n *\n * @return {string} Title text\n */\nOO.ui.Tool.prototype.getTitle = function () {\n\treturn this.title;\n};\n\n/**\n * Get the tool's symbolic name.\n *\n * @return {string} Symbolic name of tool\n */\nOO.ui.Tool.prototype.getName = function () {\n\treturn this.constructor.static.name;\n};\n\n/**\n * Update the title.\n */\nOO.ui.Tool.prototype.updateTitle = function () {\n\tvar titleTooltips = this.toolGroup.constructor.static.titleTooltips,\n\t\taccelTooltips = this.toolGroup.constructor.static.accelTooltips,\n\t\taccel = this.toolbar.getToolAccelerator( this.constructor.static.name ),\n\t\ttooltipParts = [];\n\n\tthis.$title.text( this.title );\n\tthis.$accel.text( accel );\n\n\tif ( titleTooltips && typeof this.title === 'string' && this.title.length ) {\n\t\ttooltipParts.push( this.title );\n\t}\n\tif ( accelTooltips && typeof accel === 'string' && accel.length ) {\n\t\ttooltipParts.push( accel );\n\t}\n\tif ( tooltipParts.length ) {\n\t\tthis.$link.attr( 'title', tooltipParts.join( ' ' ) );\n\t} else {\n\t\tthis.$link.removeAttr( 'title' );\n\t}\n};\n\n/**\n * Destroy tool.\n *\n * Destroying the tool removes all event handlers and the tool’s DOM elements.\n * Call this method whenever you are done using a tool.\n */\nOO.ui.Tool.prototype.destroy = function () {\n\tthis.toolbar.disconnect( this );\n\tthis.$element.remove();\n};\n","/**\n * ToolGroups are collections of {@link OO.ui.Tool tools} that are used in a {@link OO.ui.Toolbar toolbar}.\n * The type of toolgroup ({@link OO.ui.ListToolGroup list}, {@link OO.ui.BarToolGroup bar}, or {@link OO.ui.MenuToolGroup menu})\n * to which a tool belongs determines how the tool is arranged and displayed in the toolbar. Toolgroups\n * themselves are created on demand with a {@link OO.ui.ToolGroupFactory toolgroup factory}.\n *\n * Toolgroups can contain individual tools, groups of tools, or all available tools, as specified\n * using the `include` config option. See OO.ui.ToolFactory#extract on documentation of the format.\n * The options `exclude`, `promote`, and `demote` support the same formats.\n *\n * See {@link OO.ui.Toolbar toolbars} for a full example. For more information about toolbars in general,\n * please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {Array|string} [include] List of tools to include in the toolgroup, see above.\n * @cfg {Array|string} [exclude] List of tools to exclude from the toolgroup, see above.\n * @cfg {Array|string} [promote] List of tools to promote to the beginning of the toolgroup, see above.\n * @cfg {Array|string} [demote] List of tools to demote to the end of the toolgroup, see above.\n *  This setting is particularly useful when tools have been added to the toolgroup\n *  en masse (e.g., via the catch-all selector).\n */\nOO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToolGroup.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.toolbar = toolbar;\n\tthis.tools = {};\n\tthis.pressed = null;\n\tthis.autoDisabled = false;\n\tthis.include = config.include || [];\n\tthis.exclude = config.exclude || [];\n\tthis.promote = config.promote || [];\n\tthis.demote = config.demote || [];\n\tthis.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this );\n\n\t// Events\n\tthis.$element.on( {\n\t\tmousedown: this.onMouseKeyDown.bind( this ),\n\t\tmouseup: this.onMouseKeyUp.bind( this ),\n\t\tkeydown: this.onMouseKeyDown.bind( this ),\n\t\tkeyup: this.onMouseKeyUp.bind( this ),\n\t\tfocus: this.onMouseOverFocus.bind( this ),\n\t\tblur: this.onMouseOutBlur.bind( this ),\n\t\tmouseover: this.onMouseOverFocus.bind( this ),\n\t\tmouseout: this.onMouseOutBlur.bind( this )\n\t} );\n\tthis.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );\n\tthis.aggregate( { disable: 'itemDisable' } );\n\tthis.connect( this, { itemDisable: 'updateDisabled' } );\n\n\t// Initialization\n\tthis.$group.addClass( 'oo-ui-toolGroup-tools' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toolGroup' )\n\t\t.append( this.$group );\n\tthis.populate();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );\nOO.mixinClass( OO.ui.ToolGroup, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event update\n */\n\n/* Static Properties */\n\n/**\n * Show labels in tooltips.\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.titleTooltips = false;\n\n/**\n * Show acceleration labels in tooltips.\n *\n * Note: The OOjs UI library does not include an accelerator system, but does contain\n * a hook for one. To use an accelerator system, subclass the {@link OO.ui.Toolbar toolbar} and\n * override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method, which is\n * meant to return a label that describes the accelerator keys for a given tool (e.g., 'Ctrl + M').\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.accelTooltips = false;\n\n/**\n * Automatically disable the toolgroup when all tools are disabled\n *\n * @static\n * @inheritable\n * @property {boolean}\n */\nOO.ui.ToolGroup.static.autoDisable = true;\n\n/**\n * @abstract\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.ToolGroup.static.name = null;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ToolGroup.prototype.isDisabled = function () {\n\treturn this.autoDisabled || OO.ui.ToolGroup.parent.prototype.isDisabled.apply( this, arguments );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToolGroup.prototype.updateDisabled = function () {\n\tvar i, item, allDisabled = true;\n\n\tif ( this.constructor.static.autoDisable ) {\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\t\t\tif ( !item.isDisabled() ) {\n\t\t\t\tallDisabled = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.autoDisabled = allDisabled;\n\t}\n\tOO.ui.ToolGroup.parent.prototype.updateDisabled.apply( this, arguments );\n};\n\n/**\n * Handle mouse down and key down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down or key down event\n */\nOO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.pressed = this.findTargetTool( e );\n\t\tif ( this.pressed ) {\n\t\t\tthis.pressed.setActive( true );\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * Handle captured mouse up and key up events.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {\n\tthis.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );\n\tthis.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );\n\t// onMouseKeyUp may be called a second time, depending on where the mouse is when the button is\n\t// released, but since `this.pressed` will no longer be true, the second call will be ignored.\n\tthis.onMouseKeyUp( e );\n};\n\n/**\n * Handle mouse up and key up events.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif (\n\t\t!this.isDisabled() && this.pressed && this.pressed === tool &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.pressed.onSelect();\n\t\tthis.pressed = null;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\tthis.pressed = null;\n};\n\n/**\n * Handle mouse over and focus events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse over or focus event\n */\nOO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif ( this.pressed && this.pressed === tool ) {\n\t\tthis.pressed.setActive( true );\n\t}\n};\n\n/**\n * Handle mouse out and blur events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse out or blur event\n */\nOO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {\n\tvar tool = this.findTargetTool( e );\n\n\tif ( this.pressed && this.pressed === tool ) {\n\t\tthis.pressed.setActive( false );\n\t}\n};\n\n/**\n * Get the closest tool to a jQuery.Event.\n *\n * Only tool links are considered, which prevents other elements in the tool such as popups from\n * triggering tool group interactions.\n *\n * @private\n * @param {jQuery.Event} e\n * @return {OO.ui.Tool|null} Tool, `null` if none was found\n */\nOO.ui.ToolGroup.prototype.findTargetTool = function ( e ) {\n\tvar tool,\n\t\t$item = $( e.target ).closest( '.oo-ui-tool-link' );\n\n\tif ( $item.length ) {\n\t\ttool = $item.parent().data( 'oo-ui-tool' );\n\t}\n\n\treturn tool && !tool.isDisabled() ? tool : null;\n};\n\n/**\n * Handle tool registry register events.\n *\n * If a tool is registered after the group is created, we must repopulate the list to account for:\n *\n * - a tool being added that may be included\n * - a tool already included being overridden\n *\n * @protected\n * @param {string} name Symbolic name of tool\n */\nOO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {\n\tthis.populate();\n};\n\n/**\n * Get the toolbar that contains the toolgroup.\n *\n * @return {OO.ui.Toolbar} Toolbar that contains the toolgroup\n */\nOO.ui.ToolGroup.prototype.getToolbar = function () {\n\treturn this.toolbar;\n};\n\n/**\n * Add and remove tools based on configuration.\n */\nOO.ui.ToolGroup.prototype.populate = function () {\n\tvar i, len, name, tool,\n\t\ttoolFactory = this.toolbar.getToolFactory(),\n\t\tnames = {},\n\t\tadd = [],\n\t\tremove = [],\n\t\tlist = this.toolbar.getToolFactory().getTools(\n\t\t\tthis.include, this.exclude, this.promote, this.demote\n\t\t);\n\n\t// Build a list of needed tools\n\tfor ( i = 0, len = list.length; i < len; i++ ) {\n\t\tname = list[ i ];\n\t\tif (\n\t\t\t// Tool exists\n\t\t\ttoolFactory.lookup( name ) &&\n\t\t\t// Tool is available or is already in this group\n\t\t\t( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )\n\t\t) {\n\t\t\t// Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before\n\t\t\t// creating it, but we can't call reserveTool() yet because we haven't created the tool.\n\t\t\tthis.toolbar.tools[ name ] = true;\n\t\t\ttool = this.tools[ name ];\n\t\t\tif ( !tool ) {\n\t\t\t\t// Auto-initialize tools on first use\n\t\t\t\tthis.tools[ name ] = tool = toolFactory.create( name, this );\n\t\t\t\ttool.updateTitle();\n\t\t\t}\n\t\t\tthis.toolbar.reserveTool( tool );\n\t\t\tadd.push( tool );\n\t\t\tnames[ name ] = true;\n\t\t}\n\t}\n\t// Remove tools that are no longer needed\n\tfor ( name in this.tools ) {\n\t\tif ( !names[ name ] ) {\n\t\t\tthis.tools[ name ].destroy();\n\t\t\tthis.toolbar.releaseTool( this.tools[ name ] );\n\t\t\tremove.push( this.tools[ name ] );\n\t\t\tdelete this.tools[ name ];\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeItems( remove );\n\t}\n\t// Update emptiness state\n\tif ( add.length ) {\n\t\tthis.$element.removeClass( 'oo-ui-toolGroup-empty' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-toolGroup-empty' );\n\t}\n\t// Re-add tools (moving existing ones to new locations)\n\tthis.addItems( add );\n\t// Disabled state may depend on items\n\tthis.updateDisabled();\n};\n\n/**\n * Destroy toolgroup.\n */\nOO.ui.ToolGroup.prototype.destroy = function () {\n\tvar name;\n\n\tthis.clearItems();\n\tthis.toolbar.getToolFactory().disconnect( this );\n\tfor ( name in this.tools ) {\n\t\tthis.toolbar.releaseTool( this.tools[ name ] );\n\t\tthis.tools[ name ].disconnect( this ).destroy();\n\t\tdelete this.tools[ name ];\n\t}\n\tthis.$element.remove();\n};\n","/**\n * A ToolFactory creates tools on demand. All tools ({@link OO.ui.Tool Tools}, {@link OO.ui.PopupTool PopupTools},\n * and {@link OO.ui.ToolGroupTool ToolGroupTools}) must be registered with a tool factory. Tools are\n * registered by their symbolic name. See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.Factory\n * @constructor\n */\nOO.ui.ToolFactory = function OoUiToolFactory() {\n\t// Parent constructor\n\tOO.ui.ToolFactory.parent.call( this );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolFactory, OO.Factory );\n\n/* Methods */\n\n/**\n * Get tools from the factory\n *\n * @param {Array|string} [include] Included tools, see #extract for format\n * @param {Array|string} [exclude] Excluded tools, see #extract for format\n * @param {Array|string} [promote] Promoted tools, see #extract for format\n * @param {Array|string} [demote] Demoted tools, see #extract for format\n * @return {string[]} List of tools\n */\nOO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {\n\tvar i, len, included, promoted, demoted,\n\t\tauto = [],\n\t\tused = {};\n\n\t// Collect included and not excluded tools\n\tincluded = OO.simpleArrayDifference( this.extract( include ), this.extract( exclude ) );\n\n\t// Promotion\n\tpromoted = this.extract( promote, used );\n\tdemoted = this.extract( demote, used );\n\n\t// Auto\n\tfor ( i = 0, len = included.length; i < len; i++ ) {\n\t\tif ( !used[ included[ i ] ] ) {\n\t\t\tauto.push( included[ i ] );\n\t\t}\n\t}\n\n\treturn promoted.concat( auto ).concat( demoted );\n};\n\n/**\n * Get a flat list of names from a list of names or groups.\n *\n * Normally, `collection` is an array of tool specifications. Tools can be specified in the\n * following ways:\n *\n * - To include an individual tool, use the symbolic name: `{ name: 'tool-name' }` or `'tool-name'`.\n * - To include all tools in a group, use the group name: `{ group: 'group-name' }`. (To assign the\n *   tool to a group, use OO.ui.Tool.static.group.)\n *\n * Alternatively, to include all tools that are not yet assigned to any other toolgroup, use the\n * catch-all selector `'*'`.\n *\n * If `used` is passed, tool names that appear as properties in this object will be considered\n * already assigned, and will not be returned even if specified otherwise. The tool names extracted\n * by this function call will be added as new properties in the object.\n *\n * @private\n * @param {Array|string} collection List of tools, see above\n * @param {Object} [used] Object containing information about used tools, see above\n * @return {string[]} List of extracted tool names\n */\nOO.ui.ToolFactory.prototype.extract = function ( collection, used ) {\n\tvar i, len, item, name, tool,\n\t\tnames = [];\n\n\tcollection = !Array.isArray( collection ) ? [ collection ] : collection;\n\n\tfor ( i = 0, len = collection.length; i < len; i++ ) {\n\t\titem = collection[ i ];\n\t\tif ( item === '*' ) {\n\t\t\tfor ( name in this.registry ) {\n\t\t\t\ttool = this.registry[ name ];\n\t\t\t\tif (\n\t\t\t\t\t// Only add tools by group name when auto-add is enabled\n\t\t\t\t\ttool.static.autoAddToCatchall &&\n\t\t\t\t\t// Exclude already used tools\n\t\t\t\t\t( !used || !used[ name ] )\n\t\t\t\t) {\n\t\t\t\t\tnames.push( name );\n\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\tused[ name ] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Allow plain strings as shorthand for named tools\n\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\titem = { name: item };\n\t\t\t}\n\t\t\tif ( OO.isPlainObject( item ) ) {\n\t\t\t\tif ( item.group ) {\n\t\t\t\t\tfor ( name in this.registry ) {\n\t\t\t\t\t\ttool = this.registry[ name ];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t// Include tools with matching group\n\t\t\t\t\t\t\ttool.static.group === item.group &&\n\t\t\t\t\t\t\t// Only add tools by group name when auto-add is enabled\n\t\t\t\t\t\t\ttool.static.autoAddToGroup &&\n\t\t\t\t\t\t\t// Exclude already used tools\n\t\t\t\t\t\t\t( !used || !used[ name ] )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnames.push( name );\n\t\t\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\t\t\tused[ name ] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t// Include tools with matching name and exclude already used tools\n\t\t\t\t} else if ( item.name && ( !used || !used[ item.name ] ) ) {\n\t\t\t\t\tnames.push( item.name );\n\t\t\t\t\tif ( used ) {\n\t\t\t\t\t\tused[ item.name ] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn names;\n};\n","/**\n * ToolGroupFactories create {@link OO.ui.ToolGroup toolgroups} on demand. The toolgroup classes must\n * specify a symbolic name and be registered with the factory. The following classes are registered by\n * default:\n *\n * - {@link OO.ui.BarToolGroup BarToolGroups} (‘bar’)\n * - {@link OO.ui.MenuToolGroup MenuToolGroups} (‘menu’)\n * - {@link OO.ui.ListToolGroup ListToolGroups} (‘list’)\n *\n * See {@link OO.ui.Toolbar toolbars} for an example.\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.Factory\n * @constructor\n */\nOO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {\n\tvar i, l, defaultClasses;\n\t// Parent constructor\n\tOO.Factory.call( this );\n\n\tdefaultClasses = this.constructor.static.getDefaultClasses();\n\n\t// Register default toolgroups\n\tfor ( i = 0, l = defaultClasses.length; i < l; i++ ) {\n\t\tthis.register( defaultClasses[ i ] );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroupFactory, OO.Factory );\n\n/* Static Methods */\n\n/**\n * Get a default set of classes to be registered on construction.\n *\n * @return {Function[]} Default classes\n */\nOO.ui.ToolGroupFactory.static.getDefaultClasses = function () {\n\treturn [\n\t\tOO.ui.BarToolGroup,\n\t\tOO.ui.ListToolGroup,\n\t\tOO.ui.MenuToolGroup\n\t];\n};\n","/**\n * Popup tools open a popup window when they are selected from the {@link OO.ui.Toolbar toolbar}. Each popup tool is configured\n * with a static name, title, and icon, as well with as any popup configurations. Unlike other tools, popup tools do not require that developers specify\n * an #onSelect or #onUpdateState method, as these methods have been implemented already.\n *\n *     // Example of a popup tool. When selected, a popup tool displays\n *     // a popup window.\n *     function HelpTool( toolGroup, config ) {\n *        OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *            padded: true,\n *            label: 'Help',\n *            head: true\n *        } }, config ) );\n *        this.popup.$body.append( '<p>I am helpful!</p>' );\n *     };\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n * For an example of a toolbar that contains a popup tool, see {@link OO.ui.Toolbar toolbars}. For more information about\n * toolbars in genreral, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @abstract\n * @class\n * @extends OO.ui.Tool\n * @mixins OO.ui.mixin.PopupElement\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n */\nOO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Parent constructor\n\tOO.ui.PopupTool.parent.call( this, toolGroup, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\t// Initialization\n\tthis.popup.setPosition( toolGroup.getToolbar().position === 'bottom' ? 'above' : 'below' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupTool' )\n\t\t.append( this.popup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );\nOO.mixinClass( OO.ui.PopupTool, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Handle the tool being selected.\n *\n * @inheritdoc\n */\nOO.ui.PopupTool.prototype.onSelect = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.popup.toggle();\n\t}\n\tthis.setActive( false );\n\treturn false;\n};\n\n/**\n * Handle the toolbar state being updated.\n *\n * @inheritdoc\n */\nOO.ui.PopupTool.prototype.onUpdateState = function () {\n\tthis.setActive( false );\n};\n","/**\n * A ToolGroupTool is a special sort of tool that can contain other {@link OO.ui.Tool tools}\n * and {@link OO.ui.ToolGroup toolgroups}. The ToolGroupTool was specifically designed to be used\n * inside a {@link OO.ui.BarToolGroup bar} toolgroup to provide access to additional tools from\n * the bar item. Included tools will be displayed in a dropdown {@link OO.ui.ListToolGroup list}\n * when the ToolGroupTool is selected.\n *\n *     // Example: ToolGroupTool with two nested tools, 'setting1' and 'setting2', defined elsewhere.\n *\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     };\n *     OO.inheritClass( SettingsTool, OO.ui.ToolGroupTool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.static.groupConfig = {\n *         icon: 'settings',\n *         label: 'ToolGroupTool',\n *         include: [  'setting1', 'setting2'  ]\n *     };\n *     toolFactory.register( SettingsTool );\n *\n * For more information, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * Please note that this implementation is subject to change per [T74159] [2].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars#ToolGroupTool\n * [2]: https://phabricator.wikimedia.org/T74159\n *\n * @abstract\n * @class\n * @extends OO.ui.Tool\n *\n * @constructor\n * @param {OO.ui.ToolGroup} toolGroup\n * @param {Object} [config] Configuration options\n */\nOO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolGroup ) && config === undefined ) {\n\t\tconfig = toolGroup;\n\t\ttoolGroup = config.toolGroup;\n\t}\n\n\t// Parent constructor\n\tOO.ui.ToolGroupTool.parent.call( this, toolGroup, config );\n\n\t// Properties\n\tthis.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );\n\n\t// Events\n\tthis.innerToolGroup.connect( this, { disable: 'onToolGroupDisable' } );\n\n\t// Initialization\n\tthis.$link.remove();\n\tthis.$element\n\t\t.addClass( 'oo-ui-toolGroupTool' )\n\t\t.append( this.innerToolGroup.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );\n\n/* Static Properties */\n\n/**\n * Toolgroup configuration.\n *\n * The toolgroup configuration consists of the tools to include, as well as an icon and label\n * to use for the bar item. Tools can be included by symbolic name, group, or with the\n * wildcard selector. Please see {@link OO.ui.ToolGroup toolgroup} for more information.\n *\n * @property {Object.<string,Array>}\n */\nOO.ui.ToolGroupTool.static.groupConfig = {};\n\n/* Methods */\n\n/**\n * Handle the tool being selected.\n *\n * @inheritdoc\n */\nOO.ui.ToolGroupTool.prototype.onSelect = function () {\n\tthis.innerToolGroup.setActive( !this.innerToolGroup.active );\n\treturn false;\n};\n\n/**\n * Synchronize disabledness state of the tool with the inner toolgroup.\n *\n * @private\n * @param {boolean} disabled Element is disabled\n */\nOO.ui.ToolGroupTool.prototype.onToolGroupDisable = function ( disabled ) {\n\tthis.setDisabled( disabled );\n};\n\n/**\n * Handle the toolbar state being updated.\n *\n * @inheritdoc\n */\nOO.ui.ToolGroupTool.prototype.onUpdateState = function () {\n\tthis.setActive( false );\n};\n\n/**\n * Build a {@link OO.ui.ToolGroup toolgroup} from the specified configuration.\n *\n * @param {Object.<string,Array>} group Toolgroup configuration. Please see {@link OO.ui.ToolGroup toolgroup} for\n *  more information.\n * @return {OO.ui.ListToolGroup}\n */\nOO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {\n\tif ( group.include === '*' ) {\n\t\t// Apply defaults to catch-all groups\n\t\tif ( group.label === undefined ) {\n\t\t\tgroup.label = OO.ui.msg( 'ooui-toolbar-more' );\n\t\t}\n\t}\n\n\treturn this.toolbar.getToolGroupFactory().create( 'list', this.toolbar, group );\n};\n","/**\n * BarToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup}). The {@link OO.ui.Tool tools} in a BarToolGroup are\n * displayed by icon in a single row. The title of the tool is displayed when users move the mouse over\n * the tool.\n *\n * BarToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar is\n * set up.\n *\n *     @example\n *     // Example of a BarToolGroup with two tools\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'Example of a BarToolGroup with two tools.' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     // Create a class inheriting from OO.ui.Tool\n *     function SearchTool() {\n *         SearchTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SearchTool, OO.ui.Tool );\n *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one\n *     // of 'icon' and 'title' (displayed icon and text).\n *     SearchTool.static.name = 'search';\n *     SearchTool.static.icon = 'search';\n *     SearchTool.static.title = 'Search...';\n *     // Defines the action that will happen when this tool is selected (clicked).\n *     SearchTool.prototype.onSelect = function () {\n *         $area.text( 'Search tool clicked!' );\n *         // Never display this tool as \"active\" (selected).\n *         this.setActive( false );\n *     };\n *     SearchTool.prototype.onUpdateState = function () {};\n *     // Make this tool available in our toolFactory and thus our toolbar\n *     toolFactory.register( SearchTool );\n *\n *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a\n *     // little popup window (a PopupWidget).\n *     function HelpTool( toolGroup, config ) {\n *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {\n *             padded: true,\n *             label: 'Help',\n *             head: true\n *         } }, config ) );\n *         this.popup.$body.append( '<p>I am helpful!</p>' );\n *     }\n *     OO.inheritClass( HelpTool, OO.ui.PopupTool );\n *     HelpTool.static.name = 'help';\n *     HelpTool.static.icon = 'help';\n *     HelpTool.static.title = 'Help';\n *     toolFactory.register( HelpTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             // 'bar' tool groups display tools by icon only\n *             type: 'bar',\n *             include: [ 'search', 'help' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *\n * For more information about how to add tools to a bar tool group, please see {@link OO.ui.ToolGroup toolgroup}.\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.ToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n */\nOO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Parent constructor\n\tOO.ui.BarToolGroup.parent.call( this, toolbar, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-barToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BarToolGroup, OO.ui.ToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.titleTooltips = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.accelTooltips = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.BarToolGroup.static.name = 'bar';\n","/**\n * PopupToolGroup is an abstract base class used by both {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup} to provide a popup--an overlaid menu or list of tools with an\n * optional icon and label. This class can be used for other base classes that also use this functionality.\n *\n * @abstract\n * @class\n * @extends OO.ui.ToolGroup\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.ClippableElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {string} [header] Text to display at the top of the popup\n */\nOO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tindicator: config.indicator === undefined ? ( toolbar.position === 'bottom' ? 'up' : 'down' ) : config.indicator\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.PopupToolGroup.parent.call( this, toolbar, config );\n\n\t// Properties\n\tthis.active = false;\n\tthis.dragging = false;\n\tthis.onBlurHandler = this.onBlur.bind( this );\n\tthis.$handle = $( '<span>' );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );\n\n\t// Events\n\tthis.$handle.on( {\n\t\tkeydown: this.onHandleMouseKeyDown.bind( this ),\n\t\tkeyup: this.onHandleMouseKeyUp.bind( this ),\n\t\tmousedown: this.onHandleMouseKeyDown.bind( this ),\n\t\tmouseup: this.onHandleMouseKeyUp.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$handle\n\t\t.addClass( 'oo-ui-popupToolGroup-handle' )\n\t\t.attr( 'role', 'button' )\n\t\t.append( this.$icon, this.$label, this.$indicator );\n\t// If the pop-up should have a header, add it to the top of the toolGroup.\n\t// Note: If this feature is useful for other widgets, we could abstract it into an\n\t// OO.ui.HeaderedElement mixin constructor.\n\tif ( config.header !== undefined ) {\n\t\tthis.$group\n\t\t\t.prepend( $( '<span>' )\n\t\t\t\t.addClass( 'oo-ui-popupToolGroup-header' )\n\t\t\t\t.text( config.header )\n\t\t\t);\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-popupToolGroup' )\n\t\t.prepend( this.$handle );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.ClippableElement );\nOO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupToolGroup.prototype.setDisabled = function () {\n\t// Parent method\n\tOO.ui.PopupToolGroup.parent.prototype.setDisabled.apply( this, arguments );\n\n\tif ( this.isDisabled() && this.isElementAttached() ) {\n\t\tthis.setActive( false );\n\t}\n};\n\n/**\n * Handle focus being lost.\n *\n * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.\n *\n * @protected\n * @param {MouseEvent|KeyboardEvent} e Mouse up or key up event\n */\nOO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {\n\t// Only deactivate when clicking outside the dropdown element\n\tif ( $( e.target ).closest( '.oo-ui-popupToolGroup' )[ 0 ] !== this.$element[ 0 ] ) {\n\t\tthis.setActive( false );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\t// Only close toolgroup when a tool was actually selected\n\tif (\n\t\t!this.isDisabled() && this.pressed && this.pressed === this.findTargetTool( e ) &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.setActive( false );\n\t}\n\treturn OO.ui.PopupToolGroup.parent.prototype.onMouseKeyUp.call( this, e );\n};\n\n/**\n * Handle mouse up and key up events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse up or key up event\n */\nOO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle mouse down and key down events.\n *\n * @protected\n * @param {jQuery.Event} e Mouse down or key down event\n */\nOO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.setActive( !this.active );\n\t\treturn false;\n\t}\n};\n\n/**\n * Switch into 'active' mode.\n *\n * When active, the popup is visible. A mouseup event anywhere in the document will trigger\n * deactivation.\n *\n * @param {boolean} value The active state to set\n */\nOO.ui.PopupToolGroup.prototype.setActive = function ( value ) {\n\tvar containerWidth, containerLeft;\n\tvalue = !!value;\n\tif ( this.active !== value ) {\n\t\tthis.active = value;\n\t\tif ( value ) {\n\t\t\tthis.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );\n\t\t\tthis.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );\n\n\t\t\tthis.$clippable.css( 'left', '' );\n\t\t\t// Try anchoring the popup to the left first\n\t\t\tthis.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );\n\t\t\tthis.setFlags( { progressive: true } );\n\t\t\tthis.toggleClipping( true );\n\t\t\tif ( this.isClippedHorizontally() ) {\n\t\t\t\t// Anchoring to the left caused the popup to clip, so anchor it to the right instead\n\t\t\t\tthis.toggleClipping( false );\n\t\t\t\tthis.$element\n\t\t\t\t\t.removeClass( 'oo-ui-popupToolGroup-left' )\n\t\t\t\t\t.addClass( 'oo-ui-popupToolGroup-right' );\n\t\t\t\tthis.toggleClipping( true );\n\t\t\t}\n\t\t\tif ( this.isClippedHorizontally() ) {\n\t\t\t\t// Anchoring to the right also caused the popup to clip, so just make it fill the container\n\t\t\t\tcontainerWidth = this.$clippableScrollableContainer.width();\n\t\t\t\tcontainerLeft = this.$clippableScrollableContainer[ 0 ] === document.documentElement ?\n\t\t\t\t\t0 :\n\t\t\t\t\tthis.$clippableScrollableContainer.offset().left;\n\n\t\t\t\tthis.toggleClipping( false );\n\t\t\t\tthis.$element.removeClass( 'oo-ui-popupToolGroup-right' );\n\n\t\t\t\tthis.$clippable.css( {\n\t\t\t\t\tleft: -( this.$element.offset().left - containerLeft ),\n\t\t\t\t\twidth: containerWidth\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );\n\t\t\tthis.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );\n\t\t\tthis.$element.removeClass(\n\t\t\t\t'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left  oo-ui-popupToolGroup-right'\n\t\t\t);\n\t\t\tthis.setFlags( { progressive: false } );\n\t\t\tthis.toggleClipping( false );\n\t\t}\n\t}\n};\n","/**\n * ListToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}\n * and {@link OO.ui.BarToolGroup BarToolGroup}). The {@link OO.ui.Tool tools} in a ListToolGroup are displayed\n * by label in a dropdown menu. The title of the tool is used as the label text. The menu itself can be configured\n * with a label, icon, indicator, header, and title.\n *\n * ListToolGroups can be configured to be expanded and collapsed. Collapsed lists will have a ‘More’ option that\n * users can select to see the full list of tools. If a collapsed toolgroup is expanded, a ‘Fewer’ option permits\n * users to collapse the list again.\n *\n * ListToolGroups are created by a {@link OO.ui.ToolGroupFactory toolgroup factory} when the toolbar is set up. The factory\n * requires the ListToolGroup's symbolic name, 'list', which is specified along with the other configurations. For more\n * information about how to add tools to a ListToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.\n *\n *     @example\n *     // Example of a ListToolGroup\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // Configure and register two tools\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         this.setActive( false );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *     // Register two more tools, nothing interesting here\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'search';\n *     StuffTool.static.title = 'Change the world';\n *     StuffTool.prototype.onSelect = function () {\n *         this.setActive( false );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *     toolbar.setup( [\n *         {\n *             // Configurations for list toolgroup.\n *             type: 'list',\n *             label: 'ListToolGroup',\n *             icon: 'ellipsis',\n *             title: 'This is the title, displayed when user moves the mouse over the list toolgroup',\n *             header: 'This is the header',\n *             include: [ 'settings', 'stuff' ],\n *             allowCollapse: ['stuff']\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element\n *     );\n *     $( 'body' ).append( frame.$element );\n *     // Build the toolbar. This must be done after the toolbar has been appended to the document.\n *     toolbar.initialize();\n *\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.PopupToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n * @cfg {Array} [allowCollapse] Allow the specified tools to be collapsed. By default, collapsible tools\n *  will only be displayed if users click the ‘More’ option displayed at the bottom of the list. If\n *  the list is expanded, a ‘Fewer’ option permits users to collapse the list again. Any tools that\n *  are included in the toolgroup, but are not designated as collapsible, will always be displayed.\n *  To open a collapsible list in its expanded state, set #expanded to 'true'.\n * @cfg {Array} [forceExpand] Expand the specified tools. All other tools will be designated as collapsible.\n *  Unless #expanded is set to true, the collapsible tools will be collapsed when the list is first opened.\n * @cfg {boolean} [expanded=false] Expand collapsible tools. This config is only relevant if tools have\n *  been designated as collapsible. When expanded is set to true, all tools in the group will be displayed\n *  when the list is first opened. Users can collapse the list with a ‘Fewer’ option at the bottom.\n */\nOO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Properties (must be set before parent constructor, which calls #populate)\n\tthis.allowCollapse = config.allowCollapse;\n\tthis.forceExpand = config.forceExpand;\n\tthis.expanded = config.expanded !== undefined ? config.expanded : false;\n\tthis.collapsibleTools = [];\n\n\t// Parent constructor\n\tOO.ui.ListToolGroup.parent.call( this, toolbar, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-listToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ListToolGroup.static.name = 'list';\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ListToolGroup.prototype.populate = function () {\n\tvar i, len, allowCollapse = [];\n\n\tOO.ui.ListToolGroup.parent.prototype.populate.call( this );\n\n\t// Update the list of collapsible tools\n\tif ( this.allowCollapse !== undefined ) {\n\t\tallowCollapse = this.allowCollapse;\n\t} else if ( this.forceExpand !== undefined ) {\n\t\tallowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );\n\t}\n\n\tthis.collapsibleTools = [];\n\tfor ( i = 0, len = allowCollapse.length; i < len; i++ ) {\n\t\tif ( this.tools[ allowCollapse[ i ] ] !== undefined ) {\n\t\t\tthis.collapsibleTools.push( this.tools[ allowCollapse[ i ] ] );\n\t\t}\n\t}\n\n\t// Keep at the end, even when tools are added\n\tthis.$group.append( this.getExpandCollapseTool().$element );\n\n\tthis.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );\n\tthis.updateCollapsibleState();\n};\n\n/**\n * Get the expand/collapse tool for this group\n *\n * @return {OO.ui.Tool} Expand collapse tool\n */\nOO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {\n\tvar ExpandCollapseTool;\n\tif ( this.expandCollapseTool === undefined ) {\n\t\tExpandCollapseTool = function () {\n\t\t\tExpandCollapseTool.parent.apply( this, arguments );\n\t\t};\n\n\t\tOO.inheritClass( ExpandCollapseTool, OO.ui.Tool );\n\n\t\tExpandCollapseTool.prototype.onSelect = function () {\n\t\t\tthis.toolGroup.expanded = !this.toolGroup.expanded;\n\t\t\tthis.toolGroup.updateCollapsibleState();\n\t\t\tthis.setActive( false );\n\t\t};\n\t\tExpandCollapseTool.prototype.onUpdateState = function () {\n\t\t\t// Do nothing. Tool interface requires an implementation of this function.\n\t\t};\n\n\t\tExpandCollapseTool.static.name = 'more-fewer';\n\n\t\tthis.expandCollapseTool = new ExpandCollapseTool( this );\n\t}\n\treturn this.expandCollapseTool;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {\n\t// Do not close the popup when the user wants to show more/fewer tools\n\tif (\n\t\t$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&\n\t\t( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\t// HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which\n\t\t// hides the popup list when a tool is selected) and call ToolGroup's implementation directly.\n\t\treturn OO.ui.ListToolGroup.parent.parent.prototype.onMouseKeyUp.call( this, e );\n\t} else {\n\t\treturn OO.ui.ListToolGroup.parent.prototype.onMouseKeyUp.call( this, e );\n\t}\n};\n\nOO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {\n\tvar i, len;\n\n\tthis.getExpandCollapseTool()\n\t\t.setIcon( this.expanded ? 'collapse' : 'expand' )\n\t\t.setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );\n\n\tfor ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {\n\t\tthis.collapsibleTools[ i ].toggle( this.expanded );\n\t}\n\n\t// Re-evaluate clipping, because our height has changed\n\tthis.clip();\n};\n","/**\n * MenuToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to\n * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.BarToolGroup BarToolGroup}\n * and {@link OO.ui.ListToolGroup ListToolGroup}). MenuToolGroups contain selectable {@link OO.ui.Tool tools},\n * which are displayed by label in a dropdown menu. The tool's title is used as the label text, and the\n * menu label is updated to reflect which tool or tools are currently selected. If no tools are selected,\n * the menu label is empty. The menu can be configured with an indicator, icon, title, and/or header.\n *\n * MenuToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar\n * is set up.\n *\n *     @example\n *     // Example of a MenuToolGroup\n *     var toolFactory = new OO.ui.ToolFactory();\n *     var toolGroupFactory = new OO.ui.ToolGroupFactory();\n *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );\n *\n *     // We will be placing status text in this element when tools are used\n *     var $area = $( '<p>' ).text( 'An example of a MenuToolGroup. Select a tool from the dropdown menu.' );\n *\n *     // Define the tools that we're going to place in our toolbar\n *\n *     function SettingsTool() {\n *         SettingsTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( SettingsTool, OO.ui.Tool );\n *     SettingsTool.static.name = 'settings';\n *     SettingsTool.static.icon = 'settings';\n *     SettingsTool.static.title = 'Change settings';\n *     SettingsTool.prototype.onSelect = function () {\n *         $area.text( 'Settings tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     SettingsTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( SettingsTool );\n *\n *     function StuffTool() {\n *         StuffTool.parent.apply( this, arguments );\n *         this.reallyActive = false;\n *     }\n *     OO.inheritClass( StuffTool, OO.ui.Tool );\n *     StuffTool.static.name = 'stuff';\n *     StuffTool.static.icon = 'ellipsis';\n *     StuffTool.static.title = 'More stuff';\n *     StuffTool.prototype.onSelect = function () {\n *         $area.text( 'More stuff tool clicked!' );\n *         // Toggle the active state on each click\n *         this.reallyActive = !this.reallyActive;\n *         this.setActive( this.reallyActive );\n *         // To update the menu label\n *         this.toolbar.emit( 'updateState' );\n *     };\n *     StuffTool.prototype.onUpdateState = function () {};\n *     toolFactory.register( StuffTool );\n *\n *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be\n *     // used once (but not all defined tools must be used).\n *     toolbar.setup( [\n *         {\n *             type: 'menu',\n *             header: 'This is the (optional) header',\n *             title: 'This is the (optional) title',\n *             include: [ 'settings', 'stuff' ]\n *         }\n *     ] );\n *\n *     // Create some UI around the toolbar and place it in the document\n *     var frame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         framed: true\n *     } );\n *     var contentFrame = new OO.ui.PanelLayout( {\n *         expanded: false,\n *         padded: true\n *     } );\n *     frame.$element.append(\n *         toolbar.$element,\n *         contentFrame.$element.append( $area )\n *     );\n *     $( 'body' ).append( frame.$element );\n *\n *     // Here is where the toolbar is actually built. This must be done after inserting it into the\n *     // document.\n *     toolbar.initialize();\n *     toolbar.emit( 'updateState' );\n *\n * For more information about how to add tools to a MenuToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.\n * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki] [1].\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars\n *\n * @class\n * @extends OO.ui.PopupToolGroup\n *\n * @constructor\n * @param {OO.ui.Toolbar} toolbar\n * @param {Object} [config] Configuration options\n */\nOO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( toolbar ) && config === undefined ) {\n\t\tconfig = toolbar;\n\t\ttoolbar = config.toolbar;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuToolGroup.parent.call( this, toolbar, config );\n\n\t// Events\n\tthis.toolbar.connect( this, { updateState: 'onUpdateState' } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-menuToolGroup' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.MenuToolGroup.static.name = 'menu';\n\n/* Methods */\n\n/**\n * Handle the toolbar state being updated.\n *\n * When the state changes, the title of each active item in the menu will be joined together and\n * used as a label for the group. The label will be empty if none of the items are active.\n *\n * @private\n */\nOO.ui.MenuToolGroup.prototype.onUpdateState = function () {\n\tvar name,\n\t\tlabelTexts = [];\n\n\tfor ( name in this.tools ) {\n\t\tif ( this.tools[ name ].isActive() ) {\n\t\t\tlabelTexts.push( this.tools[ name ].getTitle() );\n\t\t}\n\t}\n\n\tthis.setLabel( labelTexts.join( ', ' ) || ' ' );\n};\n","}( OO ) );\n"]}
\ No newline at end of file
index 7f931be..5aa29ff 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 .oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
   cursor: move;
   border-right: 1px solid #ddd;
 }
 .oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+  height: auto;
+}
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-menu {
   height: 3em;
+  white-space: nowrap;
 }
-.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-content {
   top: 3em;
 }
 .oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
@@ -85,6 +89,9 @@
 .oo-ui-menuLayout-expanded .oo-ui-menuLayout-content {
   position: absolute;
 }
+.oo-ui-menuLayout-expanded .oo-ui-menuLayout-menu {
+  z-index: 1;
+}
 .oo-ui-menuLayout-static.oo-ui-menuLayout-after,
 .oo-ui-menuLayout-static.oo-ui-menuLayout-before {
   display: table;
 .oo-ui-buttonOptionWidget.oo-ui-buttonElement-active .oo-ui-buttonElement-button {
   cursor: default;
 }
+.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-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-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
-  background-color: transparent;
-}
 .oo-ui-toggleButtonWidget {
   margin-right: 0.5em;
 }
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 }
-.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
   cursor: default;
   -webkit-touch-callout: none;
   height: 8.815em;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-dropLabel,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
   display: none;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail {
 .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
   border-radius: 0 0.25em 0.25em 0;
 }
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+  display: none;
+}
 .oo-ui-selectFileWidget-info {
   height: 2.4em;
   background-color: #fff;
   border-radius: 0.25em 0 0 0.25em;
   border-width: 1px 0 1px 1px;
 }
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
 .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
-  left: 0;
-  margin-left: 0.3em;
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
+  left: 0.3em;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
-  right: 0;
-  margin-right: 0.775em;
+  right: 0.775em;
 }
 .oo-ui-selectFileWidget-label {
   -webkit-box-sizing: border-box;
 .oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
   background-color: #e1f3ff;
 }
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-label {
+.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
   padding: 1em;
 }
 .oo-ui-selectFileWidget-dropTarget {
 }
 .oo-ui-tabSelectWidget {
   text-align: left;
-  white-space: nowrap;
-  overflow: hidden;
+  overflow-x: auto;
+  overflow-y: hidden;
   background-color: #eee;
   box-shadow: inset 0 -0.015em 0.1em rgba(0, 0, 0, 0.1);
 }
   display: block;
   position: relative;
 }
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-capsuleMultiselectWidget-content {
   position: relative;
 }
 .oo-ui-capsuleMultiselectWidget-handle:last-child {
   margin-right: 0;
 }
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input {
   border: 0;
   line-height: 1.675em;
index 0187bca..ab44279 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 /**
  * WikimediaUI Base v0.9.2
   border-right: 1px solid #c8ccd1;
 }
 .oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+  height: auto;
+}
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-menu {
   height: 3em;
+  white-space: nowrap;
 }
-.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-content {
   top: 3em;
 }
 .oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
   padding: 1.5em;
 }
-.oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-menu {
   height: 2.75em;
 }
-.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+.oo-ui-indexLayout.oo-ui-menuLayout-expanded > .oo-ui-menuLayout-content {
   top: 2.75em;
 }
 .oo-ui-menuLayout {
 .oo-ui-menuLayout-expanded .oo-ui-menuLayout-content {
   position: absolute;
 }
+.oo-ui-menuLayout-expanded .oo-ui-menuLayout-menu {
+  z-index: 1;
+}
 .oo-ui-menuLayout-static.oo-ui-menuLayout-after,
 .oo-ui-menuLayout-static.oo-ui-menuLayout-before {
   display: table;
   border-bottom-right-radius: 2px;
   border-top-right-radius: 2px;
 }
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: absolute;
-}
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-widget-disabled + .oo-ui-widget-disabled > .oo-ui-buttonElement-button {
   border-left-color: #fff;
 }
 .oo-ui-buttonOptionWidget.oo-ui-buttonElement-active .oo-ui-buttonElement-button {
   cursor: default;
 }
-.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-toggleButtonWidget {
   margin-right: 0.5em;
 }
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 }
-.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
   cursor: default;
   -webkit-touch-callout: none;
   height: 8.815em;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-dropLabel,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
   display: none;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail {
   border-right-width: 0;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
+  display: none;
   top: -1px;
   left: 0.46875em;
   min-height: 2.5em;
   margin-left: -1px;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
+  display: none;
   top: -1px;
   right: 0.9375em;
   min-height: 2.5em;
 }
 .oo-ui-tabSelectWidget {
   text-align: left;
-  white-space: nowrap;
-  overflow: hidden;
+  overflow-x: auto;
+  overflow-y: hidden;
   background-color: #eaecf0;
 }
 .oo-ui-tabOptionWidget {
   display: block;
   position: relative;
 }
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  top: 0;
-  height: 100%;
-}
 .oo-ui-capsuleMultiselectWidget-content {
   position: relative;
 }
index c6fb967..bee545b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
@@ -4442,7 +4442,7 @@ OO.ui.CapsuleMultiselectWidget.prototype.onMenuChoose = function ( item ) {
  * Handle menu toggle events.
  *
  * @private
- * @param {boolean} isVisible Menu toggle event
+ * @param {boolean} isVisible Open state of the menu
  */
 OO.ui.CapsuleMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
        this.$element.toggleClass( 'oo-ui-capsuleMultiselectWidget-open', isVisible );
index 1991086..ffd67da 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["../src/intro.js.txt","../src/mixins/DraggableElement.js","../src/mixins/DraggableGroupElement.js","../src/mixins/RequestManager.js","../src/mixins/LookupElement.js","../src/layouts/TabPanelLayout.js","../src/layouts/PageLayout.js","../src/layouts/StackLayout.js","../src/layouts/MenuLayout.js","../src/layouts/BookletLayout.js","../src/layouts/IndexLayout.js","../src/widgets/ToggleWidget.js","../src/widgets/ToggleButtonWidget.js","../src/widgets/ToggleSwitchWidget.js","../src/widgets/OutlineControlsWidget.js","../src/widgets/OutlineOptionWidget.js","../src/widgets/OutlineSelectWidget.js","../src/widgets/ButtonOptionWidget.js","../src/widgets/ButtonSelectWidget.js","../src/widgets/TabOptionWidget.js","../src/widgets/TabSelectWidget.js","../src/widgets/CapsuleItemWidget.js","../src/widgets/CapsuleMultiselectWidget.js","../src/widgets/TagItemWidget.js","../src/widgets/TagMultiselectWidget.js","../src/widgets/PopupTagMultiselectWidget.js","../src/widgets/MenuTagMultiselectWidget.js","../src/widgets/SelectFileWidget.js","../src/widgets/SearchWidget.js","../src/widgets/NumberInputWidget.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-widgets.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * DraggableElement is a mixin class used to create elements that can be clicked\n * and dragged by a mouse to a new position within a group. This class must be used\n * in conjunction with OO.ui.mixin.DraggableGroupElement, which provides a container for\n * the draggable elements.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n *  but the draggable state should be called from the DraggableGroupElement, which updates\n *  the whole group\n */\nOO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {\n\tconfig = config || {};\n\n\t// Properties\n\tthis.index = null;\n\tthis.$handle = config.$handle || this.$element;\n\tthis.wasHandleUsed = null;\n\n\t// Initialize and events\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableElement' )\n\t\t.on( {\n\t\t\tmousedown: this.onDragMouseDown.bind( this ),\n\t\t\tdragstart: this.onDragStart.bind( this ),\n\t\t\tdragover: this.onDragOver.bind( this ),\n\t\t\tdragend: this.onDragEnd.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\tthis.$handle.addClass( 'oo-ui-draggableElement-handle' );\n\tthis.toggleDraggable( config.draggable === undefined ? true : !!config.draggable );\n};\n\nOO.initClass( OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event dragstart\n *\n * A dragstart event is emitted when the user clicks and begins dragging an item.\n * @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.\n */\n\n/**\n * @event dragend\n * A dragend event is emitted when the user drags an item and releases the mouse,\n * thus terminating the drag operation.\n */\n\n/**\n * @event drop\n * A drop event is emitted when the user drags an item and then releases the mouse button\n * over a valid target.\n */\n\n/* Static Properties */\n\n/**\n * @inheritdoc OO.ui.mixin.ButtonElement\n */\nOO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\tthis.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );\n\n\t\t// We make the entire element draggable, not just the handle, so that\n\t\t// the whole element appears to move. wasHandleUsed prevents drags from\n\t\t// starting outside the handle\n\t\tthis.$element.prop( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to mousedown event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\n\tthis.wasHandleUsed =\n\t\t// Optimization: if the handle is the whole element this is always true\n\t\tthis.$handle[ 0 ] === this.$element[ 0 ] ||\n\t\t// Check the mousedown occurred inside the handle\n\t\tOO.ui.contains( this.$handle[ 0 ], e.target, true );\n};\n\n/**\n * Respond to dragstart event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {boolean} False if the event is cancelled\n * @fires dragstart\n */\nOO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {\n\tvar element = this,\n\t\tdataTransfer = e.originalEvent.dataTransfer;\n\n\tif ( !this.wasHandleUsed || !this.isDraggable() ) {\n\t\treturn false;\n\t}\n\n\t// Define drop effect\n\tdataTransfer.dropEffect = 'none';\n\tdataTransfer.effectAllowed = 'move';\n\t// Support: Firefox\n\t// We must set up a dataTransfer data property or Firefox seems to\n\t// ignore the fact the element is draggable.\n\ttry {\n\t\tdataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );\n\t} catch ( err ) {\n\t\t// The above is only for Firefox. Move on if it fails.\n\t}\n\t// Briefly add a 'clone' class to style the browser's native drag image\n\tthis.$element.addClass( 'oo-ui-draggableElement-clone' );\n\t// Add placeholder class after the browser has rendered the clone\n\tsetTimeout( function () {\n\t\telement.$element\n\t\t\t.removeClass( 'oo-ui-draggableElement-clone' )\n\t\t\t.addClass( 'oo-ui-draggableElement-placeholder' );\n\t} );\n\t// Emit event\n\tthis.emit( 'dragstart', this );\n\treturn true;\n};\n\n/**\n * Respond to dragend event.\n *\n * @private\n * @fires dragend\n */\nOO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {\n\tthis.$element.removeClass( 'oo-ui-draggableElement-placeholder' );\n\tthis.emit( 'dragend' );\n};\n\n/**\n * Handle drop event.\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @fires drop\n */\nOO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {\n\te.preventDefault();\n\tthis.emit( 'drop', e );\n};\n\n/**\n * In order for drag/drop to work, the dragover event must\n * return false and stop propogation.\n *\n * @param {jQuery.Event} e Drag event\n * @private\n */\nOO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {\n\te.preventDefault();\n};\n\n/**\n * Set item index.\n * Store it in the DOM so we can access from the widget drag event\n *\n * @private\n * @param {number} index Item index\n */\nOO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {\n\tif ( this.index !== index ) {\n\t\tthis.index = index;\n\t\tthis.$element.data( 'index', index );\n\t}\n};\n\n/**\n * Get item index\n *\n * @private\n * @return {number} Item index\n */\nOO.ui.mixin.DraggableElement.prototype.getIndex = function () {\n\treturn this.index;\n};\n","/**\n * DraggableGroupElement is a mixin class used to create a group element to\n * contain draggable elements, which are items that can be clicked and dragged by a mouse.\n * The class is used with OO.ui.mixin.DraggableElement.\n *\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation\n *  should match the layout of the items. Items displayed in a single row\n *  or in several rows should use horizontal orientation. The vertical orientation should only be\n *  used when the items are displayed in a single column. Defaults to 'vertical'\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n */\nOO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.orientation = config.orientation || 'vertical';\n\tthis.dragItem = null;\n\tthis.itemKeys = {};\n\tthis.dir = null;\n\tthis.itemsOrder = null;\n\tthis.draggable = config.draggable === undefined ? true : !!config.draggable;\n\n\t// Events\n\tthis.aggregate( {\n\t\tdragstart: 'itemDragStart',\n\t\tdragend: 'itemDragEnd',\n\t\tdrop: 'itemDrop'\n\t} );\n\tthis.connect( this, {\n\t\titemDragStart: 'onItemDragStart',\n\t\titemDrop: 'onItemDropOrDragEnd',\n\t\titemDragEnd: 'onItemDropOrDragEnd'\n\t} );\n\n\t// Initialize\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableGroupElement' )\n\t\t.append( this.$status )\n\t\t.toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' );\n};\n\n/* Setup */\nOO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * An item has been dragged to a new position, but not yet dropped.\n *\n * @event drag\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * An item has been dropped at a new position.\n *\n * @event reorder\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * Draggable state of this widget has changed.\n *\n * @event draggable\n * @param {boolean} [draggable] Widget is draggable\n */\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableGroupElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\t// Tell the items their draggable state changed\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.toggleDraggable( this.draggable );\n\t\t}.bind( this ) );\n\n\t\t// Emit event\n\t\tthis.emit( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableGroupElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to item drag start event\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\t// Make a shallow copy of this.items so we can re-order it during previews\n\t// without affecting the original array.\n\tthis.itemsOrder = this.items.slice();\n\tthis.updateIndexes();\n\tif ( this.orientation === 'horizontal' ) {\n\t\t// Calculate and cache directionality on drag start - it's a little\n\t\t// expensive and it shouldn't change while dragging.\n\t\tthis.dir = this.$element.css( 'direction' );\n\t}\n\tthis.setDragItem( item );\n};\n\n/**\n * Update the index properties of the items\n */\nOO.ui.mixin.DraggableGroupElement.prototype.updateIndexes = function () {\n\tvar i, len;\n\n\t// Map the index of each object\n\tfor ( i = 0, len = this.itemsOrder.length; i < len; i++ ) {\n\t\tthis.itemsOrder[ i ].setIndex( i );\n\t}\n};\n\n/**\n * Handle drop or dragend event and switch the order of the items accordingly\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dropped item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDropOrDragEnd = function () {\n\tvar targetIndex, originalIndex,\n\t\titem = this.getDragItem();\n\n\t// TODO: Figure out a way to configure a list of legally droppable\n\t// elements even if they are not yet in the list\n\tif ( item ) {\n\t\toriginalIndex = this.items.indexOf( item );\n\t\t// If the item has moved forward, add one to the index to account for the left shift\n\t\ttargetIndex = item.getIndex() + ( item.getIndex() > originalIndex ? 1 : 0 );\n\t\tif ( targetIndex !== originalIndex ) {\n\t\t\tthis.reorder( this.getDragItem(), targetIndex );\n\t\t\tthis.emit( 'reorder', this.getDragItem(), targetIndex );\n\t\t}\n\t\tthis.updateIndexes();\n\t}\n\tthis.unsetDragItem();\n\t// Return false to prevent propogation\n\treturn false;\n};\n\n/**\n * Respond to dragover event\n *\n * @private\n * @param {jQuery.Event} e Dragover event\n * @fires reorder\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {\n\tvar overIndex, targetIndex,\n\t\titem = this.getDragItem(),\n\t\tdragItemIndex = item.getIndex();\n\n\t// Get the OptionWidget item we are dragging over\n\toverIndex = $( e.target ).closest( '.oo-ui-draggableElement' ).data( 'index' );\n\n\tif ( overIndex !== undefined && overIndex !== dragItemIndex ) {\n\t\ttargetIndex = overIndex + ( overIndex > dragItemIndex ? 1 : 0 );\n\n\t\tif ( targetIndex > 0 ) {\n\t\t\tthis.$group.children().eq( targetIndex - 1 ).after( item.$element );\n\t\t} else {\n\t\t\tthis.$group.prepend( item.$element );\n\t\t}\n\t\t// Move item in itemsOrder array\n\t\tthis.itemsOrder.splice( overIndex, 0,\n\t\t\tthis.itemsOrder.splice( dragItemIndex, 1 )[ 0 ]\n\t\t);\n\t\tthis.updateIndexes();\n\t\tthis.emit( 'drag', item, targetIndex );\n\t}\n\t// Prevent default\n\te.preventDefault();\n};\n\n/**\n * Reorder the items in the group\n *\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} newIndex New index\n */\nOO.ui.mixin.DraggableGroupElement.prototype.reorder = function ( item, newIndex ) {\n\tthis.addItems( [ item ], newIndex );\n};\n\n/**\n * Set a dragged item\n *\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {\n\tif ( this.dragItem !== item ) {\n\t\tthis.dragItem = item;\n\t\tthis.$element.on( 'dragover', this.onDragOver.bind( this ) );\n\t\tthis.$element.addClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Unset the current dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {\n\tif ( this.dragItem ) {\n\t\tthis.dragItem = null;\n\t\tthis.$element.off( 'dragover' );\n\t\tthis.$element.removeClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Get the item that is currently being dragged.\n *\n * @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged\n */\nOO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {\n\treturn this.dragItem;\n};\n","/**\n * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as\n * the {@link OO.ui.mixin.LookupElement}.\n *\n * @class\n * @abstract\n *\n * @constructor\n */\nOO.ui.mixin.RequestManager = function OoUiMixinRequestManager() {\n\tthis.requestCache = {};\n\tthis.requestQuery = null;\n\tthis.requestRequest = null;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.RequestManager );\n\n/**\n * Get request results for the current query.\n *\n * @return {jQuery.Promise} Promise object which will be passed response data as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   may not be rejected, depending on what jQuery feels like doing.\n */\nOO.ui.mixin.RequestManager.prototype.getRequestData = function () {\n\tvar widget = this,\n\t\tvalue = this.getRequestQuery(),\n\t\tdeferred = $.Deferred(),\n\t\tourRequest;\n\n\tthis.abortRequest();\n\tif ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) {\n\t\tdeferred.resolve( this.requestCache[ value ] );\n\t} else {\n\t\tif ( this.pushPending ) {\n\t\t\tthis.pushPending();\n\t\t}\n\t\tthis.requestQuery = value;\n\t\tourRequest = this.requestRequest = this.getRequest();\n\t\tourRequest\n\t\t\t.always( function () {\n\t\t\t\t// We need to pop pending even if this is an old request, otherwise\n\t\t\t\t// the widget will remain pending forever.\n\t\t\t\t// TODO: this assumes that an aborted request will fail or succeed soon after\n\t\t\t\t// being aborted, or at least eventually. It would be nice if we could popPending()\n\t\t\t\t// at abort time, but only if we knew that we hadn't already called popPending()\n\t\t\t\t// for that request.\n\t\t\t\tif ( widget.popPending ) {\n\t\t\t\t\twidget.popPending();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.done( function ( response ) {\n\t\t\t\t// If this is an old request (and aborting it somehow caused it to still succeed),\n\t\t\t\t// ignore its success completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\twidget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response );\n\t\t\t\t\tdeferred.resolve( widget.requestCache[ value ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\t// If this is an old request (or a request failing because it's being aborted),\n\t\t\t\t// ignore its failure completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t}\n\t\t\t} );\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Abort the currently pending request, if any.\n *\n * @private\n */\nOO.ui.mixin.RequestManager.prototype.abortRequest = function () {\n\tvar oldRequest = this.requestRequest;\n\tif ( oldRequest ) {\n\t\t// First unset this.requestRequest to the fail handler will notice\n\t\t// that the request is no longer current\n\t\tthis.requestRequest = null;\n\t\tthis.requestQuery = null;\n\t\toldRequest.abort();\n\t}\n};\n\n/**\n * Get the query to be made.\n *\n * @protected\n * @method\n * @abstract\n * @return {string} query to be used\n */\nOO.ui.mixin.RequestManager.prototype.getRequestQuery = null;\n\n/**\n * Get a new request object of the current query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.RequestManager.prototype.getRequest = null;\n\n/**\n * Pre-process data returned by the request from #getRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;\n","/**\n * LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested values for\n * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types\n * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen\n * from the lookup menu, that value becomes the value of the input field.\n *\n * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is\n * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then\n * re-enable lookups.\n *\n * See the [OOjs UI demos][1] for an example.\n *\n * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/index.html#widgets-apex-vector-ltr\n *\n * @class\n * @abstract\n * @mixins OO.ui.mixin.RequestManager\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.\n * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.\n *  By default, the lookup menu is not generated and displayed until the user begins to type.\n * @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted (so, that the user can\n *  take it over into the input with simply pressing return) automatically or not.\n */\nOO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { highlightFirst: true }, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.RequestManager.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\tthis.lookupMenu = new OO.ui.MenuSelectWidget( {\n\t\twidget: this,\n\t\tinput: this,\n\t\t$floatableContainer: config.$container || this.$element\n\t} );\n\n\tthis.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;\n\n\tthis.lookupsDisabled = false;\n\tthis.lookupInputFocused = false;\n\tthis.lookupHighlightFirstItem = config.highlightFirst;\n\n\t// Events\n\tthis.$input.on( {\n\t\tfocus: this.onLookupInputFocus.bind( this ),\n\t\tblur: this.onLookupInputBlur.bind( this ),\n\t\tmousedown: this.onLookupInputMouseDown.bind( this )\n\t} );\n\tthis.connect( this, { change: 'onLookupInputChange' } );\n\tthis.lookupMenu.connect( this, {\n\t\ttoggle: 'onLookupMenuToggle',\n\t\tchoose: 'onLookupMenuItemChoose'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.lookupMenu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\tthis.$element.addClass( 'oo-ui-lookupElement' );\n\tthis.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );\n\tthis.$overlay.append( this.lookupMenu.$element );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager );\n\n/* Methods */\n\n/**\n * Handle input focus event.\n *\n * @protected\n * @param {jQuery.Event} e Input focus event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () {\n\tthis.lookupInputFocused = true;\n\tthis.populateLookupMenu();\n};\n\n/**\n * Handle input blur event.\n *\n * @protected\n * @param {jQuery.Event} e Input blur event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {\n\tthis.closeLookupMenu();\n\tthis.lookupInputFocused = false;\n};\n\n/**\n * Handle input mouse down event.\n *\n * @protected\n * @param {jQuery.Event} e Input mouse down event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {\n\t// Only open the menu if the input was already focused.\n\t// This way we allow the user to open the menu again after closing it with Esc\n\t// by clicking in the input. Opening (and populating) the menu when initially\n\t// clicking into the input is handled by the focus handler.\n\tif ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle input change event.\n *\n * @protected\n * @param {string} value New input value\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputChange = function () {\n\tif ( this.lookupInputFocused ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle the lookup menu being shown/hidden.\n *\n * @protected\n * @param {boolean} visible Whether the lookup menu is now visible.\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\t// When the menu is hidden, abort any active request and clear the menu.\n\t\t// This has to be done here in addition to closeLookupMenu(), because\n\t\t// MenuSelectWidget will close itself when the user presses Esc.\n\t\tthis.abortLookupRequest();\n\t\tthis.lookupMenu.clearItems();\n\t}\n};\n\n/**\n * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.\n *\n * @protected\n * @param {OO.ui.MenuOptionWidget} item Selected item\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Get lookup menu.\n *\n * @private\n * @return {OO.ui.MenuSelectWidget}\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {\n\treturn this.lookupMenu;\n};\n\n/**\n * Disable or re-enable lookups.\n *\n * When lookups are disabled, calls to #populateLookupMenu will be ignored.\n *\n * @param {boolean} disabled Disable lookups\n */\nOO.ui.mixin.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {\n\tthis.lookupsDisabled = !!disabled;\n};\n\n/**\n * Open the menu. If there are no entries in the menu, this does nothing.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.openLookupMenu = function () {\n\tif ( !this.lookupMenu.isEmpty() ) {\n\t\tthis.lookupMenu.toggle( true );\n\t}\n\treturn this;\n};\n\n/**\n * Close the menu, empty it, and abort any pending request.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.closeLookupMenu = function () {\n\tthis.lookupMenu.toggle( false );\n\tthis.abortLookupRequest();\n\tthis.lookupMenu.clearItems();\n\treturn this;\n};\n\n/**\n * Request menu items based on the input's current value, and when they arrive,\n * populate the menu with these items and show the menu.\n *\n * If lookups have been disabled with #setLookupsDisabled, this function does nothing.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {\n\tvar widget = this,\n\t\tvalue = this.getValue();\n\n\tif ( this.lookupsDisabled || this.isReadOnly() ) {\n\t\treturn;\n\t}\n\n\t// If the input is empty, clear the menu, unless suggestions when empty are allowed.\n\tif ( !this.allowSuggestionsWhenEmpty && value === '' ) {\n\t\tthis.closeLookupMenu();\n\t// Skip population if there is already a request pending for the current value\n\t} else if ( value !== this.lookupQuery ) {\n\t\tthis.getLookupMenuItems()\n\t\t\t.done( function ( items ) {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\tif ( items.length ) {\n\t\t\t\t\twidget.lookupMenu\n\t\t\t\t\t\t.addItems( items )\n\t\t\t\t\t\t.toggle( true );\n\t\t\t\t\twidget.initializeLookupMenuSelection();\n\t\t\t\t} else {\n\t\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t} );\n\t}\n\n\treturn this;\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () {\n\tif ( this.lookupHighlightFirstItem && !this.lookupMenu.getSelectedItem() ) {\n\t\tthis.lookupMenu.highlightItem( this.lookupMenu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * Get lookup menu items for the current query.\n *\n * @private\n * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   will not be rejected: it will remain pending forever.\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () {\n\treturn this.getRequestData().then( function ( data ) {\n\t\treturn this.getLookupMenuOptionsFromData( data );\n\t}.bind( this ) );\n};\n\n/**\n * Abort the currently pending lookup request, if any.\n *\n * @private\n */\nOO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () {\n\tthis.abortRequest();\n};\n\n/**\n * Get a new request object of the current lookup query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.LookupElement.prototype.getLookupRequest = null;\n\n/**\n * Pre-process data returned by the request from #getLookupRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = null;\n\n/**\n * Get a list of menu option widgets from the (possibly cached) data returned by\n * #getLookupCacheDataFromResponse.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} data Cached result data, usually an array\n * @return {OO.ui.MenuOptionWidget[]} Menu items\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = null;\n\n/**\n * Set the read-only state of the widget.\n *\n * This will also disable/enable the lookups functionality.\n *\n * @param {boolean} readOnly Make input read-only\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {\n\t// Parent method\n\t// Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget\n\tOO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );\n\n\t// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor\n\tif ( this.isReadOnly() && this.lookupMenu ) {\n\t\tthis.closeLookupMenu();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestQuery = function () {\n\treturn this.getValue();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequest = function () {\n\treturn this.getLookupRequest();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestCacheDataFromResponse = function ( response ) {\n\treturn this.getLookupCacheDataFromResponse( response );\n};\n","/**\n * TabPanelLayouts are used within {@link OO.ui.IndexLayout index layouts} to create tab panels that\n * users can select and display from the index's optional {@link OO.ui.TabSelectWidget tab}\n * navigation. TabPanels are usually not instantiated directly, rather extended to include the\n * required content and functionality.\n *\n * Each tab panel must have a unique symbolic name, which is passed to the constructor. In addition,\n * the tab panel's tab item is customized (with a label) using the #setupTabItem method. See\n * {@link OO.ui.IndexLayout IndexLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of tab panel\n * @param {Object} [config] Configuration options\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] Label for tab panel's tab\n */\nOO.ui.TabPanelLayout = function OoUiTabPanelLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.TabPanelLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.label = config.label;\n\tthis.tabItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabPanelLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabPanelLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the tab panel becomes active. Tab panels become active when they are\n * shown in a index layout that is configured to display only one tab panel at a time.\n *\n * @event active\n * @param {boolean} active Tab panel is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the tab panel.\n *\n * @return {string} Symbolic name of tab panel\n */\nOO.ui.TabPanelLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if tab panel is active.\n *\n * Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to\n * display only one tab panel at a time. Additional CSS is applied to the tab panel's tab item to reflect the\n * active state.\n *\n * @return {boolean} Tab panel is active\n */\nOO.ui.TabPanelLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get tab item.\n *\n * The tab item allows users to access the tab panel from the index's tab\n * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.\n *\n * @return {OO.ui.TabOptionWidget|null} Tab option widget\n */\nOO.ui.TabPanelLayout.prototype.getTabItem = function () {\n\treturn this.tabItem;\n};\n\n/**\n * Set or unset the tab item.\n *\n * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,\n * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab\n * level), use #setupTabItem instead of this method.\n *\n * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear\n * @chainable\n */\nOO.ui.TabPanelLayout.prototype.setTabItem = function ( tabItem ) {\n\tthis.tabItem = tabItem || null;\n\tif ( tabItem ) {\n\t\tthis.setupTabItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the tab item.\n *\n * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset\n * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use\n * the #setTabItem method instead.\n *\n * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up\n * @chainable\n */\nOO.ui.TabPanelLayout.prototype.setupTabItem = function () {\n\tif ( this.label ) {\n\t\tthis.tabItem.setLabel( this.label );\n\t}\n\treturn this;\n};\n\n/**\n * Set the tab panel to its 'active' state.\n *\n * Tab panels become active when they are shown in a index layout that is configured to display only\n * one tab panel at a time. Additional CSS is applied to the tab item to reflect the tab panel's\n * active state. Outside of the index context, setting the active state on a tab panel does nothing.\n *\n * @param {boolean} active Tab panel is active\n * @fires active\n */\nOO.ui.TabPanelLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-tabPanelLayout-active', this.active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display\n * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,\n * rather extended to include the required content and functionality.\n *\n * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline\n * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See\n * {@link OO.ui.BookletLayout BookletLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of page\n * @param {Object} [config] Configuration options\n */\nOO.ui.PageLayout = function OoUiPageLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.PageLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.outlineItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-pageLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the page becomes active. Pages become active when they are\n * shown in a booklet layout that is configured to display only one page at a time.\n *\n * @event active\n * @param {boolean} active Page is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the page.\n *\n * @return {string} Symbolic name of page\n */\nOO.ui.PageLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if page is active.\n *\n * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display\n * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.\n *\n * @return {boolean} Page is active\n */\nOO.ui.PageLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get outline item.\n *\n * The outline item allows users to access the page from the booklet's outline\n * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.\n *\n * @return {OO.ui.OutlineOptionWidget|null} Outline option widget\n */\nOO.ui.PageLayout.prototype.getOutlineItem = function () {\n\treturn this.outlineItem;\n};\n\n/**\n * Set or unset the outline item.\n *\n * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,\n * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline\n * level), use #setupOutlineItem instead of this method.\n *\n * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear\n * @chainable\n */\nOO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {\n\tthis.outlineItem = outlineItem || null;\n\tif ( outlineItem ) {\n\t\tthis.setupOutlineItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the outline item.\n *\n * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset\n * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use\n * the #setOutlineItem method instead.\n *\n * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up\n * @chainable\n */\nOO.ui.PageLayout.prototype.setupOutlineItem = function () {\n\treturn this;\n};\n\n/**\n * Set the page to its 'active' state.\n *\n * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional\n * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet\n * context, setting the active state on a page does nothing.\n *\n * @param {boolean} active Page is active\n * @fires active\n */\nOO.ui.PageLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-pageLayout-active', active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed\n * at a time, though the stack layout can also be configured to show all contained panels, one after another,\n * by setting the #continuous option to 'true'.\n *\n *     @example\n *     // A stack layout with two panels, configured to be displayed continously\n *     var myStack = new OO.ui.StackLayout( {\n *         items: [\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel One</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } ),\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel Two</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } )\n *         ],\n *         continuous: true\n *     } );\n *     $( 'body' ).append( myStack.$element );\n *\n * @class\n * @extends OO.ui.PanelLayout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.\n * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.\n */\nOO.ui.StackLayout = function OoUiStackLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.StackLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.currentItem = null;\n\tthis.continuous = !!config.continuous;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-stackLayout' );\n\tif ( this.continuous ) {\n\t\tthis.$element.addClass( 'oo-ui-stackLayout-continuous' );\n\t\tthis.$element.on( 'scroll', OO.ui.debounce( this.onScroll.bind( this ), 250 ) );\n\t}\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );\nOO.mixinClass( OO.ui.StackLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},\n * {@link #clearItems cleared} or {@link #setItem displayed}.\n *\n * @event set\n * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown\n */\n\n/**\n * When used in continuous mode, this event is emitted when the user scrolls down\n * far enough such that currentItem is no longer visible.\n *\n * @event visibleItemChange\n * @param {OO.ui.PanelLayout} panel The next visible item in the layout\n */\n\n/* Methods */\n\n/**\n * Handle scroll events from the layout element\n *\n * @param {jQuery.Event} e\n * @fires visibleItemChange\n */\nOO.ui.StackLayout.prototype.onScroll = function () {\n\tvar currentRect,\n\t\tlen = this.items.length,\n\t\tcurrentIndex = this.items.indexOf( this.currentItem ),\n\t\tnewIndex = currentIndex,\n\t\tcontainerRect = this.$element[ 0 ].getBoundingClientRect();\n\n\tif ( !containerRect || ( !containerRect.top && !containerRect.bottom ) ) {\n\t\t// Can't get bounding rect, possibly not attached.\n\t\treturn;\n\t}\n\n\tfunction getRect( item ) {\n\t\treturn item.$element[ 0 ].getBoundingClientRect();\n\t}\n\n\tfunction isVisible( item ) {\n\t\tvar rect = getRect( item );\n\t\treturn rect.bottom > containerRect.top && rect.top < containerRect.bottom;\n\t}\n\n\tcurrentRect = getRect( this.currentItem );\n\n\tif ( currentRect.bottom < containerRect.top ) {\n\t\t// Scrolled down past current item\n\t\twhile ( ++newIndex < len ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if ( currentRect.top > containerRect.bottom ) {\n\t\t// Scrolled up past current item\n\t\twhile ( --newIndex >= 0 ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( newIndex !== currentIndex ) {\n\t\tthis.emit( 'visibleItemChange', this.items[ newIndex ] );\n\t}\n};\n\n/**\n * Get the current panel.\n *\n * @return {OO.ui.Layout|null}\n */\nOO.ui.StackLayout.prototype.getCurrentItem = function () {\n\treturn this.currentItem;\n};\n\n/**\n * Unset the current item.\n *\n * @private\n * @param {OO.ui.StackLayout} layout\n * @fires set\n */\nOO.ui.StackLayout.prototype.unsetCurrentItem = function () {\n\tvar prevItem = this.currentItem;\n\tif ( prevItem === null ) {\n\t\treturn;\n\t}\n\n\tthis.currentItem = null;\n\tthis.emit( 'set', null );\n};\n\n/**\n * Add panel layouts to the stack layout.\n *\n * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different\n * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified\n * by the index.\n *\n * @param {OO.ui.Layout[]} items Panels to add\n * @param {number} [index] Index of the insertion point\n * @chainable\n */\nOO.ui.StackLayout.prototype.addItems = function ( items, index ) {\n\t// Update the visibility\n\tthis.updateHiddenState( items, this.currentItem );\n\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items, index );\n\n\tif ( !this.currentItem && items.length ) {\n\t\tthis.setItem( items[ 0 ] );\n\t}\n\n\treturn this;\n};\n\n/**\n * Remove the specified panels from the stack layout.\n *\n * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,\n * you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Layout[]} items Panels to remove\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.removeItems = function ( items ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( items.indexOf( this.currentItem ) !== -1 ) {\n\t\tif ( this.items.length ) {\n\t\t\tthis.setItem( this.items[ 0 ] );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Clear all panels from the stack layout.\n *\n * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only\n * a subset of panels, use the #removeItems method.\n *\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.clearItems = function () {\n\tthis.unsetCurrentItem();\n\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\n\treturn this;\n};\n\n/**\n * Show the specified panel.\n *\n * If another panel is currently displayed, it will be hidden.\n *\n * @param {OO.ui.Layout} item Panel to show\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.setItem = function ( item ) {\n\tif ( item !== this.currentItem ) {\n\t\tthis.updateHiddenState( this.items, item );\n\n\t\tif ( this.items.indexOf( item ) !== -1 ) {\n\t\t\tthis.currentItem = item;\n\t\t\tthis.emit( 'set', item );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the visibility of all items in case of non-continuous view.\n *\n * Ensure all items are hidden except for the selected one.\n * This method does nothing when the stack is continuous.\n *\n * @private\n * @param {OO.ui.Layout[]} items Item list iterate over\n * @param {OO.ui.Layout} [selectedItem] Selected item to show\n */\nOO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {\n\tvar i, len;\n\n\tif ( !this.continuous ) {\n\t\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\t\tif ( !selectedItem || selectedItem !== items[ i ] ) {\n\t\t\t\titems[ i ].$element.addClass( 'oo-ui-element-hidden' );\n\t\t\t\titems[ i ].$element.attr( 'aria-hidden', 'true' );\n\t\t\t}\n\t\t}\n\t\tif ( selectedItem ) {\n\t\t\tselectedItem.$element.removeClass( 'oo-ui-element-hidden' );\n\t\t\tselectedItem.$element.removeAttr( 'aria-hidden' );\n\t\t}\n\t}\n};\n","/**\n * MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)\n * and its size is customized with the #menuSize config. The content area will fill all remaining space.\n *\n *     @example\n *     var menuLayout = new OO.ui.MenuLayout( {\n *         position: 'top'\n *     } ),\n *         menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         select = new OO.ui.SelectWidget( {\n *             items: [\n *                 new OO.ui.OptionWidget( {\n *                     data: 'before',\n *                     label: 'Before',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'after',\n *                     label: 'After',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'top',\n *                     label: 'Top',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'bottom',\n *                     label: 'Bottom',\n *                 } )\n *              ]\n *         } ).on( 'select', function ( item ) {\n *            menuLayout.setMenuPosition( item.getData() );\n *         } );\n *\n *     menuLayout.$menu.append(\n *         menuPanel.$element.append( '<b>Menu panel</b>', select.$element )\n *     );\n *     menuLayout.$content.append(\n *         contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')\n *     );\n *     $( 'body' ).append( menuLayout.$element );\n *\n * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet\n * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the\n * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions\n * may be omitted.\n *\n *     .oo-ui-menuLayout-menu {\n *         height: 200px;\n *         width: 200px;\n *     }\n *     .oo-ui-menuLayout-content {\n *         top: 200px;\n *         left: 200px;\n *         right: 200px;\n *         bottom: 200px;\n *     }\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [expanded=true] Expand the layout to fill the entire parent element.\n * @cfg {boolean} [showMenu=true] Show menu\n * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`\n */\nOO.ui.MenuLayout = function OoUiMenuLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\texpanded: true,\n\t\tshowMenu: true,\n\t\tmenuPosition: 'before'\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.MenuLayout.parent.call( this, config );\n\n\tthis.expanded = !!config.expanded;\n\t/**\n\t * Menu DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$menu = $( '<div>' );\n\t/**\n\t * Content DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$content = $( '<div>' );\n\n\t// Initialization\n\tthis.$menu\n\t\t.addClass( 'oo-ui-menuLayout-menu' );\n\tthis.$content.addClass( 'oo-ui-menuLayout-content' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuLayout' );\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-expanded' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-static' );\n\t}\n\tthis.setMenuPosition( config.menuPosition );\n\tthis.toggleMenu( config.showMenu );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Toggle menu.\n *\n * @param {boolean} showMenu Show menu, omit to toggle\n * @chainable\n */\nOO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {\n\tshowMenu = showMenu === undefined ? !this.showMenu : !!showMenu;\n\n\tif ( this.showMenu !== showMenu ) {\n\t\tthis.showMenu = showMenu;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )\n\t\t\t.toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );\n\t\tthis.$menu.attr( 'aria-hidden', this.showMenu ? 'false' : 'true' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if menu is visible\n *\n * @return {boolean} Menu is visible\n */\nOO.ui.MenuLayout.prototype.isMenuVisible = function () {\n\treturn this.showMenu;\n};\n\n/**\n * Set menu position.\n *\n * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`\n * @throws {Error} If position value is not supported\n * @chainable\n */\nOO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {\n\tthis.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );\n\tthis.menuPosition = position;\n\tif ( this.menuPosition === 'top' || this.menuPosition === 'before' ) {\n\t\tthis.$element.append( this.$menu, this.$content );\n\t} else {\n\t\tthis.$element.append( this.$content, this.$menu );\n\t}\n\tthis.$element.addClass( 'oo-ui-menuLayout-' + position );\n\n\treturn this;\n};\n\n/**\n * Get menu position.\n *\n * @return {string} Menu position\n */\nOO.ui.MenuLayout.prototype.getMenuPosition = function () {\n\treturn this.menuPosition;\n};\n","/**\n * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as\n * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate\n * through the pages and select which one to display. By default, only one page is\n * displayed at a time and the outline is hidden. When a user navigates to a new page,\n * the booklet layout automatically focuses on the first focusable element, unless the\n * default setting is changed. Optionally, booklets can be configured to show\n * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.\n *\n *     @example\n *     // Example of a BookletLayout that contains two PageLayouts.\n *\n *     function PageOneLayout( name, config ) {\n *         PageOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );\n *     }\n *     OO.inheritClass( PageOneLayout, OO.ui.PageLayout );\n *     PageOneLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page One' );\n *     };\n *\n *     function PageTwoLayout( name, config ) {\n *         PageTwoLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>Second page</p>' );\n *     }\n *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );\n *     PageTwoLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page Two' );\n *     };\n *\n *     var page1 = new PageOneLayout( 'one' ),\n *         page2 = new PageTwoLayout( 'two' );\n *\n *     var booklet = new OO.ui.BookletLayout( {\n *         outlined: true\n *     } );\n *\n *     booklet.addPages ( [ page1, page2 ] );\n *     $( 'body' ).append( booklet.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all pages, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed. Disabled on mobile.\n * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.\n * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages\n */\nOO.ui.BookletLayout = function OoUiBookletLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.BookletLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentPageName = null;\n\tthis.pages = {};\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.$content.append( this.stackLayout.$element );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\tthis.outlineVisible = false;\n\tthis.outlined = !!config.outlined;\n\tif ( this.outlined ) {\n\t\tthis.editable = !!config.editable;\n\t\tthis.outlineControlsWidget = null;\n\t\tthis.outlineSelectWidget = new OO.ui.OutlineSelectWidget();\n\t\tthis.outlinePanel = new OO.ui.PanelLayout( {\n\t\t\texpanded: this.expanded,\n\t\t\tscrollable: true\n\t\t} );\n\t\tthis.$menu.append( this.outlinePanel.$element );\n\t\tthis.outlineVisible = true;\n\t\tif ( this.editable ) {\n\t\t\tthis.outlineControlsWidget = new OO.ui.OutlineControlsWidget(\n\t\t\t\tthis.outlineSelectWidget\n\t\t\t);\n\t\t}\n\t}\n\tthis.toggleMenu( this.outlined );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );\n\t\tthis.scrolling = false;\n\t\tthis.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );\n\t}\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-bookletLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );\n\tif ( this.outlined ) {\n\t\tthis.outlinePanel.$element\n\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel' )\n\t\t\t.append( this.outlineSelectWidget.$element );\n\t\tif ( this.editable ) {\n\t\t\tthis.outlinePanel.$element\n\t\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )\n\t\t\t\t.append( this.outlineControlsWidget.$element );\n\t\t}\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.\n * @event set\n * @param {OO.ui.PageLayout} page Current page\n */\n\n/**\n * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.\n *\n * @event add\n * @param {OO.ui.PageLayout[]} page Added pages\n * @param {number} index Index pages were added at\n */\n\n/**\n * A 'remove' event is emitted when pages are {@link #clearPages cleared} or\n * {@link #removePages removed} from the booklet.\n *\n * @event remove\n * @param {OO.ui.PageLayout[]} pages Removed pages\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusin event\n */\nOO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the page that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-pageLayout' );\n\tfor ( name in this.pages ) {\n\t\t// Check for page match, exclude current page to find only page changes\n\t\tif ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {\n\t\t\tthis.setPage( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle visibleItemChange events from the stackLayout\n *\n * The next visible page is set as the current page by selecting it\n * in the outline\n *\n * @param {OO.ui.PageLayout} page The next visible page in the layout\n */\nOO.ui.BookletLayout.prototype.onStackLayoutVisibleItemChange = function ( page ) {\n\t// Set a flag to so that the resulting call to #onStackLayoutSet doesn't\n\t// try and scroll the item into view again.\n\tthis.scrolling = true;\n\tthis.outlineSelectWidget.selectItemByData( page.getName() );\n\tthis.scrolling = false;\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel\n */\nOO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {\n\tvar promise, layout = this;\n\t// If everything is unselected, do nothing\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// For continuous BookletLayouts, scroll the selected page into view first\n\tif ( this.stackLayout.continuous && !this.scrolling ) {\n\t\tpromise = page.scrollElementIntoView();\n\t} else {\n\t\tpromise = $.Deferred().resolve();\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tpromise.done( function () {\n\t\t\tlayout.focus();\n\t\t} );\n\t}\n};\n\n/**\n * Focus the first input in the current page.\n *\n * If no page is selected, the first selectable page will be selected.\n * If the focus is already in an element on the current page, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {\n\tvar page,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\tpage = items[ itemIndex ];\n\t} else {\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !page && this.outlined ) {\n\t\tthis.selectFirstSelectablePage();\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( page.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\tpage.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the booklet layout and focus\n * on it.\n */\nOO.ui.BookletLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle outline widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setPage( item.getData() );\n\t}\n};\n\n/**\n * Check if booklet has an outline.\n *\n * @return {boolean} Booklet has an outline\n */\nOO.ui.BookletLayout.prototype.isOutlined = function () {\n\treturn this.outlined;\n};\n\n/**\n * Check if booklet has editing controls.\n *\n * @return {boolean} Booklet is editable\n */\nOO.ui.BookletLayout.prototype.isEditable = function () {\n\treturn this.editable;\n};\n\n/**\n * Check if booklet has a visible outline.\n *\n * @return {boolean} Outline is visible\n */\nOO.ui.BookletLayout.prototype.isOutlineVisible = function () {\n\treturn this.outlined && this.outlineVisible;\n};\n\n/**\n * Hide or show the outline.\n *\n * @param {boolean} [show] Show outline, omit to invert current state\n * @chainable\n */\nOO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {\n\tvar booklet = this;\n\n\tif ( this.outlined ) {\n\t\tshow = show === undefined ? !this.outlineVisible : !!show;\n\t\tthis.outlineVisible = show;\n\t\tthis.toggleMenu( show );\n\t\tif ( show && this.editable ) {\n\t\t\t// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798. Only necessary when\n\t\t\t// outline controls are present, delay matches transition on `.oo-ui-menuLayout-menu`.\n\t\t\tsetTimeout( function () {\n\t\t\t\tOO.ui.Element.static.reconsiderScrollbars( booklet.outlinePanel.$element[ 0 ] );\n\t\t\t}, 200 );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Find the page closest to the specified page.\n *\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.findClosestPage = function ( page ) {\n\tvar next, prev, level,\n\t\tpages = this.stackLayout.getItems(),\n\t\tindex = pages.indexOf( page );\n\n\tif ( index !== -1 ) {\n\t\tnext = pages[ index + 1 ];\n\t\tprev = pages[ index - 1 ];\n\t\t// Prefer adjacent pages at the same level\n\t\tif ( this.outlined ) {\n\t\t\tlevel = this.outlineSelectWidget.getItemFromData( page.getName() ).getLevel();\n\t\t\tif (\n\t\t\t\tprev &&\n\t\t\t\tlevel === this.outlineSelectWidget.getItemFromData( prev.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnext &&\n\t\t\t\tlevel === this.outlineSelectWidget.getItemFromData( next.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the page closest to the specified page.\n *\n * @deprecated 0.23.0 Use {@link OO.ui.BookletLayout#findClosestPage} instead.\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {\n\tOO.ui.warnDeprecation( 'BookletLayout#getClosestPage: Deprecated function. Use findClosestPage instead. See T76630.' );\n\treturn this.findClosestPage( page );\n};\n\n/**\n * Get the outline widget.\n *\n * If the booklet is not outlined, the method will return `null`.\n *\n * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined\n */\nOO.ui.BookletLayout.prototype.getOutline = function () {\n\treturn this.outlineSelectWidget;\n};\n\n/**\n * Get the outline controls widget.\n *\n * If the outline is not editable, the method will return `null`.\n *\n * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.\n */\nOO.ui.BookletLayout.prototype.getOutlineControls = function () {\n\treturn this.outlineControlsWidget;\n};\n\n/**\n * Get a page by its symbolic name.\n *\n * @param {string} name Symbolic name of page\n * @return {OO.ui.PageLayout|undefined} Page, if found\n */\nOO.ui.BookletLayout.prototype.getPage = function ( name ) {\n\treturn this.pages[ name ];\n};\n\n/**\n * Get the current page.\n *\n * @return {OO.ui.PageLayout|undefined} Current page, if found\n */\nOO.ui.BookletLayout.prototype.getCurrentPage = function () {\n\tvar name = this.getCurrentPageName();\n\treturn name ? this.getPage( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current page.\n *\n * @return {string|null} Symbolic name of the current page\n */\nOO.ui.BookletLayout.prototype.getCurrentPageName = function () {\n\treturn this.currentPageName;\n};\n\n/**\n * Add pages to the booklet layout\n *\n * When pages are added with the same names as existing pages, the existing pages will be\n * automatically removed before the new pages are added.\n *\n * @param {OO.ui.PageLayout[]} pages Pages to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n */\nOO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {\n\tvar i, len, name, page, item, currentIndex,\n\t\tstackLayoutPages = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove pages with same names\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutPages.indexOf( this.pages[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.pages[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removePages( remove );\n\t}\n\n\t// Add new pages\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tthis.pages[ page.getName() ] = page;\n\t\tif ( this.outlined ) {\n\t\t\titem = new OO.ui.OutlineOptionWidget( { data: name } );\n\t\t\tpage.setOutlineItem( item );\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.addItems( pages, index );\n\tthis.emit( 'add', pages, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified pages from the booklet layout.\n *\n * To remove all pages from the booklet, you may wish to use the #clearPages method instead.\n *\n * @param {OO.ui.PageLayout[]} pages An array of pages to remove\n * @fires remove\n * @chainable\n */\nOO.ui.BookletLayout.prototype.removePages = function ( pages ) {\n\tvar i, len, name, page,\n\t\titems = [];\n\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tdelete this.pages[ name ];\n\t\tif ( this.outlined ) {\n\t\t\titems.push( this.outlineSelectWidget.getItemFromData( name ) );\n\t\t\tpage.setOutlineItem( null );\n\t\t}\n\t}\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.removeItems( pages );\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Clear all pages from the booklet layout.\n *\n * To remove only a subset of pages from the booklet, use the #removePages method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.BookletLayout.prototype.clearPages = function () {\n\tvar i, len,\n\t\tpages = this.stackLayout.getItems();\n\n\tthis.pages = {};\n\tthis.currentPageName = null;\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.clearItems();\n\t\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\t\tpages[ i ].setOutlineItem( null );\n\t\t}\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Set the current page by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of page\n */\nOO.ui.BookletLayout.prototype.setPage = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpage = this.pages[ name ],\n\t\tpreviousPage = this.currentPageName && this.pages[ this.currentPageName ];\n\n\tif ( name !== this.currentPageName ) {\n\t\tif ( this.outlined ) {\n\t\t\tselectedItem = this.outlineSelectWidget.getSelectedItem();\n\t\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\t\tthis.outlineSelectWidget.selectItemByData( name );\n\t\t\t}\n\t\t}\n\t\tif ( page ) {\n\t\t\tif ( previousPage ) {\n\t\t\t\tpreviousPage.setActive( false );\n\t\t\t\t// Blur anything focused if the next page doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next page has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next page is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( page.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentPageName = name;\n\t\t\tpage.setActive( true );\n\t\t\tthis.stackLayout.setItem( page );\n\t\t\tif ( !this.stackLayout.continuous && previousPage ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous page should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', page );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable page.\n *\n * @chainable\n */\nOO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {\n\tif ( !this.outlineSelectWidget.getSelectedItem() ) {\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * IndexLayouts contain {@link OO.ui.TabPanelLayout tab panel layouts} as well as\n * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels and\n * select which one to display. By default, only one tab panel is displayed at a time. When a user\n * navigates to a new tab panel, the index layout automatically focuses on the first focusable element,\n * unless the default setting is changed.\n *\n * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication\n *\n *     @example\n *     // Example of a IndexLayout that contains two TabPanelLayouts.\n *\n *     function TabPanelOneLayout( name, config ) {\n *         TabPanelOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First tab panel</p>' );\n *     }\n *     OO.inheritClass( TabPanelOneLayout, OO.ui.TabPanelLayout );\n *     TabPanelOneLayout.prototype.setupTabItem = function () {\n *         this.tabItem.setLabel( 'Tab panel one' );\n *     };\n *\n *     var tabPanel1 = new TabPanelOneLayout( 'one' ),\n *         tabPanel2 = new OO.ui.TabPanelLayout( 'two', { label: 'Tab panel two' } );\n *\n *     tabPanel2.$element.append( '<p>Second tab panel</p>' );\n *\n *     var index = new OO.ui.IndexLayout();\n *\n *     index.addTabPanels ( [ tabPanel1, tabPanel2 ] );\n *     $( 'body' ).append( index.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all tab panels, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is displayed. Disabled on mobile.\n */\nOO.ui.IndexLayout = function OoUiIndexLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {}, config, { menuPosition: 'top' } );\n\n\t// Parent constructor\n\tOO.ui.IndexLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentTabPanelName = null;\n\tthis.tabPanels = {};\n\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.$content.append( this.stackLayout.$element );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\n\tthis.tabSelectWidget = new OO.ui.TabSelectWidget();\n\tthis.tabPanel = new OO.ui.PanelLayout( {\n\t\texpanded: this.expanded\n\t} );\n\tthis.$menu.append( this.tabPanel.$element );\n\n\tthis.toggleMenu( true );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tthis.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indexLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );\n\tthis.tabPanel.$element\n\t\t.addClass( 'oo-ui-indexLayout-tabPanel' )\n\t\t.append( this.tabSelectWidget.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the index layout.\n * @event set\n * @param {OO.ui.TabPanelLayout} tabPanel Current tab panel\n */\n\n/**\n * An 'add' event is emitted when tab panels are {@link #addTabPanels added} to the index layout.\n *\n * @event add\n * @param {OO.ui.TabPanelLayout[]} tabPanel Added tab panels\n * @param {number} index Index tab panels were added at\n */\n\n/**\n * A 'remove' event is emitted when tab panels are {@link #clearTabPanels cleared} or\n * {@link #removeTabPanels removed} from the index.\n *\n * @event remove\n * @param {OO.ui.TabPanelLayout[]} tabPanel Removed tab panels\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusing event\n */\nOO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the tab panel that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-tabPanelLayout' );\n\tfor ( name in this.tabPanels ) {\n\t\t// Check for tab panel match, exclude current tab panel to find only tab panel changes\n\t\tif ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentTabPanelName ) {\n\t\t\tthis.setTabPanel( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} tabPanel The tab panel that is now the current panel\n */\nOO.ui.IndexLayout.prototype.onStackLayoutSet = function ( tabPanel ) {\n\t// If everything is unselected, do nothing\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Focus the first input in the current tab panel.\n *\n * If no tab panel is selected, the first selectable tab panel will be selected.\n * If the focus is already in an element on the current tab panel, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {\n\tvar tabPanel,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\ttabPanel = items[ itemIndex ];\n\t} else {\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !tabPanel ) {\n\t\tthis.selectFirstSelectableTabPanel();\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( tabPanel.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\ttabPanel.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the index layout and focus\n * on it.\n */\nOO.ui.IndexLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle tab widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setTabPanel( item.getData() );\n\t}\n};\n\n/**\n * Get the tab panel closest to the specified tab panel.\n *\n * @param {OO.ui.TabPanelLayout} tabPanel Tab panel to use as a reference point\n * @return {OO.ui.TabPanelLayout|null} Tab panel closest to the specified\n */\nOO.ui.IndexLayout.prototype.getClosestTabPanel = function ( tabPanel ) {\n\tvar next, prev, level,\n\t\ttabPanels = this.stackLayout.getItems(),\n\t\tindex = tabPanels.indexOf( tabPanel );\n\n\tif ( index !== -1 ) {\n\t\tnext = tabPanels[ index + 1 ];\n\t\tprev = tabPanels[ index - 1 ];\n\t\t// Prefer adjacent tab panels at the same level\n\t\tlevel = this.tabSelectWidget.getItemFromData( tabPanel.getName() ).getLevel();\n\t\tif (\n\t\t\tprev &&\n\t\t\tlevel === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()\n\t\t) {\n\t\t\treturn prev;\n\t\t}\n\t\tif (\n\t\t\tnext &&\n\t\t\tlevel === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()\n\t\t) {\n\t\t\treturn next;\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the tabs widget.\n *\n * @return {OO.ui.TabSelectWidget} Tabs widget\n */\nOO.ui.IndexLayout.prototype.getTabs = function () {\n\treturn this.tabSelectWidget;\n};\n\n/**\n * Get a tab panel by its symbolic name.\n *\n * @param {string} name Symbolic name of tab panel\n * @return {OO.ui.TabPanelLayout|undefined} Tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getTabPanel = function ( name ) {\n\treturn this.tabPanels[ name ];\n};\n\n/**\n * Get the current tab panel.\n *\n * @return {OO.ui.TabPanelLayout|undefined} Current tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanel = function () {\n\tvar name = this.getCurrentTabPanelName();\n\treturn name ? this.getTabPanel( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current tab panel.\n *\n * @return {string|null} Symbolic name of the current tab panel\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanelName = function () {\n\treturn this.currentTabPanelName;\n};\n\n/**\n * Add tab panels to the index layout\n *\n * When tab panels are added with the same names as existing tab panels, the existing tab panels\n * will be automatically removed before the new tab panels are added.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels Tab panels to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n */\nOO.ui.IndexLayout.prototype.addTabPanels = function ( tabPanels, index ) {\n\tvar i, len, name, tabPanel, item, currentIndex,\n\t\tstackLayoutTabPanels = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove tab panels with same names\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.tabPanels, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutTabPanels.indexOf( this.tabPanels[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.tabPanels[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeTabPanels( remove );\n\t}\n\n\t// Add new tab panels\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tthis.tabPanels[ tabPanel.getName() ] = tabPanel;\n\t\titem = new OO.ui.TabOptionWidget( { data: name } );\n\t\ttabPanel.setTabItem( item );\n\t\titems.push( item );\n\t}\n\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.addItems( tabPanels, index );\n\tthis.emit( 'add', tabPanels, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified tab panels from the index layout.\n *\n * To remove all tab panels from the index, you may wish to use the #clearTabPanels method instead.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels An array of tab panels to remove\n * @fires remove\n * @chainable\n */\nOO.ui.IndexLayout.prototype.removeTabPanels = function ( tabPanels ) {\n\tvar i, len, name, tabPanel,\n\t\titems = [];\n\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tdelete this.tabPanels[ name ];\n\t\titems.push( this.tabSelectWidget.getItemFromData( name ) );\n\t\ttabPanel.setTabItem( null );\n\t}\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.removeItems( tabPanels );\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Clear all tab panels from the index layout.\n *\n * To remove only a subset of tab panels from the index, use the #removeTabPanels method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.IndexLayout.prototype.clearTabPanels = function () {\n\tvar i, len,\n\t\ttabPanels = this.stackLayout.getItems();\n\n\tthis.tabPanels = {};\n\tthis.currentTabPanelName = null;\n\tthis.tabSelectWidget.clearItems();\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanels[ i ].setTabItem( null );\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Set the current tab panel by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of tab panel\n */\nOO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\ttabPanel = this.tabPanels[ name ],\n\t\tpreviousTabPanel = this.currentTabPanelName && this.tabPanels[ this.currentTabPanelName ];\n\n\tif ( name !== this.currentTabPanelName ) {\n\t\tselectedItem = this.tabSelectWidget.getSelectedItem();\n\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\tthis.tabSelectWidget.selectItemByData( name );\n\t\t}\n\t\tif ( tabPanel ) {\n\t\t\tif ( previousTabPanel ) {\n\t\t\t\tpreviousTabPanel.setActive( false );\n\t\t\t\t// Blur anything focused if the next tab panel doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next tab panel has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next tab panel is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( tabPanel.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentTabPanelName = name;\n\t\t\ttabPanel.setActive( true );\n\t\t\tthis.stackLayout.setItem( tabPanel );\n\t\t\tif ( !this.stackLayout.continuous && previousTabPanel ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous tab panel should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', tabPanel );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable tab panel.\n *\n * @chainable\n */\nOO.ui.IndexLayout.prototype.selectFirstSelectableTabPanel = function () {\n\tif ( !this.tabSelectWidget.getSelectedItem() ) {\n\t\tthis.tabSelectWidget.selectItem( this.tabSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * ToggleWidget implements basic behavior of widgets with an on/off state.\n * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle’s initial on/off state.\n *  By default, the toggle is in the 'off' state.\n */\nOO.ui.ToggleWidget = function OoUiToggleWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.value = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-toggleWidget' );\n\tthis.setValue( !!config.value );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {boolean} value Value representing the new state of the toggle\n */\n\n/* Methods */\n\n/**\n * Get the value representing the toggle’s state.\n *\n * @return {boolean} The on/off state of the toggle\n */\nOO.ui.ToggleWidget.prototype.getValue = function () {\n\treturn this.value;\n};\n\n/**\n * Set the state of the toggle: `true` for 'on', `false` for 'off'.\n *\n * @param {boolean} value The state of the toggle\n * @fires change\n * @chainable\n */\nOO.ui.ToggleWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-on', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );\n\t}\n\treturn this;\n};\n","/**\n * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a\n * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be\n * configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},\n * {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},\n * and {@link OO.ui.mixin.LabelElement labels}. Please see\n * the [OOjs UI documentation][1] on MediaWiki for more information.\n *\n *     @example\n *     // Toggle buttons in the 'off' and 'on' state.\n *     var toggleButton1 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button off'\n *     } );\n *     var toggleButton2 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button on',\n *         value: true\n *     } );\n *     // Append the buttons to the DOM.\n *     $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle button’s initial on/off\n *  state. By default, the button is in the 'off' state.\n */\nOO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { active: this.active } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleButtonWidget' )\n\t\t.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.ToggleButtonWidget.prototype.onAction = function () {\n\tthis.setValue( !this.value );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( value !== this.value ) {\n\t\t// Might be called from parent constructor before ButtonElement constructor\n\t\tif ( this.$button ) {\n\t\t\tthis.$button.attr( 'aria-pressed', value.toString() );\n\t\t}\n\t\tthis.setActive( value );\n\t}\n\n\t// Parent method\n\tOO.ui.ToggleButtonWidget.parent.prototype.setValue.call( this, value );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button.removeAttr( 'aria-pressed' );\n\t}\n\tOO.ui.mixin.ButtonElement.prototype.setButtonElement.call( this, $button );\n\tthis.$button.attr( 'aria-pressed', this.value.toString() );\n};\n","/**\n * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean\n * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented\n * visually by a slider in the leftmost position.\n *\n *     @example\n *     // Toggle switches in the 'off' and 'on' position.\n *     var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();\n *     var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {\n *         value: true\n *     } );\n *\n *     // Create a FieldsetLayout to layout and label switches\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *        label: 'Toggle switches'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),\n *         new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.\n *  By default, the toggle switch is in the 'off' position.\n */\nOO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ToggleSwitchWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Properties\n\tthis.dragging = false;\n\tthis.dragStart = null;\n\tthis.sliding = false;\n\tthis.$glow = $( '<span>' );\n\tthis.$grip = $( '<span>' );\n\n\t// Events\n\tthis.$element.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );\n\tthis.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleSwitchWidget' )\n\t\t.attr( 'role', 'checkbox' )\n\t\t.append( this.$glow, this.$grip );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n */\nOO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.setValue( !this.value );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tthis.setValue( !this.value );\n\t\treturn false;\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.setValue = function ( value ) {\n\tOO.ui.ToggleSwitchWidget.parent.prototype.setValue.call( this, value );\n\tthis.$element.attr( 'aria-checked', this.value.toString() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.setValue( !this.value );\n\t}\n\tthis.focus();\n};\n","/**\n * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.\n * Controls include moving items up and down, removing items, and adding different kinds of items.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n * @mixins OO.ui.mixin.IconElement\n *\n * @constructor\n * @param {OO.ui.OutlineSelectWidget} outline Outline to control\n * @param {Object} [config] Configuration options\n * @cfg {Object} [abilities] List of abilties\n * @cfg {boolean} [abilities.move=true] Allow moving movable items\n * @cfg {boolean} [abilities.remove=true] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( outline ) && config === undefined ) {\n\t\tconfig = outline;\n\t\toutline = config.outline;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { icon: 'add' }, config );\n\n\t// Parent constructor\n\tOO.ui.OutlineControlsWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\n\t// Properties\n\tthis.outline = outline;\n\tthis.$movers = $( '<div>' );\n\tthis.upButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'collapse',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-up' )\n\t} );\n\tthis.downButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'expand',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-down' )\n\t} );\n\tthis.removeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'trash',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-remove' )\n\t} );\n\tthis.abilities = { move: true, remove: true };\n\n\t// Events\n\toutline.connect( this, {\n\t\tselect: 'onOutlineChange',\n\t\tadd: 'onOutlineChange',\n\t\tremove: 'onOutlineChange'\n\t} );\n\tthis.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );\n\tthis.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );\n\tthis.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineControlsWidget' );\n\tthis.$group.addClass( 'oo-ui-outlineControlsWidget-items' );\n\tthis.$movers\n\t\t.addClass( 'oo-ui-outlineControlsWidget-movers' )\n\t\t.append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );\n\tthis.$element.append( this.$icon, this.$group, this.$movers );\n\tthis.setAbilities( config.abilities || {} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.GroupElement );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.IconElement );\n\n/* Events */\n\n/**\n * @event move\n * @param {number} places Number of places to move\n */\n\n/**\n * @event remove\n */\n\n/* Methods */\n\n/**\n * Set abilities.\n *\n * @param {Object} abilities List of abilties\n * @param {boolean} [abilities.move] Allow moving movable items\n * @param {boolean} [abilities.remove] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {\n\tvar ability;\n\n\tfor ( ability in this.abilities ) {\n\t\tif ( abilities[ ability ] !== undefined ) {\n\t\t\tthis.abilities[ ability ] = !!abilities[ ability ];\n\t\t}\n\t}\n\n\tthis.onOutlineChange();\n};\n\n/**\n * Handle outline change events.\n *\n * @private\n */\nOO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {\n\tvar i, len, firstMovable, lastMovable,\n\t\titems = this.outline.getItems(),\n\t\tselectedItem = this.outline.getSelectedItem(),\n\t\tmovable = this.abilities.move && selectedItem && selectedItem.isMovable(),\n\t\tremovable = this.abilities.remove && selectedItem && selectedItem.isRemovable();\n\n\tif ( movable ) {\n\t\ti = -1;\n\t\tlen = items.length;\n\t\twhile ( ++i < len ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tfirstMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ti = len;\n\t\twhile ( i-- ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tlastMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tthis.upButton.setDisabled( !movable || selectedItem === firstMovable );\n\tthis.downButton.setDisabled( !movable || selectedItem === lastMovable );\n\tthis.removeButton.setDisabled( !removable );\n};\n","/**\n * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain\n * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [level] Indentation level\n * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.\n */\nOO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineOptionWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.level = 0;\n\tthis.movable = !!config.movable;\n\tthis.removable = !!config.removable;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineOptionWidget' );\n\tthis.setLevel( config.level );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.highlightable = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';\n\n/**\n * @static\n * @inheritable\n * @property {number}\n */\nOO.ui.OutlineOptionWidget.static.levels = 3;\n\n/* Methods */\n\n/**\n * Check if item is movable.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is movable\n */\nOO.ui.OutlineOptionWidget.prototype.isMovable = function () {\n\treturn this.movable;\n};\n\n/**\n * Check if item is removable.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is removable\n */\nOO.ui.OutlineOptionWidget.prototype.isRemovable = function () {\n\treturn this.removable;\n};\n\n/**\n * Get indentation level.\n *\n * @return {number} Indentation level\n */\nOO.ui.OutlineOptionWidget.prototype.getLevel = function () {\n\treturn this.level;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setPressed = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setPressed.call( this, state );\n\tif ( this.pressed ) {\n\t\tthis.setFlags( { progressive: true } );\n\t} else if ( !this.selected ) {\n\t\tthis.setFlags( { progressive: false } );\n\t}\n\treturn this;\n};\n\n/**\n * Set movability.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} movable Item is movable\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {\n\tthis.movable = !!movable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Set removability.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} removable Item is removable\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {\n\tthis.removable = !!removable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setSelected.call( this, state );\n\tif ( this.selected ) {\n\t\tthis.setFlags( { progressive: true } );\n\t} else {\n\t\tthis.setFlags( { progressive: false } );\n\t}\n\treturn this;\n};\n\n/**\n * Set indentation level.\n *\n * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {\n\tvar levels = this.constructor.static.levels,\n\t\tlevelClass = this.constructor.static.levelClass,\n\t\ti = levels;\n\n\tthis.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;\n\twhile ( i-- ) {\n\t\tif ( this.level === i ) {\n\t\t\tthis.$element.addClass( levelClass + i );\n\t\t} else {\n\t\t\tthis.$element.removeClass( levelClass + i );\n\t\t}\n\t}\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n","/**\n * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}\n * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.OutlineSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * ButtonOptionWidget is a special type of {@link OO.ui.mixin.ButtonElement button element} that\n * can be selected and configured with data. The class is\n * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the\n * [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonOptionWidget' );\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * Allow button mouse down events to pass through so they can be handled by the parent select widget\n *\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.highlightable = false;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.ButtonOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.setActive( state );\n\t}\n\n\treturn this;\n};\n","/**\n * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains\n * button options and is used together with\n * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for\n * highlighting, choosing, and selecting mutually exclusive options. Please see\n * the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets\n *     var option1 = new OO.ui.ButtonOptionWidget( {\n *         data: 1,\n *         label: 'Option 1',\n *         title: 'Button option 1'\n *     } );\n *\n *     var option2 = new OO.ui.ButtonOptionWidget( {\n *         data: 2,\n *         label: 'Option 2',\n *         title: 'Button option 2'\n *     } );\n *\n *     var option3 = new OO.ui.ButtonOptionWidget( {\n *         data: 3,\n *         label: 'Option 3',\n *         title: 'Button option 3'\n *     } );\n *\n *     var buttonSelect=new OO.ui.ButtonSelectWidget( {\n *         items: [ option1, option2, option3 ]\n *     } );\n *     $( 'body' ).append( buttonSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ButtonSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain\n * {@link OO.ui.TabPanelLayout tab panel layouts}. See {@link OO.ui.IndexLayout IndexLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TabOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabOptionWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.TabOptionWidget.static.highlightable = false;\n","/**\n * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}\n *\n * **Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.TabSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * CapsuleItemWidgets are used within a {@link OO.ui.CapsuleMultiselectWidget\n * CapsuleMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CapsuleItemWidget = function OoUiCapsuleItemWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.CapsuleItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} ).on( 'click', this.onCloseClick.bind( this ) );\n\n\tthis.on( 'disable', function ( disabled ) {\n\t\tthis.closeButton.setDisabled( disabled );\n\t}.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.on( {\n\t\t\tclick: this.onClick.bind( this ),\n\t\t\tkeydown: this.onKeyDown.bind( this )\n\t\t} )\n\t\t.addClass( 'oo-ui-capsuleItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CapsuleItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle close icon clicks\n */\nOO.ui.CapsuleItemWidget.prototype.onCloseClick = function () {\n\tvar element = this.getElementGroup();\n\n\tif ( element && $.isFunction( element.removeItems ) ) {\n\t\telement.removeItems( [ this ] );\n\t\telement.focus();\n\t}\n};\n\n/**\n * Handle click event for the entire capsule\n */\nOO.ui.CapsuleItemWidget.prototype.onClick = function () {\n\tvar element = this.getElementGroup();\n\n\tif ( !this.isDisabled() && element && $.isFunction( element.editItem ) ) {\n\t\telement.editItem( this );\n\t}\n};\n\n/**\n * Handle keyDown event for the entire capsule\n *\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.CapsuleItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar element = this.getElementGroup();\n\n\tif ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\telement.removeItems( [ this ] );\n\t\telement.focus();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\telement.editItem( this );\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.LEFT ) {\n\t\telement.getPreviousItem( this ).focus();\n\t} else if ( e.keyCode === OO.ui.Keys.RIGHT ) {\n\t\telement.getNextItem( this ).focus();\n\t}\n};\n","/**\n * CapsuleMultiselectWidgets are something like a {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows for selecting multiple values.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A CapsuleMultiselectWidget.\n *     var capsule = new OO.ui.CapsuleMultiselectWidget( {\n *         label: 'CapsuleMultiselectWidget',\n *         selected: [ 'Option 1', 'Option 3' ],\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 1',\n *                     label: 'Option One'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 2',\n *                     label: 'Option Two'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 3',\n *                     label: 'Option Three'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 4',\n *                     label: 'Option Four'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 5',\n *                     label: 'Option Five'\n *                 } )\n *             ]\n *         }\n *     } );\n *     $( 'body' ).append( capsule.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n * @mixins OO.ui.mixin.PopupElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @uses OO.ui.CapsuleItemWidget\n * @uses OO.ui.MenuSelectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [placeholder] Placeholder text\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if not present in the menu.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added.\n * @cfg {Object} [menu] (required) Configuration options to pass to the\n *  {@link OO.ui.MenuSelectWidget menu select widget}.\n * @cfg {Object} [popup] Configuration options to pass to the {@link OO.ui.PopupWidget popup widget}.\n *  If specified, this popup will be shown instead of the menu (but the menu\n *  will still be used for item labels and allowArbitrary=false). The widgets\n *  in the popup should use {@link #addItemsFromData} or {@link #addItems} as necessary.\n * @cfg {jQuery} [$overlay=this.$element] Render the menu or popup into a separate layer.\n *  This configuration is useful in cases where the expanded menu is larger than\n *  its containing `<div>`. The specified overlay layer is usually on top of\n *  the containing `<div>` and has a larger area. By default, the menu uses\n *  relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.CapsuleMultiselectWidget = function OoUiCapsuleMultiselectWidget( config ) {\n\tvar $tabFocus;\n\n\t// Parent constructor\n\tOO.ui.CapsuleMultiselectWidget.parent.call( this, config );\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tallowArbitrary: false,\n\t\tallowDuplicates: false,\n\t\t$overlay: this.$element\n\t}, config );\n\n\t// Properties (must be set before mixin constructor calls)\n\tthis.$handle = $( '<div>' );\n\tthis.$input = config.popup ? null : $( '<input>' );\n\tif ( config.placeholder !== undefined && config.placeholder !== '' ) {\n\t\tthis.$input.attr( 'placeholder', config.placeholder );\n\t}\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\tif ( config.popup ) {\n\t\tconfig.popup = $.extend( {}, config.popup, {\n\t\t\talign: 'forwards',\n\t\t\tanchor: false\n\t\t} );\n\t\tOO.ui.mixin.PopupElement.call( this, config );\n\t\t$tabFocus = $( '<span>' );\n\t\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: $tabFocus } ) );\n\t} else {\n\t\tthis.popup = null;\n\t\t$tabFocus = null;\n\t\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );\n\t}\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\n\t// Properties\n\tthis.$content = $( '<div>' );\n\tthis.allowArbitrary = config.allowArbitrary;\n\tthis.allowDuplicates = config.allowDuplicates;\n\tthis.$overlay = config.$overlay;\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend(\n\t\t{\n\t\t\twidget: this,\n\t\t\t$input: this.$input,\n\t\t\t$floatableContainer: this.$element,\n\t\t\tfilterFromInput: true,\n\t\t\tdisabled: this.isDisabled()\n\t\t},\n\t\tconfig.menu\n\t) );\n\n\t// Events\n\tif ( this.popup ) {\n\t\t$tabFocus.on( {\n\t\t\tfocus: this.focus.bind( this )\n\t\t} );\n\t\tthis.popup.$element.on( 'focusout', this.onPopupFocusOut.bind( this ) );\n\t\tif ( this.popup.$autoCloseIgnore ) {\n\t\t\tthis.popup.$autoCloseIgnore.on( 'focusout', this.onPopupFocusOut.bind( this ) );\n\t\t}\n\t\tthis.popup.connect( this, {\n\t\t\ttoggle: function ( visible ) {\n\t\t\t\t$tabFocus.toggle( !visible );\n\t\t\t}\n\t\t} );\n\t} else {\n\t\tthis.$input.on( {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t\tkeypress: this.onKeyPress.bind( this )\n\t\t} );\n\t}\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle',\n\t\tadd: 'onMenuItemsChange',\n\t\tremove: 'onMenuItemsChange'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialization\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t\tthis.$input.attr( {\n\t\t\trole: 'combobox',\n\t\t\t'aria-owns': this.menu.getElementId(),\n\t\t\t'aria-autocomplete': 'list'\n\t\t} );\n\t}\n\tif ( config.data ) {\n\t\tthis.setItemsFromData( config.data );\n\t}\n\tthis.$content.addClass( 'oo-ui-capsuleMultiselectWidget-content' )\n\t\t.append( this.$group );\n\tthis.$group.addClass( 'oo-ui-capsuleMultiselectWidget-group' );\n\tthis.$handle.addClass( 'oo-ui-capsuleMultiselectWidget-handle' )\n\t\t.append( this.$indicator, this.$icon, this.$content );\n\tthis.$element.addClass( 'oo-ui-capsuleMultiselectWidget' )\n\t\t.append( this.$handle );\n\tif ( this.popup ) {\n\t\tthis.popup.$element.addClass( 'oo-ui-capsuleMultiselectWidget-popup' );\n\t\tthis.$content.append( $tabFocus );\n\t\tthis.$overlay.append( this.popup.$element );\n\t} else {\n\t\tthis.$content.append( this.$input );\n\t\tthis.$overlay.append( this.menu.$element );\n\t}\n\tif ( $tabFocus ) {\n\t\t$tabFocus.addClass( 'oo-ui-capsuleMultiselectWidget-focusTrap' );\n\t}\n\n\t// Input size needs to be calculated after everything else is rendered\n\tsetTimeout( function () {\n\t\tif ( this.$input ) {\n\t\t\tthis.updateInputSize();\n\t\t}\n\t}.bind( this ) );\n\n\tthis.onMenuItemsChange();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CapsuleMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.GroupElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.PopupElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.IconElement );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of selected items changes.\n *\n * @param {Mixed[]} datas Data of the now-selected items\n */\n\n/**\n * @event resize\n *\n * A resize event is emitted when the widget's dimensions change to accomodate newly added items or\n * current user input.\n */\n\n/* Methods */\n\n/**\n * Construct a OO.ui.CapsuleItemWidget (or a subclass thereof) from given label and data.\n * May return `null` if the given label and data are not valid.\n *\n * @protected\n * @param {Mixed} data Custom data of any type.\n * @param {string} label The label text.\n * @return {OO.ui.CapsuleItemWidget|null}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.createItemWidget = function ( data, label ) {\n\tif ( label === '' ) {\n\t\treturn null;\n\t}\n\treturn new OO.ui.CapsuleItemWidget( { data: data, label: label } );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getInputId = function () {\n\tif ( !this.$input ) {\n\t\treturn null;\n\t}\n\treturn OO.ui.mixin.TabIndexedElement.prototype.getInputId.call( this );\n};\n\n/**\n * Get the data of the items in the capsule\n *\n * @return {Mixed[]}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getItemsData = function () {\n\treturn this.getItems().map( function ( item ) {\n\t\treturn item.data;\n\t} );\n};\n\n/**\n * Set the items in the capsule by providing data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.setItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\tmenu = this.menu,\n\t\titems = this.getItems();\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar j, label,\n\t\t\titem = menu.getItemFromData( data );\n\n\t\tif ( item ) {\n\t\t\tlabel = item.label;\n\t\t} else if ( widget.allowArbitrary ) {\n\t\t\tlabel = String( data );\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\titem = null;\n\t\tfor ( j = 0; j < items.length; j++ ) {\n\t\t\tif ( items[ j ].data === data && items[ j ].label === label ) {\n\t\t\t\titem = items[ j ];\n\t\t\t\titems.splice( j, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif ( !item ) {\n\t\t\titem = widget.createItemWidget( data, label );\n\t\t}\n\t\tif ( item ) {\n\t\t\twidget.addItems( [ item ], i );\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\twidget.removeItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * Add items to the capsule by providing their data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\tmenu = this.menu,\n\t\titems = [];\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar item;\n\n\t\tif ( !widget.getItemFromData( data ) || widget.allowDuplicates ) {\n\t\t\titem = menu.getItemFromData( data );\n\t\t\tif ( item ) {\n\t\t\t\titem = widget.createItemWidget( data, item.label );\n\t\t\t} else if ( widget.allowArbitrary ) {\n\t\t\t\titem = widget.createItemWidget( data, String( data ) );\n\t\t\t}\n\t\t\tif ( item ) {\n\t\t\t\titems.push( item );\n\t\t\t}\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\tthis.addItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * Add items to the capsule by providing a label\n *\n * @param {string} label\n * @return {boolean} Whether the item was added or not\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItemFromLabel = function ( label ) {\n\tvar item, items;\n\titem = this.menu.getItemFromLabel( label, true );\n\tif ( item ) {\n\t\tthis.addItemsFromData( [ item.data ] );\n\t\treturn true;\n\t} else if ( this.allowArbitrary ) {\n\t\titems = this.getItems();\n\t\tthis.addItemsFromData( [ label ] );\n\t\treturn !OO.compare( this.getItems(), items );\n\t}\n\treturn false;\n};\n\n/**\n * Remove items by data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.removeItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\titems = [];\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar item = widget.getItemFromData( data );\n\t\tif ( item ) {\n\t\t\titems.push( item );\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\tthis.removeItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItems = function ( items ) {\n\tvar same, i, l,\n\t\toldItems = this.items.slice();\n\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items );\n\n\tif ( this.items.length !== oldItems.length ) {\n\t\tsame = false;\n\t} else {\n\t\tsame = true;\n\t\tfor ( i = 0, l = oldItems.length; same && i < l; i++ ) {\n\t\t\tsame = same && this.items[ i ] === oldItems[ i ];\n\t\t}\n\t}\n\tif ( !same ) {\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\n\treturn this;\n};\n\n/**\n * Removes the item from the list and copies its label to `this.$input`.\n *\n * @param {Object} item\n */\nOO.ui.CapsuleMultiselectWidget.prototype.editItem = function ( item ) {\n\tthis.addItemFromLabel( this.$input.val() );\n\tthis.clearInput();\n\tthis.$input.val( item.label );\n\tthis.updateInputSize();\n\tthis.focus();\n\tthis.menu.updateItemVisibility(); // Hack, we shouldn't be calling this method directly\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.removeItems = function ( items ) {\n\tvar same, i, l,\n\t\toldItems = this.items.slice();\n\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( this.items.length !== oldItems.length ) {\n\t\tsame = false;\n\t} else {\n\t\tsame = true;\n\t\tfor ( i = 0, l = oldItems.length; same && i < l; i++ ) {\n\t\t\tsame = same && this.items[ i ] === oldItems[ i ];\n\t\t}\n\t}\n\tif ( !same ) {\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.clearItems = function () {\n\tif ( this.items.length ) {\n\t\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\treturn this;\n};\n\n/**\n * Given an item, returns the item after it. If its the last item,\n * returns `this.$input`. If no item is passed, returns the very first\n * item.\n *\n * @param {OO.ui.CapsuleItemWidget} [item]\n * @return {OO.ui.CapsuleItemWidget|jQuery|boolean}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex;\n\n\tif ( item === undefined ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\titemIndex = this.items.indexOf( item );\n\tif ( itemIndex < 0 ) { // Item not in list\n\t\treturn false;\n\t} else if ( itemIndex === this.items.length - 1 ) { // Last item\n\t\treturn this.$input;\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If its the first item,\n * returns `this.$input`. If no item is passed, returns the very last\n * item.\n *\n * @param {OO.ui.CapsuleItemWidget} [item]\n * @return {OO.ui.CapsuleItemWidget|jQuery|boolean}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex;\n\n\tif ( item === undefined ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\titemIndex = this.items.indexOf( item );\n\tif ( itemIndex < 0 ) { // Item not in list\n\t\treturn false;\n\t} else if ( itemIndex === 0 ) { // First item\n\t\treturn this.$input;\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Get the capsule widget's menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Handle focus events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onInputFocus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.updateInputSize();\n\t\tthis.menu.toggle( true );\n\t}\n};\n\n/**\n * Handle blur events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.addItemFromLabel( this.$input.val() );\n\tthis.clearInput();\n};\n\n/**\n * Handles popup focus out events.\n *\n * @private\n * @param {jQuery.Event} e Focus out event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onPopupFocusOut = function () {\n\tvar widget = this.popup;\n\n\tsetTimeout( function () {\n\t\tif (\n\t\t\twidget.isVisible() &&\n\t\t\t!OO.ui.contains( widget.$element.add( widget.$autoCloseIgnore ).get(), document.activeElement, true )\n\t\t) {\n\t\t\twidget.toggle( false );\n\t\t}\n\t} );\n};\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t} else {\n\t\tthis.updateInputSize();\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ESCAPE ) {\n\t\t\tthis.clearInput();\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.popup ) {\n\t\t\tthis.menu.toggle( true );\n\t\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\t\tif ( this.addItemFromLabel( this.$input.val() ) ) {\n\t\t\t\t\tthis.clearInput();\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Make sure the input gets resized.\n\t\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\t}\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\tthis.$input.val() === '' &&\n\t\tthis.items.length\n\t) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\tif ( e.metaKey || e.ctrlKey ) {\n\t\t\t\tthis.removeItems( this.items.slice( -1 ) );\n\t\t\t} else {\n\t\t\t\tthis.editItem( this.items[ this.items.length - 1 ] );\n\t\t\t}\n\t\t\treturn false;\n\t\t} else if ( e.keyCode === OO.ui.Keys.LEFT ) {\n\t\t\tthis.getPreviousItem().focus();\n\t\t} else if ( e.keyCode === OO.ui.Keys.RIGHT ) {\n\t\t\tthis.getNextItem().focus();\n\t\t}\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n *\n * @private\n * @param {jQuery.Event} e Event of some sort\n */\nOO.ui.CapsuleMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.$input && !this.isDisabled() ) {\n\t\tthis.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.$input.val() === '' &&\n\t\t\tthis.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.$input.val( this.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.$input[ 0 ].scrollWidth;\n\t\t\tthis.$input.val( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 10;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 10;\n\t\t}\n\t\tthis.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so, update menu position and emit 'resize' event.\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.menu.position();\n\t\tif ( this.popup ) {\n\t\t\tthis.popup.updateDimensions();\n\t\t}\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Handle menu choose events.\n *\n * @private\n * @param {OO.ui.OptionWidget} item Chosen item\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuChoose = function ( item ) {\n\tif ( item && item.isVisible() ) {\n\t\tthis.addItemsFromData( [ item.getData() ] );\n\t\tthis.clearInput();\n\t}\n};\n\n/**\n * Handle menu toggle events.\n *\n * @private\n * @param {boolean} isVisible Menu toggle event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tthis.$element.toggleClass( 'oo-ui-capsuleMultiselectWidget-open', isVisible );\n};\n\n/**\n * Handle menu item change events.\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuItemsChange = function () {\n\tthis.setItemsFromData( this.getItemsData() );\n\tthis.$element.toggleClass( 'oo-ui-capsuleMultiselectWidget-empty', this.menu.isEmpty() );\n};\n\n/**\n * Clear the input field\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.clearInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.val( '' );\n\t\tthis.updateInputSize();\n\t}\n\tif ( this.popup ) {\n\t\tthis.popup.toggle( false );\n\t}\n\tthis.menu.toggle( false );\n\tthis.menu.selectItem();\n\tthis.menu.highlightItem();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.setDisabled = function ( disabled ) {\n\tvar i, len;\n\n\t// Parent method\n\tOO.ui.CapsuleMultiselectWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t}\n\tif ( this.menu ) {\n\t\tthis.menu.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.popup ) {\n\t\tthis.popup.setDisabled( this.isDisabled() );\n\t}\n\n\tif ( this.items ) {\n\t\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\t\tthis.items[ i ].updateDisabled();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.CapsuleMultiselectWidget.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tif ( this.popup ) {\n\t\t\tthis.popup.setSize( this.$handle.outerWidth() );\n\t\t\tthis.popup.toggle( true );\n\t\t\tOO.ui.findFocusable( this.popup.$element ).focus();\n\t\t} else {\n\t\t\tOO.ui.mixin.TabIndexedElement.prototype.focus.call( this );\n\t\t}\n\t}\n\treturn this;\n};\n","/**\n * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget\n * TagMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.DraggableElement\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [valid=true] Item is valid\n */\nOO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.DraggableElement.call( this, config );\n\n\tthis.valid = config.valid === undefined ? true : !!config.valid;\n\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} );\n\tthis.closeButton.setDisabled( this.isDisabled() );\n\n\t// Events\n\tthis.closeButton\n\t\t.connect( this, { click: 'remove' } );\n\tthis.$element\n\t\t.on( 'click', this.select.bind( this ) )\n\t\t.on( 'keydown', this.onKeyDown.bind( this ) )\n\t\t// Prevent propagation of mousedown; the tag item \"lives\" in the\n\t\t// clickable area of the TagMultiselectWidget, which listens to\n\t\t// mousedown to open the menu or popup. We want to prevent that\n\t\t// for clicks specifically on the tag itself, so the actions taken\n\t\t// are more deliberate. When the tag is clicked, it will emit the\n\t\t// selection event (similar to how #OO.ui.MultioptionWidget emits 'change')\n\t\t// and can be handled separately.\n\t\t.on( 'mousedown', function ( e ) { e.stopPropagation(); } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event remove\n *\n * A remove action was performed on the item\n */\n\n/**\n * @event navigate\n * @param {string} direction Direction of the movement, forward or backwards\n *\n * A navigate action was performed on the item\n */\n\n/**\n * @event select\n *\n * The tag widget was selected. This can occur when the widget\n * is either clicked or enter was pressed on it.\n */\n\n/**\n * @event valid\n * @param {boolean} isValid Item is valid\n *\n * Item validity has changed\n */\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {\n\t// Parent method\n\tOO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );\n\n\tif ( this.closeButton ) {\n\t\tthis.closeButton.setDisabled( state );\n\t}\n\treturn this;\n};\n\n/**\n * Handle removal of the item\n *\n * This is mainly for extensibility concerns, so other children\n * of this class can change the behavior if they need to. This\n * is called by both clicking the 'remove' button but also\n * on keypress, which is harder to override if needed.\n *\n * @fires remove\n */\nOO.ui.TagItemWidget.prototype.remove = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'remove' );\n\t}\n};\n\n/**\n * Handle a keydown event on the widget\n *\n * @fires navigate\n * @fires remove\n * @param {jQuery.Event} e Key down event\n * @return {boolean|undefined} false to stop the operation\n */\nOO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar movement;\n\n\tif ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\tthis.remove();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\tthis.select();\n\t\treturn false;\n\t} else if (\n\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\te.keyCode === OO.ui.Keys.RIGHT\n\t) {\n\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\tmovement = {\n\t\t\t\tleft: 'forwards',\n\t\t\t\tright: 'backwards'\n\t\t\t};\n\t\t} else {\n\t\t\tmovement = {\n\t\t\t\tleft: 'backwards',\n\t\t\t\tright: 'forwards'\n\t\t\t};\n\t\t}\n\n\t\tthis.emit(\n\t\t\t'navigate',\n\t\t\te.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right\n\t\t);\n\t}\n};\n\n/**\n * Select this item\n *\n * @fires select\n */\nOO.ui.TagItemWidget.prototype.select = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'select' );\n\t}\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Check whether the item is valid\n *\n * @return {boolean} Item is valid\n */\nOO.ui.TagItemWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows the user to add multiple values that are displayed in a tag area.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and\n * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use\n * a menu and a popup respectively.\n *\n *     @example\n *     // Example: A basic TagMultiselectWidget.\n *     var widget = new OO.ui.TagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],\n *         selected: [ 'Option 1' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n * @mixins OO.ui.mixin.DraggableGroupElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} config Configuration object\n * @cfg {Object} [input] Configuration options for the input widget\n * @cfg {OO.ui.InputWidget} [inputWidget] An optional input widget. If given, it will\n *  replace the input widget used in the TagMultiselectWidget. If not given,\n *  TagMultiselectWidget creates its own.\n * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:\n * \t- inline: The input is invisible, but exists inside the tag list, so\n * \t\tthe user types into the tag groups to add tags.\n * \t- outline: The input is underneath the tag area.\n * \t- none: No input supplied\n * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if\n *  not present in the menu.\n * @cfg {Object[]} [allowedValues] An array representing the allowed items\n *  by their datas.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added\n * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of\n *  invalid tags. These tags will display with an invalid state, and\n *  the widget as a whole will have an invalid state if any invalid tags\n *  are present.\n * @cfg {boolean} [allowReordering=true] Allow reordering of the items\n * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,\n *  these will appear in the tag list on initialization, as long as they\n *  pass the validity tests.\n */\nOO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {\n\tvar inputEvents,\n\t\trAF = window.requestAnimationFrame || setTimeout,\n\t\twidget = this,\n\t\t$tabFocus = $( '<span>' )\n\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagMultiselectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.DraggableGroupElement.call( this, config );\n\n\tthis.toggleDraggable(\n\t\tconfig.allowReordering === undefined ?\n\t\t\ttrue : !!config.allowReordering\n\t);\n\n\tthis.inputPosition =\n\t\tthis.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?\n\t\t\tconfig.inputPosition : 'inline';\n\tthis.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;\n\tthis.allowArbitrary = !!config.allowArbitrary;\n\tthis.allowDuplicates = !!config.allowDuplicates;\n\tthis.allowedValues = config.allowedValues || [];\n\tthis.allowDisplayInvalidTags = config.allowDisplayInvalidTags;\n\tthis.hasInput = this.inputPosition !== 'none';\n\tthis.height = null;\n\tthis.valid = true;\n\n\tthis.$content = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-content' );\n\tthis.$handle = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-handle' )\n\t\t.append(\n\t\t\tthis.$indicator,\n\t\t\tthis.$icon,\n\t\t\tthis.$content\n\t\t\t\t.append(\n\t\t\t\t\tthis.$group\n\t\t\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-group' )\n\t\t\t\t)\n\t\t);\n\n\t// Events\n\tthis.aggregate( {\n\t\tremove: 'itemRemove',\n\t\tnavigate: 'itemNavigate',\n\t\tselect: 'itemSelect'\n\t} );\n\tthis.connect( this, {\n\t\titemRemove: 'onTagRemove',\n\t\titemSelect: 'onTagSelect',\n\t\titemNavigate: 'onTagNavigate',\n\t\tchange: 'onChangeTags'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialize\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagMultiselectWidget' )\n\t\t.append( this.$handle );\n\n\tif ( this.hasInput ) {\n\t\tif ( config.inputWidget ) {\n\t\t\tthis.input = config.inputWidget;\n\t\t} else {\n\t\t\tthis.input = new OO.ui.TextInputWidget( $.extend( {\n\t\t\t\tplaceholder: config.placeholder,\n\t\t\t\tclasses: [ 'oo-ui-tagMultiselectWidget-input' ]\n\t\t\t}, config.input ) );\n\t\t}\n\t\tthis.input.setDisabled( this.isDisabled() );\n\n\t\tinputEvents = {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onInputKeyDown.bind( this ),\n\t\t\tkeypress: this.onInputKeyPress.bind( this )\n\t\t};\n\n\t\tthis.input.$input.on( inputEvents );\n\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Override max-height for the input widget\n\t\t\t// in the case the widget is outline so it can\n\t\t\t// stretch all the way if the widet is wide\n\t\t\tthis.input.$element.css( 'max-width', 'inherit' );\n\t\t\tthis.$element\n\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-outlined' )\n\t\t\t\t.append( this.input.$element );\n\t\t} else {\n\t\t\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-inlined' );\n\t\t\t// HACK: When the widget is using 'inline' input, the\n\t\t\t// behavior needs to only use the $input itself\n\t\t\t// so we style and size it accordingly (otherwise\n\t\t\t// the styling and sizing can get very convoluted\n\t\t\t// when the wrapping divs and other elements)\n\t\t\t// We are taking advantage of still being able to\n\t\t\t// call the widget itself for operations like\n\t\t\t// .getValue() and setDisabled() and .focus() but\n\t\t\t// having only the $input attached to the DOM\n\t\t\tthis.$content.append( this.input.$input );\n\t\t}\n\t} else {\n\t\tthis.$content.append( $tabFocus );\n\t}\n\n\tthis.setTabIndexedElement(\n\t\tthis.hasInput ?\n\t\t\tthis.input.$input :\n\t\t\t$tabFocus\n\t);\n\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n\n\t// HACK: Input size needs to be calculated after everything\n\t// else is rendered\n\trAF( function () {\n\t\tif ( widget.hasInput ) {\n\t\t\twidget.updateInputSize();\n\t\t}\n\t} );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static properties */\n\n/**\n * Allowed input positions.\n * - inline: The input is inside the tag list\n * - outline: The input is under the tag list\n * - none: There is no input\n *\n * @property {Array}\n */\nOO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];\n\n/* Methods */\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n * @return {boolean} False to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {\n\tvar stopOrContinue,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\tstopOrContinue = this.doInputEnter( e, withMetaKey );\n\t\t}\n\n\t\t// Make sure the input gets resized.\n\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\treturn stopOrContinue;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n * @return {boolean}\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {\n\tvar movement, direction,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\treturn this.doInputBackspace( e, withMetaKey );\n\t\t} else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\treturn this.doInputEscape( e );\n\t\t} else if (\n\t\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\t\te.keyCode === OO.ui.Keys.RIGHT\n\t\t) {\n\t\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'forwards',\n\t\t\t\t\tright: 'backwards'\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'backwards',\n\t\t\t\t\tright: 'forwards'\n\t\t\t\t};\n\t\t\t}\n\t\t\tdirection = e.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right;\n\n\t\t\treturn this.doInputArrow( e, direction, withMetaKey );\n\t\t}\n\t}\n};\n\n/**\n * Respond to input focus event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {\n\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-focus' );\n};\n\n/**\n * Respond to input blur event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.$element.removeClass( 'oo-ui-tagMultiselectWidget-focus' );\n};\n\n/**\n * Perform an action after the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {\n\tthis.addTagFromInput();\n\treturn false;\n};\n\n/**\n * Perform an action responding to the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKey ) {\n\tvar items, item;\n\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\tthis.input.getValue() === '' &&\n\t\t!this.isEmpty()\n\t) {\n\t\t// Delete the last item\n\t\titems = this.getItems();\n\t\titem = items[ items.length - 1 ];\n\t\tthis.removeItems( [ item ] );\n\t\t// If Ctrl/Cmd was pressed, delete item entirely.\n\t\t// Otherwise put it into the text field for editing.\n\t\tif ( !withMetaKey ) {\n\t\t\tthis.input.setValue( item.getData() );\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Perform an action after the escape key on the input\n *\n * @param {jQuery.Event} e Event data\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {\n\tthis.clearInput();\n};\n\n/**\n * Perform an action after the arrow key on the input, select the previous\n * or next item from the input.\n * See #getPreviousItem and #getNextItem\n *\n * @param {jQuery.Event} e Event data\n * @param {string} direction Direction of the movement; forwards or backwards\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n *  a meta key like 'ctrl'\n */\nOO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( e, direction ) {\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\t!this.isEmpty()\n\t) {\n\t\tif ( direction === 'backwards' ) {\n\t\t\t// Get previous item\n\t\t\tthis.getPreviousItem().focus();\n\t\t} else {\n\t\t\t// Get next item\n\t\t\tthis.getNextItem().focus();\n\t\t}\n\t}\n};\n\n/**\n * Respond to item select event\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.hasInput && this.allowEditTags ) {\n\t\tif ( this.input.getValue() ) {\n\t\t\tthis.addTagFromInput();\n\t\t}\n\t\t// 1. Get the label of the tag into the input\n\t\tthis.input.setValue( item.getData() );\n\t\t// 2. Remove the tag\n\t\tthis.removeItems( [ item ] );\n\t\t// 3. Focus the input\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Respond to change event, where items were added, removed, or cleared.\n */\nOO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {\n\tthis.toggleValid( this.checkValidity() );\n\tif ( this.hasInput ) {\n\t\tthis.updateInputSize();\n\t}\n\tthis.updateIfHeightChanged();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.hasInput && this.input ) {\n\t\tthis.input.setDisabled( !!isDisabled );\n\t}\n\n\tif ( this.items ) {\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.setDisabled( !!isDisabled );\n\t\t} );\n\t}\n};\n\n/**\n * Respond to tag remove event\n * @param {OO.ui.TagItemWidget} item Removed tag\n */\nOO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {\n\tthis.removeTagByData( item.getData() );\n};\n\n/**\n * Respond to navigate event on the tag\n *\n * @param {OO.ui.TagItemWidget} item Removed tag\n * @param {string} direction Direction of movement; 'forwards' or 'backwards'\n */\nOO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {\n\tif ( direction === 'forwards' ) {\n\t\tthis.getNextItem( item ).focus();\n\t} else {\n\t\tthis.getPreviousItem( item ).focus();\n\t}\n};\n\n/**\n * Add tag from input value\n */\nOO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar val = this.input.getValue(),\n\t\tisValid = this.isAllowedData( val );\n\n\tif ( !val ) {\n\t\treturn;\n\t}\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tthis.addTag( val );\n\t\tthis.clearInput();\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Clear the input\n */\nOO.ui.TagMultiselectWidget.prototype.clearInput = function () {\n\tthis.input.setValue( '' );\n};\n\n/**\n * Check whether the given value is a duplicate of an existing\n * tag already in the list.\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is duplicate\n */\nOO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {\n\treturn !!this.getItemFromData( data );\n};\n\n/**\n * Check whether a given value is allowed to be added\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is allowed\n */\nOO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {\n\tif (\n\t\t!this.allowDuplicates &&\n\t\tthis.isDuplicateData( data )\n\t) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowArbitrary ) {\n\t\treturn true;\n\t}\n\n\t// Check with allowed values\n\tif (\n\t\tthis.getAllowedValues().some( function ( value ) {\n\t\t\treturn data === value;\n\t\t} )\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {\n\treturn this.allowedValues;\n};\n\n/**\n * Add a value to the allowed values list\n *\n * @param {string} value Allowed data value\n */\nOO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {\n\tif ( this.allowedValues.indexOf( value ) === -1 ) {\n\t\tthis.allowedValues.push( value );\n\t}\n};\n\n/**\n * Get the datas of the currently selected items\n *\n * @return {string[]|Object[]} Datas of currently selected items\n */\nOO.ui.TagMultiselectWidget.prototype.getValue = function () {\n\treturn this.getItems()\n\t\t.filter( function ( item ) {\n\t\t\treturn item.isValid();\n\t\t} )\n\t\t.map( function ( item ) {\n\t\t\treturn item.getData();\n\t\t} );\n};\n\n/**\n * Set the value of this widget by datas.\n *\n * @param {string|string[]|Object|Object[]} valueObject An object representing the data\n *  and label of the value. If the widget allows arbitrary values,\n *  the items will be added as-is. Otherwise, the data value will\n *  be checked against allowedValues.\n *  This object must contain at least a data key. Example:\n *  { data: 'foo', label: 'Foo item' }\n *  For multiple items, use an array of objects. For example:\n *   [\n *      { data: 'foo', label: 'Foo item' },\n *      { data: 'bar', label: 'Bar item' }\n * \t ]\n *  Value can also be added with plaintext array, for example:\n *  [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'\n */\nOO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {\n\tvalueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];\n\n\tthis.clearItems();\n\tvalueObject.forEach( function ( obj ) {\n\t\tif ( typeof obj === 'string' ) {\n\t\t\tthis.addTag( obj );\n\t\t} else {\n\t\t\tthis.addTag( obj.data, obj.label );\n\t\t}\n\t}.bind( this ) );\n};\n\n/**\n * Add tag to the display area\n *\n * @param {string|Object} data Tag data\n * @param {string} [label] Tag label. If no label is provided, the\n *  stringified version of the data will be used instead.\n * @return {boolean} Item was added successfully\n */\nOO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {\n\tvar newItemWidget,\n\t\tisValid = this.isAllowedData( data );\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tnewItemWidget = this.createTagItemWidget( data, label );\n\t\tnewItemWidget.toggleValid( isValid );\n\t\tthis.addItems( [ newItemWidget ] );\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/**\n * Remove tag by its data property.\n *\n * @param {string|Object} data Tag data\n */\nOO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {\n\tvar item = this.getItemFromData( data );\n\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.\n *\n * @protected\n * @param {string} data Item data\n * @param {string} label The label text.\n * @return {OO.ui.TagItemWidget}\n */\nOO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {\n\tlabel = label || data;\n\n\treturn new OO.ui.TagItemWidget( { data: data, label: label } );\n};\n\n/**\n * Given an item, returns the item after it. If the item is already the\n * last item, return `this.input`. If no item is passed, returns the\n * very first item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The next widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\tif ( itemIndex === this.items.length - 1 ) { // Last item\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return first item\n\t\t\treturn this.items[ 0 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If the item is already the\n * first item, return `this.input`. If no item is passed, returns the\n * very last item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The previous widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\tif ( itemIndex === 0 ) {\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return the last item\n\t\t\treturn this.items[ this.items.length - 1 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n * This is especially relevant for when the input is at the edge of a line\n * and should get smaller. The usual operation (as an inline-block with min-width)\n * does not work in that case, pushing the input downwards to the next line.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.inputPosition === 'inline' && !this.isDisabled() ) {\n\t\tif ( this.input.$input[ 0 ].scrollWidth === 0 ) {\n\t\t\t// Input appears to be attached but not visible.\n\t\t\t// Don't attempt to adjust its size, because our measurements\n\t\t\t// are going to fail anyway.\n\t\t\treturn;\n\t\t}\n\t\tthis.input.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.input.getValue() === '' &&\n\t\t\tthis.input.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.input.setValue( this.input.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;\n\t\t\tthis.input.setValue( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.input.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.input.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 10;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 10;\n\t\t}\n\t\tthis.input.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so,\n * emit the resize event. This is useful for when there are either\n * menus or popups attached to the bottom of the widget, to allow\n * them to change their positioning in case the widget moved down\n * or up.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Check whether all items in the widget are valid\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.checkValidity = function () {\n\treturn this.getItems().every( function ( item ) {\n\t\treturn item.isValid();\n\t} );\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Get the current valid state of the widget\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a popup. The popup can be configured to have a default input to insert values into the widget.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A basic PopupTagMultiselectWidget.\n *     var widget = new OO.ui.PopupTagMultiselectWidget();\n *     $( 'body' ).append( widget.$element );\n *\n *     // Example: A PopupTagMultiselectWidget with an external popup.\n *     var popupInput = new OO.ui.TextInputWidget(),\n *         widget = new OO.ui.PopupTagMultiselectWidget( {\n *            popupInput: popupInput,\n *            popup: {\n *               $content: popupInput.$element\n *            }\n *         } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @param {Object} config Configuration object\n * @cfg {jQuery} [$overlay] An overlay for the popup.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {Object} [popup] Configuration options for the popup\n * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be\n *  focused when the popup is opened and will be used as replacement for the\n *  general input in the widget.\n */\nOO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {\n\tvar defaultInput,\n\t\tdefaultConfig = { popup: {} };\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );\n\n\tthis.$overlay = config.$overlay || this.$element;\n\n\tif ( !config.popup ) {\n\t\t// For the default base implementation, we give a popup\n\t\t// with an input widget inside it. For any other use cases\n\t\t// the popup needs to be populated externally and the\n\t\t// event handled to add tags separately and manually\n\t\tdefaultInput = new OO.ui.TextInputWidget();\n\n\t\tdefaultConfig.popupInput = defaultInput;\n\t\tdefaultConfig.popup.$content = defaultInput.$element;\n\n\t\tthis.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );\n\t}\n\n\t// Add overlay, and add that to the autoCloseIgnore\n\tdefaultConfig.popup.$overlay = this.$overlay;\n\tdefaultConfig.popup.$autoCloseIgnore = this.hasInput ?\n\t\tthis.input.$element.add( this.$overlay ) : this.$overlay;\n\n\t// Allow extending any of the above\n\tconfig = $.extend( defaultConfig, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\tif ( this.hasInput ) {\n\t\tthis.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );\n\t}\n\n\t// Configuration options\n\tthis.popupInput = config.popupInput;\n\tif ( this.popupInput ) {\n\t\tthis.popupInput.connect( this, {\n\t\t\tenter: 'onPopupInputEnter'\n\t\t} );\n\t}\n\n\t// Events\n\tthis.on( 'resize', this.popup.updateDimensions.bind( this.popup ) );\n\tthis.popup.connect( this, { toggle: 'onPopupToggle' } );\n\tthis.$tabIndexed\n\t\t.on( 'focus', this.onFocus.bind( this ) );\n\n\t// Initialize\n\tthis.$element\n\t\t.append( this.popup.$element )\n\t\t.addClass( 'oo-ui-popupTagMultiselectWidget' );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );\nOO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Focus event handler.\n *\n * @private\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onFocus = function () {\n\tthis.popup.toggle( true );\n};\n\n/**\n * Respond to popup toggle event\n *\n * @param {boolean} isVisible Popup is visible\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {\n\tif ( isVisible && this.popupInput ) {\n\t\tthis.popupInput.focus();\n\t}\n};\n\n/**\n * Respond to popup input enter event\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {\n\tif ( this.popupInput ) {\n\t\tthis.addTagByPopupValue( this.popupInput.getValue() );\n\t\tthis.popupInput.setValue( '' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.popupInput && this.allowEditTags ) {\n\t\tthis.popupInput.setValue( item.getData() );\n\t\tthis.removeItems( [ item ] );\n\n\t\tthis.popup.toggle( true );\n\t\tthis.popupInput.focus();\n\t} else {\n\t\t// Parent\n\t\tOO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );\n\t}\n};\n\n/**\n * Add a tag by the popup value.\n * Whatever is responsible for setting the value in the popup should call\n * this method to add a tag, or use the regular methods like #addTag or\n * #setValue directly.\n *\n * @param {string} data The value of item\n * @param {string} [label] The label of the tag. If not given, the data is used.\n */\nOO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {\n\tthis.addTag( data, label );\n};\n","/**\n * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a menu of selectable options.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A basic MenuTagMultiselectWidget.\n *     var widget = new OO.ui.MenuTagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         options: [\n *            { data: 'option1', label: 'Option 1' },\n *            { data: 'option2', label: 'Option 2' },\n *            { data: 'option3', label: 'Option 3' },\n *         ],\n *         selected: [ 'option1', 'option2' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {Object} [menu] Configuration object for the menu widget\n * @cfg {jQuery} [$overlay] An overlay for the menu.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuTagMultiselectWidget.parent.call( this, config );\n\n\tthis.$overlay = config.$overlay || this.$element;\n\n\tthis.menu = this.createMenuWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this.hasInput ? this.input : null,\n\t\t$input: this.hasInput ? this.input.$input : null,\n\t\tfilterFromInput: !!this.hasInput,\n\t\t$autoCloseIgnore: this.hasInput ?\n\t\t\tthis.input.$element.add( this.$overlay ) : this.$overlay,\n\t\t$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?\n\t\t\tthis.input.$element : this.$element,\n\t\t$overlay: this.$overlay,\n\t\tdisabled: this.isDisabled()\n\t}, config.menu ) );\n\tthis.addOptions( config.options || [] );\n\n\t// Events\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\tif ( this.hasInput ) {\n\t\tthis.input.connect( this, { change: 'onInputChange' } );\n\t}\n\tthis.connect( this, { resize: 'onResize' } );\n\n\t// Initialization\n\tthis.$overlay\n\t\t.append( this.menu.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuTagMultiselectWidget' );\n\t// TagMultiselectWidget already does this, but it doesn't work right because this.menu is not yet\n\t// set up while the parent constructor runs, and #getAllowedValues rejects everything.\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );\n\n/* Methods */\n\n/**\n * Respond to resize event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {\n\t// Reposition the menu\n\tthis.menu.position();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );\n\n\tthis.menu.toggle( true );\n};\n\n/**\n * Respond to input change event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {\n\tthis.menu.toggle( true );\n};\n\n/**\n * Respond to menu choose event\n *\n * @param {OO.ui.OptionWidget} menuItem Chosen menu item\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {\n\t// Add tag\n\tthis.addTag( menuItem.getData(), menuItem.getLabel() );\n};\n\n/**\n * Respond to menu toggle event. Reset item highlights on hide.\n *\n * @param {boolean} isVisible The menu is visible\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tif ( !isVisible ) {\n\t\tthis.menu.selectItem( null );\n\t\tthis.menu.highlightItem( null );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {\n\tvar menuItem = this.menu.getItemFromData( tagItem.getData() );\n\t// Override the base behavior from TagMultiselectWidget; the base behavior\n\t// in TagMultiselectWidget is to remove the tag to edit it in the input,\n\t// but in our case, we want to utilize the menu selection behavior, and\n\t// definitely not remove the item.\n\n\t// Select the menu item\n\tthis.menu.selectItem( menuItem );\n\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar inputValue = this.input.getValue(),\n\t\tvalidated = false,\n\t\thighlightedItem = this.menu.findHighlightedItem(),\n\t\titem = this.menu.getItemFromData( inputValue );\n\n\t// Override the parent method so we add from the menu\n\t// rather than directly from the input\n\n\t// Look for a highlighted item first\n\tif ( highlightedItem ) {\n\t\tvalidated = this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );\n\t} else if ( item ) {\n\t\t// Look for the element that fits the data\n\t\tvalidated = this.addTag( item.getData(), item.getLabel() );\n\t} else {\n\t\t// Otherwise, add the tag - the method will only add if the\n\t\t// tag is valid or if invalid tags are allowed\n\t\tvalidated = this.addTag( inputValue );\n\t}\n\n\tif ( validated ) {\n\t\tthis.clearInput();\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Return the visible items in the menu. This is mainly used for when\n * the menu is filtering results.\n *\n * @return {OO.ui.MenuOptionWidget[]} Visible results\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {\n\treturn this.menu.getItems().filter( function ( menuItem ) {\n\t\treturn menuItem.isVisible();\n\t} );\n};\n\n/**\n * Create the menu for this widget. This is in a separate method so that\n * child classes can override this without polluting the constructor with\n * unnecessary extra objects that will be overidden.\n *\n * @param {Object} menuConfig Configuration options\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {\n\treturn new OO.ui.MenuSelectWidget( menuConfig );\n};\n\n/**\n * Add options to the menu\n *\n * @param {Object[]} menuOptions Object defining options\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {\n\tvar widget = this,\n\t\titems = menuOptions.map( function ( obj ) {\n\t\t\treturn widget.createMenuOptionWidget( obj.data, obj.label );\n\t\t} );\n\n\tthis.menu.addItems( items );\n};\n\n/**\n * Create a menu option widget.\n *\n * @param {string} data Item data\n * @param {string} [label] Item label\n * @return {OO.ui.OptionWidget} Option widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label ) {\n\treturn new OO.ui.MenuOptionWidget( {\n\t\tdata: data,\n\t\tlabel: label || data\n\t} );\n};\n\n/**\n * Get the menu\n *\n * @return {OO.ui.MenuSelectWidget} Menu\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {\n\tvar menuDatas = [];\n\tif ( this.menu ) {\n\t\t// If the parent constructor is calling us, we're not ready yet, this.menu is not set up.\n\t\tmenuDatas = this.menu.getItems().map( function ( menuItem ) {\n\t\t\treturn menuItem.getData();\n\t\t} );\n\t}\n\treturn this.allowedValues.concat( menuDatas );\n};\n","/**\n * SelectFileWidgets allow for selecting files, using the HTML5 File API. These\n * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link\n * OO.ui.mixin.IndicatorElement indicators}.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n *     @example\n *     // Example of a file select widget\n *     var selectFile = new OO.ui.SelectFileWidget();\n *     $( 'body' ).append( selectFile.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.\n * @cfg {string} [placeholder] Text to display when no file is selected.\n * @cfg {string} [notsupported] Text to display when file support is missing in the browser.\n * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.\n * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.\n * @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a\n *  preview (for performance)\n */\nOO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {\n\tvar dragHandler;\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\taccept: null,\n\t\tplaceholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),\n\t\tnotsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),\n\t\tdroppable: true,\n\t\tshowDropTarget: false,\n\t\tthumbnailSizeLimit: 20\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.SelectFileWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.$info = $( '<span>' );\n\tthis.showDropTarget = config.showDropTarget;\n\tthis.thumbnailSizeLimit = config.thumbnailSizeLimit;\n\tthis.isSupported = this.constructor.static.isSupported();\n\tthis.currentFile = null;\n\tif ( Array.isArray( config.accept ) ) {\n\t\tthis.accept = config.accept;\n\t} else {\n\t\tthis.accept = null;\n\t}\n\tthis.placeholder = config.placeholder;\n\tthis.notsupported = config.notsupported;\n\tthis.onFileSelectedHandler = this.onFileSelected.bind( this );\n\n\tthis.selectButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-selectButton' ],\n\t\tlabel: OO.ui.msg( 'ooui-selectfile-button-select' ),\n\t\tdisabled: this.disabled || !this.isSupported\n\t} );\n\n\tthis.clearButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-clearButton' ],\n\t\tframed: false,\n\t\ticon: 'close',\n\t\tdisabled: this.disabled\n\t} );\n\n\t// Events\n\tthis.selectButton.$button.on( {\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\tthis.clearButton.connect( this, {\n\t\tclick: 'onClearClick'\n\t} );\n\tif ( config.droppable ) {\n\t\tdragHandler = this.onDragEnterOrOver.bind( this );\n\t\tthis.$element.on( {\n\t\t\tdragenter: dragHandler,\n\t\t\tdragover: dragHandler,\n\t\t\tdragleave: this.onDragLeave.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\t}\n\n\t// Initialization\n\tthis.addInput();\n\tthis.$label.addClass( 'oo-ui-selectFileWidget-label' );\n\tthis.$info\n\t\t.addClass( 'oo-ui-selectFileWidget-info' )\n\t\t.append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );\n\n\tif ( config.droppable && config.showDropTarget ) {\n\t\tthis.selectButton.setIcon( 'upload' );\n\t\tthis.$thumbnail = $( '<div>' ).addClass( 'oo-ui-selectFileWidget-thumbnail' );\n\t\tthis.setPendingElement( this.$thumbnail );\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget-dropTarget oo-ui-selectFileWidget' )\n\t\t\t.on( {\n\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\tthis.$thumbnail,\n\t\t\t\tthis.$info,\n\t\t\t\tthis.selectButton.$element,\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-dropLabel' )\n\t\t\t\t\t.text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )\n\t\t\t);\n\t} else {\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget' )\n\t\t\t.append( this.$info, this.selectButton.$element );\n\t}\n\tthis.updateUI();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\n/**\n * Check if this widget is supported\n *\n * @static\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.static.isSupported = function () {\n\tvar $input;\n\tif ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {\n\t\t$input = $( '<input>' ).attr( 'type', 'file' );\n\t\tOO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;\n\t}\n\treturn OO.ui.SelectFileWidget.static.isSupportedCache;\n};\n\nOO.ui.SelectFileWidget.static.isSupportedCache = null;\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {File|null} value New value\n */\n\n/* Methods */\n\n/**\n * Get the current value of the field\n *\n * @return {File|null}\n */\nOO.ui.SelectFileWidget.prototype.getValue = function () {\n\treturn this.currentFile;\n};\n\n/**\n * Set the current value of the field\n *\n * @param {File|null} file File to select\n */\nOO.ui.SelectFileWidget.prototype.setValue = function ( file ) {\n\tif ( this.currentFile !== file ) {\n\t\tthis.currentFile = file;\n\t\tthis.updateUI();\n\t\tthis.emit( 'change', this.currentFile );\n\t}\n};\n\n/**\n * Focus the widget.\n *\n * Focusses the select file button.\n *\n * @chainable\n */\nOO.ui.SelectFileWidget.prototype.focus = function () {\n\tthis.selectButton.focus();\n\treturn this;\n};\n\n/**\n * Blur the widget.\n *\n * @chainable\n */\nOO.ui.SelectFileWidget.prototype.blur = function () {\n\tthis.selectButton.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n\n/**\n * Update the user interface when a file is selected or unselected\n *\n * @protected\n */\nOO.ui.SelectFileWidget.prototype.updateUI = function () {\n\tvar $label;\n\tif ( !this.isSupported ) {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\tthis.setLabel( this.notsupported );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-supported' );\n\t\tif ( this.currentFile ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\t$label = $( [] );\n\t\t\t$label = $label.add(\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-fileName' )\n\t\t\t\t\t.text( this.currentFile.name )\n\t\t\t);\n\t\t\tthis.setLabel( $label );\n\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.pushPending();\n\t\t\t\tthis.loadAndGetImageUrl().done( function ( url ) {\n\t\t\t\t\tthis.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );\n\t\t\t\t}.bind( this ) ).fail( function () {\n\t\t\t\t\tthis.$thumbnail.append(\n\t\t\t\t\t\tnew OO.ui.IconWidget( {\n\t\t\t\t\t\t\ticon: 'attachment',\n\t\t\t\t\t\t\tclasses: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]\n\t\t\t\t\t\t} ).$element\n\t\t\t\t\t);\n\t\t\t\t}.bind( this ) ).always( function () {\n\t\t\t\t\tthis.popPending();\n\t\t\t\t}.bind( this ) );\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t\tthis.$element.on( {\n\t\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t\t} );\n\t\t\t\tthis.$thumbnail\n\t\t\t\t\t.empty()\n\t\t\t\t\t.css( 'background-image', '' );\n\t\t\t}\n\t\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\tthis.setLabel( this.placeholder );\n\t\t}\n\t}\n};\n\n/**\n * If the selected file is an image, get its URL and load it.\n *\n * @return {jQuery.Promise} Promise resolves with the image URL after it has loaded\n */\nOO.ui.SelectFileWidget.prototype.loadAndGetImageUrl = function () {\n\tvar deferred = $.Deferred(),\n\t\tfile = this.currentFile,\n\t\treader = new FileReader();\n\n\tif (\n\t\tfile &&\n\t\t( OO.getProp( file, 'type' ) || '' ).indexOf( 'image/' ) === 0 &&\n\t\tfile.size < this.thumbnailSizeLimit * 1024 * 1024\n\t) {\n\t\treader.onload = function ( event ) {\n\t\t\tvar img = document.createElement( 'img' );\n\t\t\timg.addEventListener( 'load', function () {\n\t\t\t\tif (\n\t\t\t\t\timg.naturalWidth === 0 ||\n\t\t\t\t\timg.naturalHeight === 0 ||\n\t\t\t\t\timg.complete === false\n\t\t\t\t) {\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( event.target.result );\n\t\t\t\t}\n\t\t\t} );\n\t\t\timg.src = event.target.result;\n\t\t};\n\t\treader.readAsDataURL( file );\n\t} else {\n\t\tdeferred.reject();\n\t}\n\n\treturn deferred.promise();\n};\n\n/**\n * Add the input to the widget\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.addInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.remove();\n\t}\n\n\tif ( !this.isSupported ) {\n\t\tthis.$input = null;\n\t\treturn;\n\t}\n\n\tthis.$input = $( '<input>' ).attr( 'type', 'file' );\n\tthis.$input.on( 'change', this.onFileSelectedHandler );\n\tthis.$input.on( 'click', function ( e ) {\n\t\t// Prevents dropTarget to get clicked which calls\n\t\t// a click on this input\n\t\te.stopPropagation();\n\t} );\n\tthis.$input.attr( {\n\t\ttabindex: -1\n\t} );\n\tif ( this.accept ) {\n\t\tthis.$input.attr( 'accept', this.accept.join( ', ' ) );\n\t}\n\tthis.selectButton.$button.append( this.$input );\n};\n\n/**\n * Determine if we should accept this file\n *\n * @private\n * @param {string} mimeType File MIME type\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {\n\tvar i, mimeTest;\n\n\tif ( !this.accept || !mimeType ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < this.accept.length; i++ ) {\n\t\tmimeTest = this.accept[ i ];\n\t\tif ( mimeTest === mimeType ) {\n\t\t\treturn true;\n\t\t} else if ( mimeTest.substr( -2 ) === '/*' ) {\n\t\t\tmimeTest = mimeTest.substr( 0, mimeTest.length - 1 );\n\t\t\tif ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle file selection from the input\n *\n * @private\n * @param {jQuery.Event} e\n */\nOO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {\n\tvar file = OO.getProp( e.target, 'files', 0 ) || null;\n\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\n\tthis.setValue( file );\n\tthis.addInput();\n};\n\n/**\n * Handle clear button click events.\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.onClearClick = function () {\n\tthis.setValue( null );\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {\n\tif ( this.isSupported && !this.isDisabled() && this.$input &&\n\t\t( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drop target click events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {\n\tif ( this.isSupported && !this.isDisabled() && this.$input ) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drag enter and over events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {\n\tvar itemOrFile,\n\t\tdroppableFile = false,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\t\tdt.dropEffect = 'none';\n\t\treturn false;\n\t}\n\n\t// DataTransferItem and File both have a type property, but in Chrome files\n\t// have no information at this point.\n\titemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );\n\tif ( itemOrFile ) {\n\t\tif ( this.isAllowedType( itemOrFile.type ) ) {\n\t\t\tdroppableFile = true;\n\t\t}\n\t// dt.types is Array-like, but not an Array\n\t} else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {\n\t\t// File information is not available at this point for security so just assume\n\t\t// it is acceptable for now.\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=640534\n\t\tdroppableFile = true;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );\n\tif ( !droppableFile ) {\n\t\tdt.dropEffect = 'none';\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle drag leave events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragLeave = function () {\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n};\n\n/**\n * Handle drop events\n *\n * @private\n * @param {jQuery.Event} e Drop event\n */\nOO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {\n\tvar file = null,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\treturn false;\n\t}\n\n\tfile = OO.getProp( dt, 'files', 0 );\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\tif ( file ) {\n\t\tthis.setValue( file );\n\t}\n\n\treturn false;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );\n\tif ( this.selectButton ) {\n\t\tthis.selectButton.setDisabled( disabled );\n\t}\n\tif ( this.clearButton ) {\n\t\tthis.clearButton.setDisabled( disabled );\n\t}\n\treturn this;\n};\n","/**\n * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,\n * and a menu of search results, which is displayed beneath the query\n * field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.\n * Users can choose an item from the menu or type a query into the text field to search for a matching result item.\n * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.\n *\n * Each time the query is changed, the search result menu is cleared and repopulated. Please see\n * the [OOjs UI demos][1] for an example.\n *\n * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/#dialogs-mediawiki-vector-ltr\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|jQuery} [placeholder] Placeholder text for query input\n * @cfg {string} [value] Initial query value\n */\nOO.ui.SearchWidget = function OoUiSearchWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SearchWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.query = new OO.ui.TextInputWidget( {\n\t\ticon: 'search',\n\t\tplaceholder: config.placeholder,\n\t\tvalue: config.value\n\t} );\n\tthis.results = new OO.ui.SelectWidget();\n\tthis.$query = $( '<div>' );\n\tthis.$results = $( '<div>' );\n\n\t// Events\n\tthis.query.connect( this, {\n\t\tchange: 'onQueryChange',\n\t\tenter: 'onQueryEnter'\n\t} );\n\tthis.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );\n\n\t// Initialization\n\tthis.$query\n\t\t.addClass( 'oo-ui-searchWidget-query' )\n\t\t.append( this.query.$element );\n\tthis.$results\n\t\t.addClass( 'oo-ui-searchWidget-results' )\n\t\t.append( this.results.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-searchWidget' )\n\t\t.append( this.$results, this.$query );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );\n\n/* Methods */\n\n/**\n * Handle query key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {\n\tvar highlightedItem, nextItem,\n\t\tdir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );\n\n\tif ( dir ) {\n\t\thighlightedItem = this.results.findHighlightedItem();\n\t\tif ( !highlightedItem ) {\n\t\t\thighlightedItem = this.results.getSelectedItem();\n\t\t}\n\t\tnextItem = this.results.findRelativeSelectableItem( highlightedItem, dir );\n\t\tthis.results.highlightItem( nextItem );\n\t\tnextItem.scrollElementIntoView();\n\t}\n};\n\n/**\n * Handle select widget select events.\n *\n * Clears existing results. Subclasses should repopulate items according to new query.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryChange = function () {\n\t// Reset\n\tthis.results.clearItems();\n};\n\n/**\n * Handle select widget enter key events.\n *\n * Chooses highlighted item.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryEnter = function () {\n\tvar highlightedItem = this.results.findHighlightedItem();\n\tif ( highlightedItem ) {\n\t\tthis.results.chooseItem( highlightedItem );\n\t}\n};\n\n/**\n * Get the query input.\n *\n * @return {OO.ui.TextInputWidget} Query input\n */\nOO.ui.SearchWidget.prototype.getQuery = function () {\n\treturn this.query;\n};\n\n/**\n * Get the search results menu.\n *\n * @return {OO.ui.SelectWidget} Menu of search results\n */\nOO.ui.SearchWidget.prototype.getResults = function () {\n\treturn this.results;\n};\n","/**\n * NumberInputWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value\n * can be entered manually) and two {@link OO.ui.ButtonWidget button widgets}\n * (to adjust the value in increments) to allow the user to enter a number.\n *\n *     @example\n *     // Example: A NumberInputWidget.\n *     var numberInput = new OO.ui.NumberInputWidget( {\n *         label: 'NumberInputWidget',\n *         input: { value: 5 },\n *         min: 1,\n *         max: 10\n *     } );\n *     $( 'body' ).append( numberInput.$element );\n *\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [minusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget decrementing button widget}.\n * @cfg {Object} [plusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget incrementing button widget}.\n * @cfg {boolean} [allowInteger=false] Whether the field accepts only integer values.\n * @cfg {number} [min=-Infinity] Minimum allowed value\n * @cfg {number} [max=Infinity] Maximum allowed value\n * @cfg {number} [step=1] Delta when using the buttons or up/down arrow keys\n * @cfg {number|null} [pageStep] Delta when using the page-up/page-down keys. Defaults to 10 times #step.\n * @cfg {boolean} [showButtons=true] Whether to show the plus and minus buttons.\n */\nOO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {\n\tvar $field = $( '<div>' )\n\t\t.addClass( 'oo-ui-numberInputWidget-field' );\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tallowInteger: false,\n\t\tmin: -Infinity,\n\t\tmax: Infinity,\n\t\tstep: 1,\n\t\tpageStep: null,\n\t\tshowButtons: true\n\t}, config );\n\n\t// For backward compatibility\n\t$.extend( config, config.input );\n\tthis.input = this;\n\n\t// Parent constructor\n\tOO.ui.NumberInputWidget.parent.call( this, $.extend( config, {\n\t\ttype: 'number'\n\t} ) );\n\n\tif ( config.showButtons ) {\n\t\tthis.minusButton = new OO.ui.ButtonWidget( $.extend(\n\t\t\t{\n\t\t\t\tdisabled: this.isDisabled(),\n\t\t\t\ttabIndex: -1,\n\t\t\t\tclasses: [ 'oo-ui-numberInputWidget-minusButton' ],\n\t\t\t\ticon: 'subtract'\n\t\t\t},\n\t\t\tconfig.minusButton\n\t\t) );\n\t\tthis.plusButton = new OO.ui.ButtonWidget( $.extend(\n\t\t\t{\n\t\t\t\tdisabled: this.isDisabled(),\n\t\t\t\ttabIndex: -1,\n\t\t\t\tclasses: [ 'oo-ui-numberInputWidget-plusButton' ],\n\t\t\t\ticon: 'add'\n\t\t\t},\n\t\t\tconfig.plusButton\n\t\t) );\n\t}\n\n\t// Events\n\tthis.$input.on( {\n\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t'wheel mousewheel DOMMouseScroll': this.onWheel.bind( this )\n\t} );\n\tif ( config.showButtons ) {\n\t\tthis.plusButton.connect( this, {\n\t\t\tclick: [ 'onButtonClick', +1 ]\n\t\t} );\n\t\tthis.minusButton.connect( this, {\n\t\t\tclick: [ 'onButtonClick', -1 ]\n\t\t} );\n\t}\n\n\t// Build the field\n\t$field.append( this.$input );\n\tif ( config.showButtons ) {\n\t\t$field\n\t\t\t.prepend( this.minusButton.$element )\n\t\t\t.append( this.plusButton.$element );\n\t}\n\n\t// Initialization\n\tthis.setAllowInteger( config.allowInteger || config.isInteger );\n\tthis.setRange( config.min, config.max );\n\tthis.setStep( config.step, config.pageStep );\n\t// Set the validation method after we set allowInteger and range\n\t// so that it doesn't immediately call setValidityFlag\n\tthis.setValidation( this.validateNumber.bind( this ) );\n\n\tthis.$element\n\t\t.addClass( 'oo-ui-numberInputWidget' )\n\t\t.toggleClass( 'oo-ui-numberInputWidget-buttoned', config.showButtons )\n\t\t.append( $field );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.NumberInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * Set whether only integers are allowed\n *\n * @param {boolean} flag\n */\nOO.ui.NumberInputWidget.prototype.setAllowInteger = function ( flag ) {\n\tthis.allowInteger = !!flag;\n\tthis.setValidityFlag();\n};\n// Backward compatibility\nOO.ui.NumberInputWidget.prototype.setIsInteger = OO.ui.NumberInputWidget.prototype.setAllowInteger;\n\n/**\n * Get whether only integers are allowed\n *\n * @return {boolean} Flag value\n */\nOO.ui.NumberInputWidget.prototype.getAllowInteger = function () {\n\treturn this.allowInteger;\n};\n// Backward compatibility\nOO.ui.NumberInputWidget.prototype.getIsInteger = OO.ui.NumberInputWidget.prototype.getAllowInteger;\n\n/**\n * Set the range of allowed values\n *\n * @param {number} min Minimum allowed value\n * @param {number} max Maximum allowed value\n */\nOO.ui.NumberInputWidget.prototype.setRange = function ( min, max ) {\n\tif ( min > max ) {\n\t\tthrow new Error( 'Minimum (' + min + ') must not be greater than maximum (' + max + ')' );\n\t}\n\tthis.min = min;\n\tthis.max = max;\n\tthis.setValidityFlag();\n};\n\n/**\n * Get the current range\n *\n * @return {number[]} Minimum and maximum values\n */\nOO.ui.NumberInputWidget.prototype.getRange = function () {\n\treturn [ this.min, this.max ];\n};\n\n/**\n * Set the stepping deltas\n *\n * @param {number} step Normal step\n * @param {number|null} pageStep Page step. If null, 10 * step will be used.\n */\nOO.ui.NumberInputWidget.prototype.setStep = function ( step, pageStep ) {\n\tif ( step <= 0 ) {\n\t\tthrow new Error( 'Step value must be positive' );\n\t}\n\tif ( pageStep === null ) {\n\t\tpageStep = step * 10;\n\t} else if ( pageStep <= 0 ) {\n\t\tthrow new Error( 'Page step value must be positive' );\n\t}\n\tthis.step = step;\n\tthis.pageStep = pageStep;\n};\n\n/**\n * Get the current stepping values\n *\n * @return {number[]} Step and page step\n */\nOO.ui.NumberInputWidget.prototype.getStep = function () {\n\treturn [ this.step, this.pageStep ];\n};\n\n/**\n * Get the current value of the widget as a number\n *\n * @return {number} May be NaN, or an invalid number\n */\nOO.ui.NumberInputWidget.prototype.getNumericValue = function () {\n\treturn +this.getValue();\n};\n\n/**\n * Adjust the value of the widget\n *\n * @param {number} delta Adjustment amount\n */\nOO.ui.NumberInputWidget.prototype.adjustValue = function ( delta ) {\n\tvar n, v = this.getNumericValue();\n\n\tdelta = +delta;\n\tif ( isNaN( delta ) || !isFinite( delta ) ) {\n\t\tthrow new Error( 'Delta must be a finite number' );\n\t}\n\n\tif ( isNaN( v ) ) {\n\t\tn = 0;\n\t} else {\n\t\tn = v + delta;\n\t\tn = Math.max( Math.min( n, this.max ), this.min );\n\t\tif ( this.allowInteger ) {\n\t\t\tn = Math.round( n );\n\t\t}\n\t}\n\n\tif ( n !== v ) {\n\t\tthis.setValue( n );\n\t}\n};\n/**\n * Validate input\n *\n * @private\n * @param {string} value Field value\n * @return {boolean}\n */\nOO.ui.NumberInputWidget.prototype.validateNumber = function ( value ) {\n\tvar n = +value;\n\tif ( value === '' ) {\n\t\treturn !this.isRequired();\n\t}\n\n\tif ( isNaN( n ) || !isFinite( n ) ) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowInteger && Math.floor( n ) !== n ) {\n\t\treturn false;\n\t}\n\n\tif ( n < this.min || n > this.max ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {number} dir +1 or -1\n */\nOO.ui.NumberInputWidget.prototype.onButtonClick = function ( dir ) {\n\tthis.adjustValue( dir * this.step );\n};\n\n/**\n * Handle mouse wheel events.\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.NumberInputWidget.prototype.onWheel = function ( event ) {\n\tvar delta = 0;\n\n\tif ( !this.isDisabled() && this.$input.is( ':focus' ) ) {\n\t\t// Standard 'wheel' event\n\t\tif ( event.originalEvent.deltaMode !== undefined ) {\n\t\t\tthis.sawWheelEvent = true;\n\t\t}\n\t\tif ( event.originalEvent.deltaY ) {\n\t\t\tdelta = -event.originalEvent.deltaY;\n\t\t} else if ( event.originalEvent.deltaX ) {\n\t\t\tdelta = event.originalEvent.deltaX;\n\t\t}\n\n\t\t// Non-standard events\n\t\tif ( !this.sawWheelEvent ) {\n\t\t\tif ( event.originalEvent.wheelDeltaX ) {\n\t\t\t\tdelta = -event.originalEvent.wheelDeltaX;\n\t\t\t} else if ( event.originalEvent.wheelDeltaY ) {\n\t\t\t\tdelta = event.originalEvent.wheelDeltaY;\n\t\t\t} else if ( event.originalEvent.wheelDelta ) {\n\t\t\t\tdelta = event.originalEvent.wheelDelta;\n\t\t\t} else if ( event.originalEvent.detail ) {\n\t\t\t\tdelta = -event.originalEvent.detail;\n\t\t\t}\n\t\t}\n\n\t\tif ( delta ) {\n\t\t\tdelta = delta < 0 ? -1 : 1;\n\t\t\tthis.adjustValue( delta * this.step );\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.NumberInputWidget.prototype.onKeyDown = function ( e ) {\n\tif ( !this.isDisabled() ) {\n\t\tswitch ( e.which ) {\n\t\t\tcase OO.ui.Keys.UP:\n\t\t\t\tthis.adjustValue( this.step );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.DOWN:\n\t\t\t\tthis.adjustValue( -this.step );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.PAGEUP:\n\t\t\t\tthis.adjustValue( this.pageStep );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.PAGEDOWN:\n\t\t\t\tthis.adjustValue( -this.pageStep );\n\t\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.NumberInputWidget.prototype.setDisabled = function ( disabled ) {\n\t// Parent method\n\tOO.ui.NumberInputWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.minusButton ) {\n\t\tthis.minusButton.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.plusButton ) {\n\t\tthis.plusButton.setDisabled( this.isDisabled() );\n\t}\n\n\treturn this;\n};\n","}( OO ) );\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/intro.js.txt","../src/mixins/DraggableElement.js","../src/mixins/DraggableGroupElement.js","../src/mixins/RequestManager.js","../src/mixins/LookupElement.js","../src/layouts/TabPanelLayout.js","../src/layouts/PageLayout.js","../src/layouts/StackLayout.js","../src/layouts/MenuLayout.js","../src/layouts/BookletLayout.js","../src/layouts/IndexLayout.js","../src/widgets/ToggleWidget.js","../src/widgets/ToggleButtonWidget.js","../src/widgets/ToggleSwitchWidget.js","../src/widgets/OutlineControlsWidget.js","../src/widgets/OutlineOptionWidget.js","../src/widgets/OutlineSelectWidget.js","../src/widgets/ButtonOptionWidget.js","../src/widgets/ButtonSelectWidget.js","../src/widgets/TabOptionWidget.js","../src/widgets/TabSelectWidget.js","../src/widgets/CapsuleItemWidget.js","../src/widgets/CapsuleMultiselectWidget.js","../src/widgets/TagItemWidget.js","../src/widgets/TagMultiselectWidget.js","../src/widgets/PopupTagMultiselectWidget.js","../src/widgets/MenuTagMultiselectWidget.js","../src/widgets/SelectFileWidget.js","../src/widgets/SearchWidget.js","../src/widgets/NumberInputWidget.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-widgets.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * DraggableElement is a mixin class used to create elements that can be clicked\n * and dragged by a mouse to a new position within a group. This class must be used\n * in conjunction with OO.ui.mixin.DraggableGroupElement, which provides a container for\n * the draggable elements.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n *  but the draggable state should be called from the DraggableGroupElement, which updates\n *  the whole group\n */\nOO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {\n\tconfig = config || {};\n\n\t// Properties\n\tthis.index = null;\n\tthis.$handle = config.$handle || this.$element;\n\tthis.wasHandleUsed = null;\n\n\t// Initialize and events\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableElement' )\n\t\t.on( {\n\t\t\tmousedown: this.onDragMouseDown.bind( this ),\n\t\t\tdragstart: this.onDragStart.bind( this ),\n\t\t\tdragover: this.onDragOver.bind( this ),\n\t\t\tdragend: this.onDragEnd.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\tthis.$handle.addClass( 'oo-ui-draggableElement-handle' );\n\tthis.toggleDraggable( config.draggable === undefined ? true : !!config.draggable );\n};\n\nOO.initClass( OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event dragstart\n *\n * A dragstart event is emitted when the user clicks and begins dragging an item.\n * @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.\n */\n\n/**\n * @event dragend\n * A dragend event is emitted when the user drags an item and releases the mouse,\n * thus terminating the drag operation.\n */\n\n/**\n * @event drop\n * A drop event is emitted when the user drags an item and then releases the mouse button\n * over a valid target.\n */\n\n/* Static Properties */\n\n/**\n * @inheritdoc OO.ui.mixin.ButtonElement\n */\nOO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\tthis.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );\n\n\t\t// We make the entire element draggable, not just the handle, so that\n\t\t// the whole element appears to move. wasHandleUsed prevents drags from\n\t\t// starting outside the handle\n\t\tthis.$element.prop( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to mousedown event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\n\tthis.wasHandleUsed =\n\t\t// Optimization: if the handle is the whole element this is always true\n\t\tthis.$handle[ 0 ] === this.$element[ 0 ] ||\n\t\t// Check the mousedown occurred inside the handle\n\t\tOO.ui.contains( this.$handle[ 0 ], e.target, true );\n};\n\n/**\n * Respond to dragstart event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {boolean} False if the event is cancelled\n * @fires dragstart\n */\nOO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {\n\tvar element = this,\n\t\tdataTransfer = e.originalEvent.dataTransfer;\n\n\tif ( !this.wasHandleUsed || !this.isDraggable() ) {\n\t\treturn false;\n\t}\n\n\t// Define drop effect\n\tdataTransfer.dropEffect = 'none';\n\tdataTransfer.effectAllowed = 'move';\n\t// Support: Firefox\n\t// We must set up a dataTransfer data property or Firefox seems to\n\t// ignore the fact the element is draggable.\n\ttry {\n\t\tdataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );\n\t} catch ( err ) {\n\t\t// The above is only for Firefox. Move on if it fails.\n\t}\n\t// Briefly add a 'clone' class to style the browser's native drag image\n\tthis.$element.addClass( 'oo-ui-draggableElement-clone' );\n\t// Add placeholder class after the browser has rendered the clone\n\tsetTimeout( function () {\n\t\telement.$element\n\t\t\t.removeClass( 'oo-ui-draggableElement-clone' )\n\t\t\t.addClass( 'oo-ui-draggableElement-placeholder' );\n\t} );\n\t// Emit event\n\tthis.emit( 'dragstart', this );\n\treturn true;\n};\n\n/**\n * Respond to dragend event.\n *\n * @private\n * @fires dragend\n */\nOO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {\n\tthis.$element.removeClass( 'oo-ui-draggableElement-placeholder' );\n\tthis.emit( 'dragend' );\n};\n\n/**\n * Handle drop event.\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @fires drop\n */\nOO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {\n\te.preventDefault();\n\tthis.emit( 'drop', e );\n};\n\n/**\n * In order for drag/drop to work, the dragover event must\n * return false and stop propogation.\n *\n * @param {jQuery.Event} e Drag event\n * @private\n */\nOO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {\n\te.preventDefault();\n};\n\n/**\n * Set item index.\n * Store it in the DOM so we can access from the widget drag event\n *\n * @private\n * @param {number} index Item index\n */\nOO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {\n\tif ( this.index !== index ) {\n\t\tthis.index = index;\n\t\tthis.$element.data( 'index', index );\n\t}\n};\n\n/**\n * Get item index\n *\n * @private\n * @return {number} Item index\n */\nOO.ui.mixin.DraggableElement.prototype.getIndex = function () {\n\treturn this.index;\n};\n","/**\n * DraggableGroupElement is a mixin class used to create a group element to\n * contain draggable elements, which are items that can be clicked and dragged by a mouse.\n * The class is used with OO.ui.mixin.DraggableElement.\n *\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation\n *  should match the layout of the items. Items displayed in a single row\n *  or in several rows should use horizontal orientation. The vertical orientation should only be\n *  used when the items are displayed in a single column. Defaults to 'vertical'\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n */\nOO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.orientation = config.orientation || 'vertical';\n\tthis.dragItem = null;\n\tthis.itemKeys = {};\n\tthis.dir = null;\n\tthis.itemsOrder = null;\n\tthis.draggable = config.draggable === undefined ? true : !!config.draggable;\n\n\t// Events\n\tthis.aggregate( {\n\t\tdragstart: 'itemDragStart',\n\t\tdragend: 'itemDragEnd',\n\t\tdrop: 'itemDrop'\n\t} );\n\tthis.connect( this, {\n\t\titemDragStart: 'onItemDragStart',\n\t\titemDrop: 'onItemDropOrDragEnd',\n\t\titemDragEnd: 'onItemDropOrDragEnd'\n\t} );\n\n\t// Initialize\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableGroupElement' )\n\t\t.append( this.$status )\n\t\t.toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' );\n};\n\n/* Setup */\nOO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * An item has been dragged to a new position, but not yet dropped.\n *\n * @event drag\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * An item has been dropped at a new position.\n *\n * @event reorder\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * Draggable state of this widget has changed.\n *\n * @event draggable\n * @param {boolean} [draggable] Widget is draggable\n */\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableGroupElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\t// Tell the items their draggable state changed\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.toggleDraggable( this.draggable );\n\t\t}.bind( this ) );\n\n\t\t// Emit event\n\t\tthis.emit( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableGroupElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to item drag start event\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\t// Make a shallow copy of this.items so we can re-order it during previews\n\t// without affecting the original array.\n\tthis.itemsOrder = this.items.slice();\n\tthis.updateIndexes();\n\tif ( this.orientation === 'horizontal' ) {\n\t\t// Calculate and cache directionality on drag start - it's a little\n\t\t// expensive and it shouldn't change while dragging.\n\t\tthis.dir = this.$element.css( 'direction' );\n\t}\n\tthis.setDragItem( item );\n};\n\n/**\n * Update the index properties of the items\n */\nOO.ui.mixin.DraggableGroupElement.prototype.updateIndexes = function () {\n\tvar i, len;\n\n\t// Map the index of each object\n\tfor ( i = 0, len = this.itemsOrder.length; i < len; i++ ) {\n\t\tthis.itemsOrder[ i ].setIndex( i );\n\t}\n};\n\n/**\n * Handle drop or dragend event and switch the order of the items accordingly\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dropped item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDropOrDragEnd = function () {\n\tvar targetIndex, originalIndex,\n\t\titem = this.getDragItem();\n\n\t// TODO: Figure out a way to configure a list of legally droppable\n\t// elements even if they are not yet in the list\n\tif ( item ) {\n\t\toriginalIndex = this.items.indexOf( item );\n\t\t// If the item has moved forward, add one to the index to account for the left shift\n\t\ttargetIndex = item.getIndex() + ( item.getIndex() > originalIndex ? 1 : 0 );\n\t\tif ( targetIndex !== originalIndex ) {\n\t\t\tthis.reorder( this.getDragItem(), targetIndex );\n\t\t\tthis.emit( 'reorder', this.getDragItem(), targetIndex );\n\t\t}\n\t\tthis.updateIndexes();\n\t}\n\tthis.unsetDragItem();\n\t// Return false to prevent propogation\n\treturn false;\n};\n\n/**\n * Respond to dragover event\n *\n * @private\n * @param {jQuery.Event} e Dragover event\n * @fires reorder\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {\n\tvar overIndex, targetIndex,\n\t\titem = this.getDragItem(),\n\t\tdragItemIndex = item.getIndex();\n\n\t// Get the OptionWidget item we are dragging over\n\toverIndex = $( e.target ).closest( '.oo-ui-draggableElement' ).data( 'index' );\n\n\tif ( overIndex !== undefined && overIndex !== dragItemIndex ) {\n\t\ttargetIndex = overIndex + ( overIndex > dragItemIndex ? 1 : 0 );\n\n\t\tif ( targetIndex > 0 ) {\n\t\t\tthis.$group.children().eq( targetIndex - 1 ).after( item.$element );\n\t\t} else {\n\t\t\tthis.$group.prepend( item.$element );\n\t\t}\n\t\t// Move item in itemsOrder array\n\t\tthis.itemsOrder.splice( overIndex, 0,\n\t\t\tthis.itemsOrder.splice( dragItemIndex, 1 )[ 0 ]\n\t\t);\n\t\tthis.updateIndexes();\n\t\tthis.emit( 'drag', item, targetIndex );\n\t}\n\t// Prevent default\n\te.preventDefault();\n};\n\n/**\n * Reorder the items in the group\n *\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} newIndex New index\n */\nOO.ui.mixin.DraggableGroupElement.prototype.reorder = function ( item, newIndex ) {\n\tthis.addItems( [ item ], newIndex );\n};\n\n/**\n * Set a dragged item\n *\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {\n\tif ( this.dragItem !== item ) {\n\t\tthis.dragItem = item;\n\t\tthis.$element.on( 'dragover', this.onDragOver.bind( this ) );\n\t\tthis.$element.addClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Unset the current dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {\n\tif ( this.dragItem ) {\n\t\tthis.dragItem = null;\n\t\tthis.$element.off( 'dragover' );\n\t\tthis.$element.removeClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Get the item that is currently being dragged.\n *\n * @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged\n */\nOO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {\n\treturn this.dragItem;\n};\n","/**\n * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as\n * the {@link OO.ui.mixin.LookupElement}.\n *\n * @class\n * @abstract\n *\n * @constructor\n */\nOO.ui.mixin.RequestManager = function OoUiMixinRequestManager() {\n\tthis.requestCache = {};\n\tthis.requestQuery = null;\n\tthis.requestRequest = null;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.RequestManager );\n\n/**\n * Get request results for the current query.\n *\n * @return {jQuery.Promise} Promise object which will be passed response data as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   may not be rejected, depending on what jQuery feels like doing.\n */\nOO.ui.mixin.RequestManager.prototype.getRequestData = function () {\n\tvar widget = this,\n\t\tvalue = this.getRequestQuery(),\n\t\tdeferred = $.Deferred(),\n\t\tourRequest;\n\n\tthis.abortRequest();\n\tif ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) {\n\t\tdeferred.resolve( this.requestCache[ value ] );\n\t} else {\n\t\tif ( this.pushPending ) {\n\t\t\tthis.pushPending();\n\t\t}\n\t\tthis.requestQuery = value;\n\t\tourRequest = this.requestRequest = this.getRequest();\n\t\tourRequest\n\t\t\t.always( function () {\n\t\t\t\t// We need to pop pending even if this is an old request, otherwise\n\t\t\t\t// the widget will remain pending forever.\n\t\t\t\t// TODO: this assumes that an aborted request will fail or succeed soon after\n\t\t\t\t// being aborted, or at least eventually. It would be nice if we could popPending()\n\t\t\t\t// at abort time, but only if we knew that we hadn't already called popPending()\n\t\t\t\t// for that request.\n\t\t\t\tif ( widget.popPending ) {\n\t\t\t\t\twidget.popPending();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.done( function ( response ) {\n\t\t\t\t// If this is an old request (and aborting it somehow caused it to still succeed),\n\t\t\t\t// ignore its success completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\twidget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response );\n\t\t\t\t\tdeferred.resolve( widget.requestCache[ value ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\t// If this is an old request (or a request failing because it's being aborted),\n\t\t\t\t// ignore its failure completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t}\n\t\t\t} );\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Abort the currently pending request, if any.\n *\n * @private\n */\nOO.ui.mixin.RequestManager.prototype.abortRequest = function () {\n\tvar oldRequest = this.requestRequest;\n\tif ( oldRequest ) {\n\t\t// First unset this.requestRequest to the fail handler will notice\n\t\t// that the request is no longer current\n\t\tthis.requestRequest = null;\n\t\tthis.requestQuery = null;\n\t\toldRequest.abort();\n\t}\n};\n\n/**\n * Get the query to be made.\n *\n * @protected\n * @method\n * @abstract\n * @return {string} query to be used\n */\nOO.ui.mixin.RequestManager.prototype.getRequestQuery = null;\n\n/**\n * Get a new request object of the current query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.RequestManager.prototype.getRequest = null;\n\n/**\n * Pre-process data returned by the request from #getRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;\n","/**\n * LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested values for\n * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types\n * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen\n * from the lookup menu, that value becomes the value of the input field.\n *\n * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is\n * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then\n * re-enable lookups.\n *\n * See the [OOjs UI demos][1] for an example.\n *\n * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/index.html#widgets-apex-vector-ltr\n *\n * @class\n * @abstract\n * @mixins OO.ui.mixin.RequestManager\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.\n * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.\n *  By default, the lookup menu is not generated and displayed until the user begins to type.\n * @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted (so, that the user can\n *  take it over into the input with simply pressing return) automatically or not.\n */\nOO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { highlightFirst: true }, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.RequestManager.call( this, config );\n\n\t// Properties\n\tthis.$overlay = config.$overlay || this.$element;\n\tthis.lookupMenu = new OO.ui.MenuSelectWidget( {\n\t\twidget: this,\n\t\tinput: this,\n\t\t$floatableContainer: config.$container || this.$element\n\t} );\n\n\tthis.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;\n\n\tthis.lookupsDisabled = false;\n\tthis.lookupInputFocused = false;\n\tthis.lookupHighlightFirstItem = config.highlightFirst;\n\n\t// Events\n\tthis.$input.on( {\n\t\tfocus: this.onLookupInputFocus.bind( this ),\n\t\tblur: this.onLookupInputBlur.bind( this ),\n\t\tmousedown: this.onLookupInputMouseDown.bind( this )\n\t} );\n\tthis.connect( this, { change: 'onLookupInputChange' } );\n\tthis.lookupMenu.connect( this, {\n\t\ttoggle: 'onLookupMenuToggle',\n\t\tchoose: 'onLookupMenuItemChoose'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.lookupMenu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\tthis.$element.addClass( 'oo-ui-lookupElement' );\n\tthis.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );\n\tthis.$overlay.append( this.lookupMenu.$element );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager );\n\n/* Methods */\n\n/**\n * Handle input focus event.\n *\n * @protected\n * @param {jQuery.Event} e Input focus event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () {\n\tthis.lookupInputFocused = true;\n\tthis.populateLookupMenu();\n};\n\n/**\n * Handle input blur event.\n *\n * @protected\n * @param {jQuery.Event} e Input blur event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {\n\tthis.closeLookupMenu();\n\tthis.lookupInputFocused = false;\n};\n\n/**\n * Handle input mouse down event.\n *\n * @protected\n * @param {jQuery.Event} e Input mouse down event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {\n\t// Only open the menu if the input was already focused.\n\t// This way we allow the user to open the menu again after closing it with Esc\n\t// by clicking in the input. Opening (and populating) the menu when initially\n\t// clicking into the input is handled by the focus handler.\n\tif ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle input change event.\n *\n * @protected\n * @param {string} value New input value\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputChange = function () {\n\tif ( this.lookupInputFocused ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle the lookup menu being shown/hidden.\n *\n * @protected\n * @param {boolean} visible Whether the lookup menu is now visible.\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\t// When the menu is hidden, abort any active request and clear the menu.\n\t\t// This has to be done here in addition to closeLookupMenu(), because\n\t\t// MenuSelectWidget will close itself when the user presses Esc.\n\t\tthis.abortLookupRequest();\n\t\tthis.lookupMenu.clearItems();\n\t}\n};\n\n/**\n * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.\n *\n * @protected\n * @param {OO.ui.MenuOptionWidget} item Selected item\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Get lookup menu.\n *\n * @private\n * @return {OO.ui.MenuSelectWidget}\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {\n\treturn this.lookupMenu;\n};\n\n/**\n * Disable or re-enable lookups.\n *\n * When lookups are disabled, calls to #populateLookupMenu will be ignored.\n *\n * @param {boolean} disabled Disable lookups\n */\nOO.ui.mixin.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {\n\tthis.lookupsDisabled = !!disabled;\n};\n\n/**\n * Open the menu. If there are no entries in the menu, this does nothing.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.openLookupMenu = function () {\n\tif ( !this.lookupMenu.isEmpty() ) {\n\t\tthis.lookupMenu.toggle( true );\n\t}\n\treturn this;\n};\n\n/**\n * Close the menu, empty it, and abort any pending request.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.closeLookupMenu = function () {\n\tthis.lookupMenu.toggle( false );\n\tthis.abortLookupRequest();\n\tthis.lookupMenu.clearItems();\n\treturn this;\n};\n\n/**\n * Request menu items based on the input's current value, and when they arrive,\n * populate the menu with these items and show the menu.\n *\n * If lookups have been disabled with #setLookupsDisabled, this function does nothing.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {\n\tvar widget = this,\n\t\tvalue = this.getValue();\n\n\tif ( this.lookupsDisabled || this.isReadOnly() ) {\n\t\treturn;\n\t}\n\n\t// If the input is empty, clear the menu, unless suggestions when empty are allowed.\n\tif ( !this.allowSuggestionsWhenEmpty && value === '' ) {\n\t\tthis.closeLookupMenu();\n\t// Skip population if there is already a request pending for the current value\n\t} else if ( value !== this.lookupQuery ) {\n\t\tthis.getLookupMenuItems()\n\t\t\t.done( function ( items ) {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\tif ( items.length ) {\n\t\t\t\t\twidget.lookupMenu\n\t\t\t\t\t\t.addItems( items )\n\t\t\t\t\t\t.toggle( true );\n\t\t\t\t\twidget.initializeLookupMenuSelection();\n\t\t\t\t} else {\n\t\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t} );\n\t}\n\n\treturn this;\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () {\n\tif ( this.lookupHighlightFirstItem && !this.lookupMenu.getSelectedItem() ) {\n\t\tthis.lookupMenu.highlightItem( this.lookupMenu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * Get lookup menu items for the current query.\n *\n * @private\n * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   will not be rejected: it will remain pending forever.\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () {\n\treturn this.getRequestData().then( function ( data ) {\n\t\treturn this.getLookupMenuOptionsFromData( data );\n\t}.bind( this ) );\n};\n\n/**\n * Abort the currently pending lookup request, if any.\n *\n * @private\n */\nOO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () {\n\tthis.abortRequest();\n};\n\n/**\n * Get a new request object of the current lookup query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.LookupElement.prototype.getLookupRequest = null;\n\n/**\n * Pre-process data returned by the request from #getLookupRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = null;\n\n/**\n * Get a list of menu option widgets from the (possibly cached) data returned by\n * #getLookupCacheDataFromResponse.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} data Cached result data, usually an array\n * @return {OO.ui.MenuOptionWidget[]} Menu items\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = null;\n\n/**\n * Set the read-only state of the widget.\n *\n * This will also disable/enable the lookups functionality.\n *\n * @param {boolean} readOnly Make input read-only\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {\n\t// Parent method\n\t// Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget\n\tOO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );\n\n\t// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor\n\tif ( this.isReadOnly() && this.lookupMenu ) {\n\t\tthis.closeLookupMenu();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestQuery = function () {\n\treturn this.getValue();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequest = function () {\n\treturn this.getLookupRequest();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestCacheDataFromResponse = function ( response ) {\n\treturn this.getLookupCacheDataFromResponse( response );\n};\n","/**\n * TabPanelLayouts are used within {@link OO.ui.IndexLayout index layouts} to create tab panels that\n * users can select and display from the index's optional {@link OO.ui.TabSelectWidget tab}\n * navigation. TabPanels are usually not instantiated directly, rather extended to include the\n * required content and functionality.\n *\n * Each tab panel must have a unique symbolic name, which is passed to the constructor. In addition,\n * the tab panel's tab item is customized (with a label) using the #setupTabItem method. See\n * {@link OO.ui.IndexLayout IndexLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of tab panel\n * @param {Object} [config] Configuration options\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] Label for tab panel's tab\n */\nOO.ui.TabPanelLayout = function OoUiTabPanelLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.TabPanelLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.label = config.label;\n\tthis.tabItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabPanelLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabPanelLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the tab panel becomes active. Tab panels become active when they are\n * shown in a index layout that is configured to display only one tab panel at a time.\n *\n * @event active\n * @param {boolean} active Tab panel is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the tab panel.\n *\n * @return {string} Symbolic name of tab panel\n */\nOO.ui.TabPanelLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if tab panel is active.\n *\n * Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to\n * display only one tab panel at a time. Additional CSS is applied to the tab panel's tab item to reflect the\n * active state.\n *\n * @return {boolean} Tab panel is active\n */\nOO.ui.TabPanelLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get tab item.\n *\n * The tab item allows users to access the tab panel from the index's tab\n * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.\n *\n * @return {OO.ui.TabOptionWidget|null} Tab option widget\n */\nOO.ui.TabPanelLayout.prototype.getTabItem = function () {\n\treturn this.tabItem;\n};\n\n/**\n * Set or unset the tab item.\n *\n * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,\n * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab\n * level), use #setupTabItem instead of this method.\n *\n * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear\n * @chainable\n */\nOO.ui.TabPanelLayout.prototype.setTabItem = function ( tabItem ) {\n\tthis.tabItem = tabItem || null;\n\tif ( tabItem ) {\n\t\tthis.setupTabItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the tab item.\n *\n * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset\n * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use\n * the #setTabItem method instead.\n *\n * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up\n * @chainable\n */\nOO.ui.TabPanelLayout.prototype.setupTabItem = function () {\n\tif ( this.label ) {\n\t\tthis.tabItem.setLabel( this.label );\n\t}\n\treturn this;\n};\n\n/**\n * Set the tab panel to its 'active' state.\n *\n * Tab panels become active when they are shown in a index layout that is configured to display only\n * one tab panel at a time. Additional CSS is applied to the tab item to reflect the tab panel's\n * active state. Outside of the index context, setting the active state on a tab panel does nothing.\n *\n * @param {boolean} active Tab panel is active\n * @fires active\n */\nOO.ui.TabPanelLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-tabPanelLayout-active', this.active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display\n * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,\n * rather extended to include the required content and functionality.\n *\n * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline\n * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See\n * {@link OO.ui.BookletLayout BookletLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of page\n * @param {Object} [config] Configuration options\n */\nOO.ui.PageLayout = function OoUiPageLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.PageLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.outlineItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-pageLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the page becomes active. Pages become active when they are\n * shown in a booklet layout that is configured to display only one page at a time.\n *\n * @event active\n * @param {boolean} active Page is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the page.\n *\n * @return {string} Symbolic name of page\n */\nOO.ui.PageLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if page is active.\n *\n * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display\n * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.\n *\n * @return {boolean} Page is active\n */\nOO.ui.PageLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get outline item.\n *\n * The outline item allows users to access the page from the booklet's outline\n * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.\n *\n * @return {OO.ui.OutlineOptionWidget|null} Outline option widget\n */\nOO.ui.PageLayout.prototype.getOutlineItem = function () {\n\treturn this.outlineItem;\n};\n\n/**\n * Set or unset the outline item.\n *\n * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,\n * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline\n * level), use #setupOutlineItem instead of this method.\n *\n * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear\n * @chainable\n */\nOO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {\n\tthis.outlineItem = outlineItem || null;\n\tif ( outlineItem ) {\n\t\tthis.setupOutlineItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the outline item.\n *\n * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset\n * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use\n * the #setOutlineItem method instead.\n *\n * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up\n * @chainable\n */\nOO.ui.PageLayout.prototype.setupOutlineItem = function () {\n\treturn this;\n};\n\n/**\n * Set the page to its 'active' state.\n *\n * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional\n * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet\n * context, setting the active state on a page does nothing.\n *\n * @param {boolean} active Page is active\n * @fires active\n */\nOO.ui.PageLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-pageLayout-active', active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed\n * at a time, though the stack layout can also be configured to show all contained panels, one after another,\n * by setting the #continuous option to 'true'.\n *\n *     @example\n *     // A stack layout with two panels, configured to be displayed continously\n *     var myStack = new OO.ui.StackLayout( {\n *         items: [\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel One</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } ),\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel Two</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } )\n *         ],\n *         continuous: true\n *     } );\n *     $( 'body' ).append( myStack.$element );\n *\n * @class\n * @extends OO.ui.PanelLayout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.\n * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.\n */\nOO.ui.StackLayout = function OoUiStackLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.StackLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.currentItem = null;\n\tthis.continuous = !!config.continuous;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-stackLayout' );\n\tif ( this.continuous ) {\n\t\tthis.$element.addClass( 'oo-ui-stackLayout-continuous' );\n\t\tthis.$element.on( 'scroll', OO.ui.debounce( this.onScroll.bind( this ), 250 ) );\n\t}\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );\nOO.mixinClass( OO.ui.StackLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},\n * {@link #clearItems cleared} or {@link #setItem displayed}.\n *\n * @event set\n * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown\n */\n\n/**\n * When used in continuous mode, this event is emitted when the user scrolls down\n * far enough such that currentItem is no longer visible.\n *\n * @event visibleItemChange\n * @param {OO.ui.PanelLayout} panel The next visible item in the layout\n */\n\n/* Methods */\n\n/**\n * Handle scroll events from the layout element\n *\n * @param {jQuery.Event} e\n * @fires visibleItemChange\n */\nOO.ui.StackLayout.prototype.onScroll = function () {\n\tvar currentRect,\n\t\tlen = this.items.length,\n\t\tcurrentIndex = this.items.indexOf( this.currentItem ),\n\t\tnewIndex = currentIndex,\n\t\tcontainerRect = this.$element[ 0 ].getBoundingClientRect();\n\n\tif ( !containerRect || ( !containerRect.top && !containerRect.bottom ) ) {\n\t\t// Can't get bounding rect, possibly not attached.\n\t\treturn;\n\t}\n\n\tfunction getRect( item ) {\n\t\treturn item.$element[ 0 ].getBoundingClientRect();\n\t}\n\n\tfunction isVisible( item ) {\n\t\tvar rect = getRect( item );\n\t\treturn rect.bottom > containerRect.top && rect.top < containerRect.bottom;\n\t}\n\n\tcurrentRect = getRect( this.currentItem );\n\n\tif ( currentRect.bottom < containerRect.top ) {\n\t\t// Scrolled down past current item\n\t\twhile ( ++newIndex < len ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if ( currentRect.top > containerRect.bottom ) {\n\t\t// Scrolled up past current item\n\t\twhile ( --newIndex >= 0 ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( newIndex !== currentIndex ) {\n\t\tthis.emit( 'visibleItemChange', this.items[ newIndex ] );\n\t}\n};\n\n/**\n * Get the current panel.\n *\n * @return {OO.ui.Layout|null}\n */\nOO.ui.StackLayout.prototype.getCurrentItem = function () {\n\treturn this.currentItem;\n};\n\n/**\n * Unset the current item.\n *\n * @private\n * @param {OO.ui.StackLayout} layout\n * @fires set\n */\nOO.ui.StackLayout.prototype.unsetCurrentItem = function () {\n\tvar prevItem = this.currentItem;\n\tif ( prevItem === null ) {\n\t\treturn;\n\t}\n\n\tthis.currentItem = null;\n\tthis.emit( 'set', null );\n};\n\n/**\n * Add panel layouts to the stack layout.\n *\n * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different\n * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified\n * by the index.\n *\n * @param {OO.ui.Layout[]} items Panels to add\n * @param {number} [index] Index of the insertion point\n * @chainable\n */\nOO.ui.StackLayout.prototype.addItems = function ( items, index ) {\n\t// Update the visibility\n\tthis.updateHiddenState( items, this.currentItem );\n\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items, index );\n\n\tif ( !this.currentItem && items.length ) {\n\t\tthis.setItem( items[ 0 ] );\n\t}\n\n\treturn this;\n};\n\n/**\n * Remove the specified panels from the stack layout.\n *\n * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,\n * you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Layout[]} items Panels to remove\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.removeItems = function ( items ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( items.indexOf( this.currentItem ) !== -1 ) {\n\t\tif ( this.items.length ) {\n\t\t\tthis.setItem( this.items[ 0 ] );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Clear all panels from the stack layout.\n *\n * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only\n * a subset of panels, use the #removeItems method.\n *\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.clearItems = function () {\n\tthis.unsetCurrentItem();\n\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\n\treturn this;\n};\n\n/**\n * Show the specified panel.\n *\n * If another panel is currently displayed, it will be hidden.\n *\n * @param {OO.ui.Layout} item Panel to show\n * @chainable\n * @fires set\n */\nOO.ui.StackLayout.prototype.setItem = function ( item ) {\n\tif ( item !== this.currentItem ) {\n\t\tthis.updateHiddenState( this.items, item );\n\n\t\tif ( this.items.indexOf( item ) !== -1 ) {\n\t\t\tthis.currentItem = item;\n\t\t\tthis.emit( 'set', item );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Update the visibility of all items in case of non-continuous view.\n *\n * Ensure all items are hidden except for the selected one.\n * This method does nothing when the stack is continuous.\n *\n * @private\n * @param {OO.ui.Layout[]} items Item list iterate over\n * @param {OO.ui.Layout} [selectedItem] Selected item to show\n */\nOO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {\n\tvar i, len;\n\n\tif ( !this.continuous ) {\n\t\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\t\tif ( !selectedItem || selectedItem !== items[ i ] ) {\n\t\t\t\titems[ i ].$element.addClass( 'oo-ui-element-hidden' );\n\t\t\t\titems[ i ].$element.attr( 'aria-hidden', 'true' );\n\t\t\t}\n\t\t}\n\t\tif ( selectedItem ) {\n\t\t\tselectedItem.$element.removeClass( 'oo-ui-element-hidden' );\n\t\t\tselectedItem.$element.removeAttr( 'aria-hidden' );\n\t\t}\n\t}\n};\n","/**\n * MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)\n * and its size is customized with the #menuSize config. The content area will fill all remaining space.\n *\n *     @example\n *     var menuLayout = new OO.ui.MenuLayout( {\n *         position: 'top'\n *     } ),\n *         menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         select = new OO.ui.SelectWidget( {\n *             items: [\n *                 new OO.ui.OptionWidget( {\n *                     data: 'before',\n *                     label: 'Before',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'after',\n *                     label: 'After',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'top',\n *                     label: 'Top',\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'bottom',\n *                     label: 'Bottom',\n *                 } )\n *              ]\n *         } ).on( 'select', function ( item ) {\n *            menuLayout.setMenuPosition( item.getData() );\n *         } );\n *\n *     menuLayout.$menu.append(\n *         menuPanel.$element.append( '<b>Menu panel</b>', select.$element )\n *     );\n *     menuLayout.$content.append(\n *         contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')\n *     );\n *     $( 'body' ).append( menuLayout.$element );\n *\n * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet\n * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the\n * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions\n * may be omitted.\n *\n *     .oo-ui-menuLayout-menu {\n *         height: 200px;\n *         width: 200px;\n *     }\n *     .oo-ui-menuLayout-content {\n *         top: 200px;\n *         left: 200px;\n *         right: 200px;\n *         bottom: 200px;\n *     }\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [expanded=true] Expand the layout to fill the entire parent element.\n * @cfg {boolean} [showMenu=true] Show menu\n * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`\n */\nOO.ui.MenuLayout = function OoUiMenuLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\texpanded: true,\n\t\tshowMenu: true,\n\t\tmenuPosition: 'before'\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.MenuLayout.parent.call( this, config );\n\n\tthis.expanded = !!config.expanded;\n\t/**\n\t * Menu DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$menu = $( '<div>' );\n\t/**\n\t * Content DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$content = $( '<div>' );\n\n\t// Initialization\n\tthis.$menu\n\t\t.addClass( 'oo-ui-menuLayout-menu' );\n\tthis.$content.addClass( 'oo-ui-menuLayout-content' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuLayout' );\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-expanded' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-static' );\n\t}\n\tthis.setMenuPosition( config.menuPosition );\n\tthis.toggleMenu( config.showMenu );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Toggle menu.\n *\n * @param {boolean} showMenu Show menu, omit to toggle\n * @chainable\n */\nOO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {\n\tshowMenu = showMenu === undefined ? !this.showMenu : !!showMenu;\n\n\tif ( this.showMenu !== showMenu ) {\n\t\tthis.showMenu = showMenu;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )\n\t\t\t.toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );\n\t\tthis.$menu.attr( 'aria-hidden', this.showMenu ? 'false' : 'true' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if menu is visible\n *\n * @return {boolean} Menu is visible\n */\nOO.ui.MenuLayout.prototype.isMenuVisible = function () {\n\treturn this.showMenu;\n};\n\n/**\n * Set menu position.\n *\n * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`\n * @throws {Error} If position value is not supported\n * @chainable\n */\nOO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {\n\tthis.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );\n\tthis.menuPosition = position;\n\tif ( this.menuPosition === 'top' || this.menuPosition === 'before' ) {\n\t\tthis.$element.append( this.$menu, this.$content );\n\t} else {\n\t\tthis.$element.append( this.$content, this.$menu );\n\t}\n\tthis.$element.addClass( 'oo-ui-menuLayout-' + position );\n\n\treturn this;\n};\n\n/**\n * Get menu position.\n *\n * @return {string} Menu position\n */\nOO.ui.MenuLayout.prototype.getMenuPosition = function () {\n\treturn this.menuPosition;\n};\n","/**\n * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as\n * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate\n * through the pages and select which one to display. By default, only one page is\n * displayed at a time and the outline is hidden. When a user navigates to a new page,\n * the booklet layout automatically focuses on the first focusable element, unless the\n * default setting is changed. Optionally, booklets can be configured to show\n * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.\n *\n *     @example\n *     // Example of a BookletLayout that contains two PageLayouts.\n *\n *     function PageOneLayout( name, config ) {\n *         PageOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );\n *     }\n *     OO.inheritClass( PageOneLayout, OO.ui.PageLayout );\n *     PageOneLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page One' );\n *     };\n *\n *     function PageTwoLayout( name, config ) {\n *         PageTwoLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>Second page</p>' );\n *     }\n *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );\n *     PageTwoLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page Two' );\n *     };\n *\n *     var page1 = new PageOneLayout( 'one' ),\n *         page2 = new PageTwoLayout( 'two' );\n *\n *     var booklet = new OO.ui.BookletLayout( {\n *         outlined: true\n *     } );\n *\n *     booklet.addPages ( [ page1, page2 ] );\n *     $( 'body' ).append( booklet.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all pages, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed. Disabled on mobile.\n * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.\n * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages\n */\nOO.ui.BookletLayout = function OoUiBookletLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.BookletLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentPageName = null;\n\tthis.pages = {};\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.$content.append( this.stackLayout.$element );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\tthis.outlineVisible = false;\n\tthis.outlined = !!config.outlined;\n\tif ( this.outlined ) {\n\t\tthis.editable = !!config.editable;\n\t\tthis.outlineControlsWidget = null;\n\t\tthis.outlineSelectWidget = new OO.ui.OutlineSelectWidget();\n\t\tthis.outlinePanel = new OO.ui.PanelLayout( {\n\t\t\texpanded: this.expanded,\n\t\t\tscrollable: true\n\t\t} );\n\t\tthis.$menu.append( this.outlinePanel.$element );\n\t\tthis.outlineVisible = true;\n\t\tif ( this.editable ) {\n\t\t\tthis.outlineControlsWidget = new OO.ui.OutlineControlsWidget(\n\t\t\t\tthis.outlineSelectWidget\n\t\t\t);\n\t\t}\n\t}\n\tthis.toggleMenu( this.outlined );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );\n\t\tthis.scrolling = false;\n\t\tthis.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );\n\t}\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-bookletLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );\n\tif ( this.outlined ) {\n\t\tthis.outlinePanel.$element\n\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel' )\n\t\t\t.append( this.outlineSelectWidget.$element );\n\t\tif ( this.editable ) {\n\t\t\tthis.outlinePanel.$element\n\t\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )\n\t\t\t\t.append( this.outlineControlsWidget.$element );\n\t\t}\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.\n * @event set\n * @param {OO.ui.PageLayout} page Current page\n */\n\n/**\n * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.\n *\n * @event add\n * @param {OO.ui.PageLayout[]} page Added pages\n * @param {number} index Index pages were added at\n */\n\n/**\n * A 'remove' event is emitted when pages are {@link #clearPages cleared} or\n * {@link #removePages removed} from the booklet.\n *\n * @event remove\n * @param {OO.ui.PageLayout[]} pages Removed pages\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusin event\n */\nOO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the page that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-pageLayout' );\n\tfor ( name in this.pages ) {\n\t\t// Check for page match, exclude current page to find only page changes\n\t\tif ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {\n\t\t\tthis.setPage( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle visibleItemChange events from the stackLayout\n *\n * The next visible page is set as the current page by selecting it\n * in the outline\n *\n * @param {OO.ui.PageLayout} page The next visible page in the layout\n */\nOO.ui.BookletLayout.prototype.onStackLayoutVisibleItemChange = function ( page ) {\n\t// Set a flag to so that the resulting call to #onStackLayoutSet doesn't\n\t// try and scroll the item into view again.\n\tthis.scrolling = true;\n\tthis.outlineSelectWidget.selectItemByData( page.getName() );\n\tthis.scrolling = false;\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel\n */\nOO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {\n\tvar promise, layout = this;\n\t// If everything is unselected, do nothing\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// For continuous BookletLayouts, scroll the selected page into view first\n\tif ( this.stackLayout.continuous && !this.scrolling ) {\n\t\tpromise = page.scrollElementIntoView();\n\t} else {\n\t\tpromise = $.Deferred().resolve();\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tpromise.done( function () {\n\t\t\tlayout.focus();\n\t\t} );\n\t}\n};\n\n/**\n * Focus the first input in the current page.\n *\n * If no page is selected, the first selectable page will be selected.\n * If the focus is already in an element on the current page, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {\n\tvar page,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\tpage = items[ itemIndex ];\n\t} else {\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !page && this.outlined ) {\n\t\tthis.selectFirstSelectablePage();\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( page.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\tpage.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the booklet layout and focus\n * on it.\n */\nOO.ui.BookletLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle outline widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setPage( item.getData() );\n\t}\n};\n\n/**\n * Check if booklet has an outline.\n *\n * @return {boolean} Booklet has an outline\n */\nOO.ui.BookletLayout.prototype.isOutlined = function () {\n\treturn this.outlined;\n};\n\n/**\n * Check if booklet has editing controls.\n *\n * @return {boolean} Booklet is editable\n */\nOO.ui.BookletLayout.prototype.isEditable = function () {\n\treturn this.editable;\n};\n\n/**\n * Check if booklet has a visible outline.\n *\n * @return {boolean} Outline is visible\n */\nOO.ui.BookletLayout.prototype.isOutlineVisible = function () {\n\treturn this.outlined && this.outlineVisible;\n};\n\n/**\n * Hide or show the outline.\n *\n * @param {boolean} [show] Show outline, omit to invert current state\n * @chainable\n */\nOO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {\n\tvar booklet = this;\n\n\tif ( this.outlined ) {\n\t\tshow = show === undefined ? !this.outlineVisible : !!show;\n\t\tthis.outlineVisible = show;\n\t\tthis.toggleMenu( show );\n\t\tif ( show && this.editable ) {\n\t\t\t// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798. Only necessary when\n\t\t\t// outline controls are present, delay matches transition on `.oo-ui-menuLayout-menu`.\n\t\t\tsetTimeout( function () {\n\t\t\t\tOO.ui.Element.static.reconsiderScrollbars( booklet.outlinePanel.$element[ 0 ] );\n\t\t\t}, 200 );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Find the page closest to the specified page.\n *\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.findClosestPage = function ( page ) {\n\tvar next, prev, level,\n\t\tpages = this.stackLayout.getItems(),\n\t\tindex = pages.indexOf( page );\n\n\tif ( index !== -1 ) {\n\t\tnext = pages[ index + 1 ];\n\t\tprev = pages[ index - 1 ];\n\t\t// Prefer adjacent pages at the same level\n\t\tif ( this.outlined ) {\n\t\t\tlevel = this.outlineSelectWidget.getItemFromData( page.getName() ).getLevel();\n\t\t\tif (\n\t\t\t\tprev &&\n\t\t\t\tlevel === this.outlineSelectWidget.getItemFromData( prev.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnext &&\n\t\t\t\tlevel === this.outlineSelectWidget.getItemFromData( next.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the page closest to the specified page.\n *\n * @deprecated 0.23.0 Use {@link OO.ui.BookletLayout#findClosestPage} instead.\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {\n\tOO.ui.warnDeprecation( 'BookletLayout#getClosestPage: Deprecated function. Use findClosestPage instead. See T76630.' );\n\treturn this.findClosestPage( page );\n};\n\n/**\n * Get the outline widget.\n *\n * If the booklet is not outlined, the method will return `null`.\n *\n * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined\n */\nOO.ui.BookletLayout.prototype.getOutline = function () {\n\treturn this.outlineSelectWidget;\n};\n\n/**\n * Get the outline controls widget.\n *\n * If the outline is not editable, the method will return `null`.\n *\n * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.\n */\nOO.ui.BookletLayout.prototype.getOutlineControls = function () {\n\treturn this.outlineControlsWidget;\n};\n\n/**\n * Get a page by its symbolic name.\n *\n * @param {string} name Symbolic name of page\n * @return {OO.ui.PageLayout|undefined} Page, if found\n */\nOO.ui.BookletLayout.prototype.getPage = function ( name ) {\n\treturn this.pages[ name ];\n};\n\n/**\n * Get the current page.\n *\n * @return {OO.ui.PageLayout|undefined} Current page, if found\n */\nOO.ui.BookletLayout.prototype.getCurrentPage = function () {\n\tvar name = this.getCurrentPageName();\n\treturn name ? this.getPage( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current page.\n *\n * @return {string|null} Symbolic name of the current page\n */\nOO.ui.BookletLayout.prototype.getCurrentPageName = function () {\n\treturn this.currentPageName;\n};\n\n/**\n * Add pages to the booklet layout\n *\n * When pages are added with the same names as existing pages, the existing pages will be\n * automatically removed before the new pages are added.\n *\n * @param {OO.ui.PageLayout[]} pages Pages to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n */\nOO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {\n\tvar i, len, name, page, item, currentIndex,\n\t\tstackLayoutPages = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove pages with same names\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutPages.indexOf( this.pages[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.pages[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removePages( remove );\n\t}\n\n\t// Add new pages\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tthis.pages[ page.getName() ] = page;\n\t\tif ( this.outlined ) {\n\t\t\titem = new OO.ui.OutlineOptionWidget( { data: name } );\n\t\t\tpage.setOutlineItem( item );\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.addItems( pages, index );\n\tthis.emit( 'add', pages, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified pages from the booklet layout.\n *\n * To remove all pages from the booklet, you may wish to use the #clearPages method instead.\n *\n * @param {OO.ui.PageLayout[]} pages An array of pages to remove\n * @fires remove\n * @chainable\n */\nOO.ui.BookletLayout.prototype.removePages = function ( pages ) {\n\tvar i, len, name, page,\n\t\titems = [];\n\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tdelete this.pages[ name ];\n\t\tif ( this.outlined ) {\n\t\t\titems.push( this.outlineSelectWidget.getItemFromData( name ) );\n\t\t\tpage.setOutlineItem( null );\n\t\t}\n\t}\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.removeItems( pages );\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Clear all pages from the booklet layout.\n *\n * To remove only a subset of pages from the booklet, use the #removePages method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.BookletLayout.prototype.clearPages = function () {\n\tvar i, len,\n\t\tpages = this.stackLayout.getItems();\n\n\tthis.pages = {};\n\tthis.currentPageName = null;\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.clearItems();\n\t\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\t\tpages[ i ].setOutlineItem( null );\n\t\t}\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Set the current page by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of page\n */\nOO.ui.BookletLayout.prototype.setPage = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpage = this.pages[ name ],\n\t\tpreviousPage = this.currentPageName && this.pages[ this.currentPageName ];\n\n\tif ( name !== this.currentPageName ) {\n\t\tif ( this.outlined ) {\n\t\t\tselectedItem = this.outlineSelectWidget.getSelectedItem();\n\t\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\t\tthis.outlineSelectWidget.selectItemByData( name );\n\t\t\t}\n\t\t}\n\t\tif ( page ) {\n\t\t\tif ( previousPage ) {\n\t\t\t\tpreviousPage.setActive( false );\n\t\t\t\t// Blur anything focused if the next page doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next page has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next page is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( page.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentPageName = name;\n\t\t\tpage.setActive( true );\n\t\t\tthis.stackLayout.setItem( page );\n\t\t\tif ( !this.stackLayout.continuous && previousPage ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous page should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', page );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable page.\n *\n * @chainable\n */\nOO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {\n\tif ( !this.outlineSelectWidget.getSelectedItem() ) {\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * IndexLayouts contain {@link OO.ui.TabPanelLayout tab panel layouts} as well as\n * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels and\n * select which one to display. By default, only one tab panel is displayed at a time. When a user\n * navigates to a new tab panel, the index layout automatically focuses on the first focusable element,\n * unless the default setting is changed.\n *\n * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication\n *\n *     @example\n *     // Example of a IndexLayout that contains two TabPanelLayouts.\n *\n *     function TabPanelOneLayout( name, config ) {\n *         TabPanelOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First tab panel</p>' );\n *     }\n *     OO.inheritClass( TabPanelOneLayout, OO.ui.TabPanelLayout );\n *     TabPanelOneLayout.prototype.setupTabItem = function () {\n *         this.tabItem.setLabel( 'Tab panel one' );\n *     };\n *\n *     var tabPanel1 = new TabPanelOneLayout( 'one' ),\n *         tabPanel2 = new OO.ui.TabPanelLayout( 'two', { label: 'Tab panel two' } );\n *\n *     tabPanel2.$element.append( '<p>Second tab panel</p>' );\n *\n *     var index = new OO.ui.IndexLayout();\n *\n *     index.addTabPanels ( [ tabPanel1, tabPanel2 ] );\n *     $( 'body' ).append( index.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all tab panels, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is displayed. Disabled on mobile.\n */\nOO.ui.IndexLayout = function OoUiIndexLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {}, config, { menuPosition: 'top' } );\n\n\t// Parent constructor\n\tOO.ui.IndexLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentTabPanelName = null;\n\tthis.tabPanels = {};\n\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.$content.append( this.stackLayout.$element );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\n\tthis.tabSelectWidget = new OO.ui.TabSelectWidget();\n\tthis.tabPanel = new OO.ui.PanelLayout( {\n\t\texpanded: this.expanded\n\t} );\n\tthis.$menu.append( this.tabPanel.$element );\n\n\tthis.toggleMenu( true );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tthis.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indexLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );\n\tthis.tabPanel.$element\n\t\t.addClass( 'oo-ui-indexLayout-tabPanel' )\n\t\t.append( this.tabSelectWidget.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the index layout.\n * @event set\n * @param {OO.ui.TabPanelLayout} tabPanel Current tab panel\n */\n\n/**\n * An 'add' event is emitted when tab panels are {@link #addTabPanels added} to the index layout.\n *\n * @event add\n * @param {OO.ui.TabPanelLayout[]} tabPanel Added tab panels\n * @param {number} index Index tab panels were added at\n */\n\n/**\n * A 'remove' event is emitted when tab panels are {@link #clearTabPanels cleared} or\n * {@link #removeTabPanels removed} from the index.\n *\n * @event remove\n * @param {OO.ui.TabPanelLayout[]} tabPanel Removed tab panels\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusing event\n */\nOO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the tab panel that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-tabPanelLayout' );\n\tfor ( name in this.tabPanels ) {\n\t\t// Check for tab panel match, exclude current tab panel to find only tab panel changes\n\t\tif ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentTabPanelName ) {\n\t\t\tthis.setTabPanel( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} tabPanel The tab panel that is now the current panel\n */\nOO.ui.IndexLayout.prototype.onStackLayoutSet = function ( tabPanel ) {\n\t// If everything is unselected, do nothing\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Focus the first input in the current tab panel.\n *\n * If no tab panel is selected, the first selectable tab panel will be selected.\n * If the focus is already in an element on the current tab panel, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {\n\tvar tabPanel,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\ttabPanel = items[ itemIndex ];\n\t} else {\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !tabPanel ) {\n\t\tthis.selectFirstSelectableTabPanel();\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( tabPanel.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\ttabPanel.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the index layout and focus\n * on it.\n */\nOO.ui.IndexLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle tab widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setTabPanel( item.getData() );\n\t}\n};\n\n/**\n * Get the tab panel closest to the specified tab panel.\n *\n * @param {OO.ui.TabPanelLayout} tabPanel Tab panel to use as a reference point\n * @return {OO.ui.TabPanelLayout|null} Tab panel closest to the specified\n */\nOO.ui.IndexLayout.prototype.getClosestTabPanel = function ( tabPanel ) {\n\tvar next, prev, level,\n\t\ttabPanels = this.stackLayout.getItems(),\n\t\tindex = tabPanels.indexOf( tabPanel );\n\n\tif ( index !== -1 ) {\n\t\tnext = tabPanels[ index + 1 ];\n\t\tprev = tabPanels[ index - 1 ];\n\t\t// Prefer adjacent tab panels at the same level\n\t\tlevel = this.tabSelectWidget.getItemFromData( tabPanel.getName() ).getLevel();\n\t\tif (\n\t\t\tprev &&\n\t\t\tlevel === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()\n\t\t) {\n\t\t\treturn prev;\n\t\t}\n\t\tif (\n\t\t\tnext &&\n\t\t\tlevel === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()\n\t\t) {\n\t\t\treturn next;\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the tabs widget.\n *\n * @return {OO.ui.TabSelectWidget} Tabs widget\n */\nOO.ui.IndexLayout.prototype.getTabs = function () {\n\treturn this.tabSelectWidget;\n};\n\n/**\n * Get a tab panel by its symbolic name.\n *\n * @param {string} name Symbolic name of tab panel\n * @return {OO.ui.TabPanelLayout|undefined} Tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getTabPanel = function ( name ) {\n\treturn this.tabPanels[ name ];\n};\n\n/**\n * Get the current tab panel.\n *\n * @return {OO.ui.TabPanelLayout|undefined} Current tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanel = function () {\n\tvar name = this.getCurrentTabPanelName();\n\treturn name ? this.getTabPanel( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current tab panel.\n *\n * @return {string|null} Symbolic name of the current tab panel\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanelName = function () {\n\treturn this.currentTabPanelName;\n};\n\n/**\n * Add tab panels to the index layout\n *\n * When tab panels are added with the same names as existing tab panels, the existing tab panels\n * will be automatically removed before the new tab panels are added.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels Tab panels to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n */\nOO.ui.IndexLayout.prototype.addTabPanels = function ( tabPanels, index ) {\n\tvar i, len, name, tabPanel, item, currentIndex,\n\t\tstackLayoutTabPanels = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove tab panels with same names\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.tabPanels, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutTabPanels.indexOf( this.tabPanels[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.tabPanels[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeTabPanels( remove );\n\t}\n\n\t// Add new tab panels\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tthis.tabPanels[ tabPanel.getName() ] = tabPanel;\n\t\titem = new OO.ui.TabOptionWidget( { data: name } );\n\t\ttabPanel.setTabItem( item );\n\t\titems.push( item );\n\t}\n\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.addItems( tabPanels, index );\n\tthis.emit( 'add', tabPanels, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified tab panels from the index layout.\n *\n * To remove all tab panels from the index, you may wish to use the #clearTabPanels method instead.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels An array of tab panels to remove\n * @fires remove\n * @chainable\n */\nOO.ui.IndexLayout.prototype.removeTabPanels = function ( tabPanels ) {\n\tvar i, len, name, tabPanel,\n\t\titems = [];\n\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tdelete this.tabPanels[ name ];\n\t\titems.push( this.tabSelectWidget.getItemFromData( name ) );\n\t\ttabPanel.setTabItem( null );\n\t}\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.removeItems( tabPanels );\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Clear all tab panels from the index layout.\n *\n * To remove only a subset of tab panels from the index, use the #removeTabPanels method.\n *\n * @fires remove\n * @chainable\n */\nOO.ui.IndexLayout.prototype.clearTabPanels = function () {\n\tvar i, len,\n\t\ttabPanels = this.stackLayout.getItems();\n\n\tthis.tabPanels = {};\n\tthis.currentTabPanelName = null;\n\tthis.tabSelectWidget.clearItems();\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanels[ i ].setTabItem( null );\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Set the current tab panel by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of tab panel\n */\nOO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\ttabPanel = this.tabPanels[ name ],\n\t\tpreviousTabPanel = this.currentTabPanelName && this.tabPanels[ this.currentTabPanelName ];\n\n\tif ( name !== this.currentTabPanelName ) {\n\t\tselectedItem = this.tabSelectWidget.getSelectedItem();\n\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\tthis.tabSelectWidget.selectItemByData( name );\n\t\t}\n\t\tif ( tabPanel ) {\n\t\t\tif ( previousTabPanel ) {\n\t\t\t\tpreviousTabPanel.setActive( false );\n\t\t\t\t// Blur anything focused if the next tab panel doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next tab panel has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next tab panel is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( tabPanel.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentTabPanelName = name;\n\t\t\ttabPanel.setActive( true );\n\t\t\tthis.stackLayout.setItem( tabPanel );\n\t\t\tif ( !this.stackLayout.continuous && previousTabPanel ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous tab panel should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', tabPanel );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable tab panel.\n *\n * @chainable\n */\nOO.ui.IndexLayout.prototype.selectFirstSelectableTabPanel = function () {\n\tif ( !this.tabSelectWidget.getSelectedItem() ) {\n\t\tthis.tabSelectWidget.selectItem( this.tabSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * ToggleWidget implements basic behavior of widgets with an on/off state.\n * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle’s initial on/off state.\n *  By default, the toggle is in the 'off' state.\n */\nOO.ui.ToggleWidget = function OoUiToggleWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.value = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-toggleWidget' );\n\tthis.setValue( !!config.value );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {boolean} value Value representing the new state of the toggle\n */\n\n/* Methods */\n\n/**\n * Get the value representing the toggle’s state.\n *\n * @return {boolean} The on/off state of the toggle\n */\nOO.ui.ToggleWidget.prototype.getValue = function () {\n\treturn this.value;\n};\n\n/**\n * Set the state of the toggle: `true` for 'on', `false` for 'off'.\n *\n * @param {boolean} value The state of the toggle\n * @fires change\n * @chainable\n */\nOO.ui.ToggleWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-on', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );\n\t}\n\treturn this;\n};\n","/**\n * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a\n * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be\n * configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},\n * {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},\n * and {@link OO.ui.mixin.LabelElement labels}. Please see\n * the [OOjs UI documentation][1] on MediaWiki for more information.\n *\n *     @example\n *     // Toggle buttons in the 'off' and 'on' state.\n *     var toggleButton1 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button off'\n *     } );\n *     var toggleButton2 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button on',\n *         value: true\n *     } );\n *     // Append the buttons to the DOM.\n *     $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle button’s initial on/off\n *  state. By default, the button is in the 'off' state.\n */\nOO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { active: this.active } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleButtonWidget' )\n\t\t.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.ToggleButtonWidget.prototype.onAction = function () {\n\tthis.setValue( !this.value );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( value !== this.value ) {\n\t\t// Might be called from parent constructor before ButtonElement constructor\n\t\tif ( this.$button ) {\n\t\t\tthis.$button.attr( 'aria-pressed', value.toString() );\n\t\t}\n\t\tthis.setActive( value );\n\t}\n\n\t// Parent method\n\tOO.ui.ToggleButtonWidget.parent.prototype.setValue.call( this, value );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button.removeAttr( 'aria-pressed' );\n\t}\n\tOO.ui.mixin.ButtonElement.prototype.setButtonElement.call( this, $button );\n\tthis.$button.attr( 'aria-pressed', this.value.toString() );\n};\n","/**\n * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean\n * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented\n * visually by a slider in the leftmost position.\n *\n *     @example\n *     // Toggle switches in the 'off' and 'on' position.\n *     var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();\n *     var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {\n *         value: true\n *     } );\n *\n *     // Create a FieldsetLayout to layout and label switches\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *        label: 'Toggle switches'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),\n *         new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.\n *  By default, the toggle switch is in the 'off' position.\n */\nOO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ToggleSwitchWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Properties\n\tthis.dragging = false;\n\tthis.dragStart = null;\n\tthis.sliding = false;\n\tthis.$glow = $( '<span>' );\n\tthis.$grip = $( '<span>' );\n\n\t// Events\n\tthis.$element.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );\n\tthis.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleSwitchWidget' )\n\t\t.attr( 'role', 'checkbox' )\n\t\t.append( this.$glow, this.$grip );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n */\nOO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.setValue( !this.value );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tthis.setValue( !this.value );\n\t\treturn false;\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.setValue = function ( value ) {\n\tOO.ui.ToggleSwitchWidget.parent.prototype.setValue.call( this, value );\n\tthis.$element.attr( 'aria-checked', this.value.toString() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.setValue( !this.value );\n\t}\n\tthis.focus();\n};\n","/**\n * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.\n * Controls include moving items up and down, removing items, and adding different kinds of items.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n * @mixins OO.ui.mixin.IconElement\n *\n * @constructor\n * @param {OO.ui.OutlineSelectWidget} outline Outline to control\n * @param {Object} [config] Configuration options\n * @cfg {Object} [abilities] List of abilties\n * @cfg {boolean} [abilities.move=true] Allow moving movable items\n * @cfg {boolean} [abilities.remove=true] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( outline ) && config === undefined ) {\n\t\tconfig = outline;\n\t\toutline = config.outline;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { icon: 'add' }, config );\n\n\t// Parent constructor\n\tOO.ui.OutlineControlsWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\n\t// Properties\n\tthis.outline = outline;\n\tthis.$movers = $( '<div>' );\n\tthis.upButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'collapse',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-up' )\n\t} );\n\tthis.downButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'expand',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-down' )\n\t} );\n\tthis.removeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'trash',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-remove' )\n\t} );\n\tthis.abilities = { move: true, remove: true };\n\n\t// Events\n\toutline.connect( this, {\n\t\tselect: 'onOutlineChange',\n\t\tadd: 'onOutlineChange',\n\t\tremove: 'onOutlineChange'\n\t} );\n\tthis.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );\n\tthis.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );\n\tthis.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineControlsWidget' );\n\tthis.$group.addClass( 'oo-ui-outlineControlsWidget-items' );\n\tthis.$movers\n\t\t.addClass( 'oo-ui-outlineControlsWidget-movers' )\n\t\t.append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );\n\tthis.$element.append( this.$icon, this.$group, this.$movers );\n\tthis.setAbilities( config.abilities || {} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.GroupElement );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.IconElement );\n\n/* Events */\n\n/**\n * @event move\n * @param {number} places Number of places to move\n */\n\n/**\n * @event remove\n */\n\n/* Methods */\n\n/**\n * Set abilities.\n *\n * @param {Object} abilities List of abilties\n * @param {boolean} [abilities.move] Allow moving movable items\n * @param {boolean} [abilities.remove] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {\n\tvar ability;\n\n\tfor ( ability in this.abilities ) {\n\t\tif ( abilities[ ability ] !== undefined ) {\n\t\t\tthis.abilities[ ability ] = !!abilities[ ability ];\n\t\t}\n\t}\n\n\tthis.onOutlineChange();\n};\n\n/**\n * Handle outline change events.\n *\n * @private\n */\nOO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {\n\tvar i, len, firstMovable, lastMovable,\n\t\titems = this.outline.getItems(),\n\t\tselectedItem = this.outline.getSelectedItem(),\n\t\tmovable = this.abilities.move && selectedItem && selectedItem.isMovable(),\n\t\tremovable = this.abilities.remove && selectedItem && selectedItem.isRemovable();\n\n\tif ( movable ) {\n\t\ti = -1;\n\t\tlen = items.length;\n\t\twhile ( ++i < len ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tfirstMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ti = len;\n\t\twhile ( i-- ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tlastMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tthis.upButton.setDisabled( !movable || selectedItem === firstMovable );\n\tthis.downButton.setDisabled( !movable || selectedItem === lastMovable );\n\tthis.removeButton.setDisabled( !removable );\n};\n","/**\n * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain\n * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [level] Indentation level\n * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.\n */\nOO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineOptionWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.level = 0;\n\tthis.movable = !!config.movable;\n\tthis.removable = !!config.removable;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineOptionWidget' );\n\tthis.setLevel( config.level );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.highlightable = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';\n\n/**\n * @static\n * @inheritable\n * @property {number}\n */\nOO.ui.OutlineOptionWidget.static.levels = 3;\n\n/* Methods */\n\n/**\n * Check if item is movable.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is movable\n */\nOO.ui.OutlineOptionWidget.prototype.isMovable = function () {\n\treturn this.movable;\n};\n\n/**\n * Check if item is removable.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is removable\n */\nOO.ui.OutlineOptionWidget.prototype.isRemovable = function () {\n\treturn this.removable;\n};\n\n/**\n * Get indentation level.\n *\n * @return {number} Indentation level\n */\nOO.ui.OutlineOptionWidget.prototype.getLevel = function () {\n\treturn this.level;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setPressed = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setPressed.call( this, state );\n\tif ( this.pressed ) {\n\t\tthis.setFlags( { progressive: true } );\n\t} else if ( !this.selected ) {\n\t\tthis.setFlags( { progressive: false } );\n\t}\n\treturn this;\n};\n\n/**\n * Set movability.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} movable Item is movable\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {\n\tthis.movable = !!movable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Set removability.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} removable Item is removable\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {\n\tthis.removable = !!removable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setSelected.call( this, state );\n\tif ( this.selected ) {\n\t\tthis.setFlags( { progressive: true } );\n\t} else {\n\t\tthis.setFlags( { progressive: false } );\n\t}\n\treturn this;\n};\n\n/**\n * Set indentation level.\n *\n * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]\n * @chainable\n */\nOO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {\n\tvar levels = this.constructor.static.levels,\n\t\tlevelClass = this.constructor.static.levelClass,\n\t\ti = levels;\n\n\tthis.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;\n\twhile ( i-- ) {\n\t\tif ( this.level === i ) {\n\t\t\tthis.$element.addClass( levelClass + i );\n\t\t} else {\n\t\t\tthis.$element.removeClass( levelClass + i );\n\t\t}\n\t}\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n","/**\n * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}\n * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.OutlineSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * ButtonOptionWidget is a special type of {@link OO.ui.mixin.ButtonElement button element} that\n * can be selected and configured with data. The class is\n * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the\n * [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonOptionWidget' );\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * Allow button mouse down events to pass through so they can be handled by the parent select widget\n *\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.highlightable = false;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.ButtonOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.setActive( state );\n\t}\n\n\treturn this;\n};\n","/**\n * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains\n * button options and is used together with\n * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for\n * highlighting, choosing, and selecting mutually exclusive options. Please see\n * the [OOjs UI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets\n *     var option1 = new OO.ui.ButtonOptionWidget( {\n *         data: 1,\n *         label: 'Option 1',\n *         title: 'Button option 1'\n *     } );\n *\n *     var option2 = new OO.ui.ButtonOptionWidget( {\n *         data: 2,\n *         label: 'Option 2',\n *         title: 'Button option 2'\n *     } );\n *\n *     var option3 = new OO.ui.ButtonOptionWidget( {\n *         data: 3,\n *         label: 'Option 3',\n *         title: 'Button option 3'\n *     } );\n *\n *     var buttonSelect=new OO.ui.ButtonSelectWidget( {\n *         items: [ option1, option2, option3 ]\n *     } );\n *     $( 'body' ).append( buttonSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ButtonSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain\n * {@link OO.ui.TabPanelLayout tab panel layouts}. See {@link OO.ui.IndexLayout IndexLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TabOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabOptionWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.TabOptionWidget.static.highlightable = false;\n","/**\n * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}\n *\n * **Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.TabSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindKeyDownListener.bind( this ),\n\t\tblur: this.unbindKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-tabSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * CapsuleItemWidgets are used within a {@link OO.ui.CapsuleMultiselectWidget\n * CapsuleMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.CapsuleItemWidget = function OoUiCapsuleItemWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.CapsuleItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} ).on( 'click', this.onCloseClick.bind( this ) );\n\n\tthis.on( 'disable', function ( disabled ) {\n\t\tthis.closeButton.setDisabled( disabled );\n\t}.bind( this ) );\n\n\t// Initialization\n\tthis.$element\n\t\t.on( {\n\t\t\tclick: this.onClick.bind( this ),\n\t\t\tkeydown: this.onKeyDown.bind( this )\n\t\t} )\n\t\t.addClass( 'oo-ui-capsuleItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CapsuleItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle close icon clicks\n */\nOO.ui.CapsuleItemWidget.prototype.onCloseClick = function () {\n\tvar element = this.getElementGroup();\n\n\tif ( element && $.isFunction( element.removeItems ) ) {\n\t\telement.removeItems( [ this ] );\n\t\telement.focus();\n\t}\n};\n\n/**\n * Handle click event for the entire capsule\n */\nOO.ui.CapsuleItemWidget.prototype.onClick = function () {\n\tvar element = this.getElementGroup();\n\n\tif ( !this.isDisabled() && element && $.isFunction( element.editItem ) ) {\n\t\telement.editItem( this );\n\t}\n};\n\n/**\n * Handle keyDown event for the entire capsule\n *\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.CapsuleItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar element = this.getElementGroup();\n\n\tif ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\telement.removeItems( [ this ] );\n\t\telement.focus();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\telement.editItem( this );\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.LEFT ) {\n\t\telement.getPreviousItem( this ).focus();\n\t} else if ( e.keyCode === OO.ui.Keys.RIGHT ) {\n\t\telement.getNextItem( this ).focus();\n\t}\n};\n","/**\n * CapsuleMultiselectWidgets are something like a {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows for selecting multiple values.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A CapsuleMultiselectWidget.\n *     var capsule = new OO.ui.CapsuleMultiselectWidget( {\n *         label: 'CapsuleMultiselectWidget',\n *         selected: [ 'Option 1', 'Option 3' ],\n *         menu: {\n *             items: [\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 1',\n *                     label: 'Option One'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 2',\n *                     label: 'Option Two'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 3',\n *                     label: 'Option Three'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 4',\n *                     label: 'Option Four'\n *                 } ),\n *                 new OO.ui.MenuOptionWidget( {\n *                     data: 'Option 5',\n *                     label: 'Option Five'\n *                 } )\n *             ]\n *         }\n *     } );\n *     $( 'body' ).append( capsule.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n * @mixins OO.ui.mixin.PopupElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @uses OO.ui.CapsuleItemWidget\n * @uses OO.ui.MenuSelectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [placeholder] Placeholder text\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if not present in the menu.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added.\n * @cfg {Object} [menu] (required) Configuration options to pass to the\n *  {@link OO.ui.MenuSelectWidget menu select widget}.\n * @cfg {Object} [popup] Configuration options to pass to the {@link OO.ui.PopupWidget popup widget}.\n *  If specified, this popup will be shown instead of the menu (but the menu\n *  will still be used for item labels and allowArbitrary=false). The widgets\n *  in the popup should use {@link #addItemsFromData} or {@link #addItems} as necessary.\n * @cfg {jQuery} [$overlay=this.$element] Render the menu or popup into a separate layer.\n *  This configuration is useful in cases where the expanded menu is larger than\n *  its containing `<div>`. The specified overlay layer is usually on top of\n *  the containing `<div>` and has a larger area. By default, the menu uses\n *  relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n */\nOO.ui.CapsuleMultiselectWidget = function OoUiCapsuleMultiselectWidget( config ) {\n\tvar $tabFocus;\n\n\t// Parent constructor\n\tOO.ui.CapsuleMultiselectWidget.parent.call( this, config );\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tallowArbitrary: false,\n\t\tallowDuplicates: false,\n\t\t$overlay: this.$element\n\t}, config );\n\n\t// Properties (must be set before mixin constructor calls)\n\tthis.$handle = $( '<div>' );\n\tthis.$input = config.popup ? null : $( '<input>' );\n\tif ( config.placeholder !== undefined && config.placeholder !== '' ) {\n\t\tthis.$input.attr( 'placeholder', config.placeholder );\n\t}\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\tif ( config.popup ) {\n\t\tconfig.popup = $.extend( {}, config.popup, {\n\t\t\talign: 'forwards',\n\t\t\tanchor: false\n\t\t} );\n\t\tOO.ui.mixin.PopupElement.call( this, config );\n\t\t$tabFocus = $( '<span>' );\n\t\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: $tabFocus } ) );\n\t} else {\n\t\tthis.popup = null;\n\t\t$tabFocus = null;\n\t\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );\n\t}\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\n\t// Properties\n\tthis.$content = $( '<div>' );\n\tthis.allowArbitrary = config.allowArbitrary;\n\tthis.allowDuplicates = config.allowDuplicates;\n\tthis.$overlay = config.$overlay;\n\tthis.menu = new OO.ui.MenuSelectWidget( $.extend(\n\t\t{\n\t\t\twidget: this,\n\t\t\t$input: this.$input,\n\t\t\t$floatableContainer: this.$element,\n\t\t\tfilterFromInput: true,\n\t\t\tdisabled: this.isDisabled()\n\t\t},\n\t\tconfig.menu\n\t) );\n\n\t// Events\n\tif ( this.popup ) {\n\t\t$tabFocus.on( {\n\t\t\tfocus: this.focus.bind( this )\n\t\t} );\n\t\tthis.popup.$element.on( 'focusout', this.onPopupFocusOut.bind( this ) );\n\t\tif ( this.popup.$autoCloseIgnore ) {\n\t\t\tthis.popup.$autoCloseIgnore.on( 'focusout', this.onPopupFocusOut.bind( this ) );\n\t\t}\n\t\tthis.popup.connect( this, {\n\t\t\ttoggle: function ( visible ) {\n\t\t\t\t$tabFocus.toggle( !visible );\n\t\t\t}\n\t\t} );\n\t} else {\n\t\tthis.$input.on( {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t\tkeypress: this.onKeyPress.bind( this )\n\t\t} );\n\t}\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle',\n\t\tadd: 'onMenuItemsChange',\n\t\tremove: 'onMenuItemsChange'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialization\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t\tthis.$input.attr( {\n\t\t\trole: 'combobox',\n\t\t\t'aria-owns': this.menu.getElementId(),\n\t\t\t'aria-autocomplete': 'list'\n\t\t} );\n\t}\n\tif ( config.data ) {\n\t\tthis.setItemsFromData( config.data );\n\t}\n\tthis.$content.addClass( 'oo-ui-capsuleMultiselectWidget-content' )\n\t\t.append( this.$group );\n\tthis.$group.addClass( 'oo-ui-capsuleMultiselectWidget-group' );\n\tthis.$handle.addClass( 'oo-ui-capsuleMultiselectWidget-handle' )\n\t\t.append( this.$indicator, this.$icon, this.$content );\n\tthis.$element.addClass( 'oo-ui-capsuleMultiselectWidget' )\n\t\t.append( this.$handle );\n\tif ( this.popup ) {\n\t\tthis.popup.$element.addClass( 'oo-ui-capsuleMultiselectWidget-popup' );\n\t\tthis.$content.append( $tabFocus );\n\t\tthis.$overlay.append( this.popup.$element );\n\t} else {\n\t\tthis.$content.append( this.$input );\n\t\tthis.$overlay.append( this.menu.$element );\n\t}\n\tif ( $tabFocus ) {\n\t\t$tabFocus.addClass( 'oo-ui-capsuleMultiselectWidget-focusTrap' );\n\t}\n\n\t// Input size needs to be calculated after everything else is rendered\n\tsetTimeout( function () {\n\t\tif ( this.$input ) {\n\t\t\tthis.updateInputSize();\n\t\t}\n\t}.bind( this ) );\n\n\tthis.onMenuItemsChange();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.CapsuleMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.GroupElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.PopupElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.CapsuleMultiselectWidget, OO.ui.mixin.IconElement );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the set of selected items changes.\n *\n * @param {Mixed[]} datas Data of the now-selected items\n */\n\n/**\n * @event resize\n *\n * A resize event is emitted when the widget's dimensions change to accomodate newly added items or\n * current user input.\n */\n\n/* Methods */\n\n/**\n * Construct a OO.ui.CapsuleItemWidget (or a subclass thereof) from given label and data.\n * May return `null` if the given label and data are not valid.\n *\n * @protected\n * @param {Mixed} data Custom data of any type.\n * @param {string} label The label text.\n * @return {OO.ui.CapsuleItemWidget|null}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.createItemWidget = function ( data, label ) {\n\tif ( label === '' ) {\n\t\treturn null;\n\t}\n\treturn new OO.ui.CapsuleItemWidget( { data: data, label: label } );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getInputId = function () {\n\tif ( !this.$input ) {\n\t\treturn null;\n\t}\n\treturn OO.ui.mixin.TabIndexedElement.prototype.getInputId.call( this );\n};\n\n/**\n * Get the data of the items in the capsule\n *\n * @return {Mixed[]}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getItemsData = function () {\n\treturn this.getItems().map( function ( item ) {\n\t\treturn item.data;\n\t} );\n};\n\n/**\n * Set the items in the capsule by providing data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.setItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\tmenu = this.menu,\n\t\titems = this.getItems();\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar j, label,\n\t\t\titem = menu.getItemFromData( data );\n\n\t\tif ( item ) {\n\t\t\tlabel = item.label;\n\t\t} else if ( widget.allowArbitrary ) {\n\t\t\tlabel = String( data );\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\titem = null;\n\t\tfor ( j = 0; j < items.length; j++ ) {\n\t\t\tif ( items[ j ].data === data && items[ j ].label === label ) {\n\t\t\t\titem = items[ j ];\n\t\t\t\titems.splice( j, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif ( !item ) {\n\t\t\titem = widget.createItemWidget( data, label );\n\t\t}\n\t\tif ( item ) {\n\t\t\twidget.addItems( [ item ], i );\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\twidget.removeItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * Add items to the capsule by providing their data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\tmenu = this.menu,\n\t\titems = [];\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar item;\n\n\t\tif ( !widget.getItemFromData( data ) || widget.allowDuplicates ) {\n\t\t\titem = menu.getItemFromData( data );\n\t\t\tif ( item ) {\n\t\t\t\titem = widget.createItemWidget( data, item.label );\n\t\t\t} else if ( widget.allowArbitrary ) {\n\t\t\t\titem = widget.createItemWidget( data, String( data ) );\n\t\t\t}\n\t\t\tif ( item ) {\n\t\t\t\titems.push( item );\n\t\t\t}\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\tthis.addItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * Add items to the capsule by providing a label\n *\n * @param {string} label\n * @return {boolean} Whether the item was added or not\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItemFromLabel = function ( label ) {\n\tvar item, items;\n\titem = this.menu.getItemFromLabel( label, true );\n\tif ( item ) {\n\t\tthis.addItemsFromData( [ item.data ] );\n\t\treturn true;\n\t} else if ( this.allowArbitrary ) {\n\t\titems = this.getItems();\n\t\tthis.addItemsFromData( [ label ] );\n\t\treturn !OO.compare( this.getItems(), items );\n\t}\n\treturn false;\n};\n\n/**\n * Remove items by data\n *\n * @chainable\n * @param {Mixed[]} datas\n * @return {OO.ui.CapsuleMultiselectWidget}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.removeItemsFromData = function ( datas ) {\n\tvar widget = this,\n\t\titems = [];\n\n\t$.each( datas, function ( i, data ) {\n\t\tvar item = widget.getItemFromData( data );\n\t\tif ( item ) {\n\t\t\titems.push( item );\n\t\t}\n\t} );\n\n\tif ( items.length ) {\n\t\tthis.removeItems( items );\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.addItems = function ( items ) {\n\tvar same, i, l,\n\t\toldItems = this.items.slice();\n\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items );\n\n\tif ( this.items.length !== oldItems.length ) {\n\t\tsame = false;\n\t} else {\n\t\tsame = true;\n\t\tfor ( i = 0, l = oldItems.length; same && i < l; i++ ) {\n\t\t\tsame = same && this.items[ i ] === oldItems[ i ];\n\t\t}\n\t}\n\tif ( !same ) {\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\n\treturn this;\n};\n\n/**\n * Removes the item from the list and copies its label to `this.$input`.\n *\n * @param {Object} item\n */\nOO.ui.CapsuleMultiselectWidget.prototype.editItem = function ( item ) {\n\tthis.addItemFromLabel( this.$input.val() );\n\tthis.clearInput();\n\tthis.$input.val( item.label );\n\tthis.updateInputSize();\n\tthis.focus();\n\tthis.menu.updateItemVisibility(); // Hack, we shouldn't be calling this method directly\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.removeItems = function ( items ) {\n\tvar same, i, l,\n\t\toldItems = this.items.slice();\n\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( this.items.length !== oldItems.length ) {\n\t\tsame = false;\n\t} else {\n\t\tsame = true;\n\t\tfor ( i = 0, l = oldItems.length; same && i < l; i++ ) {\n\t\t\tsame = same && this.items[ i ] === oldItems[ i ];\n\t\t}\n\t}\n\tif ( !same ) {\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.clearItems = function () {\n\tif ( this.items.length ) {\n\t\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\t\tthis.emit( 'change', this.getItemsData() );\n\t\tthis.updateInputSize();\n\t}\n\treturn this;\n};\n\n/**\n * Given an item, returns the item after it. If its the last item,\n * returns `this.$input`. If no item is passed, returns the very first\n * item.\n *\n * @param {OO.ui.CapsuleItemWidget} [item]\n * @return {OO.ui.CapsuleItemWidget|jQuery|boolean}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex;\n\n\tif ( item === undefined ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\titemIndex = this.items.indexOf( item );\n\tif ( itemIndex < 0 ) { // Item not in list\n\t\treturn false;\n\t} else if ( itemIndex === this.items.length - 1 ) { // Last item\n\t\treturn this.$input;\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If its the first item,\n * returns `this.$input`. If no item is passed, returns the very last\n * item.\n *\n * @param {OO.ui.CapsuleItemWidget} [item]\n * @return {OO.ui.CapsuleItemWidget|jQuery|boolean}\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex;\n\n\tif ( item === undefined ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\titemIndex = this.items.indexOf( item );\n\tif ( itemIndex < 0 ) { // Item not in list\n\t\treturn false;\n\t} else if ( itemIndex === 0 ) { // First item\n\t\treturn this.$input;\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Get the capsule widget's menu.\n *\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.CapsuleMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Handle focus events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onInputFocus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.updateInputSize();\n\t\tthis.menu.toggle( true );\n\t}\n};\n\n/**\n * Handle blur events\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.addItemFromLabel( this.$input.val() );\n\tthis.clearInput();\n};\n\n/**\n * Handles popup focus out events.\n *\n * @private\n * @param {jQuery.Event} e Focus out event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onPopupFocusOut = function () {\n\tvar widget = this.popup;\n\n\tsetTimeout( function () {\n\t\tif (\n\t\t\twidget.isVisible() &&\n\t\t\t!OO.ui.contains( widget.$element.add( widget.$autoCloseIgnore ).get(), document.activeElement, true )\n\t\t) {\n\t\t\twidget.toggle( false );\n\t\t}\n\t} );\n};\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif ( e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t} else {\n\t\tthis.updateInputSize();\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ESCAPE ) {\n\t\t\tthis.clearInput();\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.popup ) {\n\t\t\tthis.menu.toggle( true );\n\t\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\t\tif ( this.addItemFromLabel( this.$input.val() ) ) {\n\t\t\t\t\tthis.clearInput();\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Make sure the input gets resized.\n\t\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\t}\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onKeyDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\tthis.$input.val() === '' &&\n\t\tthis.items.length\n\t) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\tif ( e.metaKey || e.ctrlKey ) {\n\t\t\t\tthis.removeItems( this.items.slice( -1 ) );\n\t\t\t} else {\n\t\t\t\tthis.editItem( this.items[ this.items.length - 1 ] );\n\t\t\t}\n\t\t\treturn false;\n\t\t} else if ( e.keyCode === OO.ui.Keys.LEFT ) {\n\t\t\tthis.getPreviousItem().focus();\n\t\t} else if ( e.keyCode === OO.ui.Keys.RIGHT ) {\n\t\t\tthis.getNextItem().focus();\n\t\t}\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n *\n * @private\n * @param {jQuery.Event} e Event of some sort\n */\nOO.ui.CapsuleMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.$input && !this.isDisabled() ) {\n\t\tthis.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.$input.val() === '' &&\n\t\t\tthis.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.$input.val( this.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.$input[ 0 ].scrollWidth;\n\t\t\tthis.$input.val( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 10;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 10;\n\t\t}\n\t\tthis.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so, update menu position and emit 'resize' event.\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.menu.position();\n\t\tif ( this.popup ) {\n\t\t\tthis.popup.updateDimensions();\n\t\t}\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Handle menu choose events.\n *\n * @private\n * @param {OO.ui.OptionWidget} item Chosen item\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuChoose = function ( item ) {\n\tif ( item && item.isVisible() ) {\n\t\tthis.addItemsFromData( [ item.getData() ] );\n\t\tthis.clearInput();\n\t}\n};\n\n/**\n * Handle menu toggle events.\n *\n * @private\n * @param {boolean} isVisible Open state of the menu\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tthis.$element.toggleClass( 'oo-ui-capsuleMultiselectWidget-open', isVisible );\n};\n\n/**\n * Handle menu item change events.\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.onMenuItemsChange = function () {\n\tthis.setItemsFromData( this.getItemsData() );\n\tthis.$element.toggleClass( 'oo-ui-capsuleMultiselectWidget-empty', this.menu.isEmpty() );\n};\n\n/**\n * Clear the input field\n *\n * @private\n */\nOO.ui.CapsuleMultiselectWidget.prototype.clearInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.val( '' );\n\t\tthis.updateInputSize();\n\t}\n\tif ( this.popup ) {\n\t\tthis.popup.toggle( false );\n\t}\n\tthis.menu.toggle( false );\n\tthis.menu.selectItem();\n\tthis.menu.highlightItem();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.CapsuleMultiselectWidget.prototype.setDisabled = function ( disabled ) {\n\tvar i, len;\n\n\t// Parent method\n\tOO.ui.CapsuleMultiselectWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.$input ) {\n\t\tthis.$input.prop( 'disabled', this.isDisabled() );\n\t}\n\tif ( this.menu ) {\n\t\tthis.menu.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.popup ) {\n\t\tthis.popup.setDisabled( this.isDisabled() );\n\t}\n\n\tif ( this.items ) {\n\t\tfor ( i = 0, len = this.items.length; i < len; i++ ) {\n\t\t\tthis.items[ i ].updateDisabled();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Focus the widget\n *\n * @chainable\n */\nOO.ui.CapsuleMultiselectWidget.prototype.focus = function () {\n\tif ( !this.isDisabled() ) {\n\t\tif ( this.popup ) {\n\t\t\tthis.popup.setSize( this.$handle.outerWidth() );\n\t\t\tthis.popup.toggle( true );\n\t\t\tOO.ui.findFocusable( this.popup.$element ).focus();\n\t\t} else {\n\t\t\tOO.ui.mixin.TabIndexedElement.prototype.focus.call( this );\n\t\t}\n\t}\n\treturn this;\n};\n","/**\n * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget\n * TagMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.DraggableElement\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [valid=true] Item is valid\n */\nOO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.DraggableElement.call( this, config );\n\n\tthis.valid = config.valid === undefined ? true : !!config.valid;\n\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} );\n\tthis.closeButton.setDisabled( this.isDisabled() );\n\n\t// Events\n\tthis.closeButton\n\t\t.connect( this, { click: 'remove' } );\n\tthis.$element\n\t\t.on( 'click', this.select.bind( this ) )\n\t\t.on( 'keydown', this.onKeyDown.bind( this ) )\n\t\t// Prevent propagation of mousedown; the tag item \"lives\" in the\n\t\t// clickable area of the TagMultiselectWidget, which listens to\n\t\t// mousedown to open the menu or popup. We want to prevent that\n\t\t// for clicks specifically on the tag itself, so the actions taken\n\t\t// are more deliberate. When the tag is clicked, it will emit the\n\t\t// selection event (similar to how #OO.ui.MultioptionWidget emits 'change')\n\t\t// and can be handled separately.\n\t\t.on( 'mousedown', function ( e ) { e.stopPropagation(); } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event remove\n *\n * A remove action was performed on the item\n */\n\n/**\n * @event navigate\n * @param {string} direction Direction of the movement, forward or backwards\n *\n * A navigate action was performed on the item\n */\n\n/**\n * @event select\n *\n * The tag widget was selected. This can occur when the widget\n * is either clicked or enter was pressed on it.\n */\n\n/**\n * @event valid\n * @param {boolean} isValid Item is valid\n *\n * Item validity has changed\n */\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {\n\t// Parent method\n\tOO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );\n\n\tif ( this.closeButton ) {\n\t\tthis.closeButton.setDisabled( state );\n\t}\n\treturn this;\n};\n\n/**\n * Handle removal of the item\n *\n * This is mainly for extensibility concerns, so other children\n * of this class can change the behavior if they need to. This\n * is called by both clicking the 'remove' button but also\n * on keypress, which is harder to override if needed.\n *\n * @fires remove\n */\nOO.ui.TagItemWidget.prototype.remove = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'remove' );\n\t}\n};\n\n/**\n * Handle a keydown event on the widget\n *\n * @fires navigate\n * @fires remove\n * @param {jQuery.Event} e Key down event\n * @return {boolean|undefined} false to stop the operation\n */\nOO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar movement;\n\n\tif ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\tthis.remove();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\tthis.select();\n\t\treturn false;\n\t} else if (\n\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\te.keyCode === OO.ui.Keys.RIGHT\n\t) {\n\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\tmovement = {\n\t\t\t\tleft: 'forwards',\n\t\t\t\tright: 'backwards'\n\t\t\t};\n\t\t} else {\n\t\t\tmovement = {\n\t\t\t\tleft: 'backwards',\n\t\t\t\tright: 'forwards'\n\t\t\t};\n\t\t}\n\n\t\tthis.emit(\n\t\t\t'navigate',\n\t\t\te.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right\n\t\t);\n\t}\n};\n\n/**\n * Select this item\n *\n * @fires select\n */\nOO.ui.TagItemWidget.prototype.select = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'select' );\n\t}\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Check whether the item is valid\n *\n * @return {boolean} Item is valid\n */\nOO.ui.TagItemWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows the user to add multiple values that are displayed in a tag area.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and\n * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use\n * a menu and a popup respectively.\n *\n *     @example\n *     // Example: A basic TagMultiselectWidget.\n *     var widget = new OO.ui.TagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],\n *         selected: [ 'Option 1' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n * @mixins OO.ui.mixin.DraggableGroupElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} config Configuration object\n * @cfg {Object} [input] Configuration options for the input widget\n * @cfg {OO.ui.InputWidget} [inputWidget] An optional input widget. If given, it will\n *  replace the input widget used in the TagMultiselectWidget. If not given,\n *  TagMultiselectWidget creates its own.\n * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:\n * \t- inline: The input is invisible, but exists inside the tag list, so\n * \t\tthe user types into the tag groups to add tags.\n * \t- outline: The input is underneath the tag area.\n * \t- none: No input supplied\n * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if\n *  not present in the menu.\n * @cfg {Object[]} [allowedValues] An array representing the allowed items\n *  by their datas.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added\n * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of\n *  invalid tags. These tags will display with an invalid state, and\n *  the widget as a whole will have an invalid state if any invalid tags\n *  are present.\n * @cfg {boolean} [allowReordering=true] Allow reordering of the items\n * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,\n *  these will appear in the tag list on initialization, as long as they\n *  pass the validity tests.\n */\nOO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {\n\tvar inputEvents,\n\t\trAF = window.requestAnimationFrame || setTimeout,\n\t\twidget = this,\n\t\t$tabFocus = $( '<span>' )\n\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagMultiselectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.DraggableGroupElement.call( this, config );\n\n\tthis.toggleDraggable(\n\t\tconfig.allowReordering === undefined ?\n\t\t\ttrue : !!config.allowReordering\n\t);\n\n\tthis.inputPosition =\n\t\tthis.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?\n\t\t\tconfig.inputPosition : 'inline';\n\tthis.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;\n\tthis.allowArbitrary = !!config.allowArbitrary;\n\tthis.allowDuplicates = !!config.allowDuplicates;\n\tthis.allowedValues = config.allowedValues || [];\n\tthis.allowDisplayInvalidTags = config.allowDisplayInvalidTags;\n\tthis.hasInput = this.inputPosition !== 'none';\n\tthis.height = null;\n\tthis.valid = true;\n\n\tthis.$content = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-content' );\n\tthis.$handle = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-handle' )\n\t\t.append(\n\t\t\tthis.$indicator,\n\t\t\tthis.$icon,\n\t\t\tthis.$content\n\t\t\t\t.append(\n\t\t\t\t\tthis.$group\n\t\t\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-group' )\n\t\t\t\t)\n\t\t);\n\n\t// Events\n\tthis.aggregate( {\n\t\tremove: 'itemRemove',\n\t\tnavigate: 'itemNavigate',\n\t\tselect: 'itemSelect'\n\t} );\n\tthis.connect( this, {\n\t\titemRemove: 'onTagRemove',\n\t\titemSelect: 'onTagSelect',\n\t\titemNavigate: 'onTagNavigate',\n\t\tchange: 'onChangeTags'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialize\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagMultiselectWidget' )\n\t\t.append( this.$handle );\n\n\tif ( this.hasInput ) {\n\t\tif ( config.inputWidget ) {\n\t\t\tthis.input = config.inputWidget;\n\t\t} else {\n\t\t\tthis.input = new OO.ui.TextInputWidget( $.extend( {\n\t\t\t\tplaceholder: config.placeholder,\n\t\t\t\tclasses: [ 'oo-ui-tagMultiselectWidget-input' ]\n\t\t\t}, config.input ) );\n\t\t}\n\t\tthis.input.setDisabled( this.isDisabled() );\n\n\t\tinputEvents = {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onInputKeyDown.bind( this ),\n\t\t\tkeypress: this.onInputKeyPress.bind( this )\n\t\t};\n\n\t\tthis.input.$input.on( inputEvents );\n\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Override max-height for the input widget\n\t\t\t// in the case the widget is outline so it can\n\t\t\t// stretch all the way if the widet is wide\n\t\t\tthis.input.$element.css( 'max-width', 'inherit' );\n\t\t\tthis.$element\n\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-outlined' )\n\t\t\t\t.append( this.input.$element );\n\t\t} else {\n\t\t\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-inlined' );\n\t\t\t// HACK: When the widget is using 'inline' input, the\n\t\t\t// behavior needs to only use the $input itself\n\t\t\t// so we style and size it accordingly (otherwise\n\t\t\t// the styling and sizing can get very convoluted\n\t\t\t// when the wrapping divs and other elements)\n\t\t\t// We are taking advantage of still being able to\n\t\t\t// call the widget itself for operations like\n\t\t\t// .getValue() and setDisabled() and .focus() but\n\t\t\t// having only the $input attached to the DOM\n\t\t\tthis.$content.append( this.input.$input );\n\t\t}\n\t} else {\n\t\tthis.$content.append( $tabFocus );\n\t}\n\n\tthis.setTabIndexedElement(\n\t\tthis.hasInput ?\n\t\t\tthis.input.$input :\n\t\t\t$tabFocus\n\t);\n\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n\n\t// HACK: Input size needs to be calculated after everything\n\t// else is rendered\n\trAF( function () {\n\t\tif ( widget.hasInput ) {\n\t\t\twidget.updateInputSize();\n\t\t}\n\t} );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static properties */\n\n/**\n * Allowed input positions.\n * - inline: The input is inside the tag list\n * - outline: The input is under the tag list\n * - none: There is no input\n *\n * @property {Array}\n */\nOO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];\n\n/* Methods */\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n * @return {boolean} False to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {\n\tvar stopOrContinue,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\tstopOrContinue = this.doInputEnter( e, withMetaKey );\n\t\t}\n\n\t\t// Make sure the input gets resized.\n\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\treturn stopOrContinue;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n * @return {boolean}\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {\n\tvar movement, direction,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\treturn this.doInputBackspace( e, withMetaKey );\n\t\t} else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\treturn this.doInputEscape( e );\n\t\t} else if (\n\t\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\t\te.keyCode === OO.ui.Keys.RIGHT\n\t\t) {\n\t\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'forwards',\n\t\t\t\t\tright: 'backwards'\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'backwards',\n\t\t\t\t\tright: 'forwards'\n\t\t\t\t};\n\t\t\t}\n\t\t\tdirection = e.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right;\n\n\t\t\treturn this.doInputArrow( e, direction, withMetaKey );\n\t\t}\n\t}\n};\n\n/**\n * Respond to input focus event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {\n\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-focus' );\n};\n\n/**\n * Respond to input blur event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.$element.removeClass( 'oo-ui-tagMultiselectWidget-focus' );\n};\n\n/**\n * Perform an action after the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {\n\tthis.addTagFromInput();\n\treturn false;\n};\n\n/**\n * Perform an action responding to the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKey ) {\n\tvar items, item;\n\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\tthis.input.getValue() === '' &&\n\t\t!this.isEmpty()\n\t) {\n\t\t// Delete the last item\n\t\titems = this.getItems();\n\t\titem = items[ items.length - 1 ];\n\t\tthis.removeItems( [ item ] );\n\t\t// If Ctrl/Cmd was pressed, delete item entirely.\n\t\t// Otherwise put it into the text field for editing.\n\t\tif ( !withMetaKey ) {\n\t\t\tthis.input.setValue( item.getData() );\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Perform an action after the escape key on the input\n *\n * @param {jQuery.Event} e Event data\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {\n\tthis.clearInput();\n};\n\n/**\n * Perform an action after the arrow key on the input, select the previous\n * or next item from the input.\n * See #getPreviousItem and #getNextItem\n *\n * @param {jQuery.Event} e Event data\n * @param {string} direction Direction of the movement; forwards or backwards\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n *  a meta key like 'ctrl'\n */\nOO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( e, direction ) {\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\t!this.isEmpty()\n\t) {\n\t\tif ( direction === 'backwards' ) {\n\t\t\t// Get previous item\n\t\t\tthis.getPreviousItem().focus();\n\t\t} else {\n\t\t\t// Get next item\n\t\t\tthis.getNextItem().focus();\n\t\t}\n\t}\n};\n\n/**\n * Respond to item select event\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.hasInput && this.allowEditTags ) {\n\t\tif ( this.input.getValue() ) {\n\t\t\tthis.addTagFromInput();\n\t\t}\n\t\t// 1. Get the label of the tag into the input\n\t\tthis.input.setValue( item.getData() );\n\t\t// 2. Remove the tag\n\t\tthis.removeItems( [ item ] );\n\t\t// 3. Focus the input\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Respond to change event, where items were added, removed, or cleared.\n */\nOO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {\n\tthis.toggleValid( this.checkValidity() );\n\tif ( this.hasInput ) {\n\t\tthis.updateInputSize();\n\t}\n\tthis.updateIfHeightChanged();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.hasInput && this.input ) {\n\t\tthis.input.setDisabled( !!isDisabled );\n\t}\n\n\tif ( this.items ) {\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.setDisabled( !!isDisabled );\n\t\t} );\n\t}\n};\n\n/**\n * Respond to tag remove event\n * @param {OO.ui.TagItemWidget} item Removed tag\n */\nOO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {\n\tthis.removeTagByData( item.getData() );\n};\n\n/**\n * Respond to navigate event on the tag\n *\n * @param {OO.ui.TagItemWidget} item Removed tag\n * @param {string} direction Direction of movement; 'forwards' or 'backwards'\n */\nOO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {\n\tif ( direction === 'forwards' ) {\n\t\tthis.getNextItem( item ).focus();\n\t} else {\n\t\tthis.getPreviousItem( item ).focus();\n\t}\n};\n\n/**\n * Add tag from input value\n */\nOO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar val = this.input.getValue(),\n\t\tisValid = this.isAllowedData( val );\n\n\tif ( !val ) {\n\t\treturn;\n\t}\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tthis.addTag( val );\n\t\tthis.clearInput();\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Clear the input\n */\nOO.ui.TagMultiselectWidget.prototype.clearInput = function () {\n\tthis.input.setValue( '' );\n};\n\n/**\n * Check whether the given value is a duplicate of an existing\n * tag already in the list.\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is duplicate\n */\nOO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {\n\treturn !!this.getItemFromData( data );\n};\n\n/**\n * Check whether a given value is allowed to be added\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is allowed\n */\nOO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {\n\tif (\n\t\t!this.allowDuplicates &&\n\t\tthis.isDuplicateData( data )\n\t) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowArbitrary ) {\n\t\treturn true;\n\t}\n\n\t// Check with allowed values\n\tif (\n\t\tthis.getAllowedValues().some( function ( value ) {\n\t\t\treturn data === value;\n\t\t} )\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {\n\treturn this.allowedValues;\n};\n\n/**\n * Add a value to the allowed values list\n *\n * @param {string} value Allowed data value\n */\nOO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {\n\tif ( this.allowedValues.indexOf( value ) === -1 ) {\n\t\tthis.allowedValues.push( value );\n\t}\n};\n\n/**\n * Get the datas of the currently selected items\n *\n * @return {string[]|Object[]} Datas of currently selected items\n */\nOO.ui.TagMultiselectWidget.prototype.getValue = function () {\n\treturn this.getItems()\n\t\t.filter( function ( item ) {\n\t\t\treturn item.isValid();\n\t\t} )\n\t\t.map( function ( item ) {\n\t\t\treturn item.getData();\n\t\t} );\n};\n\n/**\n * Set the value of this widget by datas.\n *\n * @param {string|string[]|Object|Object[]} valueObject An object representing the data\n *  and label of the value. If the widget allows arbitrary values,\n *  the items will be added as-is. Otherwise, the data value will\n *  be checked against allowedValues.\n *  This object must contain at least a data key. Example:\n *  { data: 'foo', label: 'Foo item' }\n *  For multiple items, use an array of objects. For example:\n *   [\n *      { data: 'foo', label: 'Foo item' },\n *      { data: 'bar', label: 'Bar item' }\n * \t ]\n *  Value can also be added with plaintext array, for example:\n *  [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'\n */\nOO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {\n\tvalueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];\n\n\tthis.clearItems();\n\tvalueObject.forEach( function ( obj ) {\n\t\tif ( typeof obj === 'string' ) {\n\t\t\tthis.addTag( obj );\n\t\t} else {\n\t\t\tthis.addTag( obj.data, obj.label );\n\t\t}\n\t}.bind( this ) );\n};\n\n/**\n * Add tag to the display area\n *\n * @param {string|Object} data Tag data\n * @param {string} [label] Tag label. If no label is provided, the\n *  stringified version of the data will be used instead.\n * @return {boolean} Item was added successfully\n */\nOO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {\n\tvar newItemWidget,\n\t\tisValid = this.isAllowedData( data );\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tnewItemWidget = this.createTagItemWidget( data, label );\n\t\tnewItemWidget.toggleValid( isValid );\n\t\tthis.addItems( [ newItemWidget ] );\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/**\n * Remove tag by its data property.\n *\n * @param {string|Object} data Tag data\n */\nOO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {\n\tvar item = this.getItemFromData( data );\n\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.\n *\n * @protected\n * @param {string} data Item data\n * @param {string} label The label text.\n * @return {OO.ui.TagItemWidget}\n */\nOO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {\n\tlabel = label || data;\n\n\treturn new OO.ui.TagItemWidget( { data: data, label: label } );\n};\n\n/**\n * Given an item, returns the item after it. If the item is already the\n * last item, return `this.input`. If no item is passed, returns the\n * very first item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The next widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\tif ( itemIndex === this.items.length - 1 ) { // Last item\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return first item\n\t\t\treturn this.items[ 0 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If the item is already the\n * first item, return `this.input`. If no item is passed, returns the\n * very last item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The previous widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\tif ( itemIndex === 0 ) {\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return the last item\n\t\t\treturn this.items[ this.items.length - 1 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n * This is especially relevant for when the input is at the edge of a line\n * and should get smaller. The usual operation (as an inline-block with min-width)\n * does not work in that case, pushing the input downwards to the next line.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.inputPosition === 'inline' && !this.isDisabled() ) {\n\t\tif ( this.input.$input[ 0 ].scrollWidth === 0 ) {\n\t\t\t// Input appears to be attached but not visible.\n\t\t\t// Don't attempt to adjust its size, because our measurements\n\t\t\t// are going to fail anyway.\n\t\t\treturn;\n\t\t}\n\t\tthis.input.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.input.getValue() === '' &&\n\t\t\tthis.input.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.input.setValue( this.input.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;\n\t\t\tthis.input.setValue( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.input.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.input.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 10;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 10;\n\t\t}\n\t\tthis.input.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so,\n * emit the resize event. This is useful for when there are either\n * menus or popups attached to the bottom of the widget, to allow\n * them to change their positioning in case the widget moved down\n * or up.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Check whether all items in the widget are valid\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.checkValidity = function () {\n\treturn this.getItems().every( function ( item ) {\n\t\treturn item.isValid();\n\t} );\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Get the current valid state of the widget\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a popup. The popup can be configured to have a default input to insert values into the widget.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A basic PopupTagMultiselectWidget.\n *     var widget = new OO.ui.PopupTagMultiselectWidget();\n *     $( 'body' ).append( widget.$element );\n *\n *     // Example: A PopupTagMultiselectWidget with an external popup.\n *     var popupInput = new OO.ui.TextInputWidget(),\n *         widget = new OO.ui.PopupTagMultiselectWidget( {\n *            popupInput: popupInput,\n *            popup: {\n *               $content: popupInput.$element\n *            }\n *         } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @param {Object} config Configuration object\n * @cfg {jQuery} [$overlay] An overlay for the popup.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {Object} [popup] Configuration options for the popup\n * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be\n *  focused when the popup is opened and will be used as replacement for the\n *  general input in the widget.\n */\nOO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {\n\tvar defaultInput,\n\t\tdefaultConfig = { popup: {} };\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );\n\n\tthis.$overlay = config.$overlay || this.$element;\n\n\tif ( !config.popup ) {\n\t\t// For the default base implementation, we give a popup\n\t\t// with an input widget inside it. For any other use cases\n\t\t// the popup needs to be populated externally and the\n\t\t// event handled to add tags separately and manually\n\t\tdefaultInput = new OO.ui.TextInputWidget();\n\n\t\tdefaultConfig.popupInput = defaultInput;\n\t\tdefaultConfig.popup.$content = defaultInput.$element;\n\n\t\tthis.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );\n\t}\n\n\t// Add overlay, and add that to the autoCloseIgnore\n\tdefaultConfig.popup.$overlay = this.$overlay;\n\tdefaultConfig.popup.$autoCloseIgnore = this.hasInput ?\n\t\tthis.input.$element.add( this.$overlay ) : this.$overlay;\n\n\t// Allow extending any of the above\n\tconfig = $.extend( defaultConfig, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\tif ( this.hasInput ) {\n\t\tthis.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );\n\t}\n\n\t// Configuration options\n\tthis.popupInput = config.popupInput;\n\tif ( this.popupInput ) {\n\t\tthis.popupInput.connect( this, {\n\t\t\tenter: 'onPopupInputEnter'\n\t\t} );\n\t}\n\n\t// Events\n\tthis.on( 'resize', this.popup.updateDimensions.bind( this.popup ) );\n\tthis.popup.connect( this, { toggle: 'onPopupToggle' } );\n\tthis.$tabIndexed\n\t\t.on( 'focus', this.onFocus.bind( this ) );\n\n\t// Initialize\n\tthis.$element\n\t\t.append( this.popup.$element )\n\t\t.addClass( 'oo-ui-popupTagMultiselectWidget' );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );\nOO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Focus event handler.\n *\n * @private\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onFocus = function () {\n\tthis.popup.toggle( true );\n};\n\n/**\n * Respond to popup toggle event\n *\n * @param {boolean} isVisible Popup is visible\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {\n\tif ( isVisible && this.popupInput ) {\n\t\tthis.popupInput.focus();\n\t}\n};\n\n/**\n * Respond to popup input enter event\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {\n\tif ( this.popupInput ) {\n\t\tthis.addTagByPopupValue( this.popupInput.getValue() );\n\t\tthis.popupInput.setValue( '' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.popupInput && this.allowEditTags ) {\n\t\tthis.popupInput.setValue( item.getData() );\n\t\tthis.removeItems( [ item ] );\n\n\t\tthis.popup.toggle( true );\n\t\tthis.popupInput.focus();\n\t} else {\n\t\t// Parent\n\t\tOO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );\n\t}\n};\n\n/**\n * Add a tag by the popup value.\n * Whatever is responsible for setting the value in the popup should call\n * this method to add a tag, or use the regular methods like #addTag or\n * #setValue directly.\n *\n * @param {string} data The value of item\n * @param {string} [label] The label of the tag. If not given, the data is used.\n */\nOO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {\n\tthis.addTag( data, label );\n};\n","/**\n * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a menu of selectable options.\n *\n * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].\n *\n *     @example\n *     // Example: A basic MenuTagMultiselectWidget.\n *     var widget = new OO.ui.MenuTagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         options: [\n *            { data: 'option1', label: 'Option 1' },\n *            { data: 'option2', label: 'Option 2' },\n *            { data: 'option3', label: 'Option 3' },\n *         ],\n *         selected: [ 'option1', 'option2' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {Object} [menu] Configuration object for the menu widget\n * @cfg {jQuery} [$overlay] An overlay for the menu.\n *  See <https://www.mediawiki.org/wiki/OOjs_UI/Concepts#Overlays>.\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuTagMultiselectWidget.parent.call( this, config );\n\n\tthis.$overlay = config.$overlay || this.$element;\n\n\tthis.menu = this.createMenuWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this.hasInput ? this.input : null,\n\t\t$input: this.hasInput ? this.input.$input : null,\n\t\tfilterFromInput: !!this.hasInput,\n\t\t$autoCloseIgnore: this.hasInput ?\n\t\t\tthis.input.$element.add( this.$overlay ) : this.$overlay,\n\t\t$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?\n\t\t\tthis.input.$element : this.$element,\n\t\t$overlay: this.$overlay,\n\t\tdisabled: this.isDisabled()\n\t}, config.menu ) );\n\tthis.addOptions( config.options || [] );\n\n\t// Events\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\tif ( this.hasInput ) {\n\t\tthis.input.connect( this, { change: 'onInputChange' } );\n\t}\n\tthis.connect( this, { resize: 'onResize' } );\n\n\t// Initialization\n\tthis.$overlay\n\t\t.append( this.menu.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuTagMultiselectWidget' );\n\t// TagMultiselectWidget already does this, but it doesn't work right because this.menu is not yet\n\t// set up while the parent constructor runs, and #getAllowedValues rejects everything.\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );\n\n/* Methods */\n\n/**\n * Respond to resize event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {\n\t// Reposition the menu\n\tthis.menu.position();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );\n\n\tthis.menu.toggle( true );\n};\n\n/**\n * Respond to input change event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {\n\tthis.menu.toggle( true );\n};\n\n/**\n * Respond to menu choose event\n *\n * @param {OO.ui.OptionWidget} menuItem Chosen menu item\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {\n\t// Add tag\n\tthis.addTag( menuItem.getData(), menuItem.getLabel() );\n};\n\n/**\n * Respond to menu toggle event. Reset item highlights on hide.\n *\n * @param {boolean} isVisible The menu is visible\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tif ( !isVisible ) {\n\t\tthis.menu.selectItem( null );\n\t\tthis.menu.highlightItem( null );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {\n\tvar menuItem = this.menu.getItemFromData( tagItem.getData() );\n\t// Override the base behavior from TagMultiselectWidget; the base behavior\n\t// in TagMultiselectWidget is to remove the tag to edit it in the input,\n\t// but in our case, we want to utilize the menu selection behavior, and\n\t// definitely not remove the item.\n\n\t// Select the menu item\n\tthis.menu.selectItem( menuItem );\n\n\tthis.focus();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar inputValue = this.input.getValue(),\n\t\tvalidated = false,\n\t\thighlightedItem = this.menu.findHighlightedItem(),\n\t\titem = this.menu.getItemFromData( inputValue );\n\n\t// Override the parent method so we add from the menu\n\t// rather than directly from the input\n\n\t// Look for a highlighted item first\n\tif ( highlightedItem ) {\n\t\tvalidated = this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );\n\t} else if ( item ) {\n\t\t// Look for the element that fits the data\n\t\tvalidated = this.addTag( item.getData(), item.getLabel() );\n\t} else {\n\t\t// Otherwise, add the tag - the method will only add if the\n\t\t// tag is valid or if invalid tags are allowed\n\t\tvalidated = this.addTag( inputValue );\n\t}\n\n\tif ( validated ) {\n\t\tthis.clearInput();\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Return the visible items in the menu. This is mainly used for when\n * the menu is filtering results.\n *\n * @return {OO.ui.MenuOptionWidget[]} Visible results\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {\n\treturn this.menu.getItems().filter( function ( menuItem ) {\n\t\treturn menuItem.isVisible();\n\t} );\n};\n\n/**\n * Create the menu for this widget. This is in a separate method so that\n * child classes can override this without polluting the constructor with\n * unnecessary extra objects that will be overidden.\n *\n * @param {Object} menuConfig Configuration options\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {\n\treturn new OO.ui.MenuSelectWidget( menuConfig );\n};\n\n/**\n * Add options to the menu\n *\n * @param {Object[]} menuOptions Object defining options\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {\n\tvar widget = this,\n\t\titems = menuOptions.map( function ( obj ) {\n\t\t\treturn widget.createMenuOptionWidget( obj.data, obj.label );\n\t\t} );\n\n\tthis.menu.addItems( items );\n};\n\n/**\n * Create a menu option widget.\n *\n * @param {string} data Item data\n * @param {string} [label] Item label\n * @return {OO.ui.OptionWidget} Option widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label ) {\n\treturn new OO.ui.MenuOptionWidget( {\n\t\tdata: data,\n\t\tlabel: label || data\n\t} );\n};\n\n/**\n * Get the menu\n *\n * @return {OO.ui.MenuSelectWidget} Menu\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {\n\tvar menuDatas = [];\n\tif ( this.menu ) {\n\t\t// If the parent constructor is calling us, we're not ready yet, this.menu is not set up.\n\t\tmenuDatas = this.menu.getItems().map( function ( menuItem ) {\n\t\t\treturn menuItem.getData();\n\t\t} );\n\t}\n\treturn this.allowedValues.concat( menuDatas );\n};\n","/**\n * SelectFileWidgets allow for selecting files, using the HTML5 File API. These\n * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link\n * OO.ui.mixin.IndicatorElement indicators}.\n * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.\n *\n *     @example\n *     // Example of a file select widget\n *     var selectFile = new OO.ui.SelectFileWidget();\n *     $( 'body' ).append( selectFile.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.\n * @cfg {string} [placeholder] Text to display when no file is selected.\n * @cfg {string} [notsupported] Text to display when file support is missing in the browser.\n * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.\n * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.\n * @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a\n *  preview (for performance)\n */\nOO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {\n\tvar dragHandler;\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\taccept: null,\n\t\tplaceholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),\n\t\tnotsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),\n\t\tdroppable: true,\n\t\tshowDropTarget: false,\n\t\tthumbnailSizeLimit: 20\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.SelectFileWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.$info = $( '<span>' );\n\tthis.showDropTarget = config.showDropTarget;\n\tthis.thumbnailSizeLimit = config.thumbnailSizeLimit;\n\tthis.isSupported = this.constructor.static.isSupported();\n\tthis.currentFile = null;\n\tif ( Array.isArray( config.accept ) ) {\n\t\tthis.accept = config.accept;\n\t} else {\n\t\tthis.accept = null;\n\t}\n\tthis.placeholder = config.placeholder;\n\tthis.notsupported = config.notsupported;\n\tthis.onFileSelectedHandler = this.onFileSelected.bind( this );\n\n\tthis.selectButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-selectButton' ],\n\t\tlabel: OO.ui.msg( 'ooui-selectfile-button-select' ),\n\t\tdisabled: this.disabled || !this.isSupported\n\t} );\n\n\tthis.clearButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-clearButton' ],\n\t\tframed: false,\n\t\ticon: 'close',\n\t\tdisabled: this.disabled\n\t} );\n\n\t// Events\n\tthis.selectButton.$button.on( {\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\tthis.clearButton.connect( this, {\n\t\tclick: 'onClearClick'\n\t} );\n\tif ( config.droppable ) {\n\t\tdragHandler = this.onDragEnterOrOver.bind( this );\n\t\tthis.$element.on( {\n\t\t\tdragenter: dragHandler,\n\t\t\tdragover: dragHandler,\n\t\t\tdragleave: this.onDragLeave.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\t}\n\n\t// Initialization\n\tthis.addInput();\n\tthis.$label.addClass( 'oo-ui-selectFileWidget-label' );\n\tthis.$info\n\t\t.addClass( 'oo-ui-selectFileWidget-info' )\n\t\t.append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );\n\n\tif ( config.droppable && config.showDropTarget ) {\n\t\tthis.selectButton.setIcon( 'upload' );\n\t\tthis.$thumbnail = $( '<div>' ).addClass( 'oo-ui-selectFileWidget-thumbnail' );\n\t\tthis.setPendingElement( this.$thumbnail );\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget-dropTarget oo-ui-selectFileWidget' )\n\t\t\t.on( {\n\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\tthis.$thumbnail,\n\t\t\t\tthis.$info,\n\t\t\t\tthis.selectButton.$element,\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-dropLabel' )\n\t\t\t\t\t.text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )\n\t\t\t);\n\t} else {\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget' )\n\t\t\t.append( this.$info, this.selectButton.$element );\n\t}\n\tthis.updateUI();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\n/**\n * Check if this widget is supported\n *\n * @static\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.static.isSupported = function () {\n\tvar $input;\n\tif ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {\n\t\t$input = $( '<input>' ).attr( 'type', 'file' );\n\t\tOO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;\n\t}\n\treturn OO.ui.SelectFileWidget.static.isSupportedCache;\n};\n\nOO.ui.SelectFileWidget.static.isSupportedCache = null;\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {File|null} value New value\n */\n\n/* Methods */\n\n/**\n * Get the current value of the field\n *\n * @return {File|null}\n */\nOO.ui.SelectFileWidget.prototype.getValue = function () {\n\treturn this.currentFile;\n};\n\n/**\n * Set the current value of the field\n *\n * @param {File|null} file File to select\n */\nOO.ui.SelectFileWidget.prototype.setValue = function ( file ) {\n\tif ( this.currentFile !== file ) {\n\t\tthis.currentFile = file;\n\t\tthis.updateUI();\n\t\tthis.emit( 'change', this.currentFile );\n\t}\n};\n\n/**\n * Focus the widget.\n *\n * Focusses the select file button.\n *\n * @chainable\n */\nOO.ui.SelectFileWidget.prototype.focus = function () {\n\tthis.selectButton.focus();\n\treturn this;\n};\n\n/**\n * Blur the widget.\n *\n * @chainable\n */\nOO.ui.SelectFileWidget.prototype.blur = function () {\n\tthis.selectButton.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n\n/**\n * Update the user interface when a file is selected or unselected\n *\n * @protected\n */\nOO.ui.SelectFileWidget.prototype.updateUI = function () {\n\tvar $label;\n\tif ( !this.isSupported ) {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\tthis.setLabel( this.notsupported );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-supported' );\n\t\tif ( this.currentFile ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\t$label = $( [] );\n\t\t\t$label = $label.add(\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-fileName' )\n\t\t\t\t\t.text( this.currentFile.name )\n\t\t\t);\n\t\t\tthis.setLabel( $label );\n\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.pushPending();\n\t\t\t\tthis.loadAndGetImageUrl().done( function ( url ) {\n\t\t\t\t\tthis.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );\n\t\t\t\t}.bind( this ) ).fail( function () {\n\t\t\t\t\tthis.$thumbnail.append(\n\t\t\t\t\t\tnew OO.ui.IconWidget( {\n\t\t\t\t\t\t\ticon: 'attachment',\n\t\t\t\t\t\t\tclasses: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]\n\t\t\t\t\t\t} ).$element\n\t\t\t\t\t);\n\t\t\t\t}.bind( this ) ).always( function () {\n\t\t\t\t\tthis.popPending();\n\t\t\t\t}.bind( this ) );\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t\tthis.$element.on( {\n\t\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t\t} );\n\t\t\t\tthis.$thumbnail\n\t\t\t\t\t.empty()\n\t\t\t\t\t.css( 'background-image', '' );\n\t\t\t}\n\t\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\tthis.setLabel( this.placeholder );\n\t\t}\n\t}\n};\n\n/**\n * If the selected file is an image, get its URL and load it.\n *\n * @return {jQuery.Promise} Promise resolves with the image URL after it has loaded\n */\nOO.ui.SelectFileWidget.prototype.loadAndGetImageUrl = function () {\n\tvar deferred = $.Deferred(),\n\t\tfile = this.currentFile,\n\t\treader = new FileReader();\n\n\tif (\n\t\tfile &&\n\t\t( OO.getProp( file, 'type' ) || '' ).indexOf( 'image/' ) === 0 &&\n\t\tfile.size < this.thumbnailSizeLimit * 1024 * 1024\n\t) {\n\t\treader.onload = function ( event ) {\n\t\t\tvar img = document.createElement( 'img' );\n\t\t\timg.addEventListener( 'load', function () {\n\t\t\t\tif (\n\t\t\t\t\timg.naturalWidth === 0 ||\n\t\t\t\t\timg.naturalHeight === 0 ||\n\t\t\t\t\timg.complete === false\n\t\t\t\t) {\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( event.target.result );\n\t\t\t\t}\n\t\t\t} );\n\t\t\timg.src = event.target.result;\n\t\t};\n\t\treader.readAsDataURL( file );\n\t} else {\n\t\tdeferred.reject();\n\t}\n\n\treturn deferred.promise();\n};\n\n/**\n * Add the input to the widget\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.addInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.remove();\n\t}\n\n\tif ( !this.isSupported ) {\n\t\tthis.$input = null;\n\t\treturn;\n\t}\n\n\tthis.$input = $( '<input>' ).attr( 'type', 'file' );\n\tthis.$input.on( 'change', this.onFileSelectedHandler );\n\tthis.$input.on( 'click', function ( e ) {\n\t\t// Prevents dropTarget to get clicked which calls\n\t\t// a click on this input\n\t\te.stopPropagation();\n\t} );\n\tthis.$input.attr( {\n\t\ttabindex: -1\n\t} );\n\tif ( this.accept ) {\n\t\tthis.$input.attr( 'accept', this.accept.join( ', ' ) );\n\t}\n\tthis.selectButton.$button.append( this.$input );\n};\n\n/**\n * Determine if we should accept this file\n *\n * @private\n * @param {string} mimeType File MIME type\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {\n\tvar i, mimeTest;\n\n\tif ( !this.accept || !mimeType ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < this.accept.length; i++ ) {\n\t\tmimeTest = this.accept[ i ];\n\t\tif ( mimeTest === mimeType ) {\n\t\t\treturn true;\n\t\t} else if ( mimeTest.substr( -2 ) === '/*' ) {\n\t\t\tmimeTest = mimeTest.substr( 0, mimeTest.length - 1 );\n\t\t\tif ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle file selection from the input\n *\n * @private\n * @param {jQuery.Event} e\n */\nOO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {\n\tvar file = OO.getProp( e.target, 'files', 0 ) || null;\n\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\n\tthis.setValue( file );\n\tthis.addInput();\n};\n\n/**\n * Handle clear button click events.\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.onClearClick = function () {\n\tthis.setValue( null );\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {\n\tif ( this.isSupported && !this.isDisabled() && this.$input &&\n\t\t( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drop target click events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n */\nOO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {\n\tif ( this.isSupported && !this.isDisabled() && this.$input ) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drag enter and over events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {\n\tvar itemOrFile,\n\t\tdroppableFile = false,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\t\tdt.dropEffect = 'none';\n\t\treturn false;\n\t}\n\n\t// DataTransferItem and File both have a type property, but in Chrome files\n\t// have no information at this point.\n\titemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );\n\tif ( itemOrFile ) {\n\t\tif ( this.isAllowedType( itemOrFile.type ) ) {\n\t\t\tdroppableFile = true;\n\t\t}\n\t// dt.types is Array-like, but not an Array\n\t} else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {\n\t\t// File information is not available at this point for security so just assume\n\t\t// it is acceptable for now.\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=640534\n\t\tdroppableFile = true;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );\n\tif ( !droppableFile ) {\n\t\tdt.dropEffect = 'none';\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle drag leave events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragLeave = function () {\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n};\n\n/**\n * Handle drop events\n *\n * @private\n * @param {jQuery.Event} e Drop event\n */\nOO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {\n\tvar file = null,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\treturn false;\n\t}\n\n\tfile = OO.getProp( dt, 'files', 0 );\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\tif ( file ) {\n\t\tthis.setValue( file );\n\t}\n\n\treturn false;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );\n\tif ( this.selectButton ) {\n\t\tthis.selectButton.setDisabled( disabled );\n\t}\n\tif ( this.clearButton ) {\n\t\tthis.clearButton.setDisabled( disabled );\n\t}\n\treturn this;\n};\n","/**\n * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,\n * and a menu of search results, which is displayed beneath the query\n * field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.\n * Users can choose an item from the menu or type a query into the text field to search for a matching result item.\n * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.\n *\n * Each time the query is changed, the search result menu is cleared and repopulated. Please see\n * the [OOjs UI demos][1] for an example.\n *\n * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/#dialogs-mediawiki-vector-ltr\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|jQuery} [placeholder] Placeholder text for query input\n * @cfg {string} [value] Initial query value\n */\nOO.ui.SearchWidget = function OoUiSearchWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SearchWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.query = new OO.ui.TextInputWidget( {\n\t\ticon: 'search',\n\t\tplaceholder: config.placeholder,\n\t\tvalue: config.value\n\t} );\n\tthis.results = new OO.ui.SelectWidget();\n\tthis.$query = $( '<div>' );\n\tthis.$results = $( '<div>' );\n\n\t// Events\n\tthis.query.connect( this, {\n\t\tchange: 'onQueryChange',\n\t\tenter: 'onQueryEnter'\n\t} );\n\tthis.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );\n\n\t// Initialization\n\tthis.$query\n\t\t.addClass( 'oo-ui-searchWidget-query' )\n\t\t.append( this.query.$element );\n\tthis.$results\n\t\t.addClass( 'oo-ui-searchWidget-results' )\n\t\t.append( this.results.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-searchWidget' )\n\t\t.append( this.$results, this.$query );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );\n\n/* Methods */\n\n/**\n * Handle query key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {\n\tvar highlightedItem, nextItem,\n\t\tdir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );\n\n\tif ( dir ) {\n\t\thighlightedItem = this.results.findHighlightedItem();\n\t\tif ( !highlightedItem ) {\n\t\t\thighlightedItem = this.results.getSelectedItem();\n\t\t}\n\t\tnextItem = this.results.findRelativeSelectableItem( highlightedItem, dir );\n\t\tthis.results.highlightItem( nextItem );\n\t\tnextItem.scrollElementIntoView();\n\t}\n};\n\n/**\n * Handle select widget select events.\n *\n * Clears existing results. Subclasses should repopulate items according to new query.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryChange = function () {\n\t// Reset\n\tthis.results.clearItems();\n};\n\n/**\n * Handle select widget enter key events.\n *\n * Chooses highlighted item.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryEnter = function () {\n\tvar highlightedItem = this.results.findHighlightedItem();\n\tif ( highlightedItem ) {\n\t\tthis.results.chooseItem( highlightedItem );\n\t}\n};\n\n/**\n * Get the query input.\n *\n * @return {OO.ui.TextInputWidget} Query input\n */\nOO.ui.SearchWidget.prototype.getQuery = function () {\n\treturn this.query;\n};\n\n/**\n * Get the search results menu.\n *\n * @return {OO.ui.SelectWidget} Menu of search results\n */\nOO.ui.SearchWidget.prototype.getResults = function () {\n\treturn this.results;\n};\n","/**\n * NumberInputWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value\n * can be entered manually) and two {@link OO.ui.ButtonWidget button widgets}\n * (to adjust the value in increments) to allow the user to enter a number.\n *\n *     @example\n *     // Example: A NumberInputWidget.\n *     var numberInput = new OO.ui.NumberInputWidget( {\n *         label: 'NumberInputWidget',\n *         input: { value: 5 },\n *         min: 1,\n *         max: 10\n *     } );\n *     $( 'body' ).append( numberInput.$element );\n *\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {Object} [minusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget decrementing button widget}.\n * @cfg {Object} [plusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget incrementing button widget}.\n * @cfg {boolean} [allowInteger=false] Whether the field accepts only integer values.\n * @cfg {number} [min=-Infinity] Minimum allowed value\n * @cfg {number} [max=Infinity] Maximum allowed value\n * @cfg {number} [step=1] Delta when using the buttons or up/down arrow keys\n * @cfg {number|null} [pageStep] Delta when using the page-up/page-down keys. Defaults to 10 times #step.\n * @cfg {boolean} [showButtons=true] Whether to show the plus and minus buttons.\n */\nOO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {\n\tvar $field = $( '<div>' )\n\t\t.addClass( 'oo-ui-numberInputWidget-field' );\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\tallowInteger: false,\n\t\tmin: -Infinity,\n\t\tmax: Infinity,\n\t\tstep: 1,\n\t\tpageStep: null,\n\t\tshowButtons: true\n\t}, config );\n\n\t// For backward compatibility\n\t$.extend( config, config.input );\n\tthis.input = this;\n\n\t// Parent constructor\n\tOO.ui.NumberInputWidget.parent.call( this, $.extend( config, {\n\t\ttype: 'number'\n\t} ) );\n\n\tif ( config.showButtons ) {\n\t\tthis.minusButton = new OO.ui.ButtonWidget( $.extend(\n\t\t\t{\n\t\t\t\tdisabled: this.isDisabled(),\n\t\t\t\ttabIndex: -1,\n\t\t\t\tclasses: [ 'oo-ui-numberInputWidget-minusButton' ],\n\t\t\t\ticon: 'subtract'\n\t\t\t},\n\t\t\tconfig.minusButton\n\t\t) );\n\t\tthis.plusButton = new OO.ui.ButtonWidget( $.extend(\n\t\t\t{\n\t\t\t\tdisabled: this.isDisabled(),\n\t\t\t\ttabIndex: -1,\n\t\t\t\tclasses: [ 'oo-ui-numberInputWidget-plusButton' ],\n\t\t\t\ticon: 'add'\n\t\t\t},\n\t\t\tconfig.plusButton\n\t\t) );\n\t}\n\n\t// Events\n\tthis.$input.on( {\n\t\tkeydown: this.onKeyDown.bind( this ),\n\t\t'wheel mousewheel DOMMouseScroll': this.onWheel.bind( this )\n\t} );\n\tif ( config.showButtons ) {\n\t\tthis.plusButton.connect( this, {\n\t\t\tclick: [ 'onButtonClick', +1 ]\n\t\t} );\n\t\tthis.minusButton.connect( this, {\n\t\t\tclick: [ 'onButtonClick', -1 ]\n\t\t} );\n\t}\n\n\t// Build the field\n\t$field.append( this.$input );\n\tif ( config.showButtons ) {\n\t\t$field\n\t\t\t.prepend( this.minusButton.$element )\n\t\t\t.append( this.plusButton.$element );\n\t}\n\n\t// Initialization\n\tthis.setAllowInteger( config.allowInteger || config.isInteger );\n\tthis.setRange( config.min, config.max );\n\tthis.setStep( config.step, config.pageStep );\n\t// Set the validation method after we set allowInteger and range\n\t// so that it doesn't immediately call setValidityFlag\n\tthis.setValidation( this.validateNumber.bind( this ) );\n\n\tthis.$element\n\t\t.addClass( 'oo-ui-numberInputWidget' )\n\t\t.toggleClass( 'oo-ui-numberInputWidget-buttoned', config.showButtons )\n\t\t.append( $field );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.NumberInputWidget, OO.ui.TextInputWidget );\n\n/* Methods */\n\n/**\n * Set whether only integers are allowed\n *\n * @param {boolean} flag\n */\nOO.ui.NumberInputWidget.prototype.setAllowInteger = function ( flag ) {\n\tthis.allowInteger = !!flag;\n\tthis.setValidityFlag();\n};\n// Backward compatibility\nOO.ui.NumberInputWidget.prototype.setIsInteger = OO.ui.NumberInputWidget.prototype.setAllowInteger;\n\n/**\n * Get whether only integers are allowed\n *\n * @return {boolean} Flag value\n */\nOO.ui.NumberInputWidget.prototype.getAllowInteger = function () {\n\treturn this.allowInteger;\n};\n// Backward compatibility\nOO.ui.NumberInputWidget.prototype.getIsInteger = OO.ui.NumberInputWidget.prototype.getAllowInteger;\n\n/**\n * Set the range of allowed values\n *\n * @param {number} min Minimum allowed value\n * @param {number} max Maximum allowed value\n */\nOO.ui.NumberInputWidget.prototype.setRange = function ( min, max ) {\n\tif ( min > max ) {\n\t\tthrow new Error( 'Minimum (' + min + ') must not be greater than maximum (' + max + ')' );\n\t}\n\tthis.min = min;\n\tthis.max = max;\n\tthis.setValidityFlag();\n};\n\n/**\n * Get the current range\n *\n * @return {number[]} Minimum and maximum values\n */\nOO.ui.NumberInputWidget.prototype.getRange = function () {\n\treturn [ this.min, this.max ];\n};\n\n/**\n * Set the stepping deltas\n *\n * @param {number} step Normal step\n * @param {number|null} pageStep Page step. If null, 10 * step will be used.\n */\nOO.ui.NumberInputWidget.prototype.setStep = function ( step, pageStep ) {\n\tif ( step <= 0 ) {\n\t\tthrow new Error( 'Step value must be positive' );\n\t}\n\tif ( pageStep === null ) {\n\t\tpageStep = step * 10;\n\t} else if ( pageStep <= 0 ) {\n\t\tthrow new Error( 'Page step value must be positive' );\n\t}\n\tthis.step = step;\n\tthis.pageStep = pageStep;\n};\n\n/**\n * Get the current stepping values\n *\n * @return {number[]} Step and page step\n */\nOO.ui.NumberInputWidget.prototype.getStep = function () {\n\treturn [ this.step, this.pageStep ];\n};\n\n/**\n * Get the current value of the widget as a number\n *\n * @return {number} May be NaN, or an invalid number\n */\nOO.ui.NumberInputWidget.prototype.getNumericValue = function () {\n\treturn +this.getValue();\n};\n\n/**\n * Adjust the value of the widget\n *\n * @param {number} delta Adjustment amount\n */\nOO.ui.NumberInputWidget.prototype.adjustValue = function ( delta ) {\n\tvar n, v = this.getNumericValue();\n\n\tdelta = +delta;\n\tif ( isNaN( delta ) || !isFinite( delta ) ) {\n\t\tthrow new Error( 'Delta must be a finite number' );\n\t}\n\n\tif ( isNaN( v ) ) {\n\t\tn = 0;\n\t} else {\n\t\tn = v + delta;\n\t\tn = Math.max( Math.min( n, this.max ), this.min );\n\t\tif ( this.allowInteger ) {\n\t\t\tn = Math.round( n );\n\t\t}\n\t}\n\n\tif ( n !== v ) {\n\t\tthis.setValue( n );\n\t}\n};\n/**\n * Validate input\n *\n * @private\n * @param {string} value Field value\n * @return {boolean}\n */\nOO.ui.NumberInputWidget.prototype.validateNumber = function ( value ) {\n\tvar n = +value;\n\tif ( value === '' ) {\n\t\treturn !this.isRequired();\n\t}\n\n\tif ( isNaN( n ) || !isFinite( n ) ) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowInteger && Math.floor( n ) !== n ) {\n\t\treturn false;\n\t}\n\n\tif ( n < this.min || n > this.max ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {number} dir +1 or -1\n */\nOO.ui.NumberInputWidget.prototype.onButtonClick = function ( dir ) {\n\tthis.adjustValue( dir * this.step );\n};\n\n/**\n * Handle mouse wheel events.\n *\n * @private\n * @param {jQuery.Event} event\n */\nOO.ui.NumberInputWidget.prototype.onWheel = function ( event ) {\n\tvar delta = 0;\n\n\tif ( !this.isDisabled() && this.$input.is( ':focus' ) ) {\n\t\t// Standard 'wheel' event\n\t\tif ( event.originalEvent.deltaMode !== undefined ) {\n\t\t\tthis.sawWheelEvent = true;\n\t\t}\n\t\tif ( event.originalEvent.deltaY ) {\n\t\t\tdelta = -event.originalEvent.deltaY;\n\t\t} else if ( event.originalEvent.deltaX ) {\n\t\t\tdelta = event.originalEvent.deltaX;\n\t\t}\n\n\t\t// Non-standard events\n\t\tif ( !this.sawWheelEvent ) {\n\t\t\tif ( event.originalEvent.wheelDeltaX ) {\n\t\t\t\tdelta = -event.originalEvent.wheelDeltaX;\n\t\t\t} else if ( event.originalEvent.wheelDeltaY ) {\n\t\t\t\tdelta = event.originalEvent.wheelDeltaY;\n\t\t\t} else if ( event.originalEvent.wheelDelta ) {\n\t\t\t\tdelta = event.originalEvent.wheelDelta;\n\t\t\t} else if ( event.originalEvent.detail ) {\n\t\t\t\tdelta = -event.originalEvent.detail;\n\t\t\t}\n\t\t}\n\n\t\tif ( delta ) {\n\t\t\tdelta = delta < 0 ? -1 : 1;\n\t\t\tthis.adjustValue( delta * this.step );\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.NumberInputWidget.prototype.onKeyDown = function ( e ) {\n\tif ( !this.isDisabled() ) {\n\t\tswitch ( e.which ) {\n\t\t\tcase OO.ui.Keys.UP:\n\t\t\t\tthis.adjustValue( this.step );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.DOWN:\n\t\t\t\tthis.adjustValue( -this.step );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.PAGEUP:\n\t\t\t\tthis.adjustValue( this.pageStep );\n\t\t\t\treturn false;\n\t\t\tcase OO.ui.Keys.PAGEDOWN:\n\t\t\t\tthis.adjustValue( -this.pageStep );\n\t\t\t\treturn false;\n\t\t}\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.NumberInputWidget.prototype.setDisabled = function ( disabled ) {\n\t// Parent method\n\tOO.ui.NumberInputWidget.parent.prototype.setDisabled.call( this, disabled );\n\n\tif ( this.minusButton ) {\n\t\tthis.minusButton.setDisabled( this.isDisabled() );\n\t}\n\tif ( this.plusButton ) {\n\t\tthis.plusButton.setDisabled( this.isDisabled() );\n\t}\n\n\treturn this;\n};\n","}( OO ) );\n"]}
\ No newline at end of file
index 7319f11..236a5b5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
index 4d4f7ff..9c21707 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
   background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
index 587336c..442f590 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:45Z
+ * Date: 2017-11-07T22:52:46Z
  */
 /**
  * WikimediaUI Base v0.9.2
index 385da1d..370c8e1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.23.3
+ * OOjs UI v0.24.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-10-04T01:20:41Z
+ * Date: 2017-11-07T22:52:40Z
  */
 ( function ( OO ) {
 
index 20d1c99..880f765 100644 (file)
@@ -9,24 +9,11 @@
                        "rtl": "images/icons/bellOn-rtl.svg"
                } },
                "comment": { "file": "images/icons/comment.svg" },
-               "eye": {
-                       "file": "images/icons/eye.svg",
-                       "deprecated": "Moved since v0.23.0 to the 'accessibility' pack."
-               },
-               "eyeClosed": {
-                       "file": "images/icons/eyeClosed.svg",
-                       "deprecated": "Moved since v0.23.0 to the 'accessibility' pack."
-               },
                "message": { "file": {
                        "ltr": "images/icons/message-ltr.svg",
                        "rtl": "images/icons/message-rtl.svg"
                } },
                "notice": { "file": "images/icons/notice.svg" },
-               "signature": { "file": {
-                       "ltr": "images/icons/signature-ltr.svg",
-                       "rtl": "images/icons/signature-rtl.svg"
-               },
-                       "deprecated": "Moved since v0.23.0 to the 'editing-advanced' pack." },
                "speechBubble": { "file": {
                        "ltr": "images/icons/speechBubble-ltr.svg",
                        "rtl": "images/icons/speechBubble-rtl.svg"
index a3c5773..432d7df 100644 (file)
@@ -2,7 +2,11 @@
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
        "images": {
-               "alignCentre": { "file": "images/icons/align-center.svg" },
+               "alignCenter": { "file": "images/icons/align-center.svg" },
+               "alignCentre": {
+                       "file": "images/icons/align-center.svg",
+                       "deprecated": "Replaced since v0.24.2, use 'alignCenter' instead."
+               },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
                "attachment": { "file": {
index 8aa804e..602081f 100644 (file)
                        "ltr": "images/icons/printer-ltr.svg",
                        "rtl": "images/icons/printer-rtl.svg"
                } },
+               "reload": { "file": {
+                       "ltr": "images/icons/reload-ltr.svg",
+                       "rtl": "images/icons/reload-rtl.svg"
+               } },
                "search": { "file": {
                        "ltr": "images/icons/search-ltr.svg",
                        "rtl": "images/icons/search-rtl.svg"
                },
                "settings": { "file": "images/icons/settings.svg" },
                "subtract": { "file": "images/icons/subtract.svg" },
-               "sun": { "file": {
-                       "ltr": "images/icons/sun-ltr.svg",
-                       "rtl": "images/icons/sun-rtl.svg"
-                       },
-                       "deprecated": "This will be removed in v0.24.0."
-               },
                "watchlist": { "file": {
                        "ltr": "images/icons/watchlist-ltr.svg",
                        "rtl": "images/icons/watchlist-rtl.svg"
index c274c5f..d74bc07 100644 (file)
@@ -7,10 +7,6 @@
                        "ltr": "images/icons/stripeFlow-ltr.svg",
                        "rtl": "images/icons/stripeFlow-rtl.svg"
                } },
-               "stripeSideMenu": {
-                       "file": "images/icons/draggable.svg",
-                       "deprecated": "Replaced since v0.22.2, use 'draggable' from the 'movement' pack instead."
-               },
                "stripeSummary": { "file": {
                        "ltr": "images/icons/stripeSummary-ltr.svg",
                        "rtl": "images/icons/stripeSummary-rtl.svg"
index 4c70ee4..2e24951 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/add.png and b/resources/lib/oojs-ui/themes/apex/images/icons/add.png differ
index 62e5496..f986687 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
+       <path d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
 </svg>
index dd3ef8a..03bb070 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
index b5e0e60..c4814bc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="settings">
-        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26a6.618 6.618 0 0 0-.648-1.57l1.558-1.923a8.97 8.97 0 0 0-2.086-2.08L15.3 6.246a6.543 6.543 0 0 0-1.57-.648l-.26-2.463C12.996 3.054 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685A8.995 8.995 0 0 0 4.687 6.77L6.245 8.7c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.995.13 1.477l2.464.26c.15.554.367 1.08.648 1.57l-1.558 1.92a8.984 8.984 0 0 0 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.078.97.13 1.475.13s.994-.052 1.476-.13l.26-2.464a6.67 6.67 0 0 0 1.57-.648l1.92 1.558a8.984 8.984 0 0 0 2.083-2.087l-1.555-1.93c.28-.487.5-1.014.647-1.57l2.463-.26zM12 15.998a3.998 3.998 0 1 1 0-7.996 3.998 3.998 0 0 1 0 7.996z"/>
-    </g>
+       <path d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26a6.618 6.618 0 0 0-.648-1.57l1.558-1.923a8.97 8.97 0 0 0-2.086-2.08L15.3 6.246a6.543 6.543 0 0 0-1.57-.648l-.26-2.463C12.996 3.054 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685A8.995 8.995 0 0 0 4.687 6.77L6.245 8.7c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.995.13 1.477l2.464.26c.15.554.367 1.08.648 1.57l-1.558 1.92a8.984 8.984 0 0 0 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.078.97.13 1.475.13s.994-.052 1.476-.13l.26-2.464a6.67 6.67 0 0 0 1.57-.648l1.92 1.558a8.984 8.984 0 0 0 2.083-2.087l-1.555-1.93c.28-.487.5-1.014.647-1.57l2.463-.26zM12 15.998a3.998 3.998 0 1 1 0-7.996 3.998 3.998 0 0 1 0 7.996z"/>
 </svg>
index 7355084..9d3e496 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/alert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png differ
index 8b601d5..936927a 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="alert">
-        <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
-    </g>
+       <path id="point" d="M11 16h2v2h-2z"/>
+       <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
+       <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
 </svg>
index a912b03..12587a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-center.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-center.png differ
index 6f47977..1246577 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-center"/>
+       <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </svg>
index e395036..e795d95 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png differ
index a577600..010891e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-float-left"/>
+       <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </svg>
index c72a956..8f234af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png differ
index 0f46bc1..05db4c6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z" id="align-float-right"/>
+       <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z"/>
 </svg>
index 87a84e2..26c0a91 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png differ
index f36b697..24bdb53 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="arched-arrow-ltr">
-        <path id="arrow" d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.88.046-6.52 4.244-6.52 4.244s2.756-2.64 6.928-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.474 2.32 6.78-.01z"/>
-    </g>
+       <path d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.88.046-6.52 4.244-6.52 4.244s2.756-2.64 6.928-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.474 2.32 6.78-.01z"/>
 </svg>
index 12285f9..0dc1789 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png differ
index 9a7dbe6..14d22c7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="arched-arrow-rtl">
-        <path id="arrow" d="M13.4 8.542c-2.813-.027-4.548.978-5.512 1.823l-1.48-2.33-2.39 6.902 6.78.01-1.473-2.32c.668-.584 1.945-1.504 3.675-1.79 4.172-.69 6.925 1.948 6.925 1.948S18.288 8.588 13.4 8.542z"/>
-    </g>
+       <path d="M13.4 8.542c-2.813-.027-4.548.978-5.512 1.823l-1.48-2.33-2.39 6.902 6.78.01-1.473-2.32c.668-.584 1.945-1.504 3.675-1.79 4.172-.69 6.925 1.948 6.925 1.948S18.288 8.588 13.4 8.542z"/>
 </svg>
index 24905bc..b21c349 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png differ
index b4c0e0d..0a89179 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
+       <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
 </svg>
index 1cd81cb..84cda80 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png differ
index 1087ff9..25366af 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
+       <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
 </svg>
index cf7de13..61ac65a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/article-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/article-ltr.png differ
index 862bc2b..fdfabce 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
+       <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
 </svg>
index d0b0e70..db74d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/article-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/article-rtl.png differ
index 3b16dcb..9b0b4e1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
+       <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
 </svg>
index 3dbe20e..133a372 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png differ
index 028c64c..2a14d98 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="article-redirect">
-        <path id="arrow" d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
-        <path id="page" d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
-    </g>
+       <path d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+       <path d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
 </svg>
index 60beb6e..f678b51 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png differ
index 316d36c..181d1a1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="article-redirect">
-        <path id="arrow" d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
-        <path id="page" d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
-    </g>
+       <path d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
+       <path d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
 </svg>
index bd048c4..18988f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png differ
index c194497..17697a0 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
-    <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
+       <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
+       <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
 </svg>
index 3ebb113..5a49b44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png differ
index 40a9348..2d94edf 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
-    <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
+       <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
+       <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
 </svg>
index 92dfaf2..8592046 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png differ
index 74a4d64..8cad782 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-293 385 24 24">
-    <path d="M-274.3 390.9c-1.6-1.6-4.3-1.5-5.8.1l.2.2c.5.5 1.3.7 2.1.4.8-.3 1.7-.1 2.4.6 1 .9.9 2.4 0 3.4l-7.1 7.1c-.9 1-2.4.9-3.4 0s-.9-2.4 0-3.4l4.4-4.4c.3-.3.9-.5 1.3-.1s.2 1-.1 1.3l-3.4 3.4c-.6.6-.6 1.7.1 2.3l4.3-4.3c.8-.8 1.1-1.8.9-2.7-.2-.9-.9-1.6-1.7-1.9-.9-.2-1.9 0-2.6.7l-4.4 4.4c-1.6 1.6-1.6 4.3.1 5.8 1.5 1.6 4.3 1.5 5.8-.1l7-7c.8-.8 1.2-1.9 1.2-3s-.5-2.1-1.3-2.8c-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-1.5-1.6.8.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M18.34 5.55a4.1 4.1 0 0 0-5.8.1l.2.2a2 2 0 0 0 2.1.4 2.23 2.23 0 0 1 2.4.6 2.38 2.38 0 0 1 0 3.4l-7.1 7.1A2.4 2.4 0 1 1 6.74 14l4.4-4.4a.93.93 0 0 1 1.3-.1.93.93 0 0 1-.1 1.3l-3.4 3.4a1.6 1.6 0 0 0 .1 2.3l4.3-4.3a2.93 2.93 0 0 0 .9-2.7 2.72 2.72 0 0 0-1.7-1.9 2.8 2.8 0 0 0-2.6.7l-4.4 4.4a4 4 0 0 0 .1 5.8 4.11 4.11 0 0 0 5.8-.1l7-7a4.23 4.23 0 0 0 1.2-3 3.72 3.72 0 0 0-1.3-2.8c-.7-.7.8.7 0 0s.8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0C16.84 3.95 19.14 6.25 18.34 5.55z"/>
 </svg>
index f793246..0424eb4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png differ
index f53f5a4..4699008 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-119 70 24 24">
-    <path d="M-113.3 75.6c-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7-1.3 1.7-1.3 2.8 0 1.1.4 2.2 1.2 3l7 7c1.5 1.6 4.3 1.7 5.8.1 1.7-1.5 1.7-4.2.1-5.8l-4.4-4.4c-.7-.7-1.7-.9-2.6-.7-.8.3-1.5 1-1.7 1.9-.2.9.1 1.9.9 2.7l4.3 4.3c.7-.6.7-1.7.1-2.3l-3.4-3.4c-.3-.3-.5-.9-.1-1.3s1-.2 1.3.1l4.4 4.4c.9 1 1 2.5 0 3.4s-2.5 1-3.4 0l-7.1-7.1c-.9-1-1-2.5 0-3.4.7-.7 1.6-.9 2.4-.6.8.3 1.6.1 2.1-.4l.2-.2c-1.5-1.6-4.2-1.8-5.8-.1-.8.7 1.5-1.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M5.66 5.57c-.8.7.7-.7 0 0s.7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0a3.72 3.72 0 0 0-1.3 2.8 4.23 4.23 0 0 0 1.2 3l7 7a4.11 4.11 0 0 0 5.8.1 4 4 0 0 0 .1-5.8l-4.4-4.4a2.8 2.8 0 0 0-2.6-.7 2.72 2.72 0 0 0-1.7 1.9 2.93 2.93 0 0 0 .9 2.7l4.3 4.3a1.6 1.6 0 0 0 .1-2.3l-3.4-3.4a.93.93 0 0 1-.1-1.3.93.93 0 0 1 1.3.1l4.4 4.4a2.4 2.4 0 1 1-3.4 3.4l-7.1-7.1a2.38 2.38 0 0 1 0-3.4 2.23 2.23 0 0 1 2.4-.6 2 2 0 0 0 2.1-.4l.2-.2a4 4 0 0 0-5.8-.1C4.86 6.27 7.16 3.87 5.66 5.57Z"/>
 </svg>
index 91e8397..8002765 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bell.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bell.png differ
index 09b65f2..2d70300 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+       <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
 </svg>
index fb13de1..5889f01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bellOn-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bellOn-ltr.png differ
index 855581b..3face05 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+       <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
 </svg>
index b05fd4c..d670287 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bellOn-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bellOn-rtl.png differ
index e1f2961..d2da2ac 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
+       <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
 </svg>
index e8b2911..66fa9d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png differ
index fffbcdd..cc70779 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 9H4l2.5-3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 9H4l2.5-3z"/>
 </svg>
index 2f5e05d..9a09990 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png differ
index 7b903c4..a45847d 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 9h5l-2.5-3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 9h5l-2.5-3z"/>
 </svg>
index 7f8eb2a..cec69ba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/block.png and b/resources/lib/oojs-ui/themes/apex/images/icons/block.png differ
index b50bb61..47b323a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
 </svg>
index 2907677..ffe2329 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png differ
index ce9f4f8..93bffca 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z" id="bold-a"/>
+       <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
 </svg>
index 931b6cf..0d8e866 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png differ
index 452c3d0..ea589c7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
-    </g>
+       <path d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
 </svg>
index 1121257..38aecd2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png differ
index b90bb77..eb0be41 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
-    </g>
+       <path d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
 </svg>
index 6f6349b..859e77a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png differ
index c35979a..7c67a09 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
-    </g>
+       <path d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
 </svg>
index 8d09636..6233f85 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png differ
index 1806709..fd9b8e8 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
-    </g>
+       <path d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
 </svg>
index de9e9d1..3d8f91d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png differ
index 9d84cb0..be7db8b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
-    </g>
+       <path d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
 </svg>
index 281d718..5e5d5bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png differ
index 63aee3e..90569f2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-te">
-        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
-    </g>
+       <path d="M11 18V8H7V6h11v2h-4v10"/>
 </svg>
index 9838701..5453e7b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png differ
index aab3f4c..4a111c2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
-    </g>
+       <path d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
 </svg>
index ad0d89b..9fea772 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png differ
index 89061f1..4aa5673 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-f">
-        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
-    </g>
+       <path d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
 </svg>
index 55e766a..31b6804 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png differ
index 3150d95..adf24ec 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
-    </g>
+       <path d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
 </svg>
index c050074..5aca1db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png differ
index deb95b7..f1aecfc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-geor-man">
-        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
-    </g>
+       <path d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
 </svg>
index 11b67a1..aa23d2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png differ
index 7695623..dc594b7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-l">
-        <path id="l" d="M8 18V6h3v10h5v2"/>
-    </g>
+       <path d="M8 18V6h3v10h5v2"/>
 </svg>
index 708d421..27aa1a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png differ
index 62f66a2..cfd9d94 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-n">
-        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
-    </g>
+       <path d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
 </svg>
index a60786c..d6659a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png differ
index 027db27..457b086 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-v">
-        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
-    </g>
+       <path d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
 </svg>
index 6194ed4..606f236 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bright-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bright-invert.png differ
index 8f41c1a..2fdb653 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
-    <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
 </g></svg>
index 788fc94..02f4e91 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bright.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bright.png differ
index 5a399fe..fbb9e97 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
-    <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
 </svg>
index ae059ad..f29fc4b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png differ
index e7be7e5..3d75c4e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
+       <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
 </svg>
index 939a858..924ae3a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png differ
index 38807b5..5a9f39a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
+       <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
 </svg>
index 0ab46dd..168bd20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png differ
index b0bc0e5..25dd005 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+       <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
 </svg>
index 0236393..5d37b77 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png differ
index d8ff5a9..1831c62 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+       <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
 </svg>
index f9354e3..a89a1f4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png differ
index 04ff5c3..8e71801 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
-    </g>
+       <path d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
 </svg>
index 426c5de..ddfb31d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png differ
index 749e38f..a8cf364 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="case-sensitive">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
-    </g>
+       <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+       <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
 </svg>
index 0cc9f74..f5ad406 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/check.png and b/resources/lib/oojs-ui/themes/apex/images/icons/check.png differ
index 0c5332b..e5998a2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7.105 13.473l1.422-1.423 1.9 1.902L15.237 7l1.66 1.148L10.634 17z" id="check"/>
+       <path d="M7.105 13.473l1.422-1.423 1.9 1.902L15.237 7l1.66 1.148L10.634 17z"/>
 </svg>
index 973dc03..e779ee3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clear.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png differ
index 8689e77..43fcb6f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="clear">
-        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-    </g>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
 </svg>
index ac25483..814c074 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clip.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clip.png differ
index 86d1dbf..d95390d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index b826457..9de6565 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clock.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clock.png differ
index 2a94493..89d14bf 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="clock">
-        <path id="circle" d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm0 1.25a5.75 5.75 0 0 1 0 11.5 5.75 5.75 0 0 1 0-11.5z"/>
-        <path id="hands" d="M15.605 14.08s-1.674-1.36-2.81-2.15c.504-1.683 1.194-4.605 1.194-4.605s-3.057 3.765-3.427 4.703c-.325.82 1.024 1.55 1.647 1.178 1.335.387 3.394.873 3.394.873z"/>
-    </g>
+       <path id="circle" d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm0 1.25a5.75 5.75 0 0 1 0 11.5 5.75 5.75 0 0 1 0-11.5z"/>
+       <path id="hands" d="M15.605 14.08s-1.674-1.36-2.81-2.15c.504-1.683 1.194-4.605 1.194-4.605s-3.057 3.765-3.427 4.703c-.325.82 1.024 1.55 1.647 1.178 1.335.387 3.394.873 3.394.873z"/>
 </svg>
index 9b3d4ae..3655c0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/close.png and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
index b379e18..79c72e1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M17.717 7.697l-1.414-1.414L12 10.586 7.697 6.283 6.283 7.697 10.586 12l-4.303 4.303 1.414 1.414L12 13.414l4.303 4.303 1.414-1.414L13.414 12z"/>
+       <path d="M17.717 7.697l-1.414-1.414L12 10.586 7.697 6.283 6.283 7.697 10.586 12l-4.303 4.303 1.414 1.414L12 13.414l4.303 4.303 1.414-1.414L13.414 12z"/>
 </svg>
index ba89e4e..4979e47 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/code.png and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
index a00d158..ae0a42d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
 </svg>
index 1d8c6db..8e9fcc9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png differ
index 645bfda..8059a5f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="collapse">
-        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
-    </g>
+       <path d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
 </svg>
index dcaa881..838d45d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/comment.png and b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png differ
index 861611a..26a58d3 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="comment">
-        <path id="speech-bubble" d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
-    </g>
+       <path d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
 </svg>
index 2359b19..f11425d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png and b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png differ
index 4565101..7d14731 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="diacritic">
-      <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
-      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
-    </g>
+       <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+       <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
 </svg>
index 7df0592..32ba743 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png differ
index e1fb989..b04f079 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 18l8-10H4z"/>
+       <path d="M12 18l8-10H4z"/>
 </svg>
index e031527..5774c25 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/draggable.png and b/resources/lib/oojs-ui/themes/apex/images/icons/draggable.png differ
index e63a7d5..80d09b5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
+       <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
 </svg>
index 504f29b..6f15678 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png differ
index 02ab6e4..f116227 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
+       <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
 </svg>
index 83033c5..caddba6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
+       <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
 </svg>
index aa4b8c3..9b5cdc7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png differ
index e06e5a0..3da6b80 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
+       <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
 </svg>
index 3d8b751..75e9fd4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png differ
index fb1001f..4a21f42 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
+       <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
 </svg>
index c163360..5704177 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png differ
index 50f4214..bde7b8f 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
-    <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
+       <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
+       <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
 </svg>
index fc98968..02983c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png differ
index b7cfed7..2946c26 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
-    <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
+       <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
+       <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
 </svg>
index 85fa4f3..5d8d9cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png differ
index ef7d485..3b0dd78 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+       <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
 </svg>
index f72b6f2..945dd07 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/expand.png and b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png differ
index 84b9e0a..0e58027 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="expand">
-        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
-    </g>
+       <path d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
 </svg>
index 185ffc6..5b78631 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png differ
index 1d7980d..ae57905 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="external">
-        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
-        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
-    </g>
+       <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+       <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
 </svg>
index 7066001..c610796 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png differ
index 7e25d03..ef4ba39 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="external">
-        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
-        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
-    </g>
+       <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+       <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
 </svg>
index 4e11ebc..d3bb681 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/eye-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/eye-invert.png differ
index c2651c0..93c91e9 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
-    <circle id="pupil" r="2" cy="12" cx="12"/>
+       <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+       <circle id="pupil" r="2" cy="12" cx="12"/>
 </g></svg>
index eb5f963..dab9312 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/eye.png and b/resources/lib/oojs-ui/themes/apex/images/icons/eye.png differ
index cec85d0..e667e48 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
-    <circle id="pupil" r="2" cy="12" cx="12"/>
+       <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+       <circle id="pupil" r="2" cy="12" cx="12"/>
 </svg>
index bd499f1..e16538d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed-invert.png differ
index d394a98..385e9c6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+       <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
 </g></svg>
index 1ac37d6..0c66fa3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed.png and b/resources/lib/oojs-ui/themes/apex/images/icons/eyeClosed.png differ
index d17f2c8..681e17c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+       <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
 </svg>
index ac5787b..c8e7593 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png differ
index 0fdeed9..9d05857 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+       <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
 </svg>
index fdbe5e1..6bdb394 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png differ
index 022d86d..481fe64 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+       <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
 </svg>
index 066d84a..6963143 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png differ
index ef44f57..4441b36 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
-        <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
-    </g>
+       <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
+       <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
 </svg>
index ed834af..77aed34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png differ
index 51fd39b..c275cac 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
-        <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
-    </g>
+       <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
+       <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
 </svg>
index bd19f2b..c91cb49 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png differ
index 1097561..7d9dabe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
+       <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
 </svg>
index a9943cc..384ff1b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png differ
index 397a3da..6a62d7f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M10.3 7.5V6c1.4-1.5 5.2-1.2 6 0V5h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V14c-1.2 1.5-4.3 1.2-5 0V7c.7.7 2.7.9 4 .5z"/>
 </svg>
\ No newline at end of file
index ced1035..fb6ff20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/fullScreen.png and b/resources/lib/oojs-ui/themes/apex/images/icons/fullScreen.png differ
index 06b709b..a7a36fe 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
-    <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+       <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+       <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
 </svg>
index 9396cba..6c62b86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png differ
index df863b9..9a9ccf4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+       <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
 </svg>
index 7aee05f..d863703 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png differ
index 4eade2d..9251540 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
+       <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
 </svg>
index 2a4d547..f974473 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/halfBright-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/halfBright-invert.png differ
index 82f466e..4e96261 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
+       <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
 </g></svg>
index f843210..8639ec1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/halfBright.png and b/resources/lib/oojs-ui/themes/apex/images/icons/halfBright.png differ
index 2745ec7..efff413 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
+       <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
 </svg>
index d52a908..ac5d6f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/halfStar-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/halfStar-ltr.png differ
index cfb17d8..56e8283 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
-    <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
 </svg>
index 4991b65..d4b1a70 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/halfStar-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/halfStar-rtl.png differ
index c649b50..c94edef 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
-    <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
+       <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
+       <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
 </svg>
index 76d76d0..37b813b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/heart.png and b/resources/lib/oojs-ui/themes/apex/images/icons/heart.png differ
index 6433201..ebbb3ae 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+       <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
 </svg>
index 9bb1382..52edca6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png differ
index a77dca2..e5ea3f1 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
-            <path id="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
+       <path id="question-mark-top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M11 16h2v2h-2z"/>
 </svg>
index 50899b0..bda8999 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png differ
index 278b906..cf8cd9b 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
-            <path id="bottom" d="M13 16h-2v2h2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
+       <path id="question-mark-top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M13 16h-2v2h2z"/>
 </svg>
index 73dd6b9..fd9477d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png differ
index eb42923..328429a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24">
-    <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
 </svg>
index 2ea2983..db47888 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png differ
index 9b1940e..d349b43 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24">
-    <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
 </svg>
index 417f529..5425e1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/history.png and b/resources/lib/oojs-ui/themes/apex/images/icons/history.png differ
index 68beaa1..f290933 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
-    </g>
+       <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
+       <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
 </svg>
index f76b374..f926b7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/image.png and b/resources/lib/oojs-ui/themes/apex/images/icons/image.png differ
index 00bcd21..a92d6a9 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="image">
-        <path id="frame" d="M4 5v13h16V5zm15 12H5V6h14z"/>
-        <path id="mountains" d="M9.5 10l2.328 2.312-1.312 1.094.875 1.032L15.5 11l2.5 2v3H6v-2.5z"/>
-        <path id="sky" d="M9.516 7.844l3.046 3.172L15.5 9l2.5 2V7H6v5z"/>
-    </g>
+       <path id="frame" d="M4 5v13h16V5zm15 12H5V6h14z"/>
+       <path id="mountains" d="M9.5 10l2.328 2.312-1.312 1.094.875 1.032L15.5 11l2.5 2v3H6v-2.5z"/>
+       <path id="sky" d="M9.516 7.844l3.046 3.172L15.5 9l2.5 2V7H6v5z"/>
 </svg>
index 937ef3c..981ede2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png differ
index c1970e4..c297d6f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 8v11h14V8zm13 10H8V9h12zM9 14.945l2.917-2.723 1.94 1.8-1.094.85.73 1.024L16.917 13 19 14.556V17H9zm0-1.167l2.93-3.232 2.538 2.467 2.45-1.568L19 13v-3H9zM19 6v1H6v10H5V6zM3 4h14v1H4v10H3z" id="imageGallery"/>
+       <path d="M7 8v11h14V8zm13 10H8V9h12zM9 14.945l2.917-2.723 1.94 1.8-1.094.85.73 1.024L16.917 13 19 14.556V17H9zm0-1.167l2.93-3.232 2.538 2.467 2.45-1.568L19 13v-3H9zM19 6v1H6v10H5V6zM3 4h14v1H4v10H3z"/>
 </svg>
index 8a26322..b9231f1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png differ
index 90298d2..935348a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 8v11H3V8zM4 18h12V9H4zm11-3.055l-2.917-2.723-1.94 1.8 1.094.85-.73 1.024L7.083 13 5 14.556V17h10zm0-1.167l-2.93-3.232-2.538 2.467-2.45-1.568L5 13v-3h10zM5 6v1h13v10h1V6zm16-2H7v1h13v10h1z" id="imageGallery"/>
+       <path d="M17 8v11H3V8zM4 18h12V9H4zm11-3.055l-2.917-2.723-1.94 1.8 1.094.85-.73 1.024L7.083 13 5 14.556V17h10zm0-1.167l-2.93-3.232-2.538 2.467-2.45-1.568L5 13v-3h10zM5 6v1h13v10h1V6zm16-2H7v1h13v10h1z"/>
 </svg>
index ea48759..48ee890 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png differ
index cb23877..be2ba1a 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="indent-list-ltr">
-        <path id="arrow" d="M5 15.08l4.794-3.528-4.704-3.6L5.08 10H3v3h2z"/>
-        <path id="bottom_line" d="M20 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="middle_line" d="M20 10h-7a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="top_line" d="M20 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
-    </g>
+       <path id="arrow" d="M5 15.08l4.794-3.528-4.704-3.6L5.08 10H3v3h2z"/>
+       <path id="bottom_line" d="M20 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="middle_line" d="M20 10h-7a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="top_line" d="M20 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
 </svg>
index ea967d0..2225756 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png differ
index c6527ee..375d2c3 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="indent-list-rtl">
-        <path id="arrow" d="M19 15.08l-4.794-3.528 4.704-3.6.01 2.048H21v3h-2z"/>
-        <path id="bottom_line" d="M4 17h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="middle_line" d="M4 10h7a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="top_line_5_" d="M4 3h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
-    </g>
+       <path id="arrow" d="M19 15.08l-4.794-3.528 4.704-3.6.01 2.048H21v3h-2z"/>
+       <path id="bottom_line" d="M4 17h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="middle_line" d="M4 10h7a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="top_line" d="M4 3h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
 </svg>
index 0b4270d..c4fe4e3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/info.png and b/resources/lib/oojs-ui/themes/apex/images/icons/info.png differ
index 72a9b4c..6cf5c6a 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="info">
-        <path id="circled-i" d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
-    </g>
+       <path d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
 </svg>
index 2f5fd18..3530a67 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png differ
index a3a11c6..6c5ebb0 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
-    </g>
+       <path d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
 </svg>
index c8e03ee..b62c9d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png differ
index 11b1458..4a75513 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
-    </g>
+       <path d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
 </svg>
index 409a416..9ecf9f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png differ
index f15586e..8d36705 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
-    </g>
+       <path d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
 </svg>
index 2dd80f7..1a2d476 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png differ
index c32ff49..8e4e1b9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
-    </g>
+       <path d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
 </svg>
index dc70ded..062a8bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png differ
index b85eb02..9d30d10 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
-    </g>
+       <path d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
 </svg>
index cd5ac9d..e750a89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png differ
index dbc1d40..6ee788c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
-    </g>
+       <path d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
 </svg>
index bb51c22..2d69a29 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png differ
index f385149..fde4485 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
-    </g>
+       <path d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
 </svg>
index 9750f42..d5d1d31 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png differ
index 9a54880..5d27f20 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
-    </g>
+       <path d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
 </svg>
index a37620b..aaaf2a4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png differ
index e670e9b..7748046 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-i">
-        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
-    </g>
+       <path d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
 </svg>
index 9b156fd..4013192 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png differ
index 38bcd73..db16b71 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-k">
-        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
-    </g>
+       <path d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
 </svg>
index 3213d6d..6a53113 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png differ
index b3fb340..59c3bde 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
-    </g>
+       <path d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
 </svg>
index 2af4eb0..949364a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png differ
index 8a83e41..ccb7d4f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
+       <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
 </svg>
index 033ede1..f3fca66 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png differ
index 2a07a44..3e74f68 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
+       <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
 </svg>
index 9a4dca8..a59d506 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png differ
index fc0d3c3..a1bdc30 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
+       <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
 </svg>
index f49e112..5175285 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png differ
index 6dedfe8..43a9982 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
+       <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
 </svg>
index 886d37a..7d0b773 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png differ
index c4c442e..27bec47 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
+       <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
 </svg>
index 790a5e2..6dc4f4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png differ
index b37d7f4..382d1b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
+       <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
 </svg>
index f7b785c..dc27718 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png differ
index d64b734..13b42fa 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="A">
-        <path d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
-    </g>
-    <g id="文">
-        <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
-        <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
-    </g>
+       <path id="A" d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
+       <g id="文">
+               <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
+               <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
+       </g>
 </svg>
index c78f2cd..c085994 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png differ
index cf6c1d5..8e409cc 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="A">
-        <path d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z" id="path5"/>
-    </g>
-    <g id="文">
-        <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z" id="path7"/>
-        <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z" id="path11-7"/>
-    </g>
+       <path id="A" d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z"/>
+       <g id="文">
+               <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z"/>
+               <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z"/>
+       </g>
 </svg>
index 264811b..a6fa83f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr-invert.png differ
index 491adb5..a09b627 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+       <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
 </g></svg>
index 4b6d298..b77c4d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/largerText-ltr.png differ
index 4b01d74..57f3c41 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+       <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
 </svg>
index b91b35c..ff63514 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl-invert.png differ
index 4842411..6e48bbe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
+       <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
 </g></svg>
index 77d7796..41ea208 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/largerText-rtl.png differ
index 6ac62dc..287fbd2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
+       <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
 </svg>
index ea6d2f5..0115366 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png differ
index c3be66c..e50dba9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="layout-ltr">
-        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
 </svg>
index 46bf59b..9474c2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png differ
index ce7feb8..110318a 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="layout-rtl">
-        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
-        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
-    </g>
+       <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+       <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
 </svg>
index 985a520..a4327c2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/link.png differ
index e37b390..2803705 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="link">
-        <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.09 0 1.982.917 1.982 2.017z"/>
-        <path id="center" d="M8 12c0 .535.42 1 .938 1h6.11c.517 0 .937-.465.937-1 0-.534-.42-1-.938-1h-6.11C8.42 11 8 11.466 8 12z"/>
-        <path id="left" d="M4.816 12c0-1.1.89-2.016 1.988-2.016L11 10c-.54-1.09-.964-2-1.998-2h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.46-.91 1.998-2l-4.195.016c-1.098 0-1.99-.917-1.99-2.017z"/>
-    </g>
+       <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.09 0 1.982.917 1.982 2.017z"/>
+       <path id="center" d="M8 12c0 .535.42 1 .938 1h6.11c.517 0 .937-.465.937-1 0-.534-.42-1-.938-1h-6.11C8.42 11 8 11.466 8 12z"/>
+       <path id="left" d="M4.816 12c0-1.1.89-2.016 1.988-2.016L11 10c-.54-1.09-.964-2-1.998-2h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.46-.91 1.998-2l-4.195.016c-1.098 0-1.99-.917-1.99-2.017z"/>
 </svg>
index e678733..a7c454e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png differ
index 94ae5b4..14854c3 100644 (file)
@@ -1,11 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bullet-list-ltr">
-        <path id="bottom_dot" d="M5 10H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="middle_dot" d="M5 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="top_dot" d="M5 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
-        <path id="bottom_line" d="M20 17H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="middle_line" d="M20 10H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="top_line" d="M20 3H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
-    </g>
+       <path id="bottom_dot" d="M5 10H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="middle_dot" d="M5 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="top_dot" d="M5 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
+       <path id="bottom_line" d="M20 17H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="middle_line" d="M20 10H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="top_line" d="M20 3H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
 </svg>
index d5bba7a..a8a32b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png differ
index c37a729..58d04b5 100644 (file)
@@ -1,11 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bullet-list-rtl">
-        <path id="bottom_dot_1_" d="M19 10h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="middle_dot_1_" d="M19 17h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="top_dot_1_" d="M19 3h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
-        <path id="bottom_line_7_" d="M4 17h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="middle_line_7_" d="M4 10h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="top_line_7_" d="M4 3h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
-    </g>
+       <path id="bottom_dot" d="M19 10h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="middle_dot" d="M19 17h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="top_dot" d="M19 3h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
+       <path id="bottom_line" d="M4 17h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="middle_line" d="M4 10h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="top_line" d="M4 3h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
 </svg>
index fc2a369..a70bc81 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png differ
index 8c4fcf2..fc6fa7d 100644 (file)
@@ -1,11 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="number-list-ltr">
-        <path id="bottom_dot" d="M3 16v1h1.993l.03 1H4v1h1v1H3v1h2.023L6 19.998v-1l-.955-.53.955-.5v-.97L4.993 16z"/>
-        <path id="middle_dot" d="M3 9v1h2.117L3 12.187v1.81l3-.06V13H3.882L6 10.812V9.78L5.332 9z"/>
-        <path id="top_dot" d="M4.993 2h-.648L3.018 3.39l.03.61h1.026l-.068 2H3v1h3V6H4.963z"/>
-        <path id="bottom_line" d="M20.002 17H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 19v-1a1 1 0 0 0-.998-1z"/>
-        <path id="middle_line" d="M20.002 10H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 12v-1a1 1 0 0 0-.998-1z"/>
-        <path id="top_line" d="M20.002 3H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 5V4a1 1 0 0 0-.998-1z"/>
-    </g>
+       <path id="bottom_dot" d="M3 16v1h1.993l.03 1H4v1h1v1H3v1h2.023L6 19.998v-1l-.955-.53.955-.5v-.97L4.993 16z"/>
+       <path id="middle_dot" d="M3 9v1h2.117L3 12.187v1.81l3-.06V13H3.882L6 10.812V9.78L5.332 9z"/>
+       <path id="top_dot" d="M4.993 2h-.648L3.018 3.39l.03.61h1.026l-.068 2H3v1h3V6H4.963z"/>
+       <path id="bottom_line" d="M20.002 17H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 19v-1a1 1 0 0 0-.998-1z"/>
+       <path id="middle_line" d="M20.002 10H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 12v-1a1 1 0 0 0-.998-1z"/>
+       <path id="top_line" d="M20.002 3H9a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h11.002A1 1 0 0 0 21 5V4a1 1 0 0 0-.998-1z"/>
 </svg>
index fd7bc00..3f8b294 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png differ
index f26313b..f4dca20 100644 (file)
@@ -1,11 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="number-list-rtl">
-        <path id="bottom_dot" d="M18 16v1h1.993l.03 1H19v1h1v1h-2v1h2.023L21 19.998v-1l-.956-.53.956-.5v-.97L19.993 16z"/>
-        <path id="middle_dot" d="M18 9v1h2.116L18 12.187v1.81l3-.06V13h-2.118L21 10.812V9.78L20.33 9z"/>
-        <path id="top_dot" d="M19.993 2h-.648l-1.328 1.39.03.61h1.027l-.07 2H18v1h3V6h-1.038z"/>
-        <path id="bottom_line" d="M4 17h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="middle_line" d="M4 10h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="top_line" d="M4 3h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
-    </g>
+       <path id="bottom_dot" d="M18 16v1h1.993l.03 1H19v1h1v1h-2v1h2.023L21 19.998v-1l-.956-.53.956-.5v-.97L19.993 16z"/>
+       <path id="middle_dot" d="M18 9v1h2.116L18 12.187v1.81l3-.06V13h-2.118L21 10.812V9.78L20.33 9z"/>
+       <path id="top_dot" d="M19.993 2h-.648l-1.328 1.39.03.61h1.027l-.07 2H18v1h3V6h-1.038z"/>
+       <path id="bottom_line" d="M4 17h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="middle_line" d="M4 10h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="top_line" d="M4 3h11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
 </svg>
index 5f295f8..a68f3a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/lock.png and b/resources/lib/oojs-ui/themes/apex/images/icons/lock.png differ
index d935646..6bfbd46 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 6a4 4 0 0 0-4 4v1H7v7h10v-7h-1v-1a4 4 0 0 0-4-4zm0 2a2 2 0 0 1 2 2v1h-4v-1a2 2 0 0 1 2-2z" id="lock"/>
+       <path d="M12 6a4 4 0 0 0-4 4v1H7v7h10v-7h-1v-1a4 4 0 0 0-4-4zm0 2a2 2 0 0 1 2 2v1h-4v-1a2 2 0 0 1 2-2z"/>
 </svg>
index 18f82eb..f7cff2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png differ
index f2be068..6c989d7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
+       <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
 </svg>
index 0ffb723..e8c437b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png differ
index 5f5ebb9..9aaa96b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
+       <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
 </svg>
index c78f418..3aac9ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/markup.png and b/resources/lib/oojs-ui/themes/apex/images/icons/markup.png differ
index 7f8c253..cbaaed8 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="markup">
-        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
 </svg>
index d2278db..98add2e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/menu.png and b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png differ
index a33c21c..2f84049 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="menu">
-        <path id="lines" d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
-    </g>
+       <path d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
 </svg>
index 2171c1f..8b88309 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/message-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/message-ltr.png differ
index 842d312..00eb63a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+       <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
 </svg>
index fba7920..ab69641 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/message-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/message-rtl.png differ
index 0a22c75..0719619 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
+       <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
 </svg>
index 38bcc0a..10ea02e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/moon-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/moon-invert.png differ
index 7ecd512..c2ac3bf 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
+       <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
 </g></svg>
index 7aef8bd..ef59eb7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/moon.png and b/resources/lib/oojs-ui/themes/apex/images/icons/moon.png differ
index bdbf234..2740555 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
+       <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
 </svg>
index 9d35b9e..50506fa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-end-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-end-ltr.png differ
index 98adcf7..15f769f 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
-        <path id="bar" d="M16 7h2v11h-2z"/>
-    </g>
+       <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
+       <path id="bar" d="M16 7h2v11h-2z"/>
 </svg>
index bcd8a0c..2f50ea6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-end-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-end-rtl.png differ
index 5f9d60d..1c9fd09 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-        <path id="bar" d="M6 7h2v11H6z"/>
-    </g>
+       <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
+       <path id="bar" d="M6 7h2v11H6z"/>
 </svg>
index 670d84d..94b27c5 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-ltr">
-        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
-    </g>
+       <path d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
 </svg>
index e401a8f..ef015f2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png differ
index ce5b444..0d969cf 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-    </g>
+       <path d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
 </svg>
index 7071499..acf46cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move.png differ
index b04ecdd..7e873f7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
+       <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </svg>
index 29563d8..c252652 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png differ
index 2d19a78..e3cb34d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
+       <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
 </svg>
index c49609f..2ce409b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png differ
index 133442e..dd633b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
+       <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
 </svg>
index f41eb0c..4cb5216 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png differ
index a7e5b12..ee41f86 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z" id="line_return"/>
+       <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
 </svg>
index 93c7e52..7a14bee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png differ
index 40752fa..a94702a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z" id="line_return"/>
+       <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
 </svg>
index 2623b84..a164b10 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png differ
index 2dfa2c7..7cc6b21 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z" id="noWikiText-rtl"/>
+       <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z"/>
 </svg>
index 4d0ce86..7c9b5a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png differ
index 4f275fd..0e407e5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z" id="noWikiText-rtl"/>
+       <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z"/>
 </svg>
index de7e529..3b7d003 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/notBright-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/notBright-invert.png differ
index ca20b5a..8721b52 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
 </g></svg>
index 5273b4c..9034da0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/notBright.png and b/resources/lib/oojs-ui/themes/apex/images/icons/notBright.png differ
index af87ff9..88d5963 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
 </svg>
index 114020e..19f6a6b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/notice.png and b/resources/lib/oojs-ui/themes/apex/images/icons/notice.png differ
index 8dc4fec..b187ea8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
-    <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="alert"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z"/>
 </svg>
index df49095..0276939 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-ltr.png differ
index 658809d..c9ccb52 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-    <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" id="ongoing-conversation" fill-rule="evenodd"/>
+       <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
 </svg>
index 3d7e9bd..e386122 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ongoingConversation-rtl.png differ
index 648ce55..5241421 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-    <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.332 1.332 0 0 0-.945-.405c-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z" id="ongoing-conversation" fill-rule="evenodd"/>
+       <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945a1.332 1.332 0 0 0-.945-.405c-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z" fill-rule="evenodd"/>
 </svg>
index e3af672..768deec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png differ
index ad55ed4..5db004c 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outdent-list-ltr">
-        <path id="arrow" d="M8 13h2v-3H7.948l-.03-2.06-4.713 3.585L8 15.08z"/>
-        <path id="bottom_line" d="M20 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="middle_line" d="M20 10h-7a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
-        <path id="top_line" d="M20 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
-    </g>
+       <path id="arrow" d="M8 13h2v-3H7.948l-.03-2.06-4.713 3.585L8 15.08z"/>
+       <path id="bottom_line" d="M20 17H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="middle_line" d="M20 10h-7a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z"/>
+       <path id="top_line" d="M20 3H4a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/>
 </svg>
index ff08acf..25e1c0d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png differ
index 64ad8b0..42d5e12 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outdent-list-rtl">
-        <path id="arrow" d="M16 13h-2v-3h2.052l.03-2.06 4.713 3.585L16 15.08z"/>
-        <path id="bottom_line" d="M4 17h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="middle_line" d="M4 10h7a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
-        <path id="top_line" d="M4 3h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
-    </g>
+       <path id="arrow" d="M16 13h-2v-3h2.052l.03-2.06 4.713 3.585L16 15.08z"/>
+       <path id="bottom_line" d="M4 17h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="middle_line" d="M4 10h7a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1z"/>
+       <path id="top_line" d="M4 3h16a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
 </svg>
index bcbfa5c..957723b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png differ
index 44c1591..4c33bc9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outline-ltr">
-        <path id="text" d="M5 13h14v6H5v-6z"/>
-        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 13h14v6H5v-6z"/>
+       <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
 </svg>
index d89e06e..a968f28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png differ
index c5b19c8..73d9e06 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outline-rtl">
-        <path id="text" d="M19 19H5v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
-    </g>
+       <path id="text" d="M19 19H5v-6h14v6z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
 </svg>
index ef33251..08ed9e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/play-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/play-ltr.png differ
index e9704fd..9018c78 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
 </svg>
index a8c59a9..ea8a49a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/play-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/play-rtl.png differ
index ec0dcf2..f2c31fe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
+       <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
 </svg>
index a7f6717..3af798c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png differ
index 7081606..6ea36b3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
+       <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
 </svg>
index 6e5b175..4463fdb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png differ
index d6188eb..b426387 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
+       <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
 </svg>
index 27d49e2..0f3728c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/pushPin.png and b/resources/lib/oojs-ui/themes/apex/images/icons/pushPin.png differ
index b852cd0..5deb42e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
+       <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
 </svg>
index 6ce22fe..80a650d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/puzzle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/puzzle.png differ
index cfcbbcc..2d5bbf5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="puzzle-piece" d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
+       <path d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
 </svg>
index 0252b74..293e8a8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png differ
index dc366b7..53b66b3 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes">
-        <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-    </g>
-    <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </svg>
index 7bcc7c7..3cd13e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png differ
index e652b31..9c6d523 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes">
-        <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-    </g>
-    <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </svg>
index e1a0c4b..e433721 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png differ
index 6704c51..0bb7156 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes-add">
-        <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-        <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
-        <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
-    </g>
+       <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
+       <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
 </svg>
index 0ef9d01..39f9e1b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png differ
index d972ad3..0f9eb59 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes-add">
-        <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-        <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
-        <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
-    </g>
+       <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
+       <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
 </svg>
index f27e421..7a833f0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png differ
index d5fcfcf..b3539a5 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
-        <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
-    </g>
+       <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
+       <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
+       <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
+       <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.png
new file mode 100644 (file)
index 0000000..5d233fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/reload-ltr.svg
new file mode 100644 (file)
index 0000000..174bd4b
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M14.603 9.997L21 13.235V6.302L18.702 7.63c-4.17-6.396-14.075-3.87-14.676 3.74-.6 7.61 8.784 11.66 13.907 5.997L16.6 16.16c-3.957 4.372-11.205 1.277-10.786-4.603.42-5.88 8.034-7.916 11.33-3.027z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.png
new file mode 100644 (file)
index 0000000..a3c996a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/reload-rtl.svg
new file mode 100644 (file)
index 0000000..e9ae9e6
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M9.397 9.997L3 13.235V6.302L5.298 7.63c4.17-6.396 14.075-3.87 14.676 3.74.6 7.61-8.784 11.66-13.907 5.997L7.4 16.16c3.957 4.372 11.205 1.277 10.786-4.603-.42-5.88-8.034-7.916-11.33-3.027z"/>
+</svg>
index e8e99f8..9a8ffbf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png differ
index ebc654a..6c35789 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
-    </g>
+       <path d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
 </svg>
index 3ab96be..8a6a5d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png differ
index c51d4cb..5e664aa 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
-    </g>
+       <path d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
 </svg>
index 8a44a92..96dca53 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png differ
index 453d166..d4dccd7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
-    </g>
+       <path d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
 </svg>
index 1c8e587..103532a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/settings.png and b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png differ
index 3245dbe..6c8acee 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="settings">
-        <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
-    </g>
+       <path d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
 </svg>
index f68a7bf..30f9f59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/signature-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/signature-ltr.png differ
index 03b34cf..0a55301 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+       <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
 </svg>
index 9166e8d..104e115 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/signature-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/signature-rtl.png differ
index 326281a..03863e6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
+       <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
 </svg>
index a9b29d8..5739a4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png differ
index 9431252..7d8d438 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 6h5l-2.5 3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 6h5l-2.5 3z"/>
 </svg>
index 006bd2b..7ebd3ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png differ
index d2d2858..7a49a3a 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 6H4l2.5 3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 6H4l2.5 3z"/>
 </svg>
index dec125e..ad49a29 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr-invert.png differ
index 146a212..a94be5e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
+       <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
 </g></svg>
index b38dca3..887b35d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-ltr.png differ
index 446d10a..f414ec5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
+       <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
 </svg>
index 9aba246..461d572 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl-invert.png differ
index 960793c..218ad19 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
+       <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
 </g></svg>
index b9864ef..8da5d7a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smallerText-rtl.png differ
index ebcea4d..d1db749 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
+       <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
 </svg>
index 9b02a41..27ec94c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png differ
index 5cba080..267abcb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
-    </g>
+       <path d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
 </svg>
index 2eedf9f..4ee46ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-ltr.png differ
index 83d47c1..624a6de 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+       <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
 </svg>
index 0d14443..e4d24ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubble-rtl.png differ
index e7dd668..5459387 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
+       <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
 </svg>
index aafac18..c13d5bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-ltr.png differ
index c7134c3..64c1c92 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
 </svg>
index feff2ba..5c1ce20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbleAdd-rtl.png differ
index 08462e0..a746a04 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
+       <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
 </svg>
index f2e0564..99a56c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-ltr.png differ
index d683218..92a4f9e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+       <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
 </svg>
index 9c67f3f..055919e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/speechBubbles-rtl.png differ
index db548a4..12f2472 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
+       <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
 </svg>
index 36b6a1f..980083d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/star.png and b/resources/lib/oojs-ui/themes/apex/images/icons/star.png differ
index 54ba77a..12cc4ac 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
index 279d1f7..ed9e75f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png differ
index 070d785..8e4ff2e 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
 </svg>
index 21b9baa..71772d3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png differ
index 171f8f3..25ebee0 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
-    </g>
+       <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
+       <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
 </svg>
index d769468..01a64d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png differ
index 2fdbc87..fab1452 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="y" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
 </svg>
index 5423b36..539ddf1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png differ
index 2112bb2..e7cb5c0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
+       <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </svg>
index 0ff3d7c..1224d28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png differ
index 39790a9..90749aa 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
+       <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
 </svg>
index ce15bd8..e939455 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png differ
index 767d6cd..e3ed720 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
+       <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
 </svg>
index 82ca2bf..21a30a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png differ
index 4d16337..f8f77af 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
+       <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
 </svg>
index b482d3e..1993d7e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png differ
index d7c202e..33e474f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
+       <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
 </svg>
index 516bc2c..9b5924b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png differ
index 0859be6..82bd5dc 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
+       <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
 </svg>
index c2cf4cf..20354ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png differ
index fbb0c3c..48d958f 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </svg>
index b1ee51b..79887f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png differ
index 91a71ec..94db14b 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </svg>
index bd719cb..525845a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subtract.png and b/resources/lib/oojs-ui/themes/apex/images/icons/subtract.png differ
index a79f0b5..c796f42 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M18 13H6v-2h12"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png
deleted file mode 100644 (file)
index 0c00745..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.svg
deleted file mode 100644 (file)
index 4bde183..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
-    <circle cx="12" cy="11" r="4"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png
deleted file mode 100644 (file)
index 77c7806..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.svg
deleted file mode 100644 (file)
index 868334e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3H3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z"/>
-    <circle cx="12" cy="11" r="4" transform="matrix(-1 0 0 1 24 0)"/>
-</svg>
index 8df4609..5e71d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png differ
index 45abfda..298eff3 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </svg>
index 48bfd68..1842f37 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png differ
index 33b5814..31c58b0 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </svg>
index 80b474d..f6e5a89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png differ
index 6b7edc6..05098a3 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-caption">
-        <path id="caption" d="M6 6h12v3H6z"/>
-        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
-    </g>
+       <path id="caption" d="M6 6h12v3H6z"/>
+       <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
 </svg>
index fe3eb18..1ae5594 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png differ
index a67ed20..c5c1383 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-column-ltr">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h2v14H5z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M5 5h2v14H5z"/>
 </svg>
index ddaafe9..b2772a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png differ
index dee782e..2f345f1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-column-rtl">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M17 5h2v14h-2z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M17 5h2v14h-2z"/>
 </svg>
index 31a2306..fe81484 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png differ
index ad9d86d..27062ec 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-row-after">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 17h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 17h14v2H5z"/>
 </svg>
index 2477475..7023004 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png differ
index e9dfe04..6c5ead4 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-row-before">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 5h14v2H5z"/>
 </svg>
index e6b2da3..1b5279b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png differ
index 3ffb9e5..2aa4f62 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-merge-cells">
-        <g id="merge-cell-left">
-            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
-            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
-        </g>
-        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
-    </g>
+       <g id="merge-cell-left">
+               <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+               <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+       </g>
+       <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
 </svg>
index f4008f6..3858c8c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table.png differ
index b5733fb..574550f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert">
-        <path id="table" d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
-    </g>
+       <path d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
 </svg>
index 82461ef..08bd09a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/tag.png and b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png differ
index 7a211a3..34838e2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </svg>
index f3ce49e..7039ac4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png differ
index 8cd95e0..8f80590 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="template-add">
-        <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
-        <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
-    </g>
+       <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
+       <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
 </svg>
index 448caf4..a03461a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png differ
index 62b30f5..747c246 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="template-add">
-        <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
-        <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
-    </g>
+       <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
+       <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
 </svg>
index fede39a..2cffb3e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png differ
index 83dd769..5a00b85 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z" id="text-dir-ltr"/>
+       <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
 </svg>
index 9f60ed5..48ebdb2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png differ
index 78cb85b..959b20c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z" id="text-dir-rtl"/>
+       <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
 </svg>
index 65ab476..56a9b4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png differ
index 466672e..1785791 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
-        <path id="underline" d="M6 19h12v1H6v-1z"/>
-    </g>
+       <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+       <path id="underline" d="M6 19h12v1H6v-1z"/>
 </svg>
index 7f14fca..63ed7e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/trash.png and b/resources/lib/oojs-ui/themes/apex/images/icons/trash.png differ
index ef7032d..93feb17 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z" id="trash-can"/>
+       <path d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z"/>
 </svg>
index e5c5e8f..8004cfc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/tray.png and b/resources/lib/oojs-ui/themes/apex/images/icons/tray.png differ
index d7ab69b..a2cd42f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z" id="tray"/>
+       <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z"/>
 </svg>
index 640bb2a..fd1685e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unBlock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unBlock-ltr.png differ
index 160219c..aba6f89 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
+       <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
 </svg>
index 2475b06..132fb2d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unBlock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unBlock-rtl.png differ
index 90fe46a..c117f2b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
+       <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
 </svg>
index 37916ef..4d5c919 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unClip.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unClip.png differ
index 68459db..71bd498 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index 780cb87..652e1ca 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unFlag-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unFlag-ltr.png differ
index 4bbd61c..bdd1316 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M19.9 19.6l-16-16-1.1 1.1L6 7.9V20h1v-7c.6-.6 2-.8 3.4-.7l8.4 8.4 1.1-1.1zM17 14V7c-.7.7-2.7.9-4 .5V6c-1.2-1.3-3.9-1.3-5.4-.5l8.9 9c.3-.2.4-.3.5-.5z"/>
 </svg>
\ No newline at end of file
index fa3696a..f87db56 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unFlag-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unFlag-rtl.png differ
index 5d94425..ae09747 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M3.5 19.6l16-16 1.1 1.1-3.2 3.2V20h-1v-7c-.6-.6-2-.8-3.4-.7l-8.4 8.4-1.1-1.1zM6.3 14V7c.7.7 2.7.9 4 .5V6c1.2-1.3 3.9-1.3 5.4-.5l-8.9 9c-.3-.2-.4-.3-.5-.5z"/>
 </svg>
\ No newline at end of file
index 82919e7..67707ec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png differ
index cc386c0..d0a5f28 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 6a4 4 0 0 0-4 4v1h2v-1a2 2 0 0 1 4 0v1H9v7h10v-7h-7v-1a4 4 0 0 0-4-4z" id="unLock"/>
+       <path d="M8 6a4 4 0 0 0-4 4v1h2v-1a2 2 0 0 1 4 0v1H9v7h10v-7h-7v-1a4 4 0 0 0-4-4z"/>
 </svg>
index 94d1593..251ac3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png differ
index b223490..270b803 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 6a4 4 0 0 1 4 4v1h-2v-1a2 2 0 0 0-4 0v1h1v7H4v-7h7v-1a4 4 0 0 1 4-4z" id="unLock"/>
+       <path d="M15 6a4 4 0 0 1 4 4v1h-2v-1a2 2 0 0 0-4 0v1h1v7H4v-7h7v-1a4 4 0 0 1 4-4z"/>
 </svg>
index 2329af3..ea241d4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unStar.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unStar.png differ
index 724d190..e17271e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+       <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </svg>
index 87590fa..1ab03c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unTrash-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unTrash-ltr.png differ
index 9a625b8..7fa2f18 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4.5 3.5l-1 1L6 7v2h1v7.97L8 18h6.97l.03-.03 1-.97 2.5 2.5 1-1L16 15l-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1zM9 5v1l1 1h6v1h-5l1 1h3v3l1 1V9h1V6h-3V5zM8 9l1 1v6h1v-5l1 1v4h1v-3l1 1v2h1v-1l1 1v1H8zm5 1l1 1v-1z" id="trash-can-undo"/>
+       <path d="M4.5 3.5l-1 1L6 7v2h1v7.97L8 18h6.97l.03-.03 1-.97 2.5 2.5 1-1L16 15l-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1zM9 5v1l1 1h6v1h-5l1 1h3v3l1 1V9h1V6h-3V5zM8 9l1 1v6h1v-5l1 1v4h1v-3l1 1v2h1v-1l1 1v1H8zm5 1l1 1v-1z"/>
 </svg>
index dd35023..40fef0f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unTrash-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unTrash-rtl.png differ
index 17ca8dc..4a59fc0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.5 3.5l1 1L17 7v2h-1v7.97L15 18H8.03L8 17.97 7 17l-2.5 2.5-1-1L7 15l1-1 1-1 1-1 1-1 1-1 1-1 1-1 1-1 1-1zM14 5v1l-1 1H7v1h5l-1 1H8v3l-1 1V9H6V6h3V5zm1 4l-1 1v6h-1v-5l-1 1v4h-1v-3l-1 1v2H9v-1l-1 1v1h7zm-5 1l-1 1v-1z" id="trash-can-undo"/>
+       <path d="M18.5 3.5l1 1L17 7v2h-1v7.97L15 18H8.03L8 17.97 7 17l-2.5 2.5-1-1L7 15l1-1 1-1 1-1 1-1 1-1 1-1 1-1 1-1 1-1zM14 5v1l-1 1H7v1h5l-1 1H8v3l-1 1V9H6V6h3V5zm1 4l-1 1v6h-1v-5l-1 1v4h-1v-3l-1 1v2H9v-1l-1 1v1h7zm-5 1l-1 1v-1z"/>
 </svg>
index 78a3c3f..7eca0cd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png differ
index 1ddae10..281c831 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </svg>
index 0dbeb80..9b524ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png differ
index ff47e2c..8f7ebe5 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </svg>
index f1aca31..fb62375 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png differ
index 9f0efc5..670eb50 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 8l8 10H4z"/>
+       <path d="M12 8l8 10H4z"/>
 </svg>
index 08e31e9..8a7f001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png differ
index dc4676f..6f840a7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </svg>
index ccabf98..5dab3ed 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png differ
index ed3fe77..69e0306 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </svg>
index 8190095..dcdc8e1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/userAvatar.png and b/resources/lib/oojs-ui/themes/apex/images/icons/userAvatar.png differ
index ce714e6..5f42f73 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
+       <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
 </svg>
index 13fe420..dbb0952 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png and b/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png differ
index d96a2e3..8585cda 100644 (file)
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewCompact">
-        <circle cx="6" cy="6" r="2"/>
-        <circle cx="12" cy="6" r="2"/>
-        <circle cx="18" cy="6" r="2"/>
-        <circle cx="6" cy="12" r="2"/>
-        <circle cx="12" cy="12" r="2"/>
-        <circle cx="18" cy="12" r="2"/>
-        <circle cx="6" cy="18" r="2"/>
-        <circle cx="12" cy="18" r="2"/>
-        <circle cx="18" cy="18" r="2"/>
-    </g>
+       <circle cx="6" cy="6" r="2"/>
+       <circle cx="12" cy="6" r="2"/>
+       <circle cx="18" cy="6" r="2"/>
+       <circle cx="6" cy="12" r="2"/>
+       <circle cx="12" cy="12" r="2"/>
+       <circle cx="18" cy="12" r="2"/>
+       <circle cx="6" cy="18" r="2"/>
+       <circle cx="12" cy="18" r="2"/>
+       <circle cx="18" cy="18" r="2"/>
 </svg>
index 4341f0e..b2ee157 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png differ
index 1a5092a..57cf146 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewDetails">
-        <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-        <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-    </g>
+       <circle cx="5.5" cy="8.5" r="2.5"/>
+       <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+       <circle cx="5.5" cy="16.5" r="2.5"/>
+       <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
 </svg>
index 338294c..127fdbd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png differ
index f43b05f..5bf874d 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewDetails">
-        <circle cx="18.5" cy="8.5" r="2.5"/>
-        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-        <circle cx="18.5" cy="16.5" r="2.5"/>
-        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-    </g>
+       <circle cx="18.5" cy="8.5" r="2.5"/>
+       <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+       <circle cx="18.5" cy="16.5" r="2.5"/>
+       <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
 </svg>
index e18ee17..f89332f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator-invert.png differ
index 10edb0f..5e7a8fb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+       <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
 </g></svg>
index afa5652..0ef34c1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator.png and b/resources/lib/oojs-ui/themes/apex/images/icons/visionSimulator.png differ
index ae6ba27..4c15f0a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+       <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
 </svg>
index 53e7011..3730642 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png differ
index b13df22..8a19e74 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+       <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
 </svg>
index 8fc4df5..51ec770 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png differ
index a4ec49a..2512851 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
+       <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
 </svg>
index 40309aa..9071e79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png and b/resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png differ
index 4512cf5..62621d0 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="wikiText">
-        <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
-        <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
-    </g>
+               <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
+               <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
+               <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
+               <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
 </svg>
index bae13d7..f7549ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/window.png and b/resources/lib/oojs-ui/themes/apex/images/icons/window.png differ
index 093c822..850e042 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="window">
-        <path id="title" d="M7 10h10v1H7z"/>
-        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
-    </g>
+       <path id="title" d="M7 10h10v1H7z"/>
+       <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
 </svg>
index 9d25a24..b97acd6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png differ
index f94346a..2a4e23d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z" id="alert"/>
+       <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z"/>
 </svg>
index f6ff705..eeadc36 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png differ
index 5ce25ba..8b2a8a9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="down">
-        <path id="arrow" d="M2 3l3.5 6L9 3z"/>
-    </g>
+       <path d="M2 3l3.5 6L9 3z"/>
 </svg>
index 3c94da3..c34ca9f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png differ
index e0f13e6..31bcbaa 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="ltr">
-        <path id="arrow" d="M3 9V2l6 3.5z"/>
-    </g>
+       <path d="M3 9V2l6 3.5z"/>
 </svg>
index 6b1422f..0c78a05 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png differ
index c88c364..30a08ee 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="rtl">
-        <path id="arrow" d="M3 5.5L9 9V2z"/>
-    </g>
+       <path d="M3 5.5L9 9V2z"/>
 </svg>
index 5b2081c..2b639ae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png differ
index 7a250f5..f32924c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="up">
-        <path id="arrow" d="M5.5 2L2 8h7z"/>
-    </g>
+       <path d="M5.5 2L2 8h7z"/>
 </svg>
index a858a03..cbabec7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png differ
index 3c010c1..9cb1bd2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="clear">
-        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
-    </g>
+       <path d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
 </svg>
index aca9239..ca27da6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/required.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png differ
index 94b0066..c508804 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z" id="required"/>
+       <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
 </svg>
index 123fbfa..981bce8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png differ
index 80c72bb..9b0241f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
-    </g>
+       <path d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
 </svg>
index db74061..91759ac 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png differ
index 4b3cff4..62a067d 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="search">
-        <path id="magnifying-glass" d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
-    </g>
+       <path d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
 </svg>
index dbf69b9..3a7b71c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png and b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png differ
index cadec2a..14762de 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
-    <g id="transparency">
-        <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
-        <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
-    </g>
+       <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
+       <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
 </svg>
index fd2f35e..0d45a51 100644 (file)
                        "rtl": "images/icons/bellOn-rtl.svg"
                } },
                "comment": { "file": "images/icons/comment.svg" },
-               "eye": {
-                       "file": "images/icons/eye.svg",
-                       "deprecated": "Moved since v0.23.0 to the 'accessibility' pack."
-               },
-               "eyeClosed": {
-                       "file": "images/icons/eyeClosed.svg",
-                       "deprecated": "Moved since v0.23.0 to the 'accessibility' pack."
-               },
                "message": { "file": {
                        "ltr": "images/icons/message-ltr.svg",
                        "rtl": "images/icons/message-rtl.svg"
                } },
                "notice": { "file": "images/icons/notice.svg" },
-               "signature": { "file": {
-                       "ltr": "images/icons/signature-ltr.svg",
-                       "rtl": "images/icons/signature-rtl.svg"
-               },
-                       "deprecated": "Moved since v0.23.0 to the 'editing-advanced' pack." },
                "speechBubble": { "file": {
                        "ltr": "images/icons/speechBubble-ltr.svg",
                        "rtl": "images/icons/speechBubble-rtl.svg"
index 36301fc..7952c60 100644 (file)
                }
        },
        "images": {
-               "alignCentre": { "file": "images/icons/align-center.svg" },
+               "alignCenter": { "file": "images/icons/align-center.svg" },
+               "alignCentre": {
+                       "file": "images/icons/align-center.svg",
+                       "deprecated": "Replaced since v0.24.2, use 'alignCenter' instead."
+               },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
                "attachment": { "file": {
index 1fb333a..243637e 100644 (file)
                        "ltr": "images/icons/printer-ltr.svg",
                        "rtl": "images/icons/printer-rtl.svg"
                } },
+               "reload": { "file": {
+                       "ltr": "images/icons/reload-ltr.svg",
+                       "rtl": "images/icons/reload-rtl.svg"
+               } },
                "search": { "file": {
                        "ltr": "images/icons/search-ltr.svg",
                        "rtl": "images/icons/search-rtl.svg"
                },
                "settings": { "file": "images/icons/settings.svg" },
                "subtract": { "file": "images/icons/subtract.svg" },
-               "sun": { "file": {
-                       "ltr": "images/icons/sun-ltr.svg",
-                       "rtl": "images/icons/sun-rtl.svg"
-                       },
-                       "deprecated": "This will be removed in v0.24.0."
-               },
                "watchlist": { "file": {
                        "ltr": "images/icons/watchlist-ltr.svg",
                        "rtl": "images/icons/watchlist-rtl.svg"
index 21b57cc..bf5ec8a 100644 (file)
                        "ltr": "images/icons/stripeFlow-ltr.svg",
                        "rtl": "images/icons/stripeFlow-rtl.svg"
                } },
-               "stripeSideMenu": {
-                       "file": "images/icons/draggable.svg",
-                       "deprecated": "Replaced since v0.22.2, use 'draggable' from the 'movement' pack instead."
-               },
                "stripeSummary": { "file": {
                        "ltr": "images/icons/stripeSummary-ltr.svg",
                        "rtl": "images/icons/stripeSummary-rtl.svg"
index 42209e7..ddbf3fa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-constructive.png differ
index 60c74f5..08eef70 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
+       <path d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
 </g></svg>
index 8deeddf..be0af69 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-invert.png differ
index dfbbc82..bf291ce 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
+       <path d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
 </g></svg>
index 42209e7..ddbf3fa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add-progressive.png differ
index 60c74f5..08eef70 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
+       <path d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
 </g></svg>
index 4c70ee4..2e24951 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/add.png differ
index 62e5496..f986687 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
+       <path d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
 </svg>
index 67fec17..6d98d7b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-invert.png differ
index feb4dd4..2daec41 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+       <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </g></svg>
index e64bd2a..f0ae9b4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced-progressive.png differ
index 6bb1b10..7e1cc24 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+       <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </g></svg>
index 32892a5..2fb4e75 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/advanced.png differ
index 95d72f9..b5ed2ad 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+       <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-1c.4.2.9.395 1.4.594l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.092 2.1-2.08-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </svg>
index 2a66b03..3e768a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-invert.png differ
index 0f64141..99fa15e 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="alert">
-        <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
-    </g>
+       <path id="point" d="M11 16h2v2h-2z"/>
+       <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
+       <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
 </g></svg>
index 66973b8..6bf6a64 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-progressive.png differ
index 78c22cd..d85e258 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="alert">
-        <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
-    </g>
+       <path id="point" d="M11 16h2v2h-2z"/>
+       <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
+       <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
 </g></svg>
index 6276502..5df712b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-warning.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert-warning.png differ
index 6e96e13..20b2a0f 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ff5d00">
-    <g id="alert">
-        <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
-    </g>
+       <path id="point" d="M11 16h2v2h-2z"/>
+       <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
+       <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
 </g></svg>
index 7355084..9d3e496 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/alert.png differ
index 8b601d5..936927a 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="alert">
-        <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
-    </g>
+       <path id="point" d="M11 16h2v2h-2z"/>
+       <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
+       <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
 </svg>
index a3495eb..6975d23 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-invert.png differ
index b6db392..7435930 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-center"/>
+       <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </g></svg>
index 9032e12..bc55f38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center-progressive.png differ
index e69f542..65db09d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-center"/>
+       <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </g></svg>
index a912b03..12587a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-center.png differ
index 6f47977..1246577 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-center"/>
+       <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0-12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </svg>
index e274be4..32c3a79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-invert.png differ
index 5232a48..7f594b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-float-left"/>
+       <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </g></svg>
index d37112a..a8fad7b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left-progressive.png differ
index 7e03b95..596579b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-float-left"/>
+       <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </g></svg>
index e395036..e795d95 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-left.png differ
index a577600..010891e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z" id="align-float-left"/>
+       <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm0 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1zm-10-9h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1zm0 12h17a.5.5 0 0 1 0 1h-17a.5.5 0 0 1 0-1z"/>
 </svg>
index c6659fb..22eec0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-invert.png differ
index 3395516..886b88a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z" id="align-float-right"/>
+       <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z"/>
 </g></svg>
index 8d3f480..f89285a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right-progressive.png differ
index f7f45e2..f292a03 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z" id="align-float-right"/>
+       <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z"/>
 </g></svg>
index c72a956..8f234af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/align-float-right.png differ
index 0f46bc1..05db4c6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z" id="align-float-right"/>
+       <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm0 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm10-9h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1zm0 12h-17a.5.5 0 0 0 0 1h17a.5.5 0 0 0 0-1z"/>
 </svg>
index d8d64f1..d40c1d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-invert.png differ
index 7a6c6a4..946ae70 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
+       <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
 </g></svg>
index 28f8835..ce9dfbb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr-progressive.png differ
index c17ebc7..a658206 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
+       <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
 </g></svg>
index c2fae72..fbb65a8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-ltr.png differ
index c229120..afd0de2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
+       <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z"/>
 </svg>
index 21fa9ab..5096eda 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-invert.png differ
index b05aec3..f7101fa 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
+       <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
 </g></svg>
index 11f0c84..5387cdc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl-progressive.png differ
index cc7b2aa..e2062b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
+       <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
 </g></svg>
index df22b7d..513c319 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arched-arrow-rtl.png differ
index 9f4bd13..b50d91e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
+       <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z"/>
 </svg>
index 6299e86..308871f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-invert.png differ
index cfde7f5..8ee2ab8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
+       <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
 </g></svg>
index 119a8be..951bc0e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr-progressive.png differ
index 020e740..c3fbd7c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
+       <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
 </g></svg>
index 24905bc..b21c349 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-ltr.png differ
index b4c0e0d..0a89179 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
+       <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z"/>
 </svg>
index fb375e4..4394048 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-invert.png differ
index b701b61..03eb630 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
+       <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
 </g></svg>
index 3192d35..2acc40c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl-progressive.png differ
index 476c443..5793b37 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
+       <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
 </g></svg>
index 1cd81cb..84cda80 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/arrow-rtl.png differ
index 1087ff9..25366af 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
+       <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
 </svg>
index 231cb1b..d9a8287 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-invert.png differ
index 3285cc7..4ca898e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
+       <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
 </g></svg>
index db45541..0b02293 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr-progressive.png differ
index 61dda31..6d5d9a4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
+       <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
 </g></svg>
index cf7de13..61ac65a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-ltr.png differ
index 862bc2b..fdfabce 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
+       <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
 </svg>
index 7b83a3a..1c972ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-invert.png differ
index b92172a..bbff521 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
+       <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
 </g></svg>
index aba3c0b..f7c89a3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl-progressive.png differ
index d0e6a7a..9c6b5d4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
+       <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
 </g></svg>
index d0b0e70..db74d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/article-rtl.png differ
index 3b16dcb..9b0b4e1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
+       <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z"/>
 </svg>
index 5eed717..b2f9c69 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-invert.png differ
index 9557c56..a5d148c 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
-    <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
+       <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+       <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
 </g></svg>
index 688ec05..fb68da6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr-progressive.png differ
index 5802afd..5c1c53f 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
-    <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
+       <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+       <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
 </g></svg>
index 5b169e2..3a83a98 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-ltr.png differ
index 396e6a1..eb244ac 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
-    <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
+       <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+       <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
 </svg>
index cc9c9de..810587a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-invert.png differ
index fba5a32..1f74596 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
-    <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
+       <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
+       <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
 </g></svg>
index b271ac5..d00f8dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl-progressive.png differ
index 0215593..b948a45 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
-    <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
+       <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
+       <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
 </g></svg>
index 9f22672..3f6a08d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleCheck-rtl.png differ
index 604143b..646ed94 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
-    <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
+       <path d="M5 11l6 7 4-4 1 1-5 5-7-8z"/>
+       <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z"/>
 </svg>
index 76cc11f..27ec78d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-invert.png differ
index f68467f..d1e43f7 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="article-redirect">
-        <path id="arrow" d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
-        <path id="page" d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
-    </g>
+       <path d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+       <path d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
 </g></svg>
index 7b22a84..3aed788 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr-progressive.png differ
index 28e7a46..c70ea43 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="article-redirect">
-        <path id="arrow" d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
-        <path id="page" d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
-    </g>
+       <path d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+       <path d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
 </g></svg>
index 3dbe20e..133a372 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-ltr.png differ
index 028c64c..2a14d98 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="article-redirect">
-        <path id="arrow" d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
-        <path id="page" d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
-    </g>
+       <path d="M18.1 14.2L23 18l-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+       <path d="M5 3v13c0 1.7 1.3 3 3 3h3.375c-.157-.205-.3-.43-.438-.656-.42-.688-.77-1.483-.843-2.344H7v-1h3.125l.125-1H7v-1h3.375l.03-.188.283.188H16v1h-3.906l.22.156c.523.375 1.065.64 1.592.844H16v.406c.208-.013.418-.07.625-.094.068-1.294.125-3.874.125-3.874l1.25.968V3H5zm2 2h4v1H7V5zm5 0h4v5h-4V5zM7 7h4v1H7V7zm0 2h4v1H7V9zm0 2h9v1H7v-1z"/>
 </svg>
index b31e0f9..d9f8375 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-invert.png differ
index d70b35f..5124cee 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="article-redirect">
-        <path id="arrow" d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
-        <path id="page" d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
-    </g>
+       <path d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
+       <path d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
 </g></svg>
index 464c344..26a14ba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl-progressive.png differ
index d49b9bd..addaa5e 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="article-redirect">
-        <path id="arrow" d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
-        <path id="page" d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
-    </g>
+       <path d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
+       <path d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
 </g></svg>
index 60beb6e..f678b51 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleRedirect-rtl.png differ
index 316d36c..181d1a1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="article-redirect">
-        <path id="arrow" d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
-        <path id="page" d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
-    </g>
+       <path d="M5.9 14.2L1 18l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3"/>
+       <path d="M19 3v13c0 1.7-1.3 3-3 3h-3.375c.157-.205.3-.43.438-.656.42-.688.77-1.483.843-2.344H17v-1h-3.125l-.125-1H17v-1h-3.375l-.03-.188-.283.188H8v1h3.906l-.22.156a7.097 7.097 0 0 1-1.592.844H8v.406c-.208-.013-.418-.07-.625-.094a178.903 178.903 0 0 1-.125-3.874L6 12.405V3zm-2 2h-4v1h4zm-5 0H8v5h4zm5 2h-4v1h4zm0 2h-4v1h4zm0 2H8v1h9z"/>
 </svg>
index 1bd1587..eed5ccc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-invert.png differ
index c4dbcde..870df7c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
+       <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
 </g></svg>
index d22174e..629bb0f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr-progressive.png differ
index 2d71a62..3c63d80 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
+       <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
 </g></svg>
index 1802dfc..0d0493a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-ltr.png differ
index ac41c2b..75239d4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
+       <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
 </svg>
index a8e8a3a..bcf0cb7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-invert.png differ
index ffd4285..8401cc5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
+       <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
 </g></svg>
index e83f1ee..58d6f73 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl-progressive.png differ
index 48ae222..281afb7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
+       <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
 </g></svg>
index a2611da..baeab10 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articleSearch-rtl.png differ
index ed43acf..a836bf0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
+       <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z"/>
 </svg>
index 3a418f4..c4db206 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-invert.png differ
index 86b004f..3062086 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
-    <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
+       <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
+       <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
 </g></svg>
index af2b7f0..4dcb550 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr-progressive.png differ
index 838655b..0e6092a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
-    <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
+       <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
+       <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
 </g></svg>
index bd048c4..18988f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-ltr.png differ
index c194497..17697a0 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
-    <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
+       <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
+       <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
 </svg>
index fe548a1..ef95940 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-invert.png differ
index e2793b5..11a2a97 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
-    <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
+       <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
+       <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
 </g></svg>
index 839f135..496a448 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl-progressive.png differ
index bf3d169..30413ad 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
-    <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
+       <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
+       <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
 </g></svg>
index 3ebb113..5a49b44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/articles-rtl.png differ
index 40a9348..2d94edf 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
-    <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
+       <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
+       <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
 </svg>
index aa1b38e..166d317 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-invert.png differ
index 2ced027..5ec0322 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-293 385 24 24"><g fill="#fff">
-    <path d="M-274.3 390.9c-1.6-1.6-4.3-1.5-5.8.1l.2.2c.5.5 1.3.7 2.1.4.8-.3 1.7-.1 2.4.6 1 .9.9 2.4 0 3.4l-7.1 7.1c-.9 1-2.4.9-3.4 0s-.9-2.4 0-3.4l4.4-4.4c.3-.3.9-.5 1.3-.1s.2 1-.1 1.3l-3.4 3.4c-.6.6-.6 1.7.1 2.3l4.3-4.3c.8-.8 1.1-1.8.9-2.7-.2-.9-.9-1.6-1.7-1.9-.9-.2-1.9 0-2.6.7l-4.4 4.4c-1.6 1.6-1.6 4.3.1 5.8 1.5 1.6 4.3 1.5 5.8-.1l7-7c.8-.8 1.2-1.9 1.2-3s-.5-2.1-1.3-2.8c-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-1.5-1.6.8.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M18.34 5.55a4.1 4.1 0 0 0-5.8.1l.2.2a2 2 0 0 0 2.1.4 2.23 2.23 0 0 1 2.4.6 2.38 2.38 0 0 1 0 3.4l-7.1 7.1A2.4 2.4 0 1 1 6.74 14l4.4-4.4a.93.93 0 0 1 1.3-.1.93.93 0 0 1-.1 1.3l-3.4 3.4a1.6 1.6 0 0 0 .1 2.3l4.3-4.3a2.93 2.93 0 0 0 .9-2.7 2.72 2.72 0 0 0-1.7-1.9 2.8 2.8 0 0 0-2.6.7l-4.4 4.4a4 4 0 0 0 .1 5.8 4.11 4.11 0 0 0 5.8-.1l7-7a4.23 4.23 0 0 0 1.2-3 3.72 3.72 0 0 0-1.3-2.8c-.7-.7.8.7 0 0s.8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0C16.84 3.95 19.14 6.25 18.34 5.55z"/>
 </g></svg>
index 9723ae9..52cfe5d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr-progressive.png differ
index 0f02b30..ed85640 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-293 385 24 24"><g fill="#36c">
-    <path d="M-274.3 390.9c-1.6-1.6-4.3-1.5-5.8.1l.2.2c.5.5 1.3.7 2.1.4.8-.3 1.7-.1 2.4.6 1 .9.9 2.4 0 3.4l-7.1 7.1c-.9 1-2.4.9-3.4 0s-.9-2.4 0-3.4l4.4-4.4c.3-.3.9-.5 1.3-.1s.2 1-.1 1.3l-3.4 3.4c-.6.6-.6 1.7.1 2.3l4.3-4.3c.8-.8 1.1-1.8.9-2.7-.2-.9-.9-1.6-1.7-1.9-.9-.2-1.9 0-2.6.7l-4.4 4.4c-1.6 1.6-1.6 4.3.1 5.8 1.5 1.6 4.3 1.5 5.8-.1l7-7c.8-.8 1.2-1.9 1.2-3s-.5-2.1-1.3-2.8c-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-1.5-1.6.8.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M18.34 5.55a4.1 4.1 0 0 0-5.8.1l.2.2a2 2 0 0 0 2.1.4 2.23 2.23 0 0 1 2.4.6 2.38 2.38 0 0 1 0 3.4l-7.1 7.1A2.4 2.4 0 1 1 6.74 14l4.4-4.4a.93.93 0 0 1 1.3-.1.93.93 0 0 1-.1 1.3l-3.4 3.4a1.6 1.6 0 0 0 .1 2.3l4.3-4.3a2.93 2.93 0 0 0 .9-2.7 2.72 2.72 0 0 0-1.7-1.9 2.8 2.8 0 0 0-2.6.7l-4.4 4.4a4 4 0 0 0 .1 5.8 4.11 4.11 0 0 0 5.8-.1l7-7a4.23 4.23 0 0 0 1.2-3 3.72 3.72 0 0 0-1.3-2.8c-.7-.7.8.7 0 0s.8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0C16.84 3.95 19.14 6.25 18.34 5.55z"/>
 </g></svg>
index 92dfaf2..8592046 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-ltr.png differ
index 74a4d64..8cad782 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-293 385 24 24">
-    <path d="M-274.3 390.9c-1.6-1.6-4.3-1.5-5.8.1l.2.2c.5.5 1.3.7 2.1.4.8-.3 1.7-.1 2.4.6 1 .9.9 2.4 0 3.4l-7.1 7.1c-.9 1-2.4.9-3.4 0s-.9-2.4 0-3.4l4.4-4.4c.3-.3.9-.5 1.3-.1s.2 1-.1 1.3l-3.4 3.4c-.6.6-.6 1.7.1 2.3l4.3-4.3c.8-.8 1.1-1.8.9-2.7-.2-.9-.9-1.6-1.7-1.9-.9-.2-1.9 0-2.6.7l-4.4 4.4c-1.6 1.6-1.6 4.3.1 5.8 1.5 1.6 4.3 1.5 5.8-.1l7-7c.8-.8 1.2-1.9 1.2-3s-.5-2.1-1.3-2.8c-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-.7-.7.8.7 0 0-1.5-1.6.8.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M18.34 5.55a4.1 4.1 0 0 0-5.8.1l.2.2a2 2 0 0 0 2.1.4 2.23 2.23 0 0 1 2.4.6 2.38 2.38 0 0 1 0 3.4l-7.1 7.1A2.4 2.4 0 1 1 6.74 14l4.4-4.4a.93.93 0 0 1 1.3-.1.93.93 0 0 1-.1 1.3l-3.4 3.4a1.6 1.6 0 0 0 .1 2.3l4.3-4.3a2.93 2.93 0 0 0 .9-2.7 2.72 2.72 0 0 0-1.7-1.9 2.8 2.8 0 0 0-2.6.7l-4.4 4.4a4 4 0 0 0 .1 5.8 4.11 4.11 0 0 0 5.8-.1l7-7a4.23 4.23 0 0 0 1.2-3 3.72 3.72 0 0 0-1.3-2.8c-.7-.7.8.7 0 0s.8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0 .8.7 0 0C16.84 3.95 19.14 6.25 18.34 5.55z"/>
 </svg>
index bba8db5..4d5badf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-invert.png differ
index faa925c..0aa1506 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-119 70 24 24"><g fill="#fff">
-    <path d="M-113.3 75.6c-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7-1.3 1.7-1.3 2.8 0 1.1.4 2.2 1.2 3l7 7c1.5 1.6 4.3 1.7 5.8.1 1.7-1.5 1.7-4.2.1-5.8l-4.4-4.4c-.7-.7-1.7-.9-2.6-.7-.8.3-1.5 1-1.7 1.9-.2.9.1 1.9.9 2.7l4.3 4.3c.7-.6.7-1.7.1-2.3l-3.4-3.4c-.3-.3-.5-.9-.1-1.3s1-.2 1.3.1l4.4 4.4c.9 1 1 2.5 0 3.4s-2.5 1-3.4 0l-7.1-7.1c-.9-1-1-2.5 0-3.4.7-.7 1.6-.9 2.4-.6.8.3 1.6.1 2.1-.4l.2-.2c-1.5-1.6-4.2-1.8-5.8-.1-.8.7 1.5-1.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M5.66 5.57c-.8.7.7-.7 0 0s.7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0a3.72 3.72 0 0 0-1.3 2.8 4.23 4.23 0 0 0 1.2 3l7 7a4.11 4.11 0 0 0 5.8.1 4 4 0 0 0 .1-5.8l-4.4-4.4a2.8 2.8 0 0 0-2.6-.7 2.72 2.72 0 0 0-1.7 1.9 2.93 2.93 0 0 0 .9 2.7l4.3 4.3a1.6 1.6 0 0 0 .1-2.3l-3.4-3.4a.93.93 0 0 1-.1-1.3.93.93 0 0 1 1.3.1l4.4 4.4a2.4 2.4 0 1 1-3.4 3.4l-7.1-7.1a2.38 2.38 0 0 1 0-3.4 2.23 2.23 0 0 1 2.4-.6 2 2 0 0 0 2.1-.4l.2-.2a4 4 0 0 0-5.8-.1C4.86 6.27 7.16 3.87 5.66 5.57Z"/>
 </g></svg>
index 8786e5a..c0f8fa3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl-progressive.png differ
index 5e234a0..7fd291e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-119 70 24 24"><g fill="#36c">
-    <path d="M-113.3 75.6c-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7-1.3 1.7-1.3 2.8 0 1.1.4 2.2 1.2 3l7 7c1.5 1.6 4.3 1.7 5.8.1 1.7-1.5 1.7-4.2.1-5.8l-4.4-4.4c-.7-.7-1.7-.9-2.6-.7-.8.3-1.5 1-1.7 1.9-.2.9.1 1.9.9 2.7l4.3 4.3c.7-.6.7-1.7.1-2.3l-3.4-3.4c-.3-.3-.5-.9-.1-1.3s1-.2 1.3.1l4.4 4.4c.9 1 1 2.5 0 3.4s-2.5 1-3.4 0l-7.1-7.1c-.9-1-1-2.5 0-3.4.7-.7 1.6-.9 2.4-.6.8.3 1.6.1 2.1-.4l.2-.2c-1.5-1.6-4.2-1.8-5.8-.1-.8.7 1.5-1.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M5.66 5.57c-.8.7.7-.7 0 0s.7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0a3.72 3.72 0 0 0-1.3 2.8 4.23 4.23 0 0 0 1.2 3l7 7a4.11 4.11 0 0 0 5.8.1 4 4 0 0 0 .1-5.8l-4.4-4.4a2.8 2.8 0 0 0-2.6-.7 2.72 2.72 0 0 0-1.7 1.9 2.93 2.93 0 0 0 .9 2.7l4.3 4.3a1.6 1.6 0 0 0 .1-2.3l-3.4-3.4a.93.93 0 0 1-.1-1.3.93.93 0 0 1 1.3.1l4.4 4.4a2.4 2.4 0 1 1-3.4 3.4l-7.1-7.1a2.38 2.38 0 0 1 0-3.4 2.23 2.23 0 0 1 2.4-.6 2 2 0 0 0 2.1-.4l.2-.2a4 4 0 0 0-5.8-.1C4.86 6.27 7.16 3.87 5.66 5.57Z"/>
 </g></svg>
index f793246..0424eb4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/attachment-rtl.png differ
index f53f5a4..4699008 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-119 70 24 24">
-    <path d="M-113.3 75.6c-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7.7-.7 0 0-.8.7-1.3 1.7-1.3 2.8 0 1.1.4 2.2 1.2 3l7 7c1.5 1.6 4.3 1.7 5.8.1 1.7-1.5 1.7-4.2.1-5.8l-4.4-4.4c-.7-.7-1.7-.9-2.6-.7-.8.3-1.5 1-1.7 1.9-.2.9.1 1.9.9 2.7l4.3 4.3c.7-.6.7-1.7.1-2.3l-3.4-3.4c-.3-.3-.5-.9-.1-1.3s1-.2 1.3.1l4.4 4.4c.9 1 1 2.5 0 3.4s-2.5 1-3.4 0l-7.1-7.1c-.9-1-1-2.5 0-3.4.7-.7 1.6-.9 2.4-.6.8.3 1.6.1 2.1-.4l.2-.2c-1.5-1.6-4.2-1.8-5.8-.1-.8.7 1.5-1.7 0 0z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M5.66 5.57c-.8.7.7-.7 0 0s.7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0 .7-.7 0 0a3.72 3.72 0 0 0-1.3 2.8 4.23 4.23 0 0 0 1.2 3l7 7a4.11 4.11 0 0 0 5.8.1 4 4 0 0 0 .1-5.8l-4.4-4.4a2.8 2.8 0 0 0-2.6-.7 2.72 2.72 0 0 0-1.7 1.9 2.93 2.93 0 0 0 .9 2.7l4.3 4.3a1.6 1.6 0 0 0 .1-2.3l-3.4-3.4a.93.93 0 0 1-.1-1.3.93.93 0 0 1 1.3.1l4.4 4.4a2.4 2.4 0 1 1-3.4 3.4l-7.1-7.1a2.38 2.38 0 0 1 0-3.4 2.23 2.23 0 0 1 2.4-.6 2 2 0 0 0 2.1-.4l.2-.2a4 4 0 0 0-5.8-.1C4.86 6.27 7.16 3.87 5.66 5.57Z"/>
 </svg>
index 05911d3..60f7001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-invert.png differ
index 61caba7..aa0f284 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+       <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
 </g></svg>
index 81294ff..3c7750e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell-progressive.png differ
index 157430b..676bb05 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+       <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
 </g></svg>
index 91e8397..8002765 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bell.png differ
index 09b65f2..2d70300 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+       <path d="M17.5 13V8c0-3-2.3-5-5.5-5S6.5 5 6.5 8v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 19H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
 </svg>
index fb21370..5755acc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-invert.png differ
index 49416aa..4e4754f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+       <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
 </g></svg>
index 91641ac..d5a08d5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr-progressive.png differ
index d064356..dc10765 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+       <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
 </g></svg>
index fb13de1..5889f01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-ltr.png differ
index 855581b..3face05 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+       <path d="M17.8 13.7L19.5 9c1-2.8-.5-5.5-3.5-6.6-3-1.1-5.9 0-6.9 2.8L7.4 9.9c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 18.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
 </svg>
index d0ebae5..3e149ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-invert.png differ
index b854834..f4659f8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
+       <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
 </g></svg>
index eddcf73..18e087e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl-progressive.png differ
index a9cdb3c..f2248af 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
+       <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
 </g></svg>
index b05fd4c..d670287 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bellOn-rtl.png differ
index e1f2961..d2da2ac 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
+       <path d="M6.21 13.7L4.51 9c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z"/>
 </svg>
index ad247d3..f754322 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-invert.png differ
index 60d7fd4..bd3e3fd 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 9H4l2.5-3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 9H4l2.5-3z"/>
 </g></svg>
index af290b9..917e9aa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr-progressive.png differ
index 863fe92..204c050 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 9H4l2.5-3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 9H4l2.5-3z"/>
 </g></svg>
index e8b2911..66fa9d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-ltr.png differ
index fffbcdd..cc70779 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 9H4l2.5-3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 9H4l2.5-3z"/>
 </svg>
index f40c303..d9300ec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-invert.png differ
index b2fbe9e..3466830 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 9h5l-2.5-3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 9h5l-2.5-3z"/>
 </g></svg>
index a5095a1..7e534f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl-progressive.png differ
index 46c5048..ce5bab9 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 9h5l-2.5-3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 9h5l-2.5-3z"/>
 </g></svg>
index 2f5e05d..9a09990 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bigger-rtl.png differ
index 7b903c4..a45847d 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 9h5l-2.5-3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 9h5l-2.5-3z"/>
 </svg>
index 54b9f62..2291c4c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-destructive.png differ
index b703094..d41af6b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
 </g></svg>
index ca81ab7..d761183 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-invert.png differ
index 97f21c3..3900084 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
 </g></svg>
index c82c3eb..f9423ed 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block-progressive.png differ
index e3648cf..0ceb68f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
 </g></svg>
index 7f8eb2a..cec69ba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/block.png differ
index b50bb61..47b323a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z"/>
 </svg>
index 8c11dad..b21cc68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-invert.png differ
index b02b5c7..b1e35cd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z" id="bold-a"/>
+       <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
 </g></svg>
index 36f6920..42c989a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a-progressive.png differ
index 4f051bf..59b7ad7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z" id="bold-a"/>
+       <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
 </g></svg>
index 2907677..ffe2329 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-a.png differ
index ce9f4f8..93bffca 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z" id="bold-a"/>
+       <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
 </svg>
index eac1ac7..8cb3ee1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-invert.png differ
index ab901fb..30c0d63 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
-    </g>
+       <path d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
 </g></svg>
index 0e9c1b0..54a7daf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain-progressive.png differ
index d905f22..95f5d97 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
-    </g>
+       <path d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
 </g></svg>
index 931b6cf..0d8e866 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-ain.png differ
index 452c3d0..ea589c7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
-    </g>
+       <path d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.12-.25.34-.66.65l-.09.06c-1.233.93-2.42 1.394-3.56 1.394-1.14 0-2.043-.33-2.71-.99-.65-.66-.973-1.56-.973-2.7.006-1.353.567-2.572 1.685-3.657v-.044l-.606-.55a.952.952 0 0 1-.222-.63c0-.49.24-1.11.72-1.863.65-1.045 1.302-1.565 1.957-1.56.886.005 1.618.42 2.194 1.246.325.48-.03.55-1.064.22-.843-.33-1.528-.05-2.055.826l.016.074 1.125.866.05.005c1.405-.497 2.42-.74 3.044-.725-.06.116-.14.36-.244.732a27.75 27.75 0 0 1-.304.982l-.125.372-.386.05c-1.743.24-2.992.716-3.745 1.43-.465.463-.7.972-.704 1.524"/>
 </svg>
index 0973b1f..b5e87af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-invert.png differ
index e02613e..e01b8e6 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
-    </g>
+       <path d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
 </g></svg>
index 8158ca1..5f63a3b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad-progressive.png differ
index bbf7a38..b46b2ae 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
-    </g>
+       <path d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
 </g></svg>
index 1121257..38aecd2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-arab-dad.png differ
index b90bb77..eb0be41 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
-    </g>
+       <path d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.478 0-.99.205-1.54.616l-.505.38.006.024c1.085.066 1.935.1 2.55.1h.315c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006M10.38 14.6c-.016-.905-.33-1.87-.937-2.9l1.294-1.73.118.15c.267.337.504.925.713 1.767l.064.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.383.003.85.194 1.394.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.064l-.142.43c-.254.67-.463 1.112-.625 1.323-.724.937-1.785 1.405-3.182 1.405-1.71-.006-2.56-.92-2.56-2.74.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
 </svg>
index 2ae27c2..55d7055 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-invert.png differ
index 1d9ea40..f0d7489 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
-    </g>
+       <path d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
 </g></svg>
index 66b22c5..24166cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to-progressive.png differ
index 4bb91c9..1517aa9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
-    </g>
+       <path d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
 </g></svg>
index 6f6349b..859e77a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-armn-to.png differ
index c35979a..7c67a09 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
-    </g>
+       <path d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.28a1.43 1.43 0 0 0 .273-.517c.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078a.905.905 0 0 0-.383.258c-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.21.18.39.29.53.12.13.25.23.39.29.14.05.276.07.406.07m-2.97-7.84a2.67 2.67 0 0 0-.975.45 2.1 2.1 0 0 0-.672.813c-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04a4.227 4.227 0 0 1 1.234-1.467c.52-.39 1.13-.685 1.83-.883a8.114 8.114 0 0 1 2.225-.297c.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.34.49.73.64 1.17.15.43.226 1.09.226 1.61h1.36v2.04h-1.36v1.6c0 .58-.102 1.09-.31 1.54-.21.44-.49.81-.844 1.11-.35.302-.834.53-1.297.687-.465.15-.954.226-1.47.226-.51 0-.997-.08-1.46-.235a3.46 3.46 0 0 1-1.22-.703 3.452 3.452 0 0 1-.836-1.174c-.203-.472-.304-1.027-.304-1.662s.1-1.18.32-1.64c.21-.46.49-.684.85-.976.35-.297.76-.513 1.22-.648.452-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36a2.26 2.26 0 0 0-.77-.767 3.234 3.234 0 0 0-.986-.427c-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
 </svg>
index e242b55..c41551f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-invert.png differ
index 0a03c2e..d8f12fc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
-    </g>
+       <path d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
 </g></svg>
index 96f917a..9893bc9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b-progressive.png differ
index adf665e..132f6eb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
-    </g>
+       <path d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
 </g></svg>
index 8d09636..6233f85 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-b.png differ
index 1806709..fd9b8e8 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
-    </g>
+       <path d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
 </svg>
index c131903..641c72f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-invert.png differ
index cd67107..5d2316f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
-    </g>
+       <path d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
 </g></svg>
index 4337f73..c557191 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be-progressive.png differ
index 22c3bf5..55d9d14 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
-    </g>
+       <path d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
 </g></svg>
index de9e9d1..3d8f91d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-be.png differ
index 9d84cb0..be7db8b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
-    </g>
+       <path d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.4-.255-1.07-.397-2.02-.397H10v3"/>
 </svg>
index ce6f320..bc3b629 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-invert.png differ
index 42ba193..a5322af 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-cyrl-te">
-        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
-    </g>
+       <path d="M11 18V8H7V6h11v2h-4v10"/>
 </g></svg>
index 5e2073a..0ed7e60 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te-progressive.png differ
index 73a76a3..cad1bda 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-cyrl-te">
-        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
-    </g>
+       <path d="M11 18V8H7V6h11v2h-4v10"/>
 </g></svg>
index 281d718..5e5d5bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-te.png differ
index 63aee3e..90569f2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-te">
-        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
-    </g>
+       <path d="M11 18V8H7V6h11v2h-4v10"/>
 </svg>
index 080e731..8826f97 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-invert.png differ
index 4643345..b3ab16c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
-    </g>
+       <path d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
 </g></svg>
index 86de0d4..93251c1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe-progressive.png differ
index 3b7fee9..e6018b2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
-    </g>
+       <path d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
 </g></svg>
index 9838701..5453e7b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-cyrl-zhe.png differ
index aab3f4c..4a111c2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
-    </g>
+       <path d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.112-.337.3-.452.55-.115.25-.286.76-.512 1.533-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.455.603 1.103.944 1.943L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09A.726.726 0 0 0 13 12.78V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772a6.357 6.357 0 0 1-.392-1.04c-.222-.76-.39-1.26-.505-1.52-.11-.25-.26-.44-.45-.57-.18-.12-.49-.18-.912-.18H6V6l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
 </svg>
index ba2c976..11a2528 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-invert.png differ
index 5cf18ff..9cf5305 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-f">
-        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
-    </g>
+       <path d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
 </g></svg>
index e225017..bbe7c07 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f-progressive.png differ
index cce2c59..f76a2d3 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-f">
-        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
-    </g>
+       <path d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
 </g></svg>
index ad0d89b..9fea772 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-f.png differ
index 89061f1..4aa5673 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-f">
-        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
-    </g>
+       <path d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
 </svg>
index 2f1b7ac..8d7d9ed 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-invert.png differ
index 2741c4f..bc89883 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
-    </g>
+       <path d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
 </g></svg>
index 8f3febe..1c138a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g-progressive.png differ
index 9e85e63..5810b8f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
-    </g>
+       <path d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
 </g></svg>
index 55e766a..31b6804 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-g.png differ
index 3150d95..adf24ec 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
-    </g>
+       <path d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26A7.994 7.994 0 0 1 11.97 18c-1.23 0-2.303-.253-3.217-.76a4.908 4.908 0 0 1-2.062-2.185A7.008 7.008 0 0 1 6 11.96c0-1.208.26-2.282.77-3.222.518-.94 1.27-1.66 2.26-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435a2.433 2.433 0 0 0-.94-1.346c-.454-.34-1.022-.5-1.707-.5-1.038 0-1.864.32-2.48.97-.61.65-.914 1.61-.914 2.89 0 1.375.31 2.41.93 3.1.62.687 1.434 1.03 2.44 1.03.497 0 .995-.095 1.49-.285.505-.196 1.334-.57 1.69-.846v-.868"/>
 </svg>
index ef2da34..4ce770e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-invert.png differ
index c6eea49..1566f22 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-geor-man">
-        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
-    </g>
+       <path d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
 </g></svg>
index ad5c93f..cb559e1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man-progressive.png differ
index bca4a1a..95cd81b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-geor-man">
-        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
-    </g>
+       <path d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
 </g></svg>
index c050074..5aca1db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-geor-man.png differ
index deb95b7..f1aecfc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-geor-man">
-        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
-    </g>
+       <path d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
 </svg>
index 0736aab..ca4c4bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-invert.png differ
index a5516ed..2afa90a 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-l">
-        <path id="l" d="M8 18V6h3v10h5v2"/>
-    </g>
+       <path d="M8 18V6h3v10h5v2"/>
 </g></svg>
index 7a1c401..4e57d8a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l-progressive.png differ
index 44178b7..d64f4b0 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-l">
-        <path id="l" d="M8 18V6h3v10h5v2"/>
-    </g>
+       <path d="M8 18V6h3v10h5v2"/>
 </g></svg>
index 11b67a1..aa23d2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-l.png differ
index 7695623..dc594b7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-l">
-        <path id="l" d="M8 18V6h3v10h5v2"/>
-    </g>
+       <path d="M8 18V6h3v10h5v2"/>
 </svg>
index d57d0a5..66f63ce 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-invert.png differ
index 528efe8..30a4848 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-n">
-        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
-    </g>
+       <path d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
 </g></svg>
index bb0299c..0df6ff9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n-progressive.png differ
index d686921..10687d5 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-n">
-        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
-    </g>
+       <path d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
 </g></svg>
index 708d421..27aa1a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-n.png differ
index 62f66a2..cfd9d94 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-n">
-        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
-    </g>
+       <path d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
 </svg>
index ad990be..caea1bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-invert.png differ
index c1549dc..5fbc720 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="bold-v">
-        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
-    </g>
+       <path d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
 </g></svg>
index d7c5eb0..89bb20b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v-progressive.png differ
index a94a50c..2d2cb9a 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="bold-v">
-        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
-    </g>
+       <path d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
 </g></svg>
index a60786c..d6659a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bold-v.png differ
index 027db27..457b086 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="bold-v">
-        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
-    </g>
+       <path d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
 </svg>
index a32272e..b8587e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-invert.png differ
index 83265e4..fd0f2b9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
+       <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
 </g></svg>
index 9a63c72..328de41 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr-progressive.png differ
index 89fff50..3a6355b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
+       <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
 </g></svg>
index 49ac06a..2bf1e77 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-ltr.png differ
index 6a9a748..6e753e8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
+       <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
 </svg>
index 7258970..4190e3e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-invert.png differ
index 256ee41..8c40659 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
+       <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
 </g></svg>
index 6ff5355..c28c2e7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl-progressive.png differ
index 150fd95..abcefd1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
+       <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
 </g></svg>
index e0edc34..69cb4e8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/book-rtl.png differ
index 3797328..7ae5ceb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
+       <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z"/>
 </svg>
index 6194ed4..606f236 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright-invert.png differ
index 8f41c1a..2fdb653 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
-    <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
 </g></svg>
index 788fc94..02f4e91 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/bright.png differ
index 5a399fe..fbb9e97 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
-    <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+       <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
 </svg>
index 027df2d..c1a0ede 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-invert.png differ
index 3ee311a..7c0eeb2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
+       <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
 </g></svg>
index 4ab9a1b..2bad7f4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr-progressive.png differ
index d3dd3fe..005ca50 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
+       <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
 </g></svg>
index ae059ad..f29fc4b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-ltr.png differ
index e7be7e5..3d75c4e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
+       <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
 </svg>
index 51937b7..6513b0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-invert.png differ
index 98238cf..e1f0d35 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
+       <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
 </g></svg>
index 1f33d14..be3b4ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl-progressive.png differ
index e2ad0ab..64cde20 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
+       <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
 </g></svg>
index 939a858..924ae3a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/browser-rtl.png differ
index 38807b5..5a9f39a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
+       <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
 </svg>
index 1463874..c307fd4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-invert.png differ
index f933a1e..bd10412 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+       <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
 </g></svg>
index 5f6143b..182261b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr-progressive.png differ
index 97d6a58..621ffa7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+       <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
 </g></svg>
index 0ab46dd..168bd20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-ltr.png differ
index b0bc0e5..25dd005 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+       <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
 </svg>
index 806c55d..9ec3509 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-invert.png differ
index dccd818..1b1e1db 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+       <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
 </g></svg>
index 1864f52..067621c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl-progressive.png differ
index 3757322..6a8a32f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+       <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
 </g></svg>
index 0236393..5d37b77 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/calendar-rtl.png differ
index d8ff5a9..1831c62 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+       <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-4 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM7 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
 </svg>
index f574a39..89493f5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-destructive.png differ
index c0f8dc0..8aeb00c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
-    </g>
+       <path d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
 </g></svg>
index b7529a2..13db575 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-invert.png differ
index 893486d..eb83783 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
-    </g>
+       <path d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
 </g></svg>
index 04b8a08..2f41379 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel-progressive.png differ
index 18698eb..2955afc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
-    </g>
+       <path d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
 </g></svg>
index f9354e3..a89a1f4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/cancel.png differ
index 04ff5c3..8e71801 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
-    </g>
+       <path d="M12 5.022a6.98 6.98 0 0 0-.003 13.956 6.98 6.98 0 0 0-.002-13.956zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93A5.113 5.113 0 0 1 6.884 12zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93a5.112 5.112 0 0 1 5.114 5.113c0 1.092-.364 3.542-.93 2.93z"/>
 </svg>
index 6fe1260..1be2ca1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-invert.png differ
index e5590a3..fc3a7a8 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="case-sensitive">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
-    </g>
+       <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+       <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
 </g></svg>
index cc6f665..f61681b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive-progressive.png differ
index ff6e102..f355ee2 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="case-sensitive">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
-    </g>
+       <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+       <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
 </g></svg>
index 426c5de..ddfb31d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/case-sensitive.png differ
index 749e38f..a8cf364 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="case-sensitive">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
-    </g>
+       <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+       <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
 </svg>
index 1dc3ae4..5138e1d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-constructive.png differ
index 4cea8a3..4792b64 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+       <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
 </g></svg>
index 305f41d..952ce4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-destructive.png differ
index 3609a7b..17e4586 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+       <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
 </g></svg>
index 708bb39..a5ef761 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-invert.png differ
index 7f3299a..f39e125 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+       <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
 </g></svg>
index 1dc3ae4..5138e1d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/check-progressive.png differ
index 4cea8a3..4792b64 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+       <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
 </g></svg>
index 2fa9dfb..c3ee296 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+       <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
 </svg>
index 442399a..9ca95e3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-invert.png differ
index 9e2795e..63cd940 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
+       <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
 </g></svg>
index e27df80..b6010a3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr-progressive.png differ
index 677ee81..e8e29f3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
+       <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
 </g></svg>
index ca0bdc4..90814f5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-ltr.png differ
index 6a55c05..9940bee 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
+       <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
 </svg>
index 0159650..a9bc4d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-invert.png differ
index 131a271..a5fc627 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
+       <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
 </g></svg>
index 7fb92a7..de1dd76 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl-progressive.png differ
index b19d640..90359ef 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
+       <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
 </g></svg>
index 3eae601..fd72fcd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/citeArticle-rtl.png differ
index 0c0c411..846eb1e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
+       <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z"/>
 </svg>
index ec90ed9..d43c28e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-invert.png differ
index b43d794..488efc1 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="clear">
-        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-    </g>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
 </g></svg>
index fb0d269..f390e90 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear-progressive.png differ
index 2fa1f2f..7253223 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="clear">
-        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-    </g>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
 </g></svg>
index 973dc03..e779ee3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clear.png differ
index 8689e77..43fcb6f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="clear">
-        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-    </g>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
 </svg>
index eab8915..d444f40 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-invert.png differ
index 14b03f6..9be3b92 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </g></svg>
index 633956d..292377c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip-progressive.png differ
index 3744540..6ef0bd3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </g></svg>
index ac25483..814c074 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clip.png differ
index 86d1dbf..d95390d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index 2f944d7..c2659c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-invert.png differ
index 8376288..dfb5b41 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
 </g></svg>
index f2683e5..d0f4080 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock-progressive.png differ
index 4c8accd..2c11e05 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
 </g></svg>
index 98b504e..e8c686e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/clock.png differ
index 85b0628..5bb89a9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
 </svg>
index 92af7b6..92bc9b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-invert.png differ
index 8027fff..f053cb4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-  <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+       <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
 </g></svg>
index 06fcd5d..9e5433e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close-progressive.png differ
index 37c960e..b6b5940 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-  <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+       <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
 </g></svg>
index cdb037a..cce3a34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/close.png differ
index 88ffb56..c7603e9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+       <path d="M18 7.6l-1.4-1.4-4.6 4.6-4.6-4.6L6 7.6l4.6 4.6L6 16.8l1.4 1.4 4.6-4.6 4.6 4.6 1.4-1.4-4.6-4.6z"/>
 </svg>
index 1804fb8..f61c10c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-invert.png differ
index e9179bf..cc45c91 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
 </g></svg>
index 21656c4..5e6fa6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code-progressive.png differ
index ce0e492..ec50f05 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
 </g></svg>
index ba89e4e..4979e47 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/code.png differ
index a00d158..ae0a42d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.59.335-.11.872-.25 1.835-.25H10v1h-.752c-.457 0-.77.19-.936.406-.167.216-.312.446-.312 1.07v1.856c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.31.238.76.238 1.49v1.86c0 .62.145.85.312 1.06.166.22.48.41.936.41H10v1H8.973c-.963 0-1.5-.133-1.835-.248a1.578 1.578 0 0 1-.808-.59 1.68 1.68 0 0 1-.257-.626C6.023 16.283 6 15.9 6 15.386V13c0-1 0-1-1-1H4z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
 </svg>
index 951a840..18340d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-invert.png differ
index 7b7305a..5b17c84 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="collapse">
-        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
-    </g>
+       <path d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
 </g></svg>
index 8b4d5c7..65ba624 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse-progressive.png differ
index 29157ae..3a65f25 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="collapse">
-        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
-    </g>
+       <path d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
 </g></svg>
index 1d8c6db..8e9fcc9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/collapse.png differ
index 645bfda..8059a5f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="collapse">
-        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
-    </g>
+       <path d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
 </svg>
index 1de3b9d..55c546c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-invert.png differ
index e6f6bb1..cce4a1c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="comment">
-        <path id="speech-bubble" d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
-    </g>
+       <path d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
 </g></svg>
index 6bb0a73..bb451d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment-progressive.png differ
index 63bdad9..3f4d2fb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="comment">
-        <path id="speech-bubble" d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
-    </g>
+       <path d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
 </g></svg>
index dcaa881..838d45d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/comment.png differ
index 861611a..26a58d3 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="comment">
-        <path id="speech-bubble" d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
-    </g>
+       <path d="M15 6H9a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3v3l3-3h3a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3z"/>
 </svg>
index 7bb19e3..f7fdbfa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-invert.png differ
index b19dd0d..efb06cb 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="diacritic">
-      <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
-      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
-    </g>
+       <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+       <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
 </g></svg>
index eb76fd0..941666b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic-progressive.png differ
index fed1164..a7f4b67 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="diacritic">
-      <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
-      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
-    </g>
+       <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+       <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
 </g></svg>
index 2359b19..f11425d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/diacritic.png differ
index 4565101..7d14731 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="diacritic">
-      <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
-      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
-    </g>
+       <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+       <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
 </svg>
index ea8beb9..7c7441e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-invert.png differ
index a9ef321..cfab8e3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+       <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
 </g></svg>
index 8e7e83a..0adf802 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr-progressive.png differ
index a63bf03..04b5942 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+       <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
 </g></svg>
index 79f4497..deca6d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-ltr.png differ
index 2571d4d..f61848c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+       <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
 </svg>
index 32bbeef..1ef3dab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-invert.png differ
index 344e2fb..9862429 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
+       <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
 </g></svg>
index 5edaf86..154449e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl-progressive.png differ
index fd4f13b..ac3f865 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
+       <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
 </g></svg>
index c01002f..c8f0589 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/die-rtl.png differ
index 9be97f6..b9ec171 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
+       <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z"/>
 </svg>
index b186eb0..1b567ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-invert.png differ
index 9c64f50..c6c4099 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 18l8-10H4z"/>
+       <path d="M12 18l8-10H4z"/>
 </g></svg>
index ebe6abf..e2e0862 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle-progressive.png differ
index aaa6ec9..8c9b073 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 18l8-10H4z"/>
+       <path d="M12 18l8-10H4z"/>
 </g></svg>
index 7df0592..32ba743 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/downTriangle.png differ
index e1fb989..b04f079 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 18l8-10H4z"/>
+       <path d="M12 18l8-10H4z"/>
 </svg>
index ce0f041..ef8a5a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-invert.png differ
index 312b19e..ef22307 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </g></svg>
index 28812d2..b1aca88 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr-progressive.png differ
index 8d69423..dcb4982 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </g></svg>
index 4d67c8d..1b72a56 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-ltr.png differ
index dfb2bb6..28a6558 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </svg>
index 09286f7..310431c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-invert.png differ
index 141ca5c..0e2c5b7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </g></svg>
index 6ba5e29..724d61c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl-progressive.png differ
index 4767dc1..1d24255 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </g></svg>
index 660d7d0..729c354 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/download-rtl.png differ
index 276b153..3f5d3c2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </svg>
index 4dd5fd8..3c7f074 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-invert.png differ
index 68085f9..14449a6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
+       <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
 </g></svg>
index 6d0aa12..54b7f14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable-progressive.png differ
index 7bb2d16..0040307 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
+       <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
 </g></svg>
index e031527..5774c25 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/draggable.png differ
index e63a7d5..80d09b5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
+       <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
 </svg>
index 682e18f..6642dae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-invert.png differ
index 138f8e8..3eb5cb8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
+       <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
 </g></svg>
index 92d625a..ab940f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr-progressive.png differ
index 40446e9..767e578 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
+       <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
 </g></svg>
index 504f29b..6f15678 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-ltr.png differ
index 02ab6e4..f116227 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
+       <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
 </svg>
index 2d23719..0bf6315 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-invert.png differ
index 0b9a4af..5904fa0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
+       <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
 </g></svg>
index 90653f2..c86cefd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/edit-rtl-progressive.png differ
index 8c0b879..dca2228 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
+       <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
 </g></svg>
index 83033c5..caddba6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
+       <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z"/>
 </svg>
index c90c593..ed5c00b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-invert.png differ
index 82b39cd..39379c8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
+       <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
 </g></svg>
index 4b4c8b4..eed131a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr-progressive.png differ
index 618debe..e57a6f1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
+       <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
 </g></svg>
index aa4b8c3..9b5cdc7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-ltr.png differ
index e06e5a0..3da6b80 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
+       <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z"/>
 </svg>
index 5a40486..f8e6e27 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-invert.png differ
index 9b9f765..712746c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
+       <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
 </g></svg>
index 720a501..1d64ee6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl-progressive.png differ
index ad87acc..442919b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
+       <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
 </g></svg>
index 3d8b751..75e9fd4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editLock-rtl.png differ
index fb1001f..4a21f42 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
+       <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z"/>
 </svg>
index 19726d1..6c38c6a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-invert.png differ
index a34235e..ed0e481 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
-    <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
+       <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
+       <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
 </g></svg>
index 7932aa5..f9d3f43 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr-progressive.png differ
index c7d9bbe..4105e64 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
-    <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
+       <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
+       <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
 </g></svg>
index c163360..5704177 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-ltr.png differ
index 50f4214..bde7b8f 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
-    <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
+       <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z"/>
+       <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z"/>
 </svg>
index 8e72010..9479483 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-invert.png differ
index 1aea7a8..940cf03 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
-    <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
+       <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
+       <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
 </g></svg>
index f563ed8..ca713ac 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl-progressive.png differ
index a743341..918868e 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
-    <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
+       <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
+       <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
 </g></svg>
index fc98968..02983c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/editUndo-rtl.png differ
index b7cfed7..2946c26 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
-    <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
+       <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z"/>
+       <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z"/>
 </svg>
index 7d57d11..3de291e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-invert.png differ
index e5b0d24..be0b791 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+       <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
 </g></svg>
index ae7d071..cb3b430 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis-progressive.png differ
index 0675f6e..5f088ec 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+       <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
 </g></svg>
index 85fa4f3..5d8d9cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ellipsis.png differ
index ef7d485..3b0dd78 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+       <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4zM20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
 </svg>
index 38a2c39..73e5d2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-invert.png differ
index a8260ae..89a2e49 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="expand">
-        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
-    </g>
+       <path d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
 </g></svg>
index 4a183b5..8388720 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand-progressive.png differ
index e7f6aa5..27a8dfc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="expand">
-        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
-    </g>
+       <path d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
 </g></svg>
index f72b6f2..945dd07 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/expand.png differ
index 84b9e0a..0e58027 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="expand">
-        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
-    </g>
+       <path d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
 </svg>
index 18a1801..26921c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-invert.png differ
index e9ddf2c..b6afe2d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="external">
-        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
-        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
-    </g>
+       <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+       <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
 </g></svg>
index 00fd178..2d88eec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr-progressive.png differ
index dcc2962..a4aff43 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="external">
-        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
-        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
-    </g>
+       <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+       <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
 </g></svg>
index 185ffc6..5b78631 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-ltr.png differ
index 1d7980d..ae57905 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="external">
-        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
-        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
-    </g>
+       <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+       <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
 </svg>
index 105fd0d..f77fed2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-invert.png differ
index 59cd0aa..4acf912 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="external">
-        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
-        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
-    </g>
+       <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+       <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
 </g></svg>
index 569492e..ea2c592 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl-progressive.png differ
index 8d0cd25..1936739 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="external">
-        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
-        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
-    </g>
+       <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+       <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
 </g></svg>
index 7066001..c610796 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/external-link-rtl.png differ
index 7e25d03..ef4ba39 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="external">
-        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
-        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
-    </g>
+       <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+       <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
 </svg>
index 4e11ebc..d3bb681 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-invert.png differ
index 158860e..93c91e9 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
-    <circle id="pupil" r="2" cy="12" cx="12"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
+       <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+       <circle id="pupil" r="2" cy="12" cx="12"/>
 </g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.png
deleted file mode 100644 (file)
index 94524c0..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye-progressive.svg
deleted file mode 100644 (file)
index ae45685..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
-    <circle id="pupil" r="2" cy="12" cx="12"/>
-</g></svg>
index eb5f963..dab9312 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eye.png differ
index cec85d0..e667e48 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
-    <circle id="pupil" r="2" cy="12" cx="12"/>
+       <path id="sclera" d="M12 6C7 6 1 12 1 12s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+       <circle id="pupil" r="2" cy="12" cx="12"/>
 </svg>
index bd499f1..e16538d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-invert.png differ
index 7e1567d..385e9c6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
+       <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
 </g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.png
deleted file mode 100644 (file)
index 9c22844..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed-progressive.svg
deleted file mode 100644 (file)
index 5d0d44d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
-</g></svg>
index 1ac37d6..0c66fa3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/eyeClosed.png differ
index d17f2c8..681e17c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+       <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
 </svg>
index f49ebeb..db02c17 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-invert.png differ
index 8ed4be9..01fe4ae 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+       <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
 </g></svg>
index 28405a8..16f80c0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr-progressive.png differ
index 49425d0..41af331 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+       <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
 </g></svg>
index ac5787b..c8e7593 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-ltr.png differ
index 0fdeed9..9d05857 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+       <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
 </svg>
index efba220..2ddf67f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-invert.png differ
index f4e7932..783db6f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+       <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
 </g></svg>
index 27bcc2d..23d5a5c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl-progressive.png differ
index 413ea34..26223d2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+       <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
 </g></svg>
index fdbe5e1..6bdb394 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/feedback-rtl.png differ
index 022d86d..481fe64 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+       <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
 </svg>
index e6602c9..ff725bc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-invert.png differ
index 928e954..c1155e0 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
-        <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
-    </g>
+       <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
+       <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
 </g></svg>
index 0ca17c1..f3017f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr-progressive.png differ
index 65fc298..4e5051d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
-        <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
-    </g>
+       <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
+       <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
 </g></svg>
index 066d84a..6963143 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-ltr.png differ
index ef44f57..4441b36 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
-        <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
-    </g>
+       <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.15.78-.096s.315-.59.126-.78l-2.37-2.377-.185-.094a3.545 3.545 0 0 0 .655-2.03c0-1.92-1.55-3.47-3.47-3.47zm0 1.656a1.8 1.8 0 0 1 1.813 1.813 1.83 1.83 0 0 1-1.82 1.84c-1.01 0-1.844-.83-1.844-1.847s.832-1.814 1.844-1.814z"/>
+       <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53a4.443 4.443 0 0 1 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
 </svg>
index bd3e862..a007202 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-invert.png differ
index 612c1dc..0508094 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
-        <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
-    </g>
+       <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
+       <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
 </g></svg>
index 142dbe4..c1c038f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl-progressive.png differ
index f18e0ad..1b791bf 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
-        <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
-    </g>
+       <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
+       <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
 </g></svg>
index ed834af..77aed34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/find-rtl.png differ
index 51fd39b..c275cac 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
-        <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
-    </g>
+       <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.15-.78-.096s-.315-.59-.126-.78l2.37-2.377.185-.094a3.545 3.545 0 0 1-.655-2.03c0-1.92 1.55-3.47 3.47-3.47zm0 1.656A1.8 1.8 0 0 0 9.53 14.47c0 1.01.806 1.84 1.818 1.84 1.01 0 1.844-.83 1.844-1.845s-.832-1.814-1.844-1.814z"/>
+       <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53a4.443 4.443 0 0 0-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
 </svg>
index ea79f46..e0b6667 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-invert.png differ
index f6c2213..656673a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
+       <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
 </g></svg>
index 4d76692..09958ce 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr-progressive.png differ
index c1f681a..075dc65 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
+       <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
 </g></svg>
index bd19f2b..c91cb49 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-ltr.png differ
index 1097561..7d9dabe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
+       <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
 </svg>
index 159bdb9..d41325b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-invert.png differ
index ce147ec..abed231 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
        <path d="M10.3 7.5V6c1.4-1.5 5.2-1.2 6 0V5h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V14c-1.2 1.5-4.3 1.2-5 0V7c.7.7 2.7.9 4 .5z"/>
 </g></svg>
\ No newline at end of file
index e88e061..7dd1507 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl-progressive.png differ
index 661f234..beab4bd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
        <path d="M10.3 7.5V6c1.4-1.5 5.2-1.2 6 0V5h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V14c-1.2 1.5-4.3 1.2-5 0V7c.7.7 2.7.9 4 .5z"/>
 </g></svg>
\ No newline at end of file
index a9943cc..384ff1b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/flag-rtl.png differ
index 397a3da..6a62d7f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M10.3 7.5V6c1.4-1.5 5.2-1.2 6 0V5h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V14c-1.2 1.5-4.3 1.2-5 0V7c.7.7 2.7.9 4 .5z"/>
 </svg>
\ No newline at end of file
index d7c6e28..4dab3f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-invert.png differ
index 4c6d402..dab6186 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
+       <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
 </g></svg>
index 39c58be..5f46d50 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr-progressive.png differ
index e1f8be3..bdc1f7e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
+       <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
 </g></svg>
index 45c3ee9..9e49a67 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-ltr.png differ
index 7e60fb4..be65507 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
+       <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
 </svg>
index 46b3f94..40902c8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-invert.png differ
index d2bfb08..dd87056 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
+       <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
 </g></svg>
index a384c8d..e68af73 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl-progressive.png differ
index ba0eb3b..20596f7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
+       <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
 </g></svg>
index 8a624c1..060466a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/folderPlaceholder-rtl.png differ
index e0a6f61..2298188 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
+       <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z"/>
 </svg>
index b7a3cb5..e1c2126 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-invert.png differ
index 588bef0..ff70df8 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
-    <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+       <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+       <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
 </g></svg>
index 8b86269..22c700b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen-progressive.png differ
index a9a0aa0..b4ac34c 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
-    <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+       <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+       <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
 </g></svg>
index ced1035..fb6ff20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/fullScreen.png differ
index 06b709b..a7a36fe 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
-    <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
-    <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+       <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+       <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+       <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
 </svg>
index 2949648..b2ea8c4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-invert.png differ
index cffafb7..bb7223f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+       <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
 </g></svg>
index a6079a4..b26c87e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr-progressive.png differ
index 9ef43f0..759d7cb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+       <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
 </g></svg>
index 9396cba..6c62b86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-ltr.png differ
index df863b9..9a9ccf4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+       <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
 </svg>
index c0f155a..7eb7c89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-invert.png differ
index 64a71fa..a96d3ff 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
+       <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
 </g></svg>
index 5c57662..37b233c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl-progressive.png differ
index b44b385..25e3a79 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
+       <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
 </g></svg>
index 7aee05f..d863703 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/funnel-rtl.png differ
index 4eade2d..9251540 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
+       <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
 </svg>
index 2a4d547..f974473 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright-invert.png differ
index 82f466e..4e96261 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
+       <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
 </g></svg>
index f843210..8639ec1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfBright.png differ
index 2745ec7..efff413 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
+       <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
 </svg>
index 57dfe53..ecbf7b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-constructive.png differ
index dbdacc6..1547b5e 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
-    <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
 </g></svg>
index f28e35d..e694d5a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-invert.png differ
index febf500..7691d7d 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
-    <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
 </g></svg>
index 57dfe53..ecbf7b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr-progressive.png differ
index dbdacc6..1547b5e 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
-    <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
 </g></svg>
index d52a908..ac5d6f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-ltr.png differ
index cfb17d8..56e8283 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
-    <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M10.1 11l-3.9.5L9 14.3l-.6 3.9 3.6-1.7-.1-9z"/>
 </svg>
index d24672a..69bdb5e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-constructive.png differ
index 2f45816..bcd259c 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
-    <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
+       <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
+       <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
 </g></svg>
index c9429ae..1a3b159 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-invert.png differ
index 11b99df..ca2d809 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
-    <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
+       <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
+       <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
 </g></svg>
index d24672a..69bdb5e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl-progressive.png differ
index 2f45816..bcd259c 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
-    <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
+       <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
+       <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
 </g></svg>
index 4991b65..d4b1a70 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/halfStar-rtl.png differ
index c649b50..c94edef 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
-    <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
+       <path d="M12 7.4L10.3 11l-4 .5L9 14.3l-.5 3.9 3.5-1.7 3.6 1.7-.6-3.9 2.8-2.8-3.9-.5L12 7.4M12 4l2.8 5.6 6.2.9-4.5 4.4 1.1 6.1-5.6-3-5.5 3 1-6.2L3 10.4l6.3-.9L12 4z"/>
+       <path d="M12.1 7.5l1.8 3.5 3.9.5-2.8 2.8.6 3.9-3.6-1.7z"/>
 </svg>
index 2070997..b284de5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-invert.png differ
index 1607feb..9edbaab 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+       <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
 </g></svg>
index 8797321..9a33cb4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart-progressive.png differ
index 816e672..5daa8a3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+       <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
 </g></svg>
index 76d76d0..37b813b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/heart.png differ
index 6433201..ebbb3ae 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+       <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
 </svg>
index 35d8f22..c1f3be0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-invert.png differ
index 7e0a658..cde7546 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
-            <path id="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
+       <path id="question-mark-top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M11 16h2v2h-2z"/>
 </g></svg>
index 87236a8..2436471 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr-progressive.png differ
index 8a2e3ca..7ac61d5 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
-            <path id="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
+       <path id="question-mark-top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M11 16h2v2h-2z"/>
 </g></svg>
index 9bb1382..52edca6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-ltr.png differ
index a77dca2..e5ea3f1 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
-            <path id="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.92 9.916 9.92 5.48 0 9.92-4.44 9.92-9.913 0-5.477-4.44-9.915-9.913-9.915zm.002 18a8.084 8.084 0 1 1 0-16.168 8.084 8.084 0 0 1 0 16.168z"/>
+       <path id="question-mark-top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M11 16h2v2h-2z"/>
 </svg>
index 9cb8cb2..cdc6470 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-invert.png differ
index 2d78cb8..7336825 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
-            <path id="bottom" d="M13 16h-2v2h2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
+       <path id="question-mark-top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M13 16h-2v2h2z"/>
 </g></svg>
index 72f95c2..23b5fd8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl-progressive.png differ
index 878c72c..7a5c2b2 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
-            <path id="bottom" d="M13 16h-2v2h2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
+       <path id="question-mark-top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M13 16h-2v2h2z"/>
 </g></svg>
index 50899b0..bda8999 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/help-rtl.png differ
index 278b906..cf8cd9b 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
-        <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
-            <path id="bottom" d="M13 16h-2v2h2z"/>
-        </g>
-    </g>
+       <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.92-9.916 9.92-5.48 0-9.92-4.44-9.92-9.913 0-5.477 4.44-9.915 9.913-9.915zm-.002 18a8.084 8.084 0 1 0 0-16.168 8.084 8.084 0 0 0 0 16.168z"/>
+       <path id="question-mark-top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
+       <path id="question-mark-bottom" d="M13 16h-2v2h2z"/>
 </svg>
index 314d7ac..fbe4ca9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-invert.png differ
index e301dea..916874d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><g fill="#fff">
-    <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
 </g></svg>
index 14bd7be..e0d512c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr-progressive.png differ
index 4cc90b5..5f68f84 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><g fill="#36c">
-    <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
 </g></svg>
index 73dd6b9..fd9477d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-ltr.png differ
index eb42923..328429a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24">
-    <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M5.066 18.236l.14-.244c.976-1.69 1.341-4.587.815-6.469l-.14-.507.2-.365L11.074 2l9.011 5.203-4.994 8.65-.204.354-.522.134c-1.893.485-4.22 2.252-5.195 3.94l-.14.244-.721-.416-1.041 1.89H3.914l1.893-3.336z" fill-rule="evenodd"/>
 </svg>
index 024595e..4c6a64d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-invert.png differ
index 46d61c2..fbfb0fa 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><g fill="#fff">
-    <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
 </g></svg>
index 039ccbe..4a88c3b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl-progressive.png differ
index 4f3997a..3117391 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><g fill="#36c">
-    <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
 </g></svg>
index 2ea2983..db47888 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/highlight-rtl.png differ
index 9b1940e..d349b43 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24">
-    <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
+       <path d="M18.934 18.236l-.14-.244c-.976-1.69-1.341-4.587-.815-6.469l.14-.507-.2-.365L12.926 2 3.914 7.203l4.994 8.65.204.354.522.134c1.893.485 4.22 2.252 5.195 3.94l.14.244.721-.416 1.041 1.89h3.355l-1.893-3.336z" fill-rule="evenodd"/>
 </svg>
index 0bd8394..fd08273 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-invert.png differ
index fa0a150..7849553 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
-    </g>
+       <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
+       <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
 </g></svg>
index ec635a1..8e00a61 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history-progressive.png differ
index bd26dfb..2075dfd 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
-    </g>
+       <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
+       <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
 </g></svg>
index 417f529..5425e1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/history.png differ
index 68beaa1..f290933 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
-    </g>
+       <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
+       <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12a9.86 9.86 0 0 0 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616A7.982 7.982 0 0 1 4.004 12a8.084 8.084 0 0 1 16.167.004 8.08 8.08 0 0 1-8.08 8.085 7.975 7.975 0 0 1-3.21-.68L8.05 21.04a9.81 9.81 0 0 0 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
 </svg>
index 42797a2..6111fa4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-invert.png differ
index 04354ce..f66eaf4 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="image">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
-    </g>
+       <path d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
 </g></svg>
index f5cefdf..21e3909 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr-progressive.png differ
index 252099f..82c3e50 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="image">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
-    </g>
+       <path d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
 </g></svg>
index f91dfa2..1c7dde9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-ltr.png differ
index dfcbd8b..f52de36 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="image">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
-    </g>
+       <path d="M18 17l-3-3-2 1-3-3-4 5zm2-11v13H4V6z"/>
 </svg>
index c33eed6..5c1f196 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-invert.png differ
index 875fe66..20279f2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="image">
-        <path id="mountains" d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
-    </g>
+       <path d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
 </g></svg>
index eadff85..6f6bf9e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl-progressive.png differ
index d015e8b..91317b0 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="image">
-        <path id="mountains" d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
-    </g>
+       <path d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
 </g></svg>
index f33be17..d9246ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/image-rtl.png differ
index 2251c0e..5b84a71 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="image">
-        <path id="mountains" d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
-    </g>
+       <path d="M6 17l3-3 2 1 3-3 4 5zM4 6v13h16V6z"/>
 </svg>
index 422f8ea..cc23ecb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-invert.png differ
index 78c40b3..ce20847 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="imageAdd">
-        <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
-        <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
-    </g>
+       <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
+       <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
 </g></svg>
index e64819c..72144cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr-progressive.png differ
index b898956..6782572 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="imageAdd">
-        <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
-        <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
-    </g>
+       <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
+       <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
 </g></svg>
index f08883c..0e2edef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-ltr.png differ
index 1b60cf0..507ffd1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="imageAdd">
-        <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
-        <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
-    </g>
+       <path id="mountains" d="M16 17l-3-3-2 1-3-3-4 5zm-1-8v4h3v6H2V6h9v3z"/>
+       <path id="add" d="M22 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
 </svg>
index 375a79f..1d463d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-invert.png differ
index e76b43f..dbc1b2c 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="imageAdd">
-        <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
-        <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
-    </g>
+       <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
+       <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
 </g></svg>
index dec9401..78d40ac 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl-progressive.png differ
index 61e2ed4..47b7a63 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="imageAdd">
-        <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
-        <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
-    </g>
+       <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
+       <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
 </g></svg>
index dd60447..768e16e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageAdd-rtl.png differ
index b86d499..a6c37db 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="imageAdd">
-        <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
-        <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
-    </g>
+       <path id="mountains" d="M8 17l3-3 2 1 3-3 4 5zm1-8v4H6v6h16V6h-9v3z"/>
+       <path id="add" d="M2 6h4V2h2v4h4v2H8v4H6V8H2z"/>
 </svg>
index bd15ff0..b0734d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-invert.png differ
index c2d3d8a..ec50a5c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z" id="imageGallery"/>
+       <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z"/>
 </g></svg>
index 7e360aa..e0b494c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr-progressive.png differ
index 4029c27..43910a3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z" id="imageGallery"/>
+       <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z"/>
 </g></svg>
index 3934d14..7f35c86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-ltr.png differ
index 2fa2e52..252f433 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z" id="imageGallery"/>
+       <path d="M2 4v14h2V6h15V4H2zm3 3v13h16V7H5zm6 6l3 3 2-1 3 3H7l4-5z"/>
 </svg>
index 85b22c4..f588382 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-invert.png differ
index b32a86a..957ba37 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z" id="imageGallery"/>
+       <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z"/>
 </g></svg>
index 3d014a5..9884a21 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl-progressive.png differ
index 21f4a80..3ea95f0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z" id="imageGallery"/>
+       <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z"/>
 </g></svg>
index f8af41f..f2ebdea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageGallery-rtl.png differ
index c705cec..e5b3029 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z" id="imageGallery"/>
+       <path d="M21 4v14h-2V6H4V4h17zm-3 3v13H2V7h16zm-6 6l-3 3-2-1-3 3h12l-4-5z"/>
 </svg>
index 61b5d22..620725d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-invert.png differ
index b726d4b..f38fd7b 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="imageAdd">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
-        <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
-    </g>
+       <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
+       <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
 </g></svg>
index f5604bf..e43801f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr-progressive.png differ
index e726c03..282fe9c 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="imageAdd">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
-        <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
-    </g>
+       <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
+       <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
 </g></svg>
index a1a1e1e..bfad6b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-ltr.png differ
index 50a928a..7c52718 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="imageAdd">
-        <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
-        <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
-    </g>
+       <path id="mountains" d="M18 17l-3-3-2 1-3-3-4 5zm2-5v7H4V6h8v6z"/>
+       <path id="lock" d="M18.5 5h-3V4s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM20 5V4s0-3-3-3-3 3-3 3v1h-1v6h8V5z"/>
 </svg>
index 2223f5f..24131bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-invert.png differ
index c92cd7f..fb5f9a9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="imageAdd">
-        <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
-        <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
-    </g>
+       <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
+       <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
 </g></svg>
index 817e599..fbfd105 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl-progressive.png differ
index 8381443..1657aa2 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="imageAdd">
-        <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
-        <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
-    </g>
+       <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
+       <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
 </g></svg>
index f0ddda4..53e060d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/imageLock-rtl.png differ
index e8ac3ed..7052bd9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="imageAdd">
-        <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
-        <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
-    </g>
+       <path id="mountains" d="M7 17l3-3 2 1 3-3 4 5zm-2-5v7h16V6h-8v6z"/>
+       <path id="lock" d="M6.5 5h3V4s0-1.5-1.5-1.5C6.5 2.56 6.5 4 6.5 4zM5 5V4s0-3 3-3 3 3 3 3v1h1v6H4V5z"/>
 </svg>
index af944e7..6d9cdc0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-invert.png differ
index 04768db..e09edd4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
 </g></svg>
index eec5149..f94e3e5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr-progressive.png differ
index 2734879..c6d3357 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
 </g></svg>
index b7663ae..f6281f5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-ltr.png differ
index 3760696..0b44e10 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
 </svg>
index f52ff9b..2512b8e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-invert.png differ
index c70f991..f83d5c5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
 </g></svg>
index b6edc33..91854db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl-progressive.png differ
index 992ed82..f0102d2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
 </g></svg>
index 63b2750..a3687f0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/indent-rtl.png differ
index 9648f34..a2e2539 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z"/>
 </svg>
index 78532de..d7ae22b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-invert.png differ
index f3519f3..62387b9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="info">
-        <path id="circled-i" d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
-    </g>
+       <path d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
 </g></svg>
index 9a0f5d7..464b1c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info-progressive.png differ
index 1e2ecf8..5a2903b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="info">
-        <path id="circled-i" d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
-    </g>
+       <path d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
 </g></svg>
index 0b4270d..c4fe4e3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/info.png differ
index 72a9b4c..6cf5c6a 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="info">
-        <path id="circled-i" d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
-    </g>
+       <path d="M11.5 17a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11zm0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
 </svg>
index 12dfc56..ac34d9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-invert.png differ
index 7a52242..da5cb3b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
-    </g>
+       <path d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
 </g></svg>
index f8c25a9..a0277e1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a-progressive.png differ
index 2431aeb..a43de6c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
-    </g>
+       <path d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
 </g></svg>
index 2f5fd18..3530a67 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-a.png differ
index a3a11c6..6c5ebb0 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
-    </g>
+       <path d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
 </svg>
index 567b290..1acc938 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-invert.png differ
index 4d68c38..857eb3f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
-    </g>
+       <path d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
 </g></svg>
index 3c3ed9f..63ef7d5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem-progressive.png differ
index 8c23b30..1667484 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
-    </g>
+       <path d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
 </g></svg>
index c8e03ee..b62c9d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-keheh-jeem.png differ
index 11b1458..4a75513 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
-    </g>
+       <path d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125a1.26 1.26 0 0 0 .065.78c.19.406.54.575.844.814l.093-.12.53.627c.14.165.345.514.47.94.138.462.08.724 0 1.124h-3.44c-.34 0-.592.007-.766-.02-.34-.053-.256-.21-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.046-.698-.185-1.094-.155-.36.026-.77.24-1.03.72-.25.447-.436.838-.66 1.28l.75-.47c.23-.14.486-.226.72-.218.158.004.276.053.407.093-.234.204-.51.4-.72.56-.3.26-.704.69-.908 1-.403.617-.694 1.086-.875 1.78-.18.69.003 1.34.468 1.75.426.38.846.52 1.28.566.65.064 1.206.092 2-.19.658-.23 1.022-.552 1.5-.97-.882.11-1.816.09-2.53.033-.87-.07-1.268-.386-1.47-.596-.27-.283-.306-.64-.155-1.22a1.44 1.44 0 0 1 .25-.53c.17-.228.363-.435.593-.656.45-.436 1.01-.737 1.46-.94-.042.207-.104.444-.052.69.05.23.25.38.44.47.26.12.506.152.69.153 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.343-.845.13-.5.094-1.062-.094-1.625a4.812 4.812 0 0 0-.72-1.406c-.336-.444-.675-.83-1-1.22 1.256-.815 2.715-1.24 3.97-1.688.12-.452.222-.926.31-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.1.813.336-.303.627-.674.876-.97-.39-.267-.77-.587-1.093-.843z"/>
 </svg>
index 03989d4..eef8fc1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-invert.png differ
index 799a785..80679bb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
-    </g>
+       <path d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
 </g></svg>
index 7179cb6..fc3a166 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem-progressive.png differ
index b22bd45..0900b57 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
-    </g>
+       <path d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
 </g></svg>
index 409a416..9ecf9f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-arab-meem.png differ
index f15586e..8d36705 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
-    </g>
+       <path d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627a8.31 8.31 0 0 1-1.082 1.833c-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.692-.98a24.1 24.1 0 0 1 .94-1.09c.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.765-.293l.065-.128c.01-.11-.01-.24-.052-.394a2.403 2.403 0 0 0-.232-.522c-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.378.125-.05-.247 1.555-1.71 2.705-2.566 3.45-2.566.38 0 .67.13.86.394.134.195.25.6.343 1.21l.202 1.2c.105.586.24.895.408.925"/>
 </svg>
index 75dc339..f7a7aa1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-invert.png differ
index 6b56e37..c6f411b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
-    </g>
+       <path d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
 </g></svg>
index db31afa..8bb6d47 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha-progressive.png differ
index 50ee046..8130925 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
-    </g>
+       <path d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
 </g></svg>
index 2dd80f7..1a2d476 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-armn-sha.png differ
index c32ff49..8e4e1b9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
-    </g>
+       <path d="M11.564 7.678a3.073 3.073 0 0 0-.93-.268c-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.33 1.67-2.625-1.165a1.867 1.867 0 0 0-.433-.134 2.45 2.45 0 0 0-.576-.06 4.88 4.88 0 0 0-1.663.28c-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283a5.48 5.48 0 0 0-.63 1.71c-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.044-.08 1.48-.236a3.488 3.488 0 0 0 1.135-.66c.325-.29.59-.634.795-1.034.21-.4.363-.84.458-1.322l.11-.56h1.6l-.12.59a5.925 5.925 0 0 1-.676 1.844 5.19 5.19 0 0 1-1.214 1.423c-.488.395-1.053.7-1.694.923a6.573 6.573 0 0 1-2.106.324c-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.437-.573-.97-.678-1.608-.105-.64-.078-1.366.08-2.186.125-.66.346-1.274.66-1.836A6.332 6.332 0 0 1 8.792 9.54a5.955 5.955 0 0 1 1.496-1.072 5.87 5.87 0 0 1 1.732-.57l-.465-.23"/>
 </svg>
index a165657..0853c92 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-invert.png differ
index 01afe88..c802ec8 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
-    </g>
+       <path d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
 </g></svg>
index 5b36059..25675b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c-progressive.png differ
index 03aa494..de96381 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
-    </g>
+       <path d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
 </g></svg>
index dc70ded..062a8bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-c.png differ
index b85eb02..9d30d10 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
-    </g>
+       <path d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04a4.835 4.835 0 0 1-3.015 1.03c-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.89-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.78 0 1.48-.26 2.1-.785.63-.52 1.08-1.26 1.37-2.216"/>
 </svg>
index b656d1c..98012ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-invert.png differ
index dcd0d94..e25261a 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
-    </g>
+       <path d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
 </g></svg>
index 73e4545..319695f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d-progressive.png differ
index ff61b37..6f662f3 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
-    </g>
+       <path d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
 </g></svg>
index cd5ac9d..e750a89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-d.png differ
index dbc1d40..6ee788c 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
-    </g>
+       <path d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.642.17 1.192.472 1.65.91.454.43.8.97 1.03 1.62.23.65.344 1.378.344 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.946 1.072-1.455 1.416-.504.33-1.1.582-1.794.75-.525.122-1.17.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24a3.26 3.26 0 0 0 1.05-.436 4.19 4.19 0 0 0 1.04-.975 6.652 6.652 0 0 0 .975-1.825c.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.522-.755-.87-1.27-1.04-.38-.124-.974-.186-1.78-.186H11L9.095 16.64"/>
 </svg>
index 2e0918d..4b79add 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-invert.png differ
index f91db71..879326b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
-    </g>
+       <path d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
 </g></svg>
index 0444ac2..aefe362 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e-progressive.png differ
index c5ca7b1..8309a16 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
-    </g>
+       <path d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
 </g></svg>
index bb51c22..2d69a29 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-e.png differ
index f385149..fde4485 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
-    </g>
+       <path d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
 </svg>
index b0e5b2c..7eb64f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-invert.png differ
index fea68a5..8adfa55 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
-    </g>
+       <path d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
 </g></svg>
index ff933e2..8960e3a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan-progressive.png differ
index bacc38c..5f79a31 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
-    </g>
+       <path d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
 </g></svg>
index 9750f42..d5d1d31 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-geor-kan.png differ
index 9a54880..5d27f20 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
-    </g>
+       <path d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.62c-.055.26-.083.497-.083.71 0 .97.52 1.46 1.564 1.46 1.31 0 2.108-.724 2.39-2.17l.058-.33a3.17 3.17 0 0 0 .066-.615c0-.927-.546-1.39-1.64-1.39H10.87l.247-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.696-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
 </svg>
index cc8fee4..a7a54dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-invert.png differ
index 3919051..f4cda9d 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-i">
-        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
-    </g>
+       <path d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
 </g></svg>
index 5c78d59..bc885d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i-progressive.png differ
index f71f6f7..b9dbc63 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-i">
-        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
-    </g>
+       <path d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
 </g></svg>
index a37620b..aaaf2a4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-i.png differ
index e670e9b..7748046 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-i">
-        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
-    </g>
+       <path d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
 </svg>
index 5387c36..e06ff23 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-invert.png differ
index b6e87b4..8d061f3 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-k">
-        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
-    </g>
+       <path d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
 </g></svg>
index a2e715f..1df7d6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k-progressive.png differ
index 7494e8f..dcec313 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-k">
-        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
-    </g>
+       <path d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
 </g></svg>
index 9b156fd..4013192 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-k.png differ
index 38bcd73..db16b71 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-k">
-        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
-    </g>
+       <path d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
 </svg>
index 42b674e..a088dd3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-invert.png differ
index ed2fe67..fa2c33e 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
-    </g>
+       <path d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
 </g></svg>
index d517352..0ef893e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s-progressive.png differ
index 0eeeb50..16b6238 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
-    </g>
+       <path d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
 </g></svg>
index 3213d6d..6a53113 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/italic-s.png differ
index b3fb340..59c3bde 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
-    </g>
+       <path d="M16.474 6.59l-.302 1.525a7.36 7.36 0 0 0-1.557-.628 5.432 5.432 0 0 0-1.487-.217c-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.65.302.86.207.19.733.4 1.58.63l.937.23c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.31-1.61a7.613 7.613 0 0 0 1.72.805c.58.18 1.155.27 1.73.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.354-1.054-.233-.242-.737-.46-1.512-.657l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.368-.584-.88-.584-1.535 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.555 0 1.1.05 1.644.146.542.1 1.085.245 1.627.442"/>
 </svg>
index bc2e9cc..b6d5da0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-invert.png differ
index 370d0a3..37c93ec 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-  <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
+       <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
 </g></svg>
index 19f17bd..a1ba49a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr-progressive.png differ
index baf8a4a..dcba009 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-  <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
+       <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
 </g></svg>
index 2af4eb0..949364a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-ltr.png differ
index 8a83e41..ccb7d4f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
+       <path d="M16 8V7h-6v1h6zm-2 2V9h-4v1h4zM6 4h1v16H6V4zm2 0h10v13c0 1.7-1.3 3-3 3H8V4z"/>
 </svg>
index 60b5f47..acd565f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-invert.png differ
index 4660285..69bffc0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-  <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
+       <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
 </g></svg>
index b16badc..1b6b0d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl-progressive.png differ
index 17ccb82..73f8d9c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-  <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
+       <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
 </g></svg>
index 033ede1..f3fca66 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/journal-rtl.png differ
index 2a07a44..3e74f68 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
+       <path d="M8 8V7h6v1H8zm2 2V9h4v1h-4zm8-6h-1v16h1V4zm-2 0H6v13c0 1.7 1.3 3 3 3h7V4z"/>
 </svg>
index 265da14..9bf7f76 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-invert.png differ
index 4b00ee7..26e65e1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
+       <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
 </g></svg>
index 37b1788..4b8c9f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr-progressive.png differ
index e079ac6..cfe3c7d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
+       <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
 </g></svg>
index 9a4dca8..a59d506 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-ltr.png differ
index fc0d3c3..a1bdc30 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
+       <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
 </svg>
index a5f2904..5f20e96 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-invert.png differ
index 1777cec..0c2d683 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
+       <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
 </g></svg>
index 69a032a..e290029 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl-progressive.png differ
index d070568..4d78774 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
+       <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
 </g></svg>
index f49e112..5175285 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/key-rtl.png differ
index 6dedfe8..43a9982 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
+       <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
 </svg>
index d7d1a0b..c5cbe69 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-invert.png differ
index 2230bf5..9108bd5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
+       <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
 </g></svg>
index 49a0c4a..2e88d60 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr-progressive.png differ
index 25f22c7..1222502 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
+       <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
 </g></svg>
index 886d37a..7d0b773 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-ltr.png differ
index c4c442e..27bec47 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
+       <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
 </svg>
index 1b0275e..3613d08 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-invert.png differ
index df9d39d..c34ef5b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
+       <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
 </g></svg>
index cf144b7..a9adf6c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl-progressive.png differ
index 1cff12c..6aa5844 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
+       <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
 </g></svg>
index 790a5e2..6dc4f4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/keyboard-rtl.png differ
index b37d7f4..382d1b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
+       <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
 </svg>
index d9ac348..8689bc3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-invert.png differ
index 9b8523f..46d9367 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="A">
-        <path d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
-    </g>
-    <g id="文">
-        <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
-        <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
-    </g>
+       <path id="A" d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
+       <g id="文">
+               <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
+               <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
+       </g>
 </g></svg>
index cfc3a36..f6020e5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr-progressive.png differ
index 1adc6aa..489da03 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="A">
-        <path d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
-    </g>
-    <g id="文">
-        <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
-        <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
-    </g>
+       <path id="A" d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
+       <g id="文">
+               <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
+               <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
+       </g>
 </g></svg>
index f7b785c..dc27718 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-ltr.png differ
index d64b734..13b42fa 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="A">
-        <path d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
-    </g>
-    <g id="文">
-        <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
-        <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
-    </g>
+       <path id="A" d="M18.738 15.673l1.137 3.15h1.575L17.775 7.448h-2.188l-3.85 11.375h1.575l1.05-3.15h4.375zM16.55 8.76l1.837 5.427h-3.675l1.838-5.425z"/>
+       <g id="文">
+               <path d="M8.325 6.573h.787l-.875-1.75h-1.75l.438.875a1.56 1.56 0 0 0 1.4.875z"/>
+               <path d="m 9.202,12.874 c 0.7,0.525 1.486,0.963 2.45,1.225 l -0.438,1.31 A 9.17,9.17 0 0 1 8.151,13.835 c -1.49,1.137 -3.063,1.837 -4.813,2.363 L 2.9,14.885 C 4.386,14.36 5.874,13.835 7.1,12.872 5.962,11.648 5.174,10.335 4.65,8.758 l -1.663,0 0,-1.31 10.85,0 -0.438,1.312 -1.75,0 c -0.308,1.33 -1.255,2.957 -2.45,4.114 z m 1.05,-4.114 -4.114,0 c 0.35,1.226 1.138,2.363 2.013,3.238 0.926,-1 1.617,-1.957 2.1,-3.237 z"/>
+       </g>
 </svg>
index 80dad94..a1b0369 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-invert.png differ
index 3ceea08..56df312 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="A">
-        <path d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z" id="path5"/>
-    </g>
-    <g id="文">
-        <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z" id="path7"/>
-        <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z" id="path11-7"/>
-    </g>
+       <path id="A" d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z"/>
+       <g id="文">
+               <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z"/>
+               <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z"/>
+       </g>
 </g></svg>
index 51d8ecf..eeb994f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl-progressive.png differ
index 050fe1e..02ebd9c 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="A">
-        <path d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z" id="path5"/>
-    </g>
-    <g id="文">
-        <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z" id="path7"/>
-        <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z" id="path11-7"/>
-    </g>
+       <path id="A" d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z"/>
+       <g id="文">
+               <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z"/>
+               <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z"/>
+       </g>
 </g></svg>
index c78f2cd..c085994 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/language-rtl.png differ
index cf6c1d5..8e409cc 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="A">
-        <path d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z" id="path5"/>
-    </g>
-    <g id="文">
-        <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z" id="path7"/>
-        <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z" id="path11-7"/>
-    </g>
+       <path id="A" d="M5.612 15.673l-1.137 3.15H2.9L6.575 7.448h2.188l3.85 11.375h-1.575l-1.05-3.15H5.613zM7.8 8.76l-1.837 5.427h3.675L7.8 8.762z"/>
+       <g id="文">
+               <path d="M16.384 6.573h.787l-.873-1.75h-1.75l.438.875c.26.535.805.874 1.4.875z"/>
+               <path d="M15.15 12.874c-.7.525-1.486.963-2.45 1.225l.438 1.31a9.17 9.17 0 0 0 3.063-1.575c1.49 1.137 3.064 1.837 4.814 2.363l.438-1.313c-1.486-.525-2.974-1.05-4.2-2.013 1.138-1.224 1.926-2.537 2.45-4.114h1.663v-1.31h-10.85l.438 1.312h1.75c.308 1.33 1.255 2.957 2.45 4.114zM14.1 8.76h4.114c-.35 1.226-1.138 2.363-2.013 3.238-.925-1-1.616-1.957-2.1-3.237z"/>
+       </g>
 </svg>
index 264811b..a6fa83f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr-invert.png differ
index 491adb5..a09b627 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+       <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
 </g></svg>
index 4b6d298..b77c4d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-ltr.png differ
index 4b01d74..57f3c41 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+       <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
 </svg>
index b91b35c..ff63514 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl-invert.png differ
index 4842411..6e48bbe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
+       <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
 </g></svg>
index 77d7796..41ea208 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/largerText-rtl.png differ
index 6ac62dc..287fbd2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
+       <path d="M3.4 20h8.1v-.8c-.4 0-.8-.1-1.3-.2s-.8-.2-.8-.4v-.2c0-.1 0-.2.1-.3l1.3-3.1h5.1c.1.3.2.6.4 1 .1.4.3.7.4 1 .1.4.2.7.2.8v.4c0 .2-.2.4-.5.6-.3.2-.9.3-1.7.3v.9h6.1v-.8c-.2 0-.5-.1-.8-.1-.3-.1-.5-.1-.7-.2-.3-.2-.5-.4-.7-.6-.2-.3-.4-.6-.5-.9-.8-2-1.6-3.9-2.4-5.9-.8-2-1.7-4.1-2.7-6.5h-2.1c-1.4 3.3-2.4 6-3.2 7.9-.8 1.9-1.4 3.6-2 4.8l-.3.6c-.1.2-.3.3-.6.5-.2.1-.4.2-.7.3-.3.1-.5.1-.7.1v.8zm7.8-6l2.1-5.3 2.1 5.3h-4.2z"/>
 </svg>
index 844b6f9..7249f94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-invert.png differ
index a12fc5a..2decd71 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="layout-ltr">
-        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
 </g></svg>
index 8dc8a31..923f362 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr-progressive.png differ
index 8243e34..29f988d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="layout-ltr">
-        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
 </g></svg>
index ea6d2f5..0115366 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-ltr.png differ
index c3be66c..e50dba9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="layout-ltr">
-        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
 </svg>
index 1ef7734..d1d766a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-invert.png differ
index 165c996..ae12873 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="layout-rtl">
-        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
-        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
-    </g>
+       <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+       <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
 </g></svg>
index 2c190ce..67199b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl-progressive.png differ
index db1081c..1efafed 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="layout-rtl">
-        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
-        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
-    </g>
+       <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+       <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
 </g></svg>
index 46bf59b..9474c2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/layout-rtl.png differ
index ce7feb8..110318a 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="layout-rtl">
-        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
-        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
-    </g>
+       <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+       <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
 </svg>
index 7c9195e..7ec260f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-invert.png differ
index 7c36535..4b50529 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+       <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
 </g></svg>
index fb88cdf..e31fc2e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr-progressive.png differ
index 22228cd..95a13a0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+       <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
 </g></svg>
index 617d325..bd8e722 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-ltr.png differ
index aaaee54..274ad8d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+       <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
 </svg>
index ece611a..4a44ea7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-invert.png differ
index 1ea19e8..9443997 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
+       <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
 </g></svg>
index c030b01..1c7e903 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl-progressive.png differ
index 3af1611..eb8e447 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
+       <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
 </g></svg>
index ef48413..6dbc84c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/link-rtl.png differ
index 82a8e63..c30b232 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
+       <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z"/>
 </svg>
index 88cdd9d..7d361a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-invert.png differ
index cb63d50..0b19297 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+       <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
 </g></svg>
index 350c708..ebb5eef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr-progressive.png differ
index 0417a94..b0362fd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+       <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
 </g></svg>
index 7796dd1..34d3fb1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-ltr.png differ
index 5f0b15f..5e18ba6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+       <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
 </svg>
index 6aeed4c..760d34f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-invert.png differ
index 081fee4..d0364a4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
+       <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
 </g></svg>
index 9a9e5ca..044b1f2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl-progressive.png differ
index c8610c9..be93470 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
+       <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
 </g></svg>
index 2c727b1..9c9c8ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listBullet-rtl.png differ
index c9c94eb..c1d89f5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
+       <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"/>
 </svg>
index 13810b2..8c6b8c2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-invert.png differ
index c752585..26ad6e4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
+       <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
 </g></svg>
index bf3c311..6f75cd5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr-progressive.png differ
index 150723f..d35e2f4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
+       <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
 </g></svg>
index 631c266..e225c01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-ltr.png differ
index 8e849a7..ad1fe2b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
+       <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
 </svg>
index 9b2e821..67e69f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-invert.png differ
index 493654d..1a2526f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+       <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
 </g></svg>
index 7e1df5d..c571d19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl-progressive.png differ
index 469f949..e8f4bc7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+       <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
 </g></svg>
index 2c3b9d0..174af81 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/listNumbered-rtl.png differ
index 9ec4801..ba39691 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+       <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
 </svg>
index e16f042..dbddf8e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-destructive.png differ
index 9e4aee0..f8ab740 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
+       <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
 </g></svg>
index a81a2a1..2ea177a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-invert.png differ
index 7e11b41..8668460 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
+       <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
 </g></svg>
index 181c0cb..fddc52b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr-progressive.png differ
index a90a981..94123e0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
+       <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
 </g></svg>
index a87541f..1255073 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-ltr.png differ
index a18b2c4..685c829 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
+       <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z"/>
 </svg>
index 29cd2b5..16afb66 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-destructive.png differ
index 1eea0ed..b666f92 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
+       <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
 </g></svg>
index ab62257..eaf0367 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-invert.png differ
index 9396317..f68c3f0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
+       <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
 </g></svg>
index d17e790..f65e253 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl-progressive.png differ
index 6d2fa9c..f04b019 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
+       <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
 </g></svg>
index 55f2d22..cc20d23 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/lock-rtl.png differ
index 6c4a3c5..60934d7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
+       <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z"/>
 </svg>
index fb1bb0c..10de799 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-invert.png differ
index da6a634..4331694 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
+       <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
 </g></svg>
index 8ede173..7cc731a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr-progressive.png differ
index bdf23f4..26ba090 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
+       <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
 </g></svg>
index 18f82eb..f7cff2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-ltr.png differ
index f2be068..6c989d7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
+       <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
 </svg>
index dcd2f15..3f32ba9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-invert.png differ
index ea35803..5637229 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
+       <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
 </g></svg>
index 642db7d..b13acc9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl-progressive.png differ
index 403bfc9..d07adc4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
+       <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
 </g></svg>
index 0ffb723..e8c437b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logOut-rtl.png differ
index 5f5ebb9..9aaa96b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
+       <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
 </svg>
index 7f04a80..b138b2e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-invert.png differ
index 6d95c87..ff4b49a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+       <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
 </g></svg>
index 2e37da7..a909265 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc-progressive.png differ
index ee16220..36f4473 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+       <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
 </g></svg>
index 80ef2a6..f76968e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-cc.png differ
index 00af35d..a779c6c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+       <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
 </svg>
index 0f8d9a6..87b91a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-invert.png differ
index 27513cc..6519ed9 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
-    <circle cx="12" cy="15" r="3"/>
+       <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+       <circle cx="12" cy="15" r="3"/>
 </g></svg>
index 6aa047c..e55836f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons-progressive.png differ
index bb82d1f..62e44a8 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
-    <circle cx="12" cy="15" r="3"/>
+       <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+       <circle cx="12" cy="15" r="3"/>
 </g></svg>
index c41c247..50c70eb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaCommons.png differ
index f2492ce..252dbbe 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
-    <circle cx="12" cy="15" r="3"/>
+       <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4A7.99 7.99 0 0 0 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+       <circle cx="12" cy="15" r="3"/>
 </svg>
index 0963538..d5612f8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-invert.png differ
index 9c4a955..8d224ca 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+       <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
 </g></svg>
index 6afb2bd..e2e44a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery-progressive.png differ
index 594cdfb..8e588b3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+       <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
 </g></svg>
index 6d3c067..e756118 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikimediaDiscovery.png differ
index c3f99d6..e30d351 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+       <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
 </svg>
index 9d576d0..4a44bb1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-invert.png differ
index fb304f6..79e4ea9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+       <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
 </g></svg>
index bc141ed..88e3b06 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia-progressive.png differ
index 4c7864b..2bc63d7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+       <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
 </g></svg>
index f1d8330..117a62f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/logo-wikipedia.png differ
index 9208f3b..f093db2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+       <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
 </svg>
index 6e0cd01..f8b5265 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-invert.png differ
index 59bb24e..3eb3438 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
+       <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
 </g></svg>
index e856237..950ac34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr-progressive.png differ
index bebac9c..088a739 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
+       <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
 </g></svg>
index 43a97d2..8ab8695 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-ltr.png differ
index 0e5a52e..3c82500 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
+       <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
 </svg>
index 4993f57..a6bfee7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-invert.png differ
index 06c3d10..af6aabd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
+       <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
 </g></svg>
index 6dbb6c5..50f3713 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl-progressive.png differ
index a969ee6..747276d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
+       <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
 </g></svg>
index 36e9cad..55919d5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/map-rtl.png differ
index 835781d..ea81d7a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
+       <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z"/>
 </svg>
index 40f9ee3..4e7cfb7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-invert.png differ
index 99a1c6d..d220f18 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-  <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
+       <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
 </g></svg>
index 73a0cf2..af28b86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin-progressive.png differ
index f7d3323..659cf68 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-  <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
+       <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
 </g></svg>
index 27833cf..e5565c0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPin.png differ
index 8d87943..1394658 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
+       <path d="M19 10c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 21l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 3c-1.6 0-3-1.4-3-3s1.4-3 3-3 3 1.4 3 3-1.4 3-3 3z"/>
 </svg>
index ee5de90..723c89f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-invert.png differ
index eb5e624..6110e48 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-  <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
-  <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
+       <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
+       <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
 </g></svg>
 
index 036a31d..2c7a580 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr-progressive.png differ
index 3e0ea6c..5369d7d 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-  <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
-  <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
+       <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
+       <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
 </g></svg>
 
index d8c1691..2f9fea1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-ltr.png differ
index 9d71335..98c6745 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-  <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
-  <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
+       <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4V4z"/>
+       <path d="M18.9 11c.1.3.1.7.1 1 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-3.9 3.1-7 7-7 .3 0 .7 0 1 .1V7h3.9l.1.1V11h1.9zM15 12c0-1.6-1.4-3-3-3s-3 1.4-3 3 1.4 3 3 3 3-1.4 3-3z"/>
 </svg>
 
index 934d5cc..b2fbd94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-invert.png differ
index a7a14e9..f99765c 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
-    <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
+       <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
+       <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
 </g></svg>
index be7c51e..60f9514 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl-progressive.png differ
index 9bcc436..0c4df52 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
-    <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
+       <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
+       <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
 </g></svg>
index 7cc1f74..82411b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapPinAdd-rtl.png differ
index 03c484a..6b44b30 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
-    <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
+       <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0"/>
+       <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 4c1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3 1.35 3 3 3z"/>
 </svg>
index 075f84e..d9cc3fe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-invert.png differ
index 17d3645..b6fc996 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
+       <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2"/>
 </g></svg>
index 2b26e15..e8dd8f0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr-progressive.png differ
index 2b49b99..57cf942 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
+       <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2"/>
 </g></svg>
index 331fd59..a141cfa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-ltr.png differ
index cb073b9..00a3df4 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
+       <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2"/>
 </svg>
index 75c8dcf..d7f5c6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-invert.png differ
index fbb9cab..d09e152 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+       <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
 </g></svg>
index fc0b2d9..93853c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl-progressive.png differ
index a2f62ff..237513c 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+       <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
 </g></svg>
index 62f1fe9..f8d0222 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/mapTrail-rtl.png differ
index e8b1a08..86573ec 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+       <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+       <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
 </svg>
index 0f64c02..caf7a57 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-invert.png differ
index cb54763..e42edea 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="markup">
-        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
 </g></svg>
index 47ac730..06f9cae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup-progressive.png differ
index af2f0ff..dd0fdac 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="markup">
-        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
 </g></svg>
index c78f418..3aac9ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/markup.png differ
index 7f8c253..cbaaed8 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="markup">
-        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
-    </g>
+       <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+       <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
 </svg>
index b61db4a..b2bbf04 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-invert.png differ
index e87b9bf..709f6b9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="menu">
-        <path id="lines" d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
-    </g>
+       <path d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
 </g></svg>
index f395e3a..3a44414 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu-progressive.png differ
index 6d9edd1..d767fd2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="menu">
-        <path id="lines" d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
-    </g>
+       <path d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
 </g></svg>
index d2278db..98add2e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/menu.png differ
index a33c21c..2f84049 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="menu">
-        <path id="lines" d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
-    </g>
+       <path d="M6 15h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm-1-4v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1zm0-5v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1z"/>
 </svg>
index 33a9800..0502a34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-invert.png differ
index a3aae21..1f100a1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+       <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
 </g></svg>
index fb11ff2..6ee8ba2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr-progressive.png differ
index 36bfd0c..f893cab 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+       <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
 </g></svg>
index 2171c1f..8b88309 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-ltr.png differ
index 842d312..00eb63a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+       <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
 </svg>
index c2d617b..f623ea8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-invert.png differ
index 0a52eec..0a9e781 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
+       <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
 </g></svg>
index a6975d7..7fbc470 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl-progressive.png differ
index 0beb5ee..662b464 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
+       <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
 </g></svg>
index fba7920..ab69641 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/message-rtl.png differ
index 0a22c75..0719619 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
+       <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z"/>
 </svg>
index 38bcc0a..10ea02e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon-invert.png differ
index 7ecd512..c2ac3bf 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
+       <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
 </g></svg>
index 7aef8bd..ef59eb7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/moon.png differ
index bdbf234..2740555 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
+       <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
 </svg>
index 43f819f..c1b9c9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-invert.png differ
index f5b4b22..d8246c1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
-        <path id="bar" d="M16 7h2v11h-2z"/>
-    </g>
+       <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
+       <path id="bar" d="M16 7h2v11h-2z"/>
 </g></svg>
index cbbfa79..d9c9082 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr-progressive.png differ
index d55fc51..e3bcf1b 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
-        <path id="bar" d="M16 7h2v11h-2z"/>
-    </g>
+       <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
+       <path id="bar" d="M16 7h2v11h-2z"/>
 </g></svg>
index 9d35b9e..50506fa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-ltr.png differ
index 98adcf7..15f769f 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
-        <path id="bar" d="M16 7h2v11h-2z"/>
-    </g>
+       <path id="arrow" d="M7.935 7.18l5.302 5.303-5.302 5.303L9.35 19.2l6.715-6.717L9.35 5.767z"/>
+       <path id="bar" d="M16 7h2v11h-2z"/>
 </svg>
index a745af2..7c72005 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-invert.png differ
index 121b08d..32d3903 100644 (file)
@@ -1,8 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-        <path id="bar" d="M6 7h2v11H6z"/>
-    </g>
+       <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
+       <path id="bar" d="M6 7h2v11H6z"/>
 </g></svg>
-
index b999538..89f05b2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl-progressive.png differ
index 11ed934..e66fffc 100644 (file)
@@ -1,8 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-        <path id="bar" d="M6 7h2v11H6z"/>
-    </g>
+       <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
+       <path id="bar" d="M6 7h2v11H6z"/>
 </g></svg>
-
index bcd8a0c..2f50ea6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-end-rtl.png differ
index ee09f7c..1c9fd09 100644 (file)
@@ -1,8 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-end-ltr">
-        <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-        <path id="bar" d="M6 7h2v11H6z"/>
-    </g>
+       <path id="arrow" d="M16.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
+       <path id="bar" d="M6 7h2v11H6z"/>
 </svg>
-
index 6d7e5ec..011ecb5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-invert.png differ
index 2da24a5..654cbd6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
+       <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </g></svg>
index 468ad1b..dd24d1e 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="move-ltr">
-        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
-    </g>
+       <path d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
 </g></svg>
index 5f37c25..ea2af3c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-ltr-progressive.png differ
index dd47881..b46b771 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="move-ltr">
-        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
-    </g>
+       <path d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
 </g></svg>
index 670d84d..94b27c5 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-ltr">
-        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
-    </g>
+       <path d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
 </svg>
index c2d6a84..5b30a57 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-progressive.png differ
index 6274f6f..6200f64 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
+       <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </g></svg>
index 264f3b6..fd90a25 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-    </g>
+       <path d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
 </g></svg>
index 3dbedd5..e7f97e8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl-progressive.png differ
index 32aee25..0333776 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-    </g>
+       <path d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
 </g></svg>
index e401a8f..ef015f2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move-rtl.png differ
index ce5b444..0d969cf 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
-    </g>
+       <path d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.72 6.714 6.71z"/>
 </svg>
index 7071499..acf46cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/move.png differ
index b04ecdd..7e873f7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
+       <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </svg>
index 5e432b0..f1caa0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-invert.png differ
index bc7fedc..496bcfe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
+       <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
 </g></svg>
index 26be088..57ac239 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr-progressive.png differ
index 1ef309b..aa3ca5d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
+       <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
 </g></svg>
index 29563d8..c252652 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-ltr.png differ
index 2d19a78..e3cb34d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
+       <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
 </svg>
index f9a742e..91e5a6f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-invert.png differ
index 41e0401..e8cea5e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
+       <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
 </g></svg>
index 10e2735..90cf003 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl-progressive.png differ
index a877db8..f5b6d97 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
+       <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
 </g></svg>
index c49609f..2ce409b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newWindow-rtl.png differ
index 133442e..dd633b4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
+       <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
 </svg>
index 874ff29..375d949 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-invert.png differ
index 6ec8972..48d7ced 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z" id="line_return"/>
+       <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
 </g></svg>
index 67ec969..40c1f93 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr-progressive.png differ
index b0e6aaf..08b2b98 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z" id="line_return"/>
+       <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
 </g></svg>
index f41eb0c..4cb5216 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-ltr.png differ
index a7e5b12..ee41f86 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z" id="line_return"/>
+       <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
 </svg>
index 99be840..6606771 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-invert.png differ
index c919608..f823e25 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z" id="line_return"/>
+       <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
 </g></svg>
index 8e748e5..cfd066f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl-progressive.png differ
index 1547e82..c9c3c62 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z" id="line_return"/>
+       <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
 </g></svg>
index 93c7e52..7a14bee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newline-rtl.png differ
index 40752fa..a94702a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z" id="line_return"/>
+       <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
 </svg>
index 3f48ede..6fce8fe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-invert.png differ
index 69b737a..ea52c7b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
+       <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
 </g></svg>
index 182f316..1eebe0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr-progressive.png differ
index df59aac..13b42d7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
+       <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
 </g></svg>
index ccd6474..5c3366f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-ltr.png differ
index 4ff5856..297136e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
+       <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
 </svg>
index 85cfa83..5916691 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-invert.png differ
index 74fa337..d7338b2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
+       <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
 </g></svg>
index 8a6d99c..0ef40ec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl-progressive.png differ
index 5533c83..efafb1c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
+       <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
 </g></svg>
index b5df1df..1c75c2e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/newspaper-rtl.png differ
index f9d4e55..261b5ef 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
+       <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z"/>
 </svg>
index a17092e..3bc9337 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-invert.png differ
index d4cad39..6b4bf8e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z" id="noWikiText-rtl"/>
+       <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z"/>
 </g></svg>
index 2ac38b3..6ceda89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr-progressive.png differ
index 3fb2dd9..dc9ebaa 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z" id="noWikiText-rtl"/>
+       <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z"/>
 </g></svg>
index 2623b84..a164b10 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-ltr.png differ
index 2dfa2c7..7cc6b21 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z" id="noWikiText-rtl"/>
+       <path d="M15 13l2 2V5h-3v2h1zM3 3L2 4l1 1v14h3v-2H5V7l2 2v10h3v-2H9v-6l6 6h-1v2h3l3 3 1-1-3-3zm7 4V5H7l2 2zm8-2v2h1v10l2 2V5z"/>
 </svg>
index 1f7ed87..5d40692 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-invert.png differ
index 346c582..fdbf3fd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z" id="noWikiText-rtl"/>
+       <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z"/>
 </g></svg>
index aba76c8..a85c8bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl-progressive.png differ
index 9915009..cbb78e9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z" id="noWikiText-rtl"/>
+       <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z"/>
 </g></svg>
index 4d0ce86..7c9b5a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/noWikiText-rtl.png differ
index 4f275fd..0e407e5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z" id="noWikiText-rtl"/>
+       <path d="M9 13l-2 2V5h3v2H9zM21 3l1 1-1 1v14h-3v-2h1V7l-2 2v10h-3v-2h1v-6l-6 6h1v2H7l-3 3-1-1 3-3zm-7 4V5h3l-2 2zM6 5v2H5v10l-2 2V5z"/>
 </svg>
index de7e529..3b7d003 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright-invert.png differ
index ca20b5a..8721b52 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
 </g></svg>
index 5273b4c..9034da0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notBright.png differ
index af87ff9..88d5963 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
+       <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
 </svg>
index e18795b..5c3a8ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-invert.png differ
index a0f8ddc..1ba74bd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116"><g fill="#fff">
-    <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="alert"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z"/>
 </g></svg>
index 52e8b87..1dca213 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice-progressive.png differ
index d828121..8263773 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116"><g fill="#36c">
-    <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="alert"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z"/>
 </g></svg>
index 114020e..19f6a6b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/notice.png differ
index 8dc4fec..b187ea8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
-    <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="alert"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm-1-5h2V8h-2zm0 3h2v-2h-2z"/>
 </svg>
index 9bfc1a6..db06eb3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-invert.png differ
index 0e9b26a..759acba 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="#fff">
-    <path id="ongoing-conversation" d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
 </g></svg>
index 97f976e..0cdff1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr-progressive.png differ
index 727aa2b..e435d75 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="#36c">
-    <path id="ongoing-conversation" d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
 </g></svg>
index f48650b..147f07a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-ltr.png differ
index e1c9281..3f9f04f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-    <path id="ongoing-conversation" d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M17.3 18h-15L5 15.3V6h15v9.3c0 1.53-1.17 2.7-2.7 2.7zm-7.474-4.35c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405a1.332 1.332 0 0 1-.405-.945c0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z" fill-rule="evenodd"/>
 </svg>
index 5518dd5..ddd940a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-invert.png differ
index 96db3a9..1638270 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="#fff">
-    <path id="ongoing-conversation" d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
 </g></svg>
index 0404c87..e0b25cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl-progressive.png differ
index 1c99c34..80f89ed 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="#36c">
-    <path id="ongoing-conversation" d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
 </g></svg>
index 7ef8cc4..8ef5e63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/ongoingConversation-rtl.png differ
index ac756ef..a666f2a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-    <path id="ongoing-conversation" d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M6.7 18h15L19 15.3V6H4v9.3C4 16.83 5.17 18 6.7 18zm7.474-4.35c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.256-.248.402-.588.405-.945 0-.338-.135-.675-.405-.945a1.334 1.334 0 0 0-.945-.405c-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945z" fill-rule="evenodd"/>
 </svg>
index 6bb2f99..890f68d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-invert.png differ
index efdbe9a..d7ba137 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
 </g></svg>
index 00e8a09..021183f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr-progressive.png differ
index 29e5f42..8f85b1b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
 </g></svg>
index c1cd66a..d994e45 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-ltr.png differ
index c004db0..c097a38 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
+       <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
 </svg>
index eb3d700..b531bee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-invert.png differ
index 3a9d2b5..27f451f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
 </g></svg>
index b0223bf..b2736c8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl-progressive.png differ
index 560abbb..af27fa3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
 </g></svg>
index a1d9454..afd5e90 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outdent-rtl.png differ
index a71bfdc..a9d73fb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
+       <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z"/>
 </svg>
index eceedbd..355fee8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-invert.png differ
index e9fb818..e871f37 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="outline-ltr">
-        <path id="text" d="M5 13h14v6H5v-6z"/>
-        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 13h14v6H5v-6z"/>
+       <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
 </g></svg>
index df70c26..f2552a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr-progressive.png differ
index 662409a..80a4529 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="outline-ltr">
-        <path id="text" d="M5 13h14v6H5v-6z"/>
-        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 13h14v6H5v-6z"/>
+       <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
 </g></svg>
index bcbfa5c..957723b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-ltr.png differ
index 44c1591..4c33bc9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outline-ltr">
-        <path id="text" d="M5 13h14v6H5v-6z"/>
-        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
-    </g>
+       <path id="text" d="M5 13h14v6H5v-6z"/>
+       <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
 </svg>
index 96c4719..5c0adc4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-invert.png differ
index 74689d1..36a23a1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="outline-rtl">
-        <path id="text" d="M19 19H5v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
-    </g>
+       <path id="text" d="M19 19H5v-6h14v6z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
 </g></svg>
index f5af3f3..353e88d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl-progressive.png differ
index b579315..3bbd65b 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="outline-rtl">
-        <path id="text" d="M19 19H5v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
-    </g>
+       <path id="text" d="M19 19H5v-6h14v6z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
 </g></svg>
index d89e06e..a968f28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/outline-rtl.png differ
index c5b19c8..73d9e06 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="outline-rtl">
-        <path id="text" d="M19 19H5v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
-    </g>
+       <path id="text" d="M19 19H5v-6h14v6z"/>
+       <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
 </svg>
index ce979ac..0b7cb77 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-invert.png differ
index f5a1a92..57f8a18 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
 </g></svg>
index c3e1dd8..c3fdf60 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr-progressive.png differ
index e8aa296..85b6ec5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
 </g></svg>
index ef33251..08ed9e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-ltr.png differ
index e9704fd..9018c78 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12V8l6 4-6 4z"/>
 </svg>
index 028afa3..16b120d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-invert.png differ
index 5904dcb..3e250f6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
+       <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
 </g></svg>
index 8a6f4dd..b3d77ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl-progressive.png differ
index 13e1765..c4f8ebb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
+       <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
 </g></svg>
index a8c59a9..ea8a49a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/play-rtl.png differ
index ec0dcf2..f2c31fe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
+       <path d="M12 4c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V8l-6 4 6 4z"/>
 </svg>
index ca07bcc..3d8eef6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-invert.png differ
index ae4352f..4856e5a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
+       <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
 </g></svg>
index e37b3ea..a331f9a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr-progressive.png differ
index fb372de..ca7b58f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
+       <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
 </g></svg>
index a7f6717..3af798c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-ltr.png differ
index 7081606..6ea36b3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
+       <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
 </svg>
index 95ef54a..e1ff3e7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-invert.png differ
index d045ff9..5979cde 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
+       <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
 </g></svg>
index 0a0a198..5a99bb2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl-progressive.png differ
index 91ccc6f..bb2447b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
+       <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
 </g></svg>
index 6e5b175..4463fdb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/printer-rtl.png differ
index d6188eb..b426387 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
+       <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
 </svg>
index 10c46ef..b4e5056 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-invert.png differ
index 9bee56b..58f92a9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
+       <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
 </g></svg>
index ea2ec8c..fc3c22f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin-progressive.png differ
index 1cc4d60..97b4cc4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
+       <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
 </g></svg>
index 27d49e2..0f3728c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/pushPin.png differ
index b852cd0..5deb42e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
+       <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
 </svg>
index 0c5f4b2..153fb7a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-invert.png differ
index 659f4fe..133076f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="puzzle-piece" d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
+       <path d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
 </g></svg>
index 45d4845..719ce9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle-progressive.png differ
index de9f162..114959c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="puzzle-piece" d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
+       <path d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
 </g></svg>
index 6ce22fe..80a650d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/puzzle.png differ
index cfcbbcc..2d5bbf5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="puzzle-piece" d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
+       <path d="M19.46 10.417c-.351-.404-1.641-.501-1.983-.162-.769.758-1.926 1.308-1.952.162.088-2.081.818-3.743.818-3.743a.46.46 0 0 0-.463-.456s-1.586-.111-3.59-.164l-1.25-.001c-.127.406.274 1.09.782 1.604.339.344.242 1.633-.162 1.984-.393.34-1.197.539-1.662.539-.445 0-1.222-.158-1.612-.479-.438-.356-.332-1.686.02-2.044.47-.476.838-1.185.721-1.606h-.483c-2.074.05-3.514.167-3.514.167a.46.46 0 0 0-.463.456s-.558 2.58-.558 5.348c0 2.762.558 5.331.558 5.331a.46.46 0 0 0 .463.457s2.615.19 5.493.19c2.723 0 5.258-.19 5.258-.19a.46.46 0 0 0 .463-.457s-.739-1.73-.824-3.869c.031-1.004 1.255-.506 1.958.188.356.353 1.688.458 2.045.021.318-.392.477-1.169.477-1.614 0-.465-.199-1.269-.54-1.662z"/>
 </svg>
index 46ac181..f222d05 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-invert.png differ
index 7c9feea..61684b9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="quotes">
-        <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-    </g>
-    <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </g></svg>
index ce64429..9c9e418 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr-progressive.png differ
index c64995d..affe1ad 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="quotes">
-        <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-    </g>
-    <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </g></svg>
index 0252b74..293e8a8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-ltr.png differ
index dc366b7..53b66b3 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes">
-        <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-    </g>
-    <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M6.9 8.4c-.446.55-1.974 2.6-1.9 5.7V17h4.7c.9 0 1.6-.7 1.6-1.6V11H8.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <use transform="translate(8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </svg>
index 6637ca2..0a8e2f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-invert.png differ
index baae1fa..ee01a86 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="quotes">
-        <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-    </g>
-    <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </g></svg>
index dff8962..ee78850 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl-progressive.png differ
index 255faad..6110e3a 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="quotes">
-        <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-    </g>
-    <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </g></svg>
index 7bcc7c7..3cd13e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotes-rtl.png differ
index e652b31..9c6d523 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes">
-        <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-    </g>
-    <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
+       <path id="quote" d="M17.1 8.4c.446.55 1.9 2.6 1.9 5.7V17h-4.7c-.9 0-1.6-.7-1.6-1.6V11h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <use transform="translate(-8)" id="quote2" width="24" height="24" xlink:href="#quote"/>
 </svg>
index 40e3a06..50dd71f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-invert.png differ
index 0d79616..65fac57 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="quotes-add">
-        <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-        <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
-        <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
-    </g>
+       <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
+       <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
 </g></svg>
index f36a0ca..6060805 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr-progressive.png differ
index 755708d..4bf08b0 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="quotes-add">
-        <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-        <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
-        <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
-    </g>
+       <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
+       <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
 </g></svg>
index e1a0c4b..e433721 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-ltr.png differ
index 6704c51..0bb7156 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes-add">
-        <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
-        <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
-        <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
-    </g>
+       <path id="quote" d="M5.9 10.4c-.446.55-1.974 2.6-1.9 5.7V19h4.7c.9 0 1.593-.7 1.6-1.6V13H7.2s.05-.74.6-1.4c.453-.543 1-.9 1.6-1.2.2-.1.47-.212.6-.5.127-.282.2-.5.2-.9v-.6c-1 .2-1.744.197-2.6.6-.856.403-1.272.873-1.7 1.4z"/>
+       <path id="quote2" d="M15 9.344c-.476.32-.78.677-1.094 1.062A8.76 8.76 0 0 0 12 16.094V19h4.688a1.6 1.6 0 0 0 1.625-1.594V13H15V9.344z"/>
+       <path id="add" d="M18 6V2h-2v4h-4v2h4v4h2V8h4V6z"/>
 </svg>
index e15cc90..f9a9c62 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-invert.png differ
index 2a839f0..d734dd5 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="quotes-add">
-        <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-        <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
-        <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
-    </g>
+       <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
+       <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
 </g></svg>
index f824259..32ac463 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl-progressive.png differ
index a5c10b4..44858a1 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="quotes-add">
-        <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-        <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
-        <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
-    </g>
+       <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
+       <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
 </g></svg>
index 0ef9d01..39f9e1b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/quotesAdd-rtl.png differ
index d972ad3..0f9eb59 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="quotes-add">
-        <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
-        <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
-        <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
-    </g>
+       <path id="quote" d="M18.097 10.4c.446.55 1.974 2.6 1.9 5.7V19h-4.7c-.9 0-1.593-.7-1.6-1.6V13h3.1s-.05-.74-.6-1.4c-.453-.543-1-.9-1.6-1.2-.2-.1-.47-.212-.6-.5-.127-.282-.2-.5-.2-.9v-.6c1 .2 1.744.197 2.6.6.856.403 1.272.873 1.7 1.4z"/>
+       <path id="quote2" d="M8.997 9.344c.476.32.782.677 1.094 1.062A8.758 8.758 0 0 1 12 16.094V19H7.31c-.9 0-1.618-.694-1.625-1.594V13h3.312V9.344z"/>
+       <path id="add" d="M5.997 6V2h2v4h4v2h-4v4h-2V8h-4V6z"/>
 </svg>
index 0206be9..020b318 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-invert.png differ
index 0cb419e..d12355e 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
-        <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
-    </g>
+       <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
+       <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
+       <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
+       <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
 </g></svg>
index af85e03..cb2f1e5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression-progressive.png differ
index 5e2894b..883a193 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
-        <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
-    </g>
+       <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
+       <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
+       <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
+       <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
 </g></svg>
index f27e421..7a833f0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/regular-expression.png differ
index d5fcfcf..b3539a5 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
-        <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
-    </g>
+       <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777A6.886 6.886 0 0 1 4.764 7H6.23a7.923 7.923 0 0 0-1.25 2.374 8.563 8.563 0 0 0 .007 5.314c.29.85.7 1.622 1.23 2.312h-1.45a6.53 6.53 0 0 1-1.314-2.223 8.126 8.126 0 0 1-.45-2.732"/>
+       <path id="dot" d="M10 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
+       <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.47-1.992.14 1.307 1.74-1.33.71-.914-1.833-.8 1.822-1.38-.698 1.296-1.74-1.98-.152.23-1.464 2.14.61-.24-2.158h1.534"/>
+       <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744A6.51 6.51 0 0 1 19.236 17h-1.453a8.017 8.017 0 0 0 1.225-2.31c.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66a7.913 7.913 0 0 0-1.248-2.374h1.465a6.764 6.764 0 0 1 1.313 2.28c.3.86.45 1.782.45 2.764"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.png
new file mode 100644 (file)
index 0000000..10a07af
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b13fc95
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M14.603 9.997L21 13.235V6.302L18.702 7.63c-4.17-6.396-14.075-3.87-14.676 3.74-.6 7.61 8.784 11.66 13.907 5.997L16.6 16.16c-3.957 4.372-11.205 1.277-10.786-4.603.42-5.88 8.034-7.916 11.33-3.027z"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.png
new file mode 100644 (file)
index 0000000..7d78c56
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr-progressive.svg
new file mode 100644 (file)
index 0000000..12f6c36
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M14.603 9.997L21 13.235V6.302L18.702 7.63c-4.17-6.396-14.075-3.87-14.676 3.74-.6 7.61 8.784 11.66 13.907 5.997L16.6 16.16c-3.957 4.372-11.205 1.277-10.786-4.603.42-5.88 8.034-7.916 11.33-3.027z"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.png
new file mode 100644 (file)
index 0000000..5d233fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-ltr.svg
new file mode 100644 (file)
index 0000000..174bd4b
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M14.603 9.997L21 13.235V6.302L18.702 7.63c-4.17-6.396-14.075-3.87-14.676 3.74-.6 7.61 8.784 11.66 13.907 5.997L16.6 16.16c-3.957 4.372-11.205 1.277-10.786-4.603.42-5.88 8.034-7.916 11.33-3.027z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.png
new file mode 100644 (file)
index 0000000..3f2a610
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-invert.svg
new file mode 100644 (file)
index 0000000..2a16f28
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+       <path d="M9.397 9.997L3 13.235V6.302L5.298 7.63c4.17-6.396 14.075-3.87 14.676 3.74.6 7.61-8.784 11.66-13.907 5.997L7.4 16.16c3.957 4.372 11.205 1.277 10.786-4.603-.42-5.88-8.034-7.916-11.33-3.027z"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.png
new file mode 100644 (file)
index 0000000..facfb88
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl-progressive.svg
new file mode 100644 (file)
index 0000000..ce59b71
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+       <path d="M9.397 9.997L3 13.235V6.302L5.298 7.63c4.17-6.396 14.075-3.87 14.676 3.74.6 7.61-8.784 11.66-13.907 5.997L7.4 16.16c3.957 4.372 11.205 1.277 10.786-4.603-.42-5.88-8.034-7.916-11.33-3.027z"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.png
new file mode 100644 (file)
index 0000000..a3c996a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/reload-rtl.svg
new file mode 100644 (file)
index 0000000..e9ae9e6
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M9.397 9.997L3 13.235V6.302L5.298 7.63c4.17-6.396 14.075-3.87 14.676 3.74.6 7.61-8.784 11.66-13.907 5.997L7.4 16.16c3.957 4.372 11.205 1.277 10.786-4.603-.42-5.88-8.034-7.916-11.33-3.027z"/>
+</svg>
index 4b2913b..f644308 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-invert.png differ
index 3c02eb4..98d8fdc 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
-    </g>
+       <path d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
 </g></svg>
index 50a7305..253368a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr-progressive.png differ
index efc8223..27b9dc1 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
-    </g>
+       <path d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
 </g></svg>
index e8e99f8..9a8ffbf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-ltr.png differ
index ebc654a..6c35789 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
-    </g>
+       <path d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
 </svg>
index 0409aa4..bbd9626 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-invert.png differ
index 8df7b16..9516992 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="search">
-        <path id="magnifying-glass" d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
-    </g>
+       <path d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
 </g></svg>
index 4f49e18..8b4c3a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl-progressive.png differ
index 07f23a8..cf55ade 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="search">
-        <path id="magnifying-glass" d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
-    </g>
+       <path d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
 </g></svg>
index 3ab96be..8a6a5d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/search-rtl.png differ
index c51d4cb..5e664aa 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
-    </g>
+       <path d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
 </svg>
index a74063d..861f5c3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-invert.png differ
index 1b24dbb..707c675 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
-    </g>
+       <path d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
 </g></svg>
index f29d856..47d59ae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link-progressive.png differ
index ee69fc4..4ca7e41 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#36c">
-    <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
-    </g>
+       <path d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
 </g></svg>
index 8a44a92..96dca53 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/secure-link.png differ
index 453d166..d4dccd7 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
-    </g>
+       <path d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.49-.485 1.45-.487 1.94-.002.543.546.545 1.536.545 1.55V5H3.998z"/>
 </svg>
index 34c6afe..54c1e9f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-invert.png differ
index 630835a..d082844 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="settings">
-        <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
-    </g>
+       <path d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
 </g></svg>
index 46011d2..b3a2e5c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings-progressive.png differ
index a93d312..9e4e608 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="settings">
-        <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
-    </g>
+       <path d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
 </g></svg>
index 1c8e587..103532a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/settings.png differ
index 3245dbe..6c8acee 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="settings">
-        <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
-    </g>
+       <path d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1z"/>
 </svg>
index 4538011..430786e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-invert.png differ
index b783779..751d6c1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+       <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
 </g></svg>
index f7d6da8..eb8c387 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr-progressive.png differ
index 366aafb..7b9e784 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+       <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
 </g></svg>
index f68a7bf..30f9f59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-ltr.png differ
index 03b34cf..0a55301 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+       <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
 </svg>
index a99fe52..3195d2f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-invert.png differ
index ffbf189..0714207 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
+       <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
 </g></svg>
index b5e08ca..94f9257 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl-progressive.png differ
index 3131849..4833ce7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
+       <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
 </g></svg>
index 9166e8d..104e115 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/signature-rtl.png differ
index 326281a..03863e6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
+       <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z"/>
 </svg>
index 1b597da..6445505 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-invert.png differ
index 3f82d69..2a4ab8a 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 6h5l-2.5 3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 6h5l-2.5 3z"/>
 </g></svg>
index 2878f23..aa4d92c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr-progressive.png differ
index 67bf3a9..50d7cc5 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 6h5l-2.5 3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 6h5l-2.5 3z"/>
 </g></svg>
index a9b29d8..5739a4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-ltr.png differ
index 9431252..7d8d438 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
-    <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
-    <path id="arrow" d="M15 6h5l-2.5 3z"/>
+       <path id="big-a" d="M9.666 6H8.294l-4.48 12H5.52l1.493-4h4l1.507 4h1.666zm-2.28 7l1.617-4.333L10.637 13h-3.25z"/>
+       <path id="small-a" d="M17.828 12h-.686l-2.24 6h.853l.747-2h2l.753 2h.833zm-1.14 3.5l.81-2.167.816 2.167H16.69z"/>
+       <path id="arrow" d="M15 6h5l-2.5 3z"/>
 </svg>
index f94184a..3fd7aa7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-invert.png differ
index 3d99520..97abd03 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 6H4l2.5 3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 6H4l2.5 3z"/>
 </g></svg>
index 99abfdb..065bd5c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl-progressive.png differ
index 2ca5200..94c7dfe 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 6H4l2.5 3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 6H4l2.5 3z"/>
 </g></svg>
index 006bd2b..7ebd3ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smaller-rtl.png differ
index d2d2858..7a49a3a 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
-    <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
-    <path id="arrow" d="M9 6H4l2.5 3z"/>
+       <path id="big-a" d="M14.334 6h1.372l4.48 12H18.48l-1.493-4h-4l-1.507 4H9.814zm2.28 7l-1.617-4.333L13.363 13h3.25z"/>
+       <path id="small-a" d="M6.172 12h.686l2.24 6h-.853L7.5 16H5.497l-.753 2h-.833zm1.14 3.5l-.81-2.166-.816 2.166h1.625z"/>
+       <path id="arrow" d="M9 6H4l2.5 3z"/>
 </svg>
index dec125e..ad49a29 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr-invert.png differ
index 146a212..a94be5e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
+       <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
 </g></svg>
index b38dca3..887b35d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-ltr.png differ
index 446d10a..f414ec5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
+       <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
 </svg>
index 9aba246..461d572 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl-invert.png differ
index 960793c..218ad19 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
+       <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
 </g></svg>
index b9864ef..8da5d7a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/smallerText-rtl.png differ
index ebcea4d..d1db749 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
+       <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
 </svg>
index b7c9996..63ec636 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-invert.png differ
index b234e63..c4c307b 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
-    </g>
+       <path d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
 </g></svg>
index 1ce4549..62bba36 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter-progressive.png differ
index 091063f..c946690 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
-    </g>
+       <path d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
 </g></svg>
index 9b02a41..27ec94c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/specialCharacter.png differ
index 5cba080..267abcb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
-    </g>
+       <path d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327a7.232 7.232 0 0 0-.19 1.7c0 .512.06 1 .18 1.46.12.46.31.87.567 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.455.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99a4.428 4.428 0 0 1-.89-1.4 4.78 4.78 0 0 1-.32-1.778c0-.82.13-1.537.394-2.15a3.97 3.97 0 0 1 1.163-1.54c.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.9.92 1.16 1.54.27.614.404 1.33.404 2.15a4.79 4.79 0 0 1-.32 1.78 4.35 4.35 0 0 1-.9 1.397c-.38.4-.83.732-1.355.99-.526.255-.708.43-1.337.523l-.092.894h.66l.448-.01.75-.034.606-.044.4-.053.534-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.698 2.002-1.365.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.07-1.186-.198-1.7a3.175 3.175 0 0 0-.66-1.326c-.31-.37-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
 </svg>
index 6409de2..5ceeb74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-invert.png differ
index 5fa3f49..05a52be 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+       <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
 </g></svg>
index 049b6ca..fb970fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr-progressive.png differ
index d196d55..a5329c1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+       <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
 </g></svg>
index 2eedf9f..4ee46ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-ltr.png differ
index 83d47c1..624a6de 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+       <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
 </svg>
index e85fd44..c6ca3b3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-invert.png differ
index 2da483c..2293a36 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
+       <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
 </g></svg>
index 0524649..77761f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl-progressive.png differ
index 43b2364..32f7249 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
+       <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
 </g></svg>
index 0d14443..e4d24ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubble-rtl.png differ
index e7dd668..5459387 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
+       <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z"/>
 </svg>
index 9575bdb..8f1f997 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-invert.png differ
index 843469e..e4c228a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
 </g></svg>
index 19a88b5..271b064 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr-progressive.png differ
index bd4128b..43f1f42 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
 </g></svg>
index aafac18..c13d5bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-ltr.png differ
index c7134c3..64c1c92 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm8 3h1v3h3v1h-3v3h-1v-3h-3v-1h3V9z"/>
 </svg>
index 0520123..e20f373 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-invert.png differ
index d0e2cc4..b465c83 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
+       <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
 </g></svg>
index 2140a27..6feccad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl-progressive.png differ
index a35ff20..79f42f0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
+       <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
 </g></svg>
index feff2ba..5c1ce20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbleAdd-rtl.png differ
index 08462e0..a746a04 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
+       <path d="M2 6v11c0 1.7 1.3 3 3 3h17l-3-3V6H2zm8 3h1v3h3v1h-3v3h-1v-3H7v-1h3V9z"/>
 </svg>
index 24a8e4e..6eb6a20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-invert.png differ
index a9ea6c8..311d4f3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+       <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
 </g></svg>
index 8b7029b..aa21612 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr-progressive.png differ
index 1c79ef6..096ee66 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+       <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
 </g></svg>
index f2e0564..99a56c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-ltr.png differ
index d683218..92a4f9e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+       <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
 </svg>
index 4b9ca3a..b614702 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-invert.png differ
index c8b684a..c7fdbdb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
+       <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
 </g></svg>
index 856fd7b..f90eee3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl-progressive.png differ
index fe65227..15bf2e8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
+       <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
 </g></svg>
index 9c67f3f..055919e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/speechBubbles-rtl.png differ
index db548a4..12f2472 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
+       <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z"/>
 </svg>
index 1cdcf99..c2b6678 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-constructive.png differ
index 407d2da..6a38560 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </g></svg>
index 7c949a6..9fc6456 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-invert.png differ
index 0cbd1d0..2af4723 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </g></svg>
index 1cdcf99..c2b6678 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star-progressive.png differ
index 407d2da..6a38560 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </g></svg>
index 36b6a1f..980083d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/star.png differ
index 54ba77a..12cc4ac 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+       <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
index 2a7d081..3b324a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-invert.png differ
index c57bd4a..79360f8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
 </g></svg>
index 20e375d..7e94d92 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop-progressive.png differ
index e4d2fca..f04f76d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
 </g></svg>
index e57bede..b4ff1b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stop.png differ
index 3fa3128..f7c7c63 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
+       <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 11.1H9v-6h6v6z"/>
 </svg>
index ebabd3b..38824ed 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-invert.png differ
index e277ae3..764a855 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
 </g></svg>
index a3189f4..c33e9e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a-progressive.png differ
index a957e80..5638dbc 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
 </g></svg>
index 279d1f7..ed9e75f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-a.png differ
index 070d785..8e4ff2e 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
 </svg>
index 2a29a6e..b7fe4bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-invert.png differ
index a8301f2..8aa62f4 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
-    </g>
+       <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
+       <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
 </g></svg>
index 0b215bd..2ad3058 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s-progressive.png differ
index f6f5331..90f65a4 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
-    </g>
+       <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
+       <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
 </g></svg>
index 21b9baa..71772d3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-s.png differ
index 171f8f3..25ebee0 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
-    </g>
+       <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
+       <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.47 0-.962-.074-1.462-.24a7.288 7.288 0 0 1-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.714-.148-1.202-.352-1.404-.54-.206-.202-.313-.484-.313-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.19-.383-1.69-.48c-.5-.097-.983-.15-1.467-.15z"/>
 </svg>
index 5ed9097..cbf1066 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-invert.png differ
index f34be15..f936982 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="y" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
 </g></svg>
index a96d906..7ada2d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y-progressive.png differ
index 778a941..c231be1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="y" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
 </g></svg>
index d769468..01a64d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/strikethrough-y.png differ
index 2fdbc87..fab1452 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
-    </g>
+       <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+       <path id="y" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
 </svg>
index 41fabd9..4d7d825 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-invert.png differ
index 4b2040c..06b95ee 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
+       <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </g></svg>
index 7f4954c..f95d85a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr-progressive.png differ
index a7ddaac..b3a26d0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
+       <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </g></svg>
index 5423b36..539ddf1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-ltr.png differ
index 2112bb2..e7cb5c0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
+       <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </svg>
index fc723a6..a83c8ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-invert.png differ
index af6e715..246bd62 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
+       <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
 </g></svg>
index 5e82b68..2225ccf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl-progressive.png differ
index e835c21..372c205 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
+       <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
 </g></svg>
index 0ff3d7c..1224d28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeFlow-rtl.png differ
index 39790a9..90749aa 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
+       <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
 </svg>
index 453cb73..42c8393 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-invert.png differ
index 91fcd8f..3da8966 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
+       <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
 </g></svg>
index cc2cd8c..57362dc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr-progressive.png differ
index 59342a5..7589d7d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
+       <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
 </g></svg>
index ce15bd8..e939455 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-ltr.png differ
index 767d6cd..e3ed720 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
+       <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
 </svg>
index 458015c..50e50d3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-invert.png differ
index dae554e..22a09c4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
+       <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
 </g></svg>
index 9180978..1768d7e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl-progressive.png differ
index 6b94663..7408cdd 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
+       <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
 </g></svg>
index 82ca2bf..21a30a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeSummary-rtl.png differ
index 4d16337..f8f77af 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
+       <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
 </svg>
index 629ea35..578fa25 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-invert.png differ
index 7b2ec17..41f864f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
+       <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
 </g></svg>
index cee45e8..901ee28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr-progressive.png differ
index d027539..a648821 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
+       <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
 </g></svg>
index b482d3e..1993d7e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-ltr.png differ
index d7c202e..33e474f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
+       <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
 </svg>
index f81e503..67ed8c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-invert.png differ
index 2e75158..b6f9bf6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
+       <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
 </g></svg>
index 424aa99..527ad58 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl-progressive.png differ
index 3c27eaf..70df769 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
+       <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
 </g></svg>
index 516bc2c..9b5924b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/stripeToC-rtl.png differ
index 0859be6..82bd5dc 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
+       <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
 </svg>
index f7f291e..905d8e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-invert.png differ
index b6f5d6d..06b0960 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </g></svg>
index 55df817..208a75c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr-progressive.png differ
index 11dc32f..f1cfdd2 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </g></svg>
index c2cf4cf..20354ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-ltr.png differ
index fbb0c3c..48d958f 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </svg>
index 56ad252..9439b19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-invert.png differ
index b1608f9..905b476 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </g></svg>
index bf343f1..2fadca8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl-progressive.png differ
index f0c5d31..dacca7d 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </g></svg>
index b1ee51b..79887f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subscript-rtl.png differ
index 91a71ec..94db14b 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </svg>
index 4e58b70..904c3b6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-invert.png differ
index d76eb3c..64b895e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
        <path d="M18 13H6v-2h12"/>
 </g></svg>
index 1732972..a528c32 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract-progressive.png differ
index 24795ac..6ec223a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
        <path d="M18 13H6v-2h12"/>
 </g></svg>
index bd719cb..525845a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/subtract.png differ
index a79f0b5..c796f42 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M18 13H6v-2h12"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.png
deleted file mode 100644 (file)
index 2bc944a..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-invert.svg
deleted file mode 100644 (file)
index 498df82..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
-    <circle cx="12" cy="11" r="4"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.png
deleted file mode 100644 (file)
index dbe14b5..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr-progressive.svg
deleted file mode 100644 (file)
index afd390c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
-    <circle cx="12" cy="11" r="4"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.png
deleted file mode 100644 (file)
index 0c00745..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-ltr.svg
deleted file mode 100644 (file)
index 4bde183..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
-    <circle cx="12" cy="11" r="4"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.png
deleted file mode 100644 (file)
index 7ac54ff..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-invert.svg
deleted file mode 100644 (file)
index f932701..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3H3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z"/>
-    <circle cx="12" cy="11" r="4" transform="matrix(-1 0 0 1 24 0)"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.png
deleted file mode 100644 (file)
index 5ee10ee..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl-progressive.svg
deleted file mode 100644 (file)
index 72754d4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3H3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z"/>
-    <circle cx="12" cy="11" r="4" transform="matrix(-1 0 0 1 24 0)"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.png b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.png
deleted file mode 100644 (file)
index 77c7806..0000000
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.svg b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/sun-rtl.svg
deleted file mode 100644 (file)
index 868334e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3H3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z"/>
-    <circle cx="12" cy="11" r="4" transform="matrix(-1 0 0 1 24 0)"/>
-</svg>
index abb7229..90c8505 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-invert.png differ
index 430abf0..91275b8 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </g></svg>
index 37c45c0..26806e5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr-progressive.png differ
index 80495b8..941a517 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </g></svg>
index 8df4609..5e71d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-ltr.png differ
index 45abfda..298eff3 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </svg>
index ee76ff4..73855af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-invert.png differ
index ea8ea9c..38abfeb 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </g></svg>
index 2c63a82..173fb1a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl-progressive.png differ
index e742990..fe7fc0d 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </g></svg>
index 48bfd68..1842f37 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/superscript-rtl.png differ
index 33b5814..31c58b0 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </svg>
index 9d50a42..14af6b4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-invert.png differ
index 360fbe1..08b4054 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-caption">
-        <path id="caption" d="M6 6h12v3H6z"/>
-        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
-    </g>
+       <path id="caption" d="M6 6h12v3H6z"/>
+       <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
 </g></svg>
index ef657ee..7178941 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption-progressive.png differ
index 02faf85..0fc60ea 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-caption">
-        <path id="caption" d="M6 6h12v3H6z"/>
-        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
-    </g>
+       <path id="caption" d="M6 6h12v3H6z"/>
+       <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
 </g></svg>
index 80b474d..f6e5a89 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-caption.png differ
index 6b7edc6..05098a3 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-caption">
-        <path id="caption" d="M6 6h12v3H6z"/>
-        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
-    </g>
+       <path id="caption" d="M6 6h12v3H6z"/>
+       <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
 </svg>
index b97ac0a..990e20d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-invert.png differ
index 9a93e24..b47c120 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-insert-column-ltr">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h2v14H5z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M5 5h2v14H5z"/>
 </g></svg>
index 5565c15..c5efef5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr-progressive.png differ
index 1f560bb..2fb1f7d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-insert-column-ltr">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h2v14H5z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M5 5h2v14H5z"/>
 </g></svg>
index fe3eb18..1ae5594 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-ltr.png differ
index a67ed20..c5c1383 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-column-ltr">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h2v14H5z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M5 5h2v14H5z"/>
 </svg>
index c10abc5..0eb521f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-invert.png differ
index 7c54e2c..1d7b058 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-insert-column-rtl">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M17 5h2v14h-2z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M17 5h2v14h-2z"/>
 </g></svg>
index d974a07..1291cca 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl-progressive.png differ
index 3e178ee..8103a60 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-insert-column-rtl">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M17 5h2v14h-2z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M17 5h2v14h-2z"/>
 </g></svg>
index ddaafe9..b2772a7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-column-rtl.png differ
index dee782e..2f345f1 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-column-rtl">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M17 5h2v14h-2z" id="column"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="column" d="M17 5h2v14h-2z"/>
 </svg>
index ea1a5d8..7ea92dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-invert.png differ
index 2df3cfc..623fa16 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-insert-row-after">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 17h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 17h14v2H5z"/>
 </g></svg>
index ba1e54c..84207fb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after-progressive.png differ
index f85c5a3..8781c87 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-insert-row-after">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 17h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 17h14v2H5z"/>
 </g></svg>
index 31a2306..fe81484 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-after.png differ
index ad9d86d..27062ec 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-row-after">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 17h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 17h14v2H5z"/>
 </svg>
index a54f05c..8318a19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-invert.png differ
index 5d529f1..22d14d9 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-insert-row-before">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 5h14v2H5z"/>
 </g></svg>
index 0a54444..d688570 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before-progressive.png differ
index f26feef..319518a 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-insert-row-before">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 5h14v2H5z"/>
 </g></svg>
index 2477475..7023004 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-insert-row-before.png differ
index e9dfe04..6c5ead4 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert-row-before">
-        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
-        <path d="M5 5h14v2H5z" id="row"/>
-    </g>
+       <path id="plus" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z"/>
+       <path id="row" d="M5 5h14v2H5z"/>
 </svg>
index 4c19203..472df8e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-invert.png differ
index 85a3f97..78a49ba 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-insert">
-        <path id="table" d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
-    </g>
+       <path d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
 </g></svg>
index b24537d..a2a795c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-invert.png differ
index 102a686..b37bfab 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="table-merge-cells">
-        <g id="merge-cell-left">
-            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
-            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
-        </g>
-        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
-    </g>
+       <g id="merge-cell-left">
+               <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+               <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+       </g>
+       <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
 </g></svg>
index a75b2a0..fd972a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells-progressive.png differ
index c2c5a7e..76d4376 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-merge-cells">
-        <g id="merge-cell-left">
-            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
-            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
-        </g>
-        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
-    </g>
+       <g id="merge-cell-left">
+               <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+               <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+       </g>
+       <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
 </g></svg>
index e6b2da3..1b5279b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-merge-cells.png differ
index 3ffb9e5..2aa4f62 100644 (file)
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-merge-cells">
-        <g id="merge-cell-left">
-            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
-            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
-        </g>
-        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
-    </g>
+       <g id="merge-cell-left">
+               <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+               <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+       </g>
+       <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
 </svg>
index b364a8f..d3b48d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table-progressive.png differ
index 3441e65..d32a976 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="table-insert">
-        <path id="table" d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
-    </g>
+       <path d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
 </g></svg>
index f4008f6..3858c8c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/table.png differ
index b5733fb..574550f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="table-insert">
-        <path id="table" d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
-    </g>
+       <path d="M4 6v11h15V6zm1 3h6v3H5zm7 0h6v3h-6zm-7 4h6v3H5zm7 0h6v3h-6z"/>
 </svg>
index 6372f39..db97788 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-constructive.png differ
index ce04687..3007bb1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </g></svg>
index cf85c4d..f3ca6e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-destructive.png differ
index cb00c1c..16b1b66 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </g></svg>
index fd5956c..c1739ec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-invert.png differ
index a4f38b4..e97ba48 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </g></svg>
index 6372f39..db97788 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-progressive.png differ
index ce04687..3007bb1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </g></svg>
index 24dff07..4a14d87 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-warning.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag-warning.png differ
index bf31a97..de2cc91 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ff5d00">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </g></svg>
index 82461ef..08bd09a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tag.png differ
index 7a211a3..34838e2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
+       <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z"/>
 </svg>
index cba38d2..94ca898 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-invert.png differ
index 4d0e4a5..3e4b740 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="template-add">
-        <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
-        <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
-    </g>
+       <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
+       <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
 </g></svg>
index 7034110..efd3609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr-progressive.png differ
index 8b6325e..66f1987 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="template-add">
-        <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
-        <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
-    </g>
+       <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
+       <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
 </g></svg>
index f3ce49e..7039ac4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-ltr.png differ
index 8cd95e0..8f80590 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="template-add">
-        <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
-        <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
-    </g>
+       <path id="add" d="M23 7h-4V3h-2v4h-4v2h4v4h2V9h4z"/>
+       <path id="template" d="M18 14v4H6c-1.1 0-2-.9-2-2V8h8V7H3v9c0 1.7 1.3 3 3 3h13v-5z"/>
 </svg>
index eb8d08d..bc8016b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-invert.png differ
index 3277986..0326b71 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="template-add">
-        <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
-        <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
-    </g>
+       <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
+       <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
 </g></svg>
index 7514278..4f82feb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl-progressive.png differ
index ea7a4ce..df7b40e 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="template-add">
-        <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
-        <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
-    </g>
+       <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
+       <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
 </g></svg>
index 448caf4..a03461a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/templateAdd-rtl.png differ
index 62b30f5..747c246 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="template-add">
-        <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
-        <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
-    </g>
+       <path id="add" d="M1 7h4V3h2v4h4v2H7v4H5V9H1z"/>
+       <path id="template" d="M6 14v4h12c1.1 0 2-.9 2-2V8h-8V7h9v9c0 1.7-1.3 3-3 3H5v-5z"/>
 </svg>
index 44394d9..2cedf38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-invert.png differ
index 8824e9c..fcc68ee 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z" id="text-dir-ltr"/>
+       <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
 </g></svg>
index 4e9b0fc..d7e8f59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright-progressive.png differ
index 968e13b..ee11dc4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z" id="text-dir-ltr"/>
+       <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
 </g></svg>
index fede39a..2cffb3e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-lefttoright.png differ
index 83dd769..5a00b85 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z" id="text-dir-ltr"/>
+       <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
 </svg>
index d5b78c2..5b8d80c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-invert.png differ
index 12544d9..05046f1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z" id="text-dir-rtl"/>
+       <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
 </g></svg>
index 955a65f..855ae4d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft-progressive.png differ
index 73ebe60..68f7e23 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z" id="text-dir-rtl"/>
+       <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
 </g></svg>
index 9f60ed5..48ebdb2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-dir-righttoleft.png differ
index 78cb85b..959b20c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z" id="text-dir-rtl"/>
+       <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
 </svg>
index f173ad7..a72680f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-invert.png differ
index 318c168..a8a7c67 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
-        <path id="underline" d="M6 19h12v1H6v-1z"/>
-    </g>
+       <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+       <path id="underline" d="M6 19h12v1H6v-1z"/>
 </g></svg>
index 5cbdfa4..a762301 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style-progressive.png differ
index 6f17920..fe0bb44 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
-        <path id="underline" d="M6 19h12v1H6v-1z"/>
-    </g>
+       <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+       <path id="underline" d="M6 19h12v1H6v-1z"/>
 </g></svg>
index 65ab476..56a9b4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/text-style.png differ
index 466672e..1785791 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
-        <path id="underline" d="M6 19h12v1H6v-1z"/>
-    </g>
+       <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+       <path id="underline" d="M6 19h12v1H6v-1z"/>
 </svg>
index c367e77..135e93c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-destructive.png differ
index eb52343..c1d81ec 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
+       <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </g></svg>
index f84bfe9..e1d269e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
+       <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </g></svg>
index 478c702..a5c24da 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/trash-progressive.png differ
index 1099f6a..0a4a952 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
+       <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </g></svg>
index 76502dc..ab17845 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
+       <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </svg>
index 6196d39..d0f72b6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-invert.png differ
index 28442a3..376a8b9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z" id="tray"/>
+       <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z"/>
 </g></svg>
index f655449..b829737 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray-progressive.png differ
index 7b079ea..41c646b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z" id="tray"/>
+       <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z"/>
 </g></svg>
index e5c5e8f..8004cfc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/tray.png differ
index d7ab69b..a2cd42f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z" id="tray"/>
+       <path d="M3 13.35l1.8-7.2c.2-.996.81-1.8 1.8-1.8h10.8c.99 0 1.6.867 1.8 1.8l1.8 7.2v4.5c0 .99-.81 1.8-1.8 1.8H4.8c-.99 0-1.8-.81-1.8-1.8v-4.5zm6.96 1.8h4.08c-.49.557-1.212.9-2.04.9a2.68 2.68 0 0 1-2.04-.9h4.08c.414-.472.66-1.098.66-1.8h4.14l-1.44-7.2H6.6l-1.44 7.2H9.3c0 .702.246 1.328.66 1.8z"/>
 </svg>
index 7426f56..23d363d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-invert.png differ
index 148da47..06ed783 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
+       <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
 </g></svg>
index d797f3e..478e88d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr-progressive.png differ
index e80e6ae..5d08377 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
+       <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
 </g></svg>
index 640bb2a..fd1685e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-ltr.png differ
index 160219c..aba6f89 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
+       <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z"/>
 </svg>
index a02e2e0..136742b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-invert.png differ
index 8aace96..ada5a94 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
+       <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
 </g></svg>
index 4d062cb..069f62e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl-progressive.png differ
index 1337e16..70bdc11 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
+       <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
 </g></svg>
index 2475b06..132fb2d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unBlock-rtl.png differ
index 90fe46a..c117f2b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
+       <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z"/>
 </svg>
index 6535d43..5f36fe4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-invert.png differ
index dcc4ebf..bba9b28 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </g></svg>
index 6177f6b..42459b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip-progressive.png differ
index 92e965b..79d141e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </g></svg>
index 37916ef..4d5c919 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unClip.png differ
index 68459db..71bd498 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
+       <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index 8338017..3ae00eb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-invert.png differ
index dba18af..33b634d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
        <path d="M19.9 19.6l-16-16-1.1 1.1L6 7.9V20h1v-7c.6-.6 2-.8 3.4-.7l8.4 8.4 1.1-1.1zM17 14V7c-.7.7-2.7.9-4 .5V6c-1.2-1.3-3.9-1.3-5.4-.5l8.9 9c.3-.2.4-.3.5-.5z"/>
 </g></svg>
\ No newline at end of file
index bf1a6e0..de0db19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr-progressive.png differ
index e84befe..71f8655 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
        <path d="M19.9 19.6l-16-16-1.1 1.1L6 7.9V20h1v-7c.6-.6 2-.8 3.4-.7l8.4 8.4 1.1-1.1zM17 14V7c-.7.7-2.7.9-4 .5V6c-1.2-1.3-3.9-1.3-5.4-.5l8.9 9c.3-.2.4-.3.5-.5z"/>
 </g></svg>
\ No newline at end of file
index 780cb87..652e1ca 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-ltr.png differ
index 4bbd61c..bdd1316 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M19.9 19.6l-16-16-1.1 1.1L6 7.9V20h1v-7c.6-.6 2-.8 3.4-.7l8.4 8.4 1.1-1.1zM17 14V7c-.7.7-2.7.9-4 .5V6c-1.2-1.3-3.9-1.3-5.4-.5l8.9 9c.3-.2.4-.3.5-.5z"/>
 </svg>
\ No newline at end of file
index 4f9c3ad..d16566f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-invert.png differ
index 88256ec..07ad2ef 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
        <path d="M3.5 19.6l16-16 1.1 1.1-3.2 3.2V20h-1v-7c-.6-.6-2-.8-3.4-.7l-8.4 8.4-1.1-1.1zM6.3 14V7c.7.7 2.7.9 4 .5V6c1.2-1.3 3.9-1.3 5.4-.5l-8.9 9c-.3-.2-.4-.3-.5-.5z"/>
 </g></svg>
\ No newline at end of file
index 4abe9c8..193cb0d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl-progressive.png differ
index fcb4d11..d29b7e2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
        <path d="M3.5 19.6l16-16 1.1 1.1-3.2 3.2V20h-1v-7c-.6-.6-2-.8-3.4-.7l-8.4 8.4-1.1-1.1zM6.3 14V7c.7.7 2.7.9 4 .5V6c1.2-1.3 3.9-1.3 5.4-.5l-8.9 9c-.3-.2-.4-.3-.5-.5z"/>
 </g></svg>
\ No newline at end of file
index fa3696a..f87db56 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unFlag-rtl.png differ
index 5d94425..ae09747 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M3.5 19.6l16-16 1.1 1.1-3.2 3.2V20h-1v-7c-.6-.6-2-.8-3.4-.7l-8.4 8.4-1.1-1.1zM6.3 14V7c.7.7 2.7.9 4 .5V6c1.2-1.3 3.9-1.3 5.4-.5l-8.9 9c-.3-.2-.4-.3-.5-.5z"/>
 </svg>
\ No newline at end of file
index 2cb27f1..7c1ace6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-destructive.png differ
index cf82e1f..eaa2a19 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
+       <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
 </g></svg>
index 68c1437..d1f5024 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-invert.png differ
index 3c6f966..9bc5ea6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
+       <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
 </g></svg>
index 6f6a5d4..b2c78b4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr-progressive.png differ
index 55b8cc3..f3a571e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
+       <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
 </g></svg>
index e6d9aae..e000ba0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-ltr.png differ
index 25e0860..5ad36d4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
+       <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z"/>
 </svg>
index fac51b9..14a884e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-destructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-destructive.png differ
index d70f3a9..9e07631 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#d33">
-    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
+       <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
 </g></svg>
index d50b4c7..126b1d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-invert.png differ
index bfe53ad..31d3ce4 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
+       <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
 </g></svg>
index a7e7d32..73accf4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl-progressive.png differ
index 20e4afa..ecadff6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
+       <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
 </g></svg>
index 0529c16..8bbefb5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unLock-rtl.png differ
index 577b570..937d01b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
+       <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z"/>
 </svg>
index 580d694..4851513 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-constructive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-constructive.png differ
index 7265f4a..44121ec 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+       <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </g></svg>
index 20ce036..89c4c7b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-invert.png differ
index b34f49b..7f67a07 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+       <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </g></svg>
index 580d694..4851513 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar-progressive.png differ
index 7265f4a..44121ec 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+       <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </g></svg>
index 2329af3..ea241d4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unStar.png differ
index 724d190..e17271e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+       <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </svg>
index af3f0e9..6074afb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-invert.png differ
index efa8e83..c619abe 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
+       <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
 </g></svg>
index 2f09eb6..8cc34a8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr-progressive.png differ
index c5bf2cc..90aff0e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
+       <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
 </g></svg>
index 3b5231f..4a65fee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-ltr.png differ
index 64b3b71..a900a2d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
+       <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
 </svg>
index 1cb5449..dc60bb6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-invert.png differ
index 3fb2085..03349ff 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
+       <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
 </g></svg>
index e828b36..474c6c6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl-progressive.png differ
index 0a67774..419e5d8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
+       <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
 </g></svg>
index a1d2388..688062c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/unTrash-rtl.png differ
index e5e4032..3b93a4c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
+       <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z"/>
 </svg>
index 8a6ca42..f3e5d87 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-invert.png differ
index 3078617..47aa915 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </g></svg>
index f84ad6c..9f2e4b2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a-progressive.png differ
index 99d9dad..2601b5d 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </g></svg>
index 78a3c3f..7eca0cd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-a.png differ
index 1ddae10..281c831 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </svg>
index 9f0af6c..f6e9d81 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-invert.png differ
index 8136276..8b13da2 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </g></svg>
index a8bcf2d..0001c59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u-progressive.png differ
index 2953213..77d3b4c 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </g></svg>
index 0dbeb80..9b524ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/underline-u.png differ
index ff47e2c..8f7ebe5 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
-        <path id="underline" d="M7 17h10v1H7v-1z"/>
-    </g>
+       <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.658-1.666.98-2.98.98-1.32 0-2.32-.32-2.996-.98C8.336 14.37 8 13.41 8 12.13V6"/>
+       <path id="underline" d="M7 17h10v1H7v-1z"/>
 </svg>
index 9fcea7f..1abe9a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-invert.png differ
index e5c84a9..42bb204 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M12 8l8 10H4z"/>
+       <path d="M12 8l8 10H4z"/>
 </g></svg>
index 5cc7e79..99ed0cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle-progressive.png differ
index b6bbc97..b73247d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M12 8l8 10H4z"/>
+       <path d="M12 8l8 10H4z"/>
 </g></svg>
index f1aca31..fb62375 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upTriangle.png differ
index 9f0efc5..670eb50 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 8l8 10H4z"/>
+       <path d="M12 8l8 10H4z"/>
 </svg>
index aa26066..a84acf5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-invert.png differ
index 4a7cf26..da72e71 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </g></svg>
index 7ec3b64..6b2559b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr-progressive.png differ
index 85bb62f..9debbad 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </g></svg>
index 08e31e9..8a7f001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-ltr.png differ
index dc4676f..6f840a7 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+       <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
 </svg>
index 602ae42..5d3992d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-invert.png differ
index d347e6a..7047884 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </g></svg>
index 42fb647..db6e67c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl-progressive.png differ
index d367074..3e35352 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </g></svg>
index ccabf98..5dab3ed 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/upload-rtl.png differ
index ed3fe77..69e0306 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
+       <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z"/>
 </svg>
index 98083be..b76fa62 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-invert.png differ
index beefd8d..5baaacb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
 </g></svg>
index decc2ca..d60a855 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr-progressive.png differ
index 3232e97..e5a0bb3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
 </g></svg>
index ce385f9..a7dcfdd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-ltr.png differ
index 7f526e5..fdf6e93 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
 </svg>
index 3dc0f44..f52b01d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-invert.png differ
index 08a382a..f96069e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
 </g></svg>
index fde69b8..1f62f9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl-progressive.png differ
index c38292e..b8a922d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
 </g></svg>
index ee1afbc..3156395 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userActive-rtl.png differ
index 838ae31..c9e017f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z"/>
 </svg>
index 1f4d3a4..71c6609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-invert.png differ
index 5f4e136..20fa643 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
+       <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
 </g></svg>
index 74b699b..d50860a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar-progressive.png differ
index 26ae8b6..fcd182e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
+       <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
 </g></svg>
index 8190095..dcdc8e1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userAvatar.png differ
index ce714e6..5f42f73 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
+       <path d="M18.75 17.4c-1.08-.36-3.6-1.35-3.6-1.35-.81-.27-.81-.99-.9-1.8v-.09c1.26-1.08 2.25-2.88 2.25-4.86 0-4.23-1.8-5.85-4.5-5.85-1.89 0-4.5 1.08-4.5 5.85 0 1.89.99 3.69 2.25 4.86v.09c0 .81-.09 1.53-.9 1.8 0 0-2.61.99-3.6 1.35-1.17.36-2.25.9-2.25 2.25v.9h18v-.9c0-1.08-.72-1.8-2.25-2.25z"/>
 </svg>
index db34f59..7badbf2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-invert.png differ
index 075ea5c..39a8f39 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
 </g></svg>
index 4d7f0eb..428d23f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr-progressive.png differ
index f48929d..b7c55ae 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
 </g></svg>
index 05170e1..a892c68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-ltr.png differ
index e58bbc3..05a5778 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+       <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
 </svg>
index 8fe830a..6cbf3fe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-invert.png differ
index 0b3aa4d..5600a61 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
 </g></svg>
index 10ebac4..c49e0a4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl-progressive.png differ
index 76d950c..09757e8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
 </g></svg>
index bf953f1..c72b88f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userInactive-rtl.png differ
index 039e662..0157cfb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
+       <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z"/>
 </svg>
index 332bcba..33852ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-invert.png differ
index 934128f..e6f5622 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
 </g></svg>
index 2ef91f0..7ef5f46 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr-progressive.png differ
index 232a04a..ac73178 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
 </g></svg>
index 18981fd..f684365 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-ltr.png differ
index f277ce4..e424633 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
+       <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z"/>
 </svg>
index 187f3e6..6b8bf1a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-invert.png differ
index 5c48db2..b7db748 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
+       <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
 </g></svg>
index 91c703d..c627e63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl-progressive.png differ
index 2a2b17b..54d0495 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
+       <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
 </g></svg>
index 7122efa..d67bf8b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/userTalk-rtl.png differ
index 0f9a6fb..ee23a9d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
+       <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z"/>
 </svg>
index e716ba5..53fed8f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-invert.png differ
index b70f4f9..3f8a56a 100644 (file)
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="viewCompact">
-        <circle cx="6" cy="6" r="2"/>
-        <circle cx="12" cy="6" r="2"/>
-        <circle cx="18" cy="6" r="2"/>
-        <circle cx="6" cy="12" r="2"/>
-        <circle cx="12" cy="12" r="2"/>
-        <circle cx="18" cy="12" r="2"/>
-        <circle cx="6" cy="18" r="2"/>
-        <circle cx="12" cy="18" r="2"/>
-        <circle cx="18" cy="18" r="2"/>
-    </g>
+       <circle cx="6" cy="6" r="2"/>
+       <circle cx="12" cy="6" r="2"/>
+       <circle cx="18" cy="6" r="2"/>
+       <circle cx="6" cy="12" r="2"/>
+       <circle cx="12" cy="12" r="2"/>
+       <circle cx="18" cy="12" r="2"/>
+       <circle cx="6" cy="18" r="2"/>
+       <circle cx="12" cy="18" r="2"/>
+       <circle cx="18" cy="18" r="2"/>
 </g></svg>
index 545814b..6841b08 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact-progressive.png differ
index a7edfc5..5054b2f 100644 (file)
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="viewCompact">
-        <circle cx="6" cy="6" r="2"/>
-        <circle cx="12" cy="6" r="2"/>
-        <circle cx="18" cy="6" r="2"/>
-        <circle cx="6" cy="12" r="2"/>
-        <circle cx="12" cy="12" r="2"/>
-        <circle cx="18" cy="12" r="2"/>
-        <circle cx="6" cy="18" r="2"/>
-        <circle cx="12" cy="18" r="2"/>
-        <circle cx="18" cy="18" r="2"/>
-    </g>
+       <circle cx="6" cy="6" r="2"/>
+       <circle cx="12" cy="6" r="2"/>
+       <circle cx="18" cy="6" r="2"/>
+       <circle cx="6" cy="12" r="2"/>
+       <circle cx="12" cy="12" r="2"/>
+       <circle cx="18" cy="12" r="2"/>
+       <circle cx="6" cy="18" r="2"/>
+       <circle cx="12" cy="18" r="2"/>
+       <circle cx="18" cy="18" r="2"/>
 </g></svg>
index 13fe420..dbb0952 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewCompact.png differ
index d96a2e3..8585cda 100644 (file)
@@ -1,14 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewCompact">
-        <circle cx="6" cy="6" r="2"/>
-        <circle cx="12" cy="6" r="2"/>
-        <circle cx="18" cy="6" r="2"/>
-        <circle cx="6" cy="12" r="2"/>
-        <circle cx="12" cy="12" r="2"/>
-        <circle cx="18" cy="12" r="2"/>
-        <circle cx="6" cy="18" r="2"/>
-        <circle cx="12" cy="18" r="2"/>
-        <circle cx="18" cy="18" r="2"/>
-    </g>
+       <circle cx="6" cy="6" r="2"/>
+       <circle cx="12" cy="6" r="2"/>
+       <circle cx="18" cy="6" r="2"/>
+       <circle cx="6" cy="12" r="2"/>
+       <circle cx="12" cy="12" r="2"/>
+       <circle cx="18" cy="12" r="2"/>
+       <circle cx="6" cy="18" r="2"/>
+       <circle cx="12" cy="18" r="2"/>
+       <circle cx="18" cy="18" r="2"/>
 </svg>
index 3ea093a..51cbc15 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-invert.png differ
index 1e349b3..4a6b07f 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="viewDetails">
-        <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-        <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-    </g>
+       <circle cx="5.5" cy="8.5" r="2.5"/>
+       <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+       <circle cx="5.5" cy="16.5" r="2.5"/>
+       <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
 </g></svg>
index 9cef283..fc21cc4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr-progressive.png differ
index c6588c2..72994b6 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="viewDetails">
-        <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-        <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-    </g>
+       <circle cx="5.5" cy="8.5" r="2.5"/>
+       <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+       <circle cx="5.5" cy="16.5" r="2.5"/>
+       <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
 </g></svg>
index 4341f0e..b2ee157 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-ltr.png differ
index 1a5092a..57cf146 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewDetails">
-        <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-        <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
-    </g>
+       <circle cx="5.5" cy="8.5" r="2.5"/>
+       <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+       <circle cx="5.5" cy="16.5" r="2.5"/>
+       <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
 </svg>
index ea861d8..e9ff3ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-invert.png differ
index f2d6a87..d61c5ef 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="viewDetails">
-        <circle cx="18.5" cy="8.5" r="2.5"/>
-        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-        <circle cx="18.5" cy="16.5" r="2.5"/>
-        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-    </g>
+       <circle cx="18.5" cy="8.5" r="2.5"/>
+       <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+       <circle cx="18.5" cy="16.5" r="2.5"/>
+       <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
 </g></svg>
index 0317820..fd0a418 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl-progressive.png differ
index 9b7b78d..8c245b7 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="viewDetails">
-        <circle cx="18.5" cy="8.5" r="2.5"/>
-        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-        <circle cx="18.5" cy="16.5" r="2.5"/>
-        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-    </g>
+       <circle cx="18.5" cy="8.5" r="2.5"/>
+       <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+       <circle cx="18.5" cy="16.5" r="2.5"/>
+       <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
 </g></svg>
index 338294c..127fdbd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/viewDetails-rtl.png differ
index f43b05f..5bf874d 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="viewDetails">
-        <circle cx="18.5" cy="8.5" r="2.5"/>
-        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-        <circle cx="18.5" cy="16.5" r="2.5"/>
-        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
-    </g>
+       <circle cx="18.5" cy="8.5" r="2.5"/>
+       <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+       <circle cx="18.5" cy="16.5" r="2.5"/>
+       <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
 </svg>
index e18ee17..f89332f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator-invert.png differ
index 10edb0f..5e7a8fb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#ffffff">
-    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+       <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
 </g></svg>
index afa5652..0ef34c1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/visionSimulator.png differ
index ae6ba27..4c15f0a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+       <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
 </svg>
index 7018968..46bd05b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-invert.png differ
index ff99d08..649ee8d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+       <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
 </g></svg>
index 1767614..a49bd7e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr-progressive.png differ
index 6d06ede..4109ca3 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+       <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
 </g></svg>
index 53e7011..3730642 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-ltr.png differ
index b13df22..8a19e74 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+       <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
 </svg>
index 28008b5..241b750 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-invert.png differ
index 50224d0..7f95f8a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
+       <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
 </g></svg>
index 53c5983..a77db8a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl-progressive.png differ
index a2589bd..f71bbe8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
+       <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
 </g></svg>
index 8fc4df5..51ec770 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/watchlist-rtl.png differ
index a4ec49a..2512851 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
+       <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
 </svg>
index 30ef53e..1763001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-invert.png differ
index 72601da..70c662f 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="wikiText">
-        <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
-        <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
-    </g>
+       <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
+       <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
+       <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
+       <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
 </g></svg>
index e1f516c..8cc8efe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText-progressive.png differ
index f7ba89d..40734c9 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="wikiText">
-        <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
-        <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
-    </g>
+       <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
+       <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
+       <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
+       <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
 </g></svg>
index 40309aa..9071e79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/wikiText.png differ
index 4512cf5..cf6e81a 100644 (file)
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="wikiText">
-        <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
-        <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
-        <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
-    </g>
+       <path id="opening-bracket-outer" d="M3 19h3v-2H5V7h1V5H3z"/>
+       <path id="opening-bracket-inner" d="M7 19h3v-2H9V7h1V5H7z"/>
+       <path id="closing-bracket-inner" d="M17 19h-3v-2h1V7h-1V5h3z"/>
+       <path id="closing-bracket-outer" d="M21 19h-3v-2h1V7h-1V5h3z"/>
 </svg>
index 74c54ff..10176ce 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-invert.png differ
index bebd3a8..caa3842 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <g id="window">
-        <path id="title" d="M7 10h10v1H7z"/>
-        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
-    </g>
+       <path id="title" d="M7 10h10v1H7z"/>
+       <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
 </g></svg>
index 2a18bea..d76c744 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-progressive.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window-progressive.png differ
index 9204afe..e8cac16 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <g id="window">
-        <path id="title" d="M7 10h10v1H7z"/>
-        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
-    </g>
+       <path id="title" d="M7 10h10v1H7z"/>
+       <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
 </g></svg>
index bae13d7..f7549ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/icons/window.png differ
index 093c822..850e042 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="window">
-        <path id="title" d="M7 10h10v1H7z"/>
-        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
-    </g>
+       <path id="title" d="M7 10h10v1H7z"/>
+       <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
 </svg>
index 035b626..299b1ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert-invert.png differ
index a520175..2d0d9b0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z" id="alert"/>
+       <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z"/>
 </g></svg>
index 9d25a24..b97acd6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/alert.png differ
index f94346a..2a4e23d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z" id="alert"/>
+       <path d="M6 12A6 6 0 1 1 6 0a6 6 0 0 1 0 12zM5 7h2V2H5zm0 3h2V8H5z"/>
 </svg>
index ae66af4..3e724d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down-invert.png differ
index b5e6144..46a8dc0 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
        <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
 </g></svg>
index 34f5041..302f91d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-down.png differ
index d3e55d1..fdfc0f5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
        <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
 </svg>
index 68bf475..86539cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr-invert.png differ
index 78f4b51..18c0630 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
        <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
 </g></svg>
index cadc38f..d1df9c8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-ltr.png differ
index e99855b..e4a280d 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
        <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
 </svg>
index fae56f1..2b79b85 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl-invert.png differ
index bc0ff6f..9dea9d1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
        <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
 </g></svg>
index 5a4c0b6..669f88c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-rtl.png differ
index 1647501..419dbb2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
        <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
 </svg>
index 56eeea4..ef9e46e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up-invert.png differ
index 3c81ae5..54580bf 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
        <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
 </g></svg>
index 672b7f3..bdee30f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/arrow-up.png differ
index ca93281..c4ab039 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
        <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
 </svg>
index 82f5bf1..ddefc59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear-invert.png differ
index eb45dfc..3da986f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="clear">
-        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
-    </g>
+       <path d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
 </g></svg>
index a858a03..cbabec7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/clear.png differ
index 3c010c1..9cb1bd2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="clear">
-        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
-    </g>
+       <path d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
 </svg>
index d9ff42f..1f71c9f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required-invert.png differ
index efd0840..b480d3f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z" id="required"/>
+       <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
 </g></svg>
index aca9239..ca27da6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/required.png differ
index 94b0066..c508804 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z" id="required"/>
+       <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
 </svg>
index 9529803..26f2fc6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr-invert.png differ
index cc383ee..65d3f25 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
-    </g>
+       <path d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
 </g></svg>
index 123fbfa..981bce8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-ltr.png differ
index 80c72bb..9b0241f 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="search">
-        <path id="magnifying-glass" d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
-    </g>
+       <path d="M10.37 9.474L7.994 7.1l-.17-.1a3.45 3.45 0 0 0 .644-2.01A3.478 3.478 0 1 0 4.99 8.47c.75 0 1.442-.24 2.01-.648l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27a2.21 2.21 0 1 1 2.21-2.21A2.21 2.21 0 0 1 4.99 7.21z"/>
 </svg>
index a727057..ce7b97e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl-invert.png differ
index 19114d8..b0ad55d 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="search">
-        <path id="magnifying-glass" d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
-    </g>
+       <path d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
 </g></svg>
index db74061..91759ac 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/indicators/search-rtl.png differ
index 4b3cff4..62a067d 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="search">
-        <path id="magnifying-glass" d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
-    </g>
+       <path d="M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z"/>
 </svg>
index dbf69b9..3a7b71c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/wikimediaui/images/textures/transparency.png and b/resources/lib/oojs-ui/themes/wikimediaui/images/textures/transparency.png differ
index cadec2a..14762de 100644 (file)
@@ -1,7 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
-    <g id="transparency">
-        <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
-        <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
-    </g>
+       <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
+       <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
 </svg>
index f906b93..872a8db 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 9" height="9" width="21">
-    <path d="M14.5 5l-4 4-4-4zM14.5 4l-4-4-4 4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="21" height="9" viewBox="0 0 21 9">
+       <path d="M14.5 5l-4 4-4-4zM14.5 4l-4-4-4 4z"/>
 </svg>
index 105574b..452606a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 4" height="4" width="21">
-    <path d="M14.5 0l-4 4-4-4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="21" height="4" viewBox="0 0 21 4">
+       <path d="M14.5 0l-4 4-4-4z"/>
 </svg>
index 2fa4c73..38f6374 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 4" height="4" width="21">
-    <path d="M6.5 4l4-4 4 4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="21" height="4" viewBox="0 0 21 4">
+       <path d="M6.5 4l4-4 4 4z"/>
 </svg>
diff --git a/resources/src/jquery/jquery.autoEllipsis.js b/resources/src/jquery/jquery.autoEllipsis.js
deleted file mode 100644 (file)
index 8716b69..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * @class jQuery.plugin.autoEllipsis
- */
-( function ( $ ) {
-
-       var
-               // Cache ellipsed substrings for every string-width-position combination
-               cache = {},
-
-               // Use a separate cache when match highlighting is enabled
-               matchTextCache = {};
-
-       // Due to <https://github.com/jscs-dev/jscs-jsdoc/issues/136>
-       // jscs:disable jsDoc
-       /**
-        * Automatically truncate the plain text contents of an element and add an ellipsis
-        *
-        * @param {Object} options
-        * @param {'left'|'center'|'right'} [options.position='center'] Where to remove text.
-        * @param {boolean} [options.tooltip=false] Whether to show a tooltip with the remainder
-        * of the text.
-        * @param {boolean} [options.restoreText=false] Whether to save the text for restoring
-        * later.
-        * @param {boolean} [options.hasSpan=false] Whether the element is already a container,
-        * or if the library should create a new container for it.
-        * @param {string|null} [options.matchText=null] Text to highlight, e.g. search terms.
-        * @return {jQuery}
-        * @chainable
-        */
-       $.fn.autoEllipsis = function ( options ) {
-               options = $.extend( {
-                       position: 'center',
-                       tooltip: false,
-                       restoreText: false,
-                       hasSpan: false,
-                       matchText: null
-               }, options );
-
-               return this.each( function () {
-                       var $trimmableText,
-                               text, trimmableText, w, pw,
-                               l, r, i, side, m,
-                               // container element - used for measuring against
-                               $container = $( this );
-
-                       if ( options.restoreText ) {
-                               if ( !$container.data( 'autoEllipsis.originalText' ) ) {
-                                       $container.data( 'autoEllipsis.originalText', $container.text() );
-                               } else {
-                                       $container.text( $container.data( 'autoEllipsis.originalText' ) );
-                               }
-                       }
-
-                       // trimmable text element - only the text within this element will be trimmed
-                       if ( options.hasSpan ) {
-                               $trimmableText = $container.children( options.selector );
-                       } else {
-                               $trimmableText = $( '<span>' )
-                                       .css( 'whiteSpace', 'nowrap' )
-                                       .text( $container.text() );
-                               $container
-                                       .empty()
-                                       .append( $trimmableText );
-                       }
-
-                       text = $container.text();
-                       trimmableText = $trimmableText.text();
-                       w = $container.width();
-                       pw = 0;
-
-                       // Try cache
-                       if ( options.matchText ) {
-                               if ( !( text in matchTextCache ) ) {
-                                       matchTextCache[ text ] = {};
-                               }
-                               if ( !( options.matchText in matchTextCache[ text ] ) ) {
-                                       matchTextCache[ text ][ options.matchText ] = {};
-                               }
-                               if ( !( w in matchTextCache[ text ][ options.matchText ] ) ) {
-                                       matchTextCache[ text ][ options.matchText ][ w ] = {};
-                               }
-                               if ( options.position in matchTextCache[ text ][ options.matchText ][ w ] ) {
-                                       $container.html( matchTextCache[ text ][ options.matchText ][ w ][ options.position ] );
-                                       if ( options.tooltip ) {
-                                               $container.attr( 'title', text );
-                                       }
-                                       return;
-                               }
-                       } else {
-                               if ( !( text in cache ) ) {
-                                       cache[ text ] = {};
-                               }
-                               if ( !( w in cache[ text ] ) ) {
-                                       cache[ text ][ w ] = {};
-                               }
-                               if ( options.position in cache[ text ][ w ] ) {
-                                       $container.html( cache[ text ][ w ][ options.position ] );
-                                       if ( options.tooltip ) {
-                                               $container.attr( 'title', text );
-                                       }
-                                       return;
-                               }
-                       }
-
-                       if ( $trimmableText.width() + pw > w ) {
-                               switch ( options.position ) {
-                                       case 'right':
-                                               // Use binary search-like technique for efficiency
-                                               l = 0;
-                                               r = trimmableText.length;
-                                               do {
-                                                       m = Math.ceil( ( l + r ) / 2 );
-                                                       $trimmableText.text( trimmableText.slice( 0, m ) + '...' );
-                                                       if ( $trimmableText.width() + pw > w ) {
-                                                               // Text is too long
-                                                               r = m - 1;
-                                                       } else {
-                                                               l = m;
-                                                       }
-                                               } while ( l < r );
-                                               $trimmableText.text( trimmableText.slice( 0, l ) + '...' );
-                                               break;
-                                       case 'center':
-                                               // TODO: Use binary search like for 'right'
-                                               i = [ Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 ) ];
-                                               // Begin with making the end shorter
-                                               side = 1;
-                                               while ( $trimmableText.outerWidth() + pw > w && i[ 0 ] > 0 ) {
-                                                       $trimmableText.text( trimmableText.slice( 0, i[ 0 ] ) + '...' + trimmableText.slice( i[ 1 ] ) );
-                                                       // Alternate between trimming the end and begining
-                                                       if ( side === 0 ) {
-                                                               // Make the begining shorter
-                                                               i[ 0 ]--;
-                                                               side = 1;
-                                                       } else {
-                                                               // Make the end shorter
-                                                               i[ 1 ]++;
-                                                               side = 0;
-                                                       }
-                                               }
-                                               break;
-                                       case 'left':
-                                               // TODO: Use binary search like for 'right'
-                                               r = 0;
-                                               while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) {
-                                                       $trimmableText.text( '...' + trimmableText.slice( r ) );
-                                                       r++;
-                                               }
-                                               break;
-                               }
-                       }
-                       if ( options.tooltip ) {
-                               $container.attr( 'title', text );
-                       }
-                       if ( options.matchText ) {
-                               $container.highlightText( options.matchText );
-                               matchTextCache[ text ][ options.matchText ][ w ][ options.position ] = $container.html();
-                       } else {
-                               cache[ text ][ w ][ options.position ] = $container.html();
-                       }
-
-               } );
-       };
-       // jscs:enable jsDoc
-
-       /**
-        * @class jQuery
-        * @mixins jQuery.plugin.autoEllipsis
-        */
-
-}( jQuery ) );
diff --git a/resources/src/jquery/jquery.badge.css b/resources/src/jquery/jquery.badge.css
deleted file mode 100644 (file)
index 2dbd4a5..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-.mw-badge {
-       min-width: 7px;
-       border-radius: 2px;
-       padding: 1px 4px;
-       text-align: center;
-       font-size: 12px;
-       line-height: 12px;
-       background-color: #d2d2d2;
-       cursor: pointer;
-}
-
-.mw-badge-content {
-       font-weight: bold;
-       color: #fff;
-       vertical-align: baseline;
-       text-shadow: 0 1px rgba( 0, 0, 0, 0.4 );
-}
-
-.mw-badge-inline {
-       margin-left: 3px;
-       display: inline-block;
-       /* Hack for IE6 and IE7 (T49926) */
-       zoom: 1;
-       *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
-
-}
-.mw-badge-overlay {
-       position: absolute;
-       bottom: -1px;
-       right: -3px;
-       z-index: 50;
-}
-
-.mw-badge-important {
-       background-color: #d33;
-}
diff --git a/resources/src/jquery/jquery.badge.js b/resources/src/jquery/jquery.badge.js
deleted file mode 100644 (file)
index 40b3baf..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*!
- * jQuery Badge plugin
- *
- * @license MIT
- *
- * @author Ryan Kaldari <rkaldari@wikimedia.org>, 2012
- * @author Andrew Garrett <agarrett@wikimedia.org>, 2012
- * @author Marius Hoch <hoo@online.de>, 2012
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * This program is distributed WITHOUT ANY WARRANTY.
- */
-
-/**
- * @class jQuery.plugin.badge
- */
-( function ( $, mw ) {
-       /**
-        * Put a badge on an item on the page. The badge container will be appended to the selected element(s).
-        *
-        *     $element.badge( text );
-        *     $element.badge( 5 );
-        *     $element.badge( '100+' );
-        *     $element.badge( text, inline );
-        *     $element.badge( 'New', true );
-        *
-        * @param {number|string} text The value to display in the badge. If the value is falsey (0,
-        *  null, false, '', etc.), any existing badge will be removed.
-        * @param {boolean} [inline=true] True if the badge should be displayed inline, false
-        *  if the badge should overlay the parent element.
-        * @param {boolean} [displayZero=false] True if the number zero should be displayed,
-        *  false if the number zero should result in the badge being hidden
-        * @return {jQuery}
-        * @chainable
-        */
-       $.fn.badge = function ( text, inline, displayZero ) {
-               var $badge = this.find( '.mw-badge' ),
-                       badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
-                       isImportant = true,
-                       displayBadge = true;
-
-               // If we're displaying zero, ensure style to be non-important
-               if ( mw.language.convertNumber( text, true ) === 0 ) {
-                       isImportant = false;
-                       if ( !displayZero ) {
-                               displayBadge = false;
-                       }
-               // If text is falsey (besides 0), hide the badge
-               } else if ( !text ) {
-                       displayBadge = false;
-               }
-
-               if ( displayBadge ) {
-                       // If a badge already exists, reuse it
-                       if ( $badge.length ) {
-                               $badge
-                                       .toggleClass( 'mw-badge-important', isImportant )
-                                       .find( '.mw-badge-content' ).text( text );
-                       } else {
-                               // Otherwise, create a new badge with the specified text and style
-                               $badge = $( '<div class="mw-badge"></div>' )
-                                       .addClass( badgeStyleClass )
-                                       .toggleClass( 'mw-badge-important', isImportant )
-                                       .append(
-                                               $( '<span class="mw-badge-content"></span>' ).text( text )
-                                       )
-                                       .appendTo( this );
-                       }
-               } else {
-                       $badge.remove();
-               }
-               return this;
-       };
-
-       /**
-        * @class jQuery
-        * @mixins jQuery.plugin.badge
-        */
-}( jQuery, mediaWiki ) );
diff --git a/resources/src/jquery/jquery.placeholder.js b/resources/src/jquery/jquery.placeholder.js
deleted file mode 100644 (file)
index afb8837..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * No-op for compatibility with code from before we used
- * native placeholder in all supported browsers.
- */
-
-( function ( $ ) {
-       var placeholder;
-
-       placeholder = $.fn.placeholder = function ( text ) {
-               if ( arguments.length ) {
-                       this.prop( 'placeholder', text );
-               }
-               return this;
-       };
-
-       placeholder.input = placeholder.textarea = true;
-
-}( jQuery ) );
index c6ad945..522e95b 100644 (file)
                                                        // See bug T37201.
 
                                                        activateElementOnIE( this );
-                                                       if ( context ) {
-                                                               context.fn.restoreCursorAndScrollTop();
-                                                       }
                                                        if ( options.selectionStart !== undefined ) {
                                                                $( this ).textSelection( 'setSelection', { start: options.selectionStart, end: options.selectionEnd } );
                                                        }
index 7f75511..22619b9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
        <path d="M3.636 2.222l14.142 14.142-1.414 1.414L2.222 3.636z"/>
        <path d="M17.778 3.636L3.636 17.778l-1.414-1.414L16.364 2.222z"/>
index 6932e58..c903828 100644 (file)
@@ -1,9 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="42" height="20" viewBox="0 0 42 20">
-    <g id="Layer_2">
-        <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M11 10h17.064"/>
-    </g>
-    <g id="Layer_3">
-        <path d="M23 6l8 4-8 4z"/>
-    </g>
+       <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M11 10h17.064"/>
+       <path d="M23 6l8 4-8 4z"/>
 </svg>
index b309da9..c037339 100644 (file)
@@ -1,9 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="42" height="20" viewBox="0 0 42 20">
-    <g id="Layer_2">
-        <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M31 10H13.936"/>
-    </g>
-    <g id="Layer_3">
-        <path d="M19 6l-8 4 8 4z"/>
-    </g>
+       <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M31 10H13.936"/>
+       <path d="M19 6l-8 4 8 4z"/>
 </svg>
index 713be6c..46475ef 100644 (file)
@@ -1,9 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="47" height="20" viewBox="0 0 47 20">
-    <g id="Layer_1">
-        <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M14.98 2.5V11c0 1.04 1.02 1.98 2.02 1.98h6l3 .02"/>
-    </g>
-    <g id="Layer_3">
-        <path d="M23.48 9.5l.02 7L30 13z"/>
-    </g>
+       <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M14.98 2.5V11c0 1.04 1.02 1.98 2.02 1.98h6l3 .02"/>
+       <path d="M23.48 9.5l.02 7L30 13z"/>
 </svg>
index ce0c7c9..e06c4d2 100644 (file)
@@ -1,9 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="47" height="20" viewBox="0 0 47 20">
-    <g id="Layer_1">
-        <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M32.002 2.5V11c0 1.04-1.02 1.98-2.02 1.98h-6l-3 .02"/>
-    </g>
-    <g id="Layer_3">
-        <path d="M23.502 9.5l-.02 7-6.5-3.5z"/>
-    </g>
+       <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M32.002 2.5V11c0 1.04-1.02 1.98-2.02 1.98h-6l-3 .02"/>
+       <path d="M23.502 9.5l-.02 7-6.5-3.5z"/>
 </svg>
index dc6a366..1d578e4 100644 (file)
        #wpSummaryWidget {
                display: block;
                margin-bottom: 1em;
-               max-width: none;
        }
 
        #wpSummaryLabel {
                margin: 0;
        }
 
+       #wpSummaryWidget,
+       #wpSummaryLabel .oo-ui-fieldLayout-header {
+               max-width: none;
+       }
+
        .editCheckboxes .oo-ui-fieldLayout {
                margin-right: 1em;
        }
index f3ea163..520917a 100644 (file)
@@ -1,6 +1,6 @@
 /* Styles for the JavaScript enhancements of the history page */
 
-#pagehistory li.before input[name='oldid'],
-#pagehistory li.after input[name='diff'] {
+#pagehistory li.before input[ name='oldid' ],
+#pagehistory li.after input[ name='diff' ] {
        visibility: hidden;
 }
index cad530b..73ec1a7 100644 (file)
@@ -11,6 +11,7 @@
 
 #pagehistory li.selected {
        background-color: #f8f9fa;
+       color: #252525;
        border: 1px dashed #a2a9b1;
 }
 
index 39a122d..4e73354 100644 (file)
@@ -31,7 +31,7 @@
                history.replaceState( /* data= */ history.state, /* title= */ document.title, /* url= */ canonical );
                if ( shouldChangeFragment ) {
                        // Specification for history.replaceState() doesn't require browser to scroll,
-                       // so scroll to be sure (see also T110501). Support for IE9 and IE10.
+                       // so scroll to be sure (see also T110501). Support for IE10.
                        node = document.getElementById( fragment.slice( 1 ) );
                        if ( node ) {
                                node.scrollIntoView();
index 8ff0634..58e00f9 100644 (file)
@@ -69,16 +69,16 @@ a.stub {
 }
 
 /* Expand URLs for printing */
-.mw-body-content a.external.text:after,
-.mw-body-content a.external.autonumber:after {
+.mw-parser-output a.external.text:after,
+.mw-parser-output a.external.autonumber:after {
        content: ' (' attr( href ) ')';
        word-break: break-all;
        word-wrap: break-word;
 }
 
 /* Expand protocol-relative URLs for printing */
-.mw-body-content a.external.text[href^='//']:after,
-.mw-body-content a.external.autonumber[href^='//']:after {
+.mw-parser-output a.external.text[ href^='//' ]:after,
+.mw-parser-output a.external.autonumber[ href^='//' ]:after {
        content: ' (https:' attr( href ) ')';
 }
 
index 4d3dcb6..40561e4 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
-    <g id="magnify-clip" fill="#fff" stroke="#000">
-        <path id="bigbox" d="M1.509 1.865h10.99v7.919h-10.99z"/>
-        <path id="smallbox" d="M-1.499 6.868h5.943v4.904h-5.943z"/>
-    </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="11" viewBox="0 0 11 15">
+       <g fill="#fff" stroke="#000">
+               <path d="M1.509 1.865h10.99v7.919h-10.99z"/>
+               <path d="M-1.499 6.868h5.943v4.904h-5.943z"/>
+       </g>
 </svg>
index 582e4ae..1b4cbfe 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
-    <g id="magnify-clip" fill="#fff" stroke="#000">
-        <path id="bigbox" d="M9.491 1.865h-10.99v7.919h10.99z"/>
-        <path id="smallbox" d="M12.499 6.868h-5.943v4.904h5.943z"/>
-    </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="11" viewBox="0 0 11 15">
+       <g fill="#fff" stroke="#000">
+               <path d="M9.491 1.865h-10.99v7.919h10.99z"/>
+               <path d="M12.499 6.868h-5.943v4.904h5.943z"/>
+       </g>
 </svg>
index 7b2d711..596b0d6 100644 (file)
@@ -220,28 +220,6 @@ table.toc td {
        font-size: larger;
 }
 
-/* preference page with js-genrated toc */
-#preftoc {
-       float: left;
-       margin: 1em 1em 1em 1em;
-       width: 13em;
-}
-
-#preftoc li {
-       border: 1px solid #fff;
-}
-
-#preftoc li.selected {
-       background-color: #f9f9f9;
-       border: 1px dashed #aaa;
-}
-
-#preftoc a,
-#preftoc a:active {
-       display: block;
-       color: #005189;
-}
-
 .mw-prefs-buttons {
        clear: left;
        float: left;
index 74233d6..9f48204 100644 (file)
@@ -56,36 +56,36 @@ wbr {
 
 /* Input types that should follow user direction, like buttons */
 /* TODO: What about buttons in wikipage content ? */
-input[type='submit'],
-input[type='button'],
-input[type='reset'],
-input[type='file'] {
+input[ type='submit' ],
+input[ type='button' ],
+input[ type='reset' ],
+input[ type='file' ] {
        direction: ltr;
 }
 
 /* Override default values */
-textarea[dir='ltr'],
-input[dir='ltr'] {
+textarea[ dir='ltr' ],
+input[ dir='ltr' ] {
        /* @noflip */
        direction: ltr;
 }
 
-textarea[dir='rtl'],
-input[dir='rtl'] {
+textarea[ dir='rtl' ],
+input[ dir='rtl' ] {
        /* @noflip */
        direction: rtl;
 }
 
 /* Default style for semantic tags */
-abbr[title],
-.explain[title] {
+abbr[ title ],
+.explain[ title ] {
        border-bottom: 1px dotted;
        cursor: help;
 }
 
 @supports ( text-decoration: underline dotted ) {
-       abbr[title],
-       .explain[title] {
+       abbr[ title ],
+       .explain[ title ] {
                border-bottom: 0;
                text-decoration: underline dotted;
        }
@@ -110,19 +110,6 @@ span.comment {
        height: 22px;
 }
 
-/* Edit font preference */
-.mw-editfont-monospace {
-       font-family: monospace;
-}
-
-.mw-editfont-sans-serif {
-       font-family: sans-serif;
-}
-
-.mw-editfont-serif {
-       font-family: serif;
-}
-
 /* Underline preference */
 
 .mw-underline-always a {
index fb3b00e..ea0b959 100644 (file)
        &::placeholder {
                @rules();
        }
-       // For inputs that use jquery.placeholder.js e.g. IE9
-       &.placeholder {
-               @rules();
-       }
 }
 /* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
 
index a0ff767..1e078bd 100644 (file)
@@ -17,8 +17,8 @@
        line-height: normal;
        font-weight: normal;
 
-       & > input[type='checkbox'],
-       & > input[type='radio'] {
+       & > input[ type='checkbox' ],
+       & > input[ type='radio' ] {
                width: auto;
                height: auto;
                margin: 0 0.1em 0 0;
@@ -87,7 +87,6 @@
        // border of the same color as background so that light background and
        // dark background buttons are the same height and width
        border: 1px solid @bgColor;
-       text-shadow: 0 1px rgba( 0, 0, 0, 0.1 );
 
        &:hover {
                background-color: @highlightColor;
index debe0b9..15fe334 100644 (file)
@@ -33,6 +33,7 @@
         * @event update
         * @param {jQuery|string} $changesListContent List of changes
         * @param {jQuery} $fieldset Server-generated form
+        * @param {string} noResultsDetails Type of no result error
         * @param {boolean} isInitialDOM Whether the previous dom variables are from the initial page load
         * @param {boolean} fromLiveUpdate These are new changes fetched via Live Update
         *
         *
         * @param {jQuery|string} changesListContent
         * @param {jQuery} $fieldset
+        * @param {string} noResultsDetails Type of no result error
+        *   timeout.
         * @param {boolean} [isInitialDOM] Using the initial (already attached) DOM elements
         * @param {boolean} [separateOldAndNew] Whether a logical separation between old and new changes is needed
         * @fires update
         */
-       mw.rcfilters.dm.ChangesListViewModel.prototype.update = function ( changesListContent, $fieldset, isInitialDOM, separateOldAndNew ) {
+       mw.rcfilters.dm.ChangesListViewModel.prototype.update = function ( changesListContent, $fieldset, noResultsDetails, isInitialDOM, separateOldAndNew ) {
                var from = this.nextFrom;
                this.valid = true;
                this.extractNextFrom( $fieldset );
                this.checkForUnseenWatchedChanges( changesListContent );
-               this.emit( 'update', changesListContent, $fieldset, isInitialDOM, separateOldAndNew ? from : null );
+               this.emit( 'update', changesListContent, $fieldset, noResultsDetails, isInitialDOM, separateOldAndNew ? from : null );
        };
 
        /**
index 57d1b41..d20e2e7 100644 (file)
@@ -93,7 +93,6 @@
         */
        mw.rcfilters.dm.FilterGroup.prototype.initializeFilters = function ( filterDefinition, groupDefault ) {
                var defaultParam,
-                       anyHighlighted,
                        supersetMap = {},
                        model = this,
                        items = [];
                }
 
                // add highlights to defaultParams
-               anyHighlighted = false;
                this.getItems().forEach( function ( filterItem ) {
                        if ( filterItem.isHighlighted() ) {
-                               anyHighlighted = true;
                                this.defaultParams[ filterItem.getName() + '_color' ] = filterItem.getHighlightColor();
                        }
                }.bind( this ) );
-               if ( anyHighlighted ) {
-                       this.defaultParams.highlight = '1';
-               }
 
                // Store default filter state based on default params
                this.defaultFilters = this.getFilterRepresentation( this.getDefaultParams() );
        mw.rcfilters.dm.FilterGroup.prototype.isExcludedFromSavedQueries = function () {
                return this.excludedFromSavedQueries;
        };
+
+       /**
+        * Normalize a value given to this group. This is mostly for correcting
+        * arbitrary values for 'single option' groups, given by the user settings
+        * or the URL that can go outside the limits that are allowed.
+        *
+        * @param  {string} value Given value
+        * @return {string} Corrected value
+        */
+       mw.rcfilters.dm.FilterGroup.prototype.normalizeArbitraryValue = function ( value ) {
+               if (
+                       this.getType() === 'single_option' &&
+                       this.isAllowArbitrary()
+               ) {
+                       if (
+                               this.getMaxValue() !== null &&
+                               value > this.getMaxValue()
+                       ) {
+                               // Change the value to the actual max value
+                               return String( this.getMaxValue() );
+                       } else if (
+                               this.getMinValue() !== null &&
+                               value < this.getMinValue()
+                       ) {
+                               // Change the value to the actual min value
+                               return String( this.getMinValue() );
+                       }
+               }
+
+               return value;
+       };
 }( mediaWiki ) );
index 772ed92..d959540 100644 (file)
@@ -16,8 +16,8 @@
                this.defaultParams = {};
                this.defaultFiltersEmpty = null;
                this.highlightEnabled = false;
-               this.invertedNamespaces = false;
                this.parameterMap = {};
+               this.emptyParameterState = null;
 
                this.views = {};
                this.currentView = 'default';
         * Highlight feature has been toggled enabled or disabled
         */
 
-       /**
-        * @event invertChange
-        * @param {boolean} isInverted Namespace selected is inverted
-        *
-        * Namespace selection is inverted or straight forward
-        */
-
        /* Methods */
 
        /**
 
                this.currentView = 'default';
 
-               if ( this.getHighlightedItems().length > 0 ) {
-                       this.toggleHighlight( true );
-               }
+               this.updateHighlightedState();
 
                // Finish initialization
                this.emit( 'initialize' );
        };
 
+       /**
+        * Update filter view model state based on a parameter object
+        *
+        * @param {Object} params Parameters object
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.updateStateFromParams = function ( params ) {
+               // For arbitrary numeric single_option values make sure the values
+               // are normalized to fit within the limits
+               $.each( this.getFilterGroups(), function ( groupName, groupModel ) {
+                       params[ groupName ] = groupModel.normalizeArbitraryValue( params[ groupName ] );
+               } );
+
+               // Update filter states
+               this.toggleFiltersSelected(
+                       this.getFiltersFromParameters(
+                               params
+                       )
+               );
+
+               // Update highlight state
+               this.getItemsSupportingHighlights().forEach( function ( filterItem ) {
+                       var color = params[ filterItem.getName() + '_color' ];
+                       if ( color ) {
+                               filterItem.setHighlightColor( color );
+                       } else {
+                               filterItem.clearHighlightColor();
+                       }
+               } );
+               this.updateHighlightedState();
+
+               // Check all filter interactions
+               this.reassessFilterInteractions();
+       };
+
+       /**
+        * Get a representation of an empty (falsey) parameter state
+        *
+        * @return {Object} Empty parameter state
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getEmptyParameterState = function () {
+               if ( !this.emptyParameterState ) {
+                       this.emptyParameterState = $.extend(
+                               true,
+                               {},
+                               this.getParametersFromFilters( {} ),
+                               this.getEmptyHighlightParameters()
+                       );
+               }
+               return this.emptyParameterState;
+       };
+
+       /**
+        * Get a representation of only the non-falsey parameters
+        *
+        * @param {Object} [parameters] A given parameter state to minimize. If not given the current
+        *  state of the system will be used.
+        * @return {Object} Empty parameter state
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getMinimizedParamRepresentation = function ( parameters ) {
+               var result = {};
+
+               parameters = parameters ? $.extend( true, {}, parameters ) : this.getCurrentParameterState();
+
+               // Params
+               $.each( this.getEmptyParameterState(), function ( param, value ) {
+                       if ( parameters[ param ] !== undefined && parameters[ param ] !== value ) {
+                               result[ param ] = parameters[ param ];
+                       }
+               } );
+
+               // Highlights
+               Object.keys( this.getEmptyHighlightParameters() ).forEach( function ( param ) {
+                       if ( parameters[ param ] ) {
+                               // If a highlight parameter is not undefined and not null
+                               // add it to the result
+                               result[ param ] = parameters[ param ];
+                       }
+               } );
+
+               return result;
+       };
+
+       /**
+        * Get a representation of the full parameter list, including all base values
+        *
+        * @param {Object} [parameters] A given parameter state to minimize. If not given the current
+        *  state of the system will be used.
+        * @param {boolean} [removeExcluded] Remove excluded and sticky parameters
+        * @return {Object} Full parameter representation
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getExpandedParamRepresentation = function ( parameters, removeExcluded ) {
+               var result = {};
+
+               parameters = parameters ? $.extend( true, {}, parameters ) : this.getCurrentParameterState();
+
+               result = $.extend(
+                       true,
+                       {},
+                       this.getEmptyParameterState(),
+                       parameters
+               );
+
+               if ( removeExcluded ) {
+                       result = this.removeExcludedParams( result );
+               }
+
+               return result;
+       };
+
+       /**
+        * Get a parameter representation of the current state of the model
+        *
+        * @param {boolean} [removeExcludedParams] Remove excluded filters from final result
+        * @return {Object} Parameter representation of the current state of the model
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getCurrentParameterState = function ( removeExcludedParams ) {
+               var excludedParams,
+                       state = this.getMinimizedParamRepresentation( $.extend(
+                               true,
+                               {},
+                               this.getParametersFromFilters( this.getSelectedState() ),
+                               this.getHighlightParameters()
+                       ) );
+
+               if ( removeExcludedParams ) {
+                       excludedParams = this.getExcludedParams();
+                       // Delete all excluded filters
+                       $.each( state, function ( param ) {
+                               if ( excludedParams.indexOf( param ) > -1 ) {
+                                       delete state[ param ];
+                               }
+                       } );
+               }
+
+               return state;
+       };
+
+       /**
+        * Delete excluded and sticky filters from given object. If object isn't given, output
+        * the current filter state without the excluded values
+        *
+        * @param {Object} [filterState] Filter state
+        * @return {Object} Filter state without excluded filters
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.removeExcludedFilters = function ( filterState ) {
+               filterState = filterState !== undefined ?
+                       $.extend( true, {}, filterState ) :
+                       this.getFiltersFromParameters();
+
+               // Remove excluded filters
+               Object.keys( this.getExcludedFiltersState() ).forEach( function ( filterName ) {
+                       delete filterState[ filterName ];
+               } );
+
+               // Remove sticky filters
+               Object.keys( this.getStickyFiltersState() ).forEach( function ( filterName ) {
+                       delete filterState[ filterName ];
+               } );
+
+               return filterState;
+       };
+       /**
+        * Delete excluded and sticky parameters from given object. If object isn't given, output
+        * the current param state without the excluded values
+        *
+        * @param {Object} [paramState] Parameter state
+        * @return {Object} Parameter state without excluded filters
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.removeExcludedParams = function ( paramState ) {
+               paramState = paramState !== undefined ?
+                       $.extend( true, {}, paramState ) :
+                       this.getCurrentParameterState();
+
+               // Remove excluded filters
+               this.getExcludedParams().forEach( function ( paramName ) {
+                       delete paramState[ paramName ];
+               } );
+
+               // Remove sticky filters
+               this.getStickyParams().forEach( function ( paramName ) {
+                       delete paramState[ paramName ];
+               } );
+
+               return paramState;
+       };
+
        /**
         * Get the names of all available filters
         *
                return this.getItems().map( function ( item ) { return item.getName(); } );
        };
 
+       /**
+        * Turn the highlight feature on or off
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.updateHighlightedState = function () {
+               this.toggleHighlight( this.getHighlightedItems().length > 0 );
+       };
+
        /**
         * Get the object that defines groups by their name.
         *
        /**
         * Get an object representing default parameters state
         *
+        * @param {boolean} [excludeHiddenParams] Exclude hidden and sticky params
         * @return {Object} Default parameter values
         */
-       mw.rcfilters.dm.FiltersViewModel.prototype.getDefaultParams = function () {
+       mw.rcfilters.dm.FiltersViewModel.prototype.getDefaultParams = function ( excludeHiddenParams ) {
                var result = {};
 
                // Get default filter state
                        $.extend( true, result, model.getDefaultParams() );
                } );
 
+               if ( excludeHiddenParams ) {
+                       Object.keys( this.getDefaultHiddenParams() ).forEach( function ( paramName ) {
+                               delete result[ paramName ];
+                       } );
+               }
+
+               return result;
+       };
+
+       /**
+        * Get an object representing defaults for the hidden parameters state
+        *
+        * @return {Object} Default values for hidden parameters
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getDefaultHiddenParams = function () {
+               var result = {};
+
+               // Get default filter state
+               $.each( this.groups, function ( name, model ) {
+                       if ( model.isHidden() ) {
+                               $.extend( true, result, model.getDefaultParams() );
+                       }
+               } );
+
                return result;
        };
 
         * @return {Object} Sticky parameter values
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.getStickyParams = function () {
+               var result = [];
+
+               $.each( this.groups, function ( name, model ) {
+                       if ( model.isSticky() ) {
+                               if ( model.isPerGroupRequestParameter() ) {
+                                       result.push( name );
+                               } else {
+                                       // Each filter is its own param
+                                       result = result.concat( model.getItems().map( function ( filterItem ) {
+                                               return filterItem.getParamName();
+                                       } ) );
+                               }
+                       }
+               } );
+
+               return result;
+       };
+
+       /**
+        * Get a parameter representation of all sticky parameters
+        *
+        * @return {Object} Sticky parameter values
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getStickyParamsValues = function () {
                var result = {};
 
                $.each( this.groups, function ( name, model ) {
         *                  are the selected highlight colors.
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightParameters = function () {
-               var result = {};
+               var highlightEnabled = this.isHighlightEnabled(),
+                       result = {};
 
                this.getItems().forEach( function ( filterItem ) {
-                       result[ filterItem.getName() + '_color' ] = filterItem.getHighlightColor() || null;
+                       if ( filterItem.isHighlightSupported() ) {
+                               result[ filterItem.getName() + '_color' ] = highlightEnabled && filterItem.isHighlighted() ?
+                                       filterItem.getHighlightColor() :
+                                       null;
+                       }
                } );
-               result.highlight = String( Number( this.isHighlightEnabled() ) );
 
                return result;
        };
                var result = {};
 
                this.getItems().forEach( function ( filterItem ) {
-                       result[ filterItem.getName() + '_color' ] = null;
-               } );
-               result.highlight = '0';
-
-               return result;
-       };
-
-       /**
-        * Extract the highlight values from given object. Since highlights are
-        * the same for filter and parameters, it doesn't matter which one is
-        * given; values will be returned with a full list of the highlights
-        * with colors or null values.
-        *
-        * @param {Object} representation Object containing representation of
-        *  some or all highlight values
-        * @return {Object} Object where keys are `<filter name>_color` and values
-        *                  are the selected highlight colors. The returned object
-        *                  contains all available filters either with a color value
-        *                  or with null.
-        */
-       mw.rcfilters.dm.FiltersViewModel.prototype.extractHighlightValues = function ( representation ) {
-               var result = {};
-
-               this.getItems().forEach( function ( filterItem ) {
-                       var highlightName = filterItem.getName() + '_color';
-                       result[ highlightName ] = representation[ highlightName ] || null;
+                       if ( filterItem.isHighlightSupported() ) {
+                               result[ filterItem.getName() + '_color' ] = null;
+                       }
                } );
 
                return result;
        mw.rcfilters.dm.FiltersViewModel.prototype.getCurrentlyUsedHighlightColors = function () {
                var result = [];
 
-               this.getHighlightedItems().forEach( function ( filterItem ) {
-                       var color = filterItem.getHighlightColor();
+               if ( this.isHighlightEnabled() ) {
+                       this.getHighlightedItems().forEach( function ( filterItem ) {
+                               var color = filterItem.getHighlightColor();
 
-                       if ( result.indexOf( color ) === -1 ) {
-                               result.push( color );
-                       }
-               } );
+                               if ( result.indexOf( color ) === -1 ) {
+                                       result.push( color );
+                               }
+                       } );
+               }
 
                return result;
        };
                enable = enable === undefined ? !this.highlightEnabled : enable;
 
                if ( this.highlightEnabled !== enable ) {
-                       // HACK make sure highlights are disabled globally while we toggle on the items,
-                       // otherwise we'll call clearHighlight() and applyHighlight() many many times
-                       this.highlightEnabled = false;
-                       this.getItems().forEach( function ( filterItem ) {
-                               filterItem.toggleHighlight( enable );
-                       } );
-
                        this.highlightEnabled = enable;
                        this.emit( 'highlightChange', this.highlightEnabled );
                }
         * Propagate the change to namespace filter items.
         *
         * @param {boolean} enable Inverted property is enabled
-        * @fires invertChange
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.toggleInvertedNamespaces = function ( enable ) {
-               enable = enable === undefined ? !this.invertedNamespaces : enable;
-
-               if ( this.invertedNamespaces !== enable ) {
-                       this.invertedNamespaces = enable;
-
-                       this.getFiltersByView( 'namespaces' ).forEach( function ( filterItem ) {
-                               filterItem.toggleInverted( this.invertedNamespaces );
-                       }.bind( this ) );
-
-                       this.emit( 'invertChange', this.invertedNamespaces );
-               }
+               this.toggleFilterSelected( this.getInvertModel().getName(), enable );
        };
 
        /**
-        * Check if the namespaces selection is set to be inverted
-        * @return {boolean}
+        * Get the model object that represents the 'invert' filter
+        *
+        * @return {mw.rcfilters.dm.FilterItem}
         */
-       mw.rcfilters.dm.FiltersViewModel.prototype.areNamespacesInverted = function () {
-               return !!this.invertedNamespaces;
+       mw.rcfilters.dm.FiltersViewModel.prototype.getInvertModel = function () {
+               return this.getGroup( 'invertGroup' ).getItemByParamName( 'invert' );
        };
 
        /**
                this.getItemByName( filterName ).clearHighlightColor();
        };
 
-       /**
-        * Clear highlight for all filter items
-        */
-       mw.rcfilters.dm.FiltersViewModel.prototype.clearAllHighlightColors = function () {
-               this.getItems().forEach( function ( filterItem ) {
-                       filterItem.clearHighlightColor();
-               } );
-       };
-
        /**
         * Return a version of the given string that is without any
         * view triggers.
index 9c56f09..44b6c8c 100644 (file)
@@ -14,8 +14,6 @@
         *  with 'default' and 'inverted' as keys.
         * @cfg {boolean} [active=true] The filter is active and affecting the result
         * @cfg {boolean} [selected] The item is selected
-        * @cfg {boolean} [inverted] The item is inverted, meaning the search is excluding
-        *  this parameter.
         * @cfg {string} [namePrefix='item_'] A prefix to add to the param name to act as a unique
         *  identifier
         * @cfg {string} [cssClass] The class identifying the results that match this filter
                this.description = config.description || '';
                this.selected = !!config.selected;
 
-               this.inverted = !!config.inverted;
                this.identifiers = config.identifiers || [];
 
                // Highlight
                this.cssClass = config.cssClass;
                this.highlightColor = config.defaultHighlightColor;
-               this.highlightEnabled = !!config.defaultHighlightColor;
        };
 
        /* Initialization */
@@ -69,8 +65,7 @@
         */
        mw.rcfilters.dm.ItemModel.prototype.getState = function () {
                return {
-                       selected: this.isSelected(),
-                       inverted: this.isInverted()
+                       selected: this.isSelected()
                };
        };
 
        };
 
        /**
-        * Get a prefixed label
+        * Get the message key to use to wrap the label. This message takes the label as a parameter.
         *
-        * @return {string} Prefixed label
+        * @param {boolean} inverted Whether this item should be considered inverted
+        * @return {string|null} Message key, or null if no message
         */
-       mw.rcfilters.dm.ItemModel.prototype.getPrefixedLabel = function () {
+       mw.rcfilters.dm.ItemModel.prototype.getLabelMessageKey = function ( inverted ) {
                if ( this.labelPrefixKey ) {
                        if ( typeof this.labelPrefixKey === 'string' ) {
-                               return mw.message( this.labelPrefixKey, this.getLabel() ).parse();
-                       } else {
-                               return mw.message(
-                                       this.labelPrefixKey[
-                                               // Only use inverted-prefix if the item is selected
-                                               // Highlight-only an inverted item makes no sense
-                                               this.isInverted() && this.isSelected() ?
-                                                       'inverted' : 'default'
-                                       ],
-                                       this.getLabel()
-                               ).parse();
+                               return this.labelPrefixKey;
                        }
-               } else {
-                       return this.getLabel();
+                       return this.labelPrefixKey[
+                               // Only use inverted-prefix if the item is selected
+                               // Highlight-only an inverted item makes no sense
+                               inverted && this.isSelected() ?
+                                       'inverted' : 'default'
+                       ];
                }
+               return null;
        };
 
        /**
                }
        };
 
-       /**
-        * Get the inverted state of this item
-        *
-        * @return {boolean} Item is inverted
-        */
-       mw.rcfilters.dm.ItemModel.prototype.isInverted = function () {
-               return this.inverted;
-       };
-
-       /**
-        * Toggle the inverted state of the item
-        *
-        * @param {boolean} [isInverted] Item is inverted
-        * @fires update
-        */
-       mw.rcfilters.dm.ItemModel.prototype.toggleInverted = function ( isInverted ) {
-               isInverted = isInverted === undefined ? !this.inverted : isInverted;
-
-               if ( this.inverted !== isInverted ) {
-                       this.inverted = isInverted;
-                       this.emit( 'update' );
-               }
-       };
-
        /**
         * Set the highlight color
         *
         * @param {string|null} highlightColor
         */
        mw.rcfilters.dm.ItemModel.prototype.setHighlightColor = function ( highlightColor ) {
+               if ( !this.isHighlightSupported() ) {
+                       return;
+               }
+
                if ( this.highlightColor !== highlightColor ) {
                        this.highlightColor = highlightColor;
                        this.emit( 'update' );
                return this.identifiers;
        };
 
-       /**
-        * Toggle the highlight feature on and off for this filter.
-        * It only works if highlight is supported for this filter.
-        *
-        * @param {boolean} enable Highlight should be enabled
-        */
-       mw.rcfilters.dm.ItemModel.prototype.toggleHighlight = function ( enable ) {
-               enable = enable === undefined ? !this.highlightEnabled : enable;
-
-               if ( !this.isHighlightSupported() ) {
-                       return;
-               }
-
-               if ( enable === this.highlightEnabled ) {
-                       return;
-               }
-
-               this.highlightEnabled = enable;
-               this.emit( 'update' );
-       };
-
-       /**
-        * Check if the highlight feature is currently enabled for this filter
-        *
-        * @return {boolean}
-        */
-       mw.rcfilters.dm.ItemModel.prototype.isHighlightEnabled = function () {
-               return !!this.highlightEnabled;
-       };
-
        /**
         * Check if the highlight feature is supported for this filter
         *
         * @return {boolean}
         */
        mw.rcfilters.dm.ItemModel.prototype.isHighlighted = function () {
-               return this.isHighlightEnabled() && !!this.getHighlightColor();
+               return !!this.getHighlightColor();
        };
 }( mediaWiki ) );
index 2b17897..1d7934f 100644 (file)
@@ -80,8 +80,7 @@
         * @fires initialize
         */
        mw.rcfilters.dm.SavedQueriesModel.prototype.initialize = function ( savedQueries ) {
-               var model = this,
-                       excludedParams = this.filtersModel.getExcludedParams();
+               var model = this;
 
                savedQueries = savedQueries || {};
 
                        if ( normalizedData && normalizedData.params ) {
                                // Backwards-compat fix: Remove excluded parameters from
                                // the given data, if they exist
-                               excludedParams.forEach( function ( name ) {
-                                       delete normalizedData.params[ name ];
-                               } );
+                               normalizedData.params = model.filtersModel.removeExcludedParams( normalizedData.params );
+
+                               model.cleanupHighlights( normalizedData );
 
                                id = String( id );
-                               model.addNewQuery( obj.label, normalizedData, isDefault, id );
+
+                               // Skip the addNewQuery method because we don't want to unnecessarily manipulate
+                               // the given saved queries unless we literally intend to (like in backwards compat fixes)
+                               // And the addNewQuery method also uses a minimization routine that checks for the
+                               // validity of items and minimizes the query. This isn't necessary for queries loaded
+                               // from the backend, and has the risk of removing values if they're temporarily
+                               // invalid (example: if we temporarily removed a cssClass from a filter in the backend)
+                               model.addItems( [
+                                       new mw.rcfilters.dm.SavedQueryItemModel(
+                                               id,
+                                               obj.label,
+                                               normalizedData,
+                                               { 'default': isDefault }
+                                       )
+                               ] );
 
                                if ( isDefault ) {
                                        model.default = id;
                this.emit( 'initialize' );
        };
 
+       /**
+        * Clean up highlight parameters.
+        * 'highlight' used to be stored, it's not inferred based on the presence of absence of
+        * filter colors.
+        *
+        * @param {Object} data Saved query data
+        */
+       mw.rcfilters.dm.SavedQueriesModel.prototype.cleanupHighlights = function ( data ) {
+               if (
+                       data.params.highlight === '0' &&
+                       data.highlights && Object.keys( data.highlights ).length
+               ) {
+                       data.highlights = {};
+               }
+               delete data.params.highlight;
+       };
+
        /**
         * Convert from representation of filters to representation of parameters
         *
                delete data.highlights.highlight;
 
                // Filters
-               newData.params = this.filtersModel.getParametersFromFilters( fullFilterRepresentation );
+               newData.params = this.filtersModel.getMinimizedParamRepresentation(
+                       this.filtersModel.getParametersFromFilters( fullFilterRepresentation )
+               );
 
-               // Highlights (taking out 'highlight' itself, appending _color to keys)
+               // Highlights: appending _color to keys
                newData.highlights = {};
-               Object.keys( data.highlights ).forEach( function ( highlightedFilterName ) {
-                       newData.highlights[ highlightedFilterName + '_color' ] = data.highlights[ highlightedFilterName ];
+               $.each( data.highlights, function ( highlightedFilterName, value ) {
+                       if ( value ) {
+                               newData.highlights[ highlightedFilterName + '_color' ] = data.highlights[ highlightedFilterName ];
+                       }
                } );
 
-               // Add highlight and invert toggles to params
+               // Add highlight
                newData.params.highlight = String( Number( highlightEnabled || 0 ) );
-               newData.params.invert = String( Number( data.invert || 0 ) );
 
                return newData;
        };
 
-       /**
-        * Get an object representing the base state of parameters
-        * and highlights.
-        *
-        * This is meant to make sure that the saved queries that are
-        * in memory are always the same structure as what we would get
-        * by calling the current model's "getSelectedState" and by checking
-        * highlight items.
-        *
-        * In cases where a user saved a query when the system had a certain
-        * set of params, and then a filter was added to the system, we want
-        * to make sure that the stored queries can still be comparable to
-        * the current state, which means that we need the base state for
-        * two operations:
-        *
-        * - Saved queries are stored in "minimal" view (only changed params
-        *   are stored); When we initialize the system, we merge each minimal
-        *   query with the base state (using 'getMinimalParamList') so all
-        *   saved queries have the exact same structure as what we would get
-        *   by checking the getSelectedState of the filter.
-        * - When we save the queries, we minimize the object to only represent
-        *   whatever has actually changed, rather than store the entire
-        *   object. To check what actually is different so we can store it,
-        *   we need to obtain a base state to compare against, this is
-        *   what #getMinimalParamList does
-        *
-        * @return {Object} Base parameter state
-        */
-       mw.rcfilters.dm.SavedQueriesModel.prototype.getBaseParamState = function () {
-               var allParams,
-                       highlightedItems = {};
-
-               if ( !this.baseParamState ) {
-                       allParams = this.filtersModel.getParametersFromFilters( {} );
-
-                       // Prepare highlights
-                       this.filtersModel.getItemsSupportingHighlights().forEach( function ( item ) {
-                               highlightedItems[ item.getName() + '_color' ] = null;
-                       } );
-
-                       this.baseParamState = {
-                               params: $.extend( true, { invert: '0', highlight: '0' }, allParams ),
-                               highlights: highlightedItems
-                       };
-               }
-
-               return this.baseParamState;
-       };
-
-       /**
-        * Get an object that holds only the parameters and highlights that have
-        * values different than the base value.
-        *
-        * This is the reverse of the normalization we do initially on loading and
-        * initializing the saved queries model.
-        *
-        * @param {Object} valuesObject Object representing the state of both
-        *  filters and highlights in its normalized version, to be minimized.
-        * @return {Object} Minimal filters and highlights list
-        */
-       mw.rcfilters.dm.SavedQueriesModel.prototype.getMinimalParamList = function ( valuesObject ) {
-               var result = { params: {}, highlights: {} },
-                       baseState = this.getBaseParamState();
-
-               // XOR results
-               $.each( valuesObject.params, function ( name, value ) {
-                       if ( baseState.params !== undefined && baseState.params[ name ] !== value ) {
-                               result.params[ name ] = value;
-                       }
-               } );
-
-               $.each( valuesObject.highlights, function ( name, value ) {
-                       if ( baseState.highlights !== undefined && baseState.highlights[ name ] !== value ) {
-                               result.highlights[ name ] = value;
-                       }
-               } );
-
-               return result;
-       };
-
        /**
         * Add a query item
         *
         * @param {string} label Label for the new query
-        * @param {Object} data Data for the new query
+        * @param {Object} fulldata Full data representation for the new query, combining highlights and filters
         * @param {boolean} isDefault Item is default
         * @param {string} [id] Query ID, if exists. If this isn't given, a random
         *  new ID will be created.
         * @return {string} ID of the newly added query
         */
-       mw.rcfilters.dm.SavedQueriesModel.prototype.addNewQuery = function ( label, data, isDefault, id ) {
-               var randomID = String( id || ( new Date() ).getTime() ),
-                       normalizedData = this.getMinimalParamList( data );
+       mw.rcfilters.dm.SavedQueriesModel.prototype.addNewQuery = function ( label, fulldata, isDefault, id ) {
+               var normalizedData = { params: {}, highlights: {} },
+                       highlightParamNames = Object.keys( this.filtersModel.getEmptyHighlightParameters() ),
+                       randomID = String( id || ( new Date() ).getTime() ),
+                       data = this.filtersModel.getMinimizedParamRepresentation( fulldata );
+
+               // Split highlight/params
+               $.each( data, function ( param, value ) {
+                       if ( param !== 'highlight' && highlightParamNames.indexOf( param ) > -1 ) {
+                               normalizedData.highlights[ param ] = value;
+                       } else {
+                               normalizedData.params[ param ] = value;
+                       }
+               } );
 
                // Add item
                this.addItems( [
         */
        mw.rcfilters.dm.SavedQueriesModel.prototype.findMatchingQuery = function ( fullQueryComparison ) {
                // Minimize before comparison
-               fullQueryComparison = this.getMinimalParamList( fullQueryComparison );
+               fullQueryComparison = this.filtersModel.getMinimizedParamRepresentation( fullQueryComparison );
 
                return this.getItems().filter( function ( item ) {
                        return OO.compare(
-                               item.getData(),
+                               item.getCombinedData(),
                                fullQueryComparison
                        );
                } )[ 0 ];
        };
 
        /**
-        * Get an item's full data
+        * Get the full data representation of the default query, if it exists
         *
-        * @param {string} queryID Query identifier
-        * @return {Object} Item's full data
+        * @param {boolean} [excludeHiddenParams] Exclude hidden parameters in the result
+        * @return {Object|null} Representation of the default params if exists.
+        *  Null if default doesn't exist or if the user is not logged in.
         */
-       mw.rcfilters.dm.SavedQueriesModel.prototype.getItemFullData = function ( queryID ) {
-               var item = this.getItemByID( queryID );
+       mw.rcfilters.dm.SavedQueriesModel.prototype.getDefaultParams = function ( excludeHiddenParams ) {
+               var data = ( !mw.user.isAnon() && this.getItemParams( this.getDefault() ) ) || {};
+
+               if ( excludeHiddenParams ) {
+                       Object.keys( this.filtersModel.getDefaultHiddenParams() ).forEach( function ( paramName ) {
+                               delete data[ paramName ];
+                       } );
+               }
 
-               // Fill in the base params
-               return item ? $.extend( true, {}, this.getBaseParamState(), item.getData() ) : {};
+               return data;
+       };
+
+       /**
+        * Get a full parameter representation of an item data
+        *
+        * @param  {Object} queryID Query ID
+        * @return {Object} Parameter representation
+        */
+       mw.rcfilters.dm.SavedQueriesModel.prototype.getItemParams = function ( queryID ) {
+               var item = this.getItemByID( queryID ),
+                       data = item ? item.getData() : {};
+
+               return !$.isEmptyObject( data ) ? this.buildParamsFromData( data ) : {};
+       };
+
+       /**
+        * Build a full parameter representation given item data and model sticky values state
+        *
+        * @param  {Object} data Item data
+        * @return {Object} Full param representation
+        */
+       mw.rcfilters.dm.SavedQueriesModel.prototype.buildParamsFromData = function ( data ) {
+               // Merge saved filter state with sticky filter values
+               var savedFilters;
+
+               data = data || {};
+
+               // In order to merge sticky filters with the data, we have to
+               // transform this to filters first, merge, and then back to
+               // parameters
+               savedFilters = $.extend(
+                       true, {},
+                       this.filtersModel.getFiltersFromParameters( data.params ),
+                       this.filtersModel.getStickyFiltersState()
+               );
+
+               // Return parameter representation
+               return this.filtersModel.getMinimizedParamRepresentation( $.extend( true, {},
+                       this.filtersModel.getParametersFromFilters( savedFilters ),
+                       data.highlights
+               ) );
        };
 
        /**
         * @return {Object} Object representing the state of the model and items
         */
        mw.rcfilters.dm.SavedQueriesModel.prototype.getState = function () {
-               var model = this,
-                       obj = { queries: {}, version: '2' };
+               var obj = { queries: {}, version: '2' };
 
                // Translate the items to the saved object
                this.getItems().forEach( function ( item ) {
-                       var itemState = item.getState();
-
-                       itemState.data = model.getMinimalParamList( itemState.data );
-
-                       obj.queries[ item.getID() ] = itemState;
+                       obj.queries[ item.getID() ] = item.getState();
                } );
 
                if ( this.getDefault() ) {
index 81c8306..c74648e 100644 (file)
@@ -10,7 +10,7 @@
         * @param {string} label Saved query label
         * @param {Object} data Saved query data
         * @param {Object} [config] Configuration options
-        * @param {boolean} [default] This item is the default
+        * @cfg {boolean} [default] This item is the default
         */
        mw.rcfilters.dm.SavedQueryItemModel = function MwRcfiltersDmSavedQueriesModel( id, label, data, config ) {
                config = config || {};
                return this.data;
        };
 
+       /**
+        * Get the combined data of this item as a flat object of parameters
+        *
+        * @return {Object} Combined parameter data
+        */
+       mw.rcfilters.dm.SavedQueryItemModel.prototype.getCombinedData = function () {
+               return $.extend( true, {}, this.data.params, this.data.highlights );
+       };
+
        /**
         * Check whether this item is the default
         *
index 86d1dbf..f011042 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index b852cd0..c4a1341 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
 </svg>
index 68459db..2e3ebcb 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
 </svg>
index 3e71729..5386291 100644 (file)
         * @param {Object} [tagList] Tag definition
         */
        mw.rcfilters.Controller.prototype.initialize = function ( filterStructure, namespaceStructure, tagList ) {
-               var parsedSavedQueries,
+               var parsedSavedQueries, pieces,
                        displayConfig = mw.config.get( 'StructuredChangeFiltersDisplayConfig' ),
                        defaultSavedQueryExists = mw.config.get( 'wgStructuredChangeFiltersDefaultSavedQueryExists' ),
                        controller = this,
                        views = {},
                        items = [],
-                       uri = new mw.Uri(),
-                       $changesList = $( '.mw-changeslist' ).first().contents();
+                       uri = new mw.Uri();
 
                // Prepare views
                if ( namespaceStructure ) {
                                        separator: ';',
                                        fullCoverage: true,
                                        filters: items
+                               },
+                               {
+                                       name: 'invertGroup',
+                                       type: 'boolean',
+                                       hidden: true,
+                                       filters: [ {
+                                               name: 'invert',
+                                               'default': '0'
+                                       } ]
                                } ]
                        };
                }
                        // again
                        this.updateStateFromUrl( false );
 
+                       pieces = this._extractChangesListInfo( $( '#mw-content-text' ) );
+
                        // Update the changes list with the existing data
                        // so it gets processed
                        this.changesListModel.update(
-                               $changesList.length ? $changesList : 'NO_RESULTS',
-                               $( 'fieldset.cloptions' ).first(),
+                               pieces.changes,
+                               pieces.fieldset,
+                               pieces.noResultsDetails,
                                true // We're using existing DOM elements
                        );
                }
                }
        };
 
+       /**
+        * Extracts information from the changes list DOM
+        *
+        * @param {jQuery} $root Root DOM to find children from
+        * @return {Object} Information about changes list
+        * @return {Object|string} return.changes Changes list, or 'NO_RESULTS' if there are no results
+        *   (either normally or as an error)
+        * @return {string} [return.noResultsDetails] 'NO_RESULTS_NORMAL' for a normal 0-result set,
+        *   'NO_RESULTS_TIMEOUT' for no results due to a timeout, or omitted for more than 0 results
+        * @return {jQuery} return.fieldset Fieldset
+        */
+       mw.rcfilters.Controller.prototype._extractChangesListInfo = function ( $root ) {
+               var info, isTimeout,
+                       $changesListContents = $root.find( '.mw-changeslist' ).first().contents(),
+                       areResults = !!$changesListContents.length;
+
+               info = {
+                       changes: $changesListContents.length ? $changesListContents : 'NO_RESULTS',
+                       fieldset: $root.find( 'fieldset.cloptions' ).first()
+               };
+
+               if ( !areResults ) {
+                       isTimeout = !!$root.find( '.mw-changeslist-timeout' ).length;
+                       info.noResultsDetails = isTimeout ? 'NO_RESULTS_TIMEOUT' : 'NO_RESULTS_NORMAL';
+               }
+
+               return info;
+       };
+
        /**
         * Create filter data from a number, for the filters that are numerical value
         *
         * Reset to default filters
         */
        mw.rcfilters.Controller.prototype.resetToDefaults = function () {
-               this.uriProcessor.updateModelBasedOnQuery( this._getDefaultParams() );
-
-               this.updateChangesList();
+               if ( this.applyParamChange( this._getDefaultParams() ) ) {
+                       // Only update the changes list if there was a change to actual filters
+                       this.updateChangesList();
+               }
        };
 
        /**
         * @return {boolean} Defaults are all false
         */
        mw.rcfilters.Controller.prototype.areDefaultsEmpty = function () {
-               var defaultParams = this._getDefaultParams(),
-                       defaultFilters = this.filtersModel.getFiltersFromParameters( defaultParams );
-
-               this._deleteExcludedValuesFromFilterState( defaultFilters );
-
-               if ( Object.keys( defaultParams ).some( function ( paramName ) {
-                       return paramName.endsWith( '_color' ) && defaultParams[ paramName ] !== null;
-               } ) ) {
-                       // There are highlights in the defaults, they're definitely
-                       // not empty
-                       return false;
-               }
-
-               // Defaults can change in a session, so we need to do this every time
-               return Object.keys( defaultFilters ).every( function ( filterName ) {
-                       return !defaultFilters[ filterName ];
-               } );
+               return $.isEmptyObject( this._getDefaultParams( true ) );
        };
 
        /**
         * Empty all selected filters
         */
        mw.rcfilters.Controller.prototype.emptyFilters = function () {
-               var highlightedFilterNames = this.filtersModel
-                       .getHighlightedItems()
+               var highlightedFilterNames = this.filtersModel.getHighlightedItems()
                        .map( function ( filterItem ) { return { name: filterItem.getName() }; } );
 
-               this.filtersModel.emptyAllFilters();
-               this.filtersModel.clearAllHighlightColors();
-               // Check all filter interactions
-               this.filtersModel.reassessFilterInteractions();
-
-               this.updateChangesList();
+               if ( this.applyParamChange( {} ) ) {
+                       // Only update the changes list if there was a change to actual filters
+                       this.updateChangesList();
+               }
 
                if ( highlightedFilterNames ) {
                        this._trackHighlight( 'clearAll', highlightedFilterNames );
         */
        mw.rcfilters.Controller.prototype.clearFilter = function ( filterName ) {
                var filterItem = this.filtersModel.getItemByName( filterName ),
-                       isHighlighted = filterItem.isHighlighted();
+                       isHighlighted = filterItem.isHighlighted(),
+                       isSelected = filterItem.isSelected();
 
-               if ( filterItem.isSelected() || isHighlighted ) {
+               if ( isSelected || isHighlighted ) {
                        this.filtersModel.clearHighlightColor( filterName );
                        this.filtersModel.toggleFilterSelected( filterName, false );
-                       this.updateChangesList();
+
+                       if ( isSelected ) {
+                               // Only update the changes list if the filter changed
+                               // its selection state. If it only changed its highlight
+                               // then don't reload
+                               this.updateChangesList();
+                       }
+
                        this.filtersModel.reassessFilterInteractions( filterItem );
 
                        // Log filter grouping
         */
        mw.rcfilters.Controller.prototype.toggleHighlight = function () {
                this.filtersModel.toggleHighlight();
-               this._updateURL();
+               this.uriProcessor.updateURL();
 
                if ( this.filtersModel.isHighlightEnabled() ) {
                        mw.hook( 'RcFilters.highlight.enable' ).fire();
         */
        mw.rcfilters.Controller.prototype.setHighlightColor = function ( filterName, color ) {
                this.filtersModel.setHighlightColor( filterName, color );
-               this._updateURL();
+               this.uriProcessor.updateURL();
                this._trackHighlight( 'set', { name: filterName, color: color } );
        };
 
         */
        mw.rcfilters.Controller.prototype.clearHighlightColor = function ( filterName ) {
                this.filtersModel.clearHighlightColor( filterName );
-               this._updateURL();
+               this.uriProcessor.updateURL();
                this._trackHighlight( 'clear', filterName );
        };
 
         * @param {boolean} [setAsDefault=false] This query should be set as the default
         */
        mw.rcfilters.Controller.prototype.saveCurrentQuery = function ( label, setAsDefault ) {
-               var highlightedItems = {},
-                       highlightEnabled = this.filtersModel.isHighlightEnabled(),
-                       selectedState = this.filtersModel.getSelectedState();
-
-               // Prepare highlights
-               this.filtersModel.getHighlightedItems().forEach( function ( item ) {
-                       highlightedItems[ item.getName() + '_color' ] = highlightEnabled ?
-                               item.getHighlightColor() : null;
-               } );
-
-               // Delete all excluded filters
-               this._deleteExcludedValuesFromFilterState( selectedState );
-
                // Add item
                this.savedQueriesModel.addNewQuery(
                        label || mw.msg( 'rcfilters-savedqueries-defaultlabel' ),
-                       {
-                               params: $.extend(
-                                       true,
-                                       {
-                                               invert: String( Number( this.filtersModel.areNamespacesInverted() ) ),
-                                               highlight: String( Number( this.filtersModel.isHighlightEnabled() ) )
-                                       },
-                                       this.filtersModel.getParametersFromFilters( selectedState )
-                               ),
-                               highlights: highlightedItems
-                       },
+                       this.filtersModel.getCurrentParameterState( true ),
                        setAsDefault
                );
 
         * @param {string} queryID Query id
         */
        mw.rcfilters.Controller.prototype.applySavedQuery = function ( queryID ) {
-               var highlights,
-                       queryItem = this.savedQueriesModel.getItemByID( queryID ),
-                       data = this.savedQueriesModel.getItemFullData( queryID ),
-                       currentMatchingQuery = this.findQueryMatchingCurrentState();
+               var currentMatchingQuery,
+                       params = this.savedQueriesModel.getItemParams( queryID );
+
+               currentMatchingQuery = this.findQueryMatchingCurrentState();
 
                if (
-                       queryItem &&
-                       (
-                               // If there's already a query, don't reload it
-                               // if it's the same as the one that already exists
-                               !currentMatchingQuery ||
-                               currentMatchingQuery.getID() !== queryItem.getID()
-                       )
+                       currentMatchingQuery &&
+                       currentMatchingQuery.getID() === queryID
                ) {
-                       highlights = data.highlights;
-
-                       // Update model state from filters
-                       this.filtersModel.toggleFiltersSelected(
-                               // Merge filters with excluded values
-                               $.extend(
-                                       true,
-                                       {},
-                                       this.filtersModel.getFiltersFromParameters( data.params ),
-                                       this.filtersModel.getExcludedFiltersState()
-                               )
-                       );
-
-                       // Update namespace inverted property
-                       this.filtersModel.toggleInvertedNamespaces( !!Number( data.params.invert ) );
-
-                       // Update highlight state
-                       this.filtersModel.toggleHighlight( !!Number( data.params.highlight ) );
-                       this.filtersModel.getItems().forEach( function ( filterItem ) {
-                               var color = highlights[ filterItem.getName() + '_color' ];
-                               if ( color ) {
-                                       filterItem.setHighlightColor( color );
-                               } else {
-                                       filterItem.clearHighlightColor();
-                               }
-                       } );
-
-                       // Check all filter interactions
-                       this.filtersModel.reassessFilterInteractions();
+                       // If the query we want to load is the one that is already
+                       // loaded, don't reload it
+                       return;
+               }
 
+               if ( this.applyParamChange( params ) ) {
+                       // Update changes list only if there was a difference in filter selection
                        this.updateChangesList();
-
-                       // Log filter grouping
-                       this.trackFilterGroupings( 'savedfilters' );
                }
+
+               // Log filter grouping
+               this.trackFilterGroupings( 'savedfilters' );
        };
 
        /**
         * Check whether the current filter and highlight state exists
         * in the saved queries model.
         *
-        * @return {boolean} Query exists
+        * @return {mw.rcfilters.dm.SavedQueryItemModel} Matching item model
         */
        mw.rcfilters.Controller.prototype.findQueryMatchingCurrentState = function () {
-               var highlightedItems = {},
-                       selectedState = this.filtersModel.getSelectedState();
-
-               // Prepare highlights of the current query
-               this.filtersModel.getItemsSupportingHighlights().forEach( function ( item ) {
-                       highlightedItems[ item.getName() + '_color' ] = item.getHighlightColor();
-               } );
-
-               // Remove anything that should be excluded from the saved query
-               // this includes sticky filters and filters marked with 'excludedFromSavedQueries'
-               this._deleteExcludedValuesFromFilterState( selectedState );
-
                return this.savedQueriesModel.findMatchingQuery(
-                       {
-                               params: $.extend(
-                                       true,
-                                       {
-                                               highlight: String( Number( this.filtersModel.isHighlightEnabled() ) ),
-                                               invert: String( Number( this.filtersModel.areNamespacesInverted() ) )
-                                       },
-                                       this.filtersModel.getParametersFromFilters( selectedState )
-                               ),
-                               highlights: highlightedItems
-                       }
+                       this.filtersModel.getCurrentParameterState( true )
                );
        };
 
-       /**
-        * Delete sticky filters from given object
-        *
-        * @param {Object} filterState Filter state
-        */
-       mw.rcfilters.Controller.prototype._deleteExcludedValuesFromFilterState = function ( filterState ) {
-               // Remove excluded filters
-               $.each( this.filtersModel.getExcludedFiltersState(), function ( filterName ) {
-                       delete filterState[ filterName ];
-               } );
-       };
-
        /**
         * Save the current state of the saved queries model with all
         * query item representation in the user settings.
         * without adding an history entry.
         */
        mw.rcfilters.Controller.prototype.replaceUrl = function () {
-               mw.rcfilters.UriProcessor.static.replaceState( this._getUpdatedUri() );
+               this.uriProcessor.updateURL();
        };
 
        /**
                updateMode = updateMode === undefined ? this.FILTER_CHANGE : updateMode;
 
                if ( updateMode === this.FILTER_CHANGE ) {
-                       this._updateURL( params );
+                       this.uriProcessor.updateURL( params );
                }
                if ( updateMode === this.FILTER_CHANGE || updateMode === this.SHOW_NEW_CHANGES ) {
                        this.changesListModel.invalidate();
                                        this.changesListModel.update(
                                                $changesListContent,
                                                $fieldset,
+                                               pieces.noResultsDetails,
                                                false,
                                                // separator between old and new changes
                                                updateMode === this.SHOW_NEW_CHANGES || updateMode === this.LIVE_UPDATE
         * Get an object representing the default parameter state, whether
         * it is from the model defaults or from the saved queries.
         *
+        * @param {boolean} [excludeHiddenParams] Exclude hidden and sticky params
         * @return {Object} Default parameters
         */
-       mw.rcfilters.Controller.prototype._getDefaultParams = function () {
-               var savedFilters,
-                       data = ( !mw.user.isAnon() && this.savedQueriesModel.getItemFullData( this.savedQueriesModel.getDefault() ) ) || {};
-
-               if ( !$.isEmptyObject( data ) ) {
-                       // Merge saved filter state with sticky filter values
-                       savedFilters = $.extend(
-                               true, {},
-                               this.filtersModel.getFiltersFromParameters( data.params ),
-                               this.filtersModel.getStickyFiltersState()
-                       );
-
-                       // Return parameter representation
-                       return $.extend( true, {},
-                               this.filtersModel.getParametersFromFilters( savedFilters ),
-                               data.highlights,
-                               { highlight: data.params.highlight, invert: data.params.invert }
-                       );
-               }
-               return this.filtersModel.getDefaultParams();
-       };
-
-       /**
-        * Update the URL of the page to reflect current filters
-        *
-        * This should not be called directly from outside the controller.
-        * If an action requires changing the URL, it should either use the
-        * highlighting actions below, or call #updateChangesList which does
-        * the uri corrections already.
-        *
-        * @param {Object} [params] Extra parameters to add to the API call
-        */
-       mw.rcfilters.Controller.prototype._updateURL = function ( params ) {
-               var currentUri = new mw.Uri(),
-                       updatedUri = this._getUpdatedUri();
-
-               updatedUri.extend( params || {} );
-
-               if (
-                       this.uriProcessor.getVersion( currentUri.query ) !== 2 ||
-                       this.uriProcessor.isNewState( currentUri.query, updatedUri.query )
-               ) {
-                       mw.rcfilters.UriProcessor.static.replaceState( updatedUri );
+       mw.rcfilters.Controller.prototype._getDefaultParams = function ( excludeHiddenParams ) {
+               if ( this.savedQueriesModel.getDefault() ) {
+                       return this.savedQueriesModel.getDefaultParams( excludeHiddenParams );
+               } else {
+                       return this.filtersModel.getDefaultParams( excludeHiddenParams );
                }
        };
 
-       /**
-        * Get an updated mw.Uri object based on the model state
-        *
-        * @return {mw.Uri} Updated Uri
-        */
-       mw.rcfilters.Controller.prototype._getUpdatedUri = function () {
-               var uri = new mw.Uri();
-
-               // Minimize url
-               uri.query = this.uriProcessor.minimizeQuery(
-                       $.extend(
-                               true,
-                               {},
-                               // We want to retain unrecognized params
-                               // The uri params from model will override
-                               // any recognized value in the current uri
-                               // query, retain unrecognized params, and
-                               // the result will then be minimized
-                               uri.query,
-                               this.uriProcessor.getUriParametersFromModel(),
-                               { urlversion: '2' }
-                       )
-               );
-
-               return uri;
-       };
-
        /**
         * Query the list of changes from the server for the current filters
         *
         * @return {jQuery.Promise} Promise object resolved with { content, status }
         */
        mw.rcfilters.Controller.prototype._queryChangesList = function ( counterId, params ) {
-               var uri = this._getUpdatedUri(),
-                       stickyParams = this.filtersModel.getStickyParams(),
+               var uri = this.uriProcessor.getUpdatedUri(),
+                       stickyParams = this.filtersModel.getStickyParamsValues(),
                        requestId,
                        latestRequest;
 
                return this._queryChangesList( 'updateChangesList' )
                        .then(
                                function ( data ) {
-                                       var $parsed = $( '<div>' ).append( $( $.parseHTML( data.content ) ) ),
-                                               pieces = {
-                                                       // Changes list
-                                                       changes: $parsed.find( '.mw-changeslist' ).first().contents(),
-                                                       // Fieldset
-                                                       fieldset: $parsed.find( 'fieldset.cloptions' ).first()
+                                       var $parsed;
+
+                                       // Status code 0 is not HTTP status code,
+                                       // but is valid value of XMLHttpRequest status.
+                                       // It is used for variety of network errors, for example
+                                       // when an AJAX call was cancelled before getting the response
+                                       if ( data && data.status === 0 ) {
+                                               return {
+                                                       changes: 'NO_RESULTS',
+                                                       // We need empty result set, to avoid exceptions because of undefined value
+                                                       fieldset: $( [] ),
+                                                       noResultsDetails: 'NO_RESULTS_NETWORK_ERROR'
                                                };
-
-                                       if ( pieces.changes.length === 0 ) {
-                                               pieces.changes = 'NO_RESULTS';
                                        }
 
-                                       return pieces;
-                               }
+                                       $parsed = $( '<div>' ).append( $( $.parseHTML( data.content ) ) );
+
+                                       return this._extractChangesListInfo( $parsed );
+
+                               }.bind( this )
                        );
        };
 
                }
        };
 
+       /**
+        * Apply a change of parameters to the model state, and check whether
+        * the new state is different than the old state.
+        *
+        * @param  {Object} newParamState New parameter state to apply
+        * @return {boolean} New applied model state is different than the previous state
+        */
+       mw.rcfilters.Controller.prototype.applyParamChange = function ( newParamState ) {
+               var after,
+                       before = this.filtersModel.getSelectedState();
+
+               this.filtersModel.updateStateFromParams( newParamState );
+
+               after = this.filtersModel.getSelectedState();
+
+               return !OO.compare( before, after );
+       };
+
        /**
         * Mark all changes as seen on Watchlist
         */
index c9436f4..c25aa73 100644 (file)
@@ -6,11 +6,7 @@
         * @param {mw.rcfilters.dm.FiltersViewModel} filtersModel Filters view model
         */
        mw.rcfilters.UriProcessor = function MwRcfiltersController( filtersModel ) {
-               this.emptyParameterState = {};
                this.filtersModel = filtersModel;
-
-               // Initialize
-               this._buildEmptyParameterState();
        };
 
        /* Initialization */
        };
 
        /**
-        * Update the filters model based on the URI query
-        * This happens on initialization, and from this moment on,
-        * we consider the system synchronized, and the model serves
-        * as the source of truth for the URL.
+        * Get an updated mw.Uri object based on the model state
         *
-        * This methods should only be called once on initialiation.
-        * After initialization, the model updates the URL, not the
-        * other way around.
-        *
-        * @param {Object} [uriQuery] URI query
+        * @param {Object} [uriQuery] An external URI query to build the new uri
+        *  with. This is mainly for tests, to be able to supply external parameters
+        *  and make sure they are retained.
+        * @return {mw.Uri} Updated Uri
         */
-       mw.rcfilters.UriProcessor.prototype.updateModelBasedOnQuery = function ( uriQuery ) {
-               var parameters;
-
-               uriQuery = uriQuery || new mw.Uri().query;
-
-               // For arbitrary numeric single_option values, check the uri and see if it's beyond the limit
-               $.each( this.filtersModel.getFilterGroups(), function ( groupName, groupModel ) {
-                       if (
-                               groupModel.getType() === 'single_option' &&
-                               groupModel.isAllowArbitrary()
-                       ) {
-                               if (
-                                       groupModel.getMaxValue() !== null &&
-                                       uriQuery[ groupName ] > groupModel.getMaxValue()
-                               ) {
-                                       // Change the value to the actual max value
-                                       uriQuery[ groupName ] = String( groupModel.getMaxValue() );
-                               } else if (
-                                       groupModel.getMinValue() !== null &&
-                                       uriQuery[ groupName ] < groupModel.getMinValue()
-                               ) {
-                                       // Change the value to the actual min value
-                                       uriQuery[ groupName ] = String( groupModel.getMinValue() );
-                               }
-                       }
-               } );
-
-               // Normalize
-               parameters = this._getNormalizedQueryParams( uriQuery );
-
-               // Update filter states
-               this.filtersModel.toggleFiltersSelected(
-                       this.filtersModel.getFiltersFromParameters(
-                               parameters
+       mw.rcfilters.UriProcessor.prototype.getUpdatedUri = function ( uriQuery ) {
+               var uri = new mw.Uri(),
+                       unrecognizedParams = this.getUnrecognizedParams( uriQuery || uri.query );
+
+               if ( uriQuery ) {
+                       // This is mainly for tests, to be able to give the method
+                       // an initial URI Query and test that it retains parameters
+                       uri.query = uriQuery;
+               }
+
+               uri.query = this.filtersModel.getMinimizedParamRepresentation(
+                       $.extend(
+                               true,
+                               {},
+                               uri.query,
+                               // The representation must be expanded so it can
+                               // override the uri query params but we then output
+                               // a minimized version for the entire URI representation
+                               // for the method
+                               this.filtersModel.getExpandedParamRepresentation()
                        )
                );
 
-               this.filtersModel.toggleInvertedNamespaces( !!Number( parameters.invert ) );
+               // Remove excluded params from the url
+               uri.query = this.filtersModel.removeExcludedParams( uri.query );
 
-               // Update highlight state
-               this.filtersModel.getItems().forEach( function ( filterItem ) {
-                       var color = parameters[ filterItem.getName() + '_color' ];
-                       if ( color ) {
-                               filterItem.setHighlightColor( color );
-                       } else {
-                               filterItem.clearHighlightColor();
-                       }
-               } );
-               this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) );
+               // Reapply unrecognized params and url version
+               uri.query = $.extend( true, {}, uri.query, unrecognizedParams, { urlversion: '2' } );
 
-               // Check all filter interactions
-               this.filtersModel.reassessFilterInteractions();
+               return uri;
        };
 
        /**
-        * Get parameters representing the current state of the model
+        * Get an object representing given parameters that are unrecognized by the model
         *
-        * @return {Object} Uri query parameters
+        * @param  {Object} params Full params object
+        * @return {Object} Unrecognized params
         */
-       mw.rcfilters.UriProcessor.prototype.getUriParametersFromModel = function () {
-               return $.extend(
-                       true,
-                       {},
-                       this.filtersModel.getParametersFromFilters(),
-                       this.filtersModel.getHighlightParameters(),
-                       {
-                               highlight: String( Number( this.filtersModel.isHighlightEnabled() ) ),
-                               invert: String( Number( this.filtersModel.areNamespacesInverted() ) )
+       mw.rcfilters.UriProcessor.prototype.getUnrecognizedParams = function ( params ) {
+               // Start with full representation
+               var givenParamNames = Object.keys( params ),
+                       unrecognizedParams = $.extend( true, {}, params );
+
+               // Extract unrecognized parameters
+               Object.keys( this.filtersModel.getEmptyParameterState() ).forEach( function ( paramName ) {
+                       // Remove recognized params
+                       if ( givenParamNames.indexOf( paramName ) > -1 ) {
+                               delete unrecognizedParams[ paramName ];
                        }
-               );
+               } );
+
+               return unrecognizedParams;
        };
 
        /**
-        * Build the full parameter representation based on given query parameters
+        * Update the URL of the page to reflect current filters
         *
-        * @private
-        * @param {Object} uriQuery Given URI query
-        * @return {Object} Full parameter state representing the URI query
+        * This should not be called directly from outside the controller.
+        * If an action requires changing the URL, it should either use the
+        * highlighting actions below, or call #updateChangesList which does
+        * the uri corrections already.
+        *
+        * @param {Object} [params] Extra parameters to add to the API call
         */
-       mw.rcfilters.UriProcessor.prototype._expandModelParameters = function ( uriQuery ) {
-               var filterRepresentation = this.filtersModel.getFiltersFromParameters( uriQuery );
+       mw.rcfilters.UriProcessor.prototype.updateURL = function ( params ) {
+               var currentUri = new mw.Uri(),
+                       updatedUri = this.getUpdatedUri();
+
+               updatedUri.extend( params || {} );
+
+               if (
+                       this.getVersion( currentUri.query ) !== 2 ||
+                       this.isNewState( currentUri.query, updatedUri.query )
+               ) {
+                       this.constructor.static.replaceState( updatedUri );
+               }
+       };
 
-               return $.extend( true,
-                       {},
-                       uriQuery,
-                       this.filtersModel.getParametersFromFilters( filterRepresentation ),
-                       this.filtersModel.extractHighlightValues( uriQuery ),
-                       {
-                               highlight: String( Number( uriQuery.highlight ) ),
-                               invert: String( Number( uriQuery.invert ) )
-                       }
+       /**
+        * Update the filters model based on the URI query
+        * This happens on initialization, and from this moment on,
+        * we consider the system synchronized, and the model serves
+        * as the source of truth for the URL.
+        *
+        * This methods should only be called once on initialiation.
+        * After initialization, the model updates the URL, not the
+        * other way around.
+        *
+        * @param {Object} [uriQuery] URI query
+        */
+       mw.rcfilters.UriProcessor.prototype.updateModelBasedOnQuery = function ( uriQuery ) {
+               this.filtersModel.updateStateFromParams(
+                       this._getNormalizedQueryParams( uriQuery || new mw.Uri().query )
                );
        };
 
                // This will allow us to always have a proper check of whether
                // the requested new url is one to change or not, regardless of
                // actual parameter visibility/representation in the URL
-               currentParamState = this._expandModelParameters( currentUriQuery );
-               updatedParamState = this._expandModelParameters( updatedUriQuery );
+               currentParamState = $.extend(
+                       true,
+                       {},
+                       this.filtersModel.getMinimizedParamRepresentation( currentUriQuery ),
+                       this.getUnrecognizedParams( currentUriQuery )
+               );
+               updatedParamState = $.extend(
+                       true,
+                       {},
+                       this.filtersModel.getMinimizedParamRepresentation( updatedUriQuery ),
+                       this.getUnrecognizedParams( updatedUriQuery )
+               );
 
                return notEquivalent( currentParamState, updatedParamState );
        };
         */
        mw.rcfilters.UriProcessor.prototype.doesQueryContainRecognizedParams = function ( uriQuery ) {
                var anyValidInUrl,
-                       validParameterNames = Object.keys( this._getEmptyParameterState() )
-                               .filter( function ( param ) {
-                                       // Remove 'highlight' parameter from this check;
-                                       // if it's the only parameter in the URL we still
-                                       // want to consider the URL 'empty' for defaults to load
-                                       return param !== 'highlight';
-                               } );
+                       validParameterNames = Object.keys( this.filtersModel.getEmptyParameterState() );
 
                uriQuery = uriQuery || new mw.Uri().query;
 
                return anyValidInUrl || this.getVersion( uriQuery ) === 2;
        };
 
-       /**
-        * Remove all parameters that have the same value as the base state
-        * This method expects uri queries of the urlversion=2 format
-        *
-        * @private
-        * @param {Object} uriQuery Current uri query
-        * @return {Object} Minimized query
-        */
-       mw.rcfilters.UriProcessor.prototype.minimizeQuery = function ( uriQuery ) {
-               var baseParams = this._getEmptyParameterState(),
-                       uriResult = $.extend( true, {}, uriQuery );
-
-               $.each( uriResult, function ( paramName, paramValue ) {
-                       if (
-                               baseParams[ paramName ] !== undefined &&
-                               baseParams[ paramName ] === paramValue
-                       ) {
-                               // Remove parameter from query
-                               delete uriResult[ paramName ];
-                       }
-               } );
-
-               return uriResult;
-       };
-
        /**
         * Get the adjusted URI params based on the url version
         * If the urlversion is not 2, the parameters are merged with
         * the model's defaults.
+        * Always merge in the hidden parameter defaults.
         *
         * @private
         * @param {Object} uriQuery Current URI query
                // wiki default.
                // Any subsequent change of the URL through the RCFilters
                // system will receive 'urlversion=2'
-               var hiddenParamDefaults = {},
+               var hiddenParamDefaults = this.filtersModel.getDefaultHiddenParams(),
                        base = this.getVersion( uriQuery ) === 2 ?
                                {} :
                                this.filtersModel.getDefaultParams();
 
-               // Go over the model and get all hidden parameters' defaults
-               // These defaults should be applied regardless of the urlversion
-               // but be overridden by the URL params if they exist
-               $.each( this.filtersModel.getFilterGroups(), function ( groupName, groupModel ) {
-                       if ( groupModel.isHidden() ) {
-                               $.extend( true, hiddenParamDefaults, groupModel.getDefaultParams() );
-                       }
-               } );
-
-               return this.minimizeQuery(
-                       $.extend( true, {}, hiddenParamDefaults, base, uriQuery, { urlversion: '2' } )
-               );
-       };
-
-       /**
-        * Get the representation of an empty parameter state
-        *
-        * @private
-        * @return {Object} Empty parameter state
-        */
-       mw.rcfilters.UriProcessor.prototype._getEmptyParameterState = function () {
-               // Override empty parameter state with the sticky parameter values
-               return $.extend( true, {}, this.emptyParameterState, this.filtersModel.getStickyParams() );
-       };
-
-       /**
-        * Build an empty representation of the parameters, where all parameters
-        * are either set to '0' or '' depending on their type.
-        * This must run during initialization, before highlights are set.
-        *
-        * @private
-        */
-       mw.rcfilters.UriProcessor.prototype._buildEmptyParameterState = function () {
-               var emptyParams = this.filtersModel.getParametersFromFilters( {} ),
-                       emptyHighlights = this.filtersModel.getEmptyHighlightParameters();
-
-               this.emptyParameterState = $.extend(
+               return $.extend(
                        true,
                        {},
-                       emptyParams,
-                       emptyHighlights,
-                       { highlight: '0', invert: '0' }
+                       this.filtersModel.getMinimizedParamRepresentation(
+                               $.extend( true, {}, hiddenParamDefaults, base, uriQuery )
+                       ),
+                       { urlversion: '2' }
                );
        };
 }( mediaWiki, jQuery ) );
index bab8ee5..14f0f6b 100644 (file)
@@ -12,6 +12,7 @@
                                rcTopSection,
                                $watchlistDetails,
                                wlTopSection,
+                               namespaces,
                                savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
                                filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
                                changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
                                savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
                                        controller, savedQueriesModel, { $overlay: $overlay }
                                ),
-                               specialPage = mw.config.get( 'wgCanonicalSpecialPageName' );
+                               specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
+                               $changesListRoot = $( '.mw-changeslist, .mw-changeslist-empty, .mw-changeslist-timeout' );
 
                        // TODO: The changesListWrapperWidget should be able to initialize
                        // after the model is ready.
+
                        // eslint-disable-next-line no-new
                        new mw.rcfilters.ui.ChangesListWrapperWidget(
-                               filtersModel, changesListModel, controller, $( '.mw-changeslist, .mw-changeslist-empty' ) );
+                               filtersModel, changesListModel, controller, $changesListRoot );
 
                        // Remove the -loading class that may have been added on the server side.
                        // If we are in fact going to load a default saved query, this .initialize()
                        // call will do that and add the -loading class right back.
                        $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
 
+                       // Remove Media namespace
+                       namespaces = mw.config.get( 'wgFormattedNamespaces' );
+                       delete namespaces[ mw.config.get( 'wgNamespaceIds' ).media ];
+
                        controller.initialize(
                                mw.config.get( 'wgStructuredChangeFilters' ),
-                               mw.config.get( 'wgFormattedNamespaces' ),
+                               namespaces,
                                mw.config.get( 'wgRCFiltersChangeTags' )
                        );
 
index ba7a70e..ef358e0 100644 (file)
@@ -1,4 +1,5 @@
 @import 'mediawiki.mixins.animation';
+@import 'mediawiki.ui/variables';
 @import 'mw.rcfilters.mixins';
 
 @rcfilters-spinner-width: 70px;
                min-height: @rcfilters-wl-head-min-height;
        }
 
-       body:not( .mw-rcfilters-ui-initialized ) {
-               .mw-recentchanges-toplinks-content.mw-rcfilters-toplinks-collapsed {
-                       display: none;
+       .mw-recentchanges-toplinks {
+               margin-bottom: 0.5em;
+               padding: 0 0.5em 0.5em 0.5em;
+               border: 1px solid transparent;
+
+               &:not( .mw-recentchanges-toplinks-collapsed ) {
+                       // Same as the legend
+                       border: 1px solid @colorGray12;
                }
+       }
 
-               .mw-recentchanges-toplinks-title.mw-rcfilters-toplinks-collapsed {
-                       // Hide, but keep the placement so we don't jump
-                       visibility: hidden;
+       body:not( .mw-rcfilters-ui-initialized ) {
+               .mw-recentchanges-toplinks.mw-recentchanges-toplinks-collapsed {
+                       // Similar to the watchlist-details hack, we are going to make this float left
+                       // while loading to prevent jumpiness in the min-height calculation
+                       float: left;
+
+                       .mw-recentchanges-toplinks-content {
+                               display: none;
+                       }
                }
 
                .rcfilters-head {
        }
 
        .mw-changeslist {
-               &-empty {
-                       // Hide the 'empty' message when we load rcfilters
-                       // since we replace it anyways with a specific
-                       // message of our own
-                       display: none;
-               }
-
                // Reserve space for the highlight circles
                ul,
                table.mw-enhanced-rc {
                }
        }
 
+       // Temporarily hide any 'empty' or 'timeout' message while we
+       // load rcfilters.
+       .mw-changeslist-empty,
+       .mw-changeslist-timeout {
+               display: none;
+       }
+
        body.mw-rcfilters-ui-loading .mw-changeslist {
                opacity: 0.5;
        }
@@ -84,7 +97,7 @@
                        display: inline-block;
                        width: 12px;
                        height: 12px;
-                       background-color: #c8ccd1;
+                       background-color: @colorGray12;
                        border-radius: 100%;
                        .animation( rcfiltersBouncedelay 1.5s ease-in-out -0.16s infinite both );
                }
                transform: scale( 0.7 );
        }
        40% {
-               background-color: #a2a9b1;
+               background-color: @colorGray10;
                -webkit-transform: scale( 1 );
                transform: scale( 1 );
        }
                transform: scale( 0.7 );
        }
        40% {
-               background-color: #a2a9b1;
+               background-color: @colorGray10;
                -moz-transform: scale( 0.7 );
                transform: scale( 1 );
        }
                transform: scale( 0.7 );
        }
        40% {
-               background-color: #a2a9b1;
+               background-color: @colorGray10;
                transform: scale( 1 );
        }
 }
index 6c44cc4..790e015 100644 (file)
@@ -1,4 +1,5 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
 @import 'mw.rcfilters.variables';
 
 .animation-delay( ... ) {
@@ -8,7 +9,7 @@
 }
 
 // This is a general mixin for a color circle
-.mw-rcfilters-mixin-circle( @color: #fff, @diameter: 2em, @padding: 0.5em, @border: false, @borderColor: #54595d, @emptyBackground: false ) {
+.mw-rcfilters-mixin-circle( @color: @color-base--inverted, @diameter: 2em, @padding: 0.5em, @border: false, @borderColor: @colorGray5, @emptyBackground: false ) {
        .box-sizing( border-box );
        min-width: @diameter;
        width: @diameter;
@@ -54,9 +55,9 @@
 // work if the rules are inside the above widget LESS scope
 .highlight-changesListWrapperWidget( @bgcolor ) {
        .mw-rcfilters-ui-changesListWrapperWidget li&,
-               .mw-rcfilters-ui-changesListWrapperWidget & tr:first-child,
-               .mw-rcfilters-ui-changesListWrapperWidget tr&.mw-rcfilters-ui-changesListWrapperWidget-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not( :nth-child( -n+2 ) ),
-               .mw-rcfilters-ui-changesListWrapperWidget tr&.mw-rcfilters-ui-changesListWrapperWidget-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not( :nth-child( -n+4 ) ) {
+       .mw-rcfilters-ui-changesListWrapperWidget & tr:first-child,
+       .mw-rcfilters-ui-changesListWrapperWidget tr&.mw-rcfilters-ui-changesListWrapperWidget-enhanced-toplevel:not( .mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey ) td:not( :nth-child( -n+2 ) ),
+       .mw-rcfilters-ui-changesListWrapperWidget tr&.mw-rcfilters-ui-changesListWrapperWidget-enhanced-nested:not( .mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey ) td:not( :nth-child( -n+4 ) ) {
                background-color: @bgcolor;
        }
 }
index deaee28..5f6fbea 100644 (file)
@@ -21,7 +21,7 @@
                                                .mw-rcfilters-mixin-circle( @highlight-none, @result-circle-diameter, 0, true, @highlight-grey, true );
                                        }
 
-                                       .mw-rcfilters-ui-changesListWrapperWidget:not(.mw-rcfilters-ui-changesListWrapperWidget-highlighted) & {
+                                       .mw-rcfilters-ui-changesListWrapperWidget:not( .mw-rcfilters-ui-changesListWrapperWidget-highlighted ) & {
                                                .mw-rcfilters-mixin-circle( @highlight-none, @result-circle-diameter, 0, true, @highlight-bluedot, true );
                                        }
                                }
@@ -31,7 +31,7 @@
                                                .mw-rcfilters-mixin-circle( @highlight-grey, @result-circle-diameter, 0, true, @highlight-grey );
                                        }
 
-                                       .mw-rcfilters-ui-changesListWrapperWidget:not(.mw-rcfilters-ui-changesListWrapperWidget-highlighted) & {
+                                       .mw-rcfilters-ui-changesListWrapperWidget:not( .mw-rcfilters-ui-changesListWrapperWidget-highlighted ) & {
                                                .mw-rcfilters-mixin-circle( @highlight-bluedot, @result-circle-diameter, 0, true, @highlight-bluedot );
                                        }
                                }
index 555631b..b923efb 100644 (file)
@@ -1,11 +1,13 @@
+@import 'mediawiki.ui/variables';
 @import 'mw.rcfilters.mixins';
+@import 'mw.rcfilters.variables';
 
 @keyframes fadeBlue {
        60% {
-               border-top-color: #36c;
+               border-top-color: @colorProgressive;
        }
        100% {
-               border-top-color: #c8ccd1;
+               border-top-color: @colorGray12;
        }
 }
 
@@ -19,7 +21,7 @@
 
        &-previousChangesIndicator {
                margin: 10px 0;
-               border-top: 2px solid #c8ccd1;
+               border-top: 2px solid @colorGray12;
                animation: 1s ease fadeBlue;
        }
 
@@ -29,8 +31,9 @@
 
                &-noresult,
                &-conflict {
-                       font-weight: bold;
                        margin-bottom: 0.5em;
+                       font-weight: bold;
+                       text-align: center;
                }
        }
 
@@ -38,7 +41,7 @@
        // We want the expand button to appear outside the color
        // to match the way the general highlight background appears
        &-enhanced-grey td:not( :nth-child( -n+2 ) ) {
-               background-color: #dee0e3;
+               background-color: @light-gray;
        }
 
        &-highlighted {
@@ -52,7 +55,7 @@
        }
 
        .mw-changeslist-legend {
-               background-color: #fff;
+               background-color: @background-color-base;
        }
 
        // Correction for Enhanced RC
 // a custom color rather than the computed tint
 // see https://phabricator.wikimedia.org/T161267
 .mw-rcfilters-highlight-color-c1.mw-rcfilters-highlight-color-c3 {
-       .highlight-changesListWrapperWidget( #ccdecc );
+       .highlight-changesListWrapperWidget( @light-green );
 }
 .highlight-color-mix( c1, c4 );
 .highlight-color-mix( c1, c5 );
index 83fe189..4e04068 100644 (file)
@@ -1,23 +1,37 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
 
 .mw-rcfilters-ui-filterMenuHeaderWidget {
        &-title {
                display: inline-block;
                font-size: 1.2em;
                padding: 0.75em 0 0.75em 0.5em;
-               // TODO: Unify colors with official design palette
-               color: #54595d;
+               color: @colorGray5;
        }
 
        &-helpIcon {
                position: absolute;
                top: 50%;
                .transform( translateY( -50% ) );
+
+               // HACK: Following overrides help icon size and centers it
+               &.oo-ui-widget.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+                       box-sizing: content-box;
+                       padding: 0;
+
+                       .oo-ui-icon-help {
+                               min-width: initial;
+                               min-height: initial;
+                               width: 1.4em;
+                               height: 1.4em;
+                               margin-top: 0.2375em;
+                       }
+               }
        }
 
        &-header {
-               border-bottom: 1px solid #c8ccd1;
-               background: #f8f9fa;
+               border-bottom: 1px solid @colorGray12;
+               background-color: @colorGray15;
 
                &-invert,
                &-highlight {
index ea93247..0f858e6 100644 (file)
@@ -1,4 +1,5 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
 
 .mw-rcfilters-ui-filterMenuOptionWidget {
        &.oo-ui-flaggedElement-muted {
@@ -7,19 +8,19 @@
                        // are also inverted, so if they are also selected, we
                        // should make sure the selected background is shown rather
                        // than the muted one
-                       background-color: #f8f9fa; // Base90 AAA
+                       background-color: @colorGray15;
                }
 
                .mw-rcfilters-ui-itemMenuOptionWidget-label-title,
                .mw-rcfilters-ui-itemMenuOptionWidget-label-desc {
-                       color: #54595d; // Base20 AAA
+                       color: @colorGray5;
                }
 
                &.oo-ui-optionWidget-highlighted {
                        // Copying over styles from OOUI, since it must
                        // override our 'muted' state
-                       background-color: #eaecf0;
-                       color: #000;
+                       background-color: @colorGray14;
+                       color: @colorGray1;
                }
        }
 
index b6fb0bb..3e32c83 100644 (file)
@@ -1,14 +1,15 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
 
 .mw-rcfilters-ui-filterMenuSectionOptionWidget {
-       background: #eaecf0;
+       background: @colorGray14;
        padding-bottom: 0.7em;
 
        &-header {
                padding: 0 0.75em;
                // Use a high specificity to override OOUI
                .oo-ui-optionWidget.oo-ui-labelElement &-title.oo-ui-labelElement-label {
-                       color: #54595d;
+                       color: @colorGray5;
                        .box-sizing( border-box );
                        display: inline-block;
                }
@@ -23,7 +24,7 @@
                        padding: 0;
 
                        &:focus {
-                               box-shadow: none;
+                               .box-shadow( none );
                                outline: 0;
                        }
                }
index 4ecc22e..148e37b 100644 (file)
@@ -1,5 +1,6 @@
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
+@import 'mw.rcfilters.variables';
 
 .mw-rcfilters-ui-filterTagMultiselectWidget {
        max-width: none;
@@ -12,9 +13,9 @@
        }
 
        &.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle {
-               border: 1px solid #a2a9b1;
+               border: 1px solid @colorGray10;
                border-bottom: 0;
-               background-color: #f8f9fa;
+               background-color: @colorGray15;
                border-radius: 2px 2px 0 0;
                padding: 0.6em;
                margin-top: 1em;
@@ -26,7 +27,7 @@
        }
 
        .oo-ui-tagMultiselectWidget.oo-ui-widget-enabled &-emphasize.oo-ui-tagMultiselectWidget-handle {
-               background-color: #eaf3ff; // Accent90
+               background-color: @background-color-primary;
        }
 
        &-wrapper {
                &-content {
                        &-title {
                                font-weight: bold;
-                               color: #54595d;
+                               color: @colorGray5;
                        }
 
                        &-savedQueryTitle {
-                               color: #222; // Base10
+                               color: @colorGray2;
                                font-weight: bold;
                                vertical-align: top;
                                margin-left: 1em;
                        width: 1em;
 
                        &-widget.oo-ui-widget {
-                               border: 1px solid #a2a9b1;
+                               border: 1px solid @colorGray10;
                                border-left-width: 0;
-                               border-top-left-radius: 0;
-                               border-top-right-radius: 0;
-                               border-bottom-left-radius: 0;
+                               border-radius: 0 0 @borderRadius 0;
 
                                display: block;
                                text-align: right;
                                height: 2.5em;
-                               box-sizing: border-box;
+                               .box-sizing( border-box );
 
-                               .oo-ui-buttonElement-frameless.oo-ui-iconElement:first-child {
+                               .oo-ui-buttonOptionWidget:first-child {
                                        margin-left: 0;
                                }
-
-                               .oo-ui-labelElement.oo-ui-optionWidget.oo-ui-buttonElement:first-child {
-                                       margin-left: 0;
-
-                                       .oo-ui-labelElement-label {
-                                               color: @colorGray5;
-                                               font-weight: bold;
-                                       }
-                               }
                        }
                }
        }
 
        &-emptyFilters {
-               color: #72777d;
+               color: @colorGray7;
        }
 
        &-cell-filters {
index 0adec46..ee8ad85 100644 (file)
@@ -1,3 +1,4 @@
+@import 'mediawiki.ui/variables';
 @import 'mw.rcfilters.mixins';
 
 .mw-rcfilters-ui-highlightColorPickerWidget {
@@ -38,7 +39,7 @@
 
                                .mw-rcfilters-mixin-circle( @highlight-none, 2em, 0.5em, true );
                                // Override border to dashed
-                               border: 1px dashed #54595d;
+                               border: 1px dashed @colorGray5;
 
                                &.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
                                &.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
index 75ea061..21a169c 100644 (file)
@@ -1,4 +1,6 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mw.rcfilters.variables';
 
 .mw-rcfilters-ui-itemMenuOptionWidget {
        min-height: 3.5em;
@@ -6,11 +8,11 @@
        .box-sizing( border-box );
 
        &:not( :last-child ) {
-               border-bottom: 1px solid #eaecf0; // Base80 AAA
+               border-bottom: 1px solid @colorGray14;
        }
 
        &-view-namespaces {
-               border-top: 5px solid #c8ccd1;
+               border-top: 5px solid @colorGray12;
 
                &:first-child,
                &.mw-rcfilters-ui-itemMenuOptionWidget-identifier-subject + &.mw-rcfilters-ui-itemMenuOptionWidget-identifier-talk {
@@ -19,7 +21,7 @@
        }
 
        &:hover {
-               background-color: #f8f9fa;
+               background-color: @colorGray15;
        }
 
        .mw-rcfilters-ui-table {
        }
 
        &.oo-ui-optionWidget-selected {
-               background-color: #eaf3ff; // Accent90 AAA
+               background-color: @background-color-primary;
        }
 
        &-label {
                &-title {
                        font-weight: bold;
                        font-size: 1.15em;
-                       color: #222;
+                       color: @colorGray2;
                }
                &-desc {
-                       color: #54595d;
+                       color: @colorGray5;
                        white-space: normal;
                }
        }
@@ -61,7 +63,7 @@
        &-excludeLabel {
                width: 5em;
                padding-left: 1em;
-               color: #54595d; // Base20 AAA
+               color: @colorGray5;
        }
 
        &-highlightButton {
index 04f4174..67664b5 100644 (file)
@@ -1,3 +1,5 @@
+@import 'mediawiki.mixins';
+
 .mw-rcfilters-ui-liveUpdateButtonWidget {
        margin-left: 1em;
 
 @keyframes ripple {
        0%,
        35% {
-               transform: scale( 0 );
+               .transform( scale( 0 ) );
                opacity: 1;
        }
        50% {
-               transform: scale( 1.5 );
+               .transform( scale( 1.5 ) );
                opacity: 0.8;
        }
        100% {
                opacity: 0;
-               transform: scale( 4 );
+               .transform( scale( 4 ) );
        }
 }
index 24e062e..7dd78e7 100644 (file)
@@ -1,4 +1,5 @@
 @import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
 
 .mw-rcfilters-ui-menuSelectWidget {
        z-index: auto;
@@ -11,7 +12,7 @@
        &-noresults {
                display: none;
                padding: 0.5em;
-               color: #54595d;
+               color: @colorGray5;
 
                .oo-ui-menuSelectWidget-invisible & {
                        display: inline-block;
@@ -24,8 +25,8 @@
 
        &-footer {
                padding: 0.5em;
-               background-color: #f8f9fa;
-               border-top: 1px solid #c8ccd1;
+               background-color: @colorGray15;
+               border-top: 1px solid @colorGray12;
 
                & + & {
                        border-top: 0;
index aca3ea6..8e30937 100644 (file)
@@ -7,10 +7,6 @@
                &-top {
                        display: block;
                        width: 100%;
-
-                       .mw-recentchanges-toplinks {
-                               margin-bottom: 0.5em;
-                       }
                }
        }
 
                vertical-align: bottom;
                padding-left: 1em;
        }
-
-       .mw-recentchanges-toplinks {
-               padding: 0 0.5em;
-
-               .oo-ui-widget-enabled.oo-ui-buttonElement.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button {
-                       padding: 0 2.5em 0 0.5em;
-               }
-
-               &-title,
-               .mw-collapsible-text {
-                       // Same as the legend
-                       font-size: 0.85em;
-               }
-
-               &:not( .mw-collapsed ) {
-                       // Same as the legend
-                       border: 1px solid #ddd;
-               }
-
-               body:not( .mw-rcfilters-ui-initialized ) & {
-                       display: none;
-               }
-       }
 }
index 9dccc24..701eb72 100644 (file)
@@ -1,11 +1,13 @@
+@import 'mediawiki.ui/variables';
+
 .mw-rcfilters-ui-savedLinksListItemWidget {
        padding: 0 0.5em;
        line-height: normal;
 
        &:hover {
                // Mimicking optionWidget styles
-               background-color: #eaecf0;
-               color: #000;
+               background-color: @colorGray14;
+               color: @colorGray1;
        }
 
        .mw-rcfilters-ui-cell {
@@ -22,6 +24,7 @@
                min-width: 16px;
                min-height: 16px;
                opacity: 0.5;
+               position: relative;
        }
 
        &-icon span {
                display: inline-block;
                vertical-align: middle;
                text-overflow: ellipsis;
+               white-space: nowrap;
                overflow: hidden;
                cursor: pointer;
                margin-left: 0.5px;
-               color: #36c; // Accent50;
+               color: @colorProgressive;
        }
 
        &-icon,
index 2b713e1..e72fbda 100644 (file)
@@ -1,3 +1,5 @@
+@import 'mediawiki.ui/variables';
+
 .mw-rcfilters-ui-savedLinksListWidget {
        &-menu {
                width: 100%;
@@ -12,7 +14,7 @@
                // Extra specificity needed to override OOUI rule that sets white-space: nowrap;
                // on labels inside options
                &.oo-ui-optionWidget .oo-ui-labelElement-label {
-                       color: #72777d;
+                       color: @colorGray7;
                        white-space: normal;
                }
 
index 26ea64c..e9c982a 100644 (file)
@@ -1,15 +1,17 @@
+@import 'mediawiki.ui/variables';
 @import 'mw.rcfilters.mixins';
+@import 'mw.rcfilters.variables';
 
 .mw-rcfilters-ui-tagItemWidget {
        // Background and color of the capsule widget need a bit
        // more specificity to override OOUI internals
        &.oo-ui-flaggedElement-muted.oo-ui-tagItemWidget.oo-ui-widget-enabled {
                // Muted state
-               background-color: #eaecf0;
-               border-color: #c8ccd1;
+               background-color: @colorGray14;
+               border-color: @colorGray12;
 
                .oo-ui-labelElement-label {
-                       color: #72777d;
+                       color: @colorGray7;
                }
                .oo-ui-buttonWidget {
                        opacity: @muted-opacity;
@@ -18,7 +20,7 @@
 
        &.oo-ui-flaggedElement-invalid.oo-ui-tagItemWidget.oo-ui-widget-enabled {
                .oo-ui-labelElement-label {
-                       color: #b32424;
+                       color: @colorDestructiveActive;
                }
        }
 
        // The specificity is fixed in the patch: https://gerrit.wikimedia.org/r/#/c/349525/
        // and will be available in the next OOUI release.
        .oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-outlined &-selected.oo-ui-tagItemWidget.oo-ui-widget-enabled {
-               background-color: #eaf3ff;
-               border-color: #36c;
+               background-color: @background-color-primary;
+               border-color: @colorProgressive;
        }
 
        &-popup-content {
                padding: 0.5em;
-               color: #54595d;
+               color: @colorGray5;
        }
 
        &.oo-ui-labelElement .oo-ui-labelElement-label {
                        top: 50%;
                }
 
-               &[data-color='c1']:before {
+               &[ data-color='c1' ]:before {
                        .mw-rcfilters-mixin-circle( @highlight-c1, 10px, ~'-5px 0.5em 0 0' );
                }
 
-               &[data-color='c2']:before {
+               &[ data-color='c2' ]:before {
                        .mw-rcfilters-mixin-circle( @highlight-c2, 10px, ~'-5px 0.5em 0 0' );
                }
 
-               &[data-color='c3']:before {
+               &[ data-color='c3' ]:before {
                        .mw-rcfilters-mixin-circle( @highlight-c3, 10px, ~'-5px 0.5em 0 0' );
                }
 
-               &[data-color='c4']:before {
+               &[ data-color='c4' ]:before {
                        .mw-rcfilters-mixin-circle( @highlight-c4, 10px, ~'-5px 0.5em 0 0' );
                }
 
-               &[data-color='c5']:before {
+               &[ data-color='c5' ]:before {
                        .mw-rcfilters-mixin-circle( @highlight-c5, 10px, ~'-5px 0.5em 0 0' );
                }
        }
index a6ce4cd..3daea68 100644 (file)
@@ -1,14 +1,12 @@
+@import 'mediawiki.ui/variables';
+
 .mw-rcfilters-ui-viewSwitchWidget {
        label.oo-ui-labelWidget {
-               color: #54595d;
+               color: @colorGray5;
                font-weight: bold;
        }
 
        &-buttons {
                margin-top: 0.5em;
-
-               .oo-ui-buttonWidget:not( :first-child ) {
-                       margin-left: 0.5em;
-               }
        }
 }
index 6fa3aa2..4307c6f 100644 (file)
@@ -1,3 +1,5 @@
+@import 'mediawiki.ui/variables';
+
 .mw-rcfilters-ui-watchlistTopSectionWidget {
        &-watchlistDetails {
                width: 100%;
@@ -22,6 +24,6 @@
 
        &-separator {
                margin-top: 1em;
-               border-top: 2px solid #eaecf0; // Base80 AAA
+               border-top: 2px solid @colorGray14;
        }
 }
index fc8c9ef..5f97e1e 100644 (file)
@@ -1,3 +1,11 @@
+@background-color-base: #fff;
+@background-color-primary: #eaf3ff;
+@color-base--inverted: #fff;
+
+// Colors not on WikimediaUI color palette
+@light-gray: #dee0e3;
+@light-green: #ccdecc;
+
 // Highlight color definitions
 @highlight-none: #fff;
 @highlight-c1: #36c;
index ea32e36..b6a0a4f 100644 (file)
@@ -46,6 +46,8 @@
                this.$element
                        .addClass( 'mw-rcfilters-ui-changesListWrapperWidget' )
                        // We handle our own display/hide of the empty results message
+                       // We keep the timeout class here and remove it later, since at this
+                       // stage it is still needed to identify that the timeout occurred.
                        .removeClass( 'mw-changeslist-empty' );
 
                this.setupNewChangesButtonContainer();
         *
         * @param {jQuery|string} $changesListContent The content of the updated changes list
         * @param {jQuery} $fieldset The content of the updated fieldset
+        * @param {string} noResultsDetails Type of no result error
         * @param {boolean} isInitialDOM Whether $changesListContent is the existing (already attached) DOM
         * @param {boolean} from Timestamp of the new changes
         */
        mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelUpdate = function (
-               $changesListContent, $fieldset, isInitialDOM, from
+               $changesListContent, $fieldset, noResultsDetails, isInitialDOM, from
        ) {
-               var conflictItem,
+               var conflictItem, noResultsKey,
                        $message = $( '<div>' )
                                .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-results' ),
                        isEmpty = $changesListContent === 'NO_RESULTS',
                                                        .text( mw.message( conflictItem.getCurrentConflictResultMessage() ).text() )
                                        );
                        } else {
+                               noResultsKey =
+                                       ( noResultsDetails === 'NO_RESULTS_TIMEOUT' ) ?
+                                               'recentchanges-timeout' :
+                                               ( noResultsDetails === 'NO_RESULTS_NETWORK_ERROR' ) ?
+                                                       'recentchanges-network' :
+                                                       'recentchanges-noresult';
+
                                $message
                                        .append(
                                                $( '<div>' )
                                                        .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-results-noresult' )
-                                                       .text( mw.message( 'recentchanges-noresult' ).text() )
+                                                       .text( mw.message( noResultsKey ).text() )
                                        );
+
+                               this.$element.removeClass( 'mw-changeslist-timeout' );
                        }
 
                        this.$element.append( $message );
 
                        // Add highlight class to all highlighted list items
                        $elements
-                               .addClass( 'mw-rcfilters-highlight-color-' + filterItem.getHighlightColor() );
+                               .addClass(
+                                       'mw-rcfilters-highlighted ' +
+                                       'mw-rcfilters-highlight-color-' + filterItem.getHighlightColor()
+                               );
 
+                       // Track the filters for each item in .data( 'highlightedFilters' )
                        $elements.each( function () {
-                               var filterString = $( this ).attr( 'data-highlightedFilters' ) || '',
-                                       filters = filterString ? filterString.split( '|' ) : [];
-
+                               var filters = $( this ).data( 'highlightedFilters' );
+                               if ( !filters ) {
+                                       filters = [];
+                                       $( this ).data( 'highlightedFilters', filters );
+                               }
                                if ( filters.indexOf( filterItem.getLabel() ) === -1 ) {
                                        filters.push( filterItem.getLabel() );
                                }
-
-                               $( this )
-                                       .attr( 'data-highlightedFilters', filters.join( '|' ) );
                        } );
                }.bind( this ) );
-               // Apply a title for relevant filters
-               this.$element.find( '[data-highlightedFilters]' ).each( function () {
-                       var filterString = $( this ).attr( 'data-highlightedFilters' ) || '',
-                               filters = filterString ? filterString.split( '|' ) : [];
-
-                       if ( filterString ) {
-                               $( this ).attr( 'title', mw.msg( 'rcfilters-highlighted-filters-list', filters.join( ', ' ) ) );
+               // Apply a title to each highlighted item, with a list of filters
+               this.$element.find( '.mw-rcfilters-highlighted' ).each( function () {
+                       var filters = $( this ).data( 'highlightedFilters' );
+
+                       if ( filters && filters.length ) {
+                               $( this ).attr( 'title', mw.msg(
+                                       'rcfilters-highlighted-filters-list',
+                                       filters.join( mw.msg( 'comma-separator' ) )
+                               ) );
                        }
-               } );
 
+               } );
                if ( this.inEnhancedMode() ) {
                        this.updateEnhancedParentHighlight();
                }
        mw.rcfilters.ui.ChangesListWrapperWidget.prototype.clearHighlight = function () {
                // Remove highlight classes
                mw.rcfilters.HighlightColors.forEach( function ( color ) {
-                       this.$element.find( '.mw-rcfilters-highlight-color-' + color ).removeClass( 'mw-rcfilters-highlight-color-' + color );
+                       this.$element
+                               .find( '.mw-rcfilters-highlight-color-' + color )
+                               .removeClass( 'mw-rcfilters-highlight-color-' + color );
                }.bind( this ) );
 
-               this.$element.find( '[data-highlightedFilters]' )
+               this.$element.find( '.mw-rcfilters-highlighted' )
                        .removeAttr( 'title' )
-                       .removeAttr( 'data-highlightedFilters' );
+                       .removeData( 'highlightedFilters' )
+                       .removeClass( 'mw-rcfilters-highlighted' );
 
                // Remove grey from enhanced rows
                this.$element.find( '.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey' )
index 1a0c5ff..dceb132 100644 (file)
@@ -41,7 +41,7 @@
                        framed: false,
                        title: mw.msg( 'rcfilters-view-tags-help-icon-tooltip' ),
                        classes: [ 'mw-rcfilters-ui-filterMenuHeaderWidget-helpIcon' ],
-                       href: 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:New_filters_for_edit_review/Advanced_filters#tags',
+                       href: mw.util.getUrl( 'Special:Tags' ),
                        target: '_blank'
                } );
                this.helpIcon.toggle( this.model.getCurrentView() === 'tags' );
@@ -59,7 +59,6 @@
                        classes: [ 'mw-rcfilters-ui-filterMenuHeaderWidget-invertNamespacesButton' ]
                } );
                this.invertNamespacesButton.toggle( this.model.getCurrentView() === 'namespaces' );
-               this.updateInvertButton( this.model.areNamespacesInverted() );
 
                // Events
                this.backButton.connect( this, { click: 'onBackButtonClick' } );
@@ -69,8 +68,8 @@
                        .connect( this, { click: 'onInvertNamespacesButtonClick' } );
                this.model.connect( this, {
                        highlightChange: 'onModelHighlightChange',
-                       invertChange: 'onModelInvertChange',
-                       update: 'onModelUpdate'
+                       update: 'onModelUpdate',
+                       initialize: 'onModelInitialize'
                } );
 
                // Initialize
 
        /* Methods */
 
+       /**
+        * Respond to model initialization event
+        *
+        * Note: need to wait for initialization before getting the invertModel
+        * and registering its update event. Creating all the models before the UI
+        * would help with that.
+        */
+       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.onModelInitialize = function () {
+               this.invertModel = this.model.getInvertModel();
+               this.updateInvertButton();
+               this.invertModel.connect( this, { update: 'updateInvertButton' } );
+       };
+
        /**
         * Respond to model update event
         */
                this.highlightButton.setActive( highlightEnabled );
        };
 
-       /**
-        * Respond to model invert change event
-        *
-        * @param {boolean} isInverted Namespaces selection is inverted
-        */
-       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.onModelInvertChange = function ( isInverted ) {
-               this.updateInvertButton( isInverted );
-       };
-
        /**
         * Update the state of the invert button
-        *
-        * @param {boolean} isInverted Namespaces selection is inverted
         */
-       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.updateInvertButton = function ( isInverted ) {
-               this.invertNamespacesButton.setActive( isInverted );
+       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.updateInvertButton = function () {
+               this.invertNamespacesButton.setActive( this.invertModel.isSelected() );
                this.invertNamespacesButton.setLabel(
-                       isInverted ?
+                       this.invertModel.isSelected() ?
                                mw.msg( 'rcfilters-exclude-button-on' ) :
                                mw.msg( 'rcfilters-exclude-button-off' )
                );
index 5198c69..926502d 100644 (file)
@@ -6,17 +6,22 @@
         *
         * @constructor
         * @param {mw.rcfilters.Controller} controller RCFilters controller
-        * @param {mw.rcfilters.dm.FilterItem} model Filter item model
+        * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
+        * @param {mw.rcfilters.dm.FilterItem} invertModel
+        * @param {mw.rcfilters.dm.FilterItem} itemModel Filter item model
         * @param {Object} config Configuration object
         */
-       mw.rcfilters.ui.FilterMenuOptionWidget = function MwRcfiltersUiFilterMenuOptionWidget( controller, model, config ) {
+       mw.rcfilters.ui.FilterMenuOptionWidget = function MwRcfiltersUiFilterMenuOptionWidget(
+               controller, filtersViewModel, invertModel, itemModel, config
+       ) {
                config = config || {};
 
                this.controller = controller;
-               this.model = model;
+               this.invertModel = invertModel;
+               this.model = itemModel;
 
                // Parent
-               mw.rcfilters.ui.FilterMenuOptionWidget.parent.call( this, controller, model, config );
+               mw.rcfilters.ui.FilterMenuOptionWidget.parent.call( this, controller, filtersViewModel, this.invertModel, itemModel, config );
 
                // Event
                this.model.getGroupModel().connect( this, { update: 'onGroupModelUpdate' } );
@@ -38,9 +43,9 @@
        /**
         * @inheritdoc
         */
-       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.onModelUpdate = function () {
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.updateUiBasedOnState = function () {
                // Parent
-               mw.rcfilters.ui.FilterMenuOptionWidget.parent.prototype.onModelUpdate.call( this );
+               mw.rcfilters.ui.FilterMenuOptionWidget.parent.prototype.updateUiBasedOnState.call( this );
 
                this.setCurrentMuteState();
        };
@@ -58,7 +63,7 @@
        mw.rcfilters.ui.FilterMenuOptionWidget.prototype.setCurrentMuteState = function () {
                if (
                        this.model.getGroupModel().getView() === 'namespaces' &&
-                       this.model.isInverted()
+                       this.invertModel.isSelected()
                ) {
                        // This is an inverted behavior than the other rules, specifically
                        // for inverted namespaces
index 8a36eb4..41c7bae 100644 (file)
@@ -7,13 +7,17 @@
         *
         * @constructor
         * @param {mw.rcfilters.Controller} controller
-        * @param {mw.rcfilters.dm.FilterItem} model Item model
+        * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
+        * @param {mw.rcfilters.dm.FilterItem} invertModel
+        * @param {mw.rcfilters.dm.FilterItem} itemModel Item model
         * @param {Object} config Configuration object
         */
-       mw.rcfilters.ui.FilterTagItemWidget = function MwRcfiltersUiFilterTagItemWidget( controller, model, config ) {
+       mw.rcfilters.ui.FilterTagItemWidget = function MwRcfiltersUiFilterTagItemWidget(
+               controller, filtersViewModel, invertModel, itemModel, config
+       ) {
                config = config || {};
 
-               mw.rcfilters.ui.FilterTagItemWidget.parent.call( this, controller, model, config );
+               mw.rcfilters.ui.FilterTagItemWidget.parent.call( this, controller, filtersViewModel, invertModel, itemModel, config );
 
                this.$element
                        .addClass( 'mw-rcfilters-ui-filterTagItemWidget' );
        mw.rcfilters.ui.FilterTagItemWidget.prototype.setCurrentMuteState = function () {
                this.setFlags( {
                        muted: (
-                               !this.model.isSelected() ||
-                               this.model.isIncluded() ||
-                               this.model.isFullyCovered()
+                               !this.itemModel.isSelected() ||
+                               this.itemModel.isIncluded() ||
+                               this.itemModel.isFullyCovered()
                        ),
-                       invalid: this.model.isSelected() && this.model.isConflicted()
+                       invalid: this.itemModel.isSelected() && this.itemModel.isConflicted()
                } );
        };
 }( mediaWiki, jQuery ) );
index 757a000..4e33be0 100644 (file)
                this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
                        classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
                        items: [
-                               new OO.ui.ButtonOptionWidget( {
-                                       framed: false,
-                                       data: '',
-                                       disabled: true,
-                                       classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget-label' ],
-                                       label: mw.msg( 'rcfilters-view-advanced-filters-label' )
-                               } ),
                                new OO.ui.ButtonOptionWidget( {
                                        framed: false,
                                        data: 'namespaces',
                                        icon: 'article',
+                                       label: mw.msg( 'namespaces' ),
                                        title: mw.msg( 'rcfilters-view-namespaces-tooltip' )
                                } ),
                                new OO.ui.ButtonOptionWidget( {
                                        framed: false,
                                        data: 'tags',
                                        icon: 'tag',
+                                       label: mw.msg( 'tags-title' ),
                                        title: mw.msg( 'rcfilters-view-tags-tooltip' )
                                } )
                        ]
                mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onMenuToggle.call( this );
 
                if ( isVisible ) {
+                       this.focus();
+
                        mw.hook( 'RcFilters.popup.open' ).fire();
 
                        if ( !this.getMenu().getSelectedItem() ) {
                                setTimeout( function () { this.getMenu().scrollToTop(); }.bind( this ), 0 );
                        }
                } else {
+                       this.blur();
+
                        // Clear selection
                        this.selectTag( null );
 
                this.input.$input.blur();
        };
 
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onMouseDown = function ( e ) {
+               if ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {
+                       this.menu.toggle();
+
+                       return false;
+               }
+       };
+
        /**
         * @inheritdoc
         */
                        this.matchingQuery ? this.matchingQuery.getLabel() : ''
                );
                this.savedQueryTitle.toggle( !!this.matchingQuery );
-               this.saveQueryButton.toggle( !this.matchingQuery );
+               this.saveQueryButton.setDisabled( !!this.matchingQuery );
+               this.saveQueryButton.setTitle( !this.matchingQuery ?
+                       mw.msg( 'rcfilters-savedqueries-add-new-title' ) :
+                       mw.msg( 'rcfilters-savedqueries-already-saved' ) );
 
                if ( this.matchingQuery ) {
                        this.emphasize();
 
        /**
         * Respond to model itemUpdate event
+        * fixme: when a new state is applied to the model this function is called 60+ times in a row
         *
         * @param {mw.rcfilters.dm.FilterItem} item Filter item model
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onModelItemUpdate = function ( item ) {
-               if ( item.getGroupModel().isHidden() ) {
-                       return;
-               }
-
-               if (
-                       item.isSelected() ||
-                       (
-                               this.model.isHighlightEnabled() &&
-                               item.isHighlightSupported() &&
-                               item.getHighlightColor()
-                       )
-               ) {
-                       this.addTag( item.getName(), item.getLabel() );
-               } else {
-                       this.removeTagByData( item.getName() );
+               if ( !item.getGroupModel().isHidden() ) {
+                       if (
+                               item.isSelected() ||
+                               (
+                                       this.model.isHighlightEnabled() &&
+                                       item.getHighlightColor()
+                               )
+                       ) {
+                               this.addTag( item.getName(), item.getLabel() );
+                       } else {
+                               this.removeTagByData( item.getName() );
+                       }
                }
 
                this.setSavedQueryVisibility();
                                }
                        }.bind( this ) );
                }
+
+               this.setSavedQueryVisibility();
        };
 
        /**
                if ( filterItem ) {
                        return new mw.rcfilters.ui.FilterTagItemWidget(
                                this.controller,
+                               this.model,
+                               this.model.getInvertModel(),
                                filterItem,
                                {
                                        $overlay: this.$overlay
index 83905d5..6aa335a 100644 (file)
         *
         * @param {jQuery|string} $changesList Updated changes list
         * @param {jQuery} $fieldset Updated fieldset
+        * @param {string} noResultsDetails Type of no result error
         * @param {boolean} isInitialDOM Whether $changesListContent is the existing (already attached) DOM
         */
-       mw.rcfilters.ui.FormWrapperWidget.prototype.onChangesModelUpdate = function ( $changesList, $fieldset, isInitialDOM ) {
+       mw.rcfilters.ui.FormWrapperWidget.prototype.onChangesModelUpdate = function ( $changesList, $fieldset, noResultsDetails, isInitialDOM ) {
                this.$submitButton.prop( 'disabled', false );
 
                // Replace the entire fieldset
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js
new file mode 100644 (file)
index 0000000..167df09
--- /dev/null
@@ -0,0 +1,41 @@
+( function ( mw ) {
+       /**
+        * A group widget to allow for aggregation of events
+        *
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration object
+        * @param {Object} [events] Events to aggregate. The object represent the
+        *  event name to aggregate and the event value to emit on aggregate for items.
+        */
+       mw.rcfilters.ui.GroupWidget = function MwRcfiltersUiViewSwitchWidget( config ) {
+               var aggregate = {};
+
+               config = config || {};
+
+               // Parent constructor
+               mw.rcfilters.ui.GroupWidget.parent.call( this, config );
+
+               // Mixin constructors
+               OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+               if ( config.events ) {
+                       // Aggregate events
+                       $.each( config.events, function ( eventName, eventEmit ) {
+                               aggregate[ eventName ] = eventEmit;
+                       } );
+
+                       this.aggregate( aggregate );
+               }
+
+               if ( Array.isArray( config.items ) ) {
+                       this.addItems( config.items );
+               }
+       };
+
+       /* Initialize */
+
+       OO.inheritClass( mw.rcfilters.ui.GroupWidget, OO.ui.Widget );
+       OO.mixinClass( mw.rcfilters.ui.GroupWidget, OO.ui.mixin.GroupWidget );
+}( mediaWiki ) );
index f2e9b1d..db43a53 100644 (file)
@@ -6,10 +6,14 @@
         *
         * @constructor
         * @param {mw.rcfilters.Controller} controller RCFilters controller
-        * @param {mw.rcfilters.dm.ItemModel} model Item model
+        * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
+        * @param {mw.rcfilters.dm.ItemModel} invertModel
+        * @param {mw.rcfilters.dm.ItemModel} itemModel Item model
         * @param {Object} config Configuration object
         */
-       mw.rcfilters.ui.ItemMenuOptionWidget = function MwRcfiltersUiItemMenuOptionWidget( controller, model, config ) {
+       mw.rcfilters.ui.ItemMenuOptionWidget = function MwRcfiltersUiItemMenuOptionWidget(
+               controller, filtersViewModel, invertModel, itemModel, config
+       ) {
                var layout,
                        classes = [],
                        $label = $( '<div>' )
                config = config || {};
 
                this.controller = controller;
-               this.model = model;
+               this.filtersViewModel = filtersViewModel;
+               this.invertModel = invertModel;
+               this.itemModel = itemModel;
 
                // Parent
                mw.rcfilters.ui.ItemMenuOptionWidget.parent.call( this, $.extend( {
                        // Override the 'check' icon that OOUI defines
                        icon: '',
-                       data: this.model.getName(),
-                       label: this.model.getLabel()
+                       data: this.itemModel.getName(),
+                       label: this.itemModel.getLabel()
                }, config ) );
 
                this.checkboxWidget = new mw.rcfilters.ui.CheckboxInputWidget( {
-                       value: this.model.getName(),
-                       selected: this.model.isSelected()
+                       value: this.itemModel.getName(),
+                       selected: this.itemModel.isSelected()
                } );
 
                $label.append(
                                .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-label-title' )
                                .append( this.$label )
                );
-               if ( this.model.getDescription() ) {
+               if ( this.itemModel.getDescription() ) {
                        $label.append(
                                $( '<div>' )
                                        .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-label-desc' )
-                                       .text( this.model.getDescription() )
+                                       .text( this.itemModel.getDescription() )
                        );
                }
 
                this.highlightButton = new mw.rcfilters.ui.FilterItemHighlightButton(
                        this.controller,
-                       this.model,
+                       this.itemModel,
                        {
                                $overlay: config.$overlay || this.$element,
                                title: mw.msg( 'rcfilters-highlightmenu-help' )
                        }
                );
-               this.highlightButton.toggle( this.model.isHighlightEnabled() );
+               this.highlightButton.toggle( this.filtersViewModel.isHighlightEnabled() );
 
                this.excludeLabel = new OO.ui.LabelWidget( {
                        label: mw.msg( 'rcfilters-filter-excluded' )
                } );
-               this.excludeLabel.toggle( this.model.isSelected() && this.model.isInverted() );
+               this.excludeLabel.toggle( this.itemModel.isSelected() && this.invertModel.isSelected() );
 
                layout = new OO.ui.FieldLayout( this.checkboxWidget, {
                        label: $label,
@@ -67,7 +73,9 @@
                } );
 
                // Events
-               this.model.connect( this, { update: 'onModelUpdate' } );
+               this.filtersViewModel.connect( this, { highlightChange: 'updateUiBasedOnState' } );
+               this.invertModel.connect( this, { update: 'updateUiBasedOnState' } );
+               this.itemModel.connect( this, { update: 'updateUiBasedOnState' } );
                // HACK: Prevent defaults on 'click' for the label so it
                // doesn't steal the focus away from the input. This means
                // we can continue arrow-movement after we click the label
@@ -77,7 +85,7 @@
 
                this.$element
                        .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget' )
-                       .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-view-' + this.model.getGroupModel().getView() )
+                       .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-view-' + this.itemModel.getGroupModel().getView() )
                        .append(
                                $( '<div>' )
                                        .addClass( 'mw-rcfilters-ui-table' )
                                        )
                        );
 
-               if ( this.model.getIdentifiers() ) {
-                       this.model.getIdentifiers().forEach( function ( ident ) {
+               if ( this.itemModel.getIdentifiers() ) {
+                       this.itemModel.getIdentifiers().forEach( function ( ident ) {
                                classes.push( 'mw-rcfilters-ui-itemMenuOptionWidget-identifier-' + ident );
                        } );
 
        /**
         * Respond to item model update event
         */
-       mw.rcfilters.ui.ItemMenuOptionWidget.prototype.onModelUpdate = function () {
-               this.checkboxWidget.setSelected( this.model.isSelected() );
+       mw.rcfilters.ui.ItemMenuOptionWidget.prototype.updateUiBasedOnState = function () {
+               this.checkboxWidget.setSelected( this.itemModel.isSelected() );
 
-               this.highlightButton.toggle( this.model.isHighlightEnabled() );
-               this.excludeLabel.toggle( this.model.isSelected() && this.model.isInverted() );
+               this.highlightButton.toggle( this.filtersViewModel.isHighlightEnabled() );
+               this.excludeLabel.toggle( this.itemModel.isSelected() && this.invertModel.isSelected() );
        };
 
        /**
         * @return {string} Filter name
         */
        mw.rcfilters.ui.ItemMenuOptionWidget.prototype.getName = function () {
-               return this.model.getName();
+               return this.itemModel.getName();
        };
 
        mw.rcfilters.ui.ItemMenuOptionWidget.prototype.getModel = function () {
-               return this.model;
+               return this.itemModel;
        };
 
 }( mediaWiki ) );
index 2aabe68..22c176f 100644 (file)
                                        currentItems.push(
                                                new mw.rcfilters.ui.FilterMenuOptionWidget(
                                                        widget.controller,
+                                                       widget.model,
+                                                       widget.model.getInvertModel(),
                                                        filterItem,
                                                        {
                                                                $overlay: widget.$overlay
index 95a4e59..fce1cb7 100644 (file)
@@ -48,7 +48,8 @@
                                widget.switchTopLinks( 'collapsed' );
                        } );
 
-               this.$topLinks.find( '.mw-recentchanges-toplinks-title' ).replaceWith( toplinksTitle.$element );
+               this.$topLinks.find( '.mw-recentchanges-toplinks-title' )
+                       .replaceWith( toplinksTitle.$element.removeAttr( 'tabIndex' ) );
 
                // Create two positions for the toplinks to toggle between
                // in the table (first cell) or up above it
@@ -62,7 +63,6 @@
                this.$element
                        .addClass( 'mw-rcfilters-ui-rcTopSectionWidget' )
                        .append(
-                               this.$top,
                                $( '<div>' )
                                        .addClass( 'mw-rcfilters-ui-table' )
                                        .append(
@@ -83,6 +83,9 @@
                                        )
                        );
 
+               // Hack: For jumpiness reasons, this should be a sibling of -head
+               $( '.rcfilters-head' ).before( this.$top );
+
                // Initialize top links position
                widget.switchTopLinks( topLinksCookieValue );
        };
                } else {
                        this.$tableTopLinks.append( this.$topLinks );
                }
+               this.$topLinks.toggleClass( 'mw-recentchanges-toplinks-collapsed', state === 'collapsed' );
        };
 }( mediaWiki ) );
index 7eda90a..8287ef9 100644 (file)
                        label: $labelNoEntries,
                        icon: 'unClip'
                } );
-               // The only reason we're using "ButtonGroupWidget" here is that
-               // straight-out "GroupWidget" is a mixin and cannot be initialized
-               // on its own, so we need something to be its widget.
-               this.menu = new OO.ui.ButtonGroupWidget( {
+
+               this.menu = new mw.rcfilters.ui.GroupWidget( {
+                       events: {
+                               click: 'menuItemClick',
+                               'delete': 'menuItemDelete',
+                               'default': 'menuItemDefault',
+                               edit: 'menuItemEdit'
+                       },
                        classes: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ],
                        items: [ this.placeholderItem ]
                } );
                        }
                } );
 
-               this.menu.aggregate( {
-                       click: 'menuItemClick',
-                       'delete': 'menuItemDelete',
-                       'default': 'menuItemDefault',
-                       edit: 'menuItemEdit'
-               } );
-
                // Events
                this.model.connect( this, {
                        add: 'onModelAddItem',
index 81889b2..13d6b68 100644 (file)
@@ -8,21 +8,26 @@
         *
         * @constructor
         * @param {mw.rcfilters.Controller} controller
-        * @param {mw.rcfilters.dm.FilterItem} model Item model
+        * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
+        * @param {mw.rcfilters.dm.FilterItem} invertModel
+        * @param {mw.rcfilters.dm.FilterItem} itemModel Item model
         * @param {Object} config Configuration object
         * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
         */
-       mw.rcfilters.ui.TagItemWidget = function MwRcfiltersUiTagItemWidget( controller, model, config ) {
+       mw.rcfilters.ui.TagItemWidget = function MwRcfiltersUiTagItemWidget(
+               controller, filtersViewModel, invertModel, itemModel, config
+       ) {
                // Configuration initialization
                config = config || {};
 
                this.controller = controller;
-               this.model = model;
+               this.invertModel = invertModel;
+               this.filtersViewModel = filtersViewModel;
+               this.itemModel = itemModel;
                this.selected = false;
 
                mw.rcfilters.ui.TagItemWidget.parent.call( this, $.extend( {
-                       data: this.model.getName(),
-                       label: $( '<div>' ).html( this.model.getPrefixedLabel() ).contents()
+                       data: this.itemModel.getName()
                }, config ) );
 
                this.$overlay = config.$overlay || this.$element;
                        .addClass( 'mw-rcfilters-ui-tagItemWidget-highlight' );
 
                // Add title attribute with the item label to 'x' button
-               this.closeButton.setTitle( mw.msg( 'rcfilters-tag-remove', this.model.getLabel() ) );
+               this.closeButton.setTitle( mw.msg( 'rcfilters-tag-remove', this.itemModel.getLabel() ) );
 
                // Events
-               this.model.connect( this, { update: 'onModelUpdate' } );
+               this.filtersViewModel.connect( this, { highlightChange: 'updateUiBasedOnState' } );
+               this.invertModel.connect( this, { update: 'updateUiBasedOnState' } );
+               this.itemModel.connect( this, { update: 'updateUiBasedOnState' } );
 
                // Initialization
                this.$overlay.append( this.popup.$element );
@@ -63,8 +70,7 @@
                        .on( 'mouseenter', this.onMouseEnter.bind( this ) )
                        .on( 'mouseleave', this.onMouseLeave.bind( this ) );
 
-               this.setCurrentMuteState();
-               this.setHighlightColor();
+               this.updateUiBasedOnState();
        };
 
        /* Initialization */
        /**
         * Respond to model update event
         */
-       mw.rcfilters.ui.TagItemWidget.prototype.onModelUpdate = function () {
-               this.setCurrentMuteState();
-
+       mw.rcfilters.ui.TagItemWidget.prototype.updateUiBasedOnState = function () {
                // Update label if needed
-               this.setLabel( $( '<div>' ).html( this.model.getPrefixedLabel() ).contents() );
+               var labelMsg = this.itemModel.getLabelMessageKey( this.invertModel.isSelected() );
+               if ( labelMsg ) {
+                       this.setLabel( $( '<div>' ).html(
+                               mw.message( labelMsg, mw.html.escape( this.itemModel.getLabel() ) ).parse()
+                       ).contents() );
+               } else {
+                       this.setLabel( this.itemModel.getLabel() );
+               }
 
+               this.setCurrentMuteState();
                this.setHighlightColor();
        };
 
+       /**
+        * Set the current highlight color for this item
+        */
        mw.rcfilters.ui.TagItemWidget.prototype.setHighlightColor = function () {
-               var selectedColor = this.model.isHighlightEnabled() ? this.model.getHighlightColor() : null;
+               var selectedColor = this.filtersViewModel.isHighlightEnabled() && this.itemModel.isHighlighted ?
+                       this.itemModel.getHighlightColor() :
+                       null;
 
                this.$highlight
                        .attr( 'data-color', selectedColor )
         * Respond to mouse enter event
         */
        mw.rcfilters.ui.TagItemWidget.prototype.onMouseEnter = function () {
-               var labelText = this.model.getStateMessage();
+               var labelText = this.itemModel.getStateMessage();
 
                if ( labelText ) {
                        this.popupLabel.setLabel( labelText );
         * @return {string} Filter name
         */
        mw.rcfilters.ui.TagItemWidget.prototype.getName = function () {
-               return this.model.getName();
+               return this.itemModel.getName();
        };
 
        /**
         * @return {string} Filter model
         */
        mw.rcfilters.ui.TagItemWidget.prototype.getModel = function () {
-               return this.model;
+               return this.itemModel;
        };
 
        /**
         * @return {string} Filter view
         */
        mw.rcfilters.ui.TagItemWidget.prototype.getView = function () {
-               return this.model.getGroupModel().getView();
+               return this.itemModel.getGroupModel().getView();
        };
 
        /**
                this.popup.$element.detach();
 
                // Disconnect events
-               this.model.disconnect( this );
+               this.itemModel.disconnect( this );
                this.closeButton.disconnect( this );
        };
 }( mediaWiki, jQuery ) );
index fef8567..aadded1 100644 (file)
                this.controller = controller;
                this.model = model;
 
-               this.buttons = new OO.ui.ButtonGroupWidget( {
+               this.buttons = new mw.rcfilters.ui.GroupWidget( {
+                       events: {
+                               click: 'buttonClick'
+                       },
                        items: [
                                new OO.ui.ButtonWidget( {
                                        data: 'namespaces',
@@ -35,7 +38,6 @@
 
                // Events
                this.model.connect( this, { update: 'onModelUpdate' } );
-               this.buttons.aggregate( { click: 'buttonClick' } );
                this.buttons.connect( this, { buttonClick: 'onButtonClick' } );
 
                this.$element
index cd674ef..d82ffe0 100644 (file)
@@ -9,7 +9,7 @@
  * compatibility ( browsers able to understand gradient syntax support also SVG ).
  * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
 
-.mw-body-content a.external,
+.mw-parser-output a.external,
 .link-https {
        background: url( images/external-ltr.png ) center right no-repeat;
        /* @embed */
@@ -19,7 +19,7 @@
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href^='mailto:'],
+.mw-parser-output a.external[ href^='mailto:' ],
 .link-mailto {
        background: url( images/mail.png ) center right no-repeat;
        /* @embed */
@@ -27,7 +27,7 @@
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href^='ftp://'],
+.mw-parser-output a.external[ href^='ftp://' ],
 .link-ftp {
        background: url( images/ftp-ltr.png ) center right no-repeat;
        /* @embed */
@@ -35,8 +35,8 @@
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href^='irc://'],
-.mw-body-content a.external[href^='ircs://'],
+.mw-parser-output a.external[ href^='irc://' ],
+.mw-parser-output a.external[ href^='ircs://' ],
 .link-irc {
        background: url( images/chat-ltr.png ) center right no-repeat;
        /* @embed */
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href$='.ogg'],
-.mw-body-content a.external[href$='.OGG'],
-.mw-body-content a.external[href$='.mid'],
-.mw-body-content a.external[href$='.MID'],
-.mw-body-content a.external[href$='.midi'],
-.mw-body-content a.external[href$='.MIDI'],
-.mw-body-content a.external[href$='.mp3'],
-.mw-body-content a.external[href$='.MP3'],
-.mw-body-content a.external[href$='.wav'],
-.mw-body-content a.external[href$='.WAV'],
-.mw-body-content a.external[href$='.wma'],
-.mw-body-content a.external[href$='.WMA'],
+.mw-parser-output a.external[ href$='.ogg' ],
+.mw-parser-output a.external[ href$='.OGG' ],
+.mw-parser-output a.external[ href$='.mid' ],
+.mw-parser-output a.external[ href$='.MID' ],
+.mw-parser-output a.external[ href$='.midi' ],
+.mw-parser-output a.external[ href$='.MIDI' ],
+.mw-parser-output a.external[ href$='.mp3' ],
+.mw-parser-output a.external[ href$='.MP3' ],
+.mw-parser-output a.external[ href$='.wav' ],
+.mw-parser-output a.external[ href$='.WAV' ],
+.mw-parser-output a.external[ href$='.wma' ],
+.mw-parser-output a.external[ href$='.WMA' ],
 .link-audio {
        background: url( images/audio-ltr.png ) center right no-repeat;
        /* @embed */
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href$='.ogm'],
-.mw-body-content a.external[href$='.OGM'],
-.mw-body-content a.external[href$='.avi'],
-.mw-body-content a.external[href$='.AVI'],
-.mw-body-content a.external[href$='.mpeg'],
-.mw-body-content a.external[href$='.MPEG'],
-.mw-body-content a.external[href$='.mpg'],
-.mw-body-content a.external[href$='.MPG'],
+.mw-parser-output a.external[ href$='.ogm' ],
+.mw-parser-output a.external[ href$='.OGM' ],
+.mw-parser-output a.external[ href$='.avi' ],
+.mw-parser-output a.external[ href$='.AVI' ],
+.mw-parser-output a.external[ href$='.mpeg' ],
+.mw-parser-output a.external[ href$='.MPEG' ],
+.mw-parser-output a.external[ href$='.mpg' ],
+.mw-parser-output a.external[ href$='.MPG' ],
 .link-video {
        background: url( images/video.png ) center right no-repeat;
        /* @embed */
        padding-right: 15px;
 }
 
-.mw-body-content a.external[href$='.pdf'],
-.mw-body-content a.external[href$='.PDF'],
-.mw-body-content a.external[href*='.pdf#'],
-.mw-body-content a.external[href*='.PDF#'],
-.mw-body-content a.external[href*='.pdf?'],
-.mw-body-content a.external[href*='.PDF?'],
+.mw-parser-output a.external[ href$='.pdf' ],
+.mw-parser-output a.external[ href$='.PDF' ],
+.mw-parser-output a.external[ href*='.pdf#' ],
+.mw-parser-output a.external[ href*='.PDF#' ],
+.mw-parser-output a.external[ href*='.pdf?' ],
+.mw-parser-output a.external[ href*='.PDF?' ],
 .link-document {
        background: url( images/document-ltr.png ) center right no-repeat;
        /* @embed */
 }
 
 /* Interwiki styling */
-.mw-body-content a.extiw,
-.mw-body-content a.extiw:active {
+.mw-parser-output a.extiw,
+.mw-parser-output a.extiw:active {
        color: #36b;
 }
 
 /* External link color */
-.mw-body-content a.external {
+.mw-parser-output a.external {
        color: #36b;
 }
index 654b655..a36ba6c 100644 (file)
@@ -44,9 +44,9 @@ sub {
 /**
  * Block media items
  */
-figure[typeof*='mw:Image'],
-figure[typeof*='mw:Video'],
-figure[typeof*='mw:Audio'] {
+figure[ typeof*='mw:Image' ],
+figure[ typeof*='mw:Video' ],
+figure[ typeof*='mw:Audio' ] {
        margin: 0;
 
        a {
@@ -91,12 +91,12 @@ figure[typeof*='mw:Audio'] {
        }
 }
 
-figure[typeof~='mw:Image/Thumb'],
-figure[typeof~='mw:Video/Thumb'],
-figure[typeof~='mw:Audio/Thumb'],
-figure[typeof~='mw:Image/Frame'],
-figure[typeof~='mw:Video/Frame'],
-figure[typeof~='mw:Audio/Frame'] {
+figure[ typeof~='mw:Image/Thumb' ],
+figure[ typeof~='mw:Video/Thumb' ],
+figure[ typeof~='mw:Audio/Thumb' ],
+figure[ typeof~='mw:Image/Frame' ],
+figure[ typeof~='mw:Video/Frame' ],
+figure[ typeof~='mw:Audio/Frame' ] {
        display: table;
        text-align: center;
        border: 1px solid #c8ccd1;
@@ -139,9 +139,9 @@ figure[typeof~='mw:Audio/Frame'] {
        }
 }
 
-figure[typeof*='mw:Image/Thumb'],
-figure[typeof*='mw:Video/Thumb'],
-figure[typeof*='mw:Audio/Thumb'] {
+figure[ typeof*='mw:Image/Thumb' ],
+figure[ typeof*='mw:Video/Thumb' ],
+figure[ typeof*='mw:Audio/Thumb' ] {
        > a:after {
                content: '';
                width: 15px;
index 245fb53..3599f34 100644 (file)
@@ -13,7 +13,7 @@ a {
        background: none;
 }
 
-a:not( [href] ) {
+a:not( [ href ] ) {
        cursor: pointer; /* Always cursor:pointer even without href */
 }
 
@@ -53,33 +53,33 @@ a.new:visited,
 }
 
 /* Interwiki Styling */
-.mw-body-content a.extiw,
-.mw-body-content a.extiw:active {
+.mw-parser-output a.extiw,
+.mw-parser-output a.extiw:active {
        color: #36b;
 }
 
-.mw-body-content a.extiw:visited {
+.mw-parser-output a.extiw:visited {
        color: #636;
 }
 
-.mw-body-content a.extiw:active {
+.mw-parser-output a.extiw:active {
        color: #b63;
 }
 
 /* External links */
-.mw-body-content a.external {
+.mw-parser-output a.external {
        color: #36b;
 }
 
-.mw-body-content a.external:visited {
+.mw-parser-output a.external:visited {
        color: #636; /* T5112 */
 }
 
-.mw-body-content a.external:active {
+.mw-parser-output a.external:active {
        color: #b63;
 }
 
-.mw-body-content a.external.free {
+.mw-parser-output a.external.free {
        word-wrap: break-word;
 }
 
index 916c463..8cd25d8 100644 (file)
@@ -22,6 +22,7 @@ textarea {
 
 .editOptions {
        background-color: #eaecf0;
+       color: #252525;
        border: 1px solid #c8ccd1;
        border-top: 0;
        padding: 1em 1em 1.5em 1em;
@@ -76,16 +77,6 @@ textarea {
        width: auto;
 }
 
-#contentSub:empty,
-#contentSub2:empty {
-       display: none;
-}
-
-#contentSub:empty ~ #jump-to-nav,
-#contentSub2:empty ~ #jump-to-nav {
-       margin-top: 0;
-}
-
 span.subpages {
        display: block;
 }
index 750a567..5f6c6dc 100644 (file)
        padding-left: 0.5em;
 }
 
-.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator.mw-apisandbox-clickable-indicator {
-       cursor: pointer;
-}
-
 .mw-apisandbox-textInputCode .oo-ui-inputWidget-input {
        font-family: monospace, monospace;
        font-size: 0.8125em;
index 7029116..c62685a 100644 (file)
 
                                case 'string':
                                case 'user':
-                                       if ( pi.tokentype ) {
-                                               widget = new TextInputWithIndicatorWidget( {
-                                                       input: {
-                                                               indicator: 'previous',
-                                                               indicatorTitle: mw.message( 'apisandbox-fetch-token' ).text(),
-                                                               required: Util.apiBool( pi.required )
-                                                       }
-                                               } );
-                                       } else if ( Util.apiBool( pi.multi ) ) {
+                                       if ( Util.apiBool( pi.multi ) ) {
                                                widget = new OO.ui.CapsuleMultiselectWidget( {
                                                        allowArbitrary: true,
                                                        allowDuplicates: Util.apiBool( pi.allowsduplicates ),
                                                widget.setValidation( Validators.generic );
                                        }
                                        if ( pi.tokentype ) {
+                                               widget.paramInfo = pi;
+                                               $.extend( widget, WidgetMethods.textInputWidget );
                                                $.extend( widget, WidgetMethods.tokenWidget );
-                                               widget.input.paramInfo = pi;
-                                               $.extend( widget.input, WidgetMethods.textInputWidget );
-                                               $.extend( widget.input, WidgetMethods.tokenWidget );
-                                               widget.on( 'indicator', widget.fetchToken, [], widget );
                                        }
                                        break;
 
 
                Util.fetchModuleInfo( this.apiModule )
                        .done( function ( pi ) {
-                               var prefix, i, j, descriptionContainer, widget, widgetField, helpField, tmp, flag, count,
+                               var prefix, i, j, descriptionContainer, widget, layoutConfig, button, widgetField, helpField, tmp, flag, count,
                                        items = [],
                                        deprecatedItems = [],
                                        buttons = [],
                                                        }
                                                );
 
-                                               widgetField = new OO.ui.FieldLayout(
-                                                       widget,
-                                                       {
-                                                               align: 'left',
-                                                               classes: [ 'mw-apisandbox-widget-field' ],
-                                                               label: prefix + pi.parameters[ i ].name
-                                                       }
-                                               );
+                                               layoutConfig = {
+                                                       align: 'left',
+                                                       classes: [ 'mw-apisandbox-widget-field' ],
+                                                       label: prefix + pi.parameters[ i ].name
+                                               };
+
+                                               if ( pi.parameters[ i ].tokentype ) {
+                                                       button = new OO.ui.ButtonWidget( {
+                                                               label: mw.message( 'apisandbox-fetch-token' ).text()
+                                                       } );
+                                                       button.on( 'click', widget.fetchToken, [], widget );
+
+                                                       widgetField = new OO.ui.ActionFieldLayout( widget, button, layoutConfig );
+                                               } else {
+                                                       widgetField = new OO.ui.FieldLayout( widget, layoutConfig );
+                                               }
 
                                                // We need our own click handler on the widget label to
                                                // turn off the disablement.
                return ret;
        };
 
-       /**
-        * A text input with a clickable indicator
-        *
-        * @class
-        * @private
-        * @constructor
-        * @param {Object} [config] Configuration options
-        */
-       function TextInputWithIndicatorWidget( config ) {
-               var k;
-
-               config = config || {};
-               TextInputWithIndicatorWidget[ 'super' ].call( this, config );
-
-               this.$indicator = $( '<span>' ).addClass( 'mw-apisandbox-clickable-indicator' );
-               OO.ui.mixin.TabIndexedElement.call(
-                       this, $.extend( {}, config, { $tabIndexed: this.$indicator } )
-               );
-
-               this.input = new OO.ui.TextInputWidget( $.extend( {
-                       $indicator: this.$indicator,
-                       disabled: this.isDisabled()
-               }, config.input ) );
-
-               // Forward most methods for convenience
-               for ( k in this.input ) {
-                       if ( $.isFunction( this.input[ k ] ) && !this[ k ] ) {
-                               this[ k ] = this.input[ k ].bind( this.input );
-                       }
-               }
-
-               this.$indicator.on( {
-                       click: this.onIndicatorClick.bind( this ),
-                       keypress: this.onIndicatorKeyPress.bind( this )
-               } );
-
-               this.$element.append( this.input.$element );
-       }
-       OO.inheritClass( TextInputWithIndicatorWidget, OO.ui.Widget );
-       OO.mixinClass( TextInputWithIndicatorWidget, OO.ui.mixin.TabIndexedElement );
-       TextInputWithIndicatorWidget.prototype.onIndicatorClick = function ( e ) {
-               if ( !this.isDisabled() && e.which === 1 ) {
-                       this.emit( 'indicator' );
-               }
-               return false;
-       };
-       TextInputWithIndicatorWidget.prototype.onIndicatorKeyPress = function ( e ) {
-               if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
-                       this.emit( 'indicator' );
-                       return false;
-               }
-       };
-       TextInputWithIndicatorWidget.prototype.setDisabled = function ( disabled ) {
-               TextInputWithIndicatorWidget[ 'super' ].prototype.setDisabled.call( this, disabled );
-               if ( this.input ) {
-                       this.input.setDisabled( this.isDisabled() );
-               }
-               return this;
-       };
-
        /**
         * A wrapper for a widget that provides an enable/disable button
         *
index d6b06e6..cb11332 100644 (file)
@@ -48,6 +48,10 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
        display: none;
 }
 
+.mw-enhancedchanges-arrow {
+       padding-top: 2px;
+}
+
 .mw-enhancedchanges-arrow-space {
        display: inline-block;
        *display: inline; /* IE7 and below */
index c951169..87b7a8b 100644 (file)
@@ -10,7 +10,7 @@
        .box-sizing( border-box );
 }
 
-.mw-special-ComparePages .oo-ui-layout.oo-ui-panelLayout.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed:nth-of-type(2) {
+.mw-special-ComparePages .oo-ui-layout.oo-ui-panelLayout.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed:nth-of-type( 2 ) {
        margin-left: 2%;
 }
 
index 45df37f..fe127eb 100644 (file)
@@ -4,9 +4,11 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var allowCloseWindow;
+               var allowCloseWindow, saveButton, restoreButton;
 
-               // Check if all of the form values are unchanged
+               // Check if all of the form values are unchanged.
+               // (This function could be changed to infuse and check OOUI widgets, but that would only make it
+               // slower and more complicated. It works fine to treat them as HTML elements.)
                function isPrefsChanged() {
                        var inputs = $( '#mw-prefs-form :input[name]' ),
                                input, $input, inputType,
                        return false;
                }
 
+               saveButton = OO.ui.infuse( $( '#prefcontrol' ) );
+               restoreButton = OO.ui.infuse( $( '#mw-prefs-restoreprefs' ) );
+
                // Disable the button to save preferences unless preferences have changed
                // Check if preferences have been changed before JS has finished loading
                if ( !isPrefsChanged() ) {
-                       $( '#prefcontrol' ).prop( 'disabled', true );
-                       $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
-                               $( '#prefcontrol' ).prop( 'disabled', false );
+                       saveButton.setDisabled( true );
+                       $( '#preferences .oo-ui-fieldsetLayout' ).one( 'change keydown mousedown', function () {
+                               saveButton.setDisabled( false );
                        } );
                }
 
                        namespace: 'prefswarning'
                } );
                $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) );
-               $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) );
+               restoreButton.on( 'click', function () {
+                       allowCloseWindow.release();
+                       // The default behavior of events in OOUI is always prevented. Follow the link manually.
+                       // Note that middle-click etc. still works, as it doesn't emit a OOUI 'click' event.
+                       location.href = restoreButton.getHref();
+               } );
        } );
 }( mediaWiki, jQuery ) );
index 33b630a..294dcd0 100644 (file)
@@ -1,27 +1,28 @@
 /* Reuses colors from mediawiki.legacy/shared.css */
-.mw-email-not-authenticated .mw-input,
-.mw-email-none .mw-input {
+.mw-email-not-authenticated .oo-ui-labelWidget,
+.mw-email-none .oo-ui-labelWidget {
        border: 1px solid #fde29b;
        background-color: #fdf1d1;
        color: #000;
 }
 /* Authenticated email field has its own class too. Unstyled by default */
 /*
-.mw-email-authenticated .mw-input { }
+.mw-email-authenticated .oo-ui-labelWidget { }
 */
-/* This breaks due to nolabel styling */
-#preferences > fieldset td.mw-label {
-       width: 20%;
-}
 
-#preferences > fieldset table {
-       width: 100%;
+/* This is needed because add extra buttons in a weird way */
+.mw-prefs-buttons .mw-htmlform-submit-buttons {
+       margin: 0;
+       display: inline;
 }
-#preferences > fieldset table.mw-htmlform-matrix {
-       width: auto;
+
+.mw-prefs-buttons {
+       margin-top: 1em;
 }
 
-/* The CSS below is also for JS enabled version, because we want to prevent FOUC */
+#prefcontrol {
+       margin-right: 0.5em;
+}
 
 /*
  * Hide, but keep accessible for screen-readers.
        zoom: 1;
 }
 
-.client-nojs #preftoc {
-       display: none;
+/* Override OOUI styles so that dropdowns near the bottom of the form don't get clipped,
+ * e.g.'Appearance' / 'Threshold for stub link formatting'. This is hacky and bad, it would be
+ * better solved by setting overlays for the widgets, but we can't do it from PHP... */
+#preferences .oo-ui-panelLayout {
+       position: static;
+       overflow: visible;
+       -webkit-transform: none;
+       transform: none;
+}
+
+/* Tweak the margins to reduce the shifting of form contents
+ * after JS code loads and rearranges the page */
+.client-js #preferences > .oo-ui-panelLayout {
+       margin: 1em 0;
+}
+
+.client-js #preferences .oo-ui-panelLayout-framed .oo-ui-panelLayout-framed {
+       margin-left: 0.25em;
+}
+
+.client-js #preferences .oo-ui-panelLayout-framed .oo-ui-tabPanelLayout .oo-ui-panelLayout-framed {
+       margin-left: 0;
 }
 
-.client-js #preferences > fieldset {
-       display: none;
+.client-js #preferences .oo-ui-panelLayout-framed .oo-ui-tabPanelLayout {
+       padding-top: 0.5em;
+       padding-bottom: 0.5em;
 }
 
-/* Only the 1st tab is shown by default in JS mode */
-.client-js #preferences #mw-prefsection-personal {
-       display: block;
+.client-js #preferences > .oo-ui-panelLayout > .oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-header {
+       margin-bottom: 1em;
 }
index dcfad27..9f1691c 100644 (file)
@@ -3,29 +3,10 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab;
+               var $preferences, tabs, wrapper, previousTab;
 
-               labelFunc = function () {
-                       return this.id.replace( /^mw-prefsection/g, 'preftab' );
-               };
-
-               $preftoc = $( '#preftoc' );
                $preferences = $( '#preferences' );
 
-               $fieldsets = $preferences.children( 'fieldset' )
-                       .attr( {
-                               role: 'tabpanel',
-                               'aria-labelledby': labelFunc
-                       } );
-               $fieldsets.not( '#mw-prefsection-personal' )
-                       .hide()
-                       .attr( 'aria-hidden', 'true' );
-
-               // T115692: The following is kept for backwards compatibility with older skins
-               $preferences.addClass( 'jsprefs' );
-               $fieldsets.addClass( 'prefsection' );
-               $fieldsets.children( 'legend' ).addClass( 'mainLegend' );
-
                // Make sure the accessibility tip is selectable so that screen reader users take notice,
                // but hide it per default to reduce interface clutter. Also make sure it becomes visible
                // when selected. Similar to jquery.mw-jump
                                } else {
                                        $( this ).css( 'height', 'auto' );
                                }
-                       } ).insertBefore( $preftoc );
+                       } ).prependTo( '#mw-content-text' );
 
-               /**
-                * It uses document.getElementById for security reasons (HTML injections in $()).
-                *
-                * @ignore
-                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
-                * @param {string} [mode] A hash will be set according to the current
-                *  open section. Set mode 'noHash' to surpress this.
-                */
-               function switchPrefTab( name, mode ) {
-                       var $tab, scrollTop;
+               tabs = new OO.ui.IndexLayout( {
+                       expanded: false,
+                       // Do not remove focus from the tabs menu after choosing a tab
+                       autoFocus: false
+               } );
+
+               mw.config.get( 'wgPreferencesTabs' ).forEach( function ( tabConfig ) {
+                       var panel, $panelContents;
+
+                       panel = new OO.ui.TabPanelLayout( tabConfig.name, {
+                               expanded: false,
+                               label: tabConfig.label
+                       } );
+                       $panelContents = $( '#mw-prefsection-' + tabConfig.name );
+
+                       // Hide the unnecessary PHP PanelLayouts
+                       // (Do not use .remove(), as that would remove event handlers for everything inside them)
+                       $panelContents.parent().detach();
+
+                       panel.$element.append( $panelContents );
+                       tabs.addTabPanels( [ panel ] );
+
+                       // Remove duplicate labels
+                       // (This must be after .addTabPanels(), otherwise the tab item doesn't exist yet)
+                       $panelContents.children( 'legend' ).remove();
+                       $panelContents.attr( 'aria-labelledby', panel.getTabItem().getElementId() );
+               } );
+
+               wrapper = new OO.ui.PanelLayout( {
+                       expanded: false,
+                       padded: false,
+                       framed: true
+               } );
+               wrapper.$element.append( tabs.$element );
+               $preferences.prepend( wrapper.$element );
+
+               function updateHash( panel ) {
+                       var scrollTop, active;
                        // Handle hash manually to prevent jumping,
                        // therefore save and restore scrollTop to prevent jumping.
                        scrollTop = $( window ).scrollTop();
-                       if ( mode !== 'noHash' ) {
-                               location.hash = '#mw-prefsection-' + name;
+                       // Changing the hash apparently causes keyboard focus to be lost?
+                       // Save and restore it. This makes no sense though.
+                       active = document.activeElement;
+                       location.hash = '#mw-prefsection-' + panel.getName();
+                       if ( active ) {
+                               active.focus();
                        }
                        $( window ).scrollTop( scrollTop );
-
-                       $preftoc.find( 'li' ).removeClass( 'selected' )
-                               .find( 'a' ).attr( {
-                                       tabIndex: -1,
-                                       'aria-selected': 'false'
-                               } );
-
-                       $tab = $( document.getElementById( 'preftab-' + name ) );
-                       if ( $tab.length ) {
-                               $tab.attr( {
-                                       tabIndex: 0,
-                                       'aria-selected': 'true'
-                               } ).focus()
-                                       .parent().addClass( 'selected' );
-
-                               $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
-                               $( document.getElementById( 'mw-prefsection-' + name ) ).show().attr( 'aria-hidden', 'false' );
-                       }
                }
 
-               // Enable keyboard users to use left and right keys to switch tabs
-               $preftoc.on( 'keydown', function ( event ) {
-                       var keyLeft = 37,
-                               keyRight = 39,
-                               $el;
-
-                       if ( event.keyCode === keyLeft ) {
-                               $el = $( '#preftoc li.selected' ).prev().find( 'a' );
-                       } else if ( event.keyCode === keyRight ) {
-                               $el = $( '#preftoc li.selected' ).next().find( 'a' );
-                       } else {
-                               return;
+               tabs.on( 'set', updateHash );
+
+               /**
+                * @ignore
+                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
+                * @param {string} [mode] A hash will be set according to the current
+                *  open section. Set mode 'noHash' to supress this.
+                */
+               function switchPrefTab( name, mode ) {
+                       if ( mode === 'noHash' ) {
+                               tabs.off( 'set', updateHash );
                        }
-                       if ( $el.length > 0 ) {
-                               switchPrefTab( $el.attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                       tabs.setTabPanel( name );
+                       if ( mode === 'noHash' ) {
+                               tabs.on( 'set', updateHash );
                        }
-               } );
+               }
 
                // Jump to correct section as indicated by the hash.
                // This function is called onload and onhashchange.
                        }
                }
 
-               // In browsers that support the onhashchange event we will not bind click
-               // handlers and instead let the browser do the default behavior (clicking the
-               // <a href="#.."> will naturally set the hash, handled by onhashchange.
-               // But other things that change the hash will also be caught (e.g. using
+               // Handle other things that change the hash (e.g. using
                // the Back and Forward browser navigation).
-               // Note the special check for IE "compatibility" mode.
-               if ( 'onhashchange' in window &&
-                       ( document.documentMode === undefined || document.documentMode >= 8 )
-               ) {
+               if ( 'onhashchange' in window ) {
                        $( window ).on( 'hashchange', function () {
                                var hash = location.hash;
                                if ( hash.match( /^#mw-[\w-]+/ ) ) {
                                } else if ( hash === '' ) {
                                        switchPrefTab( 'personal', 'noHash' );
                                }
-                       } )
-                               // Run the function immediately to select the proper tab on startup.
-                               .trigger( 'hashchange' );
-               // In older browsers we'll bind a click handler as fallback.
-               // We must not have onhashchange *and* the click handlers, otherwise
-               // the click handler calls switchPrefTab() which sets the hash value,
-               // which triggers onhashchange and calls switchPrefTab() again.
-               } else {
-                       $preftoc.on( 'click', 'li a', function ( e ) {
-                               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-                               e.preventDefault();
                        } );
-                       // If we've reloaded the page or followed an open-in-new-window,
-                       // make the selected tab visible.
-                       detectHash();
                }
 
+               // If we've reloaded the page or followed an open-in-new-window,
+               // make the selected tab visible.
+               detectHash();
+
                // Restore the active tab after saving the preferences
                previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
                if ( previousTab ) {
                }
 
                $( '#mw-prefs-form' ).on( 'submit', function () {
-                       var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
+                       var value = tabs.getCurrentTabPanelName();
                        mw.storage.session.set( 'mwpreferences-prevTab', value );
                } );
 
index 03656ee..7fbcc77 100644 (file)
@@ -4,13 +4,19 @@
 ( function ( mw, $ ) {
        $( function () {
                var
-                       $tzSelect, $tzTextbox, $localtimeHolder, servertime;
+                       timezoneWidget, $localtimeHolder, servertime;
 
                // Timezone functions.
                // Guesses Timezone from browser and updates fields onchange.
 
-               $tzSelect = $( '#mw-input-wptimecorrection' );
-               $tzTextbox = $( '#mw-input-wptimecorrection-other' );
+               // This is identical to OO.ui.infuse( ... ), but it makes the class name of the result known.
+               try {
+                       timezoneWidget = mw.widgets.SelectWithInputWidget.static.infuse( $( '#wpTimeCorrection' ) );
+               } catch ( err ) {
+                       // This preference could theoretically be disabled ($wgHiddenPrefs)
+                       timezoneWidget = null;
+               }
+
                $localtimeHolder = $( '#wpLocalTime' );
                servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
 
 
                function updateTimezoneSelection() {
                        var minuteDiff, localTime,
-                               type = $tzSelect.val();
+                               type = timezoneWidget.dropdowninput.getValue();
 
                        if ( type === 'other' ) {
                                // User specified time zone manually in <input>
                                // Grab data from the textbox, parse it.
-                               minuteDiff = hoursToMinutes( $tzTextbox.val() );
+                               minuteDiff = hoursToMinutes( timezoneWidget.textinput.getValue() );
                        } else {
                                // Time zone not manually specified by user
                                if ( type === 'guess' ) {
                                        // Get browser timezone & fill it in
                                        minuteDiff = -( new Date().getTimezoneOffset() );
-                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
-                                       $tzSelect.val( 'other' );
+                                       timezoneWidget.textinput.setValue( minutesToHours( minuteDiff ) );
+                                       timezoneWidget.dropdowninput.setValue( 'other' );
                                } else {
-                                       // Grab data from the $tzSelect value
+                                       // Grab data from the dropdown value
                                        minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
                                }
                        }
@@ -76,9 +82,9 @@
                        $localtimeHolder.text( mw.language.convertNumber( minutesToHours( localTime ) ) );
                }
 
-               if ( $tzSelect.length && $tzTextbox.length ) {
-                       $tzSelect.change( updateTimezoneSelection );
-                       $tzTextbox.blur( updateTimezoneSelection );
+               if ( timezoneWidget ) {
+                       timezoneWidget.dropdowninput.on( 'change', updateTimezoneSelection );
+                       timezoneWidget.textinput.on( 'change', updateTimezoneSelection );
                        updateTimezoneSelection();
                }
 
index bedcec6..572864b 100644 (file)
@@ -1,17 +1,17 @@
 button_bold.png
 ---------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_bold_ukr.png
+Source : https://commons.wikimedia.org/wiki/File:Button_bold_ukr.png
 License: Public domain
 Author : Alexey Belomoev
 
 button_italic.png
 ------------------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_italic_ukr.png
+Source : https://commons.wikimedia.org/wiki/File:Button_italic_ukr.png
 License: Public domain
 Author : Alexey Belomoev
 
 button_link.png
 -----------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_internal_link_ukr.png
+Source : https://commons.wikimedia.org/wiki/File:Button_internal_link_ukr.png
 License: GPL
 Author : Saproj, Erik Möller
index c1626db..0c13daf 100644 (file)
@@ -49,7 +49,7 @@
                vertical-align: middle;
        }
 
-       [type='checkbox'] {
+       [ type='checkbox' ] {
                display: table-cell;
                position: relative;
                // Ensure the invisible input takes up the required `width` & `height`
index d3c76d0..0a9023e 100644 (file)
@@ -66,7 +66,7 @@
        }
 
        // Override input styling just for checkboxes and radio inputs.
-       input[type='radio'] {
+       input[ type='radio' ] {
                display: inline;
                .box-sizing( content-box );
                width: auto;
index 7f3299a..ea4e599 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
-</g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path fill="#fff" d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+</svg>
diff --git a/resources/src/mediawiki.ui/components/images/checked.png b/resources/src/mediawiki.ui/components/images/checked.png
deleted file mode 100644 (file)
index 672a824..0000000
Binary files a/resources/src/mediawiki.ui/components/images/checked.png and /dev/null differ
diff --git a/resources/src/mediawiki.ui/components/images/checked.svg b/resources/src/mediawiki.ui/components/images/checked.svg
deleted file mode 100644 (file)
index aca2b2b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#00B78C" stroke-width="3" fill="none"/></svg>
index 74dc0b7..1c79d52 100644 (file)
@@ -73,7 +73,7 @@
        }
 
        // Normalize styling for `<input type="search">`
-       &[type='search'] {
+       &[ type='search' ] {
                // Correct the odd appearance in Chrome and Safari 5
                -webkit-appearance: textfield;
 
@@ -103,7 +103,7 @@ textarea.mw-ui-input {
 // <button class="mw-ui-button mw-ui-progressive">Submit</button>
 //
 // Styleguide 1.2.
-input[type='number'],
+input[ type='number' ],
 .mw-ui-input-inline {
        display: inline-block;
        width: auto;
index 3d82e8e..d9b7c6d 100644 (file)
                vertical-align: middle;
        }
 
-       [type='radio'] {
+       [ type='radio' ] {
                // ensure the invisible radio takes up the required width
                width: @sizeInputBinary;
                height: @sizeInputBinary;
                // This is needed for Firefox mobile (See T73750 to workaround default Firefox stylesheet)
                max-width: none;
                margin: 0;
-               // Hide `input[type=radio]` and instead style the label that follows
+               // Hide `input[ type=radio ]` and instead style the label that follows
                // Support: VoiceOver. Use `opacity` so that VoiceOver can still identify the radio
                opacity: 0;
 
index c4fc10e..45bc2dd 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-disambiguation">
-        <path id="page" d="M 5,3 C 5,3 5,16.507875 5,17.25 5,19.208049 6.582269,21 8.502269,21 8.7138904,21 19,21 19,21 L 19,3 z m 8.002269,3 4,0 0,4 L 15.721019,8.71875 12.439769,12 15.721019,15.28125 17.002269,14 l 0,4 -4,0 1.3125,-1.3125 -3.71875,-3.6875 -3.59375,0 0,-2 3.59375,0 3.6875,-3.71875 z"/>
-    </g>
+    <path d="M 5,3 C 5,3 5,16.507875 5,17.25 5,19.208049 6.582269,21 8.502269,21 8.7138904,21 19,21 19,21 L 19,3 z m 8.002269,3 4,0 0,4 L 15.721019,8.71875 12.439769,12 15.721019,15.28125 17.002269,14 l 0,4 -4,0 1.3125,-1.3125 -3.71875,-3.6875 -3.59375,0 0,-2 3.59375,0 3.6875,-3.71875 z"/>
 </svg>
index 4a8ce22..7c83bdb 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-disambiguation">
-        <path id="page" d="m 19,3 c 0,0 0,13.507875 0,14.25 C 19,19.208049 17.417731,21 15.497731,21 15.28611,21 5,21 5,21 L 5,3 z m -8.002269,3 -4,0 0,4 L 8.278981,8.71875 11.560231,12 8.278981,15.28125 6.997731,14 l 0,4 4,0 -1.3125,-1.3125 3.71875,-3.6875 3.59375,0 0,-2 -3.59375,0 -3.6875,-3.71875 z"/>
-    </g>
+    <path d="m 19,3 c 0,0 0,13.507875 0,14.25 C 19,19.208049 17.417731,21 15.497731,21 15.28611,21 5,21 5,21 L 5,3 z m -8.002269,3 -4,0 0,4 L 8.278981,8.71875 11.560231,12 8.278981,15.28125 6.997731,14 l 0,4 4,0 -1.3125,-1.3125 3.71875,-3.6875 3.59375,0 0,-2 -3.59375,0 -3.6875,-3.71875 z"/>
 </svg>
index 92d521a..fac87c9 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-existing">
-        <path id="page" d="m 12,12 5,0 0,-7 -5,0 z m -5,3 0,1 10,0 0,-1 m 0,-1 0,-1 -10,0 0,1 m 0,4 10,0 0,-1 -10,0 z M 11,7 7,7 7,8 11,8 z m 0,3 0,-1 -4,0 0,1 m 0,1 0,1 4,0 0,-1 M 11,5 7,5 7,6 11,6 z M 5,3 19,3 19,21 8.692,21 C 6.602,21 5,19.373 5,17.25 z"/>
-    </g>
+    <path d="m 12,12 5,0 0,-7 -5,0 z m -5,3 0,1 10,0 0,-1 m 0,-1 0,-1 -10,0 0,1 m 0,4 10,0 0,-1 -10,0 z M 11,7 7,7 7,8 11,8 z m 0,3 0,-1 -4,0 0,1 m 0,1 0,1 4,0 0,-1 M 11,5 7,5 7,6 11,6 z M 5,3 19,3 19,21 8.692,21 C 6.602,21 5,19.373 5,17.25 z"/>
 </svg>
index 6982caf..89dfa0d 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-existing">
-        <path id="page" d="m 12,12 -5,0 0,-7 5,0 z m 5,3 0,1 -10,0 0,-1 m 0,-1 0,-1 10,0 0,1 m 0,4 -10,0 0,-1 10,0 z m -4,-11 4,0 0,1 -4,0 z m 0,3 0,-1 4,0 0,1 m 0,1 0,1 -4,0 0,-1 m 0,-6 4,0 0,1 -4,0 z M 19,3 5,3 5,21 15.308,21 C 17.398,21 19,19.373 19,17.25 z"/>
-    </g>
+    <path d="m 12,12 -5,0 0,-7 5,0 z m 5,3 0,1 -10,0 0,-1 m 0,-1 0,-1 10,0 0,1 m 0,4 -10,0 0,-1 10,0 z m -4,-11 4,0 0,1 -4,0 z m 0,3 0,-1 4,0 0,1 m 0,1 0,1 -4,0 0,-1 m 0,-6 4,0 0,1 -4,0 z M 19,3 5,3 5,21 15.308,21 C 17.398,21 19,19.373 19,17.25 z"/>
 </svg>
index c497cd2..cf37b1c 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3044">
-    <path d="M5 3v18h10c2 0 4-2 4-4V3zm7.644 13.572h-1.687v-1.6h1.687zm1.982-6c-.063.217-.148.404-.25.563-.104.16-.225.3-.36.423l-.402.364-.438.396c-.134.127-.25.273-.353.428-.103.16-.18.346-.233.555-.054.215-.08.474-.08.784h-1.36c0-.378.017-.696.057-.955.036-.26.098-.488.183-.688.085-.196.188-.37.31-.52.12-.15.267-.295.433-.44l.385-.332c.12-.105.233-.214.327-.34.098-.124.17-.265.228-.42.054-.155.08-.337.08-.55 0-.256-.044-.48-.133-.66-.09-.183-.197-.333-.322-.442-.125-.11-.26-.19-.403-.246-.143-.05-.268-.077-.376-.077-.52 0-.905.173-1.15.52-.247.345-.372.81-.372 1.39H8.962c0-.468.067-.895.206-1.282.14-.382.34-.714.604-.987.264-.273.582-.487.957-.632.37-.15.79-.223 1.252-.223.385 0 .743.06 1.078.174.33.114.622.282.868.5.246.218.443.487.586.814.143.323.215.692.215 1.1-.01.306-.04.565-.104.784z" id="page"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M5 3v18h10c2 0 4-2 4-4V3zm7.644 13.572h-1.687v-1.6h1.687zm1.982-6c-.063.217-.148.404-.25.563-.104.16-.225.3-.36.423l-.402.364-.438.396c-.134.127-.25.273-.353.428-.103.16-.18.346-.233.555-.054.215-.08.474-.08.784h-1.36c0-.378.017-.696.057-.955.036-.26.098-.488.183-.688.085-.196.188-.37.31-.52.12-.15.267-.295.433-.44l.385-.332c.12-.105.233-.214.327-.34.098-.124.17-.265.228-.42.054-.155.08-.337.08-.55 0-.256-.044-.48-.133-.66-.09-.183-.197-.333-.322-.442-.125-.11-.26-.19-.403-.246-.143-.05-.268-.077-.376-.077-.52 0-.905.173-1.15.52-.247.345-.372.81-.372 1.39H8.962c0-.468.067-.895.206-1.282.14-.382.34-.714.604-.987.264-.273.582-.487.957-.632.37-.15.79-.223 1.252-.223.385 0 .743.06 1.078.174.33.114.622.282.868.5.246.218.443.487.586.814.143.323.215.692.215 1.1-.01.306-.04.565-.104.784z"/>
 </svg>
index be1a286..fd6fdb5 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-not-found">
-        <path id="page" d="m 5,3 0,14 c 0,2.125 1.911,4 4,4 l 10,0 0,-18 z m 7.644,13.572 -1.687,0 0,-1.601 1.687,0 z m 1.982,-6.001 c -0.063,0.218 -0.148,0.405 -0.251,0.564 -0.103,0.159 -0.224,0.3 -0.358,0.423 l -0.403,0.364 -0.438,0.396 c -0.134,0.127 -0.251,0.273 -0.353,0.428 -0.103,0.159 -0.179,0.346 -0.233,0.555 -0.054,0.214 -0.081,0.473 -0.081,0.783 l -1.36,0 c 0,-0.378 0.018,-0.696 0.058,-0.955 0.036,-0.259 0.098,-0.487 0.183,-0.687 0.085,-0.196 0.188,-0.369 0.309,-0.519 0.121,-0.15 0.268,-0.296 0.434,-0.441 l 0.385,-0.332 c 0.121,-0.105 0.233,-0.214 0.327,-0.341 0.098,-0.123 0.17,-0.264 0.228,-0.419 0.054,-0.155 0.081,-0.337 0.081,-0.551 0,-0.255 -0.045,-0.478 -0.134,-0.66 C 12.931,8.997 12.823,8.847 12.698,8.738 12.573,8.629 12.438,8.547 12.295,8.492 12.152,8.442 12.027,8.415 11.919,8.415 c -0.519,0 -0.904,0.173 -1.15,0.519 -0.246,0.346 -0.371,0.81 -0.371,1.392 l -1.436,0 C 8.962,9.857 9.029,9.43 9.168,9.043 9.307,8.661 9.508,8.329 9.772,8.056 10.036,7.783 10.354,7.569 10.729,7.424 11.1,7.274 11.521,7.201 11.982,7.201 c 0.385,0 0.743,0.059 1.078,0.173 0.331,0.114 0.622,0.282 0.868,0.5 0.246,0.218 0.443,0.487 0.586,0.814 0.143,0.323 0.215,0.692 0.215,1.101 -0.009,0.305 -0.04,0.564 -0.103,0.783 z"/>
-    </g>
+       <path d="m 5,3 0,14 c 0,2.125 1.911,4 4,4 l 10,0 0,-18 z m 7.644,13.572 -1.687,0 0,-1.601 1.687,0 z m 1.982,-6.001 c -0.063,0.218 -0.148,0.405 -0.251,0.564 -0.103,0.159 -0.224,0.3 -0.358,0.423 l -0.403,0.364 -0.438,0.396 c -0.134,0.127 -0.251,0.273 -0.353,0.428 -0.103,0.159 -0.179,0.346 -0.233,0.555 -0.054,0.214 -0.081,0.473 -0.081,0.783 l -1.36,0 c 0,-0.378 0.018,-0.696 0.058,-0.955 0.036,-0.259 0.098,-0.487 0.183,-0.687 0.085,-0.196 0.188,-0.369 0.309,-0.519 0.121,-0.15 0.268,-0.296 0.434,-0.441 l 0.385,-0.332 c 0.121,-0.105 0.233,-0.214 0.327,-0.341 0.098,-0.123 0.17,-0.264 0.228,-0.419 0.054,-0.155 0.081,-0.337 0.081,-0.551 0,-0.255 -0.045,-0.478 -0.134,-0.66 C 12.931,8.997 12.823,8.847 12.698,8.738 12.573,8.629 12.438,8.547 12.295,8.492 12.152,8.442 12.027,8.415 11.919,8.415 c -0.519,0 -0.904,0.173 -1.15,0.519 -0.246,0.346 -0.371,0.81 -0.371,1.392 l -1.436,0 C 8.962,9.857 9.029,9.43 9.168,9.043 9.307,8.661 9.508,8.329 9.772,8.056 10.036,7.783 10.354,7.569 10.729,7.424 11.1,7.274 11.521,7.201 11.982,7.201 c 0.385,0 0.743,0.059 1.078,0.173 0.331,0.114 0.622,0.282 0.868,0.5 0.246,0.218 0.443,0.487 0.586,0.814 0.143,0.323 0.215,0.692 0.215,1.101 -0.009,0.305 -0.04,0.564 -0.103,0.783 z"/>
 </svg>
index 083d136..0df7397 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-not-found">
-        <path id="page" d="m 19,3 0,14 c 0,2.125 -1.911,4 -4,4 L 5,21 5,3 z m -7.644,13.572 1.687,0 0,-1.601 -1.687,0 z M 9.374,10.571 c 0.063,0.218 0.148,0.405 0.251,0.564 0.103,0.159 0.224,0.3 0.358,0.423 l 0.403,0.364 0.438,0.396 c 0.134,0.127 0.251,0.273 0.353,0.428 0.103,0.159 0.179,0.346 0.233,0.555 0.054,0.214 0.081,0.473 0.081,0.783 l 1.36,0 c 0,-0.378 -0.018,-0.696 -0.058,-0.955 C 12.757,12.87 12.695,12.642 12.61,12.442 12.525,12.246 12.422,12.073 12.301,11.923 12.18,11.773 12.033,11.627 11.867,11.482 L 11.482,11.15 c -0.121,-0.105 -0.233,-0.214 -0.327,-0.341 -0.098,-0.123 -0.17,-0.264 -0.228,-0.419 -0.054,-0.155 -0.081,-0.337 -0.081,-0.551 0,-0.255 0.045,-0.478 0.134,-0.66 0.089,-0.182 0.197,-0.332 0.322,-0.441 0.125,-0.109 0.26,-0.191 0.403,-0.246 0.143,-0.05 0.268,-0.077 0.376,-0.077 0.519,0 0.904,0.173 1.15,0.519 0.246,0.346 0.371,0.81 0.371,1.392 l 1.436,0 C 15.038,9.857 14.971,9.43 14.832,9.043 14.693,8.661 14.492,8.329 14.228,8.056 13.964,7.783 13.646,7.569 13.271,7.424 12.9,7.274 12.479,7.201 12.018,7.201 11.633,7.201 11.275,7.26 10.94,7.374 10.609,7.488 10.318,7.656 10.072,7.874 9.826,8.092 9.629,8.361 9.486,8.688 9.343,9.011 9.271,9.38 9.271,9.789 c 0.009,0.305 0.04,0.564 0.103,0.783 z"/>
-    </g>
+       <path d="m 19,3 0,14 c 0,2.125 -1.911,4 -4,4 L 5,21 5,3 z m -7.644,13.572 1.687,0 0,-1.601 -1.687,0 z M 9.374,10.571 c 0.063,0.218 0.148,0.405 0.251,0.564 0.103,0.159 0.224,0.3 0.358,0.423 l 0.403,0.364 0.438,0.396 c 0.134,0.127 0.251,0.273 0.353,0.428 0.103,0.159 0.179,0.346 0.233,0.555 0.054,0.214 0.081,0.473 0.081,0.783 l 1.36,0 c 0,-0.378 -0.018,-0.696 -0.058,-0.955 C 12.757,12.87 12.695,12.642 12.61,12.442 12.525,12.246 12.422,12.073 12.301,11.923 12.18,11.773 12.033,11.627 11.867,11.482 L 11.482,11.15 c -0.121,-0.105 -0.233,-0.214 -0.327,-0.341 -0.098,-0.123 -0.17,-0.264 -0.228,-0.419 -0.054,-0.155 -0.081,-0.337 -0.081,-0.551 0,-0.255 0.045,-0.478 0.134,-0.66 0.089,-0.182 0.197,-0.332 0.322,-0.441 0.125,-0.109 0.26,-0.191 0.403,-0.246 0.143,-0.05 0.268,-0.077 0.376,-0.077 0.519,0 0.904,0.173 1.15,0.519 0.246,0.346 0.371,0.81 0.371,1.392 l 1.436,0 C 15.038,9.857 14.971,9.43 14.832,9.043 14.693,8.661 14.492,8.329 14.228,8.056 13.964,7.783 13.646,7.569 13.271,7.424 12.9,7.274 12.479,7.201 12.018,7.201 11.633,7.201 11.275,7.26 10.94,7.374 10.609,7.488 10.318,7.656 10.072,7.874 9.826,8.092 9.629,8.361 9.486,8.688 9.343,9.011 9.271,9.38 9.271,9.789 c 0.009,0.305 0.04,0.564 0.103,0.783 z"/>
 </svg>
index bfe6192..fa6d213 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-redirect">
-        <path id="page" d="m 5,3 0,14 c 0,2.552 1.516,4 4,4 L 19,21 19,3 5,3 z m 9.375,3.78125 c 1.383569,0 2.655397,1.2079253 2.78125,2.625 0,0.83766 -0.373613,1.545585 -0.9375,2.125 l -1.65625,1.6875 c -0.438035,0.517306 -1.120698,0.8125 -1.875,0.8125 -1.132679,0 -1.902838,-0.689468 -2.40625,-1.65625 l 0.8125,-0.84375 c 0.312181,0.708538 0.776094,1.28125 1.65625,1.28125 0.37756,0 0.873293,-0.178438 1.125,-0.4375 l 1.65625,-1.6875 c 0.629266,-0.646428 0.629266,-1.666072 0,-2.3125 C 15.219068,8.1167557 14.75256,7.90625 14.375,7.90625 13.619881,7.90625 13.127595,8.4826941 12.625,9 12.312818,8.8708781 11.999682,8.84375 11.6875,8.84375 c -0.186328,0 -0.374147,0.03125 -0.5,0.03125 0.941448,-0.9046723 1.868493,-2.09375 3.1875,-2.09375 z M 11.09375,9.5625 c 1.132679,0 1.902837,0.720724 2.40625,1.6875 l -0.8125,0.8125 c -0.312182,-0.646428 -0.744844,-1.28125 -1.625,-1.28125 -0.37756,0 -0.873293,0.209689 -1.125,0.46875 l -1.65625,1.65625 c -0.6292663,0.579415 -0.6292663,1.666072 0,2.3125 0.3121814,0.258245 0.7474402,0.46875 1.125,0.46875 0.3775597,0 0.873293,-0.209688 1.125,-0.46875 l 0.5625,-0.59375 c 0.251706,0.12912 0.500318,0.15625 0.8125,0.15625 0.186328,0 0.376171,-3.9e-4 0.5625,-0.0625 L 11.3125,15.9375 c -0.941447,1.096721 -2.711924,1.033794 -3.71875,0 -1.0673009,-1.033795 -1.0673009,-2.774192 0,-3.875 l 1.625,-1.65625 C 9.6567847,9.8889443 10.339448,9.5625 11.09375,9.5625 z"/>
-    </g>
+       <path d="m 5,3 0,14 c 0,2.552 1.516,4 4,4 L 19,21 19,3 5,3 z m 9.375,3.78125 c 1.383569,0 2.655397,1.2079253 2.78125,2.625 0,0.83766 -0.373613,1.545585 -0.9375,2.125 l -1.65625,1.6875 c -0.438035,0.517306 -1.120698,0.8125 -1.875,0.8125 -1.132679,0 -1.902838,-0.689468 -2.40625,-1.65625 l 0.8125,-0.84375 c 0.312181,0.708538 0.776094,1.28125 1.65625,1.28125 0.37756,0 0.873293,-0.178438 1.125,-0.4375 l 1.65625,-1.6875 c 0.629266,-0.646428 0.629266,-1.666072 0,-2.3125 C 15.219068,8.1167557 14.75256,7.90625 14.375,7.90625 13.619881,7.90625 13.127595,8.4826941 12.625,9 12.312818,8.8708781 11.999682,8.84375 11.6875,8.84375 c -0.186328,0 -0.374147,0.03125 -0.5,0.03125 0.941448,-0.9046723 1.868493,-2.09375 3.1875,-2.09375 z M 11.09375,9.5625 c 1.132679,0 1.902837,0.720724 2.40625,1.6875 l -0.8125,0.8125 c -0.312182,-0.646428 -0.744844,-1.28125 -1.625,-1.28125 -0.37756,0 -0.873293,0.209689 -1.125,0.46875 l -1.65625,1.65625 c -0.6292663,0.579415 -0.6292663,1.666072 0,2.3125 0.3121814,0.258245 0.7474402,0.46875 1.125,0.46875 0.3775597,0 0.873293,-0.209688 1.125,-0.46875 l 0.5625,-0.59375 c 0.251706,0.12912 0.500318,0.15625 0.8125,0.15625 0.186328,0 0.376171,-3.9e-4 0.5625,-0.0625 L 11.3125,15.9375 c -0.941447,1.096721 -2.711924,1.033794 -3.71875,0 -1.0673009,-1.033795 -1.0673009,-2.774192 0,-3.875 l 1.625,-1.65625 C 9.6567847,9.8889443 10.339448,9.5625 11.09375,9.5625 z"/>
 </svg>
index 030ff4e..48923c1 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="page-redirect">
-        <path id="page" d="m 19,3 0,14 c 0,2.552 -1.516,4 -4,4 L 5,21 5,3 19,3 z M 9.625,6.78125 c -1.383569,0 -2.655397,1.2079253 -2.78125,2.625 0,0.83766 0.373613,1.545585 0.9375,2.125 l 1.65625,1.6875 c 0.438035,0.517306 1.120698,0.8125 1.875,0.8125 1.132679,0 1.902838,-0.689468 2.40625,-1.65625 l -0.8125,-0.84375 c -0.312181,0.708538 -0.776094,1.28125 -1.65625,1.28125 -0.37756,0 -0.873293,-0.178438 -1.125,-0.4375 L 8.46875,10.6875 C 7.839484,10.041072 7.839484,9.021428 8.46875,8.375 8.780932,8.1167557 9.24744,7.90625 9.625,7.90625 c 0.755119,0 1.247405,0.5764441 1.75,1.09375 0.312182,-0.1291219 0.625318,-0.15625 0.9375,-0.15625 0.186328,0 0.374147,0.03125 0.5,0.03125 C 11.871052,7.9703277 10.944007,6.78125 9.625,6.78125 z m 3.28125,2.78125 c -1.132679,0 -1.902837,0.720724 -2.40625,1.6875 l 0.8125,0.8125 c 0.312182,-0.646428 0.744844,-1.28125 1.625,-1.28125 0.37756,0 0.873293,0.209689 1.125,0.46875 l 1.65625,1.65625 c 0.629266,0.579415 0.629266,1.666072 0,2.3125 -0.312181,0.258245 -0.74744,0.46875 -1.125,0.46875 -0.37756,0 -0.873293,-0.209688 -1.125,-0.46875 L 12.90625,14.625 c -0.251706,0.12912 -0.500318,0.15625 -0.8125,0.15625 -0.186328,0 -0.376171,-3.9e-4 -0.5625,-0.0625 l 1.15625,1.21875 c 0.941447,1.096721 2.711924,1.033794 3.71875,0 1.067301,-1.033795 1.067301,-2.774192 0,-3.875 l -1.625,-1.65625 C 14.343215,9.8889443 13.660552,9.5625 12.90625,9.5625 z"/>
-    </g>
+       <path d="m 19,3 0,14 c 0,2.552 -1.516,4 -4,4 L 5,21 5,3 19,3 z M 9.625,6.78125 c -1.383569,0 -2.655397,1.2079253 -2.78125,2.625 0,0.83766 0.373613,1.545585 0.9375,2.125 l 1.65625,1.6875 c 0.438035,0.517306 1.120698,0.8125 1.875,0.8125 1.132679,0 1.902838,-0.689468 2.40625,-1.65625 l -0.8125,-0.84375 c -0.312181,0.708538 -0.776094,1.28125 -1.65625,1.28125 -0.37756,0 -0.873293,-0.178438 -1.125,-0.4375 L 8.46875,10.6875 C 7.839484,10.041072 7.839484,9.021428 8.46875,8.375 8.780932,8.1167557 9.24744,7.90625 9.625,7.90625 c 0.755119,0 1.247405,0.5764441 1.75,1.09375 0.312182,-0.1291219 0.625318,-0.15625 0.9375,-0.15625 0.186328,0 0.374147,0.03125 0.5,0.03125 C 11.871052,7.9703277 10.944007,6.78125 9.625,6.78125 z m 3.28125,2.78125 c -1.132679,0 -1.902837,0.720724 -2.40625,1.6875 l 0.8125,0.8125 c 0.312182,-0.646428 0.744844,-1.28125 1.625,-1.28125 0.37756,0 0.873293,0.209689 1.125,0.46875 l 1.65625,1.65625 c 0.629266,0.579415 0.629266,1.666072 0,2.3125 -0.312181,0.258245 -0.74744,0.46875 -1.125,0.46875 -0.37756,0 -0.873293,-0.209688 -1.125,-0.46875 L 12.90625,14.625 c -0.251706,0.12912 -0.500318,0.15625 -0.8125,0.15625 -0.186328,0 -0.376171,-3.9e-4 -0.5625,-0.0625 l 1.15625,1.21875 c 0.941447,1.096721 2.711924,1.033794 3.71875,0 1.067301,-1.033795 1.067301,-2.774192 0,-3.875 l -1.625,-1.65625 C 14.343215,9.8889443 13.660552,9.5625 12.90625,9.5625 z"/>
 </svg>
index f10c93d..9d2e93b 100644 (file)
                        format = llll.replace( lll.replace( ll, '' ), '' );
 
                        if ( this.longDisplayFormat ) {
-                               format = format.replace( 'MMM', 'MMMM' ).replace( 'ddd', 'dddd' );
+                               // Replace MMM to MMMM and ddd to dddd but don't change MMMM and dddd
+                               format = format.replace( /MMMM?/, 'MMMM' ).replace( /dddd?/, 'dddd' );
                        }
 
                        return format;
index 47f8045..9750452 100644 (file)
        user-select: none;
 }
 
-@indicator-size: unit( 12 / 16 / 0.8, em );
+@size-indicator: unit( 12 / 16 / 0.8, em );
 
 .mw-widget-dateInputWidget {
        &-handle {
                .oo-ui-unselectable();
 
-               > .oo-ui-labelElement-label {
-                       padding: 0;
-               }
-
                > .oo-ui-indicatorElement-indicator {
                        display: none;
                }
                position: absolute;
                top: 0;
                right: 0;
-               width: @indicator-size;
+               width: @size-indicator;
                height: 100%;
                margin: 0 0.775em;
        }
 
        > .oo-ui-textInputWidget {
                z-index: 2;
-
-               & input {
-                       padding-left: 1em;
-               }
        }
 
        &-calendar {
                background-color: #fff;
                position: absolute;
                margin-top: -2px;
-               box-shadow: 0 0.15em 0 0 rgba( 0, 0, 0, 0.15 );
+               border-radius: 2px;
+               box-shadow: 0 2px 2px 0 rgba( 0, 0, 0, 0.25 );
                z-index: 1;
 
                &:focus {
-                       box-shadow: inset 0 0 0 1px #36c, 0 0.15em 0 0 rgba( 0, 0, 0, 0.15 );
+                       box-shadow: inset 0 0 0 1px #36c, 0 2px 2px 0 rgba( 0, 0, 0, 0.25 );
                        z-index: 3;
                }
        }
@@ -68,8 +61,8 @@
 
        &.oo-ui-flaggedElement-invalid {
                .mw-widget-dateInputWidget-handle {
-                       border-color: #f00;
-                       box-shadow: inset 0 0 0 0 #f00;
+                       border-color: #d33;
+                       box-shadow: none;
                }
        }
 
index 18cf723..74b5abc 100644 (file)
@@ -5,6 +5,32 @@
  * @license The MIT License (MIT); see LICENSE.txt
  */
 
+// Variables taken from OOUI's WikimediaUI theme
+@oo-ui-font-size-browser: 16; // assumed browser default of `16px`
+@oo-ui-font-size-base: 0.8em; // equals `12.8px` at browser default of `16px`
+
+@background-color-base: #fff;
+
+@color-base--emphasized: #000;
+
+@border-base: 1px solid #a2a9b1;
+@border-color-base--focus: #36c;
+@border-color-input--hover: #72777d;
+@border-radius-base: 2px;
+
+@padding-input-text: @padding-top-base @padding-horizontal-input-text @padding-bottom-base;
+@padding-horizontal-input-text: 8 / @oo-ui-font-size-browser / @oo-ui-font-size-base;
+@padding-top-base: 8 / @oo-ui-font-size-browser / @oo-ui-font-size-base; // equals `0.625em`≈`8px`
+@padding-bottom-base: 7 / @oo-ui-font-size-browser / @oo-ui-font-size-base; // equals `0.547em`≈`7px`
+
+@box-shadow-widget: inset 0 0 0 1px transparent;
+@box-shadow-widget--focus: inset 0 0 0 1px #36c;
+
+@line-height-widget-singleline: 1.172em; // Firefox needs a value, Chrome the unit; equals `15px` at base `font-size: 12.8px`
+
+@transition-ease-out-sine-medium: 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
+
+// Mixins taken from OOUI
 .oo-ui-box-sizing( @type: border-box ) {
        -webkit-box-sizing: @type;
        -moz-box-sizing: @type;
        }
 }
 
+.oo-ui-transition( @value1, @value2: X, ... ) {
+       @value: ~`"@{arguments}".replace( /[\[\]]|\,\sX/g, '' )`; // stylelint-disable-line function-comma-space-after, function-whitespace-after, string-quotes, value-keyword-case
+       -webkit-transition: @value;
+       -moz-transition: @value;
+       transition: @value;
+}
+
+// DateInputWidget rules
 .mw-widget-dateInputWidget {
        &.oo-ui-textInputWidget {
                display: inline-block;
                position: relative;
                width: 21em;
                margin-top: 0.25em;
-               .oo-ui-inline-spacing( 0.5em );
+               // .oo-ui-inline-spacing( 0.5em ); already inherited from `.oo-ui-inputWidget`
                margin-bottom: 0.25em;
                margin-left: 0;
        }
        // Note that this block applies to both the PHP widget and the JS widget
        &-handle,
        &.oo-ui-textInputWidget input {
-               background-color: #fff;
                display: inline-block;
                position: relative;
-               .oo-ui-box-sizing( border-box );
-               width: 100%;
                cursor: pointer;
-               padding: 0.5em 1em;
-               border: 1px solid #a2a9b1;
-               border-radius: 2px;
-               outline: 0;
-               line-height: 1.275;
                /**
                 * Ensures non-infused and infused widget have the same height.
                 * Equal to line height + top padding + bottom padding
                 */
-               height: 2.275em;
+               max-height: 2.458em;
+       }
+
+       // Ensure `.mw-widget-dateInputWidget-handle` similar appearance to OOUI's `.oo-ui-textInputWidget`
+       &-handle {
+               background-color: @background-color-base;
+               color: @color-base--emphasized;
+               .oo-ui-box-sizing( border-box );
+               width: 100%;
+               border: @border-base;
+               border-radius: @border-radius-base;
+               padding: @padding-input-text;
+               line-height: @line-height-widget-singleline;
+       }
+
+       &.oo-ui-widget-enabled {
+               .mw-widget-dateInputWidget-handle {
+                       box-shadow: @box-shadow-widget; // necessary for smooth transition
+                       .oo-ui-transition(
+                               border-color @transition-ease-out-sine-medium,
+                               box-shadow @transition-ease-out-sine-medium
+                       );
+
+                       &:hover {
+                               border-color: @border-color-input--hover;
+                       }
+
+                       &:focus {
+                               outline: 0;
+                               border-color: @border-color-base--focus;
+                               box-shadow: @box-shadow-widget--focus;
+                       }
+
+                       & > .oo-ui-labelElement-label {
+                               cursor: pointer;
+                       }
+               }
+       }
+
+       &-active {
+               &.oo-ui-textInputWidget input {
+                       cursor: text;
+               }
        }
 }
index db56bd3..83a2612 100644 (file)
@@ -22,6 +22,7 @@
         * @cfg {boolean} [showRedirectTargets=true] Show the targets of redirects
         * @cfg {boolean} [showImages] Show page images
         * @cfg {boolean} [showDescriptions] Show page descriptions
+        * @cfg {boolean} [showMissing=true] Show missing pages
         * @cfg {boolean} [excludeCurrentPage] Exclude the current page from suggestions
         * @cfg {boolean} [validateTitle=true] Whether the input must be a valid title (if set to true,
         *  the widget will marks itself red for invalid inputs, including an empty query).
@@ -44,6 +45,7 @@
                this.showRedirectTargets = config.showRedirectTargets !== false;
                this.showImages = !!config.showImages;
                this.showDescriptions = !!config.showDescriptions;
+               this.showMissing = config.showMissing !== false;
                this.excludeCurrentPage = !!config.excludeCurrentPage;
                this.validateTitle = config.validateTitle !== undefined ? config.validateTitle : true;
                this.cache = config.cache;
                                // Do nothing. This is just so OOUI doesn't break due to abort being undefined.
                        } };
 
-               if ( mw.Title.newFromText( query ) ) {
-                       return this.getInterwikiPrefixesPromise().then( function ( interwikiPrefixes ) {
-                               var interwiki = query.substring( 0, query.indexOf( ':' ) );
-                               if (
-                                       interwiki && interwiki !== '' &&
-                                       interwikiPrefixes.indexOf( interwiki ) !== -1
-                               ) {
-                                       return $.Deferred().resolve( { query: {
-                                               pages: [ {
-                                                       title: query
-                                               } ]
-                                       } } ).promise( promiseAbortObject );
-                               } else {
-                                       req = api.get( widget.getApiParams( query ) );
-                                       promiseAbortObject.abort = req.abort.bind( req ); // TODO ew
-                                       return req.then( function ( ret ) {
-                                               if ( ret.query === undefined ) {
-                                                       ret = api.get( { action: 'query', titles: query } );
-                                                       promiseAbortObject.abort = ret.abort.bind( ret );
-                                               }
-                                               return ret;
-                                       } );
-                               }
-                       } ).promise( promiseAbortObject );
-               } else {
+               if ( !mw.Title.newFromText( query ) ) {
                        // Don't send invalid titles to the API.
                        // Just pretend it returned nothing so we can show the 'invalid title' section
                        return $.Deferred().resolve( {} ).promise( promiseAbortObject );
                }
+
+               return this.getInterwikiPrefixesPromise().then( function ( interwikiPrefixes ) {
+                       var interwiki = query.substring( 0, query.indexOf( ':' ) );
+                       if (
+                               interwiki && interwiki !== '' &&
+                               interwikiPrefixes.indexOf( interwiki ) !== -1
+                       ) {
+                               return $.Deferred().resolve( { query: {
+                                       pages: [ {
+                                               title: query
+                                       } ]
+                               } } ).promise( promiseAbortObject );
+                       } else {
+                               req = api.get( widget.getApiParams( query ) );
+                               promiseAbortObject.abort = req.abort.bind( req ); // TODO ew
+                               return req.then( function ( ret ) {
+                                       if ( widget.showMissing && ret.query === undefined ) {
+                                               ret = api.get( { action: 'query', titles: query } );
+                                               promiseAbortObject.abort = ret.abort.bind( ret );
+                                       }
+                                       return ret;
+                               } );
+                       }
+               } ).promise( promiseAbortObject );
        };
 
        /**
 
                for ( index in data.pages ) {
                        suggestionPage = data.pages[ index ];
+
                        // When excludeCurrentPage is set, don't list the current page unless the user has type the full title
                        if ( this.excludeCurrentPage && suggestionPage.title === currentPageName && suggestionPage.title !== titleObj.getPrefixedText() ) {
                                continue;
index f178698..0e9c19b 100644 (file)
                                        } else {
                                                parameters[ key ] = '\x1f' + parameters[ key ].join( '\x1f' );
                                        }
-                               }
-                               // Boolean values are only false when not given at all
-                               if ( parameters[ key ] === false || parameters[ key ] === undefined ) {
+                               } else if ( parameters[ key ] === false || parameters[ key ] === undefined ) {
+                                       // Boolean values are only false when not given at all
                                        delete parameters[ key ];
                                }
                        }
index acce58c..7fc08a0 100644 (file)
Binary files a/resources/src/mediawiki/htmlform/images/question.png and b/resources/src/mediawiki/htmlform/images/question.png differ
index 98fbe8d..655076f 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06">
+       <path fill="#54595d" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/>
+</svg>
index 80c4fbd..2611ce2 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-collapsed-ltr.png and b/resources/src/mediawiki/images/arrow-collapsed-ltr.png differ
index 6233fd5..a0f002f 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M4 1.533v9.671l4.752-4.871z" fill="#797979"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+       <path fill="#72777d" d="M4 1.533v9.671l4.752-4.871z"/>
+</svg>
index 5f14489..fcfc634 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-collapsed-rtl.png and b/resources/src/mediawiki/images/arrow-collapsed-rtl.png differ
index 44d5587..076e02b 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M8 1.533v9.671l-4.752-4.871z" fill="#797979"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+       <path fill="#72777d" d="M8 1.533v9.671l-4.752-4.871z"/>
+</svg>
index 252d006..13a78d2 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-expanded.png and b/resources/src/mediawiki/images/arrow-expanded.png differ
index a0d217d..f13144d 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1.165 3.624h9.671l-4.871 4.752z" fill="#797979"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+       <path fill="#72777d" d="M1.165 3.624h9.671l-4.871 4.752z"/>
+</svg>
index d5b66c0..eebb45f 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-sort-ascending.png and b/resources/src/mediawiki/images/arrow-sort-ascending.png differ
index 1e7a094..cd7990e 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 10h10l-5-8.658z" fill="#00a"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+       <path fill="#36c" d="M1 10h10l-5-8.658z"/>
+</svg>
index ab3979e..291c01c 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-sort-descending.png and b/resources/src/mediawiki/images/arrow-sort-descending.png differ
index cf11adb..108bfbc 100644 (file)
@@ -1 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 2h10l-5 8.658z" fill="#00a"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+       <path fill="#36c" d="M1 2h10l-5 8.658z"/>
+</svg>
index 6e5f570..d38feb5 100644 (file)
@@ -1 +1,19 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256">
+       <defs>
+               <linearGradient id="a" x1=".085" x2=".915" y1=".085" y2=".915">
+                       <stop offset="0" stop-color="#e3702d"/>
+                       <stop offset=".107" stop-color="#ea7d31"/>
+                       <stop offset=".35" stop-color="#f69537"/>
+                       <stop offset=".5" stop-color="#fb9e3a"/>
+                       <stop offset=".702" stop-color="#ea7c31"/>
+                       <stop offset=".887" stop-color="#de642b"/>
+                       <stop offset="1" stop-color="#d95b29"/>
+               </linearGradient>
+       </defs>
+       <rect width="256" height="256" fill="#cc5d15" rx="55" ry="55"/>
+       <rect width="246" height="246" x="5" y="5" fill="#f49c52" rx="50" ry="50"/>
+       <rect width="236" height="236" x="10" y="10" fill="url(#a)" rx="47" ry="47"/>
+       <circle cx="68" cy="189" r="24" fill="#fff"/>
+       <path fill="#fff" d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z"/>
+</svg>
index 3662cb5..2b1ccf9 100644 (file)
@@ -1 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g><path d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/><g><path d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/><path d="M11 16h2v2h-2z"/></g></g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+       <path d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+       <path d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437zM11 16h2v2h-2z"/>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png
deleted file mode 100644 (file)
index 2a64fd0..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg
deleted file mode 100644 (file)
index b34fb38..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41333074,0,0,0.41333074,-183.39876,-197.95599)"
-     id="layer1">
-    <g
-       transform="translate(455.60433,484.94177)"
-       id="g3163">
-      <path
-         d="M 0,0.03543307 0,60.519684 43.192915,30.259842 z"
-         id="path3165"
-         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 43.157481,0.03543307 5.633859,0 0,60.48425093 -5.633859,0 z"
-         id="path3167"
-         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-    </g>
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png
deleted file mode 100644 (file)
index 78a493e..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg
deleted file mode 100644 (file)
index 529e8d0..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.4132798,0,0,0.4132798,-87.72955,-233.35372)"
-     id="layer1">
-    <path
-       d="m 272.96237,570.69005 0,60.4894 -43.19393,-30.2447 z"
-       id="path3023-7"
-       style="fill:#cccccc;fill-opacity:1;stroke:none" />
-    <rect
-       width="5.6406202"
-       height="60.489399"
-       x="-229.82111"
-       y="570.68774"
-       transform="scale(-1,1)"
-       id="rect3799-9"
-       style="color:#000000;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png
deleted file mode 100644 (file)
index aa4fbf8..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg
deleted file mode 100644 (file)
index 9fbcf20..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41329555,0,0,0.41329555,-111.35036,-135.3531)"
-     id="layer1">
-    <path
-       d="m 284.11732,333.54605 0,60.4894 43.19395,-30.2447 z"
-       id="path3023-7-2"
-       style="fill:#cccccc;fill-opacity:1;stroke:none" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png
deleted file mode 100644 (file)
index 83df068..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg
deleted file mode 100644 (file)
index 3130f10..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41329555,0,0,0.41329555,-139.69062,-163.69336)"
-     id="layer1">
-    <path
-       d="m 395.88269,402.11748 0,60.4894 -43.19395,-30.2447 z"
-       id="path3023-7-2-8"
-       style="fill:#cccccc;fill-opacity:1;stroke:none" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png
deleted file mode 100644 (file)
index 8904b89..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg
deleted file mode 100644 (file)
index 57df4c0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41327999,0,0,0.41327999,-98.356798,-226.26904)"
-     id="layer1">
-    <path
-       d="m 249.89477,553.5472 0,60.4894 43.19391,-30.2447 z"
-       id="path3023"
-       style="fill:#0000aa;fill-opacity:1;stroke:none" />
-    <rect
-       width="5.6406202"
-       height="60.489399"
-       x="293.03604"
-       y="553.54492"
-       id="rect3799"
-       style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png
deleted file mode 100644 (file)
index 71d0819..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg
deleted file mode 100644 (file)
index dbb473b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="pager-arrow-fastforward-rtl.svg">
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1366"
-     inkscape:window-height="692"
-     id="namedview8"
-     showgrid="false"
-     inkscape:zoom="17.4"
-     inkscape:cx="7.0114943"
-     inkscape:cy="15"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" />
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.07055556,0,0,0.07055556,-9.1581596,-2.7587241)"
-     id="layer1">
-    <path
-       d="m 485.26916,74.546776 0,354.317014 -253.00859,-177.15851 z"
-       id="path3023-2"
-       style="fill:#0000aa;fill-opacity:1;stroke:none"
-       inkscape:connector-curvature="0" />
-    <rect
-       width="33.039963"
-       height="354.31699"
-       x="-232.56898"
-       y="74.533081"
-       transform="scale(-1,1)"
-       id="rect3799-6"
-       style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-ltr.png b/resources/src/mediawiki/images/pager-arrow-forward-ltr.png
deleted file mode 100644 (file)
index c68a4fc..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-forward-ltr.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-forward-ltr.svg
deleted file mode 100644 (file)
index 1ebf9c1..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41329555,0,0,0.41329555,-162.12666,-110.55537)"
-     id="layer1">
-    <path
-       d="m 406.97447,273.54605 0,60.4894 43.19391,-30.2447 z"
-       id="path3023-3-9"
-       style="fill:#0000aa;fill-opacity:1;stroke:none" />
-  </g>
-</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-rtl.png b/resources/src/mediawiki/images/pager-arrow-forward-rtl.png
deleted file mode 100644 (file)
index d0a7030..0000000
Binary files a/resources/src/mediawiki/images/pager-arrow-forward-rtl.png and /dev/null differ
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-forward-rtl.svg
deleted file mode 100644 (file)
index b494409..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   width="30"
-   height="30"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="matrix(0.41329555,0,0,0.41329555,-78.28671,-153.06577)"
-     id="layer1">
-    <path
-       d="m 247.31124,376.4032 0,60.4894 -43.19391,-30.2447 z"
-       id="path3023-3"
-       style="fill:#0000aa;fill-opacity:1;stroke:none" />
-  </g>
-</svg>
index dec0571..00faf84 100644 (file)
                width: 100%;
                table-layout: fixed;
 
+               tr {
+                       background-color: #fff;
+
+                       &:nth-child( even ) {
+                               background-color: #f9f9f9;
+                       }
+               }
+
                td,
                th {
                        padding: 4px 10px;
                        }
 
                        span.stats {
-                               color: #808080;
-                       }
-               }
-
-               tr {
-                       background-color: #fff;
-
-                       &:nth-child( even ) {
-                               background-color: #f9f9f9;
+                               color: #727272;
                        }
                }
        }
index 7a73e98..1f6e54c 100644 (file)
@@ -71,9 +71,9 @@ td.diff-marker {
 }
 
 .diff-context {
-       background: #f9f9f9;
-       border-color: #e6e6e6;
-       color: #333;
+       background: #f8f9fa;
+       border-color: #eaecf0;
+       color: #222;
 }
 
 .diffchange {
@@ -119,3 +119,39 @@ td.diff-marker {
        direction: ltr !important; /* stylelint-disable-line declaration-no-important */
        unicode-bidi: embed;
 }
+
+/*!
+ * Wikidiff2 rendering for moved paragraphs
+ */
+
+.mw-diff-movedpara-left,
+.mw-diff-movedpara-right,
+.mw-diff-movedpara-left:visited,
+.mw-diff-movedpara-right:visited,
+.mw-diff-movedpara-left:active,
+.mw-diff-movedpara-right:active {
+       display: block;
+       color: transparent;
+}
+
+.mw-diff-movedpara-left:hover,
+.mw-diff-movedpara-right:hover {
+       text-decoration: none;
+}
+
+.mw-diff-movedpara-left:after,
+.mw-diff-movedpara-right:after {
+       display: block;
+       color: #222;
+       margin-top: -1.25em;
+}
+
+.mw-diff-movedpara-left:after,
+.rtl .mw-diff-movedpara-right:after {
+       content: '↪';
+}
+
+.mw-diff-movedpara-right:after,
+.rtl .mw-diff-movedpara-left:after {
+       content: '↩';
+}
diff --git a/resources/src/mediawiki/mediawiki.editfont.css b/resources/src/mediawiki/mediawiki.editfont.css
new file mode 100644 (file)
index 0000000..6228030
--- /dev/null
@@ -0,0 +1,12 @@
+/* Edit font preference */
+.mw-editfont-monospace {
+       font-family: monospace;
+}
+
+.mw-editfont-sans-serif {
+       font-family: sans-serif;
+}
+
+.mw-editfont-serif {
+       font-family: serif;
+}
index 633798d..481980f 100644 (file)
@@ -15,6 +15,7 @@
        margin-bottom: 0.5em;
        border: solid 1px #ddd;
        background-color: #fcfcfc;
+       color: #252525;
        /* Click handler in mediawiki.notification.js */
        cursor: pointer;
 
index 20f8b8d..aa86a4b 100644 (file)
@@ -80,6 +80,7 @@
                //          to stop replacement of a tagged notification with another notification using the same message.
                // options: The options passed to the notification with a little sanitization. Used by various methods.
                // $notification: jQuery object containing the notification DOM node.
+               // timeout: Holds appropriate methods to set/clear timeouts
                this.autoHideSeconds = options.autoHideSeconds &&
                        notification.autoHideSeconds[ options.autoHideSeconds ] ||
                        notification.autoHideSeconds.short;
                this.message = message;
                this.options = options;
                this.$notification = $notification;
+               if ( options.visibleTimeout ) {
+                       this.timeout = require( 'mediawiki.visibleTimeout' );
+               } else {
+                       this.timeout = {
+                               set: setTimeout,
+                               clear: clearTimeout
+                       };
+               }
        }
 
        /**
                }
                this.isPaused = true;
 
-               if ( this.timeout ) {
-                       clearTimeout( this.timeout );
-                       delete this.timeout;
+               if ( this.timeoutId ) {
+                       this.timeout.clear( this.timeoutId );
+                       delete this.timeoutId;
                }
        };
 
         */
        Notification.prototype.resume = function () {
                var notif = this;
+
                if ( !notif.isPaused ) {
                        return;
                }
                // Start any autoHide timeouts
                if ( notif.options.autoHide ) {
                        notif.isPaused = false;
-                       notif.timeout = setTimeout( function () {
+                       notif.timeoutId = notif.timeout.set( function () {
                                // Already finished, so don't try to re-clear it
-                               delete notif.timeout;
+                               delete notif.timeoutId;
                                notif.close();
                        }, this.autoHideSeconds * 1000 );
                }
                 * - type:
                 *   An optional string for the type of the message used for styling:
                 *   Examples: 'info', 'warn', 'error'.
+                *
+                * - visibleTimeout:
+                *   A boolean indicating if the autoHide timeout should be based on
+                *   time the page was visible to user. Or if it should use wall clock time.
                 */
                defaults: {
                        autoHide: true,
                        autoHideSeconds: 'short',
                        tag: null,
                        title: null,
-                       type: null
+                       type: null,
+                       visibleTimeout: true
                },
 
                /**
diff --git a/resources/src/mediawiki/mediawiki.visibleTimeout.js b/resources/src/mediawiki/mediawiki.visibleTimeout.js
new file mode 100644 (file)
index 0000000..e2bbd68
--- /dev/null
@@ -0,0 +1,114 @@
+( function ( mw, document ) {
+       var hidden, visibilityChange,
+               nextVisibleTimeoutId = 0,
+               activeTimeouts = {},
+               init = function ( overrideDoc ) {
+                       if ( overrideDoc !== undefined ) {
+                               document = overrideDoc;
+                       }
+
+                       if ( document.hidden !== undefined ) {
+                               hidden = 'hidden';
+                               visibilityChange = 'visibilitychange';
+                       } else if ( document.mozHidden !== undefined ) {
+                               hidden = 'mozHidden';
+                               visibilityChange = 'mozvisibilitychange';
+                       } else if ( document.msHidden !== undefined ) {
+                               hidden = 'msHidden';
+                               visibilityChange = 'msvisibilitychange';
+                       } else if ( document.webkitHidden !== undefined ) {
+                               hidden = 'webkitHidden';
+                               visibilityChange = 'webkitvisibilitychange';
+                       }
+               };
+
+       init();
+
+       /**
+        * @class mw.visibleTimeout
+        * @singleton
+        */
+       module.exports = {
+               /**
+                * Generally similar to setTimeout, but turns itself on/off on page
+                * visibility changes. The passed function fires after the page has been
+                * cumulatively visible for the specified number of ms.
+                *
+                * @param {Function} fn The action to execute after visible timeout has expired.
+                * @param {number} delay The number of ms the page should be visible before
+                *  calling fn.
+                * @return {number} A positive integer value which identifies the timer. This
+                *  value can be passed to clearVisibleTimeout() to cancel the timeout.
+                */
+               set: function ( fn, delay ) {
+                       var handleVisibilityChange,
+                               timeoutId = null,
+                               visibleTimeoutId = nextVisibleTimeoutId++,
+                               lastStartedAt = mw.now(),
+                               clearVisibleTimeout = function () {
+                                       if ( timeoutId !== null ) {
+                                               clearTimeout( timeoutId );
+                                               timeoutId = null;
+                                       }
+                                       delete activeTimeouts[ visibleTimeoutId ];
+                                       if ( hidden !== undefined ) {
+                                               document.removeEventListener( visibilityChange, handleVisibilityChange, false );
+                                       }
+                               },
+                               onComplete = function () {
+                                       clearVisibleTimeout();
+                                       fn();
+                               };
+
+                       handleVisibilityChange = function () {
+                               var now = mw.now();
+
+                               if ( document[ hidden ] ) {
+                                       // pause timeout if running
+                                       if ( timeoutId !== null ) {
+                                               delay = Math.max( 0, delay - Math.max( 0, now - lastStartedAt ) );
+                                               if ( delay === 0 ) {
+                                                       onComplete();
+                                               } else {
+                                                       clearTimeout( timeoutId );
+                                                       timeoutId = null;
+                                               }
+                                       }
+                               } else {
+                                       // resume timeout if not running
+                                       if ( timeoutId === null ) {
+                                               lastStartedAt = now;
+                                               timeoutId = setTimeout( onComplete, delay );
+                                       }
+                               }
+                       };
+
+                       activeTimeouts[ visibleTimeoutId ] = clearVisibleTimeout;
+                       if ( hidden !== undefined ) {
+                               document.addEventListener( visibilityChange, handleVisibilityChange, false );
+                       }
+                       handleVisibilityChange();
+
+                       return visibleTimeoutId;
+               },
+
+               /**
+                * Cancel a visible timeout previously established by calling set.
+                * Passing an invalid ID silently does nothing.
+                *
+                * @param {number} visibleTimeoutId The identifier of the visible
+                *  timeout you want to cancel. This ID was returned by the
+                *  corresponding call to set().
+                */
+               clear: function ( visibleTimeoutId ) {
+                       if ( activeTimeouts.hasOwnProperty( visibleTimeoutId ) ) {
+                               activeTimeouts[ visibleTimeoutId ]();
+                       }
+               }
+       };
+
+       if ( window.QUnit ) {
+               module.exports.setDocument = init;
+       }
+
+}( mediaWiki, document ) );
index e56e807..5b55bb2 100644 (file)
@@ -2,7 +2,17 @@
  * Animate watch/unwatch links to use asynchronous API requests to
  * watch pages, rather than navigating to a different URI.
  *
- * @class mw.page.watch.ajax
+ * Usage:
+ *
+ *     var watch = require( 'mediawiki.page.watch.ajax' );
+ *     watch.updateWatchLink(
+ *         $node,
+ *         'watch',
+ *         'loading'
+ *     );
+ *
+ * @class mw.plugin.page.watch.ajax
+ * @singleton
  */
 ( function ( mw, $ ) {
        var watch,
        };
        module.exports = watch;
 
-       // Deprecated since 1.30
-       mw.log.deprecate( mw, 'page',
-               { watch: watch },
-               'Use require( \'mediawiki.page.watch.ajax\' ) instead.',
-               'mw.page'
-       );
-
        $( function () {
                var $links = $( '.mw-watchlink a[data-mw="interface"], a.mw-watchlink[data-mw="interface"]' );
                if ( !$links.length ) {
index d672d76..e8585c3 100644 (file)
@@ -155,14 +155,12 @@ window.isCompatible = function ( str ) {
 
        script = document.createElement( 'script' );
        script.src = $VARS.baseModulesUri;
-       script.onload = script.onreadystatechange = function () {
-               if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-                       // Clean up
-                       script.onload = script.onreadystatechange = null;
-                       script = null;
-                       // Callback
-                       startUp();
-               }
+       script.onload = function () {
+               // Clean up
+               script.onload = null;
+               script = null;
+               // Callback
+               startUp();
        };
        document.getElementsByTagName( 'head' )[ 0 ].appendChild( script );
 }() );
index 8f752df..993f8d3 100644 (file)
@@ -64,7 +64,9 @@ $wgAutoloadClasses += [
        'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
 
        # tests/phpunit/includes
-       'RevisionStorageTest' => "$testDir/phpunit/includes/RevisionStorageTest.php",
+       'RevisionDbTestBase' => "$testDir/phpunit/includes/RevisionDbTestBase.php",
+       'RevisionTestModifyableContent' => "$testDir/phpunit/includes/RevisionTestModifyableContent.php",
+       'RevisionTestModifyableContentHandler' => "$testDir/phpunit/includes/RevisionTestModifyableContentHandler.php",
        'TestLogger' => "$testDir/phpunit/includes/TestLogger.php",
 
        # tests/phpunit/includes/api
@@ -103,6 +105,9 @@ $wgAutoloadClasses += [
        # tests/phpunit/includes/diff
        'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
 
+       # tests/phpunit/includes/externalstore
+       'ExternalStoreForTesting' => "$testDir/phpunit/includes/externalstore/ExternalStoreForTesting.php",
+
        # tests/phpunit/includes/logging
        'LogFormatterTestCase' => "$testDir/phpunit/includes/logging/LogFormatterTestCase.php",
 
index 6aed02f..c0a9312 100644 (file)
@@ -66,7 +66,7 @@ class TidySupport {
                                        $this->config['driver'] = 'RaggettExternal';
                                        $this->config['tidyBin'] = $wgTidyBin;
                                } else {
-                                       $path = Installer::locateExecutableInDefaultPaths( $wgTidyBin );
+                                       $path = ExecutableFinder::findInDefaultPaths( $wgTidyBin );
                                        if ( $path !== false ) {
                                                $this->config['driver'] = 'RaggettExternal';
                                                $this->config['tidyBin'] = $wgTidyBin;
index 41b0987..82054c4 100644 (file)
@@ -1912,6 +1912,33 @@ a <div>foo</div>
 <p>b</p>
 !! end
 
+!! test
+No p-wrappable content
+!! wikitext
+<span><div>x</div></span>
+<span><s><div>x</div></s></span>
+<small><em></em></small><span><s><div>x</div></s></span>
+!! html+tidy
+<div><span>x</span></div>
+<div><span><s>x</s></span></div>
+<div><span><s>x</s></span></div>
+!! html/parsoid
+<span><div>x</div></span>
+<span><s><div>x</div></s></span>
+<small><em></em></small><span><s><div>x</div></s></span>
+!! end
+
+# T177612: Parsoid-only test
+!! test
+Transclusion meta tags shouldn't trip Parsoid's useless p-wrapper stripping code
+!! wikitext
+{{echo|<span><div>x</div></span>}}
+x
+!! html/parsoid
+<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;span>&lt;div>x&lt;/div>&lt;/span>"}},"i":0}}]}'><div>x</div></span>
+<p>x</p>
+!! end
+
 !! test
 Block tag on one line (<blockquote>)
 !! wikitext
@@ -4806,8 +4833,11 @@ foo//example.com/Foo
 </p>
 !! end
 
+## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia:
 !! test
 External links: with no contents
+!! options
+parsoid=wt2html,wt2wt
 !! wikitext
 [http://en.wikipedia.org/wiki/Foo]
 
@@ -4911,7 +4941,7 @@ External links: Free with trailing quotes (T113666)
 news:'a'b''c''d e
 !! html/php
 <p><b>News:</b> Stuff here
-</p><p><a rel="nofollow" class="external free" href="news:'a'b">news:'a'b</a><i>c</i>d e
+</p><p><a rel="nofollow" class="external free" href="news:&#39;a&#39;b">news:'a'b</a><i>c</i>d e
 </p>
 !! html/parsoid
 <p><b>News:</b> Stuff here</p>
@@ -5557,8 +5587,8 @@ External link containing a single quote. (T65947)
 
 [//foo.org/bar'baz bang]
 !! html/php
-<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar'baz">[1]</a>
-</p><p><a rel="nofollow" class="external text" href="//foo.org/bar'baz">bang</a>
+<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar&#39;baz">[1]</a>
+</p><p><a rel="nofollow" class="external text" href="//foo.org/bar&#39;baz">bang</a>
 </p>
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
@@ -5676,7 +5706,7 @@ Examples from RFC 2732, section 2:
 
 !! html/php
 <p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
-</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
 </p>
 <ul><li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
@@ -5684,7 +5714,7 @@ Examples from RFC 2732, section 2:
 <li> <a rel="nofollow" class="external free" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
-<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
+<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
 </p>
 <ul><li> <a rel="nofollow" class="external free" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
@@ -5697,7 +5727,7 @@ Examples from RFC 2732, section 2:
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a></p>
 
-<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
 <ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
 <li> <a rel="mw:ExtLink" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
 <li> <a rel="mw:ExtLink" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
@@ -5705,7 +5735,7 @@ Examples from RFC 2732, section 2:
 <li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
 
-<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
 <ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
 <li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
 <li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
@@ -5739,7 +5769,7 @@ Examples from RFC 2732, section 2:
 
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://[2404:130:0:1000::187:2]/index.php">test</a>
-</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
 </p>
 <ul><li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]">unicast</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[FF01::101]">multicast</a></li>
@@ -5747,7 +5777,7 @@ Examples from RFC 2732, section 2:
 <li> <a rel="nofollow" class="external text" href="http://[::]">unspecified</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[::13.1.68.3]">ipv4compat</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
-<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
+<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
 </p>
 <ul><li> <a rel="nofollow" class="external text" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
@@ -5760,7 +5790,7 @@ Examples from RFC 2732, section 2:
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">test</a></p>
 
-<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
 <ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]">unicast</a></li>
 <li> <a rel="mw:ExtLink" href="http://[FF01::101]">multicast</a></li>
 <li> <a rel="mw:ExtLink" href="http://[::1]/">loopback</a></li>
@@ -5768,7 +5798,7 @@ Examples from RFC 2732, section 2:
 <li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]">ipv4compat</a></li>
 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
 
-<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
 <ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
 <li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
 <li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
@@ -5935,11 +5965,11 @@ parsoid=html2wt
 !! wikitext
 [[Foo|Bar]]
 [[Foo|Bar]]
-[[wikipedia:Foo|Bar]]
-[[wikipedia:Foo|Bar]]
+[[:en:Foo|Bar]]
+[[:en:Foo|Bar]]
 
-[[wikipedia:European_Robin|European Robin]]
-[[wikipedia:European_Robin|European Robin]]
+[[:en:European_Robin|European Robin]]
+[[:en:European_Robin|European Robin]]
 !! end
 
 !! test
@@ -7973,7 +8003,7 @@ Link containing double-single-quotes '' (T6598)
 !! wikitext
 [[Lista d''e paise d''o munno]]
 !! html/php
-<p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d''e paise d''o munno (page does not exist)">Lista d''e paise d''o munno</a>
+<p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d&#39;&#39;e paise d&#39;&#39;o munno (page does not exist)">Lista d''e paise d''o munno</a>
 </p>
 !! html/parsoid
 <p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a></p>
@@ -8038,9 +8068,9 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 [[''Pentecoste''|''Pentecoste'']]
 !! html/php
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko &#39;&#39;Pentecoste&#39;&#39;.jpg">File:Denys Savchenko <i>Pentecoste</i>.jpg</a>
-</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">''Pentecoste''</a>
-</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">Pentecoste</a>
-</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)"><i>Pentecoste</i></a>
+</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)">''Pentecoste''</a>
+</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)">Pentecoste</a>
+</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)"><i>Pentecoste</i></a>
 </p>
 !! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Denys_Savchenko_''Pentecoste''.jpg"><img resource="./File:Denys_Savchenko_''Pentecoste''.jpg" src="./Special:FilePath/Denys_Savchenko_''Pentecoste''.jpg" height="220" width="220"/></a></span></p>
@@ -8333,7 +8363,7 @@ language=kaa
 !! wikitext
 [[Something]]'nice
 !! html
-<p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (bet ele jaratılmag'an)">Something'nice</a>
+<p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (bet ele jaratılmag&#39;an)">Something'nice</a>
 </p>
 !! end
 
@@ -8517,6 +8547,31 @@ parsoid=html2wt,html2html
 Aðrir mótmælenda<nowiki/>[[söfnuður]]
 !! end
 
+!! test
+Parsoid link bracket escaping
+!! options
+parsoid=html2wt,html2html
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Test" title="Test">Test</a></p>
+<p>[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]</p>
+<p>[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]</p>
+<p>[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]</p>
+<p>[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]</p>
+<p>[[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]]</p>
+!! wikitext
+[[Test]]
+
+[<nowiki/>[[Test]]]
+
+[[[[Test]]]]
+
+[[[<nowiki/>[[Test]]]]]
+
+[[[[[[Test]]]]]]
+
+[[[[[<nowiki/>[[Test]]]]]]]
+!! end
+
 !! test
 Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
 !! wikitext
@@ -8584,8 +8639,11 @@ parsoid=wt2html,wt2wt,html2html
 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?" title="meatball:">MeatBall:</a></p>
 !! end
 
+## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia:
 !! test
 Interwiki link encoding conversion (T3636)
+!! options
+parsoid=wt2html,wt2wt
 !! wikitext
 *[[Wikipedia:ro:Olteni&#0355;a]]
 *[[Wikipedia:ro:Olteni&#355;a]]
@@ -8598,6 +8656,11 @@ Interwiki link encoding conversion (T3636)
 <li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
 <li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
 </ul>
+!! html/parsoid
+<ul>
+<li><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/ro:Olteniţa" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
+<li><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/ro:Olteniţa" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
+</ul>
 !! end
 
 !! test
@@ -9411,7 +9474,7 @@ Handling html with a div self-closing tag
 !! html/parsoid
 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
-<div title="" data-parsoid='{"stx":"html","selfClose":true,"brokenHTMLTag":true}'></div>
+<div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
 <div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
 <div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
 <div title="bar/" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></div>
@@ -10935,10 +10998,10 @@ Magic links: RFC (T2479)
 !! wikitext
 RFC 822
 !! html/php
-<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
 !! html/parsoid
-<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a></p>
+<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a></p>
 !! end
 
 !! test
@@ -10946,10 +11009,10 @@ Magic links: RFC (T67278)
 !! wikitext
 This is RFC 822 but thisRFC 822 is not RFC 822linked.
 !! html/php
-<p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
+<p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
 </p>
 !! html/parsoid
-<p>This is <a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
+<p>This is <a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
 !! end
 
 !! test
@@ -10959,12 +11022,12 @@ RFC &nbsp;&#160;&#0160;&#xA0;&#Xa0; 822
 RFC
 822
 !! html/php
-<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a>
 RFC
 822
 </p>
 !! html/parsoid
-<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
+<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
 RFC
 822</p>
 !! end
@@ -11060,14 +11123,14 @@ Magic links: use appropriate serialization for "almost" magic links.
 !! wikitext
 X[[Special:BookSources/0978739256|foo]]
 
-X[//tools.ietf.org/html/rfc1234 foo]
+X[https://tools.ietf.org/html/rfc1234 foo]
 !! html/php
 <p>X<a href="/wiki/Special:BookSources/0978739256" title="Special:BookSources/0978739256">foo</a>
-</p><p>X<a rel="nofollow" class="external text" href="//tools.ietf.org/html/rfc1234">foo</a>
+</p><p>X<a rel="nofollow" class="external text" href="https://tools.ietf.org/html/rfc1234">foo</a>
 </p>
 !! html/parsoid
 <p>X<a rel="mw:WikiLink" href="./Special:BookSources/0978739256" title="Special:BookSources/0978739256">foo</a></p>
-<p>X<a rel="mw:ExtLink" href="//tools.ietf.org/html/rfc1234">foo</a></p>
+<p>X<a rel="mw:ExtLink" href="https://tools.ietf.org/html/rfc1234">foo</a></p>
 !! end
 
 !! test
@@ -11324,6 +11387,15 @@ Templates with templated name
 <ul about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|inner list}} ","href":"./Template:Inner_list"},"params":{},"i":0}}]}'><li> item 1</li></ul>
 !! end
 
+## Regression test; the output here isn't really that interesting.
+!! test
+Templates with templated name and top level template args
+!! wikitext
+{{1{{2{{{3}}}|4=5}}}}
+!! html/parsoid
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1{{2{{{3}}}|4=5}}"},"params":{},"i":0}}]}'>{{1{{2{{{3}}}|4=5}}}}</p>
+!! end
+
 # Parsoid markup is deliberate "broken". This is an edge case.
 # See long comment in TemplateHandler.js:convertAttribsToString.
 !! test
@@ -14762,6 +14834,28 @@ Alt image option should handle most kinds of wikitext without barfing
 <figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"link\"},\"dsr\":[65,73,2,2]}&#39;>link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"dsr\":[80,106,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;#39;&amp;#39;bold template&amp;#39;&amp;#39;\"}},\"i\":0}}]}&#39;>bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
 !! end
 
+!! test
+Image with nested tables in caption
+!! wikitext
+[[File:Foobar.jpg|thumb|Foo<br />
+{|
+|
+{|
+|z
+|}
+|}
+]]
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Foo&lt;br/>\n{|\n|\n{|\n|z\n|}\n|}\n"}]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" 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,50,null,null]}'>Foo<br data-parsoid='{"stx":"html","selfClose":true}'/>
+<table>
+<tbody><tr><td>
+<table>
+<tbody><tr><td>z</td></tr>
+</tbody></table></td></tr>
+</tbody></table>
+</figcaption></figure>
+!! end
+
 ###################
 # Conflicting image format options.
 # First option specified should 'win'.
@@ -15070,10 +15164,10 @@ T3887: A RFC with a thumbnail
 !! wikitext
 [[File:Foobar.jpg|thumb|This is RFC 12354]]
 !! html/php
-<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>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
+<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>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc12354">RFC 12354</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="https://tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
 !! end
 
 !! test
@@ -15615,9 +15709,9 @@ T93580: 2. <ref> inside inline images
 
 <references />
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-1\"},\"attrs\":{}}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=&#39;{\"group\":\"\",\"name\":\"\",\"content\":\"foo\",\"hasRefInRef\":false,\"dsr\":[64,78,5,6]}&#39;/>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-1\"},\"attrs\":{}}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 !! test
@@ -15627,9 +15721,9 @@ T93580: 3. Templated <ref> inside inline images
 
 <references />
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=&#39;{\"group\":\"\",\"name\":\"\",\"content\":\"foo\",\"hasRefInRef\":false,\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;/>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 ###
@@ -15817,7 +15911,7 @@ Link to category
 !! wikitext
 [[:Category:MediaWiki User's Guide]]
 !! html
-<p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
+<p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User&#39;s Guide">Category:MediaWiki User's Guide</a>
 </p>
 !! end
 
@@ -16794,7 +16888,7 @@ section 5
 <h2><span class="mw-headline" id="text_.26_text">text &amp; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: text &amp; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p>section 3
 </p>
-<h2><span class="mw-headline" id="text_.27_text">text ' text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text ' text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="text_.27_text">text ' text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text &#039; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p>section 4
 </p>
 <h2><span class="mw-headline" id="text_.22_text">text " text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: text &quot; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
@@ -18272,18 +18366,16 @@ 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.
+# HTML+Tidy strips out empty tags completely. Parsoid doesn't.
+# FIXME: Wikitext for this first test doesn't match its title.
 !! test
 Sanitizer: Closing of open tags
 !! wikitext
 <s></s><table></table>
-!! html
-<s></s><table></table>
+!! html/php+tidy
 
 !! html/parsoid
-<p><s></s></p><table></table>
+<s></s><table></table>
 !! end
 
 !! test
@@ -18413,6 +18505,20 @@ all additional text is vanished
 <p>all additional text is vanished</p>
 !! end
 
+!! test
+Language converter glossary rules inside attributes (T119158)
+!! options
+language=sr variant=sr-el
+!! wikitext
+-{H|foAjrjvi=>sr-el:" onload="alert(1)" data-foo="}-
+
+[[File:Foobar.jpg|alt=-{}-foAjrjvi-{}-]]
+!! html
+<p>
+</p><p><a href="/wiki/%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:Foobar.jpg" class="image"><img alt="&quot; onload=&quot;alert(1)&quot; data-foo=&quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
 !! test
 Self closed html pairs (T7487)
 !! wikitext
@@ -19993,7 +20099,7 @@ parsoid=wt2html
 '''''
 !! html/php
 !! html/parsoid
-<p><b><i></i></b></p>
+<b><i></i></b>
 !! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
@@ -20886,7 +20992,7 @@ Double RFC
 !! wikitext
 RFC RFC 1234
 !! html
-<p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
+<p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a>
 </p>
 !! end
 
@@ -20904,10 +21010,10 @@ RFC code coverage
 !! wikitext
 RFC   983&#x20;987
 !! html
-<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
 </p>
 !! html+tidy
-<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a> 987</p>
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a> 987</p>
 !! end
 
 !! test
@@ -22298,7 +22404,7 @@ parsoid={
 |}
 !! end
 
-# Tests LanguageVariantText._fromSelser
+# Tests LanguageVariantText._fromSelSer
 !! test
 LanguageConverter selser (4)
 !! options
@@ -22672,6 +22778,21 @@ a:b=>c xyz
 </p>
 !! end
 
+!! test
+T179579: Nowiki and lc interaction
+!! options
+parsoid=wt2html
+language=sr
+!! wikitext
+-{</nowiki>123}-
+
+-{123<nowiki>|</nowiki>456}-
+!! html/parsoid
+<p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&amp;lt;/nowiki>123"}}' data-parsoid='{"fl":[],"src":"-{&lt;/nowiki>123}-"}'></span></p>
+
+<p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"123&lt;span typeof=\"mw:Nowiki\" data-parsoid=&#39;{\"dsr\":[23,41,8,9]}&#39;>|&lt;/span>456"}}' data-parsoid='{"fl":[],"src":"-{123&lt;nowiki>|&lt;/nowiki>456}-"}'></span></p>
+!! end
+
 !! test
 T2529: Uncovered bullet
 !! wikitext
@@ -24448,9 +24569,7 @@ parsoid=wt2html,wt2wt
 !! wikitext
 '''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
 !! html/parsoid
-<p><b><small></small></b></p>
-<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure>
-<p></p>
+<b><small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small></b>
 !! end
 
 #### ----------------------------------------------------------------
@@ -25649,9 +25768,9 @@ Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (T66300)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
-<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
-X<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
+<p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
+<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
+X<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
 !! wikitext
 RFC 123<nowiki/>4
 RFC 123<nowiki/>y
@@ -25663,18 +25782,18 @@ Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (T66300)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
-<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
--<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
+<p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
+<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
+-<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
 </p>
 !! wikitext
 RFC 123?foo
 RFC 123&foo
 -RFC 123-
 !! html/php
-<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>?foo
-<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
--<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>-
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>?foo
+<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
+-<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>-
 </p>
 !! end
 
@@ -27935,9 +28054,9 @@ Edited RFC links not serializable as RFC links should serialize as extlinks
 !! options
 parsoid=html2wt
 !! html/parsoid
-<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
+<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
 !! wikitext
-[//tools.ietf.org/html/rfc123 New RFC]
+[https://tools.ietf.org/html/rfc123 New RFC]
 !! end
 
 !! test
@@ -28081,7 +28200,7 @@ Magic links inside image captions (autolinked)
 <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>
-<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a></div>
+<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a></div>
 </div>
 </div>
 <div class="thumb tright">
@@ -28100,7 +28219,7 @@ Magic links inside image captions (autolinked)
 </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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//tools.ietf.org/html/rfc1234" rel="mw:ExtLink">RFC 1234</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="https://tools.ietf.org/html/rfc1234" rel="mw:ExtLink">RFC 1234</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/123456789X" rel="mw:WikiLink">ISBN 123456789x</a></figcaption></figure>
 !! end
@@ -29427,7 +29546,7 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
-<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
 </ul>
 </div>
 
@@ -29436,8 +29555,8 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <h2><span id=".D0.A2.D0.B5.D1.81.D1.82"></span><span class="mw-headline" id="Тест">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id=".D0.A2.D0.B5.D1.81.D1.82_2"></span><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id=".D1.82.D0.B5.D1.81.D1.82"></span><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span id="Hey_.3C_.23_.22_.3E_.25_:_.27"></span><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : '">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
+<h2><span id="Hey_.3C_.23_.22_.3E_.25_:_.27"></span><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
 </p><p>💩 <span id="💩"></span>
 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
 </p>
@@ -29483,7 +29602,7 @@ wgFragmentMode=[ 'legacy', 'html5' ]
 <h2><span id="Тест"></span><span class="mw-headline" id=".D0.A2.D0.B5.D1.81.D1.82">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id="Тест_2"></span><span class="mw-headline" id=".D0.A2.D0.B5.D1.81.D1.82_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id="тест"></span><span class="mw-headline" id=".D1.82.D0.B5.D1.81.D1.82">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span id="Hey_&lt;_#_&quot;_&gt;_%_:_'"></span><span class="mw-headline" id="Hey_.3C_.23_.22_.3E_.25_:_.27">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : '">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span id="Hey_&lt;_#_&quot;_&gt;_%_:_'"></span><span class="mw-headline" id="Hey_.3C_.23_.22_.3E_.25_:_.27">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#.D0.A2.D0.B5.D1.81.D1.82">#Тест</a> <a href="#.D1.82.D0.B5.D1.81.D1.82">#тест</a> <a href="#Hey_.3C_.23_.22_.3E_.25_:_.27">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
 </p><p>.F0.9F.92.A9 <span id=".F0.9F.92.A9"></span>
 </p><p><a href="#.E5.95.A4.E9.85.92">#啤酒</a> <a href="#.E5.95.A4.E9.85.92">#啤酒</a>
@@ -29521,7 +29640,7 @@ wgFragmentMode=[ 'html5' ]
 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
-<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
 </ul>
 </div>
 
@@ -29530,9 +29649,23 @@ wgFragmentMode=[ 'html5' ]
 <h2><span class="mw-headline" id="Тест">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : '">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
+<h2><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
 </p><p>💩 <span id="💩"></span>
 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
 </p>
 !! end
+
+!! test
+T90902: Normalize weird characters in section IDs
+!! config
+wgFragmentMode=[ 'html5', 'legacy' ]
+!! wikitext
+== Foo&nbsp;bar ==
+[[#Foo&nbsp;bar]]
+
+!! html/php
+<h2><span class="mw-headline" id="Foo_bar">Foo&#160;bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p><a href="#Foo_bar">#Foo&#160;bar</a>
+</p>
+!! end
index ccc0177..0df8357 100644 (file)
@@ -295,20 +295,32 @@ return [
         * to this black-list to inhibit them from being reported.
         */
        'suppress_issue_types' => [
+               // approximate error count: 1
+               "PhanAccessMethodProtected",
+               // approximate error count: 29
+               "PhanCommentParamOnEmptyParamList",
+               // approximate error count: 33
+               "PhanCommentParamWithoutRealParam",
                // approximate error count: 8
                "PhanDeprecatedClass",
                // approximate error count: 415
                "PhanDeprecatedFunction",
                // approximate error count: 25
                "PhanDeprecatedProperty",
+               // approximate error count: 17
+               "PhanNonClassMethodCall",
                // approximate error count: 11
                "PhanParamReqAfterOpt",
                // approximate error count: 888
                "PhanParamSignatureMismatch",
                // approximate error count: 7
                "PhanParamSignatureMismatchInternal",
+               // approximate error count: 1
+               "PhanParamSignatureRealMismatchTooFewParameters",
                // approximate error count: 125
                "PhanParamTooMany",
+               // approximate error count: 1
+               "PhanParamTooManyCallable",
                // approximate error count: 3
                "PhanParamTooManyInternal",
                // approximate error count: 1
@@ -317,12 +329,28 @@ return [
                "PhanTraitParentReference",
                // approximate error count: 3
                "PhanTypeComparisonFromArray",
+               // approximate error count: 2
+               "PhanTypeComparisonToArray",
                // approximate error count: 3
                "PhanTypeInvalidRightOperand",
+               // approximate error count: 1
+               "PhanTypeMagicVoidWithReturn",
                // approximate error count: 218
                "PhanTypeMismatchArgument",
                // approximate error count: 13
                "PhanTypeMismatchArgumentInternal",
+               // approximate error count: 6
+               "PhanTypeMismatchDeclaredParam",
+               // approximate error count: 111
+               "PhanTypeMismatchDeclaredParamNullable",
+               // approximate error count: 1
+               "PhanTypeMismatchDefault",
+               // approximate error count: 5
+               "PhanTypeMismatchDimAssignment",
+               // approximate error count: 2
+               "PhanTypeMismatchDimEmpty",
+               // approximate error count: 1
+               "PhanTypeMismatchDimFetch",
                // approximate error count: 14
                "PhanTypeMismatchForeach",
                // approximate error count: 56
@@ -333,6 +361,8 @@ return [
                "PhanTypeMissingReturn",
                // approximate error count: 5
                "PhanTypeNonVarPassByRef",
+               // approximate error count: 1
+               "PhanUndeclaredClassInCallable",
                // approximate error count: 32
                "PhanUndeclaredConstant",
                // approximate error count: 233
@@ -341,6 +371,12 @@ return [
                "PhanUndeclaredProperty",
                // approximate error count: 3
                "PhanUndeclaredStaticMethod",
+               // approximate error count: 11
+               "PhanUndeclaredTypeReturnType",
+               // approximate error count: 27
+               "PhanUndeclaredVariable",
+               // approximate error count: 58
+               "PhanUndeclaredVariableDim",
        ],
 
        /**
index 106ab68..6f09d4c 100644 (file)
@@ -38,16 +38,13 @@ $maintenance->setup();
 // to $maintenance->mSelf. Keep that here for b/c
 $self = $maintenance->getName();
 global $IP;
-# Start the autoloader, so that extensions can derive classes from core files
-require_once "$IP/includes/AutoLoader.php";
-# Grab profiling functions
-require_once "$IP/includes/profiler/ProfilerFunctions.php";
-
-# Start the profiler
+# Get profiler configuraton
 $wgProfiler = [];
 if ( file_exists( "$IP/StartProfiler.php" ) ) {
        require "$IP/StartProfiler.php";
 }
+# Start the autoloader, so that extensions can derive classes from core files
+require_once "$IP/includes/AutoLoader.php";
 
 $requireOnceGlobalsScope = function ( $file ) use ( $self ) {
        foreach ( array_keys( $GLOBALS ) as $varName ) {
diff --git a/tests/phpunit/data/db/sqlite/tables-1.19.sql b/tests/phpunit/data/db/sqlite/tables-1.19.sql
new file mode 100644 (file)
index 0000000..db853fc
--- /dev/null
@@ -0,0 +1,531 @@
+-- This is a copy of MediaWiki 1.19 schema shared by MySQL and SQLite.
+-- It is used for updater testing. Comments are stripped to decrease
+-- file size, as we don't need to maintain it.
+
+CREATE TABLE /*_*/user (
+  user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL,
+  user_newpassword tinyblob NOT NULL,
+  user_newpass_time binary(14),
+  user_email tinytext NOT NULL,
+  user_touched binary(14) NOT NULL default '',
+  user_token binary(32) NOT NULL default '',
+  user_email_authenticated binary(14),
+  user_email_token binary(32),
+  user_email_token_expires binary(14),
+  user_registration binary(14),
+  user_editcount int
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));
+CREATE TABLE /*_*/user_groups (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+CREATE TABLE /*_*/user_newtalk (
+  user_id int NOT NULL default 0,
+  user_ip varbinary(40) NOT NULL default '',
+  user_last_timestamp varbinary(14) NULL default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE TABLE /*_*/user_properties (
+  up_user int NOT NULL,
+  up_property varbinary(255) NOT NULL,
+  up_value blob
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+CREATE TABLE /*_*/page (
+  page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  page_namespace int NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default 0,
+  page_is_redirect tinyint unsigned NOT NULL default 0,
+  page_is_new tinyint unsigned NOT NULL default 0,
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+CREATE TABLE /*_*/revision (
+  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rev_page int unsigned NOT NULL,
+  rev_text_id int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default 0,
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default 0,
+  rev_deleted tinyint unsigned NOT NULL default 0,
+  rev_len int unsigned,
+  rev_parent_id int unsigned default NULL,
+  rev_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE TABLE /*_*/text (
+  old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  old_text mediumblob NOT NULL,
+  old_flags tinyblob NOT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+CREATE TABLE /*_*/archive (
+  ar_namespace int NOT NULL default 0,
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL,
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default 0,
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default 0,
+  ar_flags tinyblob NOT NULL,
+  ar_rev_id int unsigned,
+  ar_text_id int unsigned,
+  ar_deleted tinyint unsigned NOT NULL default 0,
+  ar_len int unsigned,
+  ar_page_id int unsigned,
+  ar_parent_id int unsigned default NULL,
+  ar_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE TABLE /*_*/pagelinks (
+  pl_from int unsigned NOT NULL default 0,
+  pl_namespace int NOT NULL default 0,
+  pl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE TABLE /*_*/templatelinks (
+  tl_from int unsigned NOT NULL default 0,
+  tl_namespace int NOT NULL default 0,
+  tl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE TABLE /*_*/imagelinks (
+  il_from int unsigned NOT NULL default 0,
+  il_to varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE TABLE /*_*/categorylinks (
+  cl_from int unsigned NOT NULL default 0,
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varbinary(230) NOT NULL default '',
+  cl_sortkey_prefix varchar(255) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+  cl_collation varbinary(32) NOT NULL default '',
+  cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+CREATE TABLE /*_*/category (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0,
+  cat_hidden tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+CREATE TABLE /*_*/externallinks (
+  el_from int unsigned NOT NULL default 0,
+  el_to blob NOT NULL,
+  el_index blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+CREATE TABLE /*_*/external_user (
+  eu_local_id int unsigned NOT NULL PRIMARY KEY,
+  eu_external_id varchar(255) binary NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
+CREATE TABLE /*_*/langlinks (
+  ll_from int unsigned NOT NULL default 0,
+  ll_lang varbinary(20) NOT NULL default '',
+  ll_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
+CREATE TABLE /*_*/iwlinks (
+  iwl_from int unsigned NOT NULL default 0,
+  iwl_prefix varbinary(20) NOT NULL default '',
+  iwl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE TABLE /*_*/site_stats (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_admins int default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE TABLE /*_*/hitcounter (
+  hc_id int unsigned NOT NULL
+) ENGINE=HEAP MAX_ROWS=25000;
+CREATE TABLE /*_*/ipblocks (
+  ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default 0,
+  ipb_by int unsigned NOT NULL default 0,
+  ipb_by_text varchar(255) binary NOT NULL default '',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_enable_autoblock bool NOT NULL default '1',
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  ipb_deleted bool NOT NULL default 0,
+  ipb_block_email bool NOT NULL default 0,
+  ipb_allow_usertalk bool NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE TABLE /*_*/image (
+  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+  img_size int unsigned NOT NULL default 0,
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_metadata mediumblob NOT NULL,
+  img_bits int NOT NULL default 0,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varbinary(100) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL,
+  img_user int unsigned NOT NULL default 0,
+  img_user_text varchar(255) binary NOT NULL,
+  img_timestamp varbinary(14) NOT NULL default '',
+  img_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
+CREATE TABLE /*_*/oldimage (
+  oi_name varchar(255) binary NOT NULL default '',
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default 0,
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+  oi_metadata mediumblob NOT NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+  oi_deleted tinyint unsigned NOT NULL default 0,
+  oi_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
+CREATE TABLE /*_*/filearchive (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE TABLE /*_*/uploadstash (
+       us_id int unsigned NOT NULL PRIMARY KEY auto_increment,
+       us_user int unsigned NOT NULL,
+       us_key varchar(255) NOT NULL,
+       us_orig_path varchar(255) NOT NULL,
+       us_path varchar(255) NOT NULL,
+       us_source_type varchar(50),
+       us_timestamp varbinary(14) not null,
+       us_status varchar(50) not null,
+       us_chunk_inx int unsigned NULL,
+       us_size int unsigned NOT NULL,
+       us_sha1 varchar(31) NOT NULL,
+       us_mime varchar(255),
+       us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+       us_image_width int unsigned,
+       us_image_height int unsigned,
+       us_image_bits smallint unsigned
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  rc_namespace int NOT NULL default 0,
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_moved_to_ns tinyint unsigned NOT NULL default 0,
+  rc_moved_to_title varchar(255) binary NOT NULL default '',
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE TABLE /*_*/watchlist (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int NOT NULL default 0,
+  wl_title varchar(255) binary NOT NULL default '',
+  wl_notificationtimestamp varbinary(14)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE TABLE /*_*/searchindex (
+  si_page int unsigned NOT NULL,
+  si_title varchar(255) NOT NULL default '',
+  si_text mediumtext NOT NULL
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
+CREATE TABLE /*_*/interwiki (
+  iw_prefix varchar(32) NOT NULL,
+  iw_url blob NOT NULL,
+  iw_api blob NOT NULL,
+  iw_wikiid varchar(64) NOT NULL,
+  iw_local bool NOT NULL,
+  iw_trans tinyint NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE TABLE /*_*/querycache (
+  qc_type varbinary(32) NOT NULL,
+  qc_value int unsigned NOT NULL default 0,
+  qc_namespace int NOT NULL default 0,
+  qc_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+CREATE TABLE /*_*/objectcache (
+  keyname varbinary(255) NOT NULL default '' PRIMARY KEY,
+  value mediumblob,
+  exptime datetime
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+CREATE TABLE /*_*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+CREATE TABLE /*_*/logging (
+  log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  log_type varbinary(32) NOT NULL default '',
+  log_action varbinary(32) NOT NULL default '',
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  log_user int unsigned NOT NULL default 0,
+  log_user_text varchar(255) binary NOT NULL default '',
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  log_page int unsigned NULL,
+  log_comment varchar(255) NOT NULL default '',
+  log_params blob NOT NULL,
+  log_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging(log_type, log_action, log_timestamp);
+CREATE TABLE /*_*/log_search (
+  ls_field varbinary(32) NOT NULL,
+  ls_value varchar(255) NOT NULL,
+  ls_log_id int unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
+CREATE TABLE /*_*/job (
+  job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  job_cmd varbinary(60) NOT NULL default '',
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+  job_timestamp varbinary(14) NULL default NULL,
+  job_params blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
+CREATE INDEX /*i*/job_timestamp ON /*_*/job(job_timestamp);
+CREATE TABLE /*_*/querycache_info (
+  qci_type varbinary(32) NOT NULL default '',
+  qci_timestamp binary(14) NOT NULL default '19700101000000'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+CREATE TABLE /*_*/redirect (
+  rd_from int unsigned NOT NULL default 0 PRIMARY KEY,
+  rd_namespace int NOT NULL default 0,
+  rd_title varchar(255) binary NOT NULL default '',
+  rd_interwiki varchar(32) default NULL,
+  rd_fragment varchar(255) binary default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE TABLE /*_*/querycachetwo (
+  qcc_type varbinary(32) NOT NULL,
+  qcc_value int unsigned NOT NULL default 0,
+  qcc_namespace int NOT NULL default 0,
+  qcc_title varchar(255) binary NOT NULL default '',
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE TABLE /*_*/page_restrictions (
+  pr_page int NOT NULL,
+  pr_type varbinary(60) NOT NULL,
+  pr_level varbinary(60) NOT NULL,
+  pr_cascade tinyint NOT NULL,
+  pr_user int NULL,
+  pr_expiry varbinary(14) NULL,
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE TABLE /*_*/protected_titles (
+  pt_namespace int NOT NULL,
+  pt_title varchar(255) binary NOT NULL,
+  pt_user int unsigned NOT NULL,
+  pt_reason tinyblob,
+  pt_timestamp binary(14) NOT NULL,
+  pt_expiry varbinary(14) NOT NULL default '',
+  pt_create_perm varbinary(60) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL,
+  pp_propname varbinary(60) NOT NULL,
+  pp_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE TABLE /*_*/updatelog (
+  ul_key varchar(255) NOT NULL PRIMARY KEY,
+  ul_value blob
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/change_tag (
+  ct_rc_id int NULL,
+  ct_log_id int NULL,
+  ct_rev_id int NULL,
+  ct_tag varchar(255) NOT NULL,
+  ct_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+CREATE TABLE /*_*/tag_summary (
+  ts_rc_id int NULL,
+  ts_log_id int NULL,
+  ts_rev_id int NULL,
+  ts_tags blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+CREATE TABLE /*_*/valid_tag (
+  vt_tag varchar(255) NOT NULL PRIMARY KEY
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/l10n_cache (
+  lc_lang varbinary(32) NOT NULL,
+  lc_key varchar(255) NOT NULL,
+  lc_value mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+CREATE TABLE /*_*/msg_resource (
+  mr_resource varbinary(255) NOT NULL,
+  mr_lang varbinary(32) NOT NULL,
+  mr_blob mediumblob NOT NULL,
+  mr_timestamp binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  mrl_message varbinary(255) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+CREATE TABLE /*_*/module_deps (
+  md_module varbinary(255) NOT NULL,
+  md_skin varbinary(32) NOT NULL,
+  md_deps mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
diff --git a/tests/phpunit/data/db/sqlite/tables-1.20.sql b/tests/phpunit/data/db/sqlite/tables-1.20.sql
new file mode 100644 (file)
index 0000000..d6c4f5b
--- /dev/null
@@ -0,0 +1,534 @@
+-- This is a copy of MediaWiki 1.20 schema shared by MySQL and SQLite.
+-- It is used for updater testing. Comments are stripped to decrease
+-- file size, as we don't need to maintain it.
+
+CREATE TABLE /*_*/user (
+  user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL,
+  user_newpassword tinyblob NOT NULL,
+  user_newpass_time binary(14),
+  user_email tinytext NOT NULL,
+  user_touched binary(14) NOT NULL default '',
+  user_token binary(32) NOT NULL default '',
+  user_email_authenticated binary(14),
+  user_email_token binary(32),
+  user_email_token_expires binary(14),
+  user_registration binary(14),
+  user_editcount int
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));
+CREATE TABLE /*_*/user_groups (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+CREATE TABLE /*_*/user_newtalk (
+  user_id int NOT NULL default 0,
+  user_ip varbinary(40) NOT NULL default '',
+  user_last_timestamp varbinary(14) NULL default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE TABLE /*_*/user_properties (
+  up_user int NOT NULL,
+  up_property varbinary(255) NOT NULL,
+  up_value blob
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+CREATE TABLE /*_*/page (
+  page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  page_namespace int NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default 0,
+  page_is_redirect tinyint unsigned NOT NULL default 0,
+  page_is_new tinyint unsigned NOT NULL default 0,
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+CREATE TABLE /*_*/revision (
+  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rev_page int unsigned NOT NULL,
+  rev_text_id int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default 0,
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default 0,
+  rev_deleted tinyint unsigned NOT NULL default 0,
+  rev_len int unsigned,
+  rev_parent_id int unsigned default NULL,
+  rev_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
+CREATE TABLE /*_*/text (
+  old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  old_text mediumblob NOT NULL,
+  old_flags tinyblob NOT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+CREATE TABLE /*_*/archive (
+  ar_namespace int NOT NULL default 0,
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL,
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default 0,
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default 0,
+  ar_flags tinyblob NOT NULL,
+  ar_rev_id int unsigned,
+  ar_text_id int unsigned,
+  ar_deleted tinyint unsigned NOT NULL default 0,
+  ar_len int unsigned,
+  ar_page_id int unsigned,
+  ar_parent_id int unsigned default NULL,
+  ar_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE TABLE /*_*/pagelinks (
+  pl_from int unsigned NOT NULL default 0,
+  pl_namespace int NOT NULL default 0,
+  pl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE TABLE /*_*/templatelinks (
+  tl_from int unsigned NOT NULL default 0,
+  tl_namespace int NOT NULL default 0,
+  tl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE TABLE /*_*/imagelinks (
+  il_from int unsigned NOT NULL default 0,
+  il_to varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE TABLE /*_*/categorylinks (
+  cl_from int unsigned NOT NULL default 0,
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varbinary(230) NOT NULL default '',
+  cl_sortkey_prefix varchar(255) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+  cl_collation varbinary(32) NOT NULL default '',
+  cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+CREATE TABLE /*_*/category (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+CREATE TABLE /*_*/externallinks (
+  el_from int unsigned NOT NULL default 0,
+  el_to blob NOT NULL,
+  el_index blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+CREATE TABLE /*_*/external_user (
+  eu_local_id int unsigned NOT NULL PRIMARY KEY,
+  eu_external_id varchar(255) binary NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
+CREATE TABLE /*_*/langlinks (
+  ll_from int unsigned NOT NULL default 0,
+  ll_lang varbinary(20) NOT NULL default '',
+  ll_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
+CREATE TABLE /*_*/iwlinks (
+  iwl_from int unsigned NOT NULL default 0,
+  iwl_prefix varbinary(20) NOT NULL default '',
+  iwl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE TABLE /*_*/site_stats (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_admins int default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE TABLE /*_*/hitcounter (
+  hc_id int unsigned NOT NULL
+) ENGINE=HEAP MAX_ROWS=25000;
+CREATE TABLE /*_*/ipblocks (
+  ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default 0,
+  ipb_by int unsigned NOT NULL default 0,
+  ipb_by_text varchar(255) binary NOT NULL default '',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_enable_autoblock bool NOT NULL default '1',
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  ipb_deleted bool NOT NULL default 0,
+  ipb_block_email bool NOT NULL default 0,
+  ipb_allow_usertalk bool NOT NULL default 0,
+  ipb_parent_block_id int default NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
+CREATE TABLE /*_*/image (
+  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+  img_size int unsigned NOT NULL default 0,
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_metadata mediumblob NOT NULL,
+  img_bits int NOT NULL default 0,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varbinary(100) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL,
+  img_user int unsigned NOT NULL default 0,
+  img_user_text varchar(255) binary NOT NULL,
+  img_timestamp varbinary(14) NOT NULL default '',
+  img_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
+CREATE TABLE /*_*/oldimage (
+  oi_name varchar(255) binary NOT NULL default '',
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default 0,
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+  oi_metadata mediumblob NOT NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+  oi_deleted tinyint unsigned NOT NULL default 0,
+  oi_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
+CREATE TABLE /*_*/filearchive (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE TABLE /*_*/uploadstash (
+  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  us_user int unsigned NOT NULL,
+  us_key varchar(255) NOT NULL,
+  us_orig_path varchar(255) NOT NULL,
+  us_path varchar(255) NOT NULL,
+  us_source_type varchar(50),
+  us_timestamp varbinary(14) NOT NULL,
+  us_status varchar(50) NOT NULL,
+  us_chunk_inx int unsigned NULL,
+  us_size int unsigned NOT NULL,
+  us_sha1 varchar(31) NOT NULL,
+  us_mime varchar(255),
+  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  us_image_width int unsigned,
+  us_image_height int unsigned,
+  us_image_bits smallint unsigned
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  rc_namespace int NOT NULL default 0,
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_moved_to_ns tinyint unsigned NOT NULL default 0,
+  rc_moved_to_title varchar(255) binary NOT NULL default '',
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE TABLE /*_*/watchlist (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int NOT NULL default 0,
+  wl_title varchar(255) binary NOT NULL default '',
+  wl_notificationtimestamp varbinary(14)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE TABLE /*_*/searchindex (
+  si_page int unsigned NOT NULL,
+  si_title varchar(255) NOT NULL default '',
+  si_text mediumtext NOT NULL
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
+CREATE TABLE /*_*/interwiki (
+  iw_prefix varchar(32) NOT NULL,
+  iw_url blob NOT NULL,
+  iw_api blob NOT NULL,
+  iw_wikiid varchar(64) NOT NULL,
+  iw_local bool NOT NULL,
+  iw_trans tinyint NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE TABLE /*_*/querycache (
+  qc_type varbinary(32) NOT NULL,
+  qc_value int unsigned NOT NULL default 0,
+  qc_namespace int NOT NULL default 0,
+  qc_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+CREATE TABLE /*_*/objectcache (
+  keyname varbinary(255) NOT NULL default '' PRIMARY KEY,
+  value mediumblob,
+  exptime datetime
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+CREATE TABLE /*_*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+CREATE TABLE /*_*/logging (
+  log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  log_type varbinary(32) NOT NULL default '',
+  log_action varbinary(32) NOT NULL default '',
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  log_user int unsigned NOT NULL default 0,
+  log_user_text varchar(255) binary NOT NULL default '',
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  log_page int unsigned NULL,
+  log_comment varchar(255) NOT NULL default '',
+  log_params blob NOT NULL,
+  log_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
+CREATE TABLE /*_*/log_search (
+  ls_field varbinary(32) NOT NULL,
+  ls_value varchar(255) NOT NULL,
+  ls_log_id int unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
+CREATE TABLE /*_*/job (
+  job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  job_cmd varbinary(60) NOT NULL default '',
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+  job_timestamp varbinary(14) NULL default NULL,
+  job_params blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
+CREATE TABLE /*_*/querycache_info (
+  qci_type varbinary(32) NOT NULL default '',
+  qci_timestamp binary(14) NOT NULL default '19700101000000'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+CREATE TABLE /*_*/redirect (
+  rd_from int unsigned NOT NULL default 0 PRIMARY KEY,
+  rd_namespace int NOT NULL default 0,
+  rd_title varchar(255) binary NOT NULL default '',
+  rd_interwiki varchar(32) default NULL,
+  rd_fragment varchar(255) binary default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE TABLE /*_*/querycachetwo (
+  qcc_type varbinary(32) NOT NULL,
+  qcc_value int unsigned NOT NULL default 0,
+  qcc_namespace int NOT NULL default 0,
+  qcc_title varchar(255) binary NOT NULL default '',
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE TABLE /*_*/page_restrictions (
+  pr_page int NOT NULL,
+  pr_type varbinary(60) NOT NULL,
+  pr_level varbinary(60) NOT NULL,
+  pr_cascade tinyint NOT NULL,
+  pr_user int NULL,
+  pr_expiry varbinary(14) NULL,
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE TABLE /*_*/protected_titles (
+  pt_namespace int NOT NULL,
+  pt_title varchar(255) binary NOT NULL,
+  pt_user int unsigned NOT NULL,
+  pt_reason tinyblob,
+  pt_timestamp binary(14) NOT NULL,
+  pt_expiry varbinary(14) NOT NULL default '',
+  pt_create_perm varbinary(60) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL,
+  pp_propname varbinary(60) NOT NULL,
+  pp_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE TABLE /*_*/updatelog (
+  ul_key varchar(255) NOT NULL PRIMARY KEY,
+  ul_value blob
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/change_tag (
+  ct_rc_id int NULL,
+  ct_log_id int NULL,
+  ct_rev_id int NULL,
+  ct_tag varchar(255) NOT NULL,
+  ct_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+CREATE TABLE /*_*/tag_summary (
+  ts_rc_id int NULL,
+  ts_log_id int NULL,
+  ts_rev_id int NULL,
+  ts_tags blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+CREATE TABLE /*_*/valid_tag (
+  vt_tag varchar(255) NOT NULL PRIMARY KEY
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/l10n_cache (
+  lc_lang varbinary(32) NOT NULL,
+  lc_key varchar(255) NOT NULL,
+  lc_value mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+CREATE TABLE /*_*/msg_resource (
+  mr_resource varbinary(255) NOT NULL,
+  mr_lang varbinary(32) NOT NULL,
+  mr_blob mediumblob NOT NULL,
+  mr_timestamp binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  mrl_message varbinary(255) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+CREATE TABLE /*_*/module_deps (
+  md_module varbinary(255) NOT NULL,
+  md_skin varbinary(32) NOT NULL,
+  md_deps mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
+-- vim: sw=2 sts=2 et
\ No newline at end of file
diff --git a/tests/phpunit/data/db/sqlite/tables-1.21.sql b/tests/phpunit/data/db/sqlite/tables-1.21.sql
new file mode 100644 (file)
index 0000000..dbc84a6
--- /dev/null
@@ -0,0 +1,577 @@
+-- This is a copy of MediaWiki 1.21 schema shared by MySQL and SQLite.
+-- It is used for updater testing. Comments are stripped to decrease
+-- file size, as we don't need to maintain it.
+
+CREATE TABLE /*_*/user (
+  user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL,
+  user_newpassword tinyblob NOT NULL,
+  user_newpass_time binary(14),
+  user_email tinytext NOT NULL,
+  user_touched binary(14) NOT NULL default '',
+  user_token binary(32) NOT NULL default '',
+  user_email_authenticated binary(14),
+  user_email_token binary(32),
+  user_email_token_expires binary(14),
+  user_registration binary(14),
+  user_editcount int
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));
+CREATE TABLE /*_*/user_groups (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+CREATE TABLE /*_*/user_newtalk (
+  user_id int NOT NULL default 0,
+  user_ip varbinary(40) NOT NULL default '',
+  user_last_timestamp varbinary(14) NULL default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE TABLE /*_*/user_properties (
+  up_user int NOT NULL,
+  up_property varbinary(255) NOT NULL,
+  up_value blob
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+CREATE TABLE /*_*/page (
+  page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  page_namespace int NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default 0,
+  page_is_redirect tinyint unsigned NOT NULL default 0,
+  page_is_new tinyint unsigned NOT NULL default 0,
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL,
+  page_content_model varbinary(32) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+CREATE TABLE /*_*/revision (
+  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rev_page int unsigned NOT NULL,
+  rev_text_id int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default 0,
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default 0,
+  rev_deleted tinyint unsigned NOT NULL default 0,
+  rev_len int unsigned,
+  rev_parent_id int unsigned default NULL,
+  rev_sha1 varbinary(32) NOT NULL default '',
+  rev_content_model varbinary(32) DEFAULT NULL,
+  rev_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
+CREATE TABLE /*_*/text (
+  old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  old_text mediumblob NOT NULL,
+  old_flags tinyblob NOT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+CREATE TABLE /*_*/archive (
+  ar_namespace int NOT NULL default 0,
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL,
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default 0,
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default 0,
+  ar_flags tinyblob NOT NULL,
+  ar_rev_id int unsigned,
+  ar_text_id int unsigned,
+  ar_deleted tinyint unsigned NOT NULL default 0,
+  ar_len int unsigned,
+  ar_page_id int unsigned,
+  ar_parent_id int unsigned default NULL,
+  ar_sha1 varbinary(32) NOT NULL default '',
+  ar_content_model varbinary(32) DEFAULT NULL,
+  ar_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE TABLE /*_*/pagelinks (
+  pl_from int unsigned NOT NULL default 0,
+  pl_namespace int NOT NULL default 0,
+  pl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE TABLE /*_*/templatelinks (
+  tl_from int unsigned NOT NULL default 0,
+  tl_namespace int NOT NULL default 0,
+  tl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE TABLE /*_*/imagelinks (
+  il_from int unsigned NOT NULL default 0,
+  il_to varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE TABLE /*_*/categorylinks (
+  cl_from int unsigned NOT NULL default 0,
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varbinary(230) NOT NULL default '',
+  cl_sortkey_prefix varchar(255) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+  cl_collation varbinary(32) NOT NULL default '',
+  cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+CREATE TABLE /*_*/category (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+CREATE TABLE /*_*/externallinks (
+  el_from int unsigned NOT NULL default 0,
+  el_to blob NOT NULL,
+  el_index blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+CREATE TABLE /*_*/external_user (
+  eu_local_id int unsigned NOT NULL PRIMARY KEY,
+  eu_external_id varchar(255) binary NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
+CREATE TABLE /*_*/langlinks (
+  ll_from int unsigned NOT NULL default 0,
+  ll_lang varbinary(20) NOT NULL default '',
+  ll_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
+CREATE TABLE /*_*/iwlinks (
+  iwl_from int unsigned NOT NULL default 0,
+  iwl_prefix varbinary(20) NOT NULL default '',
+  iwl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE TABLE /*_*/site_stats (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE TABLE /*_*/hitcounter (
+  hc_id int unsigned NOT NULL
+) ENGINE=HEAP MAX_ROWS=25000;
+CREATE TABLE /*_*/ipblocks (
+  ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default 0,
+  ipb_by int unsigned NOT NULL default 0,
+  ipb_by_text varchar(255) binary NOT NULL default '',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_enable_autoblock bool NOT NULL default '1',
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  ipb_deleted bool NOT NULL default 0,
+  ipb_block_email bool NOT NULL default 0,
+  ipb_allow_usertalk bool NOT NULL default 0,
+  ipb_parent_block_id int default NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
+CREATE TABLE /*_*/image (
+  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+  img_size int unsigned NOT NULL default 0,
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_metadata mediumblob NOT NULL,
+  img_bits int NOT NULL default 0,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varbinary(100) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL,
+  img_user int unsigned NOT NULL default 0,
+  img_user_text varchar(255) binary NOT NULL,
+  img_timestamp varbinary(14) NOT NULL default '',
+  img_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
+CREATE TABLE /*_*/oldimage (
+  oi_name varchar(255) binary NOT NULL default '',
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default 0,
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+  oi_metadata mediumblob NOT NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+  oi_deleted tinyint unsigned NOT NULL default 0,
+  oi_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
+CREATE TABLE /*_*/filearchive (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0,
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+CREATE TABLE /*_*/uploadstash (
+  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  us_user int unsigned NOT NULL,
+  us_key varchar(255) NOT NULL,
+  us_orig_path varchar(255) NOT NULL,
+  us_path varchar(255) NOT NULL,
+  us_source_type varchar(50),
+  us_timestamp varbinary(14) NOT NULL,
+  us_status varchar(50) NOT NULL,
+  us_chunk_inx int unsigned NULL,
+  us_props blob,
+  us_size int unsigned NOT NULL,
+  us_sha1 varchar(31) NOT NULL,
+  us_mime varchar(255),
+  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  us_image_width int unsigned,
+  us_image_height int unsigned,
+  us_image_bits smallint unsigned
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  rc_namespace int NOT NULL default 0,
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE TABLE /*_*/watchlist (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int NOT NULL default 0,
+  wl_title varchar(255) binary NOT NULL default '',
+  wl_notificationtimestamp varbinary(14)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE TABLE /*_*/searchindex (
+  si_page int unsigned NOT NULL,
+  si_title varchar(255) NOT NULL default '',
+  si_text mediumtext NOT NULL
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
+CREATE TABLE /*_*/interwiki (
+  iw_prefix varchar(32) NOT NULL,
+  iw_url blob NOT NULL,
+  iw_api blob NOT NULL,
+  iw_wikiid varchar(64) NOT NULL,
+  iw_local bool NOT NULL,
+  iw_trans tinyint NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE TABLE /*_*/querycache (
+  qc_type varbinary(32) NOT NULL,
+  qc_value int unsigned NOT NULL default 0,
+  qc_namespace int NOT NULL default 0,
+  qc_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+CREATE TABLE /*_*/objectcache (
+  keyname varbinary(255) NOT NULL default '' PRIMARY KEY,
+  value mediumblob,
+  exptime datetime
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+CREATE TABLE /*_*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+CREATE TABLE /*_*/logging (
+  log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  log_type varbinary(32) NOT NULL default '',
+  log_action varbinary(32) NOT NULL default '',
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  log_user int unsigned NOT NULL default 0,
+  log_user_text varchar(255) binary NOT NULL default '',
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  log_page int unsigned NULL,
+  log_comment varchar(255) NOT NULL default '',
+  log_params blob NOT NULL,
+  log_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
+CREATE TABLE /*_*/log_search (
+  ls_field varbinary(32) NOT NULL,
+  ls_value varchar(255) NOT NULL,
+  ls_log_id int unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
+CREATE TABLE /*_*/job (
+  job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  job_cmd varbinary(60) NOT NULL default '',
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+  job_timestamp varbinary(14) NULL default NULL,
+  job_params blob NOT NULL,
+  job_random integer unsigned NOT NULL default 0,
+  job_attempts integer unsigned NOT NULL default 0,
+  job_token varbinary(32) NOT NULL default '',
+  job_token_timestamp varbinary(14) NULL default NULL,
+  job_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
+CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
+CREATE TABLE /*_*/querycache_info (
+  qci_type varbinary(32) NOT NULL default '',
+  qci_timestamp binary(14) NOT NULL default '19700101000000'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+CREATE TABLE /*_*/redirect (
+  rd_from int unsigned NOT NULL default 0 PRIMARY KEY,
+  rd_namespace int NOT NULL default 0,
+  rd_title varchar(255) binary NOT NULL default '',
+  rd_interwiki varchar(32) default NULL,
+  rd_fragment varchar(255) binary default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE TABLE /*_*/querycachetwo (
+  qcc_type varbinary(32) NOT NULL,
+  qcc_value int unsigned NOT NULL default 0,
+  qcc_namespace int NOT NULL default 0,
+  qcc_title varchar(255) binary NOT NULL default '',
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE TABLE /*_*/page_restrictions (
+  pr_page int NOT NULL,
+  pr_type varbinary(60) NOT NULL,
+  pr_level varbinary(60) NOT NULL,
+  pr_cascade tinyint NOT NULL,
+  pr_user int NULL,
+  pr_expiry varbinary(14) NULL,
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE TABLE /*_*/protected_titles (
+  pt_namespace int NOT NULL,
+  pt_title varchar(255) binary NOT NULL,
+  pt_user int unsigned NOT NULL,
+  pt_reason tinyblob,
+  pt_timestamp binary(14) NOT NULL,
+  pt_expiry varbinary(14) NOT NULL default '',
+  pt_create_perm varbinary(60) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL,
+  pp_propname varbinary(60) NOT NULL,
+  pp_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
+CREATE TABLE /*_*/updatelog (
+  ul_key varchar(255) NOT NULL PRIMARY KEY,
+  ul_value blob
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/change_tag (
+  ct_rc_id int NULL,
+  ct_log_id int NULL,
+  ct_rev_id int NULL,
+  ct_tag varchar(255) NOT NULL,
+  ct_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+CREATE TABLE /*_*/tag_summary (
+  ts_rc_id int NULL,
+  ts_log_id int NULL,
+  ts_rev_id int NULL,
+  ts_tags blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+CREATE TABLE /*_*/valid_tag (
+  vt_tag varchar(255) NOT NULL PRIMARY KEY
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/l10n_cache (
+  lc_lang varbinary(32) NOT NULL,
+  lc_key varchar(255) NOT NULL,
+  lc_value mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+CREATE TABLE /*_*/msg_resource (
+  mr_resource varbinary(255) NOT NULL,
+  mr_lang varbinary(32) NOT NULL,
+  mr_blob mediumblob NOT NULL,
+  mr_timestamp binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  mrl_message varbinary(255) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+CREATE TABLE /*_*/module_deps (
+  md_module varbinary(255) NOT NULL,
+  md_skin varbinary(32) NOT NULL,
+  md_deps mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
+CREATE TABLE /*_*/sites (
+  site_id                    INT UNSIGNED        NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  site_global_key            varbinary(32)       NOT NULL,
+  site_type                  varbinary(32)       NOT NULL,
+  site_group                 varbinary(32)       NOT NULL,
+  site_source                varbinary(32)       NOT NULL,
+  site_language              varbinary(32)       NOT NULL,
+  site_protocol              varbinary(32)       NOT NULL,
+  site_domain                VARCHAR(255)        NOT NULL,
+  site_data                  BLOB                NOT NULL,
+  site_forward              bool                NOT NULL,
+  site_config               BLOB                NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/sites_global_key ON /*_*/sites (site_global_key);
+CREATE INDEX /*i*/sites_type ON /*_*/sites (site_type);
+CREATE INDEX /*i*/sites_group ON /*_*/sites (site_group);
+CREATE INDEX /*i*/sites_source ON /*_*/sites (site_source);
+CREATE INDEX /*i*/sites_language ON /*_*/sites (site_language);
+CREATE INDEX /*i*/sites_protocol ON /*_*/sites (site_protocol);
+CREATE INDEX /*i*/sites_domain ON /*_*/sites (site_domain);
+CREATE INDEX /*i*/sites_forward ON /*_*/sites (site_forward);
+CREATE TABLE /*_*/site_identifiers (
+  si_site                    INT UNSIGNED        NOT NULL,
+  si_type                    varbinary(32)       NOT NULL,
+  si_key                     varbinary(32)       NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/site_ids_type ON /*_*/site_identifiers (si_type, si_key);
+CREATE INDEX /*i*/site_ids_site ON /*_*/site_identifiers (si_site);
+CREATE INDEX /*i*/site_ids_key ON /*_*/site_identifiers (si_key);
diff --git a/tests/phpunit/data/db/sqlite/tables-1.22.sql b/tests/phpunit/data/db/sqlite/tables-1.22.sql
new file mode 100644 (file)
index 0000000..74c5bd5
--- /dev/null
@@ -0,0 +1,575 @@
+-- This is a copy of MediaWiki 1.22 schema shared by MySQL and SQLite.
+-- It is used for updater testing. Comments are stripped to decrease
+-- file size, as we don't need to maintain it.
+
+CREATE TABLE /*_*/user (
+  user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL,
+  user_newpassword tinyblob NOT NULL,
+  user_newpass_time binary(14),
+  user_email tinytext NOT NULL,
+  user_touched binary(14) NOT NULL default '',
+  user_token binary(32) NOT NULL default '',
+  user_email_authenticated binary(14),
+  user_email_token binary(32),
+  user_email_token_expires binary(14),
+  user_registration binary(14),
+  user_editcount int
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));
+CREATE TABLE /*_*/user_groups (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+CREATE TABLE /*_*/user_newtalk (
+  user_id int NOT NULL default 0,
+  user_ip varbinary(40) NOT NULL default '',
+  user_last_timestamp varbinary(14) NULL default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE TABLE /*_*/user_properties (
+  up_user int NOT NULL,
+  up_property varbinary(255) NOT NULL,
+  up_value blob
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+CREATE TABLE /*_*/page (
+  page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  page_namespace int NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default 0,
+  page_is_redirect tinyint unsigned NOT NULL default 0,
+  page_is_new tinyint unsigned NOT NULL default 0,
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL,
+  page_content_model varbinary(32) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+CREATE TABLE /*_*/revision (
+  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rev_page int unsigned NOT NULL,
+  rev_text_id int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default 0,
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default 0,
+  rev_deleted tinyint unsigned NOT NULL default 0,
+  rev_len int unsigned,
+  rev_parent_id int unsigned default NULL,
+  rev_sha1 varbinary(32) NOT NULL default '',
+  rev_content_model varbinary(32) DEFAULT NULL,
+  rev_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
+CREATE TABLE /*_*/text (
+  old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  old_text mediumblob NOT NULL,
+  old_flags tinyblob NOT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+CREATE TABLE /*_*/archive (
+  ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ar_namespace int NOT NULL default 0,
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL,
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default 0,
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default 0,
+  ar_flags tinyblob NOT NULL,
+  ar_rev_id int unsigned,
+  ar_text_id int unsigned,
+  ar_deleted tinyint unsigned NOT NULL default 0,
+  ar_len int unsigned,
+  ar_page_id int unsigned,
+  ar_parent_id int unsigned default NULL,
+  ar_sha1 varbinary(32) NOT NULL default '',
+  ar_content_model varbinary(32) DEFAULT NULL,
+  ar_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE TABLE /*_*/pagelinks (
+  pl_from int unsigned NOT NULL default 0,
+  pl_namespace int NOT NULL default 0,
+  pl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE TABLE /*_*/templatelinks (
+  tl_from int unsigned NOT NULL default 0,
+  tl_namespace int NOT NULL default 0,
+  tl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE TABLE /*_*/imagelinks (
+  il_from int unsigned NOT NULL default 0,
+  il_to varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE TABLE /*_*/categorylinks (
+  cl_from int unsigned NOT NULL default 0,
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varbinary(230) NOT NULL default '',
+  cl_sortkey_prefix varchar(255) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+  cl_collation varbinary(32) NOT NULL default '',
+  cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+CREATE TABLE /*_*/category (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+CREATE TABLE /*_*/externallinks (
+  el_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  el_from int unsigned NOT NULL default 0,
+  el_to blob NOT NULL,
+  el_index blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+CREATE TABLE /*_*/langlinks (
+  ll_from int unsigned NOT NULL default 0,
+  ll_lang varbinary(20) NOT NULL default '',
+  ll_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
+CREATE TABLE /*_*/iwlinks (
+  iwl_from int unsigned NOT NULL default 0,
+  iwl_prefix varbinary(20) NOT NULL default '',
+  iwl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
+CREATE TABLE /*_*/site_stats (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE TABLE /*_*/hitcounter (
+  hc_id int unsigned NOT NULL
+) ENGINE=HEAP MAX_ROWS=25000;
+CREATE TABLE /*_*/ipblocks (
+  ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default 0,
+  ipb_by int unsigned NOT NULL default 0,
+  ipb_by_text varchar(255) binary NOT NULL default '',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_enable_autoblock bool NOT NULL default '1',
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  ipb_deleted bool NOT NULL default 0,
+  ipb_block_email bool NOT NULL default 0,
+  ipb_allow_usertalk bool NOT NULL default 0,
+  ipb_parent_block_id int default NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
+CREATE TABLE /*_*/image (
+  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+  img_size int unsigned NOT NULL default 0,
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_metadata mediumblob NOT NULL,
+  img_bits int NOT NULL default 0,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varbinary(100) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL,
+  img_user int unsigned NOT NULL default 0,
+  img_user_text varchar(255) binary NOT NULL,
+  img_timestamp varbinary(14) NOT NULL default '',
+  img_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
+CREATE TABLE /*_*/oldimage (
+  oi_name varchar(255) binary NOT NULL default '',
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default 0,
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+  oi_metadata mediumblob NOT NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+  oi_deleted tinyint unsigned NOT NULL default 0,
+  oi_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
+CREATE TABLE /*_*/filearchive (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0,
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+CREATE TABLE /*_*/uploadstash (
+  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  us_user int unsigned NOT NULL,
+  us_key varchar(255) NOT NULL,
+  us_orig_path varchar(255) NOT NULL,
+  us_path varchar(255) NOT NULL,
+  us_source_type varchar(50),
+  us_timestamp varbinary(14) NOT NULL,
+  us_status varchar(50) NOT NULL,
+  us_chunk_inx int unsigned NULL,
+  us_props blob,
+  us_size int unsigned NOT NULL,
+  us_sha1 varchar(31) NOT NULL,
+  us_mime varchar(255),
+  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  us_image_width int unsigned,
+  us_image_height int unsigned,
+  us_image_bits smallint unsigned
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  rc_namespace int NOT NULL default 0,
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE TABLE /*_*/watchlist (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int NOT NULL default 0,
+  wl_title varchar(255) binary NOT NULL default '',
+  wl_notificationtimestamp varbinary(14)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE TABLE /*_*/searchindex (
+  si_page int unsigned NOT NULL,
+  si_title varchar(255) NOT NULL default '',
+  si_text mediumtext NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
+CREATE TABLE /*_*/interwiki (
+  iw_prefix varchar(32) NOT NULL,
+  iw_url blob NOT NULL,
+  iw_api blob NOT NULL,
+  iw_wikiid varchar(64) NOT NULL,
+  iw_local bool NOT NULL,
+  iw_trans tinyint NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE TABLE /*_*/querycache (
+  qc_type varbinary(32) NOT NULL,
+  qc_value int unsigned NOT NULL default 0,
+  qc_namespace int NOT NULL default 0,
+  qc_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+CREATE TABLE /*_*/objectcache (
+  keyname varbinary(255) NOT NULL default '' PRIMARY KEY,
+  value mediumblob,
+  exptime datetime
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+CREATE TABLE /*_*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+CREATE TABLE /*_*/logging (
+  log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  log_type varbinary(32) NOT NULL default '',
+  log_action varbinary(32) NOT NULL default '',
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  log_user int unsigned NOT NULL default 0,
+  log_user_text varchar(255) binary NOT NULL default '',
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  log_page int unsigned NULL,
+  log_comment varchar(255) NOT NULL default '',
+  log_params blob NOT NULL,
+  log_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
+CREATE TABLE /*_*/log_search (
+  ls_field varbinary(32) NOT NULL,
+  ls_value varchar(255) NOT NULL,
+  ls_log_id int unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
+CREATE TABLE /*_*/job (
+  job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  job_cmd varbinary(60) NOT NULL default '',
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+  job_timestamp varbinary(14) NULL default NULL,
+  job_params blob NOT NULL,
+  job_random integer unsigned NOT NULL default 0,
+  job_attempts integer unsigned NOT NULL default 0,
+  job_token varbinary(32) NOT NULL default '',
+  job_token_timestamp varbinary(14) NULL default NULL,
+  job_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
+CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
+CREATE TABLE /*_*/querycache_info (
+  qci_type varbinary(32) NOT NULL default '',
+  qci_timestamp binary(14) NOT NULL default '19700101000000'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+CREATE TABLE /*_*/redirect (
+  rd_from int unsigned NOT NULL default 0 PRIMARY KEY,
+  rd_namespace int NOT NULL default 0,
+  rd_title varchar(255) binary NOT NULL default '',
+  rd_interwiki varchar(32) default NULL,
+  rd_fragment varchar(255) binary default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE TABLE /*_*/querycachetwo (
+  qcc_type varbinary(32) NOT NULL,
+  qcc_value int unsigned NOT NULL default 0,
+  qcc_namespace int NOT NULL default 0,
+  qcc_title varchar(255) binary NOT NULL default '',
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE TABLE /*_*/page_restrictions (
+  pr_page int NOT NULL,
+  pr_type varbinary(60) NOT NULL,
+  pr_level varbinary(60) NOT NULL,
+  pr_cascade tinyint NOT NULL,
+  pr_user int NULL,
+  pr_expiry varbinary(14) NULL,
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE TABLE /*_*/protected_titles (
+  pt_namespace int NOT NULL,
+  pt_title varchar(255) binary NOT NULL,
+  pt_user int unsigned NOT NULL,
+  pt_reason tinyblob,
+  pt_timestamp binary(14) NOT NULL,
+  pt_expiry varbinary(14) NOT NULL default '',
+  pt_create_perm varbinary(60) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL,
+  pp_propname varbinary(60) NOT NULL,
+  pp_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
+CREATE TABLE /*_*/updatelog (
+  ul_key varchar(255) NOT NULL PRIMARY KEY,
+  ul_value blob
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/change_tag (
+  ct_rc_id int NULL,
+  ct_log_id int NULL,
+  ct_rev_id int NULL,
+  ct_tag varchar(255) NOT NULL,
+  ct_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+CREATE TABLE /*_*/tag_summary (
+  ts_rc_id int NULL,
+  ts_log_id int NULL,
+  ts_rev_id int NULL,
+  ts_tags blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+CREATE TABLE /*_*/valid_tag (
+  vt_tag varchar(255) NOT NULL PRIMARY KEY
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/l10n_cache (
+  lc_lang varbinary(32) NOT NULL,
+  lc_key varchar(255) NOT NULL,
+  lc_value mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+CREATE TABLE /*_*/msg_resource (
+  mr_resource varbinary(255) NOT NULL,
+  mr_lang varbinary(32) NOT NULL,
+  mr_blob mediumblob NOT NULL,
+  mr_timestamp binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  mrl_message varbinary(255) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+CREATE TABLE /*_*/module_deps (
+  md_module varbinary(255) NOT NULL,
+  md_skin varbinary(32) NOT NULL,
+  md_deps mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
+CREATE TABLE /*_*/sites (
+  site_id                    INT UNSIGNED        NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  site_global_key            varbinary(32)       NOT NULL,
+  site_type                  varbinary(32)       NOT NULL,
+  site_group                 varbinary(32)       NOT NULL,
+  site_source                varbinary(32)       NOT NULL,
+  site_language              varbinary(32)       NOT NULL,
+  site_protocol              varbinary(32)       NOT NULL,
+  site_domain                VARCHAR(255)        NOT NULL,
+  site_data                  BLOB                NOT NULL,
+  site_forward              bool                NOT NULL,
+  site_config               BLOB                NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/sites_global_key ON /*_*/sites (site_global_key);
+CREATE INDEX /*i*/sites_type ON /*_*/sites (site_type);
+CREATE INDEX /*i*/sites_group ON /*_*/sites (site_group);
+CREATE INDEX /*i*/sites_source ON /*_*/sites (site_source);
+CREATE INDEX /*i*/sites_language ON /*_*/sites (site_language);
+CREATE INDEX /*i*/sites_protocol ON /*_*/sites (site_protocol);
+CREATE INDEX /*i*/sites_domain ON /*_*/sites (site_domain);
+CREATE INDEX /*i*/sites_forward ON /*_*/sites (site_forward);
+CREATE TABLE /*_*/site_identifiers (
+  si_site                    INT UNSIGNED        NOT NULL,
+  si_type                    varbinary(32)       NOT NULL,
+  si_key                     varbinary(32)       NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/site_ids_type ON /*_*/site_identifiers (si_type, si_key);
+CREATE INDEX /*i*/site_ids_site ON /*_*/site_identifiers (si_site);
+CREATE INDEX /*i*/site_ids_key ON /*_*/site_identifiers (si_key);
diff --git a/tests/phpunit/data/db/sqlite/tables-1.23.sql b/tests/phpunit/data/db/sqlite/tables-1.23.sql
new file mode 100644 (file)
index 0000000..1c3a8ae
--- /dev/null
@@ -0,0 +1,580 @@
+-- This is a copy of MediaWiki 1.23 schema shared by MySQL and SQLite.
+-- It is used for updater testing. Comments are stripped to decrease
+-- file size, as we don't need to maintain it.
+
+CREATE TABLE /*_*/user (
+  user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL,
+  user_newpassword tinyblob NOT NULL,
+  user_newpass_time binary(14),
+  user_email tinytext NOT NULL,
+  user_touched binary(14) NOT NULL default '',
+  user_token binary(32) NOT NULL default '',
+  user_email_authenticated binary(14),
+  user_email_token binary(32),
+  user_email_token_expires binary(14),
+  user_registration binary(14),
+  user_editcount int,
+  user_password_expires varbinary(14) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));
+CREATE TABLE /*_*/user_groups (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+CREATE TABLE /*_*/user_newtalk (
+  user_id int NOT NULL default 0,
+  user_ip varbinary(40) NOT NULL default '',
+  user_last_timestamp varbinary(14) NULL default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE TABLE /*_*/user_properties (
+  up_user int NOT NULL,
+  up_property varbinary(255) NOT NULL,
+  up_value blob
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+CREATE TABLE /*_*/page (
+  page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  page_namespace int NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default 0,
+  page_is_redirect tinyint unsigned NOT NULL default 0,
+  page_is_new tinyint unsigned NOT NULL default 0,
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_links_updated varbinary(14) NULL default NULL,
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL,
+  page_content_model varbinary(32) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+CREATE TABLE /*_*/revision (
+  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rev_page int unsigned NOT NULL,
+  rev_text_id int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default 0,
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default 0,
+  rev_deleted tinyint unsigned NOT NULL default 0,
+  rev_len int unsigned,
+  rev_parent_id int unsigned default NULL,
+  rev_sha1 varbinary(32) NOT NULL default '',
+  rev_content_model varbinary(32) DEFAULT NULL,
+  rev_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
+CREATE TABLE /*_*/text (
+  old_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  old_text mediumblob NOT NULL,
+  old_flags tinyblob NOT NULL
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+CREATE TABLE /*_*/archive (
+  ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ar_namespace int NOT NULL default 0,
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL,
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default 0,
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default 0,
+  ar_flags tinyblob NOT NULL,
+  ar_rev_id int unsigned,
+  ar_text_id int unsigned,
+  ar_deleted tinyint unsigned NOT NULL default 0,
+  ar_len int unsigned,
+  ar_page_id int unsigned,
+  ar_parent_id int unsigned default NULL,
+  ar_sha1 varbinary(32) NOT NULL default '',
+  ar_content_model varbinary(32) DEFAULT NULL,
+  ar_content_format varbinary(64) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE TABLE /*_*/pagelinks (
+  pl_from int unsigned NOT NULL default 0,
+  pl_namespace int NOT NULL default 0,
+  pl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE TABLE /*_*/templatelinks (
+  tl_from int unsigned NOT NULL default 0,
+  tl_namespace int NOT NULL default 0,
+  tl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE TABLE /*_*/imagelinks (
+  il_from int unsigned NOT NULL default 0,
+  il_to varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE TABLE /*_*/categorylinks (
+  cl_from int unsigned NOT NULL default 0,
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varbinary(230) NOT NULL default '',
+  cl_sortkey_prefix varchar(255) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+  cl_collation varbinary(32) NOT NULL default '',
+  cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+CREATE TABLE /*_*/category (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+CREATE TABLE /*_*/externallinks (
+  el_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  el_from int unsigned NOT NULL default 0,
+  el_to blob NOT NULL,
+  el_index blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+CREATE TABLE /*_*/langlinks (
+  ll_from int unsigned NOT NULL default 0,
+  ll_lang varbinary(20) NOT NULL default '',
+  ll_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
+CREATE TABLE /*_*/iwlinks (
+  iwl_from int unsigned NOT NULL default 0,
+  iwl_prefix varbinary(20) NOT NULL default '',
+  iwl_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
+CREATE TABLE /*_*/site_stats (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE TABLE /*_*/hitcounter (
+  hc_id int unsigned NOT NULL
+) ENGINE=HEAP MAX_ROWS=25000;
+CREATE TABLE /*_*/ipblocks (
+  ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default 0,
+  ipb_by int unsigned NOT NULL default 0,
+  ipb_by_text varchar(255) binary NOT NULL default '',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_enable_autoblock bool NOT NULL default '1',
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  ipb_deleted bool NOT NULL default 0,
+  ipb_block_email bool NOT NULL default 0,
+  ipb_allow_usertalk bool NOT NULL default 0,
+  ipb_parent_block_id int default NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
+CREATE TABLE /*_*/image (
+  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+  img_size int unsigned NOT NULL default 0,
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_metadata mediumblob NOT NULL,
+  img_bits int NOT NULL default 0,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varbinary(100) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL,
+  img_user int unsigned NOT NULL default 0,
+  img_user_text varchar(255) binary NOT NULL,
+  img_timestamp varbinary(14) NOT NULL default '',
+  img_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
+CREATE TABLE /*_*/oldimage (
+  oi_name varchar(255) binary NOT NULL default '',
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default 0,
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+  oi_metadata mediumblob NOT NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+  oi_deleted tinyint unsigned NOT NULL default 0,
+  oi_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
+CREATE TABLE /*_*/filearchive (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0,
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+CREATE TABLE /*_*/uploadstash (
+  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  us_user int unsigned NOT NULL,
+  us_key varchar(255) NOT NULL,
+  us_orig_path varchar(255) NOT NULL,
+  us_path varchar(255) NOT NULL,
+  us_source_type varchar(50),
+  us_timestamp varbinary(14) NOT NULL,
+  us_status varchar(50) NOT NULL,
+  us_chunk_inx int unsigned NULL,
+  us_props blob,
+  us_size int unsigned NOT NULL,
+  us_sha1 varchar(31) NOT NULL,
+  us_mime varchar(255),
+  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  us_image_width int unsigned,
+  us_image_height int unsigned,
+  us_image_bits smallint unsigned
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  rc_namespace int NOT NULL default 0,
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_source varchar(16) binary not null default '',
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE TABLE /*_*/watchlist (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int NOT NULL default 0,
+  wl_title varchar(255) binary NOT NULL default '',
+  wl_notificationtimestamp varbinary(14)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE TABLE /*_*/searchindex (
+  si_page int unsigned NOT NULL,
+  si_title varchar(255) NOT NULL default '',
+  si_text mediumtext NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
+CREATE TABLE /*_*/interwiki (
+  iw_prefix varchar(32) NOT NULL,
+  iw_url blob NOT NULL,
+  iw_api blob NOT NULL,
+  iw_wikiid varchar(64) NOT NULL,
+  iw_local bool NOT NULL,
+  iw_trans tinyint NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE TABLE /*_*/querycache (
+  qc_type varbinary(32) NOT NULL,
+  qc_value int unsigned NOT NULL default 0,
+  qc_namespace int NOT NULL default 0,
+  qc_title varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+CREATE TABLE /*_*/objectcache (
+  keyname varbinary(255) NOT NULL default '' PRIMARY KEY,
+  value mediumblob,
+  exptime datetime
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+CREATE TABLE /*_*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+CREATE TABLE /*_*/logging (
+  log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  log_type varbinary(32) NOT NULL default '',
+  log_action varbinary(32) NOT NULL default '',
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  log_user int unsigned NOT NULL default 0,
+  log_user_text varchar(255) binary NOT NULL default '',
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  log_page int unsigned NULL,
+  log_comment varchar(255) NOT NULL default '',
+  log_params blob NOT NULL,
+  log_deleted tinyint unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
+CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp);
+CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp);
+CREATE TABLE /*_*/log_search (
+  ls_field varbinary(32) NOT NULL,
+  ls_value varchar(255) NOT NULL,
+  ls_log_id int unsigned NOT NULL default 0
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
+CREATE TABLE /*_*/job (
+  job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  job_cmd varbinary(60) NOT NULL default '',
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+  job_timestamp varbinary(14) NULL default NULL,
+  job_params blob NOT NULL,
+  job_random integer unsigned NOT NULL default 0,
+  job_attempts integer unsigned NOT NULL default 0,
+  job_token varbinary(32) NOT NULL default '',
+  job_token_timestamp varbinary(14) NULL default NULL,
+  job_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
+CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
+CREATE TABLE /*_*/querycache_info (
+  qci_type varbinary(32) NOT NULL default '',
+  qci_timestamp binary(14) NOT NULL default '19700101000000'
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+CREATE TABLE /*_*/redirect (
+  rd_from int unsigned NOT NULL default 0 PRIMARY KEY,
+  rd_namespace int NOT NULL default 0,
+  rd_title varchar(255) binary NOT NULL default '',
+  rd_interwiki varchar(32) default NULL,
+  rd_fragment varchar(255) binary default NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE TABLE /*_*/querycachetwo (
+  qcc_type varbinary(32) NOT NULL,
+  qcc_value int unsigned NOT NULL default 0,
+  qcc_namespace int NOT NULL default 0,
+  qcc_title varchar(255) binary NOT NULL default '',
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo varchar(255) binary NOT NULL default ''
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE TABLE /*_*/page_restrictions (
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  pr_page int NOT NULL,
+  pr_type varbinary(60) NOT NULL,
+  pr_level varbinary(60) NOT NULL,
+  pr_cascade tinyint NOT NULL,
+  pr_user int NULL,
+  pr_expiry varbinary(14) NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE TABLE /*_*/protected_titles (
+  pt_namespace int NOT NULL,
+  pt_title varchar(255) binary NOT NULL,
+  pt_user int unsigned NOT NULL,
+  pt_reason tinyblob,
+  pt_timestamp binary(14) NOT NULL,
+  pt_expiry varbinary(14) NOT NULL default '',
+  pt_create_perm varbinary(60) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL,
+  pp_propname varbinary(60) NOT NULL,
+  pp_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
+CREATE TABLE /*_*/updatelog (
+  ul_key varchar(255) NOT NULL PRIMARY KEY,
+  ul_value blob
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/change_tag (
+  ct_rc_id int NULL,
+  ct_log_id int NULL,
+  ct_rev_id int NULL,
+  ct_tag varchar(255) NOT NULL,
+  ct_params blob NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+CREATE TABLE /*_*/tag_summary (
+  ts_rc_id int NULL,
+  ts_log_id int NULL,
+  ts_rev_id int NULL,
+  ts_tags blob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+CREATE TABLE /*_*/valid_tag (
+  vt_tag varchar(255) NOT NULL PRIMARY KEY
+) /*$wgDBTableOptions*/;
+CREATE TABLE /*_*/l10n_cache (
+  lc_lang varbinary(32) NOT NULL,
+  lc_key varchar(255) NOT NULL,
+  lc_value mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+CREATE TABLE /*_*/msg_resource (
+  mr_resource varbinary(255) NOT NULL,
+  mr_lang varbinary(32) NOT NULL,
+  mr_blob mediumblob NOT NULL,
+  mr_timestamp binary(14) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  mrl_message varbinary(255) NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+CREATE TABLE /*_*/module_deps (
+  md_module varbinary(255) NOT NULL,
+  md_skin varbinary(32) NOT NULL,
+  md_deps mediumblob NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
+CREATE TABLE /*_*/sites (
+  site_id                    INT UNSIGNED        NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  site_global_key            varbinary(32)       NOT NULL,
+  site_type                  varbinary(32)       NOT NULL,
+  site_group                 varbinary(32)       NOT NULL,
+  site_source                varbinary(32)       NOT NULL,
+  site_language              varbinary(32)       NOT NULL,
+  site_protocol              varbinary(32)       NOT NULL,
+  site_domain                VARCHAR(255)        NOT NULL,
+  site_data                  BLOB                NOT NULL,
+  site_forward              bool                NOT NULL,
+  site_config               BLOB                NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/sites_global_key ON /*_*/sites (site_global_key);
+CREATE INDEX /*i*/sites_type ON /*_*/sites (site_type);
+CREATE INDEX /*i*/sites_group ON /*_*/sites (site_group);
+CREATE INDEX /*i*/sites_source ON /*_*/sites (site_source);
+CREATE INDEX /*i*/sites_language ON /*_*/sites (site_language);
+CREATE INDEX /*i*/sites_protocol ON /*_*/sites (site_protocol);
+CREATE INDEX /*i*/sites_domain ON /*_*/sites (site_domain);
+CREATE INDEX /*i*/sites_forward ON /*_*/sites (site_forward);
+CREATE TABLE /*_*/site_identifiers (
+  si_site                    INT UNSIGNED        NOT NULL,
+  si_type                    varbinary(32)       NOT NULL,
+  si_key                     varbinary(32)       NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX /*i*/site_ids_type ON /*_*/site_identifiers (si_type, si_key);
+CREATE INDEX /*i*/site_ids_site ON /*_*/site_identifiers (si_site);
+CREATE INDEX /*i*/site_ids_key ON /*_*/site_identifiers (si_key);
index 9913f68..52f1912 100644 (file)
@@ -4,18 +4,18 @@ tests in includes/media directory.
 Image credits:
 
 QA_icon.svg:
-http://es.wikipedia.org/wiki/Archivo:QA_icon.svg
+https://es.wikipedia.org/wiki/Archivo:QA_icon.svg
 GNU Lesser General Public License
 ~~helix84 (16.4.2007), Philverney (6.12.2005) David Vignoni
 
 Gtk-media-play-ltr.svg
-http://commons.wikimedia.org/wiki/File:Gtk-media-play-ltr.svg
+https://commons.wikimedia.org/wiki/File:Gtk-media-play-ltr.svg
 GNU Lesser General Public License
-http://ftp.gnome.org/pub/GNOME/sources/gnome-themes-extras/0.9/gnome-themes-extras-0.9.0.tar.gz
+https://ftp.gnome.org/pub/GNOME/sources/gnome-themes-extras/0.9/gnome-themes-extras-0.9.0.tar.gz
 David Vignoni
 
 US_states_by_total_state_tax_revenue.svg
-http://commons.wikimedia.org/wiki/File:US_states_by_total_state_tax_revenue.svg
+https://commons.wikimedia.org/wiki/File:US_states_by_total_state_tax_revenue.svg
 CC BY 3.0
 TastyCakes on English Wikipedia
 
@@ -32,7 +32,7 @@ claim copyright, but on the off chance they do, feel free to use them
 however you feel fit, without restriction.
 
 Animated_PNG_example_bouncing_beach_ball.png
-http://commons.wikimedia.org/wiki/File:Animated_PNG_example_bouncing_beach_ball.png (originally http://www.treebuilder.de/default.asp?file=89031.xml )
+https://commons.wikimedia.org/wiki/File:Animated_PNG_example_bouncing_beach_ball.png (originally http://www.treebuilder.de/default.asp?file=89031.xml )
 Public Domain
 Holger Will
 
index 63d05a0..c422b51 100644 (file)
@@ -6,69 +6,62 @@
  */
 class BlockTest extends MediaWikiLangTestCase {
 
-       /** @var Block */
-       private $block;
-       private $madeAt;
-
-       /* variable used to save up the blockID we insert in this test suite */
-       private $blockId;
-
-       function addDBData() {
-               $user = User::newFromName( 'UTBlockee' );
-               if ( $user->getId() == 0 ) {
-                       $user->addToDatabase();
-                       TestUser::setPasswordForUser( $user, 'UTBlockeePassword' );
-
-                       $user->saveSettings();
-               }
+       /**
+        * @return User
+        */
+       private function getUserForBlocking() {
+               $testUser = $this->getMutableTestUser();
+               $user = $testUser->getUser();
+               $user->addToDatabase();
+               TestUser::setPasswordForUser( $user, 'UTBlockeePassword' );
+               $user->saveSettings();
+               return $user;
+       }
 
+       /**
+        * @param User $user
+        *
+        * @return Block
+        * @throws MWException
+        */
+       private function addBlockForUser( User $user ) {
                // Delete the last round's block if it's still there
-               $oldBlock = Block::newFromTarget( 'UTBlockee' );
+               $oldBlock = Block::newFromTarget( $user->getName() );
                if ( $oldBlock ) {
                        // An old block will prevent our new one from saving.
                        $oldBlock->delete();
                }
 
                $blockOptions = [
-                       'address' => 'UTBlockee',
+                       'address' => $user->getName(),
                        'user' => $user->getId(),
                        'reason' => 'Parce que',
                        'expiry' => time() + 100500,
                ];
-               $this->block = new Block( $blockOptions );
-               $this->madeAt = wfTimestamp( TS_MW );
+               $block = new Block( $blockOptions );
 
-               $this->block->insert();
+               $block->insert();
                // save up ID for use in assertion. Since ID is an autoincrement,
                // its value might change depending on the order the tests are run.
                // ApiBlockTest insert its own blocks!
-               $newBlockId = $this->block->getId();
-               if ( $newBlockId ) {
-                       $this->blockId = $newBlockId;
-               } else {
+               if ( !$block->getId() ) {
                        throw new MWException( "Failed to insert block for BlockTest; old leftover block remaining?" );
                }
 
                $this->addXffBlocks();
-       }
 
-       /**
-        * debug function : dump the ipblocks table
-        */
-       function dumpBlocks() {
-               $v = $this->db->select( 'ipblocks', '*' );
-               print "Got " . $v->numRows() . " rows. Full dump follow:\n";
-               foreach ( $v as $row ) {
-                       print_r( $row );
-               }
+               return $block;
        }
 
        /**
         * @covers Block::newFromTarget
         */
        public function testINewFromTargetReturnsCorrectBlock() {
+               $user = $this->getUserForBlocking();
+               $block = $this->addBlockForUser( $user );
+
                $this->assertTrue(
-                       $this->block->equals( Block::newFromTarget( 'UTBlockee' ) ),
+                       $block->equals( Block::newFromTarget( $user->getName() ) ),
                        "newFromTarget() returns the same block as the one that was made"
                );
        }
@@ -77,8 +70,11 @@ class BlockTest extends MediaWikiLangTestCase {
         * @covers Block::newFromID
         */
        public function testINewFromIDReturnsCorrectBlock() {
+               $user = $this->getUserForBlocking();
+               $block = $this->addBlockForUser( $user );
+
                $this->assertTrue(
-                       $this->block->equals( Block::newFromID( $this->blockId ) ),
+                       $block->equals( Block::newFromID( $block->getId() ) ),
                        "newFromID() returns the same block as the one that was made"
                );
        }
@@ -87,8 +83,12 @@ class BlockTest extends MediaWikiLangTestCase {
         * per T28425
         */
        public function testBug26425BlockTimestampDefaultsToTime() {
+               $user = $this->getUserForBlocking();
+               $block = $this->addBlockForUser( $user );
+               $madeAt = wfTimestamp( TS_MW );
+
                // delta to stop one-off errors when things happen to go over a second mark.
-               $delta = abs( $this->madeAt - $this->block->mTimestamp );
+               $delta = abs( $madeAt - $block->mTimestamp );
                $this->assertLessThan(
                        2,
                        $delta,
@@ -105,9 +105,12 @@ class BlockTest extends MediaWikiLangTestCase {
         * @covers Block::newFromTarget
         */
        public function testBug29116NewFromTargetWithEmptyIp( $vagueTarget ) {
-               $block = Block::newFromTarget( 'UTBlockee', $vagueTarget );
+               $user = $this->getUserForBlocking();
+               $initialBlock = $this->addBlockForUser( $user );
+               $block = Block::newFromTarget( $user->getName(), $vagueTarget );
+
                $this->assertTrue(
-                       $this->block->equals( $block ),
+                       $initialBlock->equals( $block ),
                        "newFromTarget() returns the same block as the one that was made when "
                                . "given empty vagueTarget param " . var_export( $vagueTarget, true )
                );
@@ -351,6 +354,9 @@ class BlockTest extends MediaWikiLangTestCase {
         * @covers Block::chooseBlock
         */
        public function testBlocksOnXff( $xff, $exCount, $exResult ) {
+               $user = $this->getUserForBlocking();
+               $this->addBlockForUser( $user );
+
                $list = array_map( 'trim', explode( ',', $xff ) );
                $xffblocks = Block::getBlocksForIPList( $list, true );
                $this->assertEquals( $exCount, count( $xffblocks ), 'Number of blocks for ' . $xff );
@@ -411,8 +417,11 @@ class BlockTest extends MediaWikiLangTestCase {
        }
 
        public function testSystemBlocks() {
+               $user = $this->getUserForBlocking();
+               $this->addBlockForUser( $user );
+
                $blockOptions = [
-                       'address' => 'UTBlockee',
+                       'address' => $user->getName(),
                        'reason' => 'test system block',
                        'timestamp' => wfTimestampNow(),
                        'expiry' => $this->db->getInfinity(),
@@ -438,4 +447,5 @@ class BlockTest extends MediaWikiLangTestCase {
                        $this->assertSame( 'Cannot autoblock from a system block', $ex->getMessage() );
                }
        }
+
 }
index b0f7678..9369f30 100644 (file)
@@ -618,7 +618,7 @@ class CommentStoreTest extends MediaWikiLangTestCase {
        public function testInsertTruncation() {
                $comment = str_repeat( '💣', 16400 );
                $truncated1 = str_repeat( '💣', 63 ) . '...';
-               $truncated2 = str_repeat( '💣', 16383 ) . '...';
+               $truncated2 = str_repeat( '💣', CommentStore::COMMENT_CHARACTER_LIMIT - 3 ) . '...';
 
                $store = $this->makeStore( MIGRATION_WRITE_BOTH, 'ipb_reason' );
                $fields = $store->insert( $this->db, $comment );
index 87acb52..6660516 100644 (file)
@@ -54,6 +54,8 @@ class HooksTest extends MediaWikiTestCase {
         */
        public function testOldStyleHooks( $msg, array $hook, $expectedFoo, $expectedBar ) {
                global $wgHooks;
+
+               $this->hideDeprecated( 'wfRunHooks' );
                $foo = $bar = 'original';
 
                $wgHooks['MediaWikiHooksTest001'][] = $hook;
index f6bc209..a5c4688 100644 (file)
@@ -6,6 +6,7 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\Services\DestructibleService;
 use MediaWiki\Services\SalvageableService;
 use MediaWiki\Services\ServiceDisabledException;
+use MediaWiki\Shell\CommandFactory;
 
 /**
  * @covers MediaWiki\MediaWikiServices
@@ -328,7 +329,8 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                        'MainObjectStash' => [ 'MainObjectStash', BagOStuff::class ],
                        'MainWANObjectCache' => [ 'MainWANObjectCache', WANObjectCache::class ],
                        'LocalServerObjectCache' => [ 'LocalServerObjectCache', BagOStuff::class ],
-                       'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ]
+                       'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ],
+                       'ShellCommandFactory' => [ 'ShellCommandFactory', CommandFactory::class ],
                ];
        }
 
index d29c79d..d5948ed 100644 (file)
@@ -640,6 +640,17 @@ class OutputPageTest extends MediaWikiTestCase {
                                'not all and (min-resolution: 2dppx),' .
                                '</img/two-x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)'
                        ],
+                       [
+                               [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               'svg' => '/img/vector.svg',
+                                       ],
+                               ],
+                               'Link: </img/vector.svg>;rel=preload;as=image'
+
+                       ],
                        [
                                [
                                        'ResourceBasePath' => '/w',
index d78c1e7..b25e046 100644 (file)
@@ -150,6 +150,13 @@ class PreferencesTest extends MediaWikiTestCase {
 
        /** Helper */
        protected function prefsFor( $user_key ) {
+               // TODO This should use Preferences::getPreferences() instead of calling internal methods.
+               // Unfortunately that currently ignores the $user parameter if it has cached data, even for
+               // a different user...
+               OutputPage::setupOOUI(
+                       strtolower( $this->context->getSkin()->getSkinName() ),
+                       $this->context->getLanguage()->getDir()
+               );
                $preferences = [];
                Preferences::profilePreferences(
                        $this->prefUsers[$user_key],
diff --git a/tests/phpunit/includes/RevisionContentHandlerDbTest.php b/tests/phpunit/includes/RevisionContentHandlerDbTest.php
new file mode 100644 (file)
index 0000000..fa0153d
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @group Database
+ * @group medium
+ * @group ContentHandler
+ */
+class RevisionContentHandlerDbTest extends RevisionDbTestBase {
+
+       protected function getContentHandlerUseDB() {
+               return true;
+       }
+
+}
diff --git a/tests/phpunit/includes/RevisionDbTestBase.php b/tests/phpunit/includes/RevisionDbTestBase.php
new file mode 100644 (file)
index 0000000..2fdf590
--- /dev/null
@@ -0,0 +1,1375 @@
+<?php
+
+/**
+ * RevisionDbTestBase contains test cases for the Revision class that have Database interactions.
+ *
+ * @group Database
+ * @group medium
+ */
+abstract class RevisionDbTestBase extends MediaWikiTestCase {
+
+       /**
+        * @var WikiPage $testPage
+        */
+       private $testPage;
+
+       public function __construct( $name = null, array $data = [], $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->tablesUsed = array_merge( $this->tablesUsed,
+                       [
+                               'page',
+                               'revision',
+                               'ip_changes',
+                               'text',
+                               'archive',
+
+                               'recentchanges',
+                               'logging',
+
+                               'page_props',
+                               'pagelinks',
+                               'categorylinks',
+                               'langlinks',
+                               'externallinks',
+                               'imagelinks',
+                               'templatelinks',
+                               'iwlinks'
+                       ]
+               );
+       }
+
+       protected function setUp() {
+               global $wgContLang;
+
+               parent::setUp();
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgExtraNamespaces',
+                       [
+                               12312 => 'Dummy',
+                               12313 => 'Dummy_talk',
+                       ]
+               );
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgNamespaceContentModels',
+                       [
+                               12312 => DummyContentForTesting::MODEL_ID,
+                       ]
+               );
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgContentHandlers',
+                       [
+                               DummyContentForTesting::MODEL_ID => 'DummyContentHandlerForTesting',
+                               RevisionTestModifyableContent::MODEL_ID => 'RevisionTestModifyableContentHandler',
+                       ]
+               );
+
+               $this->setMwGlobals( 'wgContentHandlerUseDB', $this->getContentHandlerUseDB() );
+
+               MWNamespace::clearCaches();
+               // Reset namespace cache
+               $wgContLang->resetNamespaces();
+               if ( !$this->testPage ) {
+                       /**
+                        * We have to create a new page for each subclass as the page creation may result
+                        * in different DB fields being filled based on configuration.
+                        */
+                       $this->testPage = $this->createPage( __CLASS__, __CLASS__ );
+               }
+       }
+
+       protected function tearDown() {
+               global $wgContLang;
+
+               parent::tearDown();
+
+               MWNamespace::clearCaches();
+               // Reset namespace cache
+               $wgContLang->resetNamespaces();
+       }
+
+       abstract protected function getContentHandlerUseDB();
+
+       private function makeRevisionWithProps( $props = null ) {
+               if ( $props === null ) {
+                       $props = [];
+               }
+
+               if ( !isset( $props['content'] ) && !isset( $props['text'] ) ) {
+                       $props['text'] = 'Lorem Ipsum';
+               }
+
+               if ( !isset( $props['comment'] ) ) {
+                       $props['comment'] = 'just a test';
+               }
+
+               if ( !isset( $props['page'] ) ) {
+                       $props['page'] = $this->testPage->getId();
+               }
+
+               $rev = new Revision( $props );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $rev->insertOn( $dbw );
+
+               return $rev;
+       }
+
+       /**
+        * @param string $titleString
+        * @param string $text
+        * @param string|null $model
+        *
+        * @return WikiPage
+        */
+       private function createPage( $titleString, $text, $model = null ) {
+               if ( !preg_match( '/:/', $titleString ) &&
+                       ( $model === null || $model === CONTENT_MODEL_WIKITEXT )
+               ) {
+                       $ns = $this->getDefaultWikitextNS();
+                       $titleString = MWNamespace::getCanonicalName( $ns ) . ':' . $titleString;
+               }
+
+               $title = Title::newFromText( $titleString );
+               $wikipage = new WikiPage( $title );
+
+               // Delete the article if it already exists
+               if ( $wikipage->exists() ) {
+                       $wikipage->doDeleteArticle( "done" );
+               }
+
+               $content = ContentHandler::makeContent( $text, $title, $model );
+               $wikipage->doEditContent( $content, __METHOD__, EDIT_NEW );
+
+               return $wikipage;
+       }
+
+       private function assertRevEquals( Revision $orig, Revision $rev = null ) {
+               $this->assertNotNull( $rev, 'missing revision' );
+
+               $this->assertEquals( $orig->getId(), $rev->getId() );
+               $this->assertEquals( $orig->getPage(), $rev->getPage() );
+               $this->assertEquals( $orig->getTimestamp(), $rev->getTimestamp() );
+               $this->assertEquals( $orig->getUser(), $rev->getUser() );
+               $this->assertEquals( $orig->getContentModel(), $rev->getContentModel() );
+               $this->assertEquals( $orig->getContentFormat(), $rev->getContentFormat() );
+               $this->assertEquals( $orig->getSha1(), $rev->getSha1() );
+       }
+
+       /**
+        * @covers Revision::getRecentChange
+        */
+       public function testGetRecentChange() {
+               $rev = $this->testPage->getRevision();
+               $recentChange = $rev->getRecentChange();
+
+               // Make sure various attributes look right / the correct entry has been retrieved.
+               $this->assertEquals( $rev->getTimestamp(), $recentChange->getAttribute( 'rc_timestamp' ) );
+               $this->assertEquals(
+                       $rev->getTitle()->getNamespace(),
+                       $recentChange->getAttribute( 'rc_namespace' )
+               );
+               $this->assertEquals(
+                       $rev->getTitle()->getDBkey(),
+                       $recentChange->getAttribute( 'rc_title' )
+               );
+               $this->assertEquals( $rev->getUser(), $recentChange->getAttribute( 'rc_user' ) );
+               $this->assertEquals( $rev->getUserText(), $recentChange->getAttribute( 'rc_user_text' ) );
+               $this->assertEquals( $rev->getComment(), $recentChange->getAttribute( 'rc_comment' ) );
+               $this->assertEquals( $rev->getPage(), $recentChange->getAttribute( 'rc_cur_id' ) );
+               $this->assertEquals( $rev->getId(), $recentChange->getAttribute( 'rc_this_oldid' ) );
+       }
+
+       /**
+        * @covers Revision::insertOn
+        */
+       public function testInsertOn_success() {
+               $parentId = $this->testPage->getLatest();
+
+               // If an ExternalStore is set don't use it.
+               $this->setMwGlobals( 'wgDefaultExternalStore', false );
+
+               $rev = new Revision( [
+                       'page' => $this->testPage->getId(),
+                       'title' => $this->testPage->getTitle(),
+                       'text' => 'Revision Text',
+                       'comment' => 'Revision comment',
+               ] );
+
+               $revId = $rev->insertOn( wfGetDB( DB_MASTER ) );
+
+               $this->assertInternalType( 'integer', $revId );
+               $this->assertInternalType( 'integer', $rev->getTextId() );
+               $this->assertSame( $revId, $rev->getId() );
+
+               $this->assertSelect(
+                       'text',
+                       [ 'old_id', 'old_text' ],
+                       "old_id = {$rev->getTextId()}",
+                       [ [ strval( $rev->getTextId() ), 'Revision Text' ] ]
+               );
+               $this->assertSelect(
+                       'revision',
+                       [
+                               'rev_id',
+                               'rev_page',
+                               'rev_text_id',
+                               'rev_user',
+                               'rev_minor_edit',
+                               'rev_deleted',
+                               'rev_len',
+                               'rev_parent_id',
+                               'rev_sha1',
+                       ],
+                       "rev_id = {$rev->getId()}",
+                       [ [
+                               strval( $rev->getId() ),
+                               strval( $this->testPage->getId() ),
+                               strval( $rev->getTextId() ),
+                               '0',
+                               '0',
+                               '0',
+                               '13',
+                               strval( $parentId ),
+                               's0ngbdoxagreuf2vjtuxzwdz64n29xm',
+                       ] ]
+               );
+       }
+
+       /**
+        * @covers Revision::insertOn
+        */
+       public function testInsertOn_exceptionOnNoPage() {
+               // If an ExternalStore is set don't use it.
+               $this->setMwGlobals( 'wgDefaultExternalStore', false );
+               $this->setExpectedException(
+                       MWException::class,
+                       "Cannot insert revision: page ID must be nonzero"
+               );
+
+               $rev = new Revision( [] );
+
+               $rev->insertOn( wfGetDB( DB_MASTER ) );
+       }
+
+       /**
+        * @covers Revision::newFromTitle
+        */
+       public function testNewFromTitle_withoutId() {
+               $latestRevId = $this->testPage->getLatest();
+
+               $rev = Revision::newFromTitle( $this->testPage->getTitle() );
+
+               $this->assertTrue( $this->testPage->getTitle()->equals( $rev->getTitle() ) );
+               $this->assertEquals( $latestRevId, $rev->getId() );
+       }
+
+       /**
+        * @covers Revision::newFromTitle
+        */
+       public function testNewFromTitle_withId() {
+               $latestRevId = $this->testPage->getLatest();
+
+               $rev = Revision::newFromTitle( $this->testPage->getTitle(), $latestRevId );
+
+               $this->assertTrue( $this->testPage->getTitle()->equals( $rev->getTitle() ) );
+               $this->assertEquals( $latestRevId, $rev->getId() );
+       }
+
+       /**
+        * @covers Revision::newFromTitle
+        */
+       public function testNewFromTitle_withBadId() {
+               $latestRevId = $this->testPage->getLatest();
+
+               $rev = Revision::newFromTitle( $this->testPage->getTitle(), $latestRevId + 1 );
+
+               $this->assertNull( $rev );
+       }
+
+       /**
+        * @covers Revision::newFromRow
+        */
+       public function testNewFromRow() {
+               $orig = $this->makeRevisionWithProps();
+
+               $dbr = wfGetDB( DB_REPLICA );
+               $revQuery = Revision::getQueryInfo();
+               $res = $dbr->select( $revQuery['tables'], $revQuery['fields'], [ 'rev_id' => $orig->getId() ],
+                  __METHOD__, [], $revQuery['joins'] );
+               $this->assertTrue( is_object( $res ), 'query failed' );
+
+               $row = $res->fetchObject();
+               $res->free();
+
+               $rev = Revision::newFromRow( $row );
+
+               $this->assertRevEquals( $orig, $rev );
+       }
+
+       public function provideNewFromArchiveRow() {
+               yield [
+                       function ( $f ) {
+                               return $f;
+                       },
+               ];
+               yield [
+                       function ( $f ) {
+                               return $f + [ 'ar_namespace', 'ar_title' ];
+                       },
+               ];
+               yield [
+                       function ( $f ) {
+                               unset( $f['ar_text_id'] );
+                               return $f;
+                       },
+               ];
+       }
+
+       /**
+        * @dataProvider provideNewFromArchiveRow
+        * @covers Revision::newFromArchiveRow
+        */
+       public function testNewFromArchiveRow( $selectModifier ) {
+               $page = $this->createPage(
+                       'RevisionStorageTest_testNewFromArchiveRow',
+                       'Lorem Ipsum',
+                       CONTENT_MODEL_WIKITEXT
+               );
+               $orig = $page->getRevision();
+               $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
+
+               $dbr = wfGetDB( DB_REPLICA );
+               $arQuery = Revision::getArchiveQueryInfo();
+               $arQuery['fields'] = $selectModifier( $arQuery['fields'] );
+               $res = $dbr->select(
+                       $arQuery['tables'], $arQuery['fields'], [ 'ar_rev_id' => $orig->getId() ],
+                       __METHOD__, [], $arQuery['joins']
+               );
+               $this->assertTrue( is_object( $res ), 'query failed' );
+
+               $row = $res->fetchObject();
+               $res->free();
+
+               $rev = Revision::newFromArchiveRow( $row );
+
+               $this->assertRevEquals( $orig, $rev );
+       }
+
+       /**
+        * @covers Revision::newFromArchiveRow
+        */
+       public function testNewFromArchiveRowOverrides() {
+               $page = $this->createPage(
+                       'RevisionStorageTest_testNewFromArchiveRow',
+                       'Lorem Ipsum',
+                       CONTENT_MODEL_WIKITEXT
+               );
+               $orig = $page->getRevision();
+               $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
+
+               $dbr = wfGetDB( DB_REPLICA );
+               $arQuery = Revision::getArchiveQueryInfo();
+               $res = $dbr->select(
+                       $arQuery['tables'], $arQuery['fields'], [ 'ar_rev_id' => $orig->getId() ],
+                       __METHOD__, [], $arQuery['joins']
+               );
+               $this->assertTrue( is_object( $res ), 'query failed' );
+
+               $row = $res->fetchObject();
+               $res->free();
+
+               $rev = Revision::newFromArchiveRow( $row, [ 'comment' => 'SOMEOVERRIDE' ] );
+
+               $this->assertNotEquals( $orig->getComment(), $rev->getComment() );
+               $this->assertEquals( 'SOMEOVERRIDE', $rev->getComment() );
+       }
+
+       /**
+        * @covers Revision::newFromId
+        */
+       public function testNewFromId() {
+               $orig = $this->testPage->getRevision();
+               $rev = Revision::newFromId( $orig->getId() );
+               $this->assertRevEquals( $orig, $rev );
+       }
+
+       /**
+        * @covers Revision::newFromPageId
+        */
+       public function testNewFromPageId() {
+               $rev = Revision::newFromPageId( $this->testPage->getId() );
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       $rev
+               );
+       }
+
+       /**
+        * @covers Revision::newFromPageId
+        */
+       public function testNewFromPageIdWithLatestId() {
+               $rev = Revision::newFromPageId(
+                       $this->testPage->getId(),
+                       $this->testPage->getLatest()
+               );
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       $rev
+               );
+       }
+
+       /**
+        * @covers Revision::newFromPageId
+        */
+       public function testNewFromPageIdWithNotLatestId() {
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $rev = Revision::newFromPageId(
+                       $this->testPage->getId(),
+                       $this->testPage->getRevision()->getPrevious()->getId()
+               );
+               $this->assertRevEquals(
+                       $this->testPage->getRevision()->getPrevious(),
+                       $rev
+               );
+       }
+
+       /**
+        * @covers Revision::fetchRevision
+        */
+       public function testFetchRevision() {
+               // Hidden process cache assertion below
+               $this->testPage->getRevision()->getId();
+
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $id = $this->testPage->getRevision()->getId();
+
+               $res = Revision::fetchRevision( $this->testPage->getTitle() );
+
+               # note: order is unspecified
+               $rows = [];
+               while ( ( $row = $res->fetchObject() ) ) {
+                       $rows[$row->rev_id] = $row;
+               }
+
+               $this->assertEquals( 1, count( $rows ), 'expected exactly one revision' );
+               $this->assertArrayHasKey( $id, $rows, 'missing revision with id ' . $id );
+       }
+
+       /**
+        * @covers Revision::getPage
+        */
+       public function testGetPage() {
+               $page = $this->testPage;
+
+               $orig = $this->makeRevisionWithProps( [ 'page' => $page->getId() ] );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               $this->assertEquals( $page->getId(), $rev->getPage() );
+       }
+
+       /**
+        * @covers Revision::isCurrent
+        */
+       public function testIsCurrent() {
+               $rev1 = $this->testPage->getRevision();
+
+               # @todo find out if this should be true
+               # $this->assertTrue( $rev1->isCurrent() );
+
+               $rev1x = Revision::newFromId( $rev1->getId() );
+               $this->assertTrue( $rev1x->isCurrent() );
+
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $rev2 = $this->testPage->getRevision();
+
+               # @todo find out if this should be true
+               # $this->assertTrue( $rev2->isCurrent() );
+
+               $rev1x = Revision::newFromId( $rev1->getId() );
+               $this->assertFalse( $rev1x->isCurrent() );
+
+               $rev2x = Revision::newFromId( $rev2->getId() );
+               $this->assertTrue( $rev2x->isCurrent() );
+       }
+
+       /**
+        * @covers Revision::getPrevious
+        */
+       public function testGetPrevious() {
+               $oldestRevision = $this->testPage->getOldestRevision();
+               $latestRevision = $this->testPage->getLatest();
+
+               $this->assertNull( $oldestRevision->getPrevious() );
+
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $newRevision = $this->testPage->getRevision();
+
+               $this->assertNotNull( $newRevision->getPrevious() );
+               $this->assertEquals( $latestRevision, $newRevision->getPrevious()->getId() );
+       }
+
+       /**
+        * @covers Revision::getNext
+        */
+       public function testGetNext() {
+               $rev1 = $this->testPage->getRevision();
+
+               $this->assertNull( $rev1->getNext() );
+
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $rev2 = $this->testPage->getRevision();
+
+               $this->assertNotNull( $rev1->getNext() );
+               $this->assertEquals( $rev2->getId(), $rev1->getNext()->getId() );
+       }
+
+       /**
+        * @covers Revision::newNullRevision
+        */
+       public function testNewNullRevision() {
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $orig = $this->testPage->getRevision();
+
+               $dbw = wfGetDB( DB_MASTER );
+               $rev = Revision::newNullRevision( $dbw, $this->testPage->getId(), 'a null revision', false );
+
+               $this->assertNotEquals( $orig->getId(), $rev->getId(),
+                       'new null revision should have a different id from the original revision' );
+               $this->assertEquals( $orig->getTextId(), $rev->getTextId(),
+                       'new null revision should have the same text id as the original revision' );
+               $this->assertEquals( __METHOD__, $rev->getContent()->getNativeData() );
+       }
+
+       /**
+        * @covers Revision::insertOn
+        */
+       public function testInsertOn() {
+               $ip = '2600:387:ed7:947e:8c16:a1ad:dd34:1dd7';
+
+               $orig = $this->makeRevisionWithProps( [
+                       'user_text' => $ip
+               ] );
+
+               // Make sure the revision was copied to ip_changes
+               $dbr = wfGetDB( DB_REPLICA );
+               $res = $dbr->select( 'ip_changes', '*', [ 'ipc_rev_id' => $orig->getId() ] );
+               $row = $res->fetchObject();
+
+               $this->assertEquals( IP::toHex( $ip ), $row->ipc_hex );
+               $this->assertEquals( $orig->getTimestamp(), $row->ipc_rev_timestamp );
+       }
+
+       public static function provideUserWasLastToEdit() {
+               yield 'actually the last edit' => [ 3, true ];
+               yield 'not the current edit, but still by this user' => [ 2, true ];
+               yield 'edit by another user' => [ 1, false ];
+               yield 'first edit, by this user, but another user edited in the mean time' => [ 0, false ];
+       }
+
+       /**
+        * @dataProvider provideUserWasLastToEdit
+        */
+       public function testUserWasLastToEdit( $sinceIdx, $expectedLast ) {
+               $userA = User::newFromName( "RevisionStorageTest_userA" );
+               $userB = User::newFromName( "RevisionStorageTest_userB" );
+
+               if ( $userA->getId() === 0 ) {
+                       $userA = User::createNew( $userA->getName() );
+               }
+
+               if ( $userB->getId() === 0 ) {
+                       $userB = User::createNew( $userB->getName() );
+               }
+
+               $ns = $this->getDefaultWikitextNS();
+
+               $dbw = wfGetDB( DB_MASTER );
+               $revisions = [];
+
+               // create revisions -----------------------------
+               $page = WikiPage::factory( Title::newFromText(
+                       'RevisionStorageTest_testUserWasLastToEdit', $ns ) );
+               $page->insertOn( $dbw );
+
+               $revisions[0] = new Revision( [
+                       'page' => $page->getId(),
+                       // we need the title to determine the page's default content model
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000000',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit zero'
+               ] );
+               $revisions[0]->insertOn( $dbw );
+
+               $revisions[1] = new Revision( [
+                       'page' => $page->getId(),
+                       // still need the title, because $page->getId() is 0 (there's no entry in the page table)
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000100',
+                       'user' => $userA->getId(),
+                       'text' => 'one',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit one'
+               ] );
+               $revisions[1]->insertOn( $dbw );
+
+               $revisions[2] = new Revision( [
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userB->getId(),
+                       'text' => 'two',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit two'
+               ] );
+               $revisions[2]->insertOn( $dbw );
+
+               $revisions[3] = new Revision( [
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000300',
+                       'user' => $userA->getId(),
+                       'text' => 'three',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit three'
+               ] );
+               $revisions[3]->insertOn( $dbw );
+
+               $revisions[4] = new Revision( [
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit four'
+               ] );
+               $revisions[4]->insertOn( $dbw );
+
+               // test it ---------------------------------
+               $since = $revisions[$sinceIdx]->getTimestamp();
+
+               $wasLast = Revision::userWasLastToEdit( $dbw, $page->getId(), $userA->getId(), $since );
+
+               $this->assertEquals( $expectedLast, $wasLast );
+       }
+
+       /**
+        * @param string $text
+        * @param string $title
+        * @param string $model
+        * @param string $format
+        *
+        * @return Revision
+        */
+       private function newTestRevision( $text, $title = "Test",
+               $model = CONTENT_MODEL_WIKITEXT, $format = null
+       ) {
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
+
+               $content = ContentHandler::makeContent( $text, $title, $model, $format );
+
+               $rev = new Revision(
+                       [
+                               'id' => 42,
+                               'page' => 23,
+                               'title' => $title,
+
+                               'content' => $content,
+                               'length' => $content->getSize(),
+                               'comment' => "testing",
+                               'minor_edit' => false,
+
+                               'content_format' => $format,
+                       ]
+               );
+
+               return $rev;
+       }
+
+       public function provideGetContentModel() {
+               // NOTE: we expect the help namespace to always contain wikitext
+               return [
+                       [ 'hello world', 'Help:Hello', null, null, CONTENT_MODEL_WIKITEXT ],
+                       [ 'hello world', 'User:hello/there.css', null, null, CONTENT_MODEL_CSS ],
+                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, DummyContentForTesting::MODEL_ID ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetContentModel
+        * @covers Revision::getContentModel
+        */
+       public function testGetContentModel( $text, $title, $model, $format, $expectedModel ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedModel, $rev->getContentModel() );
+       }
+
+       public function provideGetContentFormat() {
+               // NOTE: we expect the help namespace to always contain wikitext
+               return [
+                       [ 'hello world', 'Help:Hello', null, null, CONTENT_FORMAT_WIKITEXT ],
+                       [ 'hello world', 'Help:Hello', CONTENT_MODEL_CSS, null, CONTENT_FORMAT_CSS ],
+                       [ 'hello world', 'User:hello/there.css', null, null, CONTENT_FORMAT_CSS ],
+                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, DummyContentForTesting::MODEL_ID ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetContentFormat
+        * @covers Revision::getContentFormat
+        */
+       public function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedFormat, $rev->getContentFormat() );
+       }
+
+       public function provideGetContentHandler() {
+               // NOTE: we expect the help namespace to always contain wikitext
+               return [
+                       [ 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ],
+                       [ 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ],
+                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetContentHandler
+        * @covers Revision::getContentHandler
+        */
+       public function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) );
+       }
+
+       public function provideGetContent() {
+               // NOTE: we expect the help namespace to always contain wikitext
+               return [
+                       [ 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ],
+                       [
+                               serialize( 'hello world' ),
+                               'Hello',
+                               DummyContentForTesting::MODEL_ID,
+                               null,
+                               Revision::FOR_PUBLIC,
+                               serialize( 'hello world' )
+                       ],
+                       [
+                               serialize( 'hello world' ),
+                               'Dummy:Hello',
+                               null,
+                               null,
+                               Revision::FOR_PUBLIC,
+                               serialize( 'hello world' )
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetContent
+        * @covers Revision::getContent
+        */
+       public function testGetContent( $text, $title, $model, $format,
+               $audience, $expectedSerialization
+       ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+               $content = $rev->getContent( $audience );
+
+               $this->assertEquals(
+                       $expectedSerialization,
+                       is_null( $content ) ? null : $content->serialize( $format )
+               );
+       }
+
+       /**
+        * @covers Revision::getContent
+        */
+       public function testGetContent_failure() {
+               $rev = new Revision( [
+                       'page' => $this->testPage->getId(),
+                       'content_model' => $this->testPage->getContentModel(),
+                       'text_id' => 123456789, // not in the test DB
+               ] );
+
+               $this->assertNull( $rev->getContent(),
+                       "getContent() should return null if the revision's text blob could not be loaded." );
+
+               // NOTE: check this twice, once for lazy initialization, and once with the cached value.
+               $this->assertNull( $rev->getContent(),
+                       "getContent() should return null if the revision's text blob could not be loaded." );
+       }
+
+       public function provideGetSize() {
+               return [
+                       [ "hello world.", CONTENT_MODEL_WIKITEXT, 12 ],
+                       [ serialize( "hello world." ), DummyContentForTesting::MODEL_ID, 12 ],
+               ];
+       }
+
+       /**
+        * @covers Revision::getSize
+        * @dataProvider provideGetSize
+        */
+       public function testGetSize( $text, $model, $expected_size ) {
+               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model );
+               $this->assertEquals( $expected_size, $rev->getSize() );
+       }
+
+       public function provideGetSha1() {
+               return [
+                       [ "hello world.", CONTENT_MODEL_WIKITEXT, Revision::base36Sha1( "hello world." ) ],
+                       [
+                               serialize( "hello world." ),
+                               DummyContentForTesting::MODEL_ID,
+                               Revision::base36Sha1( serialize( "hello world." ) )
+                       ],
+               ];
+       }
+
+       /**
+        * @covers Revision::getSha1
+        * @dataProvider provideGetSha1
+        */
+       public function testGetSha1( $text, $model, $expected_hash ) {
+               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model );
+               $this->assertEquals( $expected_hash, $rev->getSha1() );
+       }
+
+       /**
+        * Tests whether $rev->getContent() returns a clone when needed.
+        *
+        * @covers Revision::getContent
+        */
+       public function testGetContentClone() {
+               $content = new RevisionTestModifyableContent( "foo" );
+
+               $rev = new Revision(
+                       [
+                               'id' => 42,
+                               'page' => 23,
+                               'title' => Title::newFromText( "testGetContentClone_dummy" ),
+
+                               'content' => $content,
+                               'length' => $content->getSize(),
+                               'comment' => "testing",
+                               'minor_edit' => false,
+                       ]
+               );
+
+               /** @var RevisionTestModifyableContent $content */
+               $content = $rev->getContent( Revision::RAW );
+               $content->setText( "bar" );
+
+               /** @var RevisionTestModifyableContent $content2 */
+               $content2 = $rev->getContent( Revision::RAW );
+               // content is mutable, expect clone
+               $this->assertNotSame( $content, $content2, "expected a clone" );
+               // clone should contain the original text
+               $this->assertEquals( "foo", $content2->getText() );
+
+               $content2->setText( "bla bla" );
+               // clones should be independent
+               $this->assertEquals( "bar", $content->getText() );
+       }
+
+       /**
+        * Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
+        * @covers Revision::getContent
+        */
+       public function testGetContentUncloned() {
+               $rev = $this->newTestRevision( "hello", "testGetContentUncloned_dummy", CONTENT_MODEL_WIKITEXT );
+               $content = $rev->getContent( Revision::RAW );
+               $content2 = $rev->getContent( Revision::RAW );
+
+               // for immutable content like wikitext, this should be the same object
+               $this->assertSame( $content, $content2 );
+       }
+
+       /**
+        * @covers Revision::loadFromId
+        */
+       public function testLoadFromId() {
+               $rev = $this->testPage->getRevision();
+               $this->assertRevEquals(
+                       $rev,
+                       Revision::loadFromId( wfGetDB( DB_MASTER ), $rev->getId() )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromPageId
+        */
+       public function testLoadFromPageId() {
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       Revision::loadFromPageId( wfGetDB( DB_MASTER ), $this->testPage->getId() )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromPageId
+        */
+       public function testLoadFromPageIdWithLatestRevId() {
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       Revision::loadFromPageId(
+                               wfGetDB( DB_MASTER ),
+                               $this->testPage->getId(),
+                               $this->testPage->getLatest()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromPageId
+        */
+       public function testLoadFromPageIdWithNotLatestRevId() {
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $this->assertRevEquals(
+                       $this->testPage->getRevision()->getPrevious(),
+                       Revision::loadFromPageId(
+                               wfGetDB( DB_MASTER ),
+                               $this->testPage->getId(),
+                               $this->testPage->getRevision()->getPrevious()->getId()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromTitle
+        */
+       public function testLoadFromTitle() {
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       Revision::loadFromTitle( wfGetDB( DB_MASTER ), $this->testPage->getTitle() )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromTitle
+        */
+       public function testLoadFromTitleWithLatestRevId() {
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       Revision::loadFromTitle(
+                               wfGetDB( DB_MASTER ),
+                               $this->testPage->getTitle(),
+                               $this->testPage->getLatest()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromTitle
+        */
+       public function testLoadFromTitleWithNotLatestRevId() {
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $this->assertRevEquals(
+                       $this->testPage->getRevision()->getPrevious(),
+                       Revision::loadFromTitle(
+                               wfGetDB( DB_MASTER ),
+                               $this->testPage->getTitle(),
+                               $this->testPage->getRevision()->getPrevious()->getId()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::loadFromTimestamp()
+        */
+       public function testLoadFromTimestamp() {
+               $this->assertRevEquals(
+                       $this->testPage->getRevision(),
+                       Revision::loadFromTimestamp(
+                               wfGetDB( DB_MASTER ),
+                               $this->testPage->getTitle(),
+                               $this->testPage->getRevision()->getTimestamp()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getParentLengths
+        */
+       public function testGetParentLengths_noRevIds() {
+               $this->assertSame(
+                       [],
+                       Revision::getParentLengths(
+                               wfGetDB( DB_MASTER ),
+                               []
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getParentLengths
+        */
+       public function testGetParentLengths_oneRevId() {
+               $text = '831jr091jr0921kr21kr0921kjr0921j09rj1';
+               $textLength = strlen( $text );
+
+               $this->testPage->doEditContent( new WikitextContent( $text ), __METHOD__ );
+               $rev[1] = $this->testPage->getLatest();
+
+               $this->assertSame(
+                       [ $rev[1] => strval( $textLength ) ],
+                       Revision::getParentLengths(
+                               wfGetDB( DB_MASTER ),
+                               [ $rev[1] ]
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getParentLengths
+        */
+       public function testGetParentLengths_multipleRevIds() {
+               $textOne = '831jr091jr0921kr21kr0921kjr0921j09rj1';
+               $textOneLength = strlen( $textOne );
+               $textTwo = '831jr091jr092121j09rj1';
+               $textTwoLength = strlen( $textTwo );
+
+               $this->testPage->doEditContent( new WikitextContent( $textOne ), __METHOD__ );
+               $rev[1] = $this->testPage->getLatest();
+               $this->testPage->doEditContent( new WikitextContent( $textTwo ), __METHOD__ );
+               $rev[2] = $this->testPage->getLatest();
+
+               $this->assertSame(
+                       [ $rev[1] => strval( $textOneLength ), $rev[2] => strval( $textTwoLength ) ],
+                       Revision::getParentLengths(
+                               wfGetDB( DB_MASTER ),
+                               [ $rev[1], $rev[2] ]
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getTitle
+        */
+       public function testGetTitle_fromExistingRevision() {
+               $this->assertTrue(
+                       $this->testPage->getTitle()->equals(
+                               $this->testPage->getRevision()->getTitle()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getTitle
+        */
+       public function testGetTitle_fromRevisionWhichWillLoadTheTitle() {
+               $rev = new Revision( [ 'id' => $this->testPage->getLatest() ] );
+               $this->assertTrue(
+                       $this->testPage->getTitle()->equals(
+                               $rev->getTitle()
+                       )
+               );
+       }
+
+       /**
+        * @covers Revision::getTitle
+        */
+       public function testGetTitle_forBadRevision() {
+               $rev = new Revision( [] );
+               $this->assertNull( $rev->getTitle() );
+       }
+
+       /**
+        * @covers Revision::isMinor
+        */
+       public function testIsMinor_true() {
+               // Use a sysop to ensure we can mark edits as minor
+               $sysop = $this->getTestSysop()->getUser();
+
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       __METHOD__,
+                       EDIT_MINOR,
+                       false,
+                       $sysop
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( true, $rev->isMinor() );
+       }
+
+       /**
+        * @covers Revision::isMinor
+        */
+       public function testIsMinor_false() {
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       __METHOD__,
+                       0
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( false, $rev->isMinor() );
+       }
+
+       /**
+        * @covers Revision::getTimestamp
+        */
+       public function testGetTimestamp() {
+               $testTimestamp = wfTimestampNow();
+
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       __METHOD__
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertInternalType( 'string', $rev->getTimestamp() );
+               $this->assertTrue( strlen( $rev->getTimestamp() ) == strlen( 'YYYYMMDDHHMMSS' ) );
+               $this->assertContains( substr( $testTimestamp, 0, 10 ), $rev->getTimestamp() );
+       }
+
+       /**
+        * @covers Revision::getUser
+        * @covers Revision::getUserText
+        */
+       public function testGetUserAndText() {
+               $sysop = $this->getTestSysop()->getUser();
+
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       __METHOD__,
+                       0,
+                       false,
+                       $sysop
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( $sysop->getId(), $rev->getUser() );
+               $this->assertSame( $sysop->getName(), $rev->getUserText() );
+       }
+
+       /**
+        * @covers Revision::isDeleted
+        */
+       public function testIsDeleted_nothingDeleted() {
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( false, $rev->isDeleted( Revision::DELETED_TEXT ) );
+               $this->assertSame( false, $rev->isDeleted( Revision::DELETED_COMMENT ) );
+               $this->assertSame( false, $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
+               $this->assertSame( false, $rev->isDeleted( Revision::DELETED_USER ) );
+       }
+
+       /**
+        * @covers Revision::getVisibility
+        */
+       public function testGetVisibility_nothingDeleted() {
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( 0, $rev->getVisibility() );
+       }
+
+       /**
+        * @covers Revision::getComment
+        */
+       public function testGetComment_notDeleted() {
+               $expectedSummary = 'goatlicious summary';
+
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       $expectedSummary
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( $expectedSummary, $rev->getComment() );
+       }
+
+       /**
+        * @covers Revision::isUnpatrolled
+        */
+       public function testIsUnpatrolled_returnsRecentChangesId() {
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertGreaterThan( 0, $rev->isUnpatrolled() );
+               $this->assertSame( $rev->getRecentChange()->getAttribute( 'rc_id' ), $rev->isUnpatrolled() );
+       }
+
+       /**
+        * @covers Revision::isUnpatrolled
+        */
+       public function testIsUnpatrolled_returnsZeroIfPatrolled() {
+               // This assumes that sysops are auto patrolled
+               $sysop = $this->getTestSysop()->getUser();
+               $this->testPage->doEditContent(
+                       new WikitextContent( __METHOD__ ),
+                       __METHOD__,
+                       0,
+                       false,
+                       $sysop
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( 0, $rev->isUnpatrolled() );
+       }
+
+       /**
+        * This is a simple blanket test for all simple content getters and is methods to provide some
+        * coverage before the split of Revision into multiple classes for MCR work.
+        * @covers Revision::getContent
+        * @covers Revision::getSerializedData
+        * @covers Revision::getContentModel
+        * @covers Revision::getContentFormat
+        * @covers Revision::getContentHandler
+        */
+       public function testSimpleContentGetters() {
+               $expectedText = 'testSimpleContentGetters in Revision. Goats love MCR...';
+               $expectedSummary = 'goatlicious testSimpleContentGetters summary';
+
+               $this->testPage->doEditContent(
+                       new WikitextContent( $expectedText ),
+                       $expectedSummary
+               );
+               $rev = $this->testPage->getRevision();
+
+               $this->assertSame( $expectedText, $rev->getContent()->getNativeData() );
+               $this->assertSame( $expectedText, $rev->getSerializedData() );
+               $this->assertSame( $this->testPage->getContentModel(), $rev->getContentModel() );
+               $this->assertSame( $this->testPage->getContent()->getDefaultFormat(), $rev->getContentFormat() );
+               $this->assertSame( $this->testPage->getContentHandler(), $rev->getContentHandler() );
+       }
+
+       /**
+        * @covers Revision::newKnownCurrent
+        */
+       public function testNewKnownCurrent() {
+               // Setup the services
+               $cache = new WANObjectCache( [ 'cache' => new HashBagOStuff() ] );
+               $this->setService( 'MainWANObjectCache', $cache );
+               $db = wfGetDB( DB_MASTER );
+
+               // Get a fresh revision to use during testing
+               $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+               $rev = $this->testPage->getRevision();
+
+               // Clear any previous cache for the revision during creation
+               $key = $cache->makeGlobalKey( 'revision', $db->getDomainID(), $rev->getPage(), $rev->getId() );
+               $cache->delete( $key, WANObjectCache::HOLDOFF_NONE );
+               $this->assertFalse( $cache->get( $key ) );
+
+               // Get the new revision and make sure it is in the cache and correct
+               $newRev = Revision::newKnownCurrent( $db, $rev->getPage(), $rev->getId() );
+               $this->assertRevEquals( $rev, $newRev );
+               $this->assertRevEquals( $rev, $cache->get( $key ) );
+       }
+
+       public function provideUserCanBitfield() {
+               yield [ 0, 0, [], null, true ];
+               // Bitfields match, user has no permissions
+               yield [ Revision::DELETED_TEXT, Revision::DELETED_TEXT, [], null, false ];
+               yield [ Revision::DELETED_COMMENT, Revision::DELETED_COMMENT, [], null, false ];
+               yield [ Revision::DELETED_USER, Revision::DELETED_USER, [], null, false ];
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [], null, false ];
+               // Bitfields match, user (admin) does have permissions
+               yield [ Revision::DELETED_TEXT, Revision::DELETED_TEXT, [ 'sysop' ], null, true ];
+               yield [ Revision::DELETED_COMMENT, Revision::DELETED_COMMENT, [ 'sysop' ], null, true ];
+               yield [ Revision::DELETED_USER, Revision::DELETED_USER, [ 'sysop' ], null, true ];
+               // Bitfields match, user (admin) does not have permissions
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [ 'sysop' ], null, false ];
+               // Bitfields match, user (oversight) does have permissions
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [ 'oversight' ], null, true ];
+               // Check permissions using the title
+               yield [
+                       Revision::DELETED_TEXT,
+                       Revision::DELETED_TEXT,
+                       [ 'sysop' ],
+                       Title::newFromText( __METHOD__ ),
+                       true,
+               ];
+               yield [
+                       Revision::DELETED_TEXT,
+                       Revision::DELETED_TEXT,
+                       [],
+                       Title::newFromText( __METHOD__ ),
+                       false,
+               ];
+       }
+
+       /**
+        * @dataProvider provideUserCanBitfield
+        * @covers Revision::userCanBitfield
+        */
+       public function testUserCanBitfield( $bitField, $field, $userGroups, $title, $expected ) {
+               $this->setMwGlobals(
+                       'wgGroupPermissions',
+                       [
+                               'sysop' => [
+                                       'deletedtext' => true,
+                                       'deletedhistory' => true,
+                               ],
+                               'oversight' => [
+                                       'viewsuppressed' => true,
+                                       'suppressrevision' => true,
+                               ],
+                       ]
+               );
+               $user = $this->getTestUser( $userGroups )->getUser();
+
+               $this->assertSame(
+                       $expected,
+                       Revision::userCanBitfield( $bitField, $field, $user, $title )
+               );
+       }
+
+       public function provideUserCan() {
+               yield [ 0, 0, [], true ];
+               // Bitfields match, user has no permissions
+               yield [ Revision::DELETED_TEXT, Revision::DELETED_TEXT, [], false ];
+               yield [ Revision::DELETED_COMMENT, Revision::DELETED_COMMENT, [], false ];
+               yield [ Revision::DELETED_USER, Revision::DELETED_USER, [], false ];
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [], false ];
+               // Bitfields match, user (admin) does have permissions
+               yield [ Revision::DELETED_TEXT, Revision::DELETED_TEXT, [ 'sysop' ], true ];
+               yield [ Revision::DELETED_COMMENT, Revision::DELETED_COMMENT, [ 'sysop' ], true ];
+               yield [ Revision::DELETED_USER, Revision::DELETED_USER, [ 'sysop' ], true ];
+               // Bitfields match, user (admin) does not have permissions
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [ 'sysop' ], false ];
+               // Bitfields match, user (oversight) does have permissions
+               yield [ Revision::DELETED_RESTRICTED, Revision::DELETED_RESTRICTED, [ 'oversight' ], true ];
+       }
+
+       /**
+        * @dataProvider provideUserCan
+        * @covers Revision::userCan
+        */
+       public function testUserCan( $bitField, $field, $userGroups, $expected ) {
+               $this->setMwGlobals(
+                       'wgGroupPermissions',
+                       [
+                               'sysop' => [
+                                       'deletedtext' => true,
+                                       'deletedhistory' => true,
+                               ],
+                               'oversight' => [
+                                       'viewsuppressed' => true,
+                                       'suppressrevision' => true,
+                               ],
+                       ]
+               );
+               $user = $this->getTestUser( $userGroups )->getUser();
+               $revision = new Revision( [ 'deleted' => $bitField ] );
+
+               $this->assertSame(
+                       $expected,
+                       $revision->userCan( $field, $user )
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/RevisionNoContentHandlerDbTest.php b/tests/phpunit/includes/RevisionNoContentHandlerDbTest.php
new file mode 100644 (file)
index 0000000..c980a48
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @group Database
+ * @group medium
+ * @group ContentHandler
+ */
+class RevisionNoContentHandlerDbTest extends RevisionDbTestBase {
+
+       protected function getContentHandlerUseDB() {
+               return false;
+       }
+
+}
diff --git a/tests/phpunit/includes/RevisionStorageTest.php b/tests/phpunit/includes/RevisionStorageTest.php
deleted file mode 100644 (file)
index 8ed85fe..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-<?php
-
-/**
- * Test class for Revision storage.
- *
- * @group ContentHandler
- * @group Database
- * ^--- important, causes temporary tables to be used instead of the real database
- *
- * @group medium
- * ^--- important, causes tests not to fail with timeout
- */
-class RevisionStorageTest extends MediaWikiTestCase {
-       /**
-        * @var WikiPage $the_page
-        */
-       private $the_page;
-
-       function __construct( $name = null, array $data = [], $dataName = '' ) {
-               parent::__construct( $name, $data, $dataName );
-
-               $this->tablesUsed = array_merge( $this->tablesUsed,
-                       [ 'page',
-                               'revision',
-                               'ip_changes',
-                               'text',
-
-                               'recentchanges',
-                               'logging',
-
-                               'page_props',
-                               'pagelinks',
-                               'categorylinks',
-                               'langlinks',
-                               'externallinks',
-                               'imagelinks',
-                               'templatelinks',
-                               'iwlinks' ] );
-       }
-
-       protected function setUp() {
-               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
-
-               parent::setUp();
-
-               $wgExtraNamespaces[12312] = 'Dummy';
-               $wgExtraNamespaces[12313] = 'Dummy_talk';
-
-               $wgNamespaceContentModels[12312] = 'DUMMY';
-               $wgContentHandlers['DUMMY'] = 'DummyContentHandlerForTesting';
-
-               MWNamespace::clearCaches();
-               $wgContLang->resetNamespaces(); # reset namespace cache
-               if ( !$this->the_page ) {
-                       $this->the_page = $this->createPage(
-                               'RevisionStorageTest_the_page',
-                               "just a dummy page",
-                               CONTENT_MODEL_WIKITEXT
-                       );
-               }
-
-               $this->tablesUsed[] = 'archive';
-       }
-
-       protected function tearDown() {
-               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
-
-               parent::tearDown();
-
-               unset( $wgExtraNamespaces[12312] );
-               unset( $wgExtraNamespaces[12313] );
-
-               unset( $wgNamespaceContentModels[12312] );
-               unset( $wgContentHandlers['DUMMY'] );
-
-               MWNamespace::clearCaches();
-               $wgContLang->resetNamespaces(); # reset namespace cache
-       }
-
-       protected function makeRevision( $props = null ) {
-               if ( $props === null ) {
-                       $props = [];
-               }
-
-               if ( !isset( $props['content'] ) && !isset( $props['text'] ) ) {
-                       $props['text'] = 'Lorem Ipsum';
-               }
-
-               if ( !isset( $props['comment'] ) ) {
-                       $props['comment'] = 'just a test';
-               }
-
-               if ( !isset( $props['page'] ) ) {
-                       $props['page'] = $this->the_page->getId();
-               }
-
-               $rev = new Revision( $props );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $rev->insertOn( $dbw );
-
-               return $rev;
-       }
-
-       protected function createPage( $page, $text, $model = null ) {
-               if ( is_string( $page ) ) {
-                       if ( !preg_match( '/:/', $page ) &&
-                               ( $model === null || $model === CONTENT_MODEL_WIKITEXT )
-                       ) {
-                               $ns = $this->getDefaultWikitextNS();
-                               $page = MWNamespace::getCanonicalName( $ns ) . ':' . $page;
-                       }
-
-                       $page = Title::newFromText( $page );
-               }
-
-               if ( $page instanceof Title ) {
-                       $page = new WikiPage( $page );
-               }
-
-               if ( $page->exists() ) {
-                       $page->doDeleteArticle( "done" );
-               }
-
-               $content = ContentHandler::makeContent( $text, $page->getTitle(), $model );
-               $page->doEditContent( $content, "testing", EDIT_NEW );
-
-               return $page;
-       }
-
-       protected function assertRevEquals( Revision $orig, Revision $rev = null ) {
-               $this->assertNotNull( $rev, 'missing revision' );
-
-               $this->assertEquals( $orig->getId(), $rev->getId() );
-               $this->assertEquals( $orig->getPage(), $rev->getPage() );
-               $this->assertEquals( $orig->getTimestamp(), $rev->getTimestamp() );
-               $this->assertEquals( $orig->getUser(), $rev->getUser() );
-               $this->assertEquals( $orig->getContentModel(), $rev->getContentModel() );
-               $this->assertEquals( $orig->getContentFormat(), $rev->getContentFormat() );
-               $this->assertEquals( $orig->getSha1(), $rev->getSha1() );
-       }
-
-       /**
-        * @covers Revision::__construct
-        */
-       public function testConstructFromRow() {
-               $orig = $this->makeRevision();
-
-               $dbr = wfGetDB( DB_REPLICA );
-               $res = $dbr->select( 'revision', Revision::selectFields(), [ 'rev_id' => $orig->getId() ] );
-               $this->assertTrue( is_object( $res ), 'query failed' );
-
-               $row = $res->fetchObject();
-               $res->free();
-
-               $rev = new Revision( $row );
-
-               $this->assertRevEquals( $orig, $rev );
-       }
-
-       /**
-        * @covers Revision::newFromRow
-        */
-       public function testNewFromRow() {
-               $orig = $this->makeRevision();
-
-               $dbr = wfGetDB( DB_REPLICA );
-               $res = $dbr->select( 'revision', Revision::selectFields(), [ 'rev_id' => $orig->getId() ] );
-               $this->assertTrue( is_object( $res ), 'query failed' );
-
-               $row = $res->fetchObject();
-               $res->free();
-
-               $rev = Revision::newFromRow( $row );
-
-               $this->assertRevEquals( $orig, $rev );
-       }
-
-       /**
-        * @covers Revision::newFromArchiveRow
-        */
-       public function testNewFromArchiveRow() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testNewFromArchiveRow',
-                       'Lorem Ipsum',
-                       CONTENT_MODEL_WIKITEXT
-               );
-               $orig = $page->getRevision();
-               $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
-
-               $dbr = wfGetDB( DB_REPLICA );
-               $res = $dbr->select(
-                       'archive', Revision::selectArchiveFields(), [ 'ar_rev_id' => $orig->getId() ]
-               );
-               $this->assertTrue( is_object( $res ), 'query failed' );
-
-               $row = $res->fetchObject();
-               $res->free();
-
-               $rev = Revision::newFromArchiveRow( $row );
-
-               $this->assertRevEquals( $orig, $rev );
-       }
-
-       /**
-        * @covers Revision::newFromId
-        */
-       public function testNewFromId() {
-               $orig = $this->makeRevision();
-
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertRevEquals( $orig, $rev );
-       }
-
-       /**
-        * @covers Revision::fetchRevision
-        */
-       public function testFetchRevision() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testFetchRevision',
-                       'one',
-                       CONTENT_MODEL_WIKITEXT
-               );
-
-               // Hidden process cache assertion below
-               $page->getRevision()->getId();
-
-               $page->doEditContent( new WikitextContent( 'two' ), 'second rev' );
-               $id = $page->getRevision()->getId();
-
-               $res = Revision::fetchRevision( $page->getTitle() );
-
-               # note: order is unspecified
-               $rows = [];
-               while ( ( $row = $res->fetchObject() ) ) {
-                       $rows[$row->rev_id] = $row;
-               }
-
-               $this->assertEquals( 1, count( $rows ), 'expected exactly one revision' );
-               $this->assertArrayHasKey( $id, $rows, 'missing revision with id ' . $id );
-       }
-
-       /**
-        * @covers Revision::selectFields
-        */
-       public function testSelectFields() {
-               global $wgContentHandlerUseDB;
-
-               $fields = Revision::selectFields();
-
-               $this->assertTrue( in_array( 'rev_id', $fields ), 'missing rev_id in list of fields' );
-               $this->assertTrue( in_array( 'rev_page', $fields ), 'missing rev_page in list of fields' );
-               $this->assertTrue(
-                       in_array( 'rev_timestamp', $fields ),
-                       'missing rev_timestamp in list of fields'
-               );
-               $this->assertTrue( in_array( 'rev_user', $fields ), 'missing rev_user in list of fields' );
-
-               if ( $wgContentHandlerUseDB ) {
-                       $this->assertTrue( in_array( 'rev_content_model', $fields ),
-                               'missing rev_content_model in list of fields' );
-                       $this->assertTrue( in_array( 'rev_content_format', $fields ),
-                               'missing rev_content_format in list of fields' );
-               }
-       }
-
-       /**
-        * @covers Revision::getPage
-        */
-       public function testGetPage() {
-               $page = $this->the_page;
-
-               $orig = $this->makeRevision( [ 'page' => $page->getId() ] );
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertEquals( $page->getId(), $rev->getPage() );
-       }
-
-       /**
-        * @covers Revision::getContent
-        */
-       public function testGetContent_failure() {
-               $rev = new Revision( [
-                       'page' => $this->the_page->getId(),
-                       'content_model' => $this->the_page->getContentModel(),
-                       'text_id' => 123456789, // not in the test DB
-               ] );
-
-               $this->assertNull( $rev->getContent(),
-                       "getContent() should return null if the revision's text blob could not be loaded." );
-
-               // NOTE: check this twice, once for lazy initialization, and once with the cached value.
-               $this->assertNull( $rev->getContent(),
-                       "getContent() should return null if the revision's text blob could not be loaded." );
-       }
-
-       /**
-        * @covers Revision::getContent
-        */
-       public function testGetContent() {
-               $orig = $this->makeRevision( [ 'text' => 'hello hello.' ] );
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertEquals( 'hello hello.', $rev->getContent()->getNativeData() );
-       }
-
-       /**
-        * @covers Revision::getContentModel
-        */
-       public function testGetContentModel() {
-               global $wgContentHandlerUseDB;
-
-               if ( !$wgContentHandlerUseDB ) {
-                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
-               }
-
-               $orig = $this->makeRevision( [ 'text' => 'hello hello.',
-                       'content_model' => CONTENT_MODEL_JAVASCRIPT ] );
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
-       }
-
-       /**
-        * @covers Revision::getContentFormat
-        */
-       public function testGetContentFormat() {
-               global $wgContentHandlerUseDB;
-
-               if ( !$wgContentHandlerUseDB ) {
-                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
-               }
-
-               $orig = $this->makeRevision( [
-                       'text' => 'hello hello.',
-                       'content_model' => CONTENT_MODEL_JAVASCRIPT,
-                       'content_format' => CONTENT_FORMAT_JAVASCRIPT
-               ] );
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertEquals( CONTENT_FORMAT_JAVASCRIPT, $rev->getContentFormat() );
-       }
-
-       /**
-        * @covers Revision::isCurrent
-        */
-       public function testIsCurrent() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testIsCurrent',
-                       'Lorem Ipsum',
-                       CONTENT_MODEL_WIKITEXT
-               );
-               $rev1 = $page->getRevision();
-
-               # @todo find out if this should be true
-               # $this->assertTrue( $rev1->isCurrent() );
-
-               $rev1x = Revision::newFromId( $rev1->getId() );
-               $this->assertTrue( $rev1x->isCurrent() );
-
-               $page->doEditContent(
-                       ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
-                       'second rev'
-               );
-               $rev2 = $page->getRevision();
-
-               # @todo find out if this should be true
-               # $this->assertTrue( $rev2->isCurrent() );
-
-               $rev1x = Revision::newFromId( $rev1->getId() );
-               $this->assertFalse( $rev1x->isCurrent() );
-
-               $rev2x = Revision::newFromId( $rev2->getId() );
-               $this->assertTrue( $rev2x->isCurrent() );
-       }
-
-       /**
-        * @covers Revision::getPrevious
-        */
-       public function testGetPrevious() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testGetPrevious',
-                       'Lorem Ipsum testGetPrevious',
-                       CONTENT_MODEL_WIKITEXT
-               );
-               $rev1 = $page->getRevision();
-
-               $this->assertNull( $rev1->getPrevious() );
-
-               $page->doEditContent(
-                       ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
-                       'second rev testGetPrevious' );
-               $rev2 = $page->getRevision();
-
-               $this->assertNotNull( $rev2->getPrevious() );
-               $this->assertEquals( $rev1->getId(), $rev2->getPrevious()->getId() );
-       }
-
-       /**
-        * @covers Revision::getNext
-        */
-       public function testGetNext() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testGetNext',
-                       'Lorem Ipsum testGetNext',
-                       CONTENT_MODEL_WIKITEXT
-               );
-               $rev1 = $page->getRevision();
-
-               $this->assertNull( $rev1->getNext() );
-
-               $page->doEditContent(
-                       ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
-                       'second rev testGetNext'
-               );
-               $rev2 = $page->getRevision();
-
-               $this->assertNotNull( $rev1->getNext() );
-               $this->assertEquals( $rev2->getId(), $rev1->getNext()->getId() );
-       }
-
-       /**
-        * @covers Revision::newNullRevision
-        */
-       public function testNewNullRevision() {
-               $page = $this->createPage(
-                       'RevisionStorageTest_testNewNullRevision',
-                       'some testing text',
-                       CONTENT_MODEL_WIKITEXT
-               );
-               $orig = $page->getRevision();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $rev = Revision::newNullRevision( $dbw, $page->getId(), 'a null revision', false );
-
-               $this->assertNotEquals( $orig->getId(), $rev->getId(),
-                       'new null revision shold have a different id from the original revision' );
-               $this->assertEquals( $orig->getTextId(), $rev->getTextId(),
-                       'new null revision shold have the same text id as the original revision' );
-               $this->assertEquals( 'some testing text', $rev->getContent()->getNativeData() );
-       }
-
-       /**
-        * @covers Revision::insertOn
-        */
-       public function testInsertOn() {
-               $ip = '2600:387:ed7:947e:8c16:a1ad:dd34:1dd7';
-
-               $orig = $this->makeRevision( [
-                       'user_text' => $ip
-               ] );
-
-               // Make sure the revision was copied to ip_changes
-               $dbr = wfGetDB( DB_REPLICA );
-               $res = $dbr->select( 'ip_changes', '*', [ 'ipc_rev_id' => $orig->getId() ] );
-               $row = $res->fetchObject();
-
-               $this->assertEquals( IP::toHex( $ip ), $row->ipc_hex );
-               $this->assertEquals( $orig->getTimestamp(), $row->ipc_rev_timestamp );
-       }
-
-       public static function provideUserWasLastToEdit() {
-               return [
-                       [ # 0
-                               3, true, # actually the last edit
-                       ],
-                       [ # 1
-                               2, true, # not the current edit, but still by this user
-                       ],
-                       [ # 2
-                               1, false, # edit by another user
-                       ],
-                       [ # 3
-                               0, false, # first edit, by this user, but another user edited in the mean time
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideUserWasLastToEdit
-        */
-       public function testUserWasLastToEdit( $sinceIdx, $expectedLast ) {
-               $userA = User::newFromName( "RevisionStorageTest_userA" );
-               $userB = User::newFromName( "RevisionStorageTest_userB" );
-
-               if ( $userA->getId() === 0 ) {
-                       $userA = User::createNew( $userA->getName() );
-               }
-
-               if ( $userB->getId() === 0 ) {
-                       $userB = User::createNew( $userB->getName() );
-               }
-
-               $ns = $this->getDefaultWikitextNS();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $revisions = [];
-
-               // create revisions -----------------------------
-               $page = WikiPage::factory( Title::newFromText(
-                       'RevisionStorageTest_testUserWasLastToEdit', $ns ) );
-               $page->insertOn( $dbw );
-
-               # zero
-               $revisions[0] = new Revision( [
-                       'page' => $page->getId(),
-                       // we need the title to determine the page's default content model
-                       'title' => $page->getTitle(),
-                       'timestamp' => '20120101000000',
-                       'user' => $userA->getId(),
-                       'text' => 'zero',
-                       'content_model' => CONTENT_MODEL_WIKITEXT,
-                       'summary' => 'edit zero'
-               ] );
-               $revisions[0]->insertOn( $dbw );
-
-               # one
-               $revisions[1] = new Revision( [
-                       'page' => $page->getId(),
-                       // still need the title, because $page->getId() is 0 (there's no entry in the page table)
-                       'title' => $page->getTitle(),
-                       'timestamp' => '20120101000100',
-                       'user' => $userA->getId(),
-                       'text' => 'one',
-                       'content_model' => CONTENT_MODEL_WIKITEXT,
-                       'summary' => 'edit one'
-               ] );
-               $revisions[1]->insertOn( $dbw );
-
-               # two
-               $revisions[2] = new Revision( [
-                       'page' => $page->getId(),
-                       'title' => $page->getTitle(),
-                       'timestamp' => '20120101000200',
-                       'user' => $userB->getId(),
-                       'text' => 'two',
-                       'content_model' => CONTENT_MODEL_WIKITEXT,
-                       'summary' => 'edit two'
-               ] );
-               $revisions[2]->insertOn( $dbw );
-
-               # three
-               $revisions[3] = new Revision( [
-                       'page' => $page->getId(),
-                       'title' => $page->getTitle(),
-                       'timestamp' => '20120101000300',
-                       'user' => $userA->getId(),
-                       'text' => 'three',
-                       'content_model' => CONTENT_MODEL_WIKITEXT,
-                       'summary' => 'edit three'
-               ] );
-               $revisions[3]->insertOn( $dbw );
-
-               # four
-               $revisions[4] = new Revision( [
-                       'page' => $page->getId(),
-                       'title' => $page->getTitle(),
-                       'timestamp' => '20120101000200',
-                       'user' => $userA->getId(),
-                       'text' => 'zero',
-                       'content_model' => CONTENT_MODEL_WIKITEXT,
-                       'summary' => 'edit four'
-               ] );
-               $revisions[4]->insertOn( $dbw );
-
-               // test it ---------------------------------
-               $since = $revisions[$sinceIdx]->getTimestamp();
-
-               $wasLast = Revision::userWasLastToEdit( $dbw, $page->getId(), $userA->getId(), $since );
-
-               $this->assertEquals( $expectedLast, $wasLast );
-       }
-}
diff --git a/tests/phpunit/includes/RevisionStorageTestContentHandlerUseDB.php b/tests/phpunit/includes/RevisionStorageTestContentHandlerUseDB.php
deleted file mode 100644 (file)
index 9e667f2..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/**
- * @group ContentHandler
- * @group Database
- * ^--- important, causes temporary tables to be used instead of the real database
- */
-class RevisionTestContentHandlerUseDB extends RevisionStorageTest {
-
-       protected function setUp() {
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               $page_table = $dbw->tableName( 'page' );
-               $revision_table = $dbw->tableName( 'revision' );
-               $archive_table = $dbw->tableName( 'archive' );
-
-               if ( $dbw->fieldExists( $page_table, 'page_content_model' ) ) {
-                       $dbw->query( "alter table $page_table drop column page_content_model" );
-                       $dbw->query( "alter table $revision_table drop column rev_content_model" );
-                       $dbw->query( "alter table $revision_table drop column rev_content_format" );
-                       $dbw->query( "alter table $archive_table drop column ar_content_model" );
-                       $dbw->query( "alter table $archive_table drop column ar_content_format" );
-               }
-
-               parent::setUp();
-       }
-
-       /**
-        * @covers Revision::selectFields
-        */
-       public function testSelectFields() {
-               $fields = Revision::selectFields();
-
-               $this->assertTrue( in_array( 'rev_id', $fields ), 'missing rev_id in list of fields' );
-               $this->assertTrue( in_array( 'rev_page', $fields ), 'missing rev_page in list of fields' );
-               $this->assertTrue(
-                       in_array( 'rev_timestamp', $fields ),
-                       'missing rev_timestamp in list of fields'
-               );
-               $this->assertTrue( in_array( 'rev_user', $fields ), 'missing rev_user in list of fields' );
-
-               $this->assertFalse(
-                       in_array( 'rev_content_model', $fields ),
-                       'missing rev_content_model in list of fields'
-               );
-               $this->assertFalse(
-                       in_array( 'rev_content_format', $fields ),
-                       'missing rev_content_format in list of fields'
-               );
-       }
-
-       /**
-        * @covers Revision::getContentModel
-        */
-       public function testGetContentModel() {
-               try {
-                       $this->makeRevision( [ 'text' => 'hello hello.',
-                               'content_model' => CONTENT_MODEL_JAVASCRIPT ] );
-
-                       $this->fail( "Creating JavaScript content on a wikitext page should fail with "
-                               . "\$wgContentHandlerUseDB disabled" );
-               } catch ( MWException $ex ) {
-                       $this->assertTrue( true ); // ok
-               }
-       }
-
-       /**
-        * @covers Revision::getContentFormat
-        */
-       public function testGetContentFormat() {
-               try {
-                       // @todo change this to test failure on using a non-standard (but supported) format
-                       //       for a content model supported in the given location. As of 1.21, there are
-                       //       no alternative formats for any of the standard content models that could be
-                       //       used for this though.
-
-                       $this->makeRevision( [ 'text' => 'hello hello.',
-                               'content_model' => CONTENT_MODEL_JAVASCRIPT,
-                               'content_format' => 'text/javascript' ] );
-
-                       $this->fail( "Creating JavaScript content on a wikitext page should fail with "
-                               . "\$wgContentHandlerUseDB disabled" );
-               } catch ( MWException $ex ) {
-                       $this->assertTrue( true ); // ok
-               }
-       }
-}
index 386f219..b7e410c 100644 (file)
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
- * @group ContentHandler
+ * Test cases in RevisionTest should not interact with the Database.
+ * For test cases that need Database interaction see RevisionDbTestBase.
  */
 class RevisionTest extends MediaWikiTestCase {
-       protected function setUp() {
-               global $wgContLang;
-
-               parent::setUp();
 
-               $this->setMwGlobals( [
-                       'wgContLang' => Language::factory( 'en' ),
-                       'wgLanguageCode' => 'en',
-                       'wgLegacyEncoding' => false,
-                       'wgCompressRevisions' => false,
+       public function provideConstructFromArray() {
+               yield 'with text' => [
+                       [
+                               'text' => 'hello world.',
+                               'content_model' => CONTENT_MODEL_JAVASCRIPT
+                       ],
+               ];
+               yield 'with content' => [
+                       [
+                               'content' => new JavaScriptContent( 'hellow world.' )
+                       ],
+               ];
+       }
 
-                       'wgContentHandlerTextFallback' => 'ignore',
-               ] );
+       /**
+        * @dataProvider provideConstructFromArray
+        * @covers Revision::__construct
+        * @covers Revision::constructFromRowArray
+        */
+       public function testConstructFromArray( array $rowArray ) {
+               $rev = new Revision( $rowArray );
+               $this->assertNotNull( $rev->getContent(), 'no content object available' );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       }
 
-               $this->mergeMwGlobalArrayValue(
-                       'wgExtraNamespaces',
+       public function provideConstructFromArrayThrowsExceptions() {
+               yield 'content and text_id both not empty' => [
                        [
-                               12312 => 'Dummy',
-                               12313 => 'Dummy_talk',
-                       ]
+                               'content' => new WikitextContent( 'GOAT' ),
+                               'text_id' => 'someid',
+                               ],
+                       new MWException( "Text already stored in external store (id someid), " .
+                               "can't serialize content object" )
+               ];
+               yield 'with bad content object (class)' => [
+                       [ 'content' => new stdClass() ],
+                       new MWException( '`content` field must contain a Content object.' )
+               ];
+               yield 'with bad content object (string)' => [
+                       [ 'content' => 'ImAGoat' ],
+                       new MWException( '`content` field must contain a Content object.' )
+               ];
+               yield 'bad row format' => [
+                       'imastring, not a row',
+                       new MWException( 'Revision constructor passed invalid row format.' )
+               ];
+       }
+
+       /**
+        * @dataProvider provideConstructFromArrayThrowsExceptions
+        * @covers Revision::__construct
+        * @covers Revision::constructFromRowArray
+        */
+       public function testConstructFromArrayThrowsExceptions( $rowArray, Exception $expectedException ) {
+               $this->setExpectedException(
+                       get_class( $expectedException ),
+                       $expectedException->getMessage(),
+                       $expectedException->getCode()
                );
+               new Revision( $rowArray );
+       }
 
-               $this->mergeMwGlobalArrayValue(
-                       'wgNamespaceContentModels',
+       public function provideConstructFromRow() {
+               yield 'Full construction' => [
                        [
-                               12312 => 'testing',
-                       ]
-               );
+                               'rev_id' => '2',
+                               'rev_page' => '1',
+                               'rev_text_id' => '2',
+                               'rev_timestamp' => '20171017114835',
+                               'rev_user_text' => '127.0.0.1',
+                               'rev_user' => '0',
+                               'rev_minor_edit' => '0',
+                               'rev_deleted' => '0',
+                               'rev_len' => '46',
+                               'rev_parent_id' => '1',
+                               'rev_sha1' => 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z',
+                               'rev_comment_text' => 'Goat Comment!',
+                               'rev_comment_data' => null,
+                               'rev_comment_cid' => null,
+                               'rev_content_format' => 'GOATFORMAT',
+                               'rev_content_model' => 'GOATMODEL',
+                       ],
+                       function ( RevisionTest $testCase, Revision $rev ) {
+                               $testCase->assertSame( 2, $rev->getId() );
+                               $testCase->assertSame( 1, $rev->getPage() );
+                               $testCase->assertSame( 2, $rev->getTextId() );
+                               $testCase->assertSame( '20171017114835', $rev->getTimestamp() );
+                               $testCase->assertSame( '127.0.0.1', $rev->getUserText() );
+                               $testCase->assertSame( 0, $rev->getUser() );
+                               $testCase->assertSame( false, $rev->isMinor() );
+                               $testCase->assertSame( false, $rev->isDeleted( Revision::DELETED_TEXT ) );
+                               $testCase->assertSame( 46, $rev->getSize() );
+                               $testCase->assertSame( 1, $rev->getParentId() );
+                               $testCase->assertSame( 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z', $rev->getSha1() );
+                               $testCase->assertSame( 'Goat Comment!', $rev->getComment() );
+                               $testCase->assertSame( 'GOATFORMAT', $rev->getContentFormat() );
+                               $testCase->assertSame( 'GOATMODEL', $rev->getContentModel() );
+                       }
+               ];
+               yield 'null fields' => [
+                       [
+                               'rev_id' => '2',
+                               'rev_page' => '1',
+                               'rev_text_id' => '2',
+                               'rev_timestamp' => '20171017114835',
+                               'rev_user_text' => '127.0.0.1',
+                               'rev_user' => '0',
+                               'rev_minor_edit' => '0',
+                               'rev_deleted' => '0',
+                               'rev_comment_text' => 'Goat Comment!',
+                               'rev_comment_data' => null,
+                               'rev_comment_cid' => null,
+                       ],
+                       function ( RevisionTest $testCase, Revision $rev ) {
+                               $testCase->assertNull( $rev->getSize() );
+                               $testCase->assertNull( $rev->getParentId() );
+                               $testCase->assertNull( $rev->getSha1() );
+                               $testCase->assertSame( 'text/x-wiki', $rev->getContentFormat() );
+                               $testCase->assertSame( 'wikitext', $rev->getContentModel() );
+                       }
+               ];
+       }
+
+       /**
+        * @dataProvider provideConstructFromRow
+        * @covers Revision::__construct
+        * @covers Revision::constructFromDbRowObject
+        */
+       public function testConstructFromRow( array $arrayData, $assertions ) {
+               $row = (object)$arrayData;
+               $rev = new Revision( $row );
+               $assertions( $this, $rev );
+       }
 
-               $this->mergeMwGlobalArrayValue(
-                       'wgContentHandlers',
+       public function provideGetRevisionText() {
+               yield 'Generic test' => [
+                       'This is a goat of revision text.',
                        [
-                               'testing' => 'DummyContentHandlerForTesting',
-                               'RevisionTestModifyableContent' => 'RevisionTestModifyableContentHandler',
-                       ]
-               );
+                               'old_flags' => '',
+                               'old_text' => 'This is a goat of revision text.',
+                       ],
+               ];
+       }
 
-               MWNamespace::clearCaches();
-               $wgContLang->resetNamespaces(); # reset namespace cache
+       public function provideGetId() {
+               yield [
+                       [],
+                       null
+               ];
+               yield [
+                       [ 'id' => 998 ],
+                       998
+               ];
        }
 
-       function tearDown() {
-               global $wgContLang;
+       /**
+        * @dataProvider provideGetId
+        * @covers Revision::getId
+        */
+       public function testGetId( $rowArray, $expectedId ) {
+               $rev = new Revision( $rowArray );
+               $this->assertEquals( $expectedId, $rev->getId() );
+       }
 
-               MWNamespace::clearCaches();
-               $wgContLang->resetNamespaces(); # reset namespace cache
+       public function provideSetId() {
+               yield [ '123', 123 ];
+               yield [ 456, 456 ];
+       }
 
-               parent::tearDown();
+       /**
+        * @dataProvider provideSetId
+        * @covers Revision::setId
+        */
+       public function testSetId( $input, $expected ) {
+               $rev = new Revision( [] );
+               $rev->setId( $input );
+               $this->assertSame( $expected, $rev->getId() );
+       }
+
+       public function provideSetUserIdAndName() {
+               yield [ '123', 123, 'GOaT' ];
+               yield [ 456, 456, 'GOaT' ];
        }
 
        /**
-        * @covers Revision::getRevisionText
+        * @dataProvider provideSetUserIdAndName
+        * @covers Revision::setUserIdAndName
         */
-       public function testGetRevisionText() {
-               $row = new stdClass;
-               $row->old_flags = '';
-               $row->old_text = 'This is a bunch of revision text.';
-               $this->assertEquals(
-                       'This is a bunch of revision text.',
-                       Revision::getRevisionText( $row ) );
+       public function testSetUserIdAndName( $inputId, $expectedId, $name ) {
+               $rev = new Revision( [] );
+               $rev->setUserIdAndName( $inputId, $name );
+               $this->assertSame( $expectedId, $rev->getUser( Revision::RAW ) );
+               $this->assertEquals( $name, $rev->getUserText( Revision::RAW ) );
+       }
+
+       public function provideGetTextId() {
+               yield [ [], null ];
+               yield [ [ 'text_id' => '123' ], 123 ];
+               yield [ [ 'text_id' => 456 ], 456 ];
        }
 
        /**
-        * @covers Revision::getRevisionText
+        * @dataProvider provideGetTextId
+        * @covers Revision::getTextId()
         */
-       public function testGetRevisionTextGzip() {
-               $this->checkPHPExtension( 'zlib' );
+       public function testGetTextId( $rowArray, $expected ) {
+               $rev = new Revision( $rowArray );
+               $this->assertSame( $expected, $rev->getTextId() );
+       }
 
-               $row = new stdClass;
-               $row->old_flags = 'gzip';
-               $row->old_text = gzdeflate( 'This is a bunch of revision text.' );
-               $this->assertEquals(
-                       'This is a bunch of revision text.',
-                       Revision::getRevisionText( $row ) );
+       public function provideGetParentId() {
+               yield [ [], null ];
+               yield [ [ 'parent_id' => '123' ], 123 ];
+               yield [ [ 'parent_id' => 456 ], 456 ];
        }
 
        /**
-        * @covers Revision::getRevisionText
+        * @dataProvider provideGetParentId
+        * @covers Revision::getParentId()
         */
-       public function testGetRevisionTextUtf8Native() {
-               $row = new stdClass;
-               $row->old_flags = 'utf-8';
-               $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
-               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
-               $this->assertEquals(
-                       "Wiki est l'\xc3\xa9cole superieur !",
-                       Revision::getRevisionText( $row ) );
+       public function testGetParentId( $rowArray, $expected ) {
+               $rev = new Revision( $rowArray );
+               $this->assertSame( $expected, $rev->getParentId() );
        }
 
        /**
         * @covers Revision::getRevisionText
+        * @dataProvider provideGetRevisionText
         */
-       public function testGetRevisionTextUtf8Legacy() {
-               $row = new stdClass;
-               $row->old_flags = '';
-               $row->old_text = "Wiki est l'\xe9cole superieur !";
-               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+       public function testGetRevisionText( $expected, $rowData, $prefix = 'old_', $wiki = false ) {
                $this->assertEquals(
-                       "Wiki est l'\xc3\xa9cole superieur !",
-                       Revision::getRevisionText( $row ) );
+                       $expected,
+                       Revision::getRevisionText( (object)$rowData, $prefix, $wiki ) );
+       }
+
+       public function provideGetRevisionTextWithZlibExtension() {
+               yield 'Generic gzip test' => [
+                       'This is a small goat of revision text.',
+                       [
+                               'old_flags' => 'gzip',
+                               'old_text' => gzdeflate( 'This is a small goat of revision text.' ),
+                       ],
+               ];
        }
 
        /**
         * @covers Revision::getRevisionText
+        * @dataProvider provideGetRevisionTextWithZlibExtension
         */
-       public function testGetRevisionTextUtf8NativeGzip() {
+       public function testGetRevisionWithZlibExtension( $expected, $rowData ) {
                $this->checkPHPExtension( 'zlib' );
+               $this->testGetRevisionText( $expected, $rowData );
+       }
 
-               $row = new stdClass;
-               $row->old_flags = 'gzip,utf-8';
-               $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" );
-               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
-               $this->assertEquals(
+       public function provideGetRevisionTextWithLegacyEncoding() {
+               yield 'Utf8Native' => [
                        "Wiki est l'\xc3\xa9cole superieur !",
-                       Revision::getRevisionText( $row ) );
+                       'iso-8859-1',
+                       [
+                               'old_flags' => 'utf-8',
+                               'old_text' => "Wiki est l'\xc3\xa9cole superieur !",
+                       ]
+               ];
+               yield 'Utf8Legacy' => [
+                       "Wiki est l'\xc3\xa9cole superieur !",
+                       'iso-8859-1',
+                       [
+                               'old_flags' => '',
+                               'old_text' => "Wiki est l'\xe9cole superieur !",
+                       ]
+               ];
        }
 
        /**
         * @covers Revision::getRevisionText
+        * @dataProvider provideGetRevisionTextWithLegacyEncoding
         */
-       public function testGetRevisionTextUtf8LegacyGzip() {
-               $this->checkPHPExtension( 'zlib' );
-
-               $row = new stdClass;
-               $row->old_flags = 'gzip';
-               $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" );
-               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
-               $this->assertEquals(
+       public function testGetRevisionWithLegacyEncoding( $expected, $encoding, $rowData ) {
+               $this->setMwGlobals( 'wgLegacyEncoding', $encoding );
+               $this->testGetRevisionText( $expected, $rowData );
+       }
+
+       public function provideGetRevisionTextWithGzipAndLegacyEncoding() {
+               /**
+                * WARNING!
+                * Do not set the external flag!
+                * Otherwise, getRevisionText will hit the live database (if ExternalStore is enabled)!
+                */
+               yield 'Utf8NativeGzip' => [
                        "Wiki est l'\xc3\xa9cole superieur !",
-                       Revision::getRevisionText( $row ) );
+                       'iso-8859-1',
+                       [
+                               'old_flags' => 'gzip,utf-8',
+                               'old_text' => gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" ),
+                       ]
+               ];
+               yield 'Utf8LegacyGzip' => [
+                       "Wiki est l'\xc3\xa9cole superieur !",
+                       'iso-8859-1',
+                       [
+                               'old_flags' => 'gzip',
+                               'old_text' => gzdeflate( "Wiki est l'\xe9cole superieur !" ),
+                       ]
+               ];
+       }
+
+       /**
+        * @covers Revision::getRevisionText
+        * @dataProvider provideGetRevisionTextWithGzipAndLegacyEncoding
+        */
+       public function testGetRevisionWithGzipAndLegacyEncoding( $expected, $encoding, $rowData ) {
+               $this->checkPHPExtension( 'zlib' );
+               $this->setMwGlobals( 'wgLegacyEncoding', $encoding );
+               $this->testGetRevisionText( $expected, $rowData );
        }
 
        /**
@@ -173,293 +362,219 @@ class RevisionTest extends MediaWikiTestCase {
                        Revision::getRevisionText( $row ), "getRevisionText" );
        }
 
-       # =========================================================================
-
-       /**
-        * @param string $text
-        * @param string $title
-        * @param string $model
-        * @param string $format
-        *
-        * @return Revision
-        */
-       function newTestRevision( $text, $title = "Test",
-               $model = CONTENT_MODEL_WIKITEXT, $format = null
-       ) {
-               if ( is_string( $title ) ) {
-                       $title = Title::newFromText( $title );
-               }
-
-               $content = ContentHandler::makeContent( $text, $title, $model, $format );
-
-               $rev = new Revision(
-                       [
-                               'id' => 42,
-                               'page' => 23,
-                               'title' => $title,
-
-                               'content' => $content,
-                               'length' => $content->getSize(),
-                               'comment' => "testing",
-                               'minor_edit' => false,
-
-                               'content_format' => $format,
-                       ]
-               );
-
-               return $rev;
-       }
-
-       function dataGetContentModel() {
-               // NOTE: we expect the help namespace to always contain wikitext
-               return [
-                       [ 'hello world', 'Help:Hello', null, null, CONTENT_MODEL_WIKITEXT ],
-                       [ 'hello world', 'User:hello/there.css', null, null, CONTENT_MODEL_CSS ],
-                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, "testing" ],
-               ];
+       public function provideFetchFromConds() {
+               yield [ 0, [] ];
+               yield [ Revision::READ_LOCKING, [ 'FOR UPDATE' ] ];
        }
 
        /**
-        * @group Database
-        * @dataProvider dataGetContentModel
-        * @covers Revision::getContentModel
+        * @dataProvider provideFetchFromConds
+        * @covers Revision::fetchFromConds
         */
-       public function testGetContentModel( $text, $title, $model, $format, $expectedModel ) {
-               $rev = $this->newTestRevision( $text, $title, $model, $format );
-
-               $this->assertEquals( $expectedModel, $rev->getContentModel() );
-       }
-
-       function dataGetContentFormat() {
-               // NOTE: we expect the help namespace to always contain wikitext
-               return [
-                       [ 'hello world', 'Help:Hello', null, null, CONTENT_FORMAT_WIKITEXT ],
-                       [ 'hello world', 'Help:Hello', CONTENT_MODEL_CSS, null, CONTENT_FORMAT_CSS ],
-                       [ 'hello world', 'User:hello/there.css', null, null, CONTENT_FORMAT_CSS ],
-                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, "testing" ],
+       public function testFetchFromConds( $flags, array $options ) {
+               $conditions = [ 'conditionsArray' ];
+
+               $db = $this->getMock( IDatabase::class );
+               $db->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               $this->equalTo( [ 'revision', 'page', 'user' ] ),
+                               // We don't really care about the fields are they come from the selectField methods
+                               $this->isType( 'array' ),
+                               $this->equalTo( $conditions ),
+                               // Method name
+                               $this->equalTo( 'Revision::fetchFromConds' ),
+                               $this->equalTo( $options ),
+                               // We don't really care about the join conds are they come from the joinCond methods
+                               $this->isType( 'array' )
+                       )
+                       ->willReturn( 'RETURNVALUE' );
+
+               $wrapper = TestingAccessWrapper::newFromClass( Revision::class );
+               $result = $wrapper->fetchFromConds( $db, $conditions, $flags );
+
+               $this->assertEquals( 'RETURNVALUE', $result );
+       }
+
+       public function provideDecompressRevisionText() {
+               yield '(no legacy encoding), false in false out' => [ false, false, [], false ];
+               yield '(no legacy encoding), empty in empty out' => [ false, '', [], '' ];
+               yield '(no legacy encoding), empty in empty out' => [ false, 'A', [], 'A' ];
+               yield '(no legacy encoding), string in with gzip flag returns string' => [
+                       // gzip string below generated with gzdeflate( 'AAAABBAAA' )
+                       false, "sttttr\002\022\000", [ 'gzip' ], 'AAAABBAAA',
                ];
-       }
-
-       /**
-        * @group Database
-        * @dataProvider dataGetContentFormat
-        * @covers Revision::getContentFormat
-        */
-       public function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) {
-               $rev = $this->newTestRevision( $text, $title, $model, $format );
-
-               $this->assertEquals( $expectedFormat, $rev->getContentFormat() );
-       }
-
-       function dataGetContentHandler() {
-               // NOTE: we expect the help namespace to always contain wikitext
-               return [
-                       [ 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ],
-                       [ 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ],
-                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ],
+               yield '(no legacy encoding), string in with object flag returns false' => [
+                       // gzip string below generated with serialize( 'JOJO' )
+                       false, "s:4:\"JOJO\";", [ 'object' ], false,
                ];
-       }
-
-       /**
-        * @group Database
-        * @dataProvider dataGetContentHandler
-        * @covers Revision::getContentHandler
-        */
-       public function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) {
-               $rev = $this->newTestRevision( $text, $title, $model, $format );
-
-               $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) );
-       }
-
-       function dataGetContent() {
-               // NOTE: we expect the help namespace to always contain wikitext
-               return [
-                       [ 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ],
-                       [
-                               serialize( 'hello world' ),
-                               'Hello',
-                               "testing",
-                               null,
-                               Revision::FOR_PUBLIC,
-                               serialize( 'hello world' )
-                       ],
-                       [
-                               serialize( 'hello world' ),
-                               'Dummy:Hello',
-                               null,
-                               null,
-                               Revision::FOR_PUBLIC,
-                               serialize( 'hello world' )
-                       ],
+               yield '(no legacy encoding), serialized object in with object flag returns string' => [
+                       false,
+                       // Using a TitleValue object as it has a getText method (which is needed)
+                       serialize( new TitleValue( 0, 'HHJJDDFF' ) ),
+                       [ 'object' ],
+                       'HHJJDDFF',
+               ];
+               yield '(no legacy encoding), serialized object in with object & gzip flag returns string' => [
+                       false,
+                       // Using a TitleValue object as it has a getText method (which is needed)
+                       gzdeflate( serialize( new TitleValue( 0, '8219JJJ840' ) ) ),
+                       [ 'object', 'gzip' ],
+                       '8219JJJ840',
+               ];
+               yield '(ISO-8859-1 encoding), string in string out' => [
+                       'ISO-8859-1',
+                       iconv( 'utf8', 'ISO-8859-1', "1®Àþ1" ),
+                       [],
+                       '1®Àþ1',
+               ];
+               yield '(ISO-8859-1 encoding), serialized object in with gzip flags returns string' => [
+                       'ISO-8859-1',
+                       gzdeflate( iconv( 'utf8', 'ISO-8859-1', "4®Àþ4" ) ),
+                       [ 'gzip' ],
+                       '4®Àþ4',
+               ];
+               yield '(ISO-8859-1 encoding), serialized object in with object flags returns string' => [
+                       'ISO-8859-1',
+                       serialize( new TitleValue( 0, iconv( 'utf8', 'ISO-8859-1', "3®Àþ3" ) ) ),
+                       [ 'object' ],
+                       '3®Àþ3',
+               ];
+               yield '(ISO-8859-1 encoding), serialized object in with object & gzip flags returns string' => [
+                       'ISO-8859-1',
+                       gzdeflate( serialize( new TitleValue( 0, iconv( 'utf8', 'ISO-8859-1', "2®Àþ2" ) ) ) ),
+                       [ 'gzip', 'object' ],
+                       '2®Àþ2',
                ];
        }
 
        /**
-        * @group Database
-        * @dataProvider dataGetContent
-        * @covers Revision::getContent
+        * @dataProvider provideDecompressRevisionText
+        * @covers Revision::decompressRevisionText
+        *
+        * @param bool $legacyEncoding
+        * @param mixed $text
+        * @param array $flags
+        * @param mixed $expected
         */
-       public function testGetContent( $text, $title, $model, $format,
-               $audience, $expectedSerialization
-       ) {
-               $rev = $this->newTestRevision( $text, $title, $model, $format );
-               $content = $rev->getContent( $audience );
-
-               $this->assertEquals(
-                       $expectedSerialization,
-                       is_null( $content ) ? null : $content->serialize( $format )
+       public function testDecompressRevisionText( $legacyEncoding, $text, $flags, $expected ) {
+               $this->setMwGlobals( 'wgLegacyEncoding', $legacyEncoding );
+               $this->setMwGlobals( 'wgLanguageCode', 'en' );
+               $this->assertSame(
+                       $expected,
+                       Revision::decompressRevisionText( $text, $flags )
                );
        }
 
-       public function dataGetSize() {
-               return [
-                       [ "hello world.", CONTENT_MODEL_WIKITEXT, 12 ],
-                       [ serialize( "hello world." ), "testing", 12 ],
-               ];
-       }
-
        /**
-        * @covers Revision::getSize
-        * @group Database
-        * @dataProvider dataGetSize
+        * @covers Revision::getRevisionText
         */
-       public function testGetSize( $text, $model, $expected_size ) {
-               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model );
-               $this->assertEquals( $expected_size, $rev->getSize() );
+       public function testGetRevisionText_returnsFalseWhenNoTextField() {
+               $this->assertFalse( Revision::getRevisionText( new stdClass() ) );
        }
 
-       public function dataGetSha1() {
-               return [
-                       [ "hello world.", CONTENT_MODEL_WIKITEXT, Revision::base36Sha1( "hello world." ) ],
-                       [
-                               serialize( "hello world." ),
-                               "testing",
-                               Revision::base36Sha1( serialize( "hello world." ) )
+       public function provideTestGetRevisionText_returnsDecompressedTextFieldWhenNotExternal() {
+               yield 'Just text' => [
+                       (object)[ 'old_text' => 'SomeText' ],
+                       'old_',
+                       'SomeText'
+               ];
+               // gzip string below generated with gzdeflate( 'AAAABBAAA' )
+               yield 'gzip text' => [
+                       (object)[
+                               'old_text' => "sttttr\002\022\000",
+                               'old_flags' => 'gzip'
+                       ],
+                       'old_',
+                       'AAAABBAAA'
+               ];
+               yield 'gzip text and different prefix' => [
+                       (object)[
+                               'jojo_text' => "sttttr\002\022\000",
+                               'jojo_flags' => 'gzip'
                        ],
+                       'jojo_',
+                       'AAAABBAAA'
                ];
        }
 
        /**
-        * @covers Revision::getSha1
-        * @group Database
-        * @dataProvider dataGetSha1
+        * @dataProvider provideTestGetRevisionText_returnsDecompressedTextFieldWhenNotExternal
+        * @covers Revision::getRevisionText
         */
-       public function testGetSha1( $text, $model, $expected_hash ) {
-               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model );
-               $this->assertEquals( $expected_hash, $rev->getSha1() );
+       public function testGetRevisionText_returnsDecompressedTextFieldWhenNotExternal(
+               $row,
+               $prefix,
+               $expected
+       ) {
+               $this->assertSame( $expected, Revision::getRevisionText( $row, $prefix ) );
        }
 
-       /**
-        * @covers Revision::__construct
-        */
-       public function testConstructWithText() {
-               $rev = new Revision( [
-                       'text' => 'hello world.',
-                       'content_model' => CONTENT_MODEL_JAVASCRIPT
-               ] );
-
-               $this->assertNotNull( $rev->getContent(), 'no content object available' );
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       public function provideTestGetRevisionText_external_returnsFalseWhenNotEnoughUrlParts() {
+               yield 'Just some text' => [ 'someNonUrlText' ];
+               yield 'No second URL part' => [ 'someProtocol://' ];
        }
 
        /**
-        * @covers Revision::__construct
+        * @dataProvider provideTestGetRevisionText_external_returnsFalseWhenNotEnoughUrlParts
+        * @covers Revision::getRevisionText
         */
-       public function testConstructWithContent() {
-               $title = Title::newFromText( 'RevisionTest_testConstructWithContent' );
-
-               $rev = new Revision( [
-                       'content' => ContentHandler::makeContent( 'hello world.', $title, CONTENT_MODEL_JAVASCRIPT ),
-               ] );
-
-               $this->assertNotNull( $rev->getContent(), 'no content object available' );
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
-               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       public function testGetRevisionText_external_returnsFalseWhenNotEnoughUrlParts(
+               $text
+       ) {
+               $this->assertFalse(
+                       Revision::getRevisionText(
+                               (object)[
+                                       'old_text' => $text,
+                                       'old_flags' => 'external',
+                               ]
+                       )
+               );
        }
 
        /**
-        * Tests whether $rev->getContent() returns a clone when needed.
-        *
-        * @group Database
-        * @covers Revision::getContent
+        * @covers Revision::getRevisionText
         */
-       public function testGetContentClone() {
-               $content = new RevisionTestModifyableContent( "foo" );
-
-               $rev = new Revision(
-                       [
-                               'id' => 42,
-                               'page' => 23,
-                               'title' => Title::newFromText( "testGetContentClone_dummy" ),
-
-                               'content' => $content,
-                               'length' => $content->getSize(),
-                               'comment' => "testing",
-                               'minor_edit' => false,
-                       ]
+       public function testGetRevisionText_external_noOldId() {
+               $this->setService(
+                       'ExternalStoreFactory',
+                       new ExternalStoreFactory( [ 'ForTesting' ] )
+               );
+               $this->assertSame(
+                       'AAAABBAAA',
+                       Revision::getRevisionText(
+                               (object)[
+                                       'old_text' => 'ForTesting://cluster1/12345',
+                                       'old_flags' => 'external,gzip',
+                               ]
+                       )
                );
-
-               $content = $rev->getContent( Revision::RAW );
-               $content->setText( "bar" );
-
-               $content2 = $rev->getContent( Revision::RAW );
-               // content is mutable, expect clone
-               $this->assertNotSame( $content, $content2, "expected a clone" );
-               // clone should contain the original text
-               $this->assertEquals( "foo", $content2->getText() );
-
-               $content2->setText( "bla bla" );
-               $this->assertEquals( "bar", $content->getText() ); // clones should be independent
        }
 
        /**
-        * Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
-        *
-        * @group Database
-        * @covers Revision::getContent
+        * @covers Revision::getRevisionText
         */
-       public function testGetContentUncloned() {
-               $rev = $this->newTestRevision( "hello", "testGetContentUncloned_dummy", CONTENT_MODEL_WIKITEXT );
-               $content = $rev->getContent( Revision::RAW );
-               $content2 = $rev->getContent( Revision::RAW );
-
-               // for immutable content like wikitext, this should be the same object
-               $this->assertSame( $content, $content2 );
-       }
-}
-
-class RevisionTestModifyableContent extends TextContent {
-       public function __construct( $text ) {
-               parent::__construct( $text, "RevisionTestModifyableContent" );
-       }
-
-       public function copy() {
-               return new RevisionTestModifyableContent( $this->mText );
-       }
-
-       public function getText() {
-               return $this->mText;
-       }
-
-       public function setText( $text ) {
-               $this->mText = $text;
-       }
-}
-
-class RevisionTestModifyableContentHandler extends TextContentHandler {
-
-       public function __construct() {
-               parent::__construct( "RevisionTestModifyableContent", [ CONTENT_FORMAT_TEXT ] );
-       }
-
-       public function unserializeContent( $text, $format = null ) {
-               $this->checkFormat( $format );
+       public function testGetRevisionText_external_oldId() {
+               $cache = new WANObjectCache( [ 'cache' => new HashBagOStuff() ] );
+               $this->setService( 'MainWANObjectCache', $cache );
+               $this->setService(
+                       'ExternalStoreFactory',
+                       new ExternalStoreFactory( [ 'ForTesting' ] )
+               );
 
-               return new RevisionTestModifyableContent( $text );
+               $cacheKey = $cache->makeKey( 'revisiontext', 'textid', '7777' );
+
+               $this->assertSame(
+                       'AAAABBAAA',
+                       Revision::getRevisionText(
+                               (object)[
+                                       'old_text' => 'ForTesting://cluster1/12345',
+                                       'old_flags' => 'external,gzip',
+                                       'old_id' => '7777',
+                               ]
+                       )
+               );
+               $this->assertSame( 'AAAABBAAA', $cache->get( $cacheKey ) );
        }
 
-       public function makeEmptyContent() {
-               return new RevisionTestModifyableContent( '' );
-       }
 }
diff --git a/tests/phpunit/includes/RevisionTestModifyableContent.php b/tests/phpunit/includes/RevisionTestModifyableContent.php
new file mode 100644 (file)
index 0000000..6dcba53
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+class RevisionTestModifyableContent extends TextContent {
+
+       const MODEL_ID = "RevisionTestModifyableContent";
+
+       public function __construct( $text ) {
+               parent::__construct( $text, self::MODEL_ID );
+       }
+
+       public function copy() {
+               return new RevisionTestModifyableContent( $this->mText );
+       }
+
+       public function getText() {
+               return $this->mText;
+       }
+
+       public function setText( $text ) {
+               $this->mText = $text;
+       }
+
+}
diff --git a/tests/phpunit/includes/RevisionTestModifyableContentHandler.php b/tests/phpunit/includes/RevisionTestModifyableContentHandler.php
new file mode 100644 (file)
index 0000000..bc4e40a
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+class RevisionTestModifyableContentHandler extends TextContentHandler {
+
+       public function __construct() {
+               parent::__construct( RevisionTestModifyableContent::MODEL_ID, [ CONTENT_FORMAT_TEXT ] );
+       }
+
+       public function unserializeContent( $text, $format = null ) {
+               $this->checkFormat( $format );
+
+               return new RevisionTestModifyableContent( $text );
+       }
+
+       public function makeEmptyContent() {
+               return new RevisionTestModifyableContent( '' );
+       }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemIntegrationTest.php b/tests/phpunit/includes/WatchedItemIntegrationTest.php
deleted file mode 100644 (file)
index 01e7ecb..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-use MediaWiki\MediaWikiServices;
-
-/**
- * @author Addshore
- *
- * @group Database
- *
- * @covers WatchedItem
- */
-class WatchedItemIntegrationTest extends MediaWikiTestCase {
-
-       public function setUp() {
-               parent::setUp();
-               self::$users['WatchedItemIntegrationTestUser']
-                       = new TestUser( 'WatchedItemIntegrationTestUser' );
-
-               $this->hideDeprecated( 'WatchedItem::fromUserTitle' );
-               $this->hideDeprecated( 'WatchedItem::addWatch' );
-               $this->hideDeprecated( 'WatchedItem::removeWatch' );
-               $this->hideDeprecated( 'WatchedItem::isWatched' );
-               $this->hideDeprecated( 'WatchedItem::duplicateEntries' );
-               $this->hideDeprecated( 'WatchedItem::batchAddWatch' );
-       }
-
-       private function getUser() {
-               return self::$users['WatchedItemIntegrationTestUser']->getUser();
-       }
-
-       public function testWatchAndUnWatchItem() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-               // Cleanup after previous tests
-               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
-
-               $this->assertFalse(
-                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
-                       'Page should not initially be watched'
-               );
-               WatchedItem::fromUserTitle( $user, $title )->addWatch();
-               $this->assertTrue(
-                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
-                       'Page should be watched'
-               );
-               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
-               $this->assertFalse(
-                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
-                       'Page should be unwatched'
-               );
-       }
-
-       public function testUpdateAndResetNotificationTimestamp() {
-               $user = $this->getUser();
-               $otherUser = ( new TestUser( 'WatchedItemIntegrationTestUser_otherUser' ) )->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-               WatchedItem::fromUserTitle( $user, $title )->addWatch();
-               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
-
-               EmailNotification::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
-               $this->assertEquals(
-                       '20150202010101',
-                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
-               );
-
-               MediaWikiServices::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
-                       $user, $title
-               );
-               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
-       }
-
-       public function testDuplicateAllAssociatedEntries() {
-               $user = $this->getUser();
-               $titleOld = Title::newFromText( 'WatchedItemIntegrationTestPageOld' );
-               $titleNew = Title::newFromText( 'WatchedItemIntegrationTestPageNew' );
-               WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->addWatch();
-               WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->addWatch();
-               // Cleanup after previous tests
-               WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->removeWatch();
-               WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->removeWatch();
-
-               WatchedItem::duplicateEntries( $titleOld, $titleNew );
-
-               $this->assertTrue(
-                       WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
-               );
-               $this->assertTrue(
-                       WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
-               );
-               $this->assertTrue(
-                       WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
-               );
-               $this->assertTrue(
-                       WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
-               );
-       }
-
-       public function testIsWatched_falseOnNotAllowed() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-               WatchedItem::fromUserTitle( $user, $title )->addWatch();
-
-               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
-               $user->mRights = [];
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
-       }
-
-       public function testGetNotificationTimestamp_falseOnNotAllowed() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-               WatchedItem::fromUserTitle( $user, $title )->addWatch();
-               MediaWikiServices::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
-                       $user, $title
-               );
-
-               $this->assertEquals(
-                       null,
-                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
-               );
-               $user->mRights = [];
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
-       }
-
-       public function testRemoveWatch_falseOnNotAllowed() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-               WatchedItem::fromUserTitle( $user, $title )->addWatch();
-
-               $previousRights = $user->mRights;
-               $user->mRights = [];
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
-               $user->mRights = $previousRights;
-               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
-       }
-
-       public function testGetNotificationTimestamp_falseOnNotWatched() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
-
-               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
-
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
-       }
-
-}
diff --git a/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php b/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php
deleted file mode 100644 (file)
index 62ba5f6..0000000
+++ /dev/null
@@ -1,1676 +0,0 @@
-<?php
-
-use Wikimedia\ScopedCallback;
-use Wikimedia\TestingAccessWrapper;
-
-/**
- * @covers WatchedItemQueryService
- */
-class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|Database
-        */
-       private function getMockDb() {
-               $mock = $this->getMockBuilder( Database::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               $mock->expects( $this->any() )
-                       ->method( 'makeList' )
-                       ->with(
-                               $this->isType( 'array' ),
-                               $this->isType( 'int' )
-                       )
-                       ->will( $this->returnCallback( function ( $a, $conj ) {
-                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
-                               return join( $sqlConj, array_map( function ( $s ) {
-                                       return '(' . $s . ')';
-                               }, $a
-                               ) );
-                       } ) );
-
-               $mock->expects( $this->any() )
-                       ->method( 'addQuotes' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return "'$value'";
-                       } ) );
-
-               $mock->expects( $this->any() )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnArgument( 0 ) );
-
-               $mock->expects( $this->any() )
-                       ->method( 'bitAnd' )
-                       ->willReturnCallback( function ( $a, $b ) {
-                               return "($a & $b)";
-                       } );
-
-               return $mock;
-       }
-
-       /**
-        * @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb
-        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
-        */
-       private function getMockLoadBalancer( $mockDb ) {
-               $mock = $this->getMockBuilder( LoadBalancer::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               $mock->expects( $this->any() )
-                       ->method( 'getConnectionRef' )
-                       ->with( DB_REPLICA )
-                       ->will( $this->returnValue( $mockDb ) );
-               return $mock;
-       }
-
-       /**
-        * @param int $id
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockNonAnonUserWithId( $id ) {
-               $mock = $this->getMockBuilder( User::class )->getMock();
-               $mock->expects( $this->any() )
-                       ->method( 'isAnon' )
-                       ->will( $this->returnValue( false ) );
-               $mock->expects( $this->any() )
-                       ->method( 'getId' )
-                       ->will( $this->returnValue( $id ) );
-               return $mock;
-       }
-
-       /**
-        * @param int $id
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockUnrestrictedNonAnonUserWithId( $id ) {
-               $mock = $this->getMockNonAnonUserWithId( $id );
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowed' )
-                       ->will( $this->returnValue( true ) );
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowedAny' )
-                       ->will( $this->returnValue( true ) );
-               $mock->expects( $this->any() )
-                       ->method( 'useRCPatrol' )
-                       ->will( $this->returnValue( true ) );
-               return $mock;
-       }
-
-       /**
-        * @param int $id
-        * @param string $notAllowedAction
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id, $notAllowedAction ) {
-               $mock = $this->getMockNonAnonUserWithId( $id );
-
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowed' )
-                       ->will( $this->returnCallback( function ( $action ) use ( $notAllowedAction ) {
-                               return $action !== $notAllowedAction;
-                       } ) );
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowedAny' )
-                       ->will( $this->returnCallback( function () use ( $notAllowedAction ) {
-                               $actions = func_get_args();
-                               return !in_array( $notAllowedAction, $actions );
-                       } ) );
-
-               return $mock;
-       }
-
-       /**
-        * @param int $id
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockNonAnonUserWithIdAndNoPatrolRights( $id ) {
-               $mock = $this->getMockNonAnonUserWithId( $id );
-
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowed' )
-                       ->will( $this->returnValue( true ) );
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowedAny' )
-                       ->will( $this->returnValue( true ) );
-
-               $mock->expects( $this->any() )
-                       ->method( 'useRCPatrol' )
-                       ->will( $this->returnValue( false ) );
-               $mock->expects( $this->any() )
-                       ->method( 'useNPPatrol' )
-                       ->will( $this->returnValue( false ) );
-
-               return $mock;
-       }
-
-       private function getMockAnonUser() {
-               $mock = $this->getMockBuilder( User::class )->getMock();
-               $mock->expects( $this->any() )
-                       ->method( 'isAnon' )
-                       ->will( $this->returnValue( true ) );
-               return $mock;
-       }
-
-       private function getFakeRow( array $rowValues ) {
-               $fakeRow = new stdClass();
-               foreach ( $rowValues as $valueName => $value ) {
-                       $fakeRow->$valueName = $value;
-               }
-               return $fakeRow;
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page' ],
-                               [
-                                       'rc_id',
-                                       'rc_namespace',
-                                       'rc_title',
-                                       'rc_timestamp',
-                                       'rc_type',
-                                       'rc_deleted',
-                                       'wl_notificationtimestamp',
-                                       'rc_cur_id',
-                                       'rc_this_oldid',
-                                       'rc_last_oldid',
-                               ],
-                               [
-                                       'wl_user' => 1,
-                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
-                               ],
-                               $this->isType( 'string' ),
-                               [
-                                       'LIMIT' => 3,
-                               ],
-                               [
-                                       'watchlist' => [
-                                               'INNER JOIN',
-                                               [
-                                                       'wl_namespace=rc_namespace',
-                                                       'wl_title=rc_title'
-                                               ]
-                                       ],
-                                       'page' => [
-                                               'LEFT JOIN',
-                                               'rc_cur_id=page_id',
-                                       ],
-                               ]
-                       )
-                       ->will( $this->returnValue( [
-                               $this->getFakeRow( [
-                                       'rc_id' => 1,
-                                       'rc_namespace' => 0,
-                                       'rc_title' => 'Foo1',
-                                       'rc_timestamp' => '20151212010101',
-                                       'rc_type' => RC_NEW,
-                                       'rc_deleted' => 0,
-                                       'wl_notificationtimestamp' => '20151212010101',
-                               ] ),
-                               $this->getFakeRow( [
-                                       'rc_id' => 2,
-                                       'rc_namespace' => 1,
-                                       'rc_title' => 'Foo2',
-                                       'rc_timestamp' => '20151212010102',
-                                       'rc_type' => RC_NEW,
-                                       'rc_deleted' => 0,
-                                       'wl_notificationtimestamp' => null,
-                               ] ),
-                               $this->getFakeRow( [
-                                       'rc_id' => 3,
-                                       'rc_namespace' => 1,
-                                       'rc_title' => 'Foo3',
-                                       'rc_timestamp' => '20151212010103',
-                                       'rc_type' => RC_NEW,
-                                       'rc_deleted' => 0,
-                                       'wl_notificationtimestamp' => null,
-                               ] ),
-                       ] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $startFrom = null;
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user, [ 'limit' => 2 ], $startFrom
-               );
-
-               $this->assertInternalType( 'array', $items );
-               $this->assertCount( 2, $items );
-
-               foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
-                       $this->assertInstanceOf( WatchedItem::class, $watchedItem );
-                       $this->assertInternalType( 'array', $recentChangeInfo );
-               }
-
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
-                       $items[0][0]
-               );
-               $this->assertEquals(
-                       [
-                               'rc_id' => 1,
-                               'rc_namespace' => 0,
-                               'rc_title' => 'Foo1',
-                               'rc_timestamp' => '20151212010101',
-                               'rc_type' => RC_NEW,
-                               'rc_deleted' => 0,
-                       ],
-                       $items[0][1]
-               );
-
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
-                       $items[1][0]
-               );
-               $this->assertEquals(
-                       [
-                               'rc_id' => 2,
-                               'rc_namespace' => 1,
-                               'rc_title' => 'Foo2',
-                               'rc_timestamp' => '20151212010102',
-                               'rc_type' => RC_NEW,
-                               'rc_deleted' => 0,
-                       ],
-                       $items[1][1]
-               );
-
-               $this->assertEquals( [ '20151212010103', 3 ], $startFrom );
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo_extension() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page', 'extension_dummy_table' ],
-                               [
-                                       'rc_id',
-                                       'rc_namespace',
-                                       'rc_title',
-                                       'rc_timestamp',
-                                       'rc_type',
-                                       'rc_deleted',
-                                       'wl_notificationtimestamp',
-                                       'rc_cur_id',
-                                       'rc_this_oldid',
-                                       'rc_last_oldid',
-                                       'extension_dummy_field',
-                               ],
-                               [
-                                       'wl_user' => 1,
-                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
-                                       'extension_dummy_cond',
-                               ],
-                               $this->isType( 'string' ),
-                               [
-                                       'extension_dummy_option',
-                               ],
-                               [
-                                       'watchlist' => [
-                                               'INNER JOIN',
-                                               [
-                                                       'wl_namespace=rc_namespace',
-                                                       'wl_title=rc_title'
-                                               ]
-                                       ],
-                                       'page' => [
-                                               'LEFT JOIN',
-                                               'rc_cur_id=page_id',
-                                       ],
-                                       'extension_dummy_join_cond' => [],
-                               ]
-                       )
-                       ->will( $this->returnValue( [
-                               $this->getFakeRow( [
-                                       'rc_id' => 1,
-                                       'rc_namespace' => 0,
-                                       'rc_title' => 'Foo1',
-                                       'rc_timestamp' => '20151212010101',
-                                       'rc_type' => RC_NEW,
-                                       'rc_deleted' => 0,
-                                       'wl_notificationtimestamp' => '20151212010101',
-                               ] ),
-                               $this->getFakeRow( [
-                                       'rc_id' => 2,
-                                       'rc_namespace' => 1,
-                                       'rc_title' => 'Foo2',
-                                       'rc_timestamp' => '20151212010102',
-                                       'rc_type' => RC_NEW,
-                                       'rc_deleted' => 0,
-                                       'wl_notificationtimestamp' => null,
-                               ] ),
-                       ] ) );
-
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $mockExtension = $this->getMockBuilder( WatchedItemQueryServiceExtension::class )
-                       ->getMock();
-               $mockExtension->expects( $this->once() )
-                       ->method( 'modifyWatchedItemsWithRCInfoQuery' )
-                       ->with(
-                               $this->identicalTo( $user ),
-                               $this->isType( 'array' ),
-                               $this->isInstanceOf( IDatabase::class ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' )
-                       )
-                       ->will( $this->returnCallback( function (
-                               $user, $options, $db, &$tables, &$fields, &$conds, &$dbOptions, &$joinConds
-                       ) {
-                               $tables[] = 'extension_dummy_table';
-                               $fields[] = 'extension_dummy_field';
-                               $conds[] = 'extension_dummy_cond';
-                               $dbOptions[] = 'extension_dummy_option';
-                               $joinConds['extension_dummy_join_cond'] = [];
-                       } ) );
-               $mockExtension->expects( $this->once() )
-                       ->method( 'modifyWatchedItemsWithRCInfo' )
-                       ->with(
-                               $this->identicalTo( $user ),
-                               $this->isType( 'array' ),
-                               $this->isInstanceOf( IDatabase::class ),
-                               $this->isType( 'array' ),
-                               $this->anything(),
-                               $this->anything() // Can't test for null here, PHPUnit applies this after the callback
-                       )
-                       ->will( $this->returnCallback( function ( $user, $options, $db, &$items, $res, &$startFrom ) {
-                               foreach ( $items as $i => &$item ) {
-                                       $item[1]['extension_dummy_field'] = $i;
-                               }
-                               unset( $item );
-
-                               $this->assertNull( $startFrom );
-                               $startFrom = [ '20160203123456', 42 ];
-                       } ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               TestingAccessWrapper::newFromObject( $queryService )->extensions = [ $mockExtension ];
-
-               $startFrom = null;
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user, [], $startFrom
-               );
-
-               $this->assertInternalType( 'array', $items );
-               $this->assertCount( 2, $items );
-
-               foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
-                       $this->assertInstanceOf( WatchedItem::class, $watchedItem );
-                       $this->assertInternalType( 'array', $recentChangeInfo );
-               }
-
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
-                       $items[0][0]
-               );
-               $this->assertEquals(
-                       [
-                               'rc_id' => 1,
-                               'rc_namespace' => 0,
-                               'rc_title' => 'Foo1',
-                               'rc_timestamp' => '20151212010101',
-                               'rc_type' => RC_NEW,
-                               'rc_deleted' => 0,
-                               'extension_dummy_field' => 0,
-                       ],
-                       $items[0][1]
-               );
-
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
-                       $items[1][0]
-               );
-               $this->assertEquals(
-                       [
-                               'rc_id' => 2,
-                               'rc_namespace' => 1,
-                               'rc_title' => 'Foo2',
-                               'rc_timestamp' => '20151212010102',
-                               'rc_type' => RC_NEW,
-                               'rc_deleted' => 0,
-                               'extension_dummy_field' => 1,
-                       ],
-                       $items[1][1]
-               );
-
-               $this->assertEquals( [ '20160203123456', 42 ], $startFrom );
-       }
-
-       public function getWatchedItemsWithRecentChangeInfoOptionsProvider() {
-               return [
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_FLAGS ] ],
-                               null,
-                               [],
-                               [ 'rc_type', 'rc_minor', 'rc_bot' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_USER ] ],
-                               null,
-                               [],
-                               [ 'rc_user_text' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_USER_ID ] ],
-                               null,
-                               [],
-                               [ 'rc_user' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
-                               null,
-                               [],
-                               [
-                                       'rc_comment_text' => 'rc_comment',
-                                       'rc_comment_data' => 'NULL',
-                                       'rc_comment_cid' => 'NULL',
-                               ],
-                               [],
-                               [],
-                               [],
-                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD ],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
-                               null,
-                               [ 'comment_rc_comment' => 'comment' ],
-                               [
-                                       'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )',
-                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
-                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
-                               ],
-                               [],
-                               [],
-                               [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
-                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_BOTH ],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
-                               null,
-                               [ 'comment_rc_comment' => 'comment' ],
-                               [
-                                       'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )',
-                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
-                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
-                               ],
-                               [],
-                               [],
-                               [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
-                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_NEW ],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
-                               null,
-                               [ 'comment_rc_comment' => 'comment' ],
-                               [
-                                       'rc_comment_text' => 'comment_rc_comment.comment_text',
-                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
-                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
-                               ],
-                               [],
-                               [],
-                               [ 'comment_rc_comment' => [ 'JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
-                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW ],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_PATROL_INFO ] ],
-                               null,
-                               [],
-                               [ 'rc_patrolled', 'rc_log_type' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_SIZES ] ],
-                               null,
-                               [],
-                               [ 'rc_old_len', 'rc_new_len' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_LOG_INFO ] ],
-                               null,
-                               [],
-                               [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ],
-                               [],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'namespaceIds' => [ 0, 1 ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'wl_namespace' => [ 0, 1 ] ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'namespaceIds' => [ 0, "1; DROP TABLE watchlist;\n--" ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'wl_namespace' => [ 0, 1 ] ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'rcTypes' => [ RC_EDIT, RC_NEW ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_type' => [ RC_EDIT, RC_NEW ] ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               null,
-                               [],
-                               [],
-                               [],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_NEWER ],
-                               null,
-                               [],
-                               [],
-                               [],
-                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER, 'start' => '20151212010101' ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp <= '20151212010101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER, 'end' => '20151212010101' ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp >= '20151212010101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-                       [
-                               [
-                                       'dir' => WatchedItemQueryService::DIR_OLDER,
-                                       'start' => '20151212020101',
-                                       'end' => '20151212010101'
-                               ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp <= '20151212020101'", "rc_timestamp >= '20151212010101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_NEWER, 'start' => '20151212010101' ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp >= '20151212010101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_NEWER, 'end' => '20151212010101' ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp <= '20151212010101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
-                               [],
-                       ],
-                       [
-                               [
-                                       'dir' => WatchedItemQueryService::DIR_NEWER,
-                                       'start' => '20151212010101',
-                                       'end' => '20151212020101'
-                               ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_timestamp >= '20151212010101'", "rc_timestamp <= '20151212020101'" ],
-                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'limit' => 10 ],
-                               null,
-                               [],
-                               [],
-                               [],
-                               [ 'LIMIT' => 11 ],
-                               [],
-                       ],
-                       [
-                               [ 'limit' => "10; DROP TABLE watchlist;\n--" ],
-                               null,
-                               [],
-                               [],
-                               [],
-                               [ 'LIMIT' => 11 ],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_MINOR ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_minor != 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_MINOR ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_minor = 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_BOT ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_bot != 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_BOT ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_bot = 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_ANON ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_user = 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_ANON ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_user != 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_PATROLLED ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_patrolled != 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_PATROLLED ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_patrolled = 0' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_UNREAD ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_timestamp >= wl_notificationtimestamp' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_UNREAD ] ],
-                               null,
-                               [],
-                               [],
-                               [ 'wl_notificationtimestamp IS NULL OR rc_timestamp < wl_notificationtimestamp' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'onlyByUser' => 'SomeOtherUser' ],
-                               null,
-                               [],
-                               [],
-                               [ 'rc_user_text' => 'SomeOtherUser' ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'notByUser' => 'SomeOtherUser' ],
-                               null,
-                               [],
-                               [],
-                               [ "rc_user_text != 'SomeOtherUser'" ],
-                               [],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ '20151212010101', 123 ],
-                               [],
-                               [],
-                               [
-                                       "(rc_timestamp < '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id <= 123))"
-                               ],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_NEWER ],
-                               [ '20151212010101', 123 ],
-                               [],
-                               [],
-                               [
-                                       "(rc_timestamp > '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id >= 123))"
-                               ],
-                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
-                               [],
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ '20151212010101', "123; DROP TABLE watchlist;\n--" ],
-                               [],
-                               [],
-                               [
-                                       "(rc_timestamp < '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id <= 123))"
-                               ],
-                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
-                               [],
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider getWatchedItemsWithRecentChangeInfoOptionsProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_optionsAndEmptyResult(
-               array $options,
-               $startFrom,
-               array $expectedExtraTables,
-               array $expectedExtraFields,
-               array $expectedExtraConds,
-               array $expectedDbOptions,
-               array $expectedExtraJoinConds,
-               array $globals = []
-       ) {
-               // Sigh. This test class doesn't extend MediaWikiTestCase, so we have to reinvent setMwGlobals().
-               if ( $globals ) {
-                       $resetGlobals = [];
-                       foreach ( $globals as $k => $v ) {
-                               $resetGlobals[$k] = $GLOBALS[$k];
-                               $GLOBALS[$k] = $v;
-                       }
-                       $reset = new ScopedCallback( function () use ( $resetGlobals ) {
-                               foreach ( $resetGlobals as $k => $v ) {
-                                       $GLOBALS[$k] = $v;
-                               }
-                       } );
-               }
-
-               $expectedTables = array_merge( [ 'recentchanges', 'watchlist', 'page' ], $expectedExtraTables );
-               $expectedFields = array_merge(
-                       [
-                               'rc_id',
-                               'rc_namespace',
-                               'rc_title',
-                               'rc_timestamp',
-                               'rc_type',
-                               'rc_deleted',
-                               'wl_notificationtimestamp',
-
-                               'rc_cur_id',
-                               'rc_this_oldid',
-                               'rc_last_oldid',
-                       ],
-                       $expectedExtraFields
-               );
-               $expectedConds = array_merge(
-                       [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)', ],
-                       $expectedExtraConds
-               );
-               $expectedJoinConds = array_merge(
-                       [
-                               'watchlist' => [
-                                       'INNER JOIN',
-                                       [
-                                               'wl_namespace=rc_namespace',
-                                               'wl_title=rc_title'
-                                       ]
-                               ],
-                               'page' => [
-                                       'LEFT JOIN',
-                                       'rc_cur_id=page_id',
-                               ],
-                       ],
-                       $expectedExtraJoinConds
-               );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               $expectedTables,
-                               $expectedFields,
-                               $expectedConds,
-                               $this->isType( 'string' ),
-                               $expectedDbOptions,
-                               $expectedJoinConds
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options, $startFrom );
-
-               $this->assertEmpty( $items );
-               $this->assertNull( $startFrom );
-       }
-
-       public function filterPatrolledOptionProvider() {
-               return [
-                       [ WatchedItemQueryService::FILTER_PATROLLED ],
-                       [ WatchedItemQueryService::FILTER_NOT_PATROLLED ],
-               ];
-       }
-
-       /**
-        * @dataProvider filterPatrolledOptionProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_filterPatrolledAndUserWithNoPatrolRights(
-               $filtersOption
-       ) {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page' ],
-                               $this->isType( 'array' ),
-                               [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' )
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $user = $this->getMockNonAnonUserWithIdAndNoPatrolRights( 1 );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user,
-                       [ 'filters' => [ $filtersOption ] ]
-               );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function mysqlIndexOptimizationProvider() {
-               return [
-                       [
-                               'mysql',
-                               [],
-                               [ "rc_timestamp > ''" ],
-                       ],
-                       [
-                               'mysql',
-                               [ 'start' => '20151212010101', 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ "rc_timestamp <= '20151212010101'" ],
-                       ],
-                       [
-                               'mysql',
-                               [ 'end' => '20151212010101', 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ "rc_timestamp >= '20151212010101'" ],
-                       ],
-                       [
-                               'postgres',
-                               [],
-                               [],
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider mysqlIndexOptimizationProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_mysqlIndexOptimization(
-               $dbType,
-               array $options,
-               array $expectedExtraConds
-       ) {
-               $commonConds = [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ];
-               $conds = array_merge( $commonConds, $expectedExtraConds );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page' ],
-                               $this->isType( 'array' ),
-                               $conds,
-                               $this->isType( 'string' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' )
-                       )
-                       ->will( $this->returnValue( [] ) );
-               $mockDb->expects( $this->any() )
-                       ->method( 'getType' )
-                       ->will( $this->returnValue( $dbType ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function userPermissionRelatedExtraChecksProvider() {
-               return [
-                       [
-                               [],
-                               'deletedhistory',
-                               [
-                                       '(rc_type != ' . RC_LOG . ') OR ((rc_deleted & ' . LogPage::DELETED_ACTION . ') != ' .
-                                               LogPage::DELETED_ACTION . ')'
-                               ],
-                       ],
-                       [
-                               [],
-                               'suppressrevision',
-                               [
-                                       '(rc_type != ' . RC_LOG . ') OR (' .
-                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
-                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
-                               ],
-                       ],
-                       [
-                               [],
-                               'viewsuppressed',
-                               [
-                                       '(rc_type != ' . RC_LOG . ') OR (' .
-                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
-                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
-                               ],
-                       ],
-                       [
-                               [ 'onlyByUser' => 'SomeOtherUser' ],
-                               'deletedhistory',
-                               [
-                                       'rc_user_text' => 'SomeOtherUser',
-                                       '(rc_deleted & ' . Revision::DELETED_USER . ') != ' . Revision::DELETED_USER,
-                                       '(rc_type != ' . RC_LOG . ') OR ((rc_deleted & ' . LogPage::DELETED_ACTION . ') != ' .
-                                               LogPage::DELETED_ACTION . ')'
-                               ],
-                       ],
-                       [
-                               [ 'onlyByUser' => 'SomeOtherUser' ],
-                               'suppressrevision',
-                               [
-                                       'rc_user_text' => 'SomeOtherUser',
-                                       '(rc_deleted & ' . ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ) . ') != ' .
-                                               ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ),
-                                       '(rc_type != ' . RC_LOG . ') OR (' .
-                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
-                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
-                               ],
-                       ],
-                       [
-                               [ 'onlyByUser' => 'SomeOtherUser' ],
-                               'viewsuppressed',
-                               [
-                                       'rc_user_text' => 'SomeOtherUser',
-                                       '(rc_deleted & ' . ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ) . ') != ' .
-                                               ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ),
-                                       '(rc_type != ' . RC_LOG . ') OR (' .
-                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
-                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
-                               ],
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider userPermissionRelatedExtraChecksProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_userPermissionRelatedExtraChecks(
-               array $options,
-               $notAllowedAction,
-               array $expectedExtraConds
-       ) {
-               $commonConds = [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ];
-               $conds = array_merge( $commonConds, $expectedExtraConds );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page' ],
-                               $this->isType( 'array' ),
-                               $conds,
-                               $this->isType( 'string' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' )
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1, $notAllowedAction );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo_allRevisionsOptionAndEmptyResult() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist' ],
-                               [
-                                       'rc_id',
-                                       'rc_namespace',
-                                       'rc_title',
-                                       'rc_timestamp',
-                                       'rc_type',
-                                       'rc_deleted',
-                                       'wl_notificationtimestamp',
-
-                                       'rc_cur_id',
-                                       'rc_this_oldid',
-                                       'rc_last_oldid',
-                               ],
-                               [ 'wl_user' => 1, ],
-                               $this->isType( 'string' ),
-                               [],
-                               [
-                                       'watchlist' => [
-                                               'INNER JOIN',
-                                               [
-                                                       'wl_namespace=rc_namespace',
-                                                       'wl_title=rc_title'
-                                               ]
-                                       ],
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, [ 'allRevisions' => true ] );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function getWatchedItemsWithRecentChangeInfoInvalidOptionsProvider() {
-               return [
-                       [
-                               [ 'rcTypes' => [ 1337 ] ],
-                               null,
-                               'Bad value for parameter $options[\'rcTypes\']',
-                       ],
-                       [
-                               [ 'rcTypes' => [ 'edit' ] ],
-                               null,
-                               'Bad value for parameter $options[\'rcTypes\']',
-                       ],
-                       [
-                               [ 'rcTypes' => [ RC_EDIT, 1337 ] ],
-                               null,
-                               'Bad value for parameter $options[\'rcTypes\']',
-                       ],
-                       [
-                               [ 'dir' => 'foo' ],
-                               null,
-                               'Bad value for parameter $options[\'dir\']',
-                       ],
-                       [
-                               [ 'start' => '20151212010101' ],
-                               null,
-                               'Bad value for parameter $options[\'dir\']: must be provided',
-                       ],
-                       [
-                               [ 'end' => '20151212010101' ],
-                               null,
-                               'Bad value for parameter $options[\'dir\']: must be provided',
-                       ],
-                       [
-                               [],
-                               [ '20151212010101', 123 ],
-                               'Bad value for parameter $options[\'dir\']: must be provided',
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               '20151212010101',
-                               'Bad value for parameter $startFrom: must be a two-element array',
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ '20151212010101' ],
-                               'Bad value for parameter $startFrom: must be a two-element array',
-                       ],
-                       [
-                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
-                               [ '20151212010101', 123, 'foo' ],
-                               'Bad value for parameter $startFrom: must be a two-element array',
-                       ],
-                       [
-                               [ 'watchlistOwner' => $this->getMockUnrestrictedNonAnonUserWithId( 2 ) ],
-                               null,
-                               'Bad value for parameter $options[\'watchlistOwnerToken\']',
-                       ],
-                       [
-                               [ 'watchlistOwner' => 'Other User', 'watchlistOwnerToken' => 'some-token' ],
-                               null,
-                               'Bad value for parameter $options[\'watchlistOwner\']',
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider getWatchedItemsWithRecentChangeInfoInvalidOptionsProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_invalidOptions(
-               array $options,
-               $startFrom,
-               $expectedInExceptionMessage
-       ) {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( $this->anything() );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage );
-               $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options, $startFrom );
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo_usedInGeneratorOptionAndEmptyResult() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist', 'page' ],
-                               [
-                                       'rc_id',
-                                       'rc_namespace',
-                                       'rc_title',
-                                       'rc_timestamp',
-                                       'rc_type',
-                                       'rc_deleted',
-                                       'wl_notificationtimestamp',
-                                       'rc_cur_id',
-                               ],
-                               [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ],
-                               $this->isType( 'string' ),
-                               [],
-                               [
-                                       'watchlist' => [
-                                               'INNER JOIN',
-                                               [
-                                                       'wl_namespace=rc_namespace',
-                                                       'wl_title=rc_title'
-                                               ]
-                                       ],
-                                       'page' => [
-                                               'LEFT JOIN',
-                                               'rc_cur_id=page_id',
-                                       ],
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user,
-                       [ 'usedInGenerator' => true ]
-               );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo_usedInGeneratorAllRevisionsOptions() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               [ 'recentchanges', 'watchlist' ],
-                               [
-                                       'rc_id',
-                                       'rc_namespace',
-                                       'rc_title',
-                                       'rc_timestamp',
-                                       'rc_type',
-                                       'rc_deleted',
-                                       'wl_notificationtimestamp',
-                                       'rc_this_oldid',
-                               ],
-                               [ 'wl_user' => 1 ],
-                               $this->isType( 'string' ),
-                               [],
-                               [
-                                       'watchlist' => [
-                                               'INNER JOIN',
-                                               [
-                                                       'wl_namespace=rc_namespace',
-                                                       'wl_title=rc_title'
-                                               ]
-                                       ],
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user,
-                       [ 'usedInGenerator' => true, 'allRevisions' => true, ]
-               );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function testGetWatchedItemsWithRecentChangeInfo_watchlistOwnerOptionAndEmptyResult() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' ),
-                               [
-                                       'wl_user' => 2,
-                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
-                               ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'array' ),
-                               $this->isType( 'array' )
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-               $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 );
-               $otherUser->expects( $this->once() )
-                       ->method( 'getOption' )
-                       ->with( 'watchlisttoken' )
-                       ->willReturn( '0123456789abcdef' );
-
-               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user,
-                       [ 'watchlistOwner' => $otherUser, 'watchlistOwnerToken' => '0123456789abcdef' ]
-               );
-
-               $this->assertEmpty( $items );
-       }
-
-       public function invalidWatchlistTokenProvider() {
-               return [
-                       [ 'wrongToken' ],
-                       [ '' ],
-               ];
-       }
-
-       /**
-        * @dataProvider invalidWatchlistTokenProvider
-        */
-       public function testGetWatchedItemsWithRecentChangeInfo_watchlistOwnerAndInvalidToken( $token ) {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( $this->anything() );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
-               $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 );
-               $otherUser->expects( $this->once() )
-                       ->method( 'getOption' )
-                       ->with( 'watchlisttoken' )
-                       ->willReturn( '0123456789abcdef' );
-
-               $this->setExpectedException( ApiUsageException::class, 'Incorrect watchlist token provided' );
-               $queryService->getWatchedItemsWithRecentChangeInfo(
-                       $user,
-                       [ 'watchlistOwner' => $otherUser, 'watchlistOwnerToken' => $token ]
-               );
-       }
-
-       public function testGetWatchedItemsForUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [ 'wl_user' => 1 ]
-                       )
-                       ->will( $this->returnValue( [
-                               $this->getFakeRow( [
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'Foo1',
-                                       'wl_notificationtimestamp' => '20151212010101',
-                               ] ),
-                               $this->getFakeRow( [
-                                       'wl_namespace' => 1,
-                                       'wl_title' => 'Foo2',
-                                       'wl_notificationtimestamp' => null,
-                               ] ),
-                       ] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $items = $queryService->getWatchedItemsForUser( $user );
-
-               $this->assertInternalType( 'array', $items );
-               $this->assertCount( 2, $items );
-               $this->assertContainsOnlyInstancesOf( WatchedItem::class, $items );
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
-                       $items[0]
-               );
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
-                       $items[1]
-               );
-       }
-
-       public function provideGetWatchedItemsForUserOptions() {
-               return [
-                       [
-                               [ 'namespaceIds' => [ 0, 1 ], ],
-                               [ 'wl_namespace' => [ 0, 1 ], ],
-                               []
-                       ],
-                       [
-                               [ 'sort' => WatchedItemQueryService::SORT_ASC, ],
-                               [],
-                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
-                       ],
-                       [
-                               [
-                                       'namespaceIds' => [ 0 ],
-                                       'sort' => WatchedItemQueryService::SORT_ASC,
-                               ],
-                               [ 'wl_namespace' => [ 0 ], ],
-                               [ 'ORDER BY' => 'wl_title ASC' ]
-                       ],
-                       [
-                               [ 'limit' => 10 ],
-                               [],
-                               [ 'LIMIT' => 10 ]
-                       ],
-                       [
-                               [
-                                       'namespaceIds' => [ 0, "1; DROP TABLE watchlist;\n--" ],
-                                       'limit' => "10; DROP TABLE watchlist;\n--",
-                               ],
-                               [ 'wl_namespace' => [ 0, 1 ], ],
-                               [ 'LIMIT' => 10 ]
-                       ],
-                       [
-                               [ 'filter' => WatchedItemQueryService::FILTER_CHANGED ],
-                               [ 'wl_notificationtimestamp IS NOT NULL' ],
-                               []
-                       ],
-                       [
-                               [ 'filter' => WatchedItemQueryService::FILTER_NOT_CHANGED ],
-                               [ 'wl_notificationtimestamp IS NULL' ],
-                               []
-                       ],
-                       [
-                               [ 'sort' => WatchedItemQueryService::SORT_DESC, ],
-                               [],
-                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
-                       ],
-                       [
-                               [
-                                       'namespaceIds' => [ 0 ],
-                                       'sort' => WatchedItemQueryService::SORT_DESC,
-                               ],
-                               [ 'wl_namespace' => [ 0 ], ],
-                               [ 'ORDER BY' => 'wl_title DESC' ]
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideGetWatchedItemsForUserOptions
-        */
-       public function testGetWatchedItemsForUser_optionsAndEmptyResult(
-               array $options,
-               array $expectedConds,
-               array $expectedDbOptions
-       ) {
-               $mockDb = $this->getMockDb();
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $expectedConds = array_merge( [ 'wl_user' => 1 ], $expectedConds );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               $expectedConds,
-                               $this->isType( 'string' ),
-                               $expectedDbOptions
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-
-               $items = $queryService->getWatchedItemsForUser( $user, $options );
-               $this->assertEmpty( $items );
-       }
-
-       public function provideGetWatchedItemsForUser_fromUntilStartFromOptions() {
-               return [
-                       [
-                               [
-                                       'from' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_ASC
-                               ],
-                               [ "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))", ],
-                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
-                       ],
-                       [
-                               [
-                                       'from' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_DESC,
-                               ],
-                               [ "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))", ],
-                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
-                       ],
-                       [
-                               [
-                                       'until' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_ASC
-                               ],
-                               [ "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))", ],
-                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
-                       ],
-                       [
-                               [
-                                       'until' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_DESC
-                               ],
-                               [ "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))", ],
-                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
-                       ],
-                       [
-                               [
-                                       'from' => new TitleValue( 0, 'AnotherDbKey' ),
-                                       'until' => new TitleValue( 0, 'SomeOtherDbKey' ),
-                                       'startFrom' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_ASC
-                               ],
-                               [
-                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'AnotherDbKey'))",
-                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeOtherDbKey'))",
-                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))",
-                               ],
-                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
-                       ],
-                       [
-                               [
-                                       'from' => new TitleValue( 0, 'SomeOtherDbKey' ),
-                                       'until' => new TitleValue( 0, 'AnotherDbKey' ),
-                                       'startFrom' => new TitleValue( 0, 'SomeDbKey' ),
-                                       'sort' => WatchedItemQueryService::SORT_DESC
-                               ],
-                               [
-                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeOtherDbKey'))",
-                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'AnotherDbKey'))",
-                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))",
-                               ],
-                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideGetWatchedItemsForUser_fromUntilStartFromOptions
-        */
-       public function testGetWatchedItemsForUser_fromUntilStartFromOptions(
-               array $options,
-               array $expectedConds,
-               array $expectedDbOptions
-       ) {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $expectedConds = array_merge( [ 'wl_user' => 1 ], $expectedConds );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->any() )
-                       ->method( 'addQuotes' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return "'$value'";
-                       } ) );
-               $mockDb->expects( $this->any() )
-                       ->method( 'makeList' )
-                       ->with(
-                               $this->isType( 'array' ),
-                               $this->isType( 'int' )
-                       )
-                       ->will( $this->returnCallback( function ( $a, $conj ) {
-                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
-                               return join( $sqlConj, array_map( function ( $s ) {
-                                       return '(' . $s . ')';
-                               }, $a
-                               ) );
-                       } ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               $expectedConds,
-                               $this->isType( 'string' ),
-                               $expectedDbOptions
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-
-               $items = $queryService->getWatchedItemsForUser( $user, $options );
-               $this->assertEmpty( $items );
-       }
-
-       public function getWatchedItemsForUserInvalidOptionsProvider() {
-               return [
-                       [
-                               [ 'sort' => 'foo' ],
-                               'Bad value for parameter $options[\'sort\']'
-                       ],
-                       [
-                               [ 'filter' => 'foo' ],
-                               'Bad value for parameter $options[\'filter\']'
-                       ],
-                       [
-                               [ 'from' => new TitleValue( 0, 'SomeDbKey' ), ],
-                               'Bad value for parameter $options[\'sort\']: must be provided'
-                       ],
-                       [
-                               [ 'until' => new TitleValue( 0, 'SomeDbKey' ), ],
-                               'Bad value for parameter $options[\'sort\']: must be provided'
-                       ],
-                       [
-                               [ 'startFrom' => new TitleValue( 0, 'SomeDbKey' ), ],
-                               'Bad value for parameter $options[\'sort\']: must be provided'
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider getWatchedItemsForUserInvalidOptionsProvider
-        */
-       public function testGetWatchedItemsForUser_invalidOptionThrowsException(
-               array $options,
-               $expectedInExceptionMessage
-       ) {
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $this->getMockDb() ) );
-
-               $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage );
-               $queryService->getWatchedItemsForUser( $this->getMockNonAnonUserWithId( 1 ), $options );
-       }
-
-       public function testGetWatchedItemsForUser_userNotAllowedToViewWatchlist() {
-               $mockDb = $this->getMockDb();
-
-               $mockDb->expects( $this->never() )
-                       ->method( $this->anything() );
-
-               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
-
-               $items = $queryService->getWatchedItemsForUser( $this->getMockAnonUser() );
-               $this->assertEmpty( $items );
-       }
-
-}
diff --git a/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php b/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php
deleted file mode 100644 (file)
index 61b62aa..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-
-use MediaWiki\MediaWikiServices;
-
-/**
- * @author Addshore
- *
- * @group Database
- *
- * @covers WatchedItemStore
- */
-class WatchedItemStoreIntegrationTest extends MediaWikiTestCase {
-
-       public function setUp() {
-               parent::setUp();
-               self::$users['WatchedItemStoreIntegrationTestUser']
-                       = new TestUser( 'WatchedItemStoreIntegrationTestUser' );
-       }
-
-       private function getUser() {
-               return self::$users['WatchedItemStoreIntegrationTestUser']->getUser();
-       }
-
-       public function testWatchAndUnWatchItem() {
-               $user = $this->getUser();
-               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
-               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-               // Cleanup after previous tests
-               $store->removeWatch( $user, $title );
-               $initialWatchers = $store->countWatchers( $title );
-               $initialUserWatchedItems = $store->countWatchedItems( $user );
-
-               $this->assertFalse(
-                       $store->isWatched( $user, $title ),
-                       'Page should not initially be watched'
-               );
-
-               $store->addWatch( $user, $title );
-               $this->assertTrue(
-                       $store->isWatched( $user, $title ),
-                       'Page should be watched'
-               );
-               $this->assertEquals( $initialUserWatchedItems + 1, $store->countWatchedItems( $user ) );
-               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
-               $this->assertCount( $initialUserWatchedItems + 1, $watchedItemsForUser );
-               $watchedItemsForUserHasExpectedItem = false;
-               foreach ( $watchedItemsForUser as $watchedItem ) {
-                       if (
-                               $watchedItem->getUser()->equals( $user ) &&
-                               $watchedItem->getLinkTarget() == $title->getTitleValue()
-                       ) {
-                               $watchedItemsForUserHasExpectedItem = true;
-                       }
-               }
-               $this->assertTrue(
-                       $watchedItemsForUserHasExpectedItem,
-                       'getWatchedItemsForUser should contain the page'
-               );
-               $this->assertEquals( $initialWatchers + 1, $store->countWatchers( $title ) );
-               $this->assertEquals(
-                       $initialWatchers + 1,
-                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
-               );
-               $this->assertEquals(
-                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialWatchers + 1 ] ],
-                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 1 ] )
-               );
-               $this->assertEquals(
-                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
-                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 2 ] )
-               );
-               $this->assertEquals(
-                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
-                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
-               );
-
-               $store->removeWatch( $user, $title );
-               $this->assertFalse(
-                       $store->isWatched( $user, $title ),
-                       'Page should be unwatched'
-               );
-               $this->assertEquals( $initialUserWatchedItems, $store->countWatchedItems( $user ) );
-               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
-               $this->assertCount( $initialUserWatchedItems, $watchedItemsForUser );
-               $watchedItemsForUserHasExpectedItem = false;
-               foreach ( $watchedItemsForUser as $watchedItem ) {
-                       if (
-                               $watchedItem->getUser()->equals( $user ) &&
-                               $watchedItem->getLinkTarget() == $title->getTitleValue()
-                       ) {
-                               $watchedItemsForUserHasExpectedItem = true;
-                       }
-               }
-               $this->assertFalse(
-                       $watchedItemsForUserHasExpectedItem,
-                       'getWatchedItemsForUser should not contain the page'
-               );
-               $this->assertEquals( $initialWatchers, $store->countWatchers( $title ) );
-               $this->assertEquals(
-                       $initialWatchers,
-                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
-               );
-               $this->assertEquals(
-                       [ $title->getNamespace() => [ $title->getDBkey() => false ] ],
-                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
-               );
-       }
-
-       public function testUpdateResetAndSetNotificationTimestamp() {
-               $user = $this->getUser();
-               $otherUser = ( new TestUser( 'WatchedItemStoreIntegrationTestUser_otherUser' ) )->getUser();
-               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
-               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-               $store->addWatch( $user, $title );
-               $this->assertNull( $store->loadWatchedItem( $user, $title )->getNotificationTimestamp() );
-               $initialVisitingWatchers = $store->countVisitingWatchers( $title, '20150202020202' );
-               $initialUnreadNotifications = $store->countUnreadNotifications( $user );
-
-               $store->updateNotificationTimestamp( $otherUser, $title, '20150202010101' );
-               $this->assertEquals(
-                       '20150202010101',
-                       $store->loadWatchedItem( $user, $title )->getNotificationTimestamp()
-               );
-               $this->assertEquals(
-                       [ $title->getNamespace() => [ $title->getDBkey() => '20150202010101' ] ],
-                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
-               );
-               $this->assertEquals(
-                       $initialVisitingWatchers - 1,
-                       $store->countVisitingWatchers( $title, '20150202020202' )
-               );
-               $this->assertEquals(
-                       $initialVisitingWatchers - 1,
-                       $store->countVisitingWatchersMultiple(
-                               [ [ $title, '20150202020202' ] ]
-                       )[$title->getNamespace()][$title->getDBkey()]
-               );
-               $this->assertEquals(
-                       $initialUnreadNotifications + 1,
-                       $store->countUnreadNotifications( $user )
-               );
-               $this->assertSame(
-                       true,
-                       $store->countUnreadNotifications( $user, $initialUnreadNotifications + 1 )
-               );
-
-               $this->assertTrue( $store->resetNotificationTimestamp( $user, $title ) );
-               $this->assertNull( $store->getWatchedItem( $user, $title )->getNotificationTimestamp() );
-               $this->assertEquals(
-                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
-                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
-               );
-               $this->assertEquals(
-                       $initialVisitingWatchers,
-                       $store->countVisitingWatchers( $title, '20150202020202' )
-               );
-               $this->assertEquals(
-                       $initialVisitingWatchers,
-                       $store->countVisitingWatchersMultiple(
-                               [ [ $title, '20150202020202' ] ]
-                       )[$title->getNamespace()][$title->getDBkey()]
-               );
-               $this->assertEquals(
-                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialVisitingWatchers ] ],
-                       $store->countVisitingWatchersMultiple(
-                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers
-                       )
-               );
-               $this->assertEquals(
-                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
-                       $store->countVisitingWatchersMultiple(
-                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers + 1
-                       )
-               );
-
-               // setNotificationTimestampsForUser specifying a title
-               $this->assertTrue(
-                       $store->setNotificationTimestampsForUser( $user, '20200202020202', [ $title ] )
-               );
-               $this->assertEquals(
-                       '20200202020202',
-                       $store->getWatchedItem( $user, $title )->getNotificationTimestamp()
-               );
-
-               // setNotificationTimestampsForUser not specifying a title
-               $this->assertTrue(
-                       $store->setNotificationTimestampsForUser( $user, '20210202020202' )
-               );
-               $this->assertEquals(
-                       '20210202020202',
-                       $store->getWatchedItem( $user, $title )->getNotificationTimestamp()
-               );
-       }
-
-       public function testDuplicateAllAssociatedEntries() {
-               $user = $this->getUser();
-               $titleOld = Title::newFromText( 'WatchedItemStoreIntegrationTestPageOld' );
-               $titleNew = Title::newFromText( 'WatchedItemStoreIntegrationTestPageNew' );
-               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-               $store->addWatch( $user, $titleOld->getSubjectPage() );
-               $store->addWatch( $user, $titleOld->getTalkPage() );
-               // Cleanup after previous tests
-               $store->removeWatch( $user, $titleNew->getSubjectPage() );
-               $store->removeWatch( $user, $titleNew->getTalkPage() );
-
-               $store->duplicateAllAssociatedEntries( $titleOld, $titleNew );
-
-               $this->assertTrue( $store->isWatched( $user, $titleOld->getSubjectPage() ) );
-               $this->assertTrue( $store->isWatched( $user, $titleOld->getTalkPage() ) );
-               $this->assertTrue( $store->isWatched( $user, $titleNew->getSubjectPage() ) );
-               $this->assertTrue( $store->isWatched( $user, $titleNew->getTalkPage() ) );
-       }
-
-}
diff --git a/tests/phpunit/includes/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/WatchedItemStoreUnitTest.php
deleted file mode 100644 (file)
index 950e220..0000000
+++ /dev/null
@@ -1,2674 +0,0 @@
-<?php
-use MediaWiki\Linker\LinkTarget;
-use Wikimedia\ScopedCallback;
-
-/**
- * @author Addshore
- *
- * @covers WatchedItemStore
- */
-class WatchedItemStoreUnitTest extends MediaWikiTestCase {
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|IDatabase
-        */
-       private function getMockDb() {
-               return $this->createMock( IDatabase::class );
-       }
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
-        */
-       private function getMockLoadBalancer(
-               $mockDb,
-               $expectedConnectionType = null
-       ) {
-               $mock = $this->getMockBuilder( LoadBalancer::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               if ( $expectedConnectionType !== null ) {
-                       $mock->expects( $this->any() )
-                               ->method( 'getConnectionRef' )
-                               ->with( $expectedConnectionType )
-                               ->will( $this->returnValue( $mockDb ) );
-               } else {
-                       $mock->expects( $this->any() )
-                               ->method( 'getConnectionRef' )
-                               ->will( $this->returnValue( $mockDb ) );
-               }
-               return $mock;
-       }
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|HashBagOStuff
-        */
-       private function getMockCache() {
-               $mock = $this->getMockBuilder( HashBagOStuff::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               $mock->expects( $this->any() )
-                       ->method( 'makeKey' )
-                       ->will( $this->returnCallback( function () {
-                               return implode( ':', func_get_args() );
-                       } ) );
-               return $mock;
-       }
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|ReadOnlyMode
-        */
-       private function getMockReadOnlyMode( $readOnly = false ) {
-               $mock = $this->getMockBuilder( ReadOnlyMode::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               $mock->expects( $this->any() )
-                       ->method( 'isReadOnly' )
-                       ->will( $this->returnValue( $readOnly ) );
-               return $mock;
-       }
-
-       /**
-        * @param int $id
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockNonAnonUserWithId( $id ) {
-               $mock = $this->createMock( User::class );
-               $mock->expects( $this->any() )
-                       ->method( 'isAnon' )
-                       ->will( $this->returnValue( false ) );
-               $mock->expects( $this->any() )
-                       ->method( 'getId' )
-                       ->will( $this->returnValue( $id ) );
-               return $mock;
-       }
-
-       /**
-        * @return User
-        */
-       private function getAnonUser() {
-               return User::newFromName( 'Anon_User' );
-       }
-
-       private function getFakeRow( array $rowValues ) {
-               $fakeRow = new stdClass();
-               foreach ( $rowValues as $valueName => $value ) {
-                       $fakeRow->$valueName = $value;
-               }
-               return $fakeRow;
-       }
-
-       private function newWatchedItemStore( LoadBalancer $loadBalancer, HashBagOStuff $cache,
-               ReadOnlyMode $readOnlyMode
-       ) {
-               return new WatchedItemStore(
-                       $loadBalancer,
-                       $cache,
-                       $readOnlyMode
-               );
-       }
-
-       public function testCountWatchedItems() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectField' )
-                       ->with(
-                               'watchlist',
-                               'COUNT(*)',
-                               [
-                                       'wl_user' => $user->getId(),
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 12 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals( 12, $store->countWatchedItems( $user ) );
-       }
-
-       public function testCountWatchers() {
-               $titleValue = new TitleValue( 0, 'SomeDbKey' );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectField' )
-                       ->with(
-                               'watchlist',
-                               'COUNT(*)',
-                               [
-                                       'wl_namespace' => $titleValue->getNamespace(),
-                                       'wl_title' => $titleValue->getDBkey(),
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 7 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals( 7, $store->countWatchers( $titleValue ) );
-       }
-
-       public function testCountWatchersMultiple() {
-               $titleValues = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 0, 'OtherDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $mockDb = $this->getMockDb();
-
-               $dbResult = [
-                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
-                       ),
-               ];
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                               )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
-                               [ 'makeWhereFrom2d return value' ],
-                               $this->isType( 'string' ),
-                               [
-                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( $dbResult )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $expected = [
-                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
-                       1 => [ 'AnotherDbKey' => 500 ],
-               ];
-               $this->assertEquals( $expected, $store->countWatchersMultiple( $titleValues ) );
-       }
-
-       public function provideIntWithDbUnsafeVersion() {
-               return [
-                       [ 50 ],
-                       [ "50; DROP TABLE watchlist;\n--" ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideIntWithDbUnsafeVersion
-        */
-       public function testCountWatchersMultiple_withMinimumWatchers( $minWatchers ) {
-               $titleValues = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 0, 'OtherDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $mockDb = $this->getMockDb();
-
-               $dbResult = [
-                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
-                       ),
-               ];
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
-                               [ 'makeWhereFrom2d return value' ],
-                               $this->isType( 'string' ),
-                               [
-                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
-                                       'HAVING' => 'COUNT(*) >= 50',
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( $dbResult )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $expected = [
-                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
-                       1 => [ 'AnotherDbKey' => 500 ],
-               ];
-               $this->assertEquals(
-                       $expected,
-                       $store->countWatchersMultiple( $titleValues, [ 'minimumWatchers' => $minWatchers ] )
-               );
-       }
-
-       public function testCountVisitingWatchers() {
-               $titleValue = new TitleValue( 0, 'SomeDbKey' );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectField' )
-                       ->with(
-                               'watchlist',
-                               'COUNT(*)',
-                               [
-                                       'wl_namespace' => $titleValue->getNamespace(),
-                                       'wl_title' => $titleValue->getDBkey(),
-                                       'wl_notificationtimestamp >= \'TS111TS\' OR wl_notificationtimestamp IS NULL',
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 7 ) );
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'addQuotes' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return "'$value'";
-                       } ) );
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals( 7, $store->countVisitingWatchers( $titleValue, '111' ) );
-       }
-
-       public function testCountVisitingWatchersMultiple() {
-               $titleValuesWithThresholds = [
-                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
-                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
-                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
-               ];
-
-               $dbResult = [
-                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
-               ];
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 2 * 3 ) )
-                       ->method( 'addQuotes' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return "'$value'";
-                       } ) );
-               $mockDb->expects( $this->exactly( 3 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-               $mockDb->expects( $this->any() )
-                       ->method( 'makeList' )
-                       ->with(
-                               $this->isType( 'array' ),
-                               $this->isType( 'int' )
-                       )
-                       ->will( $this->returnCallback( function ( $a, $conj ) {
-                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
-                               return join( $sqlConj, array_map( function ( $s ) {
-                                       return '(' . $s . ')';
-                               }, $a
-                               ) );
-                       } ) );
-               $mockDb->expects( $this->never() )
-                       ->method( 'makeWhereFrom2d' );
-
-               $expectedCond =
-                       '((wl_namespace = 0) AND (' .
-                       "(((wl_title = 'SomeDbKey') AND (" .
-                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
-                       ')) OR (' .
-                       "(wl_title = 'OtherDbKey') AND (" .
-                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
-                       '))))' .
-                       ') OR ((wl_namespace = 1) AND (' .
-                       "(((wl_title = 'AnotherDbKey') AND (".
-                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
-                       ')))))';
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
-                               $expectedCond,
-                               $this->isType( 'string' ),
-                               [
-                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( $dbResult )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $expected = [
-                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
-                       1 => [ 'AnotherDbKey' => 500 ],
-               ];
-               $this->assertEquals(
-                       $expected,
-                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
-               );
-       }
-
-       public function testCountVisitingWatchersMultiple_withMissingTargets() {
-               $titleValuesWithThresholds = [
-                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
-                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
-                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
-                       [ new TitleValue( 0, 'SomeNotExisitingDbKey' ), null ],
-                       [ new TitleValue( 0, 'OtherNotExisitingDbKey' ), null ],
-               ];
-
-               $dbResult = [
-                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
-                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
-                       $this->getFakeRow(
-                               [ 'wl_title' => 'SomeNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 100 ]
-                       ),
-                       $this->getFakeRow(
-                               [ 'wl_title' => 'OtherNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 200 ]
-                       ),
-               ];
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 2 * 3 ) )
-                       ->method( 'addQuotes' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return "'$value'";
-                       } ) );
-               $mockDb->expects( $this->exactly( 3 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-               $mockDb->expects( $this->any() )
-                       ->method( 'makeList' )
-                       ->with(
-                               $this->isType( 'array' ),
-                               $this->isType( 'int' )
-                       )
-                       ->will( $this->returnCallback( function ( $a, $conj ) {
-                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
-                               return join( $sqlConj, array_map( function ( $s ) {
-                                       return '(' . $s . ')';
-                               }, $a
-                               ) );
-                       } ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'SomeNotExisitingDbKey' => 1, 'OtherNotExisitingDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-
-               $expectedCond =
-                       '((wl_namespace = 0) AND (' .
-                       "(((wl_title = 'SomeDbKey') AND (" .
-                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
-                       ')) OR (' .
-                       "(wl_title = 'OtherDbKey') AND (" .
-                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
-                       '))))' .
-                       ') OR ((wl_namespace = 1) AND (' .
-                       "(((wl_title = 'AnotherDbKey') AND (".
-                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
-                       '))))' .
-                       ') OR ' .
-                       '(makeWhereFrom2d return value)';
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
-                               $expectedCond,
-                               $this->isType( 'string' ),
-                               [
-                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( $dbResult )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $expected = [
-                       0 => [
-                               'SomeDbKey' => 100, 'OtherDbKey' => 300,
-                               'SomeNotExisitingDbKey' => 100, 'OtherNotExisitingDbKey' => 200
-                       ],
-                       1 => [ 'AnotherDbKey' => 500 ],
-               ];
-               $this->assertEquals(
-                       $expected,
-                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
-               );
-       }
-
-       /**
-        * @dataProvider provideIntWithDbUnsafeVersion
-        */
-       public function testCountVisitingWatchersMultiple_withMinimumWatchers( $minWatchers ) {
-               $titleValuesWithThresholds = [
-                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
-                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
-                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
-               ];
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->any() )
-                       ->method( 'makeList' )
-                       ->will( $this->returnValue( 'makeList return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
-                               'makeList return value',
-                               $this->isType( 'string' ),
-                               [
-                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
-                                       'HAVING' => 'COUNT(*) >= 50',
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( [] )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $expected = [
-                       0 => [ 'SomeDbKey' => 0, 'OtherDbKey' => 0 ],
-                       1 => [ 'AnotherDbKey' => 0 ],
-               ];
-               $this->assertEquals(
-                       $expected,
-                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds, $minWatchers )
-               );
-       }
-
-       public function testCountUnreadNotifications() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectRowCount' )
-                       ->with(
-                               'watchlist',
-                               '1',
-                               [
-                                       "wl_notificationtimestamp IS NOT NULL",
-                                       'wl_user' => 1,
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 9 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals( 9, $store->countUnreadNotifications( $user ) );
-       }
-
-       /**
-        * @dataProvider provideIntWithDbUnsafeVersion
-        */
-       public function testCountUnreadNotifications_withUnreadLimit_overLimit( $limit ) {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectRowCount' )
-                       ->with(
-                               'watchlist',
-                               '1',
-                               [
-                                       "wl_notificationtimestamp IS NOT NULL",
-                                       'wl_user' => 1,
-                               ],
-                               $this->isType( 'string' ),
-                               [ 'LIMIT' => 50 ]
-                       )
-                       ->will( $this->returnValue( 50 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertSame(
-                       true,
-                       $store->countUnreadNotifications( $user, $limit )
-               );
-       }
-
-       /**
-        * @dataProvider provideIntWithDbUnsafeVersion
-        */
-       public function testCountUnreadNotifications_withUnreadLimit_underLimit( $limit ) {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'selectRowCount' )
-                       ->with(
-                               'watchlist',
-                               '1',
-                               [
-                                       "wl_notificationtimestamp IS NOT NULL",
-                                       'wl_user' => 1,
-                               ],
-                               $this->isType( 'string' ),
-                               [ 'LIMIT' => 50 ]
-                       )
-                       ->will( $this->returnValue( 9 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       9,
-                       $store->countUnreadNotifications( $user, $limit )
-               );
-       }
-
-       public function testDuplicateEntry_nothingToDuplicate() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'Old_Title',
-                               ],
-                               'WatchedItemStore::duplicateEntry',
-                               [ 'FOR UPDATE' ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->duplicateEntry(
-                       Title::newFromText( 'Old_Title' ),
-                       Title::newFromText( 'New_Title' )
-               );
-       }
-
-       public function testDuplicateEntry_somethingToDuplicate() {
-               $fakeRows = [
-                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
-                       $this->getFakeRow( [ 'wl_user' => 2, 'wl_notificationtimestamp' => null ] ),
-               ];
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->at( 0 ) )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'Old_Title',
-                               ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
-               $mockDb->expects( $this->at( 1 ) )
-                       ->method( 'replace' )
-                       ->with(
-                               'watchlist',
-                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
-                               [
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => 0,
-                                               'wl_title' => 'New_Title',
-                                               'wl_notificationtimestamp' => '20151212010101',
-                                       ],
-                                       [
-                                               'wl_user' => 2,
-                                               'wl_namespace' => 0,
-                                               'wl_title' => 'New_Title',
-                                               'wl_notificationtimestamp' => null,
-                                       ],
-                               ],
-                               $this->isType( 'string' )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->duplicateEntry(
-                       Title::newFromText( 'Old_Title' ),
-                       Title::newFromText( 'New_Title' )
-               );
-       }
-
-       public function testDuplicateAllAssociatedEntries_nothingToDuplicate() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->at( 0 ) )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'Old_Title',
-                               ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
-               $mockDb->expects( $this->at( 1 ) )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => 1,
-                                       'wl_title' => 'Old_Title',
-                               ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->duplicateAllAssociatedEntries(
-                       Title::newFromText( 'Old_Title' ),
-                       Title::newFromText( 'New_Title' )
-               );
-       }
-
-       public function provideLinkTargetPairs() {
-               return [
-                       [ Title::newFromText( 'Old_Title' ), Title::newFromText( 'New_Title' ) ],
-                       [ new TitleValue( 0, 'Old_Title' ),  new TitleValue( 0, 'New_Title' ) ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideLinkTargetPairs
-        */
-       public function testDuplicateAllAssociatedEntries_somethingToDuplicate(
-               LinkTarget $oldTarget,
-               LinkTarget $newTarget
-       ) {
-               $fakeRows = [
-                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
-               ];
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->at( 0 ) )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => $oldTarget->getNamespace(),
-                                       'wl_title' => $oldTarget->getDBkey(),
-                               ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
-               $mockDb->expects( $this->at( 1 ) )
-                       ->method( 'replace' )
-                       ->with(
-                               'watchlist',
-                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
-                               [
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => $newTarget->getNamespace(),
-                                               'wl_title' => $newTarget->getDBkey(),
-                                               'wl_notificationtimestamp' => '20151212010101',
-                                       ],
-                               ],
-                               $this->isType( 'string' )
-                       );
-               $mockDb->expects( $this->at( 2 ) )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user',
-                                       'wl_notificationtimestamp',
-                               ],
-                               [
-                                       'wl_namespace' => $oldTarget->getNamespace() + 1,
-                                       'wl_title' => $oldTarget->getDBkey(),
-                               ]
-                       )
-                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
-               $mockDb->expects( $this->at( 3 ) )
-                       ->method( 'replace' )
-                       ->with(
-                               'watchlist',
-                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
-                               [
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => $newTarget->getNamespace() + 1,
-                                               'wl_title' => $newTarget->getDBkey(),
-                                               'wl_notificationtimestamp' => '20151212010101',
-                                       ],
-                               ],
-                               $this->isType( 'string' )
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->duplicateAllAssociatedEntries(
-                       $oldTarget,
-                       $newTarget
-               );
-       }
-
-       public function testAddWatch_nonAnonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'insert' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => 0,
-                                               'wl_title' => 'Some_Page',
-                                               'wl_notificationtimestamp' => null,
-                                       ]
-                               ]
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with( '0:Some_Page:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->addWatch(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       Title::newFromText( 'Some_Page' )
-               );
-       }
-
-       public function testAddWatch_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'insert' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $store->addWatch(
-                       $this->getAnonUser(),
-                       Title::newFromText( 'Some_Page' )
-               );
-       }
-
-       public function testAddWatchBatchForUser_readOnlyDBReturnsFalse() {
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $this->getMockDb() ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode( true )
-               );
-
-               $this->assertFalse(
-                       $store->addWatchBatchForUser(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               [ new TitleValue( 0, 'Some_Page' ), new TitleValue( 1, 'Some_Page' ) ]
-                       )
-               );
-       }
-
-       public function testAddWatchBatchForUser_nonAnonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'insert' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => 0,
-                                               'wl_title' => 'Some_Page',
-                                               'wl_notificationtimestamp' => null,
-                                       ],
-                                       [
-                                               'wl_user' => 1,
-                                               'wl_namespace' => 1,
-                                               'wl_title' => 'Some_Page',
-                                               'wl_notificationtimestamp' => null,
-                                       ]
-                               ]
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->exactly( 2 ) )
-                       ->method( 'delete' );
-               $mockCache->expects( $this->at( 1 ) )
-                       ->method( 'delete' )
-                       ->with( '0:Some_Page:1' );
-               $mockCache->expects( $this->at( 3 ) )
-                       ->method( 'delete' )
-                       ->with( '1:Some_Page:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $mockUser = $this->getMockNonAnonUserWithId( 1 );
-
-               $this->assertTrue(
-                       $store->addWatchBatchForUser(
-                               $mockUser,
-                               [ new TitleValue( 0, 'Some_Page' ), new TitleValue( 1, 'Some_Page' ) ]
-                       )
-               );
-       }
-
-       public function testAddWatchBatchForUser_anonymousUsersAreSkipped() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'insert' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->addWatchBatchForUser(
-                               $this->getAnonUser(),
-                               [ new TitleValue( 0, 'Other_Page' ) ]
-                       )
-               );
-       }
-
-       public function testAddWatchBatchReturnsTrue_whenGivenEmptyList() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'insert' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->addWatchBatchForUser( $user, [] )
-               );
-       }
-
-       public function testLoadWatchedItem_existingItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->once() )
-                       ->method( 'set' )
-                       ->with(
-                               '0:SomeDbKey:1'
-                       );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $watchedItem = $store->loadWatchedItem(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       new TitleValue( 0, 'SomeDbKey' )
-               );
-               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
-               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
-               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
-               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
-       }
-
-       public function testLoadWatchedItem_noItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->loadWatchedItem(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testLoadWatchedItem_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->loadWatchedItem(
-                               $this->getAnonUser(),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testRemoveWatch_existingItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       );
-               $mockDb->expects( $this->once() )
-                       ->method( 'affectedRows' )
-                       ->will( $this->returnValue( 1 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->removeWatch(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testRemoveWatch_noItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with(
-                               'watchlist',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       );
-               $mockDb->expects( $this->once() )
-                       ->method( 'affectedRows' )
-                       ->will( $this->returnValue( 0 ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->removeWatch(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testRemoveWatch_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->removeWatch(
-                               $this->getAnonUser(),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testGetWatchedItem_existingItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with(
-                               '0:SomeDbKey:1'
-                       )
-                       ->will( $this->returnValue( null ) );
-               $mockCache->expects( $this->once() )
-                       ->method( 'set' )
-                       ->with(
-                               '0:SomeDbKey:1'
-                       );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $watchedItem = $store->getWatchedItem(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       new TitleValue( 0, 'SomeDbKey' )
-               );
-               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
-               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
-               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
-               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
-       }
-
-       public function testGetWatchedItem_cachedItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockUser = $this->getMockNonAnonUserWithId( 1 );
-               $linkTarget = new TitleValue( 0, 'SomeDbKey' );
-               $cachedItem = new WatchedItem( $mockUser, $linkTarget, '20151212010101' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with(
-                               '0:SomeDbKey:1'
-                       )
-                       ->will( $this->returnValue( $cachedItem ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       $cachedItem,
-                       $store->getWatchedItem(
-                               $mockUser,
-                               $linkTarget
-                       )
-               );
-       }
-
-       public function testGetWatchedItem_noItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' )
-                       ->will( $this->returnValue( false ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->getWatchedItem(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testGetWatchedItem_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->getWatchedItem(
-                               $this->getAnonUser(),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testGetWatchedItemsForUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [ 'wl_user' => 1 ]
-                       )
-                       ->will( $this->returnValue( [
-                               $this->getFakeRow( [
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'Foo1',
-                                       'wl_notificationtimestamp' => '20151212010101',
-                               ] ),
-                               $this->getFakeRow( [
-                                       'wl_namespace' => 1,
-                                       'wl_title' => 'Foo2',
-                                       'wl_notificationtimestamp' => null,
-                               ] ),
-                       ] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $watchedItems = $store->getWatchedItemsForUser( $user );
-
-               $this->assertInternalType( 'array', $watchedItems );
-               $this->assertCount( 2, $watchedItems );
-               foreach ( $watchedItems as $watchedItem ) {
-                       $this->assertInstanceOf( 'WatchedItem', $watchedItem );
-               }
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
-                       $watchedItems[0]
-               );
-               $this->assertEquals(
-                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
-                       $watchedItems[1]
-               );
-       }
-
-       public function provideDbTypes() {
-               return [
-                       [ false, DB_REPLICA ],
-                       [ true, DB_MASTER ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideDbTypes
-        */
-       public function testGetWatchedItemsForUser_optionsAndEmptyResult( $forWrite, $dbType ) {
-               $mockDb = $this->getMockDb();
-               $mockCache = $this->getMockCache();
-               $mockLoadBalancer = $this->getMockLoadBalancer( $mockDb, $dbType );
-               $user = $this->getMockNonAnonUserWithId( 1 );
-
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [ 'wl_user' => 1 ],
-                               $this->isType( 'string' ),
-                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $store = $this->newWatchedItemStore(
-                       $mockLoadBalancer,
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $watchedItems = $store->getWatchedItemsForUser(
-                       $user,
-                       [ 'forWrite' => $forWrite, 'sort' => WatchedItemStore::SORT_ASC ]
-               );
-               $this->assertEquals( [], $watchedItems );
-       }
-
-       public function testGetWatchedItemsForUser_badSortOptionThrowsException() {
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $this->getMockDb() ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->setExpectedException( 'InvalidArgumentException' );
-               $store->getWatchedItemsForUser(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       [ 'sort' => 'foo' ]
-               );
-       }
-
-       public function testIsWatchedItem_existingItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' )
-                       ->will( $this->returnValue( false ) );
-               $mockCache->expects( $this->once() )
-                       ->method( 'set' )
-                       ->with(
-                               '0:SomeDbKey:1'
-                       );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->isWatched(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testIsWatchedItem_noItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' )
-                       ->will( $this->returnValue( false ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->isWatched(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testIsWatchedItem_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->isWatched(
-                               $this->getAnonUser(),
-                               new TitleValue( 0, 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testGetNotificationTimestampsBatch() {
-               $targets = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $mockDb = $this->getMockDb();
-               $dbResult = [
-                       $this->getFakeRow( [
-                               'wl_namespace' => 0,
-                               'wl_title' => 'SomeDbKey',
-                               'wl_notificationtimestamp' => '20151212010101',
-                       ] ),
-                       $this->getFakeRow(
-                               [
-                                       'wl_namespace' => 1,
-                                       'wl_title' => 'AnotherDbKey',
-                                       'wl_notificationtimestamp' => null,
-                               ]
-                       ),
-               ];
-
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'SomeDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [
-                                       'makeWhereFrom2d return value',
-                                       'wl_user' => 1
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( $dbResult ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->exactly( 2 ) )
-                       ->method( 'get' )
-                       ->withConsecutive(
-                               [ '0:SomeDbKey:1' ],
-                               [ '1:AnotherDbKey:1' ]
-                       )
-                       ->will( $this->returnValue( null ) );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [
-                               0 => [ 'SomeDbKey' => '20151212010101', ],
-                               1 => [ 'AnotherDbKey' => null, ],
-                       ],
-                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
-               );
-       }
-
-       public function testGetNotificationTimestampsBatch_notWatchedTarget() {
-               $targets = [
-                       new TitleValue( 0, 'OtherDbKey' ),
-               ];
-
-               $mockDb = $this->getMockDb();
-
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'OtherDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [
-                                       'makeWhereFrom2d return value',
-                                       'wl_user' => 1
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( $this->getFakeRow( [] ) ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with( '0:OtherDbKey:1' )
-                       ->will( $this->returnValue( null ) );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [
-                               0 => [ 'OtherDbKey' => false, ],
-                       ],
-                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
-               );
-       }
-
-       public function testGetNotificationTimestampsBatch_cachedItem() {
-               $targets = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $cachedItem = new WatchedItem( $user, $targets[0], '20151212010101' );
-
-               $mockDb = $this->getMockDb();
-
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ 1 => [ 'AnotherDbKey' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'select' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
-                               [
-                                       'makeWhereFrom2d return value',
-                                       'wl_user' => 1
-                               ],
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( [
-                               $this->getFakeRow(
-                                       [ 'wl_namespace' => 1, 'wl_title' => 'AnotherDbKey', 'wl_notificationtimestamp' => null, ]
-                               )
-                       ] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->at( 1 ) )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' )
-                       ->will( $this->returnValue( $cachedItem ) );
-               $mockCache->expects( $this->at( 3 ) )
-                       ->method( 'get' )
-                       ->with( '1:AnotherDbKey:1' )
-                       ->will( $this->returnValue( null ) );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [
-                               0 => [ 'SomeDbKey' => '20151212010101', ],
-                               1 => [ 'AnotherDbKey' => null, ],
-                       ],
-                       $store->getNotificationTimestampsBatch( $user, $targets )
-               );
-       }
-
-       public function testGetNotificationTimestampsBatch_allItemsCached() {
-               $targets = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $cachedItems = [
-                       new WatchedItem( $user, $targets[0], '20151212010101' ),
-                       new WatchedItem( $user, $targets[1], null ),
-               ];
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )->method( $this->anything() );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->at( 1 ) )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' )
-                       ->will( $this->returnValue( $cachedItems[0] ) );
-               $mockCache->expects( $this->at( 3 ) )
-                       ->method( 'get' )
-                       ->with( '1:AnotherDbKey:1' )
-                       ->will( $this->returnValue( $cachedItems[1] ) );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [
-                               0 => [ 'SomeDbKey' => '20151212010101', ],
-                               1 => [ 'AnotherDbKey' => null, ],
-                       ],
-                       $store->getNotificationTimestampsBatch( $user, $targets )
-               );
-       }
-
-       public function testGetNotificationTimestampsBatch_anonymousUser() {
-               $targets = [
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       new TitleValue( 1, 'AnotherDbKey' ),
-               ];
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )->method( $this->anything() );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( $this->anything() );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [
-                               0 => [ 'SomeDbKey' => false, ],
-                               1 => [ 'AnotherDbKey' => false, ],
-                       ],
-                       $store->getNotificationTimestampsBatch( $this->getAnonUser(), $targets )
-               );
-       }
-
-       public function testResetNotificationTimestamp_anonymousUser() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->resetNotificationTimestamp(
-                               $this->getAnonUser(),
-                               Title::newFromText( 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testResetNotificationTimestamp_noItem() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue( [] ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertFalse(
-                       $store->resetNotificationTimestamp(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               Title::newFromText( 'SomeDbKey' )
-                       )
-               );
-       }
-
-       public function testResetNotificationTimestamp_item() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $title = Title::newFromText( 'SomeDbKey' );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'set' )
-                       ->with(
-                               '0:SomeDbKey:1',
-                               $this->isInstanceOf( WatchedItem::class )
-                       );
-               $mockCache->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               // Note: This does not actually assert the job is correct
-               $callableCallCounter = 0;
-               $mockCallback = function ( $callable ) use ( &$callableCallCounter ) {
-                       $callableCallCounter++;
-                       $this->assertInternalType( 'callable', $callable );
-               };
-               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title
-                       )
-               );
-               $this->assertEquals( 1, $callableCallCounter );
-
-               ScopedCallback::consume( $scopedOverride );
-       }
-
-       public function testResetNotificationTimestamp_noItemForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $title = Title::newFromText( 'SomeDbKey' );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               // Note: This does not actually assert the job is correct
-               $callableCallCounter = 0;
-               $mockCallback = function ( $callable ) use ( &$callableCallCounter ) {
-                       $callableCallCounter++;
-                       $this->assertInternalType( 'callable', $callable );
-               };
-               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               'force'
-                       )
-               );
-               $this->assertEquals( 1, $callableCallCounter );
-
-               ScopedCallback::consume( $scopedOverride );
-       }
-
-       /**
-        * @param string $text
-        * @param int $ns
-        *
-        * @return PHPUnit_Framework_MockObject_MockObject|Title
-        */
-       private function getMockTitle( $text, $ns = 0 ) {
-               $title = $this->createMock( Title::class );
-               $title->expects( $this->any() )
-                       ->method( 'getText' )
-                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
-               $title->expects( $this->any() )
-                       ->method( 'getDbKey' )
-                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
-               $title->expects( $this->any() )
-                       ->method( 'getNamespace' )
-                       ->will( $this->returnValue( $ns ) );
-               return $title;
-       }
-
-       private function verifyCallbackJob(
-               $callback,
-               LinkTarget $expectedTitle,
-               $expectedUserId,
-               callable $notificationTimestampCondition
-       ) {
-               $this->assertInternalType( 'callable', $callback );
-
-               $callbackReflector = new ReflectionFunction( $callback );
-               $vars = $callbackReflector->getStaticVariables();
-               $this->assertArrayHasKey( 'job', $vars );
-               $this->assertInstanceOf( ActivityUpdateJob::class, $vars['job'] );
-
-               /** @var ActivityUpdateJob $job */
-               $job = $vars['job'];
-               $this->assertEquals( $expectedTitle->getDBkey(), $job->getTitle()->getDBkey() );
-               $this->assertEquals( $expectedTitle->getNamespace(), $job->getTitle()->getNamespace() );
-
-               $jobParams = $job->getParams();
-               $this->assertArrayHasKey( 'type', $jobParams );
-               $this->assertEquals( 'updateWatchlistNotification', $jobParams['type'] );
-               $this->assertArrayHasKey( 'userid', $jobParams );
-               $this->assertEquals( $expectedUserId, $jobParams['userid'] );
-               $this->assertArrayHasKey( 'notifTime', $jobParams );
-               $this->assertTrue( $notificationTimestampCondition( $jobParams['notifTime'] ) );
-       }
-
-       public function testResetNotificationTimestamp_oldidSpecifiedLatestRevisionForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $oldid = 22;
-               $title = $this->getMockTitle( 'SomeTitle' );
-               $title->expects( $this->once() )
-                       ->method( 'getNextRevisionID' )
-                       ->with( $oldid )
-                       ->will( $this->returnValue( false ) );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->never() )
-                       ->method( 'selectRow' );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $callableCallCounter = 0;
-               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
-                       function ( $callable ) use ( &$callableCallCounter, $title, $user ) {
-                               $callableCallCounter++;
-                               $this->verifyCallbackJob(
-                                       $callable,
-                                       $title,
-                                       $user->getId(),
-                                       function ( $time ) {
-                                               return $time === null;
-                                       }
-                               );
-                       }
-               );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               'force',
-                               $oldid
-                       )
-               );
-               $this->assertEquals( 1, $callableCallCounter );
-
-               ScopedCallback::consume( $scopedOverride );
-       }
-
-       public function testResetNotificationTimestamp_oldidSpecifiedNotLatestRevisionForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $oldid = 22;
-               $title = $this->getMockTitle( 'SomeDbKey' );
-               $title->expects( $this->once() )
-                       ->method( 'getNextRevisionID' )
-                       ->with( $oldid )
-                       ->will( $this->returnValue( 33 ) );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $addUpdateCallCounter = 0;
-               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
-                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
-                               $addUpdateCallCounter++;
-                               $this->verifyCallbackJob(
-                                       $callable,
-                                       $title,
-                                       $user->getId(),
-                                       function ( $time ) {
-                                               return $time !== null && $time > '20151212010101';
-                                       }
-                               );
-                       }
-               );
-
-               $getTimestampCallCounter = 0;
-               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
-                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
-                               $getTimestampCallCounter++;
-                               $this->assertEquals( $title, $titleParam );
-                               $this->assertEquals( $oldid, $oldidParam );
-                       }
-               );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               'force',
-                               $oldid
-                       )
-               );
-               $this->assertEquals( 1, $addUpdateCallCounter );
-               $this->assertEquals( 1, $getTimestampCallCounter );
-
-               ScopedCallback::consume( $scopedOverrideDeferred );
-               ScopedCallback::consume( $scopedOverrideRevision );
-       }
-
-       public function testResetNotificationTimestamp_notWatchedPageForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $oldid = 22;
-               $title = $this->getMockTitle( 'SomeDbKey' );
-               $title->expects( $this->once() )
-                       ->method( 'getNextRevisionID' )
-                       ->with( $oldid )
-                       ->will( $this->returnValue( 33 ) );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue( false ) );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $callableCallCounter = 0;
-               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
-                       function ( $callable ) use ( &$callableCallCounter, $title, $user ) {
-                               $callableCallCounter++;
-                               $this->verifyCallbackJob(
-                                       $callable,
-                                       $title,
-                                       $user->getId(),
-                                       function ( $time ) {
-                                               return $time === null;
-                                       }
-                               );
-                       }
-               );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               'force',
-                               $oldid
-                       )
-               );
-               $this->assertEquals( 1, $callableCallCounter );
-
-               ScopedCallback::consume( $scopedOverride );
-       }
-
-       public function testResetNotificationTimestamp_futureNotificationTimestampForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $oldid = 22;
-               $title = $this->getMockTitle( 'SomeDbKey' );
-               $title->expects( $this->once() )
-                       ->method( 'getNextRevisionID' )
-                       ->with( $oldid )
-                       ->will( $this->returnValue( 33 ) );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $addUpdateCallCounter = 0;
-               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
-                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
-                               $addUpdateCallCounter++;
-                               $this->verifyCallbackJob(
-                                       $callable,
-                                       $title,
-                                       $user->getId(),
-                                       function ( $time ) {
-                                               return $time === '30151212010101';
-                                       }
-                               );
-                       }
-               );
-
-               $getTimestampCallCounter = 0;
-               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
-                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
-                               $getTimestampCallCounter++;
-                               $this->assertEquals( $title, $titleParam );
-                               $this->assertEquals( $oldid, $oldidParam );
-                       }
-               );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               'force',
-                               $oldid
-                       )
-               );
-               $this->assertEquals( 1, $addUpdateCallCounter );
-               $this->assertEquals( 1, $getTimestampCallCounter );
-
-               ScopedCallback::consume( $scopedOverrideDeferred );
-               ScopedCallback::consume( $scopedOverrideRevision );
-       }
-
-       public function testResetNotificationTimestamp_futureNotificationTimestampNotForced() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $oldid = 22;
-               $title = $this->getMockTitle( 'SomeDbKey' );
-               $title->expects( $this->once() )
-                       ->method( 'getNextRevisionID' )
-                       ->with( $oldid )
-                       ->will( $this->returnValue( 33 ) );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->with(
-                               'watchlist',
-                               'wl_notificationtimestamp',
-                               [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
-                       ) );
-
-               $mockCache = $this->getMockCache();
-               $mockDb->expects( $this->never() )
-                       ->method( 'get' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'set' );
-               $mockDb->expects( $this->never() )
-                       ->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $addUpdateCallCounter = 0;
-               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
-                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
-                               $addUpdateCallCounter++;
-                               $this->verifyCallbackJob(
-                                       $callable,
-                                       $title,
-                                       $user->getId(),
-                                       function ( $time ) {
-                                               return $time === false;
-                                       }
-                               );
-                       }
-               );
-
-               $getTimestampCallCounter = 0;
-               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
-                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
-                               $getTimestampCallCounter++;
-                               $this->assertEquals( $title, $titleParam );
-                               $this->assertEquals( $oldid, $oldidParam );
-                       }
-               );
-
-               $this->assertTrue(
-                       $store->resetNotificationTimestamp(
-                               $user,
-                               $title,
-                               '',
-                               $oldid
-                       )
-               );
-               $this->assertEquals( 1, $addUpdateCallCounter );
-               $this->assertEquals( 1, $getTimestampCallCounter );
-
-               ScopedCallback::consume( $scopedOverrideDeferred );
-               ScopedCallback::consume( $scopedOverrideRevision );
-       }
-
-       public function testSetNotificationTimestampsForUser_anonUser() {
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $this->getMockDb() ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-               $this->assertFalse( $store->setNotificationTimestampsForUser( $this->getAnonUser(), '' ) );
-       }
-
-       public function testSetNotificationTimestampsForUser_allRows() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $timestamp = '20100101010101';
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'update' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_notificationtimestamp' => 'TS' . $timestamp . 'TS' ],
-                               [ 'wl_user' => 1 ]
-                       )
-                       ->will( $this->returnValue( true ) );
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->setNotificationTimestampsForUser( $user, $timestamp )
-               );
-       }
-
-       public function testSetNotificationTimestampsForUser_nullTimestamp() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $timestamp = null;
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'update' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_notificationtimestamp' => null ],
-                               [ 'wl_user' => 1 ]
-                       )
-                       ->will( $this->returnValue( true ) );
-               $mockDb->expects( $this->exactly( 0 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->setNotificationTimestampsForUser( $user, $timestamp )
-               );
-       }
-
-       public function testSetNotificationTimestampsForUser_specificTargets() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $timestamp = '20100101010101';
-               $targets = [ new TitleValue( 0, 'Foo' ), new TitleValue( 0, 'Bar' ) ];
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'update' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_notificationtimestamp' => 'TS' . $timestamp . 'TS' ],
-                               [ 'wl_user' => 1, 0 => 'makeWhereFrom2d return value' ]
-                       )
-                       ->will( $this->returnValue( true ) );
-               $mockDb->expects( $this->exactly( 1 ) )
-                       ->method( 'timestamp' )
-                       ->will( $this->returnCallback( function ( $value ) {
-                               return 'TS' . $value . 'TS';
-                       } ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'makeWhereFrom2d' )
-                       ->with(
-                               [ [ 'Foo' => 1, 'Bar' => 1 ] ],
-                               $this->isType( 'string' ),
-                               $this->isType( 'string' )
-                       )
-                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache(),
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertTrue(
-                       $store->setNotificationTimestampsForUser( $user, $timestamp, $targets )
-               );
-       }
-
-       public function testUpdateNotificationTimestamp_watchersExist() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectFieldValues' )
-                       ->with(
-                               'watchlist',
-                               'wl_user',
-                               [
-                                       'wl_user != 1',
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                                       'wl_notificationtimestamp IS NULL'
-                               ]
-                       )
-                       ->will( $this->returnValue( [ '2', '3' ] ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'update' )
-                       ->with(
-                               'watchlist',
-                               [ 'wl_notificationtimestamp' => null ],
-                               [
-                                       'wl_user' => [ 2, 3 ],
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                               ]
-                       );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $this->assertEquals(
-                       [ 2, 3 ],
-                       $store->updateNotificationTimestamp(
-                               $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' ),
-                               '20151212010101'
-                       )
-               );
-       }
-
-       public function testUpdateNotificationTimestamp_noWatchers() {
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectFieldValues' )
-                       ->with(
-                               'watchlist',
-                               'wl_user',
-                               [
-                                       'wl_user != 1',
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
-                                       'wl_notificationtimestamp IS NULL'
-                               ]
-                       )
-                       ->will(
-                               $this->returnValue( [] )
-                       );
-               $mockDb->expects( $this->never() )
-                       ->method( 'update' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->never() )->method( 'set' );
-               $mockCache->expects( $this->never() )->method( 'get' );
-               $mockCache->expects( $this->never() )->method( 'delete' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               $watchers = $store->updateNotificationTimestamp(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       new TitleValue( 0, 'SomeDbKey' ),
-                       '20151212010101'
-               );
-               $this->assertInternalType( 'array', $watchers );
-               $this->assertEmpty( $watchers );
-       }
-
-       public function testUpdateNotificationTimestamp_clearsCachedItems() {
-               $user = $this->getMockNonAnonUserWithId( 1 );
-               $titleValue = new TitleValue( 0, 'SomeDbKey' );
-
-               $mockDb = $this->getMockDb();
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectRow' )
-                       ->will( $this->returnValue(
-                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
-                       ) );
-               $mockDb->expects( $this->once() )
-                       ->method( 'selectFieldValues' )
-                       ->will(
-                               $this->returnValue( [ '2', '3' ] )
-                       );
-               $mockDb->expects( $this->once() )
-                       ->method( 'update' );
-
-               $mockCache = $this->getMockCache();
-               $mockCache->expects( $this->once() )
-                       ->method( 'set' )
-                       ->with( '0:SomeDbKey:1', $this->isType( 'object' ) );
-               $mockCache->expects( $this->once() )
-                       ->method( 'get' )
-                       ->with( '0:SomeDbKey:1' );
-               $mockCache->expects( $this->once() )
-                       ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
-
-               $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache,
-                       $this->getMockReadOnlyMode()
-               );
-
-               // This will add the item to the cache
-               $store->getWatchedItem( $user, $titleValue );
-
-               $store->updateNotificationTimestamp(
-                       $this->getMockNonAnonUserWithId( 1 ),
-                       $titleValue,
-                       '20151212010101'
-               );
-       }
-
-}
diff --git a/tests/phpunit/includes/WatchedItemUnitTest.php b/tests/phpunit/includes/WatchedItemUnitTest.php
deleted file mode 100644 (file)
index 8897645..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-use MediaWiki\Linker\LinkTarget;
-
-/**
- * @author Addshore
- *
- * @covers WatchedItem
- */
-class WatchedItemUnitTest extends MediaWikiTestCase {
-
-       /**
-        * @param int $id
-        *
-        * @return PHPUnit_Framework_MockObject_MockObject|User
-        */
-       private function getMockUser( $id ) {
-               $user = $this->createMock( User::class );
-               $user->expects( $this->any() )
-                       ->method( 'getId' )
-                       ->will( $this->returnValue( $id ) );
-               $user->expects( $this->any() )
-                       ->method( 'isAllowed' )
-                       ->will( $this->returnValue( true ) );
-               return $user;
-       }
-
-       public function provideUserTitleTimestamp() {
-               $user = $this->getMockUser( 111 );
-               return [
-                       [ $user, Title::newFromText( 'SomeTitle' ), null ],
-                       [ $user, Title::newFromText( 'SomeTitle' ), '20150101010101' ],
-                       [ $user, new TitleValue( 0, 'TVTitle', 'frag' ), '20150101010101' ],
-               ];
-       }
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|WatchedItemStore
-        */
-       private function getMockWatchedItemStore() {
-               return $this->getMockBuilder( WatchedItemStore::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-       }
-
-       /**
-        * @dataProvider provideUserTitleTimestamp
-        */
-       public function testConstruction( $user, LinkTarget $linkTarget, $notifTimestamp ) {
-               $item = new WatchedItem( $user, $linkTarget, $notifTimestamp );
-
-               $this->assertSame( $user, $item->getUser() );
-               $this->assertSame( $linkTarget, $item->getLinkTarget() );
-               $this->assertSame( $notifTimestamp, $item->getNotificationTimestamp() );
-
-               // The below tests the internal WatchedItem::getTitle method
-               $this->assertInstanceOf( 'Title', $item->getTitle() );
-               $this->assertSame( $linkTarget->getDBkey(), $item->getTitle()->getDBkey() );
-               $this->assertSame( $linkTarget->getFragment(), $item->getTitle()->getFragment() );
-               $this->assertSame( $linkTarget->getNamespace(), $item->getTitle()->getNamespace() );
-               $this->assertSame( $linkTarget->getText(), $item->getTitle()->getText() );
-       }
-
-       /**
-        * @dataProvider provideUserTitleTimestamp
-        */
-       public function testFromUserTitle( $user, $linkTarget, $timestamp ) {
-               $store = $this->getMockWatchedItemStore();
-               $store->expects( $this->once() )
-                       ->method( 'loadWatchedItem' )
-                       ->with( $user, $linkTarget )
-                       ->will( $this->returnValue( new WatchedItem( $user, $linkTarget, $timestamp ) ) );
-               $this->setService( 'WatchedItemStore', $store );
-
-               $item = WatchedItem::fromUserTitle( $user, $linkTarget, User::IGNORE_USER_RIGHTS );
-
-               $this->assertEquals( $user, $item->getUser() );
-               $this->assertEquals( $linkTarget, $item->getLinkTarget() );
-               $this->assertEquals( $timestamp, $item->getNotificationTimestamp() );
-       }
-
-       public function testAddWatch() {
-               $title = Title::newFromText( 'SomeTitle' );
-               $timestamp = null;
-               $checkRights = 0;
-
-               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->createMock( User::class );
-               $user->expects( $this->once() )
-                       ->method( 'addWatch' )
-                       ->with( $title, $checkRights );
-
-               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
-               $this->assertTrue( $item->addWatch() );
-       }
-
-       public function testRemoveWatch() {
-               $title = Title::newFromText( 'SomeTitle' );
-               $timestamp = null;
-               $checkRights = 0;
-
-               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->createMock( User::class );
-               $user->expects( $this->once() )
-                       ->method( 'removeWatch' )
-                       ->with( $title, $checkRights );
-
-               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
-               $this->assertTrue( $item->removeWatch() );
-       }
-
-       public function provideBooleans() {
-               return [
-                       [ true ],
-                       [ false ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideBooleans
-        */
-       public function testIsWatched( $returnValue ) {
-               $title = Title::newFromText( 'SomeTitle' );
-               $timestamp = null;
-               $checkRights = 0;
-
-               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->createMock( User::class );
-               $user->expects( $this->once() )
-                       ->method( 'isWatched' )
-                       ->with( $title, $checkRights )
-                       ->will( $this->returnValue( $returnValue ) );
-
-               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
-               $this->assertEquals( $returnValue, $item->isWatched() );
-       }
-
-       public function testDuplicateEntries() {
-               $oldTitle = Title::newFromText( 'OldTitle' );
-               $newTitle = Title::newFromText( 'NewTitle' );
-
-               $store = $this->getMockWatchedItemStore();
-               $store->expects( $this->once() )
-                       ->method( 'duplicateAllAssociatedEntries' )
-                       ->with( $oldTitle, $newTitle );
-               $this->setService( 'WatchedItemStore', $store );
-
-               WatchedItem::duplicateEntries( $oldTitle, $newTitle );
-       }
-
-}
index 4a30292..f97dd73 100644 (file)
@@ -3,10 +3,11 @@
 /**
  * @covers Action
  *
- * @author Thiemo Mättig
- *
  * @group Action
  * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Thiemo Kreuz
  */
 class ActionTest extends MediaWikiTestCase {
 
index 028d3b4..07bf299 100644 (file)
@@ -129,4 +129,46 @@ class ApiParseTest extends ApiTestCase {
                        );
                }
        }
+
+       public function testSkinModules() {
+               $factory = new SkinFactory();
+               $factory->register( 'testing', 'Testing', function () {
+                       $skin = $this->getMockBuilder( SkinFallback::class )
+                               ->setMethods( [ 'getDefaultModules', 'setupSkinUserCss' ] )
+                               ->getMock();
+                       $skin->expects( $this->once() )->method( 'getDefaultModules' )
+                               ->willReturn( [
+                                       'core' => [ 'foo', 'bar' ],
+                                       'content' => [ 'baz' ]
+                               ] );
+                       $skin->expects( $this->once() )->method( 'setupSkinUserCss' )
+                               ->will( $this->returnCallback( function ( OutputPage $out ) {
+                                       $out->addModuleStyles( 'foo.styles' );
+                               } ) );
+                       return $skin;
+               } );
+               $this->setService( 'SkinFactory', $factory );
+
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'pageid' => self::$pageId,
+                       'useskin' => 'testing',
+                       'prop' => 'modules',
+               ] );
+               $this->assertSame(
+                       [ 'foo', 'bar', 'baz' ],
+                       $res[0]['parse']['modules'],
+                       'resp.parse.modules'
+               );
+               $this->assertSame(
+                       [],
+                       $res[0]['parse']['modulescripts'],
+                       'resp.parse.modulescripts'
+               );
+               $this->assertSame(
+                       [ 'foo.styles' ],
+                       $res[0]['parse']['modulestyles'],
+                       'resp.parse.modulestyles'
+               );
+       }
 }
index e0ddb0a..5f37078 100644 (file)
@@ -221,8 +221,12 @@ class LocalPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCase
                $req->password = 'DoesNotExist';
                $ret = $provider->beginPrimaryAuthentication( $reqs );
                $this->assertEquals(
-                       AuthenticationResponse::newAbstain(),
-                       $provider->beginPrimaryAuthentication( $reqs )
+                       AuthenticationResponse::FAIL,
+                       $ret->status
+               );
+               $this->assertEquals(
+                       'wrongpassword',
+                       $ret->message->getKey()
                );
 
                // Validation failure
index dd27e32..acac26f 100644 (file)
@@ -190,6 +190,8 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
                $group = new ChangesListStringOptionsFilterGroup( $groupDefinition );
 
                $specialPage = $this->getSpecialPage();
+               $opts = new FormOptions();
+               $opts->add( $groupDefinition[ 'name' ], $input );
 
                $group->modifyQuery(
                        $dbr,
@@ -199,7 +201,8 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
                        $conds,
                        $query_options,
                        $join_conds,
-                       $input
+                       $opts,
+                       true
                );
        }
 
index ae61070..deaa65a 100644 (file)
@@ -310,6 +310,11 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                        '1.16',
                        '1.17',
                        '1.18',
+                       '1.19',
+                       '1.20',
+                       '1.21',
+                       '1.22',
+                       '1.23',
                ];
 
                // Mismatches for these columns we can safely ignore
index 11b869a..f3c949d 100644 (file)
@@ -3,6 +3,10 @@
 use Wikimedia\TestingAccessWrapper;
 
 class CdnCacheUpdateTest extends MediaWikiTestCase {
+
+       /**
+        * @covers CdnCacheUpdate::merge
+        */
        public function testPurgeMergeWeb() {
                $this->setMwGlobals( 'wgCommandLineMode', false );
 
index 3b42356..8332d2c 100644 (file)
@@ -1,12 +1,68 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 class DeferredUpdatesTest extends MediaWikiTestCase {
 
+       /**
+        * @covers DeferredUpdates::addUpdate
+        * @covers DeferredUpdates::push
+        * @covers DeferredUpdates::doUpdates
+        * @covers DeferredUpdates::execute
+        * @covers DeferredUpdates::runUpdate
+        */
+       public function testAddAndRun() {
+               $update = $this->getMockBuilder( DeferrableUpdate::class )
+                       ->setMethods( [ 'doUpdate' ] )->getMock();
+               $update->expects( $this->once() )->method( 'doUpdate' );
+
+               DeferredUpdates::addUpdate( $update );
+               DeferredUpdates::doUpdates();
+       }
+
+       /**
+        * @covers DeferredUpdates::addUpdate
+        * @covers DeferredUpdates::push
+        */
+       public function testAddMergeable() {
+               $this->setMwGlobals( 'wgCommandLineMode', false );
+
+               $update1 = $this->getMockBuilder( MergeableUpdate::class )
+                       ->setMethods( [ 'merge', 'doUpdate' ] )->getMock();
+               $update1->expects( $this->once() )->method( 'merge' );
+               $update1->expects( $this->never() )->method( 'doUpdate' );
+
+               $update2 = $this->getMockBuilder( MergeableUpdate::class )
+                       ->setMethods( [ 'merge', 'doUpdate' ] )->getMock();
+               $update2->expects( $this->never() )->method( 'merge' );
+               $update2->expects( $this->never() )->method( 'doUpdate' );
+
+               DeferredUpdates::addUpdate( $update1 );
+               DeferredUpdates::addUpdate( $update2 );
+       }
+
+       /**
+        * @covers DeferredUpdates::addCallableUpdate
+        * @covers MWCallableUpdate::getOrigin
+        */
+       public function testAddCallableUpdate() {
+               $this->setMwGlobals( 'wgCommandLineMode', true );
+
+               $ran = 0;
+               DeferredUpdates::addCallableUpdate( function () use ( &$ran ) {
+                       $ran++;
+               } );
+               DeferredUpdates::doUpdates();
+
+               $this->assertSame( 1, $ran, 'Update ran' );
+       }
+
        /**
         * @covers DeferredUpdates::getPendingUpdates
+        * @covers DeferredUpdates::clearPendingUpdates
         */
        public function testGetPendingUpdates() {
-               # Prevent updates from running
+               // Prevent updates from running
                $this->setMwGlobals( 'wgCommandLineMode', false );
 
                $pre = DeferredUpdates::PRESEND;
@@ -34,6 +90,11 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                $this->assertCount( 0, DeferredUpdates::getPendingUpdates() );
        }
 
+       /**
+        * @covers DeferredUpdates::doUpdates
+        * @covers DeferredUpdates::execute
+        * @covers DeferredUpdates::addUpdate
+        */
        public function testDoUpdatesWeb() {
                $this->setMwGlobals( 'wgCommandLineMode', false );
 
@@ -126,6 +187,11 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                $this->assertEquals( "Marychu", $y, "POSTSEND update ran" );
        }
 
+       /**
+        * @covers DeferredUpdates::doUpdates
+        * @covers DeferredUpdates::execute
+        * @covers DeferredUpdates::addUpdate
+        */
        public function testDoUpdatesCLI() {
                $this->setMwGlobals( 'wgCommandLineMode', true );
                $updates = [
@@ -140,7 +206,8 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                        '3-2-1' => "deferred update 1 within deferred update 2 with deferred update 3;\n",
                ];
 
-               wfGetLBFactory()->commitMasterChanges( __METHOD__ ); // clear anything
+               // clear anything
+               wfGetLBFactory()->commitMasterChanges( __METHOD__ );
 
                DeferredUpdates::addCallableUpdate(
                        function () use ( $updates ) {
@@ -193,12 +260,18 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                DeferredUpdates::doUpdates();
        }
 
+       /**
+        * @covers DeferredUpdates::doUpdates
+        * @covers DeferredUpdates::execute
+        * @covers DeferredUpdates::addUpdate
+        */
        public function testPresendAddOnPostsendRun() {
                $this->setMwGlobals( 'wgCommandLineMode', true );
 
                $x = false;
                $y = false;
-               wfGetLBFactory()->commitMasterChanges( __METHOD__ ); // clear anything
+               // clear anything
+               wfGetLBFactory()->commitMasterChanges( __METHOD__ );
 
                DeferredUpdates::addCallableUpdate(
                        function () use ( &$x, &$y ) {
@@ -218,4 +291,46 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                $this->assertTrue( $x, "Outer POSTSEND update ran" );
                $this->assertTrue( $y, "Nested PRESEND update ran" );
        }
+
+       /**
+        * @covers DeferredUpdates::runUpdate
+        */
+       public function testRunUpdateTransactionScope() {
+               $this->setMwGlobals( 'wgCommandLineMode', false );
+
+               $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $this->assertFalse( $lbFactory->hasTransactionRound(), 'Initial state' );
+
+               $ran = 0;
+               DeferredUpdates::addCallableUpdate( function () use ( &$ran, $lbFactory ) {
+                       $ran++;
+                       $this->assertTrue( $lbFactory->hasTransactionRound(), 'Has transaction' );
+               } );
+               DeferredUpdates::doUpdates();
+
+               $this->assertSame( 1, $ran, 'Update ran' );
+               $this->assertFalse( $lbFactory->hasTransactionRound(), 'Final state' );
+       }
+
+       /**
+        * @covers DeferredUpdates::runUpdate
+        * @covers TransactionRoundDefiningUpdate::getOrigin
+        */
+       public function testRunOuterScopeUpdate() {
+               $this->setMwGlobals( 'wgCommandLineMode', false );
+
+               $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $this->assertFalse( $lbFactory->hasTransactionRound(), 'Initial state' );
+
+               $ran = 0;
+               DeferredUpdates::addUpdate( new TransactionRoundDefiningUpdate(
+                       function () use ( &$ran, $lbFactory ) {
+                               $ran++;
+                               $this->assertFalse( $lbFactory->hasTransactionRound(), 'No transaction' );
+                       } )
+               );
+               DeferredUpdates::doUpdates();
+
+               $this->assertSame( 1, $ran, 'Update ran' );
+       }
 }
diff --git a/tests/phpunit/includes/deferred/MWCallableUpdateTest.php b/tests/phpunit/includes/deferred/MWCallableUpdateTest.php
new file mode 100644 (file)
index 0000000..6995bf8
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @covers MWCallableUpdate
+ */
+class MWCallableUpdateTest extends PHPUnit_Framework_TestCase {
+
+       public function testDoUpdate() {
+               $ran = 0;
+               $update = new MWCallableUpdate( function () use ( &$ran ) {
+                       $ran++;
+               } );
+               $this->assertSame( 0, $ran );
+               $update->doUpdate();
+               $this->assertSame( 1, $ran );
+       }
+
+       public function testCancel() {
+               // Prepare update and DB
+               $db = new DatabaseTestHelper( __METHOD__ );
+               $db->begin( __METHOD__ );
+               $ran = 0;
+               $update = new MWCallableUpdate( function () use ( &$ran ) {
+                       $ran++;
+               }, __METHOD__, $db );
+
+               // Emulate rollback
+               $db->rollback( __METHOD__ );
+
+               // Ensure it was cancelled
+               $update->doUpdate();
+               $this->assertSame( 0, $ran );
+       }
+}
diff --git a/tests/phpunit/includes/deferred/TransactionRoundDefiningUpdateTest.php b/tests/phpunit/includes/deferred/TransactionRoundDefiningUpdateTest.php
new file mode 100644 (file)
index 0000000..e6ad072
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @covers TransactionRoundDefiningUpdate
+ */
+class TransactionRoundDefiningUpdateTest extends PHPUnit_Framework_TestCase {
+
+       public function testDoUpdate() {
+               $ran = 0;
+               $update = new TransactionRoundDefiningUpdate( function () use ( &$ran ) {
+                       $ran++;
+               } );
+               $this->assertSame( 0, $ran );
+               $update->doUpdate();
+               $this->assertSame( 1, $ran );
+       }
+}
diff --git a/tests/phpunit/includes/externalstore/ExternalStoreFactoryTest.php b/tests/phpunit/includes/externalstore/ExternalStoreFactoryTest.php
new file mode 100644 (file)
index 0000000..a0bac63
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @covers ExternalStoreFactory
+ */
+class ExternalStoreFactoryTest extends PHPUnit_Framework_TestCase {
+
+       public function testExternalStoreFactory_noStores() {
+               $factory = new ExternalStoreFactory( [] );
+               $this->assertFalse( $factory->getStoreObject( 'ForTesting' ) );
+               $this->assertFalse( $factory->getStoreObject( 'foo' ) );
+       }
+
+       public function provideStoreNames() {
+               yield 'Same case as construction' => [ 'ForTesting' ];
+               yield 'All lower case' => [ 'fortesting' ];
+               yield 'All upper case' => [ 'FORTESTING' ];
+               yield 'Mix of cases' => [ 'FOrTEsTInG' ];
+       }
+
+       /**
+        * @dataProvider provideStoreNames
+        */
+       public function testExternalStoreFactory_someStore_protoMatch( $proto ) {
+               $factory = new ExternalStoreFactory( [ 'ForTesting' ] );
+               $store = $factory->getStoreObject( $proto );
+               $this->assertInstanceOf( ExternalStoreForTesting::class, $store );
+       }
+
+       /**
+        * @dataProvider provideStoreNames
+        */
+       public function testExternalStoreFactory_someStore_noProtoMatch( $proto ) {
+               $factory = new ExternalStoreFactory( [ 'SomeOtherClassName' ] );
+               $store = $factory->getStoreObject( $proto );
+               $this->assertFalse( $store );
+       }
+
+}
diff --git a/tests/phpunit/includes/externalstore/ExternalStoreForTesting.php b/tests/phpunit/includes/externalstore/ExternalStoreForTesting.php
new file mode 100644 (file)
index 0000000..50f1e52
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+class ExternalStoreForTesting {
+
+       protected $data = [
+               'cluster1' => [
+                       '200' => 'Hello',
+                       '300' => [
+                               'Hello', 'World',
+                       ],
+                       // gzip string below generated with gzdeflate( 'AAAABBAAA' )
+                       '12345' => "sttttr\002\022\000",
+               ],
+       ];
+
+       /**
+        * Fetch data from given URL
+        * @param string $url An url of the form FOO://cluster/id or FOO://cluster/id/itemid.
+        * @return mixed
+        */
+       public function fetchFromURL( $url ) {
+               // Based on ExternalStoreDB
+               $path = explode( '/', $url );
+               $cluster = $path[2];
+               $id = $path[3];
+               if ( isset( $path[4] ) ) {
+                       $itemID = $path[4];
+               } else {
+                       $itemID = false;
+               }
+
+               if ( !isset( $this->data[$cluster][$id] ) ) {
+                       return null;
+               }
+
+               if ( $itemID !== false
+                       && is_array( $this->data[$cluster][$id] )
+                       && isset( $this->data[$cluster][$id][$itemID] )
+               ) {
+                       return $this->data[$cluster][$id][$itemID];
+               }
+
+               return $this->data[$cluster][$id];
+       }
+
+}
index a365c4d..7ca3874 100644 (file)
@@ -1,31 +1,39 @@
 <?php
-/**
- * External Store tests
- */
 
 class ExternalStoreTest extends MediaWikiTestCase {
 
        /**
         * @covers ExternalStore::fetchFromURL
         */
-       public function testExternalFetchFromURL() {
-               $this->setMwGlobals( 'wgExternalStores', false );
+       public function testExternalFetchFromURL_noExternalStores() {
+               $this->setService(
+                       'ExternalStoreFactory',
+                       new ExternalStoreFactory( [] )
+               );
 
                $this->assertFalse(
-                       ExternalStore::fetchFromURL( 'FOO://cluster1/200' ),
+                       ExternalStore::fetchFromURL( 'ForTesting://cluster1/200' ),
                        'Deny if wgExternalStores is not set to a non-empty array'
                );
+       }
 
-               $this->setMwGlobals( 'wgExternalStores', [ 'FOO' ] );
+       /**
+        * @covers ExternalStore::fetchFromURL
+        */
+       public function testExternalFetchFromURL_someExternalStore() {
+               $this->setService(
+                       'ExternalStoreFactory',
+                       new ExternalStoreFactory( [ 'ForTesting' ] )
+               );
 
                $this->assertEquals(
-                       ExternalStore::fetchFromURL( 'FOO://cluster1/200' ),
                        'Hello',
+                       ExternalStore::fetchFromURL( 'ForTesting://cluster1/200' ),
                        'Allow FOO://cluster1/200'
                );
                $this->assertEquals(
-                       ExternalStore::fetchFromURL( 'FOO://cluster1/300/0' ),
                        'Hello',
+                       ExternalStore::fetchFromURL( 'ForTesting://cluster1/300/0' ),
                        'Allow FOO://cluster1/300/0'
                );
                # Assertions for r68900
@@ -43,45 +51,3 @@ class ExternalStoreTest extends MediaWikiTestCase {
                );
        }
 }
-
-class ExternalStoreFOO {
-
-       protected $data = [
-               'cluster1' => [
-                       '200' => 'Hello',
-                       '300' => [
-                               'Hello', 'World',
-                       ],
-               ],
-       ];
-
-       /**
-        * Fetch data from given URL
-        * @param string $url An url of the form FOO://cluster/id or FOO://cluster/id/itemid.
-        * @return mixed
-        */
-       function fetchFromURL( $url ) {
-               // Based on ExternalStoreDB
-               $path = explode( '/', $url );
-               $cluster = $path[2];
-               $id = $path[3];
-               if ( isset( $path[4] ) ) {
-                       $itemID = $path[4];
-               } else {
-                       $itemID = false;
-               }
-
-               if ( !isset( $this->data[$cluster][$id] ) ) {
-                       return null;
-               }
-
-               if ( $itemID !== false
-                       && is_array( $this->data[$cluster][$id] )
-                       && isset( $this->data[$cluster][$id][$itemID] )
-               ) {
-                       return $this->data[$cluster][$id][$itemID];
-               }
-
-               return $this->data[$cluster][$id];
-       }
-}
index 4b03fda..fe7c506 100644 (file)
@@ -6,7 +6,7 @@
  * @group JobQueue
  *
  * @licence GNU GPL v2+
- * @author Thiemo Mättig
+ * @author Thiemo Kreuz
  */
 class JobQueueMemoryTest extends PHPUnit_Framework_TestCase {
 
index 0b2df61..934d49a 100644 (file)
@@ -13,6 +13,8 @@ use Wikimedia\TestingAccessWrapper;
  * @covers WANObjectCache::getProcessCache
  * @covers WANObjectCache::getNonProcessCachedKeys
  * @covers WANObjectCache::getRawKeysForWarmup
+ * @covers WANObjectCache::getInterimValue
+ * @covers WANObjectCache::setInterimValue
  */
 class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
        /** @var WANObjectCache */
@@ -157,8 +159,9 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                $this->assertEquals( 9, $hit, "Values evicted" );
 
                $key = reset( $keys );
-               // Get into cache
+               // Get into cache (default process cache group)
                $this->cache->getWithSetCallback( $key, 100, $callback, [ 'pcTTL' => 5 ] );
+               $this->assertEquals( 10, $hit, "Value calculated" );
                $this->cache->getWithSetCallback( $key, 100, $callback, [ 'pcTTL' => 5 ] );
                $this->assertEquals( 10, $hit, "Value cached" );
                $outerCallback = function () use ( &$callback, $key ) {
@@ -166,7 +169,8 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
 
                        return 43 + $v;
                };
-               $this->cache->getWithSetCallback( $key, 100, $outerCallback );
+               // Outer key misses and refuses inner key process cache value
+               $this->cache->getWithSetCallback( "$key-miss-outer", 100, $outerCallback );
                $this->assertEquals( 11, $hit, "Nested callback value process cache skipped" );
        }
 
@@ -1318,4 +1322,27 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
 
                $this->assertSame( 'special', $wanCache->makeGlobalKey( 'a', 'b' ) );
        }
+
+       public static function statsKeyProvider() {
+               return [
+                       [ 'domain:page:5', 'page' ],
+                       [ 'domain:main-key', 'main-key' ],
+                       [ 'domain:page:history', 'page' ],
+                       [ 'missingdomainkey', 'missingdomainkey' ]
+               ];
+       }
+
+       /**
+        * @dataProvider statsKeyProvider
+        * @covers WANObjectCache::determineKeyClass
+        */
+       public function testStatsKeyClass( $key, $class ) {
+               $wanCache = TestingAccessWrapper::newFromObject( new WANObjectCache( [
+                       'cache' => new HashBagOStuff,
+                       'pool' => 'testcache-hash',
+                       'relayer' => new EventRelayerNull( [] )
+               ] ) );
+
+               $this->assertEquals( $class, $wanCache->determineKeyClass( $key ) );
+       }
 }
index 70b6c36..ee7ad2f 100644 (file)
@@ -94,6 +94,45 @@ class DatabaseTest extends PHPUnit_Framework_TestCase {
                );
        }
 
+       public function provideTableNamesWithIndexClauseOrJOIN() {
+               return [
+                       'one-element array' => [
+                               [ 'table' ], [], 'table '
+                       ],
+                       'comma join' => [
+                               [ 'table1', 'table2' ], [], 'table1,table2 '
+                       ],
+                       'real join' => [
+                               [ 'table1', 'table2' ],
+                               [ 'table2' => [ 'LEFT JOIN', 't1_id = t2_id' ] ],
+                               'table1 LEFT JOIN table2 ON ((t1_id = t2_id))'
+                       ],
+                       'real join with multiple conditionals' => [
+                               [ 'table1', 'table2' ],
+                               [ 'table2' => [ 'LEFT JOIN', [ 't1_id = t2_id', 't2_x = \'X\'' ] ] ],
+                               'table1 LEFT JOIN table2 ON ((t1_id = t2_id) AND (t2_x = \'X\'))'
+                       ],
+                       'join with parenthesized group' => [
+                               [ 'table1', 'n' => [ 'table2', 'table3' ] ],
+                               [
+                                       'table3' => [ 'JOIN', 't2_id = t3_id' ],
+                                       'n' => [ 'LEFT JOIN', 't1_id = t2_id' ],
+                               ],
+                               'table1 LEFT JOIN (table2 JOIN table3 ON ((t2_id = t3_id))) ON ((t1_id = t2_id))'
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideTableNamesWithIndexClauseOrJOIN
+        * @covers Wikimedia\Rdbms\Database::tableNamesWithIndexClauseOrJOIN
+        */
+       public function testTableNamesWithIndexClauseOrJOIN( $tables, $join_conds, $expect ) {
+               $clause = TestingAccessWrapper::newFromObject( $this->db )
+                       ->tableNamesWithIndexClauseOrJOIN( $tables, [], [], $join_conds );
+               $this->assertSame( $expect, $clause );
+       }
+
        /**
         * @covers Wikimedia\Rdbms\Database::onTransactionIdle
         * @covers Wikimedia\Rdbms\Database::runOnTransactionIdleCallbacks
index 7d0813d..df4a281 100644 (file)
@@ -54,26 +54,4 @@ class ArticleTest extends MediaWikiTestCase {
                $this->assertEquals( -8, $this->article->ext_someNewProperty,
                        "Article get/set magic on update to new field" );
        }
-
-       /**
-        * Checks for the existence of the backwards compatibility static functions
-        * (forwarders to WikiPage class)
-        *
-        * @covers Article::selectFields
-        * @covers Article::onArticleCreate
-        * @covers Article::onArticleDelete
-        * @covers Article::onArticleEdit
-        */
-       public function testStaticFunctions() {
-               $this->hideDeprecated( 'Article::selectFields' );
-
-               $this->assertEquals( WikiPage::selectFields(), Article::selectFields(),
-                       "Article static functions" );
-               $this->assertEquals( true, is_callable( "Article::onArticleCreate" ),
-                       "Article static functions" );
-               $this->assertEquals( true, is_callable( "Article::onArticleDelete" ),
-                       "Article static functions" );
-               $this->assertEquals( true, is_callable( "ImagePage::onArticleEdit" ),
-                       "Article static functions" );
-       }
 }
index 7b56def..5ef30e8 100644 (file)
@@ -220,6 +220,48 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] );
        }
 
+       /**
+        * @covers ExtensionProcessor::addConfigGlobal()
+        * @expectedException RuntimeException
+        */
+       public function testDuplicateConfigKey1() {
+               $processor = new ExtensionProcessor;
+               $info = [
+                       'config' => [
+                               'Bar' => '',
+                       ]
+               ] + self::$default;
+               $info2 = [
+                       'config' => [
+                               'Bar' => 'g',
+                       ],
+                       'name' => 'FooBar2',
+               ];
+               $processor->extractInfo( $this->dir, $info, 1 );
+               $processor->extractInfo( $this->dir, $info2, 1 );
+       }
+
+       /**
+        * @covers ExtensionProcessor::addConfigGlobal()
+        * @expectedException RuntimeException
+        */
+       public function testDuplicateConfigKey2() {
+               $processor = new ExtensionProcessor;
+               $info = [
+                       'config' => [
+                               'Bar' => [ 'value' => 'somevalue' ],
+                       ]
+               ] + self::$default;
+               $info2 = [
+                       'config' => [
+                               'Bar' => [ 'value' => 'somevalue' ],
+                       ],
+                       'name' => 'FooBar2',
+               ];
+               $processor->extractInfo( $this->dir, $info, 2 );
+               $processor->extractInfo( $this->dir, $info2, 2 );
+       }
+
        public static function provideExtractExtensionMessagesFiles() {
                $dir = __DIR__ . '/FooBar/';
                return [
index c567698..be17a69 100644 (file)
@@ -1,15 +1,16 @@
 <?php
 
 /**
- * @group Database
  * @group ResourceLoader
  */
 class ResourceLoaderSkinModuleTest extends PHPUnit_Framework_TestCase {
 
+       // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
        public static function provideGetStyles() {
                return [
                        [
                                'parent' => [],
+                               'logo' => '/logo.png',
                                'expected' => [
                                        'all' => [ '.mw-wiki-logo { background-image: url(/logo.png); }' ],
                                ],
@@ -18,38 +19,77 @@ class ResourceLoaderSkinModuleTest extends PHPUnit_Framework_TestCase {
                                'parent' => [
                                        'screen' => '.example {}',
                                ],
+                               'logo' => '/logo.png',
                                'expected' => [
                                        'screen' => [ '.example {}' ],
                                        'all' => [ '.mw-wiki-logo { background-image: url(/logo.png); }' ],
                                ],
                        ],
+                       [
+                               'parent' => [],
+                               'logo' => [
+                                       '1x' => '/logo.png',
+                                       '1.5x' => '/logo@1.5x.png',
+                                       '2x' => '/logo@2x.png',
+                               ],
+                               'expected' => [
+                                       'all' => [ <<<CSS
+.mw-wiki-logo { background-image: url(/logo.png); }
+CSS
+                                       ],
+                                       '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx), (min-resolution: 144dpi)' => [ <<<CSS
+.mw-wiki-logo { background-image: url(/logo@1.5x.png);background-size: 135px auto; }
+CSS
+                                       ],
+                                       '(-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (min-resolution: 2dppx), (min-resolution: 192dpi)' => [ <<<CSS
+.mw-wiki-logo { background-image: url(/logo@2x.png);background-size: 135px auto; }
+CSS
+                                       ],
+                               ],
+                       ],
+                       [
+                               'parent' => [],
+                               'logo' => [
+                                       '1x' => '/logo.png',
+                                       'svg' => '/logo.svg',
+                               ],
+                               'expected' => [
+                                       'all' => [ <<<CSS
+.mw-wiki-logo { background-image: url(/logo.png); }
+CSS
+                                       , <<<CSS
+.mw-wiki-logo { background-image: -webkit-linear-gradient(transparent, transparent), url(/logo.svg); background-image: linear-gradient(transparent, transparent), url(/logo.svg);background-size: 135px auto; }
+CSS
+                                       ],
+                               ],
+                       ],
                ];
        }
+       // @codingStandardsIgnoreEnd
 
        /**
         * @dataProvider provideGetStyles
         * @covers ResourceLoaderSkinModule::normalizeStyles
         * @covers ResourceLoaderSkinModule::getStyles
         */
-       public function testGetStyles( $parent, $expected ) {
+       public function testGetStyles( $parent, $logo, $expected ) {
                $module = $this->getMockBuilder( ResourceLoaderSkinModule::class )
                        ->disableOriginalConstructor()
-                       ->setMethods( [ 'readStyleFiles' ] )
+                       ->setMethods( [ 'readStyleFiles', 'getConfig', 'getLogoData' ] )
                        ->getMock();
                $module->expects( $this->once() )->method( 'readStyleFiles' )
                        ->willReturn( $parent );
-               $module->setConfig( new HashConfig( [
-                       'ResourceBasePath' => '/w',
-                       'Logo' => '/logo.png',
-                       'LogoHD' => false,
-               ] ) );
+               $module->expects( $this->once() )->method( 'getConfig' )
+                       ->willReturn( new HashConfig() );
+               $module->expects( $this->once() )->method( 'getLogoData' )
+                       ->willReturn( $logo );
 
                $ctx = $this->getMockBuilder( ResourceLoaderContext::class )
                        ->disableOriginalConstructor()->getMock();
 
                $this->assertEquals(
-                       $module->getStyles( $ctx ),
-                       $expected
+                       $expected,
+                       $module->getStyles( $ctx )
                );
        }
 
@@ -64,4 +104,102 @@ class ResourceLoaderSkinModuleTest extends PHPUnit_Framework_TestCase {
 
                $this->assertFalse( $module->isKnownEmpty( $ctx ) );
        }
+
+       /**
+        * @dataProvider provideGetLogo
+        * @covers ResourceLoaderSkinModule::getLogo
+        */
+       public function testGetLogo( $config, $expected, $baseDir = null ) {
+               if ( $baseDir ) {
+                       $oldIP = $GLOBALS['IP'];
+                       $GLOBALS['IP'] = $baseDir;
+                       $teardown = new Wikimedia\ScopedCallback( function () use ( $oldIP ) {
+                               $GLOBALS['IP'] = $oldIP;
+                       } );
+               }
+
+               $this->assertEquals(
+                       $expected,
+                       ResourceLoaderSkinModule::getLogo( new HashConfig( $config ) )
+               );
+       }
+
+       public function provideGetLogo() {
+               return [
+                       'simple' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => false,
+                               ],
+                               'expected' => '/img/default.png',
+                       ],
+                       'default and 2x' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               '2x' => '/img/two-x.png',
+                                       ],
+                               ],
+                               'expected' => [
+                                       '1x' => '/img/default.png',
+                                       '2x' => '/img/two-x.png',
+                               ],
+                       ],
+                       'default and all HiDPIs' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               '1.5x' => '/img/one-point-five.png',
+                                               '2x' => '/img/two-x.png',
+                                       ],
+                               ],
+                               'expected' => [
+                                       '1x' => '/img/default.png',
+                                       '1.5x' => '/img/one-point-five.png',
+                                       '2x' => '/img/two-x.png',
+                               ],
+                       ],
+                       'default and SVG' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               'svg' => '/img/vector.svg',
+                                       ],
+                               ],
+                               'expected' => [
+                                       '1x' => '/img/default.png',
+                                       'svg' => '/img/vector.svg',
+                               ],
+                       ],
+                       'everything' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               '1.5x' => '/img/one-point-five.png',
+                                               '2x' => '/img/two-x.png',
+                                               'svg' => '/img/vector.svg',
+                                       ],
+                               ],
+                               'expected' => [
+                                       '1x' => '/img/default.png',
+                                       'svg' => '/img/vector.svg',
+                               ],
+                       ],
+                       'versioned url' => [
+                               'config' => [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/w/test.jpg',
+                                       'LogoHD' => false,
+                                       'UploadPath' => '/w/images',
+                               ],
+                               'expected' => '/w/test.jpg?edcf2',
+                               'baseDir' => dirname( dirname( __DIR__ ) ) . '/data/media',
+                       ],
+               ];
+       }
 }
index e9d022f..f45f8ae 100644 (file)
@@ -869,4 +869,41 @@ mw.example();
                        'Extra headers'
                );
        }
+
+       /**
+        * @covers ResourceLoader::respond
+        */
+       public function testRespond() {
+               $rl = $this->getMockBuilder( EmptyResourceLoader::class )
+                       ->setMethods( [
+                               'tryRespondNotModified',
+                               'sendResponseHeaders',
+                               'measureResponseTime',
+                       ] )
+                       ->getMock();
+               $context = $this->getResourceLoaderContext( [ 'modules' => '' ], $rl );
+
+               $rl->expects( $this->once() )->method( 'measureResponseTime' );
+               $this->expectOutputRegex( '/no modules were requested/' );
+
+               $rl->respond( $context );
+       }
+
+       /**
+        * @covers ResourceLoader::measureResponseTime
+        */
+       public function testMeasureResponseTime() {
+               $stats = $this->getMockBuilder( NullStatsdDataFactory::class )
+                       ->setMethods( [ 'timing' ] )->getMock();
+               $this->setService( 'StatsdDataFactory', $stats );
+
+               $stats->expects( $this->once() )->method( 'timing' )
+                       ->with( 'resourceloader.responseTime', $this->anything() );
+
+               $timing = new Timing();
+               $timing->mark( 'requestShutdown' );
+               $rl = TestingAccessWrapper::newFromObject( new EmptyResourceLoader );
+               $rl->measureResponseTime( $timing );
+               DeferredUpdates::doUpdates();
+       }
 }
diff --git a/tests/phpunit/includes/shell/CommandFactoryTest.php b/tests/phpunit/includes/shell/CommandFactoryTest.php
new file mode 100644 (file)
index 0000000..f90e837
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+use MediaWiki\Shell\CommandFactory;
+use Psr\Log\NullLogger;
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @group Shell
+ */
+class CommandFactoryTest extends PHPUnit_Framework_TestCase {
+       /**
+        * @covers MediaWiki\Shell\CommandFactory::create
+        */
+       public function testCreate() {
+               $logger = new NullLogger();
+               $cgroup = '/sys/fs/cgroup/memory/mygroup';
+               $limits = [
+                       'filesize' => 1000,
+                       'memory' => 1000,
+                       'time' => 30,
+                       'walltime' => 40,
+               ];
+
+               $factory = new CommandFactory( $limits, $cgroup );
+               $factory->setLogger( $logger );
+               $factory->logStderr();
+               $command = $factory->create();
+
+               $wrapper = TestingAccessWrapper::newFromObject( $command );
+               $this->assertSame( $logger, $wrapper->logger );
+               $this->assertSame( $cgroup, $wrapper->cgroup );
+               $this->assertSame( $limits, $wrapper->limits );
+               $this->assertTrue( $wrapper->doLogStderr );
+       }
+}
index 33a7f44..81fae33 100644 (file)
@@ -6,17 +6,6 @@ use MediaWiki\Shell\Command;
  * @group Shell
  */
 class CommandTest extends PHPUnit_Framework_TestCase {
-       /**
-        * @expectedException PHPUnit_Framework_Error_Notice
-        */
-       public function testDestruct() {
-               if ( defined( 'HHVM_VERSION' ) ) {
-                       $this->markTestSkipped( 'destructors are unreliable in HHVM' );
-               }
-               $command = new Command();
-               $command->params( 'true' );
-       }
-
        private function requirePosix() {
                if ( wfIsWindows() ) {
                        $this->markTestSkipped( 'This test requires a POSIX environment.' );
@@ -57,23 +46,61 @@ class CommandTest extends PHPUnit_Framework_TestCase {
                $this->assertSame( "bar\n", $result->getStdout() );
        }
 
+       public function testStdout() {
+               $this->requirePosix();
+
+               $command = new Command();
+
+               $result = $command
+                       ->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' )
+                       ->execute();
+
+               $this->assertNotContains( 'ThisIsStderr', $result->getStdout() );
+               $this->assertEquals( "ThisIsStderr\n", $result->getStderr() );
+       }
+
+       public function testStdoutRedirection() {
+               $this->requirePosix();
+
+               $command = new Command();
+
+               $result = $command
+                       ->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' )
+                       ->includeStderr( true )
+                       ->execute();
+
+               $this->assertEquals( "ThisIsStderr\n", $result->getStdout() );
+               $this->assertNull( $result->getStderr() );
+       }
+
        public function testOutput() {
                global $IP;
 
                $this->requirePosix();
+               chdir( $IP );
 
                $command = new Command();
                $result = $command
-                       ->params( [ 'ls', "$IP/index.php" ] )
+                       ->params( [ 'ls', 'index.php' ] )
                        ->execute();
-               $this->assertSame( "$IP/index.php", trim( $result->getStdout() ) );
+               $this->assertRegExp( '/^index.php$/m', $result->getStdout() );
+               $this->assertSame( null, $result->getStderr() );
 
                $command = new Command();
                $result = $command
                        ->params( [ 'ls', 'index.php', 'no-such-file' ] )
                        ->includeStderr()
                        ->execute();
+               $this->assertRegExp( '/^index.php$/m', $result->getStdout() );
                $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStdout() );
+               $this->assertSame( null, $result->getStderr() );
+
+               $command = new Command();
+               $result = $command
+                       ->params( [ 'ls', 'index.php', 'no-such-file' ] )
+                       ->execute();
+               $this->assertRegExp( '/^index.php$/m', $result->getStdout() );
+               $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStderr() );
        }
 
        public function testT69870() {
@@ -91,4 +118,25 @@ class CommandTest extends PHPUnit_Framework_TestCase {
                        $this->assertEquals( 333333, strlen( $output ) );
                }
        }
+
+       public function testLogStderr() {
+               $this->requirePosix();
+
+               $logger = new TestLogger( true, function ( $message, $level, $context ) {
+                       return $level === Psr\Log\LogLevel::ERROR ? '1' : null;
+               }, true );
+               $command = new Command();
+               $command->setLogger( $logger );
+               $command->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' );
+               $command->execute();
+               $this->assertEmpty( $logger->getBuffer() );
+
+               $command = new Command();
+               $command->setLogger( $logger );
+               $command->logStderr();
+               $command->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' );
+               $command->execute();
+               $this->assertSame( 1, count( $logger->getBuffer() ) );
+               $this->assertSame( trim( $logger->getBuffer()[0][2]['error'] ), 'ThisIsStderr' );
+       }
 }
index d3663c8..0944ea2 100644 (file)
@@ -48,6 +48,18 @@ class SkinFactoryTest extends MediaWikiTestCase {
                $skin = $factory->makeSkin( 'testfallback' );
                $this->assertInstanceOf( 'Skin', $skin );
                $this->assertInstanceOf( 'SkinFallback', $skin );
+               $this->assertEquals( 'fallback', $skin->getSkinName() );
+       }
+
+       /**
+        * @covers Skin::__construct
+        * @covers Skin::getSkinName
+        */
+       public function testGetSkinName() {
+               $skin = new SkinFallback();
+               $this->assertEquals( 'fallback', $skin->getSkinName(), 'Default' );
+               $skin = new SkinFallback( 'testname' );
+               $this->assertEquals( 'testname', $skin->getSkinName(), 'Constructor argument' );
        }
 
        /**
index d967588..9b81d6d 100644 (file)
@@ -15,6 +15,13 @@ use Wikimedia\TestingAccessWrapper;
  * @covers ChangesListSpecialPage
  */
 class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase {
+       public function setUp() {
+               parent::setUp();
+               $this->setMwGlobals( [
+                       'wgStructuredChangeFiltersShowPreference' => true,
+               ] );
+       }
+
        protected function getPage() {
                $mock = $this->getMockBuilder( ChangesListSpecialPage::class )
                        ->setConstructorArgs(
@@ -974,15 +981,33 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                        [
                                [ 'hideanons' => 1, 'hideliu' => 1, 'hidebots' => 1 ],
                                true,
-                               [ 'hideliu' => 1, 'hidebots' => 1, ],
+                               [ 'userExpLevel' => 'unregistered', 'hidebots' => 1, ],
                        ],
-
                        [
                                [ 'hideanons' => 1, 'hideliu' => 1, 'hidebots' => 0 ],
                                true,
                                [ 'hidebots' => 0, 'hidehumans' => 1 ],
                        ],
-
+                       [
+                               [ 'hideanons' => 1 ],
+                               true,
+                               [ 'userExpLevel' => 'registered' ]
+                       ],
+                       [
+                               [ 'hideliu' => 1 ],
+                               true,
+                               [ 'userExpLevel' => 'unregistered' ]
+                       ],
+                       [
+                               [ 'hideanons' => 1, 'hidebots' => 1 ],
+                               true,
+                               [ 'userExpLevel' => 'registered', 'hidebots' => 1 ]
+                       ],
+                       [
+                               [ 'hideliu' => 1, 'hidebots' => 0 ],
+                               true,
+                               [ 'userExpLevel' => 'unregistered', 'hidebots' => 0 ]
+                       ],
                        [
                                [ 'hidemyself' => 1, 'hidebyothers' => 1 ],
                                true,
index 89fd1b0..84fa71a 100644 (file)
@@ -8,7 +8,10 @@ class SpecialMyLanguageTest extends MediaWikiTestCase {
        public function addDBDataOnce() {
                $titles = [
                        'Page/Another',
+                       'Page/Another/ar',
+                       'Page/Another/en',
                        'Page/Another/ru',
+                       'Page/Another/zh-hans',
                ];
                foreach ( $titles as $title ) {
                        $page = WikiPage::factory( Title::newFromText( $title ) );
@@ -54,12 +57,22 @@ class SpecialMyLanguageTest extends MediaWikiTestCase {
        }
 
        public static function provideFindTitle() {
+               // See addDBDataOnce() for page declarations
                return [
+                       // [ $expected, $subpage, $langCode, $userLang ]
                        [ null, '::Fail', 'en', 'en' ],
                        [ 'Page/Another', 'Page/Another/en', 'en', 'en' ],
                        [ 'Page/Another', 'Page/Another', 'en', 'en' ],
                        [ 'Page/Another/ru', 'Page/Another', 'en', 'ru' ],
                        [ 'Page/Another', 'Page/Another', 'en', 'es' ],
+                       [ 'Page/Another/zh-hans', 'Page/Another', 'en', 'zh-hans' ],
+                       [ 'Page/Another/zh-hans', 'Page/Another', 'en', 'zh-mo' ],
+                       [ 'Page/Another/en', 'Page/Another', 'de', 'es' ],
+                       [ 'Page/Another/ar', 'Page/Another', 'en', 'ar' ],
+                       [ 'Page/Another/ar', 'Page/Another', 'en', 'arz' ],
+                       [ 'Page/Another/ar', 'Page/Another/de', 'en', 'arz' ],
+                       [ 'Page/Another/ru', 'Page/Another/ru', 'en', 'arz' ],
+                       [ 'Page/Another/ar', 'Page/Another/ru', 'en', 'ar' ],
                ];
        }
 }
index 930bbe4..b1d8c69 100644 (file)
@@ -9,7 +9,7 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  * @author Daniel Kinzler
  * @author Addshore
- * @author Thiemo Mättig
+ * @author Thiemo Kreuz
  */
 abstract class SpecialPageTestBase extends MediaWikiTestCase {
 
index 7c40a2d..f46ad20 100644 (file)
@@ -14,14 +14,13 @@ class UploadStashTest extends MediaWikiTestCase {
        /**
         * @var string
         */
-       private $bug29408File;
+       private $tmpFile;
 
        protected function setUp() {
                parent::setUp();
 
-               // Setup a file for T31408
-               $this->bug29408File = wfTempDir() . '/bug29408';
-               file_put_contents( $this->bug29408File, "\x00" );
+               $this->tmpFile = $this->getNewTempFile();
+               file_put_contents( $this->tmpFile, "\x00" );
 
                self::$users = [
                        'sysop' => new TestUser(
@@ -39,18 +38,6 @@ class UploadStashTest extends MediaWikiTestCase {
                ];
        }
 
-       protected function tearDown() {
-               if ( file_exists( $this->bug29408File . "." ) ) {
-                       unlink( $this->bug29408File . "." );
-               }
-
-               if ( file_exists( $this->bug29408File ) ) {
-                       unlink( $this->bug29408File );
-               }
-
-               parent::tearDown();
-       }
-
        /**
         * @todo give this test a real name explaining what is being tested here
         */
@@ -61,7 +48,7 @@ class UploadStashTest extends MediaWikiTestCase {
                $stash = new UploadStash( $repo );
 
                // Throws exception caught by PHPUnit on failure
-               $file = $stash->stashFile( $this->bug29408File );
+               $file = $stash->stashFile( $this->tmpFile );
                // We'll never reach this point if we hit T31408
                $this->assertTrue( true, 'Unrecognized file without extension' );
 
@@ -104,4 +91,23 @@ class UploadStashTest extends MediaWikiTestCase {
                $this->assertTrue( UploadFromStash::isValidRequest( $request ) );
        }
 
+       public function testExceptionWhenStoreTempFails() {
+               $mockRepoStoreStatusResult = Status::newFatal( 'TEST_ERROR' );
+               $mockRepo = $this->getMockBuilder( FileRepo::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mockRepo->expects( $this->once() )
+                       ->method( 'storeTemp' )
+                       ->willReturn( $mockRepoStoreStatusResult );
+
+               $stash = new UploadStash( $mockRepo );
+               try {
+                       $stash->stashFile( $this->tmpFile );
+                       $this->fail( 'Expected UploadStashFileException not thrown' );
+               } catch ( UploadStashFileException $e ) {
+                       $this->assertInstanceOf( 'ILocalizedException', $e );
+               } catch ( Exception $e ) {
+                       $this->fail( 'Unexpected exception class ' . get_class( $e ) );
+               }
+       }
 }
index 52fd320..2721c18 100644 (file)
@@ -600,7 +600,13 @@ class UserTest extends MediaWikiTestCase {
                        'wgSecretKey' => MWCryptRand::generateHex( 64, true ),
                ] );
 
+               // Unregister the hooks for proper unit testing
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'PerformRetroactiveAutoblock' => []
+               ] );
+
                // 1. Log in a test user, and block them.
+               $userBlocker = $this->getTestSysop()->getUser();
                $user1tmp = $this->getTestUser()->getUser();
                $request1 = new FauxRequest();
                $request1->getSession()->setUser( $user1tmp );
@@ -610,6 +616,7 @@ class UserTest extends MediaWikiTestCase {
                        'expiry' => wfTimestamp( TS_MW, $expiryFiveHours ),
                ] );
                $block->setTarget( $user1tmp );
+               $block->setBlocker( $userBlocker );
                $res = $block->insert();
                $this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
                $user1 = User::newFromSession( $request1 );
@@ -640,7 +647,8 @@ class UserTest extends MediaWikiTestCase {
                $this->assertTrue( $user2->isAnon() );
                $this->assertFalse( $user2->isLoggedIn() );
                $this->assertTrue( $user2->isBlocked() );
-               $this->assertEquals( true, $user2->getBlock()->isAutoblocking() ); // Non-strict type-check.
+               // Non-strict type-check.
+               $this->assertEquals( true, $user2->getBlock()->isAutoblocking(), 'Autoblock does not work' );
                // Can't directly compare the objects becuase of member type differences.
                // One day this will work: $this->assertEquals( $block, $user2->getBlock() );
                $this->assertEquals( $block->getId(), $user2->getBlock()->getId() );
@@ -673,12 +681,19 @@ class UserTest extends MediaWikiTestCase {
                        'wgSecretKey' => MWCryptRand::generateHex( 64, true ),
                ] );
 
+               // Unregister the hooks for proper unit testing
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'PerformRetroactiveAutoblock' => []
+               ] );
+
                // 1. Log in a test user, and block them.
+               $userBlocker = $this->getTestSysop()->getUser();
                $testUser = $this->getTestUser()->getUser();
                $request1 = new FauxRequest();
                $request1->getSession()->setUser( $testUser );
                $block = new Block( [ 'enableAutoblock' => true ] );
                $block->setTarget( $testUser );
+               $block->setBlocker( $userBlocker );
                $res = $block->insert();
                $this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
                $user = User::newFromSession( $request1 );
@@ -710,12 +725,20 @@ class UserTest extends MediaWikiTestCase {
                        'wgCookiePrefix' => 'wm_infinite_block',
                        'wgSecretKey' => MWCryptRand::generateHex( 64, true ),
                ] );
+
+               // Unregister the hooks for proper unit testing
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'PerformRetroactiveAutoblock' => []
+               ] );
+
                // 1. Log in a test user, and block them indefinitely.
+               $userBlocker = $this->getTestSysop()->getUser();
                $user1Tmp = $this->getTestUser()->getUser();
                $request1 = new FauxRequest();
                $request1->getSession()->setUser( $user1Tmp );
                $block = new Block( [ 'enableAutoblock' => true, 'expiry' => 'infinity' ] );
                $block->setTarget( $user1Tmp );
+               $block->setBlocker( $userBlocker );
                $res = $block->insert();
                $this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
                $user1 = User::newFromSession( $request1 );
@@ -798,12 +821,19 @@ class UserTest extends MediaWikiTestCase {
                        'wgSecretKey' => MWCryptRand::generateHex( 64, true ),
                ] );
 
+               // Unregister the hooks for proper unit testing
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'PerformRetroactiveAutoblock' => []
+               ] );
+
                // 1. Log in a blocked test user.
+               $userBlocker = $this->getTestSysop()->getUser();
                $user1tmp = $this->getTestUser()->getUser();
                $request1 = new FauxRequest();
                $request1->getSession()->setUser( $user1tmp );
                $block = new Block( [ 'enableAutoblock' => true ] );
                $block->setTarget( $user1tmp );
+               $block->setBlocker( $userBlocker );
                $res = $block->insert();
                $this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
                $user1 = User::newFromSession( $request1 );
@@ -836,12 +866,19 @@ class UserTest extends MediaWikiTestCase {
                        'wgSecretKey' => null,
                ] );
 
+               // Unregister the hooks for proper unit testing
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'PerformRetroactiveAutoblock' => []
+               ] );
+
                // 1. Log in a blocked test user.
+               $userBlocker = $this->getTestSysop()->getUser();
                $user1tmp = $this->getTestUser()->getUser();
                $request1 = new FauxRequest();
                $request1->getSession()->setUser( $user1tmp );
                $block = new Block( [ 'enableAutoblock' => true ] );
                $block->setTarget( $user1tmp );
+               $block->setBlocker( $userBlocker );
                $res = $block->insert();
                $this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
                $user1 = User::newFromSession( $request1 );
diff --git a/tests/phpunit/includes/watcheditem/WatchedItemIntegrationTest.php b/tests/phpunit/includes/watcheditem/WatchedItemIntegrationTest.php
new file mode 100644 (file)
index 0000000..01e7ecb
--- /dev/null
@@ -0,0 +1,145 @@
+<?php
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers WatchedItem
+ */
+class WatchedItemIntegrationTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               parent::setUp();
+               self::$users['WatchedItemIntegrationTestUser']
+                       = new TestUser( 'WatchedItemIntegrationTestUser' );
+
+               $this->hideDeprecated( 'WatchedItem::fromUserTitle' );
+               $this->hideDeprecated( 'WatchedItem::addWatch' );
+               $this->hideDeprecated( 'WatchedItem::removeWatch' );
+               $this->hideDeprecated( 'WatchedItem::isWatched' );
+               $this->hideDeprecated( 'WatchedItem::duplicateEntries' );
+               $this->hideDeprecated( 'WatchedItem::batchAddWatch' );
+       }
+
+       private function getUser() {
+               return self::$users['WatchedItemIntegrationTestUser']->getUser();
+       }
+
+       public function testWatchAndUnWatchItem() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               // Cleanup after previous tests
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+
+               $this->assertFalse(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should not initially be watched'
+               );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should be watched'
+               );
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+               $this->assertFalse(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should be unwatched'
+               );
+       }
+
+       public function testUpdateAndResetNotificationTimestamp() {
+               $user = $this->getUser();
+               $otherUser = ( new TestUser( 'WatchedItemIntegrationTestUser_otherUser' ) )->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+
+               EmailNotification::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
+               $this->assertEquals(
+                       '20150202010101',
+                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+               );
+
+               MediaWikiServices::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
+                       $user, $title
+               );
+               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+       }
+
+       public function testDuplicateAllAssociatedEntries() {
+               $user = $this->getUser();
+               $titleOld = Title::newFromText( 'WatchedItemIntegrationTestPageOld' );
+               $titleNew = Title::newFromText( 'WatchedItemIntegrationTestPageNew' );
+               WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->addWatch();
+               WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->addWatch();
+               // Cleanup after previous tests
+               WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->removeWatch();
+               WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->removeWatch();
+
+               WatchedItem::duplicateEntries( $titleOld, $titleNew );
+
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
+               );
+       }
+
+       public function testIsWatched_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+       }
+
+       public function testGetNotificationTimestamp_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               MediaWikiServices::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
+                       $user, $title
+               );
+
+               $this->assertEquals(
+                       null,
+                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+               );
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+       }
+
+       public function testRemoveWatch_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+               $previousRights = $user->mRights;
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+               $user->mRights = $previousRights;
+               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+       }
+
+       public function testGetNotificationTimestamp_falseOnNotWatched() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+       }
+
+}
diff --git a/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php b/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php
new file mode 100644 (file)
index 0000000..62ba5f6
--- /dev/null
@@ -0,0 +1,1676 @@
+<?php
+
+use Wikimedia\ScopedCallback;
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @covers WatchedItemQueryService
+ */
+class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|Database
+        */
+       private function getMockDb() {
+               $mock = $this->getMockBuilder( Database::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $mock->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function ( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function ( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+
+               $mock->expects( $this->any() )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return "'$value'";
+                       } ) );
+
+               $mock->expects( $this->any() )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnArgument( 0 ) );
+
+               $mock->expects( $this->any() )
+                       ->method( 'bitAnd' )
+                       ->willReturnCallback( function ( $a, $b ) {
+                               return "($a & $b)";
+                       } );
+
+               return $mock;
+       }
+
+       /**
+        * @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb
+        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
+        */
+       private function getMockLoadBalancer( $mockDb ) {
+               $mock = $this->getMockBuilder( LoadBalancer::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'getConnectionRef' )
+                       ->with( DB_REPLICA )
+                       ->will( $this->returnValue( $mockDb ) );
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockNonAnonUserWithId( $id ) {
+               $mock = $this->getMockBuilder( User::class )->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'isAnon' )
+                       ->will( $this->returnValue( false ) );
+               $mock->expects( $this->any() )
+                       ->method( 'getId' )
+                       ->will( $this->returnValue( $id ) );
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockUnrestrictedNonAnonUserWithId( $id ) {
+               $mock = $this->getMockNonAnonUserWithId( $id );
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowed' )
+                       ->will( $this->returnValue( true ) );
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowedAny' )
+                       ->will( $this->returnValue( true ) );
+               $mock->expects( $this->any() )
+                       ->method( 'useRCPatrol' )
+                       ->will( $this->returnValue( true ) );
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @param string $notAllowedAction
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id, $notAllowedAction ) {
+               $mock = $this->getMockNonAnonUserWithId( $id );
+
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowed' )
+                       ->will( $this->returnCallback( function ( $action ) use ( $notAllowedAction ) {
+                               return $action !== $notAllowedAction;
+                       } ) );
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowedAny' )
+                       ->will( $this->returnCallback( function () use ( $notAllowedAction ) {
+                               $actions = func_get_args();
+                               return !in_array( $notAllowedAction, $actions );
+                       } ) );
+
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockNonAnonUserWithIdAndNoPatrolRights( $id ) {
+               $mock = $this->getMockNonAnonUserWithId( $id );
+
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowed' )
+                       ->will( $this->returnValue( true ) );
+               $mock->expects( $this->any() )
+                       ->method( 'isAllowedAny' )
+                       ->will( $this->returnValue( true ) );
+
+               $mock->expects( $this->any() )
+                       ->method( 'useRCPatrol' )
+                       ->will( $this->returnValue( false ) );
+               $mock->expects( $this->any() )
+                       ->method( 'useNPPatrol' )
+                       ->will( $this->returnValue( false ) );
+
+               return $mock;
+       }
+
+       private function getMockAnonUser() {
+               $mock = $this->getMockBuilder( User::class )->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'isAnon' )
+                       ->will( $this->returnValue( true ) );
+               return $mock;
+       }
+
+       private function getFakeRow( array $rowValues ) {
+               $fakeRow = new stdClass();
+               foreach ( $rowValues as $valueName => $value ) {
+                       $fakeRow->$valueName = $value;
+               }
+               return $fakeRow;
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page' ],
+                               [
+                                       'rc_id',
+                                       'rc_namespace',
+                                       'rc_title',
+                                       'rc_timestamp',
+                                       'rc_type',
+                                       'rc_deleted',
+                                       'wl_notificationtimestamp',
+                                       'rc_cur_id',
+                                       'rc_this_oldid',
+                                       'rc_last_oldid',
+                               ],
+                               [
+                                       'wl_user' => 1,
+                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
+                               ],
+                               $this->isType( 'string' ),
+                               [
+                                       'LIMIT' => 3,
+                               ],
+                               [
+                                       'watchlist' => [
+                                               'INNER JOIN',
+                                               [
+                                                       'wl_namespace=rc_namespace',
+                                                       'wl_title=rc_title'
+                                               ]
+                                       ],
+                                       'page' => [
+                                               'LEFT JOIN',
+                                               'rc_cur_id=page_id',
+                                       ],
+                               ]
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow( [
+                                       'rc_id' => 1,
+                                       'rc_namespace' => 0,
+                                       'rc_title' => 'Foo1',
+                                       'rc_timestamp' => '20151212010101',
+                                       'rc_type' => RC_NEW,
+                                       'rc_deleted' => 0,
+                                       'wl_notificationtimestamp' => '20151212010101',
+                               ] ),
+                               $this->getFakeRow( [
+                                       'rc_id' => 2,
+                                       'rc_namespace' => 1,
+                                       'rc_title' => 'Foo2',
+                                       'rc_timestamp' => '20151212010102',
+                                       'rc_type' => RC_NEW,
+                                       'rc_deleted' => 0,
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                               $this->getFakeRow( [
+                                       'rc_id' => 3,
+                                       'rc_namespace' => 1,
+                                       'rc_title' => 'Foo3',
+                                       'rc_timestamp' => '20151212010103',
+                                       'rc_type' => RC_NEW,
+                                       'rc_deleted' => 0,
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                       ] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $startFrom = null;
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user, [ 'limit' => 2 ], $startFrom
+               );
+
+               $this->assertInternalType( 'array', $items );
+               $this->assertCount( 2, $items );
+
+               foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
+                       $this->assertInstanceOf( WatchedItem::class, $watchedItem );
+                       $this->assertInternalType( 'array', $recentChangeInfo );
+               }
+
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
+                       $items[0][0]
+               );
+               $this->assertEquals(
+                       [
+                               'rc_id' => 1,
+                               'rc_namespace' => 0,
+                               'rc_title' => 'Foo1',
+                               'rc_timestamp' => '20151212010101',
+                               'rc_type' => RC_NEW,
+                               'rc_deleted' => 0,
+                       ],
+                       $items[0][1]
+               );
+
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
+                       $items[1][0]
+               );
+               $this->assertEquals(
+                       [
+                               'rc_id' => 2,
+                               'rc_namespace' => 1,
+                               'rc_title' => 'Foo2',
+                               'rc_timestamp' => '20151212010102',
+                               'rc_type' => RC_NEW,
+                               'rc_deleted' => 0,
+                       ],
+                       $items[1][1]
+               );
+
+               $this->assertEquals( [ '20151212010103', 3 ], $startFrom );
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo_extension() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page', 'extension_dummy_table' ],
+                               [
+                                       'rc_id',
+                                       'rc_namespace',
+                                       'rc_title',
+                                       'rc_timestamp',
+                                       'rc_type',
+                                       'rc_deleted',
+                                       'wl_notificationtimestamp',
+                                       'rc_cur_id',
+                                       'rc_this_oldid',
+                                       'rc_last_oldid',
+                                       'extension_dummy_field',
+                               ],
+                               [
+                                       'wl_user' => 1,
+                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
+                                       'extension_dummy_cond',
+                               ],
+                               $this->isType( 'string' ),
+                               [
+                                       'extension_dummy_option',
+                               ],
+                               [
+                                       'watchlist' => [
+                                               'INNER JOIN',
+                                               [
+                                                       'wl_namespace=rc_namespace',
+                                                       'wl_title=rc_title'
+                                               ]
+                                       ],
+                                       'page' => [
+                                               'LEFT JOIN',
+                                               'rc_cur_id=page_id',
+                                       ],
+                                       'extension_dummy_join_cond' => [],
+                               ]
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow( [
+                                       'rc_id' => 1,
+                                       'rc_namespace' => 0,
+                                       'rc_title' => 'Foo1',
+                                       'rc_timestamp' => '20151212010101',
+                                       'rc_type' => RC_NEW,
+                                       'rc_deleted' => 0,
+                                       'wl_notificationtimestamp' => '20151212010101',
+                               ] ),
+                               $this->getFakeRow( [
+                                       'rc_id' => 2,
+                                       'rc_namespace' => 1,
+                                       'rc_title' => 'Foo2',
+                                       'rc_timestamp' => '20151212010102',
+                                       'rc_type' => RC_NEW,
+                                       'rc_deleted' => 0,
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                       ] ) );
+
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $mockExtension = $this->getMockBuilder( WatchedItemQueryServiceExtension::class )
+                       ->getMock();
+               $mockExtension->expects( $this->once() )
+                       ->method( 'modifyWatchedItemsWithRCInfoQuery' )
+                       ->with(
+                               $this->identicalTo( $user ),
+                               $this->isType( 'array' ),
+                               $this->isInstanceOf( IDatabase::class ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' )
+                       )
+                       ->will( $this->returnCallback( function (
+                               $user, $options, $db, &$tables, &$fields, &$conds, &$dbOptions, &$joinConds
+                       ) {
+                               $tables[] = 'extension_dummy_table';
+                               $fields[] = 'extension_dummy_field';
+                               $conds[] = 'extension_dummy_cond';
+                               $dbOptions[] = 'extension_dummy_option';
+                               $joinConds['extension_dummy_join_cond'] = [];
+                       } ) );
+               $mockExtension->expects( $this->once() )
+                       ->method( 'modifyWatchedItemsWithRCInfo' )
+                       ->with(
+                               $this->identicalTo( $user ),
+                               $this->isType( 'array' ),
+                               $this->isInstanceOf( IDatabase::class ),
+                               $this->isType( 'array' ),
+                               $this->anything(),
+                               $this->anything() // Can't test for null here, PHPUnit applies this after the callback
+                       )
+                       ->will( $this->returnCallback( function ( $user, $options, $db, &$items, $res, &$startFrom ) {
+                               foreach ( $items as $i => &$item ) {
+                                       $item[1]['extension_dummy_field'] = $i;
+                               }
+                               unset( $item );
+
+                               $this->assertNull( $startFrom );
+                               $startFrom = [ '20160203123456', 42 ];
+                       } ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               TestingAccessWrapper::newFromObject( $queryService )->extensions = [ $mockExtension ];
+
+               $startFrom = null;
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user, [], $startFrom
+               );
+
+               $this->assertInternalType( 'array', $items );
+               $this->assertCount( 2, $items );
+
+               foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
+                       $this->assertInstanceOf( WatchedItem::class, $watchedItem );
+                       $this->assertInternalType( 'array', $recentChangeInfo );
+               }
+
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
+                       $items[0][0]
+               );
+               $this->assertEquals(
+                       [
+                               'rc_id' => 1,
+                               'rc_namespace' => 0,
+                               'rc_title' => 'Foo1',
+                               'rc_timestamp' => '20151212010101',
+                               'rc_type' => RC_NEW,
+                               'rc_deleted' => 0,
+                               'extension_dummy_field' => 0,
+                       ],
+                       $items[0][1]
+               );
+
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
+                       $items[1][0]
+               );
+               $this->assertEquals(
+                       [
+                               'rc_id' => 2,
+                               'rc_namespace' => 1,
+                               'rc_title' => 'Foo2',
+                               'rc_timestamp' => '20151212010102',
+                               'rc_type' => RC_NEW,
+                               'rc_deleted' => 0,
+                               'extension_dummy_field' => 1,
+                       ],
+                       $items[1][1]
+               );
+
+               $this->assertEquals( [ '20160203123456', 42 ], $startFrom );
+       }
+
+       public function getWatchedItemsWithRecentChangeInfoOptionsProvider() {
+               return [
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_FLAGS ] ],
+                               null,
+                               [],
+                               [ 'rc_type', 'rc_minor', 'rc_bot' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_USER ] ],
+                               null,
+                               [],
+                               [ 'rc_user_text' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_USER_ID ] ],
+                               null,
+                               [],
+                               [ 'rc_user' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
+                               null,
+                               [],
+                               [
+                                       'rc_comment_text' => 'rc_comment',
+                                       'rc_comment_data' => 'NULL',
+                                       'rc_comment_cid' => 'NULL',
+                               ],
+                               [],
+                               [],
+                               [],
+                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD ],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
+                               null,
+                               [ 'comment_rc_comment' => 'comment' ],
+                               [
+                                       'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )',
+                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
+                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
+                               ],
+                               [],
+                               [],
+                               [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
+                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_BOTH ],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
+                               null,
+                               [ 'comment_rc_comment' => 'comment' ],
+                               [
+                                       'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )',
+                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
+                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
+                               ],
+                               [],
+                               [],
+                               [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
+                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_NEW ],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ],
+                               null,
+                               [ 'comment_rc_comment' => 'comment' ],
+                               [
+                                       'rc_comment_text' => 'comment_rc_comment.comment_text',
+                                       'rc_comment_data' => 'comment_rc_comment.comment_data',
+                                       'rc_comment_cid' => 'comment_rc_comment.comment_id',
+                               ],
+                               [],
+                               [],
+                               [ 'comment_rc_comment' => [ 'JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ],
+                               [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW ],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_PATROL_INFO ] ],
+                               null,
+                               [],
+                               [ 'rc_patrolled', 'rc_log_type' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_SIZES ] ],
+                               null,
+                               [],
+                               [ 'rc_old_len', 'rc_new_len' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_LOG_INFO ] ],
+                               null,
+                               [],
+                               [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ],
+                               [],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'namespaceIds' => [ 0, 1 ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'wl_namespace' => [ 0, 1 ] ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'namespaceIds' => [ 0, "1; DROP TABLE watchlist;\n--" ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'wl_namespace' => [ 0, 1 ] ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'rcTypes' => [ RC_EDIT, RC_NEW ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_type' => [ RC_EDIT, RC_NEW ] ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               null,
+                               [],
+                               [],
+                               [],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_NEWER ],
+                               null,
+                               [],
+                               [],
+                               [],
+                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER, 'start' => '20151212010101' ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp <= '20151212010101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER, 'end' => '20151212010101' ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp >= '20151212010101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+                       [
+                               [
+                                       'dir' => WatchedItemQueryService::DIR_OLDER,
+                                       'start' => '20151212020101',
+                                       'end' => '20151212010101'
+                               ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp <= '20151212020101'", "rc_timestamp >= '20151212010101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_NEWER, 'start' => '20151212010101' ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp >= '20151212010101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_NEWER, 'end' => '20151212010101' ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp <= '20151212010101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
+                               [],
+                       ],
+                       [
+                               [
+                                       'dir' => WatchedItemQueryService::DIR_NEWER,
+                                       'start' => '20151212010101',
+                                       'end' => '20151212020101'
+                               ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_timestamp >= '20151212010101'", "rc_timestamp <= '20151212020101'" ],
+                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'limit' => 10 ],
+                               null,
+                               [],
+                               [],
+                               [],
+                               [ 'LIMIT' => 11 ],
+                               [],
+                       ],
+                       [
+                               [ 'limit' => "10; DROP TABLE watchlist;\n--" ],
+                               null,
+                               [],
+                               [],
+                               [],
+                               [ 'LIMIT' => 11 ],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_MINOR ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_minor != 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_MINOR ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_minor = 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_BOT ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_bot != 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_BOT ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_bot = 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_ANON ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_user = 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_ANON ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_user != 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_PATROLLED ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_patrolled != 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_PATROLLED ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_patrolled = 0' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_UNREAD ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_timestamp >= wl_notificationtimestamp' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'filters' => [ WatchedItemQueryService::FILTER_NOT_UNREAD ] ],
+                               null,
+                               [],
+                               [],
+                               [ 'wl_notificationtimestamp IS NULL OR rc_timestamp < wl_notificationtimestamp' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'onlyByUser' => 'SomeOtherUser' ],
+                               null,
+                               [],
+                               [],
+                               [ 'rc_user_text' => 'SomeOtherUser' ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'notByUser' => 'SomeOtherUser' ],
+                               null,
+                               [],
+                               [],
+                               [ "rc_user_text != 'SomeOtherUser'" ],
+                               [],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ '20151212010101', 123 ],
+                               [],
+                               [],
+                               [
+                                       "(rc_timestamp < '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id <= 123))"
+                               ],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_NEWER ],
+                               [ '20151212010101', 123 ],
+                               [],
+                               [],
+                               [
+                                       "(rc_timestamp > '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id >= 123))"
+                               ],
+                               [ 'ORDER BY' => [ 'rc_timestamp', 'rc_id' ] ],
+                               [],
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ '20151212010101', "123; DROP TABLE watchlist;\n--" ],
+                               [],
+                               [],
+                               [
+                                       "(rc_timestamp < '20151212010101') OR ((rc_timestamp = '20151212010101') AND (rc_id <= 123))"
+                               ],
+                               [ 'ORDER BY' => [ 'rc_timestamp DESC', 'rc_id DESC' ] ],
+                               [],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider getWatchedItemsWithRecentChangeInfoOptionsProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_optionsAndEmptyResult(
+               array $options,
+               $startFrom,
+               array $expectedExtraTables,
+               array $expectedExtraFields,
+               array $expectedExtraConds,
+               array $expectedDbOptions,
+               array $expectedExtraJoinConds,
+               array $globals = []
+       ) {
+               // Sigh. This test class doesn't extend MediaWikiTestCase, so we have to reinvent setMwGlobals().
+               if ( $globals ) {
+                       $resetGlobals = [];
+                       foreach ( $globals as $k => $v ) {
+                               $resetGlobals[$k] = $GLOBALS[$k];
+                               $GLOBALS[$k] = $v;
+                       }
+                       $reset = new ScopedCallback( function () use ( $resetGlobals ) {
+                               foreach ( $resetGlobals as $k => $v ) {
+                                       $GLOBALS[$k] = $v;
+                               }
+                       } );
+               }
+
+               $expectedTables = array_merge( [ 'recentchanges', 'watchlist', 'page' ], $expectedExtraTables );
+               $expectedFields = array_merge(
+                       [
+                               'rc_id',
+                               'rc_namespace',
+                               'rc_title',
+                               'rc_timestamp',
+                               'rc_type',
+                               'rc_deleted',
+                               'wl_notificationtimestamp',
+
+                               'rc_cur_id',
+                               'rc_this_oldid',
+                               'rc_last_oldid',
+                       ],
+                       $expectedExtraFields
+               );
+               $expectedConds = array_merge(
+                       [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)', ],
+                       $expectedExtraConds
+               );
+               $expectedJoinConds = array_merge(
+                       [
+                               'watchlist' => [
+                                       'INNER JOIN',
+                                       [
+                                               'wl_namespace=rc_namespace',
+                                               'wl_title=rc_title'
+                                       ]
+                               ],
+                               'page' => [
+                                       'LEFT JOIN',
+                                       'rc_cur_id=page_id',
+                               ],
+                       ],
+                       $expectedExtraJoinConds
+               );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               $expectedTables,
+                               $expectedFields,
+                               $expectedConds,
+                               $this->isType( 'string' ),
+                               $expectedDbOptions,
+                               $expectedJoinConds
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options, $startFrom );
+
+               $this->assertEmpty( $items );
+               $this->assertNull( $startFrom );
+       }
+
+       public function filterPatrolledOptionProvider() {
+               return [
+                       [ WatchedItemQueryService::FILTER_PATROLLED ],
+                       [ WatchedItemQueryService::FILTER_NOT_PATROLLED ],
+               ];
+       }
+
+       /**
+        * @dataProvider filterPatrolledOptionProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_filterPatrolledAndUserWithNoPatrolRights(
+               $filtersOption
+       ) {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page' ],
+                               $this->isType( 'array' ),
+                               [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' )
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $user = $this->getMockNonAnonUserWithIdAndNoPatrolRights( 1 );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user,
+                       [ 'filters' => [ $filtersOption ] ]
+               );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function mysqlIndexOptimizationProvider() {
+               return [
+                       [
+                               'mysql',
+                               [],
+                               [ "rc_timestamp > ''" ],
+                       ],
+                       [
+                               'mysql',
+                               [ 'start' => '20151212010101', 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ "rc_timestamp <= '20151212010101'" ],
+                       ],
+                       [
+                               'mysql',
+                               [ 'end' => '20151212010101', 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ "rc_timestamp >= '20151212010101'" ],
+                       ],
+                       [
+                               'postgres',
+                               [],
+                               [],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider mysqlIndexOptimizationProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_mysqlIndexOptimization(
+               $dbType,
+               array $options,
+               array $expectedExtraConds
+       ) {
+               $commonConds = [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ];
+               $conds = array_merge( $commonConds, $expectedExtraConds );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page' ],
+                               $this->isType( 'array' ),
+                               $conds,
+                               $this->isType( 'string' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' )
+                       )
+                       ->will( $this->returnValue( [] ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'getType' )
+                       ->will( $this->returnValue( $dbType ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function userPermissionRelatedExtraChecksProvider() {
+               return [
+                       [
+                               [],
+                               'deletedhistory',
+                               [
+                                       '(rc_type != ' . RC_LOG . ') OR ((rc_deleted & ' . LogPage::DELETED_ACTION . ') != ' .
+                                               LogPage::DELETED_ACTION . ')'
+                               ],
+                       ],
+                       [
+                               [],
+                               'suppressrevision',
+                               [
+                                       '(rc_type != ' . RC_LOG . ') OR (' .
+                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
+                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
+                               ],
+                       ],
+                       [
+                               [],
+                               'viewsuppressed',
+                               [
+                                       '(rc_type != ' . RC_LOG . ') OR (' .
+                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
+                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
+                               ],
+                       ],
+                       [
+                               [ 'onlyByUser' => 'SomeOtherUser' ],
+                               'deletedhistory',
+                               [
+                                       'rc_user_text' => 'SomeOtherUser',
+                                       '(rc_deleted & ' . Revision::DELETED_USER . ') != ' . Revision::DELETED_USER,
+                                       '(rc_type != ' . RC_LOG . ') OR ((rc_deleted & ' . LogPage::DELETED_ACTION . ') != ' .
+                                               LogPage::DELETED_ACTION . ')'
+                               ],
+                       ],
+                       [
+                               [ 'onlyByUser' => 'SomeOtherUser' ],
+                               'suppressrevision',
+                               [
+                                       'rc_user_text' => 'SomeOtherUser',
+                                       '(rc_deleted & ' . ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ) . ') != ' .
+                                               ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ),
+                                       '(rc_type != ' . RC_LOG . ') OR (' .
+                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
+                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
+                               ],
+                       ],
+                       [
+                               [ 'onlyByUser' => 'SomeOtherUser' ],
+                               'viewsuppressed',
+                               [
+                                       'rc_user_text' => 'SomeOtherUser',
+                                       '(rc_deleted & ' . ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ) . ') != ' .
+                                               ( Revision::DELETED_USER | Revision::DELETED_RESTRICTED ),
+                                       '(rc_type != ' . RC_LOG . ') OR (' .
+                                               '(rc_deleted & ' . ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ') != ' .
+                                               ( LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED ) . ')'
+                               ],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider userPermissionRelatedExtraChecksProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_userPermissionRelatedExtraChecks(
+               array $options,
+               $notAllowedAction,
+               array $expectedExtraConds
+       ) {
+               $commonConds = [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ];
+               $conds = array_merge( $commonConds, $expectedExtraConds );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page' ],
+                               $this->isType( 'array' ),
+                               $conds,
+                               $this->isType( 'string' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' )
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1, $notAllowedAction );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo_allRevisionsOptionAndEmptyResult() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist' ],
+                               [
+                                       'rc_id',
+                                       'rc_namespace',
+                                       'rc_title',
+                                       'rc_timestamp',
+                                       'rc_type',
+                                       'rc_deleted',
+                                       'wl_notificationtimestamp',
+
+                                       'rc_cur_id',
+                                       'rc_this_oldid',
+                                       'rc_last_oldid',
+                               ],
+                               [ 'wl_user' => 1, ],
+                               $this->isType( 'string' ),
+                               [],
+                               [
+                                       'watchlist' => [
+                                               'INNER JOIN',
+                                               [
+                                                       'wl_namespace=rc_namespace',
+                                                       'wl_title=rc_title'
+                                               ]
+                                       ],
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, [ 'allRevisions' => true ] );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function getWatchedItemsWithRecentChangeInfoInvalidOptionsProvider() {
+               return [
+                       [
+                               [ 'rcTypes' => [ 1337 ] ],
+                               null,
+                               'Bad value for parameter $options[\'rcTypes\']',
+                       ],
+                       [
+                               [ 'rcTypes' => [ 'edit' ] ],
+                               null,
+                               'Bad value for parameter $options[\'rcTypes\']',
+                       ],
+                       [
+                               [ 'rcTypes' => [ RC_EDIT, 1337 ] ],
+                               null,
+                               'Bad value for parameter $options[\'rcTypes\']',
+                       ],
+                       [
+                               [ 'dir' => 'foo' ],
+                               null,
+                               'Bad value for parameter $options[\'dir\']',
+                       ],
+                       [
+                               [ 'start' => '20151212010101' ],
+                               null,
+                               'Bad value for parameter $options[\'dir\']: must be provided',
+                       ],
+                       [
+                               [ 'end' => '20151212010101' ],
+                               null,
+                               'Bad value for parameter $options[\'dir\']: must be provided',
+                       ],
+                       [
+                               [],
+                               [ '20151212010101', 123 ],
+                               'Bad value for parameter $options[\'dir\']: must be provided',
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               '20151212010101',
+                               'Bad value for parameter $startFrom: must be a two-element array',
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ '20151212010101' ],
+                               'Bad value for parameter $startFrom: must be a two-element array',
+                       ],
+                       [
+                               [ 'dir' => WatchedItemQueryService::DIR_OLDER ],
+                               [ '20151212010101', 123, 'foo' ],
+                               'Bad value for parameter $startFrom: must be a two-element array',
+                       ],
+                       [
+                               [ 'watchlistOwner' => $this->getMockUnrestrictedNonAnonUserWithId( 2 ) ],
+                               null,
+                               'Bad value for parameter $options[\'watchlistOwnerToken\']',
+                       ],
+                       [
+                               [ 'watchlistOwner' => 'Other User', 'watchlistOwnerToken' => 'some-token' ],
+                               null,
+                               'Bad value for parameter $options[\'watchlistOwner\']',
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider getWatchedItemsWithRecentChangeInfoInvalidOptionsProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_invalidOptions(
+               array $options,
+               $startFrom,
+               $expectedInExceptionMessage
+       ) {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( $this->anything() );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage );
+               $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options, $startFrom );
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo_usedInGeneratorOptionAndEmptyResult() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist', 'page' ],
+                               [
+                                       'rc_id',
+                                       'rc_namespace',
+                                       'rc_title',
+                                       'rc_timestamp',
+                                       'rc_type',
+                                       'rc_deleted',
+                                       'wl_notificationtimestamp',
+                                       'rc_cur_id',
+                               ],
+                               [ 'wl_user' => 1, '(rc_this_oldid=page_latest) OR (rc_type=3)' ],
+                               $this->isType( 'string' ),
+                               [],
+                               [
+                                       'watchlist' => [
+                                               'INNER JOIN',
+                                               [
+                                                       'wl_namespace=rc_namespace',
+                                                       'wl_title=rc_title'
+                                               ]
+                                       ],
+                                       'page' => [
+                                               'LEFT JOIN',
+                                               'rc_cur_id=page_id',
+                                       ],
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user,
+                       [ 'usedInGenerator' => true ]
+               );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo_usedInGeneratorAllRevisionsOptions() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'recentchanges', 'watchlist' ],
+                               [
+                                       'rc_id',
+                                       'rc_namespace',
+                                       'rc_title',
+                                       'rc_timestamp',
+                                       'rc_type',
+                                       'rc_deleted',
+                                       'wl_notificationtimestamp',
+                                       'rc_this_oldid',
+                               ],
+                               [ 'wl_user' => 1 ],
+                               $this->isType( 'string' ),
+                               [],
+                               [
+                                       'watchlist' => [
+                                               'INNER JOIN',
+                                               [
+                                                       'wl_namespace=rc_namespace',
+                                                       'wl_title=rc_title'
+                                               ]
+                                       ],
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user,
+                       [ 'usedInGenerator' => true, 'allRevisions' => true, ]
+               );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function testGetWatchedItemsWithRecentChangeInfo_watchlistOwnerOptionAndEmptyResult() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' ),
+                               [
+                                       'wl_user' => 2,
+                                       '(rc_this_oldid=page_latest) OR (rc_type=3)',
+                               ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'array' ),
+                               $this->isType( 'array' )
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+               $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 );
+               $otherUser->expects( $this->once() )
+                       ->method( 'getOption' )
+                       ->with( 'watchlisttoken' )
+                       ->willReturn( '0123456789abcdef' );
+
+               $items = $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user,
+                       [ 'watchlistOwner' => $otherUser, 'watchlistOwnerToken' => '0123456789abcdef' ]
+               );
+
+               $this->assertEmpty( $items );
+       }
+
+       public function invalidWatchlistTokenProvider() {
+               return [
+                       [ 'wrongToken' ],
+                       [ '' ],
+               ];
+       }
+
+       /**
+        * @dataProvider invalidWatchlistTokenProvider
+        */
+       public function testGetWatchedItemsWithRecentChangeInfo_watchlistOwnerAndInvalidToken( $token ) {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( $this->anything() );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 );
+               $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 );
+               $otherUser->expects( $this->once() )
+                       ->method( 'getOption' )
+                       ->with( 'watchlisttoken' )
+                       ->willReturn( '0123456789abcdef' );
+
+               $this->setExpectedException( ApiUsageException::class, 'Incorrect watchlist token provided' );
+               $queryService->getWatchedItemsWithRecentChangeInfo(
+                       $user,
+                       [ 'watchlistOwner' => $otherUser, 'watchlistOwnerToken' => $token ]
+               );
+       }
+
+       public function testGetWatchedItemsForUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [ 'wl_user' => 1 ]
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Foo1',
+                                       'wl_notificationtimestamp' => '20151212010101',
+                               ] ),
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Foo2',
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                       ] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $items = $queryService->getWatchedItemsForUser( $user );
+
+               $this->assertInternalType( 'array', $items );
+               $this->assertCount( 2, $items );
+               $this->assertContainsOnlyInstancesOf( WatchedItem::class, $items );
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
+                       $items[0]
+               );
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
+                       $items[1]
+               );
+       }
+
+       public function provideGetWatchedItemsForUserOptions() {
+               return [
+                       [
+                               [ 'namespaceIds' => [ 0, 1 ], ],
+                               [ 'wl_namespace' => [ 0, 1 ], ],
+                               []
+                       ],
+                       [
+                               [ 'sort' => WatchedItemQueryService::SORT_ASC, ],
+                               [],
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       ],
+                       [
+                               [
+                                       'namespaceIds' => [ 0 ],
+                                       'sort' => WatchedItemQueryService::SORT_ASC,
+                               ],
+                               [ 'wl_namespace' => [ 0 ], ],
+                               [ 'ORDER BY' => 'wl_title ASC' ]
+                       ],
+                       [
+                               [ 'limit' => 10 ],
+                               [],
+                               [ 'LIMIT' => 10 ]
+                       ],
+                       [
+                               [
+                                       'namespaceIds' => [ 0, "1; DROP TABLE watchlist;\n--" ],
+                                       'limit' => "10; DROP TABLE watchlist;\n--",
+                               ],
+                               [ 'wl_namespace' => [ 0, 1 ], ],
+                               [ 'LIMIT' => 10 ]
+                       ],
+                       [
+                               [ 'filter' => WatchedItemQueryService::FILTER_CHANGED ],
+                               [ 'wl_notificationtimestamp IS NOT NULL' ],
+                               []
+                       ],
+                       [
+                               [ 'filter' => WatchedItemQueryService::FILTER_NOT_CHANGED ],
+                               [ 'wl_notificationtimestamp IS NULL' ],
+                               []
+                       ],
+                       [
+                               [ 'sort' => WatchedItemQueryService::SORT_DESC, ],
+                               [],
+                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
+                       ],
+                       [
+                               [
+                                       'namespaceIds' => [ 0 ],
+                                       'sort' => WatchedItemQueryService::SORT_DESC,
+                               ],
+                               [ 'wl_namespace' => [ 0 ], ],
+                               [ 'ORDER BY' => 'wl_title DESC' ]
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetWatchedItemsForUserOptions
+        */
+       public function testGetWatchedItemsForUser_optionsAndEmptyResult(
+               array $options,
+               array $expectedConds,
+               array $expectedDbOptions
+       ) {
+               $mockDb = $this->getMockDb();
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $expectedConds = array_merge( [ 'wl_user' => 1 ], $expectedConds );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               $expectedConds,
+                               $this->isType( 'string' ),
+                               $expectedDbOptions
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+
+               $items = $queryService->getWatchedItemsForUser( $user, $options );
+               $this->assertEmpty( $items );
+       }
+
+       public function provideGetWatchedItemsForUser_fromUntilStartFromOptions() {
+               return [
+                       [
+                               [
+                                       'from' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_ASC
+                               ],
+                               [ "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))", ],
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       ],
+                       [
+                               [
+                                       'from' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_DESC,
+                               ],
+                               [ "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))", ],
+                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
+                       ],
+                       [
+                               [
+                                       'until' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_ASC
+                               ],
+                               [ "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))", ],
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       ],
+                       [
+                               [
+                                       'until' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_DESC
+                               ],
+                               [ "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))", ],
+                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
+                       ],
+                       [
+                               [
+                                       'from' => new TitleValue( 0, 'AnotherDbKey' ),
+                                       'until' => new TitleValue( 0, 'SomeOtherDbKey' ),
+                                       'startFrom' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_ASC
+                               ],
+                               [
+                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'AnotherDbKey'))",
+                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeOtherDbKey'))",
+                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'SomeDbKey'))",
+                               ],
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       ],
+                       [
+                               [
+                                       'from' => new TitleValue( 0, 'SomeOtherDbKey' ),
+                                       'until' => new TitleValue( 0, 'AnotherDbKey' ),
+                                       'startFrom' => new TitleValue( 0, 'SomeDbKey' ),
+                                       'sort' => WatchedItemQueryService::SORT_DESC
+                               ],
+                               [
+                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeOtherDbKey'))",
+                                       "(wl_namespace > 0) OR ((wl_namespace = 0) AND (wl_title >= 'AnotherDbKey'))",
+                                       "(wl_namespace < 0) OR ((wl_namespace = 0) AND (wl_title <= 'SomeDbKey'))",
+                               ],
+                               [ 'ORDER BY' => [ 'wl_namespace DESC', 'wl_title DESC' ] ]
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetWatchedItemsForUser_fromUntilStartFromOptions
+        */
+       public function testGetWatchedItemsForUser_fromUntilStartFromOptions(
+               array $options,
+               array $expectedConds,
+               array $expectedDbOptions
+       ) {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $expectedConds = array_merge( [ 'wl_user' => 1 ], $expectedConds );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->any() )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function ( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function ( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               $expectedConds,
+                               $this->isType( 'string' ),
+                               $expectedDbOptions
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+
+               $items = $queryService->getWatchedItemsForUser( $user, $options );
+               $this->assertEmpty( $items );
+       }
+
+       public function getWatchedItemsForUserInvalidOptionsProvider() {
+               return [
+                       [
+                               [ 'sort' => 'foo' ],
+                               'Bad value for parameter $options[\'sort\']'
+                       ],
+                       [
+                               [ 'filter' => 'foo' ],
+                               'Bad value for parameter $options[\'filter\']'
+                       ],
+                       [
+                               [ 'from' => new TitleValue( 0, 'SomeDbKey' ), ],
+                               'Bad value for parameter $options[\'sort\']: must be provided'
+                       ],
+                       [
+                               [ 'until' => new TitleValue( 0, 'SomeDbKey' ), ],
+                               'Bad value for parameter $options[\'sort\']: must be provided'
+                       ],
+                       [
+                               [ 'startFrom' => new TitleValue( 0, 'SomeDbKey' ), ],
+                               'Bad value for parameter $options[\'sort\']: must be provided'
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider getWatchedItemsForUserInvalidOptionsProvider
+        */
+       public function testGetWatchedItemsForUser_invalidOptionThrowsException(
+               array $options,
+               $expectedInExceptionMessage
+       ) {
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $this->getMockDb() ) );
+
+               $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage );
+               $queryService->getWatchedItemsForUser( $this->getMockNonAnonUserWithId( 1 ), $options );
+       }
+
+       public function testGetWatchedItemsForUser_userNotAllowedToViewWatchlist() {
+               $mockDb = $this->getMockDb();
+
+               $mockDb->expects( $this->never() )
+                       ->method( $this->anything() );
+
+               $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) );
+
+               $items = $queryService->getWatchedItemsForUser( $this->getMockAnonUser() );
+               $this->assertEmpty( $items );
+       }
+
+}
diff --git a/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php b/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php
new file mode 100644 (file)
index 0000000..61b62aa
--- /dev/null
@@ -0,0 +1,214 @@
+<?php
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers WatchedItemStore
+ */
+class WatchedItemStoreIntegrationTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               parent::setUp();
+               self::$users['WatchedItemStoreIntegrationTestUser']
+                       = new TestUser( 'WatchedItemStoreIntegrationTestUser' );
+       }
+
+       private function getUser() {
+               return self::$users['WatchedItemStoreIntegrationTestUser']->getUser();
+       }
+
+       public function testWatchAndUnWatchItem() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+               // Cleanup after previous tests
+               $store->removeWatch( $user, $title );
+               $initialWatchers = $store->countWatchers( $title );
+               $initialUserWatchedItems = $store->countWatchedItems( $user );
+
+               $this->assertFalse(
+                       $store->isWatched( $user, $title ),
+                       'Page should not initially be watched'
+               );
+
+               $store->addWatch( $user, $title );
+               $this->assertTrue(
+                       $store->isWatched( $user, $title ),
+                       'Page should be watched'
+               );
+               $this->assertEquals( $initialUserWatchedItems + 1, $store->countWatchedItems( $user ) );
+               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
+               $this->assertCount( $initialUserWatchedItems + 1, $watchedItemsForUser );
+               $watchedItemsForUserHasExpectedItem = false;
+               foreach ( $watchedItemsForUser as $watchedItem ) {
+                       if (
+                               $watchedItem->getUser()->equals( $user ) &&
+                               $watchedItem->getLinkTarget() == $title->getTitleValue()
+                       ) {
+                               $watchedItemsForUserHasExpectedItem = true;
+                       }
+               }
+               $this->assertTrue(
+                       $watchedItemsForUserHasExpectedItem,
+                       'getWatchedItemsForUser should contain the page'
+               );
+               $this->assertEquals( $initialWatchers + 1, $store->countWatchers( $title ) );
+               $this->assertEquals(
+                       $initialWatchers + 1,
+                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialWatchers + 1 ] ],
+                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 1 ] )
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
+                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 2 ] )
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+
+               $store->removeWatch( $user, $title );
+               $this->assertFalse(
+                       $store->isWatched( $user, $title ),
+                       'Page should be unwatched'
+               );
+               $this->assertEquals( $initialUserWatchedItems, $store->countWatchedItems( $user ) );
+               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
+               $this->assertCount( $initialUserWatchedItems, $watchedItemsForUser );
+               $watchedItemsForUserHasExpectedItem = false;
+               foreach ( $watchedItemsForUser as $watchedItem ) {
+                       if (
+                               $watchedItem->getUser()->equals( $user ) &&
+                               $watchedItem->getLinkTarget() == $title->getTitleValue()
+                       ) {
+                               $watchedItemsForUserHasExpectedItem = true;
+                       }
+               }
+               $this->assertFalse(
+                       $watchedItemsForUserHasExpectedItem,
+                       'getWatchedItemsForUser should not contain the page'
+               );
+               $this->assertEquals( $initialWatchers, $store->countWatchers( $title ) );
+               $this->assertEquals(
+                       $initialWatchers,
+                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => false ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+       }
+
+       public function testUpdateResetAndSetNotificationTimestamp() {
+               $user = $this->getUser();
+               $otherUser = ( new TestUser( 'WatchedItemStoreIntegrationTestUser_otherUser' ) )->getUser();
+               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+               $store->addWatch( $user, $title );
+               $this->assertNull( $store->loadWatchedItem( $user, $title )->getNotificationTimestamp() );
+               $initialVisitingWatchers = $store->countVisitingWatchers( $title, '20150202020202' );
+               $initialUnreadNotifications = $store->countUnreadNotifications( $user );
+
+               $store->updateNotificationTimestamp( $otherUser, $title, '20150202010101' );
+               $this->assertEquals(
+                       '20150202010101',
+                       $store->loadWatchedItem( $user, $title )->getNotificationTimestamp()
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => '20150202010101' ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers - 1,
+                       $store->countVisitingWatchers( $title, '20150202020202' )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers - 1,
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ]
+                       )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       $initialUnreadNotifications + 1,
+                       $store->countUnreadNotifications( $user )
+               );
+               $this->assertSame(
+                       true,
+                       $store->countUnreadNotifications( $user, $initialUnreadNotifications + 1 )
+               );
+
+               $this->assertTrue( $store->resetNotificationTimestamp( $user, $title ) );
+               $this->assertNull( $store->getWatchedItem( $user, $title )->getNotificationTimestamp() );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers,
+                       $store->countVisitingWatchers( $title, '20150202020202' )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers,
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ]
+                       )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialVisitingWatchers ] ],
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers
+                       )
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers + 1
+                       )
+               );
+
+               // setNotificationTimestampsForUser specifying a title
+               $this->assertTrue(
+                       $store->setNotificationTimestampsForUser( $user, '20200202020202', [ $title ] )
+               );
+               $this->assertEquals(
+                       '20200202020202',
+                       $store->getWatchedItem( $user, $title )->getNotificationTimestamp()
+               );
+
+               // setNotificationTimestampsForUser not specifying a title
+               $this->assertTrue(
+                       $store->setNotificationTimestampsForUser( $user, '20210202020202' )
+               );
+               $this->assertEquals(
+                       '20210202020202',
+                       $store->getWatchedItem( $user, $title )->getNotificationTimestamp()
+               );
+       }
+
+       public function testDuplicateAllAssociatedEntries() {
+               $user = $this->getUser();
+               $titleOld = Title::newFromText( 'WatchedItemStoreIntegrationTestPageOld' );
+               $titleNew = Title::newFromText( 'WatchedItemStoreIntegrationTestPageNew' );
+               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+               $store->addWatch( $user, $titleOld->getSubjectPage() );
+               $store->addWatch( $user, $titleOld->getTalkPage() );
+               // Cleanup after previous tests
+               $store->removeWatch( $user, $titleNew->getSubjectPage() );
+               $store->removeWatch( $user, $titleNew->getTalkPage() );
+
+               $store->duplicateAllAssociatedEntries( $titleOld, $titleNew );
+
+               $this->assertTrue( $store->isWatched( $user, $titleOld->getSubjectPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleOld->getTalkPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleNew->getSubjectPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleNew->getTalkPage() ) );
+       }
+
+}
diff --git a/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php
new file mode 100644 (file)
index 0000000..43b4fe9
--- /dev/null
@@ -0,0 +1,2675 @@
+<?php
+use MediaWiki\Linker\LinkTarget;
+use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\ScopedCallback;
+
+/**
+ * @author Addshore
+ *
+ * @covers WatchedItemStore
+ */
+class WatchedItemStoreUnitTest extends MediaWikiTestCase {
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|IDatabase
+        */
+       private function getMockDb() {
+               return $this->createMock( IDatabase::class );
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
+        */
+       private function getMockLoadBalancer(
+               $mockDb,
+               $expectedConnectionType = null
+       ) {
+               $mock = $this->getMockBuilder( LoadBalancer::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               if ( $expectedConnectionType !== null ) {
+                       $mock->expects( $this->any() )
+                               ->method( 'getConnectionRef' )
+                               ->with( $expectedConnectionType )
+                               ->will( $this->returnValue( $mockDb ) );
+               } else {
+                       $mock->expects( $this->any() )
+                               ->method( 'getConnectionRef' )
+                               ->will( $this->returnValue( $mockDb ) );
+               }
+               return $mock;
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|HashBagOStuff
+        */
+       private function getMockCache() {
+               $mock = $this->getMockBuilder( HashBagOStuff::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'makeKey' )
+                       ->will( $this->returnCallback( function () {
+                               return implode( ':', func_get_args() );
+                       } ) );
+               return $mock;
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|ReadOnlyMode
+        */
+       private function getMockReadOnlyMode( $readOnly = false ) {
+               $mock = $this->getMockBuilder( ReadOnlyMode::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'isReadOnly' )
+                       ->will( $this->returnValue( $readOnly ) );
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockNonAnonUserWithId( $id ) {
+               $mock = $this->createMock( User::class );
+               $mock->expects( $this->any() )
+                       ->method( 'isAnon' )
+                       ->will( $this->returnValue( false ) );
+               $mock->expects( $this->any() )
+                       ->method( 'getId' )
+                       ->will( $this->returnValue( $id ) );
+               return $mock;
+       }
+
+       /**
+        * @return User
+        */
+       private function getAnonUser() {
+               return User::newFromName( 'Anon_User' );
+       }
+
+       private function getFakeRow( array $rowValues ) {
+               $fakeRow = new stdClass();
+               foreach ( $rowValues as $valueName => $value ) {
+                       $fakeRow->$valueName = $value;
+               }
+               return $fakeRow;
+       }
+
+       private function newWatchedItemStore( LoadBalancer $loadBalancer, HashBagOStuff $cache,
+               ReadOnlyMode $readOnlyMode
+       ) {
+               return new WatchedItemStore(
+                       $loadBalancer,
+                       $cache,
+                       $readOnlyMode
+               );
+       }
+
+       public function testCountWatchedItems() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_user' => $user->getId(),
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 12 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals( 12, $store->countWatchedItems( $user ) );
+       }
+
+       public function testCountWatchers() {
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_namespace' => $titleValue->getNamespace(),
+                                       'wl_title' => $titleValue->getDBkey(),
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 7 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals( 7, $store->countWatchers( $titleValue ) );
+       }
+
+       public function testCountWatchersMultiple() {
+               $titleValues = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 0, 'OtherDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
+                       ),
+               ];
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                               )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                               [ 'makeWhereFrom2d return value' ],
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals( $expected, $store->countWatchersMultiple( $titleValues ) );
+       }
+
+       public function provideIntWithDbUnsafeVersion() {
+               return [
+                       [ 50 ],
+                       [ "50; DROP TABLE watchlist;\n--" ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountWatchersMultiple_withMinimumWatchers( $minWatchers ) {
+               $titleValues = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 0, 'OtherDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
+                       ),
+               ];
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                               [ 'makeWhereFrom2d return value' ],
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                                       'HAVING' => 'COUNT(*) >= 50',
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countWatchersMultiple( $titleValues, [ 'minimumWatchers' => $minWatchers ] )
+               );
+       }
+
+       public function testCountVisitingWatchers() {
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_namespace' => $titleValue->getNamespace(),
+                                       'wl_title' => $titleValue->getDBkey(),
+                                       'wl_notificationtimestamp >= \'TS111TS\' OR wl_notificationtimestamp IS NULL',
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 7 ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals( 7, $store->countVisitingWatchers( $titleValue, '111' ) );
+       }
+
+       public function testCountVisitingWatchersMultiple() {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+               ];
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 2 * 3 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 3 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function ( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function ( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+               $mockDb->expects( $this->never() )
+                       ->method( 'makeWhereFrom2d' );
+
+               $expectedCond =
+                       '((wl_namespace = 0) AND (' .
+                       "(((wl_title = 'SomeDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')) OR (' .
+                       "(wl_title = 'OtherDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ((wl_namespace = 1) AND (' .
+                       "(((wl_title = 'AnotherDbKey') AND (".
+                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')))))';
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               $expectedCond,
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
+               );
+       }
+
+       public function testCountVisitingWatchersMultiple_withMissingTargets() {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+                       [ new TitleValue( 0, 'SomeNotExisitingDbKey' ), null ],
+                       [ new TitleValue( 0, 'OtherNotExisitingDbKey' ), null ],
+               ];
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
+                       $this->getFakeRow(
+                               [ 'wl_title' => 'SomeNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 100 ]
+                       ),
+                       $this->getFakeRow(
+                               [ 'wl_title' => 'OtherNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 200 ]
+                       ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 2 * 3 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 3 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function ( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function ( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeNotExisitingDbKey' => 1, 'OtherNotExisitingDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+
+               $expectedCond =
+                       '((wl_namespace = 0) AND (' .
+                       "(((wl_title = 'SomeDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')) OR (' .
+                       "(wl_title = 'OtherDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ((wl_namespace = 1) AND (' .
+                       "(((wl_title = 'AnotherDbKey') AND (".
+                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ' .
+                       '(makeWhereFrom2d return value)';
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               $expectedCond,
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $expected = [
+                       0 => [
+                               'SomeDbKey' => 100, 'OtherDbKey' => 300,
+                               'SomeNotExisitingDbKey' => 100, 'OtherNotExisitingDbKey' => 200
+                       ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
+               );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountVisitingWatchersMultiple_withMinimumWatchers( $minWatchers ) {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->will( $this->returnValue( 'makeList return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               'makeList return value',
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                                       'HAVING' => 'COUNT(*) >= 50',
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( [] )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 0, 'OtherDbKey' => 0 ],
+                       1 => [ 'AnotherDbKey' => 0 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds, $minWatchers )
+               );
+       }
+
+       public function testCountUnreadNotifications() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 9 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals( 9, $store->countUnreadNotifications( $user ) );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountUnreadNotifications_withUnreadLimit_overLimit( $limit ) {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' ),
+                               [ 'LIMIT' => 50 ]
+                       )
+                       ->will( $this->returnValue( 50 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertSame(
+                       true,
+                       $store->countUnreadNotifications( $user, $limit )
+               );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountUnreadNotifications_withUnreadLimit_underLimit( $limit ) {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' ),
+                               [ 'LIMIT' => 50 ]
+                       )
+                       ->will( $this->returnValue( 9 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       9,
+                       $store->countUnreadNotifications( $user, $limit )
+               );
+       }
+
+       public function testDuplicateEntry_nothingToDuplicate() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ],
+                               'WatchedItemStore::duplicateEntry',
+                               [ 'FOR UPDATE' ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->duplicateEntry(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testDuplicateEntry_somethingToDuplicate() {
+               $fakeRows = [
+                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+                       $this->getFakeRow( [ 'wl_user' => 2, 'wl_notificationtimestamp' => null ] ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                                       [
+                                               'wl_user' => 2,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => null,
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->duplicateEntry(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testDuplicateAllAssociatedEntries_nothingToDuplicate() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->duplicateAllAssociatedEntries(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function provideLinkTargetPairs() {
+               return [
+                       [ Title::newFromText( 'Old_Title' ), Title::newFromText( 'New_Title' ) ],
+                       [ new TitleValue( 0, 'Old_Title' ),  new TitleValue( 0, 'New_Title' ) ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideLinkTargetPairs
+        */
+       public function testDuplicateAllAssociatedEntries_somethingToDuplicate(
+               LinkTarget $oldTarget,
+               LinkTarget $newTarget
+       ) {
+               $fakeRows = [
+                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => $oldTarget->getNamespace(),
+                                       'wl_title' => $oldTarget->getDBkey(),
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => $newTarget->getNamespace(),
+                                               'wl_title' => $newTarget->getDBkey(),
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+               $mockDb->expects( $this->at( 2 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => $oldTarget->getNamespace() + 1,
+                                       'wl_title' => $oldTarget->getDBkey(),
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 3 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => $newTarget->getNamespace() + 1,
+                                               'wl_title' => $newTarget->getDBkey(),
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->duplicateAllAssociatedEntries(
+                       $oldTarget,
+                       $newTarget
+               );
+       }
+
+       public function testAddWatch_nonAnonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'insert' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ]
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:Some_Page:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->addWatch(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       Title::newFromText( 'Some_Page' )
+               );
+       }
+
+       public function testAddWatch_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $store->addWatch(
+                       $this->getAnonUser(),
+                       Title::newFromText( 'Some_Page' )
+               );
+       }
+
+       public function testAddWatchBatchForUser_readOnlyDBReturnsFalse() {
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $this->getMockDb() ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode( true )
+               );
+
+               $this->assertFalse(
+                       $store->addWatchBatchForUser(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               [ new TitleValue( 0, 'Some_Page' ), new TitleValue( 1, 'Some_Page' ) ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatchForUser_nonAnonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'insert' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ],
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 1,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ]
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->exactly( 2 ) )
+                       ->method( 'delete' );
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'delete' )
+                       ->with( '0:Some_Page:1' );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'delete' )
+                       ->with( '1:Some_Page:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $mockUser = $this->getMockNonAnonUserWithId( 1 );
+
+               $this->assertTrue(
+                       $store->addWatchBatchForUser(
+                               $mockUser,
+                               [ new TitleValue( 0, 'Some_Page' ), new TitleValue( 1, 'Some_Page' ) ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatchForUser_anonymousUsersAreSkipped() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->addWatchBatchForUser(
+                               $this->getAnonUser(),
+                               [ new TitleValue( 0, 'Other_Page' ) ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatchReturnsTrue_whenGivenEmptyList() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->addWatchBatchForUser( $user, [] )
+               );
+       }
+
+       public function testLoadWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $watchedItem = $store->loadWatchedItem(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' )
+               );
+               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+       }
+
+       public function testLoadWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->loadWatchedItem(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testLoadWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->loadWatchedItem(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'affectedRows' )
+                       ->will( $this->returnValue( 1 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->removeWatch(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'affectedRows' )
+                       ->will( $this->returnValue( 0 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->removeWatch(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->removeWatch(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $watchedItem = $store->getWatchedItem(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' )
+               );
+               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+       }
+
+       public function testGetWatchedItem_cachedItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockUser = $this->getMockNonAnonUserWithId( 1 );
+               $linkTarget = new TitleValue( 0, 'SomeDbKey' );
+               $cachedItem = new WatchedItem( $mockUser, $linkTarget, '20151212010101' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       )
+                       ->will( $this->returnValue( $cachedItem ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       $cachedItem,
+                       $store->getWatchedItem(
+                               $mockUser,
+                               $linkTarget
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->getWatchedItem(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->getWatchedItem(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItemsForUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [ 'wl_user' => 1 ]
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Foo1',
+                                       'wl_notificationtimestamp' => '20151212010101',
+                               ] ),
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Foo2',
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                       ] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $watchedItems = $store->getWatchedItemsForUser( $user );
+
+               $this->assertInternalType( 'array', $watchedItems );
+               $this->assertCount( 2, $watchedItems );
+               foreach ( $watchedItems as $watchedItem ) {
+                       $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               }
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
+                       $watchedItems[0]
+               );
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
+                       $watchedItems[1]
+               );
+       }
+
+       public function provideDbTypes() {
+               return [
+                       [ false, DB_REPLICA ],
+                       [ true, DB_MASTER ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideDbTypes
+        */
+       public function testGetWatchedItemsForUser_optionsAndEmptyResult( $forWrite, $dbType ) {
+               $mockDb = $this->getMockDb();
+               $mockCache = $this->getMockCache();
+               $mockLoadBalancer = $this->getMockLoadBalancer( $mockDb, $dbType );
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [ 'wl_user' => 1 ],
+                               $this->isType( 'string' ),
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $store = $this->newWatchedItemStore(
+                       $mockLoadBalancer,
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $watchedItems = $store->getWatchedItemsForUser(
+                       $user,
+                       [ 'forWrite' => $forWrite, 'sort' => WatchedItemStore::SORT_ASC ]
+               );
+               $this->assertEquals( [], $watchedItems );
+       }
+
+       public function testGetWatchedItemsForUser_badSortOptionThrowsException() {
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $this->getMockDb() ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->setExpectedException( 'InvalidArgumentException' );
+               $store->getWatchedItemsForUser(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       [ 'sort' => 'foo' ]
+               );
+       }
+
+       public function testIsWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->isWatched(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testIsWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->isWatched(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testIsWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->isWatched(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $dbResult = [
+                       $this->getFakeRow( [
+                               'wl_namespace' => 0,
+                               'wl_title' => 'SomeDbKey',
+                               'wl_notificationtimestamp' => '20151212010101',
+                       ] ),
+                       $this->getFakeRow(
+                               [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'AnotherDbKey',
+                                       'wl_notificationtimestamp' => null,
+                               ]
+                       ),
+               ];
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( $dbResult ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->exactly( 2 ) )
+                       ->method( 'get' )
+                       ->withConsecutive(
+                               [ '0:SomeDbKey:1' ],
+                               [ '1:AnotherDbKey:1' ]
+                       )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_notWatchedTarget() {
+               $targets = [
+                       new TitleValue( 0, 'OtherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'OtherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( $this->getFakeRow( [] ) ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:OtherDbKey:1' )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'OtherDbKey' => false, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_cachedItem() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $cachedItem = new WatchedItem( $user, $targets[0], '20151212010101' );
+
+               $mockDb = $this->getMockDb();
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ 1 => [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow(
+                                       [ 'wl_namespace' => 1, 'wl_title' => 'AnotherDbKey', 'wl_notificationtimestamp' => null, ]
+                               )
+                       ] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( $cachedItem ) );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'get' )
+                       ->with( '1:AnotherDbKey:1' )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $user, $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_allItemsCached() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $cachedItems = [
+                       new WatchedItem( $user, $targets[0], '20151212010101' ),
+                       new WatchedItem( $user, $targets[1], null ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )->method( $this->anything() );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( $cachedItems[0] ) );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'get' )
+                       ->with( '1:AnotherDbKey:1' )
+                       ->will( $this->returnValue( $cachedItems[1] ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $user, $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_anonymousUser() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )->method( $this->anything() );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( $this->anything() );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => false, ],
+                               1 => [ 'AnotherDbKey' => false, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getAnonUser(), $targets )
+               );
+       }
+
+       public function testResetNotificationTimestamp_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->resetNotificationTimestamp(
+                               $this->getAnonUser(),
+                               Title::newFromText( 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testResetNotificationTimestamp_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertFalse(
+                       $store->resetNotificationTimestamp(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               Title::newFromText( 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testResetNotificationTimestamp_item() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $title = Title::newFromText( 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1',
+                               $this->isInstanceOf( WatchedItem::class )
+                       );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               // Note: This does not actually assert the job is correct
+               $callableCallCounter = 0;
+               $mockCallback = function ( $callable ) use ( &$callableCallCounter ) {
+                       $callableCallCounter++;
+                       $this->assertInternalType( 'callable', $callable );
+               };
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testResetNotificationTimestamp_noItemForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $title = Title::newFromText( 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               // Note: This does not actually assert the job is correct
+               $callableCallCounter = 0;
+               $mockCallback = function ( $callable ) use ( &$callableCallCounter ) {
+                       $callableCallCounter++;
+                       $this->assertInternalType( 'callable', $callable );
+               };
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force'
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       /**
+        * @param string $text
+        * @param int $ns
+        *
+        * @return PHPUnit_Framework_MockObject_MockObject|Title
+        */
+       private function getMockTitle( $text, $ns = 0 ) {
+               $title = $this->createMock( Title::class );
+               $title->expects( $this->any() )
+                       ->method( 'getText' )
+                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+               $title->expects( $this->any() )
+                       ->method( 'getDbKey' )
+                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+               $title->expects( $this->any() )
+                       ->method( 'getNamespace' )
+                       ->will( $this->returnValue( $ns ) );
+               return $title;
+       }
+
+       private function verifyCallbackJob(
+               $callback,
+               LinkTarget $expectedTitle,
+               $expectedUserId,
+               callable $notificationTimestampCondition
+       ) {
+               $this->assertInternalType( 'callable', $callback );
+
+               $callbackReflector = new ReflectionFunction( $callback );
+               $vars = $callbackReflector->getStaticVariables();
+               $this->assertArrayHasKey( 'job', $vars );
+               $this->assertInstanceOf( ActivityUpdateJob::class, $vars['job'] );
+
+               /** @var ActivityUpdateJob $job */
+               $job = $vars['job'];
+               $this->assertEquals( $expectedTitle->getDBkey(), $job->getTitle()->getDBkey() );
+               $this->assertEquals( $expectedTitle->getNamespace(), $job->getTitle()->getNamespace() );
+
+               $jobParams = $job->getParams();
+               $this->assertArrayHasKey( 'type', $jobParams );
+               $this->assertEquals( 'updateWatchlistNotification', $jobParams['type'] );
+               $this->assertArrayHasKey( 'userid', $jobParams );
+               $this->assertEquals( $expectedUserId, $jobParams['userid'] );
+               $this->assertArrayHasKey( 'notifTime', $jobParams );
+               $this->assertTrue( $notificationTimestampCondition( $jobParams['notifTime'] ) );
+       }
+
+       public function testResetNotificationTimestamp_oldidSpecifiedLatestRevisionForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeTitle' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( false ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $callableCallCounter = 0;
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function ( $callable ) use ( &$callableCallCounter, $title, $user ) {
+                               $callableCallCounter++;
+                               $this->verifyCallbackJob(
+                                       $callable,
+                                       $title,
+                                       $user->getId(),
+                                       function ( $time ) {
+                                               return $time === null;
+                                       }
+                               );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testResetNotificationTimestamp_oldidSpecifiedNotLatestRevisionForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeDbKey' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( 33 ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $addUpdateCallCounter = 0;
+               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
+                               $addUpdateCallCounter++;
+                               $this->verifyCallbackJob(
+                                       $callable,
+                                       $title,
+                                       $user->getId(),
+                                       function ( $time ) {
+                                               return $time !== null && $time > '20151212010101';
+                                       }
+                               );
+                       }
+               );
+
+               $getTimestampCallCounter = 0;
+               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+                               $getTimestampCallCounter++;
+                               $this->assertEquals( $title, $titleParam );
+                               $this->assertEquals( $oldid, $oldidParam );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $addUpdateCallCounter );
+               $this->assertEquals( 1, $getTimestampCallCounter );
+
+               ScopedCallback::consume( $scopedOverrideDeferred );
+               ScopedCallback::consume( $scopedOverrideRevision );
+       }
+
+       public function testResetNotificationTimestamp_notWatchedPageForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeDbKey' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( 33 ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( false ) );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $callableCallCounter = 0;
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function ( $callable ) use ( &$callableCallCounter, $title, $user ) {
+                               $callableCallCounter++;
+                               $this->verifyCallbackJob(
+                                       $callable,
+                                       $title,
+                                       $user->getId(),
+                                       function ( $time ) {
+                                               return $time === null;
+                                       }
+                               );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testResetNotificationTimestamp_futureNotificationTimestampForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeDbKey' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( 33 ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $addUpdateCallCounter = 0;
+               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
+                               $addUpdateCallCounter++;
+                               $this->verifyCallbackJob(
+                                       $callable,
+                                       $title,
+                                       $user->getId(),
+                                       function ( $time ) {
+                                               return $time === '30151212010101';
+                                       }
+                               );
+                       }
+               );
+
+               $getTimestampCallCounter = 0;
+               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+                               $getTimestampCallCounter++;
+                               $this->assertEquals( $title, $titleParam );
+                               $this->assertEquals( $oldid, $oldidParam );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $addUpdateCallCounter );
+               $this->assertEquals( 1, $getTimestampCallCounter );
+
+               ScopedCallback::consume( $scopedOverrideDeferred );
+               ScopedCallback::consume( $scopedOverrideRevision );
+       }
+
+       public function testResetNotificationTimestamp_futureNotificationTimestampNotForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeDbKey' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( 33 ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $addUpdateCallCounter = 0;
+               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
+                               $addUpdateCallCounter++;
+                               $this->verifyCallbackJob(
+                                       $callable,
+                                       $title,
+                                       $user->getId(),
+                                       function ( $time ) {
+                                               return $time === false;
+                                       }
+                               );
+                       }
+               );
+
+               $getTimestampCallCounter = 0;
+               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+                       function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+                               $getTimestampCallCounter++;
+                               $this->assertEquals( $title, $titleParam );
+                               $this->assertEquals( $oldid, $oldidParam );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               '',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $addUpdateCallCounter );
+               $this->assertEquals( 1, $getTimestampCallCounter );
+
+               ScopedCallback::consume( $scopedOverrideDeferred );
+               ScopedCallback::consume( $scopedOverrideRevision );
+       }
+
+       public function testSetNotificationTimestampsForUser_anonUser() {
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $this->getMockDb() ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+               $this->assertFalse( $store->setNotificationTimestampsForUser( $this->getAnonUser(), '' ) );
+       }
+
+       public function testSetNotificationTimestampsForUser_allRows() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $timestamp = '20100101010101';
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_notificationtimestamp' => 'TS' . $timestamp . 'TS' ],
+                               [ 'wl_user' => 1 ]
+                       )
+                       ->will( $this->returnValue( true ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->setNotificationTimestampsForUser( $user, $timestamp )
+               );
+       }
+
+       public function testSetNotificationTimestampsForUser_nullTimestamp() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $timestamp = null;
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_notificationtimestamp' => null ],
+                               [ 'wl_user' => 1 ]
+                       )
+                       ->will( $this->returnValue( true ) );
+               $mockDb->expects( $this->exactly( 0 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->setNotificationTimestampsForUser( $user, $timestamp )
+               );
+       }
+
+       public function testSetNotificationTimestampsForUser_specificTargets() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $timestamp = '20100101010101';
+               $targets = [ new TitleValue( 0, 'Foo' ), new TitleValue( 0, 'Bar' ) ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_notificationtimestamp' => 'TS' . $timestamp . 'TS' ],
+                               [ 'wl_user' => 1, 0 => 'makeWhereFrom2d return value' ]
+                       )
+                       ->will( $this->returnValue( true ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function ( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'Foo' => 1, 'Bar' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertTrue(
+                       $store->setNotificationTimestampsForUser( $user, $timestamp, $targets )
+               );
+       }
+
+       public function testUpdateNotificationTimestamp_watchersExist() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectFieldValues' )
+                       ->with(
+                               'watchlist',
+                               'wl_user',
+                               [
+                                       'wl_user != 1',
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                                       'wl_notificationtimestamp IS NULL'
+                               ]
+                       )
+                       ->will( $this->returnValue( [ '2', '3' ] ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_notificationtimestamp' => null ],
+                               [
+                                       'wl_user' => [ 2, 3 ],
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $this->assertEquals(
+                       [ 2, 3 ],
+                       $store->updateNotificationTimestamp(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' ),
+                               '20151212010101'
+                       )
+               );
+       }
+
+       public function testUpdateNotificationTimestamp_noWatchers() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectFieldValues' )
+                       ->with(
+                               'watchlist',
+                               'wl_user',
+                               [
+                                       'wl_user != 1',
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                                       'wl_notificationtimestamp IS NULL'
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( [] )
+                       );
+               $mockDb->expects( $this->never() )
+                       ->method( 'update' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               $watchers = $store->updateNotificationTimestamp(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       '20151212010101'
+               );
+               $this->assertInternalType( 'array', $watchers );
+               $this->assertEmpty( $watchers );
+       }
+
+       public function testUpdateNotificationTimestamp_clearsCachedItems() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectFieldValues' )
+                       ->will(
+                               $this->returnValue( [ '2', '3' ] )
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with( '0:SomeDbKey:1', $this->isType( 'object' ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = $this->newWatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
+               );
+
+               // This will add the item to the cache
+               $store->getWatchedItem( $user, $titleValue );
+
+               $store->updateNotificationTimestamp(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       $titleValue,
+                       '20151212010101'
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/watcheditem/WatchedItemUnitTest.php b/tests/phpunit/includes/watcheditem/WatchedItemUnitTest.php
new file mode 100644 (file)
index 0000000..8897645
--- /dev/null
@@ -0,0 +1,150 @@
+<?php
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * @author Addshore
+ *
+ * @covers WatchedItem
+ */
+class WatchedItemUnitTest extends MediaWikiTestCase {
+
+       /**
+        * @param int $id
+        *
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockUser( $id ) {
+               $user = $this->createMock( User::class );
+               $user->expects( $this->any() )
+                       ->method( 'getId' )
+                       ->will( $this->returnValue( $id ) );
+               $user->expects( $this->any() )
+                       ->method( 'isAllowed' )
+                       ->will( $this->returnValue( true ) );
+               return $user;
+       }
+
+       public function provideUserTitleTimestamp() {
+               $user = $this->getMockUser( 111 );
+               return [
+                       [ $user, Title::newFromText( 'SomeTitle' ), null ],
+                       [ $user, Title::newFromText( 'SomeTitle' ), '20150101010101' ],
+                       [ $user, new TitleValue( 0, 'TVTitle', 'frag' ), '20150101010101' ],
+               ];
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|WatchedItemStore
+        */
+       private function getMockWatchedItemStore() {
+               return $this->getMockBuilder( WatchedItemStore::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
+       /**
+        * @dataProvider provideUserTitleTimestamp
+        */
+       public function testConstruction( $user, LinkTarget $linkTarget, $notifTimestamp ) {
+               $item = new WatchedItem( $user, $linkTarget, $notifTimestamp );
+
+               $this->assertSame( $user, $item->getUser() );
+               $this->assertSame( $linkTarget, $item->getLinkTarget() );
+               $this->assertSame( $notifTimestamp, $item->getNotificationTimestamp() );
+
+               // The below tests the internal WatchedItem::getTitle method
+               $this->assertInstanceOf( 'Title', $item->getTitle() );
+               $this->assertSame( $linkTarget->getDBkey(), $item->getTitle()->getDBkey() );
+               $this->assertSame( $linkTarget->getFragment(), $item->getTitle()->getFragment() );
+               $this->assertSame( $linkTarget->getNamespace(), $item->getTitle()->getNamespace() );
+               $this->assertSame( $linkTarget->getText(), $item->getTitle()->getText() );
+       }
+
+       /**
+        * @dataProvider provideUserTitleTimestamp
+        */
+       public function testFromUserTitle( $user, $linkTarget, $timestamp ) {
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'loadWatchedItem' )
+                       ->with( $user, $linkTarget )
+                       ->will( $this->returnValue( new WatchedItem( $user, $linkTarget, $timestamp ) ) );
+               $this->setService( 'WatchedItemStore', $store );
+
+               $item = WatchedItem::fromUserTitle( $user, $linkTarget, User::IGNORE_USER_RIGHTS );
+
+               $this->assertEquals( $user, $item->getUser() );
+               $this->assertEquals( $linkTarget, $item->getLinkTarget() );
+               $this->assertEquals( $timestamp, $item->getNotificationTimestamp() );
+       }
+
+       public function testAddWatch() {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->createMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'addWatch' )
+                       ->with( $title, $checkRights );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertTrue( $item->addWatch() );
+       }
+
+       public function testRemoveWatch() {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->createMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'removeWatch' )
+                       ->with( $title, $checkRights );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertTrue( $item->removeWatch() );
+       }
+
+       public function provideBooleans() {
+               return [
+                       [ true ],
+                       [ false ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideBooleans
+        */
+       public function testIsWatched( $returnValue ) {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->createMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'isWatched' )
+                       ->with( $title, $checkRights )
+                       ->will( $this->returnValue( $returnValue ) );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertEquals( $returnValue, $item->isWatched() );
+       }
+
+       public function testDuplicateEntries() {
+               $oldTitle = Title::newFromText( 'OldTitle' );
+               $newTitle = Title::newFromText( 'NewTitle' );
+
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'duplicateAllAssociatedEntries' )
+                       ->with( $oldTitle, $newTitle );
+               $this->setService( 'WatchedItemStore', $store );
+
+               WatchedItem::duplicateEntries( $oldTitle, $newTitle );
+       }
+
+}
index 0da03df..950d2df 100644 (file)
@@ -6,7 +6,7 @@
  * @group Language
  *
  * @license GPL-2.0+
- * @author Thiemo Mättig
+ * @author Thiemo Kreuz
  */
 class LanguageCodeTest extends PHPUnit_Framework_TestCase {
 
index 81184aa..fc2ed33 100644 (file)
@@ -157,6 +157,25 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
                $wgRequest->setVal( 'variant', null );
                $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
        }
+
+       /**
+        * Test exhausting pcre.backtrack_limit
+        */
+       public function testAutoConvertT124404() {
+               $testString = '';
+               for ( $i = 0; $i < 1000; $i++ ) {
+                       $testString .= 'xxx xxx xxx';
+               }
+               $testString .= "\n<big id='в'></big>";
+               $old = ini_set( 'pcre.backtrack_limit', 200 );
+               $result = $this->lc->autoConvert( $testString, 'tg-latn' );
+               ini_set( 'pcre.backtrack_limit', $old );
+               // The в in the id attribute should not get converted to a v
+               $this->assertFalse(
+                       strpos( $result, 'v' ),
+                       "в converted to v despite being in attribue"
+               );
+       }
 }
 
 /**
index a474f20..cd52366 100644 (file)
@@ -479,7 +479,6 @@ class LanguageTest extends LanguageClassesTestCase {
                        [ 'fr', true, 'Two letters, minor case' ],
                        [ 'EN', false, 'Two letters, upper case' ],
                        [ 'tyv', true, 'Three letters' ],
-                       [ 'tokipona', true, 'long language code' ],
                        [ 'be-tarask', true, 'With dash' ],
                        [ 'be-x-old', true, 'With extension (two dashes)' ],
                        [ 'be_tarask', false, 'Reject underscores' ],
index a6d0f2e..d7a0074 100644 (file)
@@ -74,4 +74,31 @@ class LanguagePlTest extends LanguageClassesTestCase {
                        [ 'other', 201 ],
                ];
        }
+
+       /**
+        * @covers LanguagePl::commafy()
+        * @dataProvider provideCommafyData
+        */
+       public function testCommafy( $number, $numbersWithCommas ) {
+               $this->assertEquals(
+                       $numbersWithCommas,
+                       $this->getLang()->commafy( $number ),
+                       "commafy('$number')"
+               );
+       }
+
+       public static function provideCommafyData() {
+               // Note that commafy() always uses English separators (',' and '.') instead of
+               // Polish (' ' and ','). There is another function that converts them later.
+               return [
+                       [ 1000, '1000' ],
+                       [ 10000, '10,000' ],
+                       [ 1000.0001, '1000.0001' ],
+                       [ 10000.0001, '10,000.0001' ],
+                       [ -1000, '-1000' ],
+                       [ -10000, '-10,000' ],
+                       [ -1000.0001, '-1000.0001' ],
+                       [ -10000.0001, '-10,000.0001' ],
+               ];
+       }
 }
index 99bd427..58cb6f3 100644 (file)
@@ -35,7 +35,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         */
        protected function checkHasGzip() {
                if ( self::$hasGzip === null ) {
-                       self::$hasGzip = ( Installer::locateExecutableInDefaultPaths( 'gzip' ) !== false );
+                       self::$hasGzip = ( ExecutableFinder::findInDefaultPaths( 'gzip' ) !== false );
                }
 
                if ( !self::$hasGzip ) {
index f2891ce..e50b9b4 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 class MockChangesListFilterGroup extends ChangesListFilterGroup {
        public function createFilter( array $filterDefinition ) {
                return new MockChangesListFilter( $filterDefinition );
@@ -9,11 +11,11 @@ class MockChangesListFilterGroup extends ChangesListFilterGroup {
                $this->filters[$filter->getName()] = $filter;
        }
 
-       public function isPerGroupRequestParameter() {
-               throw new MWException(
-                       'Not implemented: If the test relies on this, put it one of the ' .
-                       'subclasses\' tests (e.g. ChangesListBooleanFilterGroupTest) ' .
-                       'instead of testing the abstract class'
-               );
+       public function modifyQuery( IDatabase $dbr, ChangesListSpecialPage $specialPage,
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds, FormOptions $opts,
+               $isStructuredFiltersEnabled ) {
+       }
+
+       public function addOptions( FormOptions $opts, $allowDefaults, $isStructuredFiltersEnabled ) {
        }
 }
index cdb3f78..4392964 100644 (file)
@@ -2,8 +2,10 @@
 
 class DummyContentForTesting extends AbstractContent {
 
+       const MODEL_ID = "testing";
+
        public function __construct( $data ) {
-               parent::__construct( "testing" );
+               parent::__construct( self::MODEL_ID );
 
                $this->data = $data;
        }
index 6b9b782..78d5dc7 100644 (file)
@@ -3,7 +3,7 @@
 class DummyContentHandlerForTesting extends ContentHandler {
 
        public function __construct( $dataModel ) {
-               parent::__construct( $dataModel, [ "testing" ] );
+               parent::__construct( $dataModel, [ DummyContentForTesting::MODEL_ID ] );
        }
 
        /**
index cd0ac15..b168754 100644 (file)
@@ -46,7 +46,6 @@ return [
                'scripts' => [
                        'tests/qunit/suites/resources/startup.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js',
-                       'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.color.test.js',
@@ -100,10 +99,10 @@ return [
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.visibleTimeout.test.js',
                ],
                'dependencies' => [
                        'jquery.accessKeyLabel',
-                       'jquery.autoEllipsis',
                        'jquery.byteLength',
                        'jquery.byteLimit',
                        'jquery.color',
@@ -143,6 +142,7 @@ return [
                        'mediawiki.cookie',
                        'mediawiki.experiments',
                        'mediawiki.inspect',
+                       'mediawiki.visibleTimeout',
                        'test.mediawiki.qunit.testrunner',
                ],
        ]
diff --git a/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js b/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
deleted file mode 100644 (file)
index c3521ba..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-( function ( $ ) {
-
-       QUnit.module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() );
-
-       function createWrappedDiv( text, width ) {
-               var $wrapper = $( '<div>' ).css( 'width', width ),
-                       $div = $( '<div>' ).text( text );
-               $wrapper.append( $div );
-               return $wrapper;
-       }
-
-       function findDivergenceIndex( a, b ) {
-               var i = 0;
-               while ( i < a.length && i < b.length && a[ i ] === b[ i ] ) {
-                       i++;
-               }
-               return i;
-       }
-
-       QUnit.test( 'Position right', function ( assert ) {
-               // We need this thing to be visible, so append it to the DOM
-               var $span, spanText, d, spanTextNew,
-                       origText = 'This is a really long random string and there is no way it fits in 100 pixels.',
-                       $wrapper = createWrappedDiv( origText, '100px' );
-
-               $( '#qunit-fixture' ).append( $wrapper );
-               $wrapper.autoEllipsis( { position: 'right' } );
-
-               // Verify that, and only one, span element was created
-               $span = $wrapper.find( '> span' );
-               assert.strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' );
-
-               // Check that the text fits by turning on word wrapping
-               $span.css( 'whiteSpace', 'nowrap' );
-               assert.ltOrEq(
-                       $span.width(),
-                       $span.parent().width(),
-                       'Text fits (making the span "white-space: nowrap" does not make it wider than its parent)'
-               );
-
-               // Add two characters using scary black magic
-               spanText = $span.text();
-               d = findDivergenceIndex( origText, spanText );
-               spanTextNew = spanText.slice( 0, d ) + origText[ d ] + origText[ d ] + '...';
-
-               assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
-
-               // Put this text in the span and verify it doesn't fit
-               $span.text( spanTextNew );
-               assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
-       } );
-
-}( jQuery ) );
index edaaa39..2bc9c21 100644 (file)
@@ -6,24 +6,33 @@
                        title: 'Group 1',
                        type: 'send_unselected_if_any',
                        filters: [
-                               { name: 'filter1', default: true },
-                               { name: 'filter2' }
+                               { name: 'filter1', cssClass: 'filter1class', default: true },
+                               { name: 'filter2', cssClass: 'filter2class' }
                        ]
                }, {
                        name: 'group2',
                        title: 'Group 2',
                        type: 'send_unselected_if_any',
                        filters: [
-                               { name: 'filter3' },
-                               { name: 'filter4', default: true }
+                               { name: 'filter3', cssClass: 'filter3class' },
+                               { name: 'filter4', cssClass: 'filter4class', default: true }
                        ]
                }, {
                        name: 'group3',
                        title: 'Group 3',
                        type: 'string_options',
                        filters: [
-                               { name: 'filter5' },
-                               { name: 'filter6' }
+                               { name: 'filter5', cssClass: 'filter5class' },
+                               { name: 'filter6' } // Not supporting highlights
+                       ]
+               }, {
+                       name: 'group4',
+                       title: 'Group 4',
+                       type: 'boolean',
+                       isSticky: true,
+                       filters: [
+                               { name: 'stickyFilter7', cssClass: 'filter7class' },
+                               { name: 'stickyFilter8', cssClass: 'filter8class' }
                        ]
                } ],
                minimalDefaultParams = {
                );
        } );
 
-       QUnit.test( 'updateModelBasedOnQuery & getUriParametersFromModel', function ( assert ) {
+       QUnit.test( 'getUpdatedUri', function ( assert ) {
                var uriProcessor,
-                       filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
-                       baseParams = {
-                               filter1: '0',
-                               filter2: '0',
-                               filter3: '0',
-                               filter4: '0',
-                               group3: '',
-                               highlight: '0',
-                               invert: '0',
-                               group1__filter1_color: null,
-                               group1__filter2_color: null,
-                               group2__filter3_color: null,
-                               group2__filter4_color: null,
-                               group3__filter5_color: null,
-                               group3__filter6_color: null
-                       };
+                       filtersModel = new mw.rcfilters.dm.FiltersViewModel();
 
                filtersModel.initializeFilters( mockFilterStructure );
                uriProcessor = new mw.rcfilters.UriProcessor( filtersModel );
 
-               uriProcessor.updateModelBasedOnQuery( {} );
                assert.deepEqual(
-                       uriProcessor.getUriParametersFromModel(),
-                       $.extend( true, {}, baseParams, minimalDefaultParams ),
-                       'Version 1: Empty url query sets model to defaults'
+                       ( uriProcessor.getUpdatedUri( {} ) ).query,
+                       { urlversion: '2' },
+                       'Empty model state with empty uri state, assumes the given uri is already normalized, and adds urlversion=2'
                );
 
-               uriProcessor.updateModelBasedOnQuery( { urlversion: '2' } );
                assert.deepEqual(
-                       uriProcessor.getUriParametersFromModel(),
-                       baseParams,
-                       'Version 2: Empty url query sets model to all-false'
+                       ( uriProcessor.getUpdatedUri( { foo: 'bar' } ) ).query,
+                       { urlversion: '2', foo: 'bar' },
+                       'Empty model state with unrecognized params retains unrecognized params'
                );
 
-               uriProcessor.updateModelBasedOnQuery( { filter1: '1', urlversion: '2' } );
+               // Update the model
+               filtersModel.toggleFiltersSelected( {
+                       group1__filter1: true, // Param: filter2: '1'
+                       group3__filter5: true // Param: group3: 'filter5'
+               } );
+
                assert.deepEqual(
-                       uriProcessor.getUriParametersFromModel(),
-                       $.extend( true, {}, baseParams, { filter1: '1' } ),
-                       'Parameters in Uri query set parameter value in the model'
+                       ( uriProcessor.getUpdatedUri( {} ) ).query,
+                       { urlversion: '2', filter2: '1', group3: 'filter5' },
+                       'Model state is reflected in the updated URI'
                );
 
-               uriProcessor.updateModelBasedOnQuery( { highlight: '1', group1__filter1_color: 'c1', urlversion: '2' } );
                assert.deepEqual(
-                       uriProcessor.getUriParametersFromModel(),
-                       $.extend( true, {}, baseParams, {
-                               highlight: '1',
-                               group1__filter1_color: 'c1'
-                       } ),
-                       'Highlight parameters in Uri query set highlight state in the model'
+                       ( uriProcessor.getUpdatedUri( { foo: 'bar' } ) ).query,
+                       { urlversion: '2', filter2: '1', group3: 'filter5', foo: 'bar' },
+                       'Model state is reflected in the updated URI with existing uri params'
                );
 
-               uriProcessor.updateModelBasedOnQuery( { invert: '1', urlversion: '2' } );
+               // Update the model with sticky filter
+               filtersModel.toggleFiltersSelected( {
+                       group4__stickyFilter7: true
+               } );
+
                assert.deepEqual(
-                       uriProcessor.getUriParametersFromModel(),
-                       $.extend( true, {}, baseParams, {
-                               invert: '1'
-                       } ),
-                       'Invert parameter in Uri query set invert state in the model'
+                       ( uriProcessor.getUpdatedUri( {} ) ).query,
+                       { urlversion: '2', filter2: '1', group3: 'filter5' },
+                       'Sticky parameters are not reflected in the URI query'
+               );
+       } );
+
+       QUnit.test( 'updateModelBasedOnQuery', function ( assert ) {
+               var uriProcessor,
+                       filtersModel = new mw.rcfilters.dm.FiltersViewModel();
+
+               filtersModel.initializeFilters( mockFilterStructure );
+               uriProcessor = new mw.rcfilters.UriProcessor( filtersModel );
+
+               uriProcessor.updateModelBasedOnQuery( {} );
+               assert.deepEqual(
+                       filtersModel.getCurrentParameterState(),
+                       minimalDefaultParams,
+                       'Version 1: Empty url query sets model to defaults'
+               );
+
+               uriProcessor.updateModelBasedOnQuery( { urlversion: '2' } );
+               assert.deepEqual(
+                       filtersModel.getCurrentParameterState(),
+                       {},
+                       'Version 2: Empty url query sets model to all-false'
+               );
+
+               uriProcessor.updateModelBasedOnQuery( { filter1: '1', urlversion: '2' } );
+               assert.deepEqual(
+                       filtersModel.getCurrentParameterState(),
+                       $.extend( true, {}, { filter1: '1' } ),
+                       'Parameters in Uri query set parameter value in the model'
                );
        } );
 
index 4eec02a..a700e30 100644 (file)
@@ -7,6 +7,7 @@
                                {
                                        name: 'filter1', label: 'group1filter1-label', description: 'group1filter1-desc',
                                        default: true,
+                                       cssClass: 'filter1class',
                                        conflicts: [ { group: 'group2' } ],
                                        subset: [
                                                {
@@ -22,6 +23,7 @@
                                {
                                        name: 'filter2', label: 'group1filter2-label', description: 'group1filter2-desc',
                                        conflicts: [ { group: 'group2', filter: 'filter6' } ],
+                                       cssClass: 'filter2class',
                                        subset: [
                                                {
                                                        group: 'group1',
                                                }
                                        ]
                                },
+                               // NOTE: This filter has no highlight!
                                { name: 'filter3', label: 'group1filter3-label', description: 'group1filter3-desc', default: true }
                        ]
                }, {
                        name: 'group2',
                        type: 'send_unselected_if_any',
                        fullCoverage: true,
+                       excludedFromSavedQueries: true,
                        conflicts: [ { group: 'group1', filter: 'filter1' } ],
                        filters: [
-                               { name: 'filter4', label: 'group2filter4-label', description: 'group2filter4-desc' },
-                               { name: 'filter5', label: 'group2filter5-label', description: 'group2filter5-desc', default: true },
+                               { name: 'filter4', label: 'group2filter4-label', description: 'group2filter4-desc', cssClass: 'filter4class' },
+                               { name: 'filter5', label: 'group2filter5-label', description: 'group2filter5-desc', default: true, cssClass: 'filter5class' },
                                {
-                                       name: 'filter6', label: 'group2filter6-label', description: 'group2filter6-desc',
+                                       name: 'filter6', label: 'group2filter6-label', description: 'group2filter6-desc', cssClass: 'filter6class',
                                        conflicts: [ { group: 'group1', filter: 'filter2' } ]
                                }
                        ]
                        separator: ',',
                        default: 'filter8',
                        filters: [
-                               { name: 'filter7', label: 'group3filter7-label', description: 'group3filter7-desc' },
-                               { name: 'filter8', label: 'group3filter8-label', description: 'group3filter8-desc' },
-                               { name: 'filter9', label: 'group3filter9-label', description: 'group3filter9-desc' }
+                               { name: 'filter7', label: 'group3filter7-label', description: 'group3filter7-desc', cssClass: 'filter7class' },
+                               { name: 'filter8', label: 'group3filter8-label', description: 'group3filter8-desc', cssClass: 'filter8class' },
+                               { name: 'filter9', label: 'group3filter9-label', description: 'group3filter9-desc', cssClass: 'filter9class' }
                        ]
                }, {
                        name: 'group4',
                        type: 'single_option',
                        default: 'option2',
                        filters: [
+                               // NOTE: The entire group has no highlight supported
                                { name: 'option1', label: 'group4option1-label', description: 'group4option1-desc' },
                                { name: 'option2', label: 'group4option2-label', description: 'group4option2-desc' },
                                { name: 'option3', label: 'group4option3-label', description: 'group4option3-desc' }
                        name: 'group5',
                        type: 'single_option',
                        filters: [
-                               { name: 'option1', label: 'group5option1-label', description: 'group5option1-desc' },
-                               { name: 'option2', label: 'group5option2-label', description: 'group5option2-desc' },
-                               { name: 'option3', label: 'group5option3-label', description: 'group5option3-desc' }
+                               { name: 'option1', label: 'group5option1-label', description: 'group5option1-desc', cssClass: 'group5opt1class' },
+                               { name: 'option2', label: 'group5option2-label', description: 'group5option2-desc', cssClass: 'group5opt2class' },
+                               { name: 'option3', label: 'group5option3-label', description: 'group5option3-desc', cssClass: 'group5opt3class' }
                        ]
                }, {
                        name: 'group6',
                        type: 'boolean',
                        isSticky: true,
                        filters: [
-                               { name: 'group6option1', label: 'group6option1-label', description: 'group6option1-desc' },
-                               { name: 'group6option2', label: 'group6option2-label', description: 'group6option2-desc', default: true },
-                               { name: 'group6option3', label: 'group6option3-label', description: 'group6option3-desc', default: true }
+                               { name: 'group6option1', label: 'group6option1-label', description: 'group6option1-desc', cssClass: 'group6opt1class' },
+                               { name: 'group6option2', label: 'group6option2-label', description: 'group6option2-desc', default: true, cssClass: 'group6opt2class' },
+                               { name: 'group6option3', label: 'group6option3-label', description: 'group6option3-desc', default: true, cssClass: 'group6opt3class' }
                        ]
                }, {
                        name: 'group7',
@@ -86,9 +91,9 @@
                        isSticky: true,
                        default: 'group7option2',
                        filters: [
-                               { name: 'group7option1', label: 'group7option1-label', description: 'group7option1-desc' },
-                               { name: 'group7option2', label: 'group7option2-label', description: 'group7option2-desc' },
-                               { name: 'group7option3', label: 'group7option3-label', description: 'group7option3-desc' }
+                               { name: 'group7option1', label: 'group7option1-label', description: 'group7option1-desc', cssClass: 'group7opt1class' },
+                               { name: 'group7option2', label: 'group7option2-label', description: 'group7option2-desc', cssClass: 'group7opt2class' },
+                               { name: 'group7option3', label: 'group7option3-label', description: 'group7option3-desc', cssClass: 'group7opt3class' }
                        ]
                } ],
                viewsDefinition = {
                                        type: 'string_options',
                                        separator: ';',
                                        filters: [
-                                               { name: 0, label: 'Main' },
-                                               { name: 1, label: 'Talk' },
-                                               { name: 2, label: 'User' },
-                                               { name: 3, label: 'User talk' }
+                                               { name: 0, label: 'Main', cssClass: 'namespace-0' },
+                                               { name: 1, label: 'Talk', cssClass: 'namespace-1' },
+                                               { name: 2, label: 'User', cssClass: 'namespace-2' },
+                                               { name: 3, label: 'User talk', cssClass: 'namespace-3' }
                                        ]
                                } ]
                        }
                        group7: 'group7option2',
                        namespace: ''
                },
+               emptyParamRepresentation = {
+                       filter1: '0',
+                       filter2: '0',
+                       filter3: '0',
+                       filter4: '0',
+                       filter5: '0',
+                       filter6: '0',
+                       group3: '',
+                       group4: '',
+                       group5: '',
+                       group6option1: '0',
+                       group6option2: '0',
+                       group6option3: '0',
+                       group7: '',
+                       namespace: '',
+                       // Null highlights
+                       group1__filter1_color: null,
+                       group1__filter2_color: null,
+                       // group1__filter3_color: null, // Highlight isn't supported
+                       group2__filter4_color: null,
+                       group2__filter5_color: null,
+                       group2__filter6_color: null,
+                       group3__filter7_color: null,
+                       group3__filter8_color: null,
+                       group3__filter9_color: null,
+                       // group4__option1_color: null, // Highlight isn't supported
+                       // group4__option2_color: null, // Highlight isn't supported
+                       // group4__option3_color: null, // Highlight isn't supported
+                       group5__option1_color: null,
+                       group5__option2_color: null,
+                       group5__option3_color: null,
+                       group6__group6option1_color: null,
+                       group6__group6option2_color: null,
+                       group6__group6option3_color: null,
+                       group7__group7option1_color: null,
+                       group7__group7option2_color: null,
+                       group7__group7option3_color: null,
+                       namespace__0_color: null,
+                       namespace__1_color: null,
+                       namespace__2_color: null,
+                       namespace__3_color: null
+               },
                baseFilterRepresentation = {
                        group1__filter1: false,
                        group1__filter2: false,
                );
        } );
 
+       QUnit.test( 'Parameter minimal state', function ( assert ) {
+               var model = new mw.rcfilters.dm.FiltersViewModel(),
+                       cases = [
+                               {
+                                       input: {},
+                                       result: {},
+                                       msg: 'Empty parameter representation produces an empty result'
+                               },
+                               {
+                                       input: {
+                                               filter1: '1',
+                                               filter2: '0',
+                                               filter3: '0',
+                                               group3: '',
+                                               group4: 'option2'
+                                       },
+                                       result: {
+                                               filter1: '1',
+                                               group4: 'option2'
+                                       },
+                                       msg: 'Mixed input results in only non-falsey values as result'
+                               },
+                               {
+                                       input: {
+                                               filter1: '0',
+                                               filter2: '0',
+                                               filter3: '0',
+                                               group3: '',
+                                               group4: '',
+                                               group1__filter1_color: null
+                                       },
+                                       result: {},
+                                       msg: 'An all-falsey input results in an empty result.'
+                               },
+                               {
+                                       input: {
+                                               filter1: '0',
+                                               filter2: '0',
+                                               filter3: '0',
+                                               group3: '',
+                                               group4: '',
+                                               group1__filter1_color: 'c1'
+                                       },
+                                       result: {
+                                               group1__filter1_color: 'c1'
+                                       },
+                                       msg: 'An all-falsey input with highlight params result in only the highlight param.'
+                               },
+                               {
+                                       input: {
+                                               group1__filter1_color: 'c1',
+                                               group1__filter3_color: 'c3' // Not supporting highlights
+                                       },
+                                       result: {
+                                               group1__filter1_color: 'c1'
+                                       },
+                                       msg: 'Unsupported highlights are removed.'
+                               }
+                       ];
+
+               model.initializeFilters( filterDefinition, viewsDefinition );
+
+               cases.forEach( function ( test ) {
+                       assert.deepEqual(
+                               model.getMinimizedParamRepresentation( test.input ),
+                               test.result,
+                               test.msg
+                       );
+               } );
+       } );
+
+       QUnit.test( 'Parameter states', function ( assert ) {
+               // Some groups / params have their defaults immediately applied
+               // to their state. These include single_option which can never
+               // be empty, etc. These are these states:
+               var parametersWithoutExcluded,
+                       appliedDefaultParameters = {
+                               group4: 'option2',
+                               group5: 'option1',
+                               // Sticky, their defaults apply immediately
+                               group6option2: '1',
+                               group6option3: '1',
+                               group7: 'group7option2'
+                       },
+                       model = new mw.rcfilters.dm.FiltersViewModel();
+
+               model.initializeFilters( filterDefinition, viewsDefinition );
+               assert.deepEqual(
+                       model.getEmptyParameterState(),
+                       emptyParamRepresentation,
+                       'Producing an empty parameter state'
+               );
+
+               model.toggleFiltersSelected( {
+                       group1__filter1: true,
+                       group3__filter7: true
+               } );
+
+               assert.deepEqual(
+                       model.getCurrentParameterState(),
+                       // appliedDefaultParams applies the default value to parameters
+                       // who must have an initial value to begin with, so we have to
+                       // take it into account in the current state
+                       $.extend( true, {}, appliedDefaultParameters, {
+                               filter2: '1',
+                               filter3: '1',
+                               group3: 'filter7'
+                       } ),
+                       'Producing a current parameter state'
+               );
+
+               // Reset
+               model = new mw.rcfilters.dm.FiltersViewModel();
+               model.initializeFilters( filterDefinition, viewsDefinition );
+
+               parametersWithoutExcluded = $.extend( true, {}, appliedDefaultParameters );
+               delete parametersWithoutExcluded.group7;
+               delete parametersWithoutExcluded.group6option2;
+               delete parametersWithoutExcluded.group6option3;
+
+               assert.deepEqual(
+                       model.getCurrentParameterState( true ),
+                       parametersWithoutExcluded,
+                       'Producing a current clean parameter state without excluded filters'
+               );
+       } );
+
+       QUnit.test( 'Cleaning up parameter states', function ( assert ) {
+               var model = new mw.rcfilters.dm.FiltersViewModel(),
+                       cases = [
+                               {
+                                       input: {},
+                                       result: {},
+                                       msg: 'Empty parameter representation produces an empty result'
+                               },
+                               {
+                                       input: {
+                                               filter1: '1', // Regular (do not strip)
+                                               group6option1: '1', // Sticky
+                                               filter4: '1', // Excluded
+                                               filter5: '0' // Excluded
+                                       },
+                                       result: { filter1: '1' },
+                                       msg: 'Valid input strips all sticky and excluded params regardless of value'
+                               }
+                       ];
+
+               model.initializeFilters( filterDefinition, viewsDefinition );
+
+               cases.forEach( function ( test ) {
+                       assert.deepEqual(
+                               model.removeExcludedParams( test.input ),
+                               test.result,
+                               test.msg
+                       );
+               } );
+
+       } );
+
        QUnit.test( 'Finding matching filters', function ( assert ) {
                var matches,
                        testCases = [
index 324a652..58524ec 100644 (file)
@@ -6,28 +6,38 @@
                        filters: [
                                // Note: The fact filter2 is default means that in the
                                // filter representation, filter1 and filter3 are 'true'
-                               { name: 'filter1' },
-                               { name: 'filter2', default: true },
-                               { name: 'filter3' }
+                               { name: 'filter1', cssClass: 'filter1class' },
+                               { name: 'filter2', cssClass: 'filter2class', default: true },
+                               { name: 'filter3', cssClass: 'filter3class' }
                        ]
                }, {
                        name: 'group2',
                        type: 'string_options',
                        separator: ',',
                        filters: [
-                               { name: 'filter4' },
-                               { name: 'filter5' },
-                               { name: 'filter6' }
+                               { name: 'filter4', cssClass: 'filter4class' },
+                               { name: 'filter5' }, // NOTE: Not supporting highlights!
+                               { name: 'filter6', cssClass: 'filter6class' }
                        ]
                }, {
                        name: 'group3',
                        type: 'boolean',
                        isSticky: true,
                        filters: [
-                               { name: 'group3option1' },
-                               { name: 'group3option2' },
-                               { name: 'group3option3' }
+                               { name: 'group3option1', cssClass: 'filter1class' },
+                               { name: 'group3option2', cssClass: 'filter1class' },
+                               { name: 'group3option3', cssClass: 'filter1class' }
                        ]
+               }, {
+                       // Copy of the way the controller defines invert
+                       // to check whether the conversion works
+                       name: 'invertGroup',
+                       type: 'boolean',
+                       hidden: true,
+                       filters: [ {
+                               name: 'invert',
+                               default: '0'
+                       } ]
                } ],
                queriesFilterRepresentation = {
                        queries: {
@@ -54,8 +64,8 @@
                                                },
                                                highlights: {
                                                        highlight: true,
-                                                       filter1: 'c5',
-                                                       group3option1: 'c1'
+                                                       group1__filter1: 'c5',
+                                                       group3__group3option1: 'c1'
                                                },
                                                invert: true
                                        }
                                                        // in param representation
                                                        filter2: '1', filter3: '1',
                                                        // Group type string_options
-                                                       group2: 'filter4',
+                                                       group2: 'filter4'
                                                        // Note - Group3 is sticky, so it won't show in output
-                                                       // Invert/highlight toggles
-                                                       invert: '1',
-                                                       highlight: '1'
                                                },
                                                highlights: {
-                                                       filter1_color: 'c5',
-                                                       group3option1_color: 'c1'
+                                                       group1__filter1_color: 'c5',
+                                                       group3__group3option1_color: 'c1'
                                                }
                                        }
                                }
                        }
+               },
+               removeHighlights = function ( data ) {
+                       var copy = $.extend( true, {}, data );
+                       copy.queries[ 1234 ].data.highlights = {};
+                       return copy;
                };
 
        QUnit.module( 'mediawiki.rcfilters - SavedQueriesModel' );
                                                                filter2: '1'
                                                        },
                                                        highlights: {
-                                                               filter5_color: 'c2'
+                                                               group1__filter3_color: 'c2'
                                                        }
                                                }
                                        }
                                        finalState: $.extend( true, {}, queriesParamRepresentation ),
                                        msg: 'Conversion from filter representation to parameters retains data.'
                                },
+                               {
+                                       // Converting from old structure
+                                       input: $.extend( true, {}, queriesFilterRepresentation, { queries: { 1234: { data: {
+                                               filters: {
+                                                       // Entire group true: normalize params
+                                                       filter1: true,
+                                                       filter2: true,
+                                                       filter3: true
+                                               },
+                                               highlights: {
+                                                       filter3: null // Get rid of empty highlight
+                                               }
+                                       } } } } ),
+                                       finalState: $.extend( true, {}, queriesParamRepresentation ),
+                                       msg: 'Conversion from filter representation to parameters normalizes params and highlights.'
+                               },
                                {
                                        // Converting from old structure with default
                                        input: $.extend( true, { default: '1234' }, queriesFilterRepresentation ),
                                        finalState: $.extend( true, { default: '1234' }, queriesParamRepresentation ),
                                        msg: 'Conversion from filter representation to parameters, with default set up, retains data.'
                                },
+                               {
+                                       // Converting from old structure and cleaning up highlights
+                                       input: $.extend( true, queriesFilterRepresentation, { queries: { 1234: { data: { highlights: { highlight: false } } } } } ),
+                                       finalState: removeHighlights( queriesParamRepresentation ),
+                                       msg: 'Conversion from filter representation to parameters and highlight cleanup'
+                               },
                                {
                                        // New structure
                                        input: $.extend( true, {}, queriesParamRepresentation ),
                                        finalState: $.extend( true, {}, queriesParamRepresentation ),
                                        msg: 'Parameter representation retains its queries structure'
+                               },
+                               {
+                                       // Do not touch invalid color parameters from the initialization routine
+                                       // (Normalization, or "fixing" the query should only happen when we add new query or actively convert queries)
+                                       input: $.extend( true, { queries: { 1234: { data: { highlights: { group2__filter5_color: 'c2' } } } } }, exampleQueryStructure ),
+                                       finalState: $.extend( true, { queries: { 1234: { data: { highlights: { group2__filter5_color: 'c2' } } } } }, exampleQueryStructure ),
+                                       msg: 'Structure that contains invalid highlights remains the same in initialization'
+                               },
+                               {
+                                       // Trim colors when highlight=false is stored
+                                       input: $.extend( true, { queries: { 1234: { data: { params: { highlight: '0' } } } } }, queriesParamRepresentation ),
+                                       finalState: removeHighlights( queriesParamRepresentation ),
+                                       msg: 'Colors are removed when highlight=false'
+                               },
+                               {
+                                       // Remove highlight when it is true but no colors are specified
+                                       input: $.extend( true, { queries: { 1234: { data: { params: { highlight: '1' } } } } }, removeHighlights( queriesParamRepresentation ) ),
+                                       finalState: removeHighlights( queriesParamRepresentation ),
+                                       msg: 'remove highlight when it is true but there is no colors'
                                }
                        ];
 
                } );
        } );
 
+       QUnit.test( 'Adding new queries', function ( assert ) {
+               var filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
+                       queriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
+                       cases = [
+                               {
+                                       methodParams: [
+                                               'label1', // Label
+                                               { // Data
+                                                       filter1: '1',
+                                                       filter2: '2',
+                                                       group1__filter1_color: 'c2',
+                                                       group1__filter3_color: 'c5'
+                                               },
+                                               true, // isDefault
+                                               '1234' // ID
+                                       ],
+                                       result: {
+                                               itemState: {
+                                                       label: 'label1',
+                                                       data: {
+                                                               params: {
+                                                                       filter1: '1',
+                                                                       filter2: '2'
+                                                               },
+                                                               highlights: {
+                                                                       group1__filter1_color: 'c2',
+                                                                       group1__filter3_color: 'c5'
+                                                               }
+                                                       }
+                                               },
+                                               isDefault: true,
+                                               id: '1234'
+                                       },
+                                       msg: 'Given valid data is preserved.'
+                               },
+                               {
+                                       methodParams: [
+                                               'label2',
+                                               {
+                                                       filter1: '1',
+                                                       invert: '1',
+                                                       filter15: '1', // Invalid filter - removed
+                                                       filter2: '0', // Falsey value - removed
+                                                       group1__filter1_color: 'c3',
+                                                       foobar: 'w00t' // Unrecognized parameter - removed
+                                               }
+                                       ],
+                                       result: {
+                                               itemState: {
+                                                       label: 'label2',
+                                                       data: {
+                                                               params: {
+                                                                       filter1: '1',
+                                                                       invert: '1'
+                                                               },
+                                                               highlights: {
+                                                                       group1__filter1_color: 'c3'
+                                                               }
+                                                       }
+                                               },
+                                               isDefault: false
+                                       },
+                                       msg: 'Given data with invalid filters and highlights is normalized'
+                               }
+                       ];
+
+               filtersModel.initializeFilters( filterDefinition );
+
+               // Start with an empty saved queries model
+               queriesModel.initialize( {} );
+
+               cases.forEach( function ( testCase ) {
+                       var itemID = queriesModel.addNewQuery.apply( queriesModel, testCase.methodParams ),
+                               item = queriesModel.getItemByID( itemID );
+
+                       assert.deepEqual(
+                               item.getState(),
+                               testCase.result.itemState,
+                               testCase.msg + ' (itemState)'
+                       );
+
+                       assert.equal(
+                               item.isDefault(),
+                               testCase.result.isDefault,
+                               testCase.msg + ' (isDefault)'
+                       );
+
+                       if ( testCase.result.id !== undefined ) {
+                               assert.equal(
+                                       item.getID(),
+                                       testCase.result.id,
+                                       testCase.msg + ' (item ID)'
+                               );
+                       }
+               } );
+       } );
+
        QUnit.test( 'Manipulating queries', function ( assert ) {
                var id1, id2, item1, matchingItem,
                        queriesStructure = {},
                id1 = queriesModel.addNewQuery(
                        'New query 1',
                        {
-                               params: {
-                                       group2: 'filter5',
-                                       highlight: '1'
-                               },
-                               highlights: {
-                                       filter1_color: 'c5',
-                                       group3option1_color: 'c1'
-                               }
+                               group2: 'filter5',
+                               group1__filter1_color: 'c5',
+                               group3__group3option1_color: 'c1'
                        }
                );
                id2 = queriesModel.addNewQuery(
                        'New query 2',
                        {
-                               params: {
-                                       filter1: '1',
-                                       filter2: '1',
-                                       invert: '1'
-                               },
-                               highlights: {}
+                               filter1: '1',
+                               filter2: '1',
+                               invert: '1'
                        }
                );
                item1 = queriesModel.getItemByID( id1 );
                        label: 'New query 1',
                        data: {
                                params: {
-                                       group2: 'filter5',
-                                       highlight: '1'
+                                       group2: 'filter5'
                                },
                                highlights: {
-                                       filter1_color: 'c5',
-                                       group3option1_color: 'c1'
+                                       group1__filter1_color: 'c5',
+                                       group3__group3option1_color: 'c1'
                                }
                        }
                };
                // Find matching query
                matchingItem = queriesModel.findMatchingQuery(
                        {
-                               params: {
-                                       group2: 'filter5',
-                                       highlight: '1'
-                               },
-                               highlights: {
-                                       filter1_color: 'c5',
-                                       group3option1_color: 'c1'
-                               }
+                               group2: 'filter5',
+                               group1__filter1_color: 'c5',
+                               group3__group3option1_color: 'c1'
                        }
                );
                assert.deepEqual(
                // Find matching query with 0-values (base state)
                matchingItem = queriesModel.findMatchingQuery(
                        {
-                               params: {
-                                       group2: 'filter5',
-                                       filter1: '0',
-                                       filter2: '0',
-                                       highlight: '1',
-                                       invert: '0'
-                               },
-                               highlights: {
-                                       filter1_color: 'c5',
-                                       group3option1_color: 'c1'
-                               }
+                               group2: 'filter5',
+                               filter1: '0',
+                               filter2: '0',
+                               invert: '0',
+                               group1__filter1_color: 'c5',
+                               group3__group3option1_color: 'c1'
                        }
                );
                assert.deepEqual(
index a91dff9..181e992 100644 (file)
@@ -4,7 +4,6 @@
                params: {
                        param1: '1',
                        param2: 'foo|bar',
-                       highlight: '1',
                        invert: '0'
                },
                highlights: {
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.visibleTimeout.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.visibleTimeout.test.js
new file mode 100644 (file)
index 0000000..7f8819d
--- /dev/null
@@ -0,0 +1,115 @@
+( function ( mw ) {
+
+       QUnit.module( 'mediawiki.visibleTimeout', QUnit.newMwEnvironment( {
+               setup: function () {
+                       // Document with just enough stuff to make the tests work.
+                       var listeners = [];
+                       this.mockDocument = {
+                               hidden: false,
+                               addEventListener: function ( type, listener ) {
+                                       if ( type === 'visibilitychange' ) {
+                                               listeners.push( listener );
+                                       }
+                               },
+                               removeEventListener: function ( type, listener ) {
+                                       var i;
+                                       if ( type === 'visibilitychange' ) {
+                                               i = listeners.indexOf( listener );
+                                               if ( i >= 0 ) {
+                                                       listeners.splice( i, 1 );
+                                               }
+                                       }
+                               },
+                               // Helper function to swap visibility and run listeners
+                               toggleVisibility: function () {
+                                       var i;
+                                       this.hidden = !this.hidden;
+                                       for ( i = 0; i < listeners.length; i++ ) {
+                                               listeners[ i ]();
+                                       }
+                               }
+                       };
+                       this.visibleTimeout = require( 'mediawiki.visibleTimeout' );
+                       this.visibleTimeout.setDocument( this.mockDocument );
+
+                       this.sandbox.useFakeTimers();
+                       // mw.now() doesn't respect the fake clock injected by useFakeTimers
+                       this.stub( mw, 'now', ( function () {
+                               return this.sandbox.clock.now;
+                       } ).bind( this ) );
+               }
+       } ) );
+
+       QUnit.test( 'basic usage', function ( assert ) {
+               var called = 0;
+
+               this.visibleTimeout.set( function () {
+                       called++;
+               }, 0 );
+               assert.strictEqual( called, 0 );
+               this.sandbox.clock.tick( 1 );
+               assert.strictEqual( called, 1 );
+
+               this.sandbox.clock.tick( 100 );
+               assert.strictEqual( called, 1 );
+
+               this.visibleTimeout.set( function () {
+                       called++;
+               }, 10 );
+               this.sandbox.clock.tick( 10 );
+               assert.strictEqual( called, 2 );
+       } );
+
+       QUnit.test( 'can cancel timeout', function ( assert ) {
+               var called = 0,
+                       timeout = this.visibleTimeout.set( function () {
+                               called++;
+                       }, 0 );
+
+               this.visibleTimeout.clear( timeout );
+               this.sandbox.clock.tick( 10 );
+               assert.strictEqual( called, 0 );
+
+               timeout = this.visibleTimeout.set( function () {
+                       called++;
+               }, 100 );
+               this.sandbox.clock.tick( 50 );
+               assert.strictEqual( called, 0 );
+               this.visibleTimeout.clear( timeout );
+               this.sandbox.clock.tick( 100 );
+               assert.strictEqual( called, 0 );
+       } );
+
+       QUnit.test( 'start hidden and become visible', function ( assert ) {
+               var called = 0;
+
+               this.mockDocument.hidden = true;
+               this.visibleTimeout.set( function () {
+                       called++;
+               }, 0 );
+               this.sandbox.clock.tick( 10 );
+               assert.strictEqual( called, 0 );
+
+               this.mockDocument.toggleVisibility();
+               this.sandbox.clock.tick( 10 );
+               assert.strictEqual( called, 1 );
+       } );
+
+       QUnit.test( 'timeout is cumulative', function ( assert ) {
+               var called = 0;
+
+               this.visibleTimeout.set( function () {
+                       called++;
+               }, 100 );
+               this.sandbox.clock.tick( 50 );
+               assert.strictEqual( called, 0 );
+
+               this.mockDocument.toggleVisibility();
+               this.sandbox.clock.tick( 1000 );
+               assert.strictEqual( called, 0 );
+
+               this.mockDocument.toggleVisibility();
+               this.sandbox.clock.tick( 50 );
+               assert.strictEqual( called, 1 );
+       } );
+}( mediaWiki ) );
index 98b87fe..890fe5b 100644 (file)
@@ -3,8 +3,8 @@ const Page = require( './page' );
 
 class PreferencesPage extends Page {
 
-       get realName() { return browser.element( '#mw-input-wprealname' ); }
-       get save() { return browser.element( '#prefcontrol' ); }
+       get realName() { return browser.element( '#mw-input-wprealname .oo-ui-inputWidget-input' ); }
+       get save() { return browser.element( '#prefcontrol .oo-ui-buttonElement-button' ); }
 
        open() {
                super.open( 'Special:Preferences' );