Merge "mediawiki.Uri: Use extended RegExps through templates"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 2 Sep 2015 17:57:26 +0000 (17:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 2 Sep 2015 17:57:26 +0000 (17:57 +0000)
606 files changed:
CREDITS
RELEASE-NOTES-1.26
autoload.php
composer.json
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/HttpFunctions.php
includes/MWNamespace.php
includes/MediaWiki.php
includes/Preferences.php
includes/Sanitizer.php
includes/Setup.php
includes/TemplateParser.php
includes/Title.php
includes/api/ApiFormatBase.php
includes/api/ApiLogin.php
includes/api/ApiOptions.php
includes/api/ApiParse.php
includes/api/ApiQueryAllPages.php
includes/api/ApiResult.php
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/uk.json
includes/api/i18n/vi.json
includes/api/i18n/zh-hans.json
includes/cache/BacklinkCache.php
includes/cache/MessageCache.php
includes/compat/IPSetCompat.php [new file with mode: 0644]
includes/content/CssContentHandler.php
includes/context/ContextSource.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LoadMonitorMySQL.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/DBLockManager.php
includes/htmlform/HTMLButtonField.php
includes/htmlform/HTMLTextAreaField.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlUpdater.php
includes/installer/i18n/de-ch.json
includes/installer/i18n/km.json
includes/installer/i18n/ko.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt.json
includes/installer/i18n/sq.json
includes/installer/i18n/sr-ec.json
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/UploadFromUrlJob.php
includes/libs/IPSet.php [deleted file]
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/ReplicatedBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/media/XMP.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/page/WikiPage.php
includes/pager/TablePager.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/poolcounter/PoolWorkArticleView.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/skins/SkinTemplate.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialVersion.php
includes/utils/IP.php
includes/utils/MWCryptHKDF.php
includes/utils/UIDGenerator.php
languages/Language.php
languages/i18n/ady-cyrl.json
languages/i18n/af.json
languages/i18n/ang.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/az.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ce.json
languages/i18n/de.json
languages/i18n/dty.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lrc.json
languages/i18n/lv.json
languages/i18n/ml.json
languages/i18n/myv.json
languages/i18n/nap.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/vec.json
languages/i18n/vi.json
languages/i18n/wuu.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-tw.json
languages/messages/MessagesAce.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAv.php
languages/messages/MessagesAvk.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBgn.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGag.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKw.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.php
languages/messages/MessagesLv.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQu.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesScn.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTe.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteEqualMessages.php
maintenance/getConfiguration.php
maintenance/jsduck/categories.json
maintenance/showJobs.php
maintenance/tables.sql
phpcs.xml
resources/Resources.php
resources/ResourcesOOUI.php
resources/lib/oojs-ui/i18n/ast.json
resources/lib/oojs-ui/i18n/ca.json
resources/lib/oojs-ui/i18n/de.json
resources/lib/oojs-ui/i18n/el.json
resources/lib/oojs-ui/i18n/en-ca.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/en.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/fa.json
resources/lib/oojs-ui/i18n/fi.json
resources/lib/oojs-ui/i18n/fr.json
resources/lib/oojs-ui/i18n/gl.json
resources/lib/oojs-ui/i18n/glk.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/km.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/mk.json
resources/lib/oojs-ui/i18n/nap.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/qqq.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/su.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/uk.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
resources/lib/oojs-ui/themes/apex/icons.json
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/arched-arrow-ltr.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-cyrl-be.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.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/calendar-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg [new file with mode: 0644]
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/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/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/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/help-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/history.svg
resources/lib/oojs-ui/themes/apex/images/icons/info.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.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-s.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/language.png
resources/lib/oojs-ui/themes/apex/images/icons/language.svg
resources/lib/oojs-ui/themes/apex/images/icons/link.svg
resources/lib/oojs-ui/themes/apex/images/icons/lock.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/notice.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/search.svg
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/apex/images/icons/settings.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/strikethrough-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/tag.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg
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.svg
resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
resources/lib/oojs-ui/themes/mediawiki/indicators.json
resources/lib/oojs/oojs.jquery.js
resources/src/jquery/jquery.byteLimit.js
resources/src/mediawiki.api/mediawiki.ForeignApi.js
resources/src/mediawiki.api/mediawiki.api.upload.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.page/mediawiki.page.gallery.css [new file with mode: 0644]
resources/src/mediawiki.page/mediawiki.page.gallery.print.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/templates/thumbnail.html
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.ForeignUpload.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Upload.Dialog.js
resources/src/mediawiki/mediawiki.Upload.js
resources/src/mediawiki/mediawiki.experiments.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.startUp.js [deleted file]
resources/src/startup.js
tests/parser/parserTests.txt
tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php [new file with mode: 0644]
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php
tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php
tests/phpunit/includes/libs/IPSetTest.php [deleted file]
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/languages/LanguageTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
thumb.php

diff --git a/CREDITS b/CREDITS
index 5362286..44adc4f 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -230,6 +230,7 @@ following names for their contribution to the product.
 * Simon Walker
 * Solitarius
 * Søren Løvborg
+* Southparkfan
 * Srikanth Lakshmanan
 * Stefano Codari
 * Str4nd
index 2774a27..6dcf919 100644 (file)
@@ -25,6 +25,8 @@ production.
 * $wgResourceLoaderExperimentalAsyncLoading was deprecated and removed.
   This experimental feature was never enabled by default and is obsolete as of
   MediaWiki 1.26, in where ResourceLoader became fully asynchronous.
+* $wgMasterWaitTimeout was removed (deprecated in 1.24).
+* Fields in ParserOptions are now private. Use the accessors instead.
 
 === New features in 1.26 ===
 * (T51506) Now action=info gives estimates of actual watchers for a page.
@@ -64,6 +66,10 @@ production.
   for potentially slow POST requests that need to be as atomic as possible.
 * ResourceLoader now loads all scripts asynchronously. The top-queue and
   startup modules are no longer synchronously loaded.
+* 'mediawiki.ui.button' styles are no longer unconditionally loaded on every
+  page. During the deprecation period, the styles will only be loaded on pages
+  which contain 'mw-ui-button' in their HTML. Starting in 1.28, the styles will
+  only be loaded if explicitly required.
 
 ==== External libraries ====
 * Update es5-shim from v4.0.0 to v4.1.5.
@@ -97,6 +103,8 @@ production.
   information about the relevant block.
 
 === Action API internal changes in 1.26 ===
+* New metadata item ApiResult::META_KVP_MERGE to allow for merging the KVP key
+  into the value when the value is an assoc.
 
 === Languages updated in 1.26 ===
 
index 6bc7238..82a45b4 100644 (file)
@@ -543,7 +543,7 @@ $wgAutoloadLocalClasses = array(
        'IORMRow' => __DIR__ . '/includes/db/IORMRow.php',
        'IORMTable' => __DIR__ . '/includes/db/IORMTable.php',
        'IP' => __DIR__ . '/includes/utils/IP.php',
-       'IPSet' => __DIR__ . '/includes/libs/IPSet.php',
+       'IPSet' => __DIR__ . '/includes/compat/IPSetCompat.php',
        'IPTC' => __DIR__ . '/includes/media/IPTC.php',
        'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php',
        'IcuCollation' => __DIR__ . '/includes/Collation.php',
index af9aeab..0961e2e 100644 (file)
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.16",
                "mediawiki/at-ease": "1.0.0",
-               "oojs/oojs-ui": "0.12.5",
+               "oojs/oojs-ui": "0.12.7",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
-               "wikimedia/cdb": "1.0.1",
                "wikimedia/assert": "0.2.2",
+               "wikimedia/cdb": "1.0.1",
                "wikimedia/composer-merge-plugin": "1.2.1",
+               "wikimedia/ip-set": "1.0.1",
                "wikimedia/utfnormal": "1.0.2",
                "wikimedia/wrappedstring": "2.0.0",
                "zordius/lightncandy": "0.21"
index f1e8f44..f0450a9 100644 (file)
@@ -211,7 +211,7 @@ $wgLoadScript = false;
 
 /**
  * The URL path of the skins directory.
- * Defaults to "{$wgScriptPath}/skins".
+ * Defaults to "{$wgResourceBasePath}/skins".
  * @since 1.3
  */
 $wgStylePath = false;
@@ -226,7 +226,7 @@ $wgLocalStylePath = false;
 
 /**
  * The URL path of the extensions directory.
- * Defaults to "{$wgScriptPath}/extensions".
+ * Defaults to "{$wgResourceBasePath}/extensions".
  * @since 1.16
  */
 $wgExtensionAssetsPath = false;
@@ -1860,12 +1860,6 @@ $wgDBservers = false;
  */
 $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' );
 
-/**
- * How long to wait for a slave to catch up to the master
- * @deprecated since 1.24
- */
-$wgMasterWaitTimeout = 10;
-
 /**
  * File to log database errors to
  */
@@ -3479,8 +3473,8 @@ $wgResourceModuleSkinStyles = array();
 $wgResourceLoaderSources = array();
 
 /**
- * Default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
- * If not set, then $wgScriptPath will be used as a fallback.
+ * The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
+ * Defaults to $wgScriptPath.
  */
 $wgResourceBasePath = null;
 
@@ -3726,8 +3720,8 @@ $wgMetaNamespaceTalk = false;
  * Additional namespaces. If the namespaces defined in Language.php and
  * Namespace.php are insufficient, you can create new ones here, for example,
  * to import Help files in other languages. You can also override the namespace
- * names of existing namespaces. Extensions developers should use
- * $wgCanonicalNamespaceNames.
+ * names of existing namespaces. Extensions should use the CanonicalNamespaces
+ * hook or extension.json.
  *
  * @warning Once you delete a namespace, the pages in that namespace will
  * no longer be accessible. If you rename it, then you can access them through
@@ -7699,6 +7693,7 @@ $wgUseLinkNamespaceDBFields = true;
  *   $wgVirtualRestConfig['modules']['parsoid'] = array(
  *     'url' => 'http://localhost:8000',
  *     'prefix' => 'enwiki',
+ *     'domain' => 'en.wikipedia.org',
  *   );
  *
  * @var array
@@ -7709,6 +7704,7 @@ $wgVirtualRestConfig = array(
        'global' => array(
                # Timeout in seconds
                'timeout' => 360,
+               # 'domain' is set to $wgCanonicalServer in Setup.php
                'forwardCookies' => false,
                'HTTPProxy' => null
        )
index f3a41c4..05e0ac0 100644 (file)
@@ -527,7 +527,10 @@ class EditPage {
                if ( $permErrors ) {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
                        // Auto-block user's IP if the account was "hard" blocked
-                       $wgUser->spreadAnyEditBlock();
+                       $user = $wgUser;
+                       DeferredUpdates::addCallableUpdate( function() use ( $user ) {
+                               $user->spreadAnyEditBlock();
+                       } );
 
                        $this->displayPermissionsError( $permErrors );
 
@@ -652,6 +655,9 @@ class EditPage {
                        $this->getContextTitle()->getPrefixedText()
                ) );
                $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
+               $wgOut->addHTML( $this->editFormPageTop );
+               $wgOut->addHTML( $this->editFormTextTop );
+
                $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
                $wgOut->addHTML( "<hr />\n" );
 
@@ -665,13 +671,16 @@ class EditPage {
                        $wgOut->addWikiMsg( 'viewsourcetext' );
                }
 
+               $wgOut->addHTML( $this->editFormTextBeforeContent );
                $this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) );
+               $wgOut->addHTML( $this->editFormTextAfterContent );
 
                $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
                        Linker::formatTemplates( $this->getTemplates() ) ) );
 
                $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' );
 
+               $wgOut->addHTML( $this->editFormTextBottom );
                if ( $this->mTitle->exists() ) {
                        $wgOut->returnToMain( null, $this->mTitle );
                }
index 035ff09..b853d07 100644 (file)
@@ -3954,13 +3954,13 @@ function wfBCP47( $code ) {
 }
 
 /**
- * Get a cache object.
+ * Get a specific cache object.
  *
- * @param int $inputType Cache type, one of the CACHE_* constants.
+ * @param int|string $cacheType A CACHE_* constants, or other key in $wgObjectCaches
  * @return BagOStuff
  */
-function wfGetCache( $inputType ) {
-       return ObjectCache::getInstance( $inputType );
+function wfGetCache( $cacheType ) {
+       return ObjectCache::getInstance( $cacheType );
 }
 
 /**
@@ -4273,3 +4273,28 @@ function wfThumbIsStandard( File $file, array $params ) {
 
        return true;
 }
+
+/**
+ * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray).
+ *
+ * Values that exist in both values will be combined with += (all values of the array
+ * of $newValues will be added to the values of the array of $baseArray, while values,
+ * that exists in both, the value of $baseArray will be used).
+ *
+ * @param array $baseArray The array where you want to add the values of $newValues to
+ * @param array $newValues An array with new values
+ * @return array The combined array
+ * @since 1.26
+ */
+function wfArrayPlus2d( array $baseArray, array $newValues ) {
+       // First merge items that are in both arrays
+       foreach ( $baseArray as $name => &$groupVal ) {
+               if ( isset( $newValues[$name] ) ) {
+                       $groupVal += $newValues[$name];
+               }
+       }
+       // Now add items that didn't exist yet
+       $baseArray += $newValues;
+
+       return $baseArray;
+}
index fec8adc..1c79485 100644 (file)
@@ -917,7 +917,13 @@ class PhpHttpRequest extends MWHttpRequest {
                }
 
                if ( $this->sslVerifyHost ) {
-                       $options['ssl']['CN_match'] = $this->parsedUrl['host'];
+                       // PHP 5.6.0 deprecates CN_match, in favour of peer_name which
+                       // actually checks SubjectAltName properly.
+                       if ( version_compare( PHP_VERSION, '5.6.0', '>=' ) ) {
+                               $options['ssl']['peer_name'] = $this->parsedUrl['host'];
+                       } else {
+                               $options['ssl']['CN_match'] = $this->parsedUrl['host'];
+                       }
                }
 
                if ( is_dir( $this->caInfo ) ) {
@@ -948,6 +954,19 @@ class PhpHttpRequest extends MWHttpRequest {
                        MediaWiki\restoreWarnings();
 
                        if ( !$fh ) {
+                               // HACK for instant commons.
+                               // If we are contacting (commons|upload).wikimedia.org
+                               // try again with CN_match for en.wikipedia.org
+                               // as php does not handle SubjectAltName properly
+                               // prior to "peer_name" option in php 5.6
+                               if ( isset( $options['ssl']['CN_match'] )
+                                       && ( $options['ssl']['CN_match'] === 'commons.wikimedia.org'
+                                               || $options['ssl']['CN_match'] === 'upload.wikimedia.org' )
+                               ) {
+                                       $options['ssl']['CN_match'] = 'en.wikipedia.org';
+                                       $context = stream_context_create( $options );
+                                       continue;
+                               }
                                break;
                        }
 
index 731b62e..8ca205a 100644 (file)
@@ -210,6 +210,8 @@ class MWNamespace {
                if ( $namespaces === null || $rebuild ) {
                        global $wgExtraNamespaces, $wgCanonicalNamespaceNames;
                        $namespaces = array( NS_MAIN => '' ) + $wgCanonicalNamespaceNames;
+                       // Add extension namespaces
+                       $namespaces += ExtensionRegistry::getInstance()->getAttribute( 'ExtensionNamespaces' );
                        if ( is_array( $wgExtraNamespaces ) ) {
                                $namespaces += $wgExtraNamespaces;
                        }
index f488aa2..fbacb25 100644 (file)
@@ -283,9 +283,11 @@ class MediaWiki {
         *   /w/index.php?title=Foo_Bar -> /wiki/Foo_Bar
         * - Don't redirect anything with query parameters other than 'title' or 'action=view'.
         *
+        * @param Title $title
         * @return bool True if a redirect was set.
+        * @throws HttpError
         */
-       private function tryNormaliseRedirect( $title ) {
+       private function tryNormaliseRedirect( Title $title ) {
                $request = $this->context->getRequest();
                $output = $this->context->getOutput();
 
@@ -495,36 +497,39 @@ class MediaWiki {
        public function doPreOutputCommit() {
                // Either all DBs should commit or none
                ignore_user_abort( true );
-               wfGetLBFactory()->commitMasterChanges();
+
+               // Commit all changes and record ChronologyProtector positions
+               $factory = wfGetLBFactory();
+               $factory->commitMasterChanges();
+               $factory->shutdown();
+
+               wfDebug( __METHOD__ . ' completed; all transactions committed' );
        }
 
        /**
         * This function does work that can be done *after* the
         * user gets the HTTP response so they don't block on it
         *
+        * This manages deferred updates, job insertion,
+        * final commit, and the logging of profiling data
+        *
         * @param string $mode Use 'fast' to always skip job running
         * @since 1.26
         */
        public function doPostOutputShutdown( $mode = 'normal' ) {
-               // Show profiling data if enabled
+               // Show visible profiling data if enabled (which cannot be post-send)
                Profiler::instance()->logDataPageOutputOnly();
 
                $that = $this;
                $callback = function () use ( $that, $mode ) {
                        try {
-                               // Assure deferred updates are not in the main transaction
-                               wfGetLBFactory()->commitMasterChanges();
-                               // Run jobs occasionally, if enabled
-                               if ( $mode === 'normal' ) {
-                                       $that->triggerJobs();
-                               }
-                               // Do deferred updates and job insertion and final commit
-                               $that->restInPeace();
+                               $that->restInPeace( $mode );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::handleException( $e );
                        }
                };
 
+               // Defer everything else...
                if ( function_exists( 'register_postsend_function' ) ) {
                        // https://github.com/facebook/hhvm/issues/1230
                        register_postsend_function( $callback );
@@ -687,8 +692,12 @@ class MediaWiki {
 
        /**
         * Ends this task peacefully
+        * @param string $mode Use 'fast' to always skip job running
         */
-       public function restInPeace() {
+       public function restInPeace( $mode = 'fast' ) {
+               // Assure deferred updates are not in the main transaction
+               wfGetLBFactory()->commitMasterChanges();
+
                // Ignore things like master queries/connections on GET requests
                // as long as they are in deferred updates (which catch errors).
                Profiler::instance()->getTransactionProfiler()->resetExpectations();
@@ -699,6 +708,12 @@ class MediaWiki {
                // Make sure any lazy jobs are pushed
                JobQueueGroup::pushLazyJobs();
 
+               // Now that everything specific to this request is done,
+               // try to occasionally run jobs (if enabled) from the queues
+               if ( $mode === 'normal' ) {
+                       $this->triggerJobs();
+               }
+
                // Log profiling data, e.g. in the database or UDP
                wfLogProfilingData();
 
index cd675c6..248b308 100644 (file)
@@ -751,7 +751,11 @@ class Preferences {
                        'type' => 'select',
                        'section' => 'rendering/advancedrendering',
                        'options' => $stubThresholdOptions,
-                       'label-raw' => $context->msg( 'stub-threshold' )->text(), // Raw HTML message. Yay?
+                       // This is not a raw HTML message; label-raw is needed for the manual <a></a>
+                       'label-raw' => $context->msg( 'stub-threshold' )->rawParams(
+                               '<a href="#" class="stub">' .
+                               $context->msg( 'stub-threshold-sample-link' )->parse() .
+                               '</a>' )->parse(),
                );
 
                $defaultPreferences['showhiddencats'] = array(
index fbf3234..8179905 100644 (file)
@@ -346,8 +346,8 @@ class Sanitizer {
                                  ($space*=$space*
                                        (?:
                                         # The attribute value: quoted or alone
-                                         \"([^<\"]*)\"
-                                        | '([^<']*)'
+                                         \"([^<\"]*)(?:\"|\$)
+                                        | '([^<']*)(?:'|\$)
                                         |  ([a-zA-Z0-9!#$%&()*,\\-.\\/:;<>?@[\\]^_`{|}~]+)
                                        )
                                )?(?=$space|\$)/sx";
@@ -1809,7 +1809,7 @@ class Sanitizer {
                        $host = preg_replace( $strip, '', $host );
 
                        // IPv6 host names are bracketed with [].  Url-decode these.
-                       if ( substr_compare( "//%5B", $host, 0, 5 ) === 0 && preg_match( '!^//%5B(.*?)%5D((:\d+)?)$!', $host, $matches ) ) {
+                       if ( substr_compare( "//%5B", $host, 0, 5 ) === 0 && preg_match( '!^//%5B([0-9A-Fa-f:.]+)%5D((:\d+)?)$!', $host, $matches ) ) {
                                $host = '//[' . $matches[1] . ']' . $matches[2];
                        }
 
index 4d7428a..6abef44 100644 (file)
@@ -68,17 +68,18 @@ if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
        $wgActionPaths['view'] = $wgArticlePath;
 }
 
+if ( $wgResourceBasePath === null ) {
+       $wgResourceBasePath = $wgScriptPath;
+}
 if ( $wgStylePath === false ) {
-       $wgStylePath = "$wgScriptPath/skins";
+       $wgStylePath = "$wgResourceBasePath/skins";
 }
 if ( $wgLocalStylePath === false ) {
+       // Avoid wgResourceBasePath here since that may point to a different domain (e.g. CDN)
        $wgLocalStylePath = "$wgScriptPath/skins";
 }
 if ( $wgExtensionAssetsPath === false ) {
-       $wgExtensionAssetsPath = "$wgScriptPath/extensions";
-}
-if ( $wgResourceBasePath === null ) {
-       $wgResourceBasePath = $wgScriptPath;
+       $wgExtensionAssetsPath = "$wgResourceBasePath/extensions";
 }
 
 if ( $wgLogo === false ) {
@@ -535,6 +536,8 @@ if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
                . 'HTTP or HTTPS. Disabling secure login.' );
 }
 
+$wgVirtualRestConfig['global']['domain'] = $wgCanonicalServer;
+
 // Now that GlobalFunctions is loaded, set defaults that depend on it.
 if ( $wgTmpDirectory === false ) {
        $wgTmpDirectory = wfTempDir();
index f0a1ebb..d6b101b 100644 (file)
@@ -103,7 +103,7 @@ class TemplateParser {
                        // See if the compiled PHP code is stored in cache.
                        // CACHE_ACCEL throws an exception if no suitable object cache is present, so fall
                        // back to CACHE_ANYTHING.
-                       $cache = ObjectCache::newAccelerator( array(), CACHE_ANYTHING );
+                       $cache = ObjectCache::newAccelerator( CACHE_ANYTHING );
                        $key = wfMemcKey( 'template', $templateName, $fastHash );
                        $code = $this->forceRecompile ? null : $cache->get( $key );
 
index 8a15b54..b347edb 100644 (file)
@@ -1939,7 +1939,6 @@ class Title {
         *   - quick  : does cheap permission checks from slaves (usable for GUI creation)
         *   - full   : does cheap and expensive checks possibly from a slave
         *   - secure : does cheap and expensive checks, using the master as needed
-        * @param bool $short Set this to true to stop after the first permission error.
         * @param array $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
         * @return array Array of arguments to wfMessage to explain permissions problems.
index 4d80163..f54f20f 100644 (file)
@@ -182,7 +182,7 @@ abstract class ApiFormatBase extends ApiBase {
                        $out = new OutputPage( $context );
                        $context->setOutput( $out );
 
-                       $out->addModules( 'mediawiki.apipretty' );
+                       $out->addModuleStyles( 'mediawiki.apipretty' );
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
 
                        // When the format without suffix 'fm' is defined, there is a non-html version
index 8c65310..c66e215 100644 (file)
@@ -145,10 +145,10 @@ class ApiLogin extends ApiBase {
                        case LoginForm::CREATE_BLOCKED:
                                $result['result'] = 'CreateBlocked';
                                $result['details'] = 'Your IP address is blocked from account creation';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( $context->getUser()->getBlock() )
-                               );
+                               $block = $context->getUser()->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::THROTTLED:
@@ -159,10 +159,10 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::USER_BLOCKED:
                                $result['result'] = 'Blocked';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( User::newFromName( $params['name'] )->getBlock() )
-                               );
+                               $block = User::newFromName( $params['name'] )->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::ABORTED:
index 436f22a..a62bcb6 100644 (file)
@@ -52,6 +52,14 @@ class ApiOptions extends ApiBase {
                        $this->dieUsageMsg( array( 'missingparam', 'optionname' ) );
                }
 
+               // Load the user from the master to reduce CAS errors on double post (T95839)
+               if ( wfGetLB()->getServerCount() > 1 ) {
+                       $user = User::newFromId( $user->getId() );
+                       if ( !$user->loadFromId( User::READ_LATEST ) ) {
+                               $this->dieUsage( 'Anonymous users cannot change preferences', 'notloggedin' );
+                       }
+               }
+
                if ( $params['reset'] ) {
                        $user->resetOptions( $params['resetkinds'], $this->getContext() );
                        $changed = true;
index 1b8f6d9..cce8572 100644 (file)
@@ -169,9 +169,24 @@ class ApiParse extends ApiBase {
 
                                $popts = $this->makeParserOptions( $pageObj, $params );
 
-                               // Potentially cached
-                               $p_result = $this->getParsedContent( $pageObj, $popts, $pageid,
-                                       isset( $prop['wikitext'] ) );
+                               // Don't pollute the parser cache when setting options that aren't
+                               // in ParserOptions::optionsHash()
+                               /// @todo: This should be handled closer to the actual cache instead of here, see T110269
+                               $suppressCache =
+                                       $params['disablepp'] ||
+                                       $params['disablelimitreport'] ||
+                                       $params['preview'] ||
+                                       $params['sectionpreview'] ||
+                                       $params['disabletidy'];
+
+                               if ( $suppressCache ) {
+                                       $this->content = $this->getContent( $pageObj, $pageid );
+                                       $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
+                               } else {
+                                       // Potentially cached
+                                       $p_result = $this->getParsedContent( $pageObj, $popts, $pageid,
+                                               isset( $prop['wikitext'] ) );
+                               }
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
                        $titleObj = Title::newFromText( $title );
@@ -464,10 +479,13 @@ class ApiParse extends ApiBase {
        protected function makeParserOptions( WikiPage $pageObj, array $params ) {
 
                $popts = $pageObj->makeParserOptions( $this->getContext() );
-               $popts->enableLimitReport( !$params['disablepp'] );
+               $popts->enableLimitReport( !$params['disablepp'] && !$params['disablelimitreport'] );
                $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] );
                $popts->setIsSectionPreview( $params['sectionpreview'] );
                $popts->setEditSection( !$params['disableeditsection'] );
+               if ( $params['disabletidy'] ) {
+                       $popts->setTidy( false );
+               }
 
                return $popts;
        }
@@ -480,14 +498,9 @@ class ApiParse extends ApiBase {
         * @return ParserOutput
         */
        private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
-               $this->content = $page->getContent( Revision::RAW ); //XXX: really raw?
+               $this->content = $this->getContent( $page, $pageId );
 
                if ( $this->section !== false && $this->content !== null ) {
-                       $this->content = $this->getSectionContent(
-                               $this->content,
-                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getPrefixedText()
-                       );
-
                        // Not cached (save or load)
                        return $this->content->getParserOutput( $page->getTitle(), null, $popts );
                }
@@ -506,6 +519,27 @@ class ApiParse extends ApiBase {
        }
 
        /**
+        * Get the content for the given page and the requested section.
+        *
+        * @param WikiPage $page
+        * @param int $pageId
+        * @return Content
+        */
+       private function getContent( WikiPage $page, $pageId = null ) {
+               $content = $page->getContent( Revision::RAW ); //XXX: really raw?
+
+               if ( $this->section !== false && $content !== null ) {
+                       $content = $this->getSectionContent(
+                               $content,
+                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getPrefixedText()
+                       );
+               }
+               return $content;
+       }
+
+       /**
+        * Extract the requested section from the given Content
+        *
         * @param Content $content
         * @param string $what Identifies the content in error messages, e.g. page title.
         * @return Content|bool
@@ -762,8 +796,13 @@ class ApiParse extends ApiBase {
                        'sectiontitle' => array(
                                ApiBase::PARAM_TYPE => 'string',
                        ),
-                       'disablepp' => false,
+                       'disablepp' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'disablelimitreport' => false,
                        'disableeditsection' => false,
+                       'disabletidy' => false,
                        'generatexml' => array(
                                ApiBase::PARAM_DFLT => false,
                                ApiBase::PARAM_HELP_MSG => array(
index 0149ad2..e441991 100644 (file)
@@ -175,10 +175,14 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        // 1999 rules works fine, but that breaks other DBs. Sigh.
                        /// @todo Once we drop support for 1992-rule DBs, we can simplify this.
                        $dbType = $db->getType();
-                       if ( $dbType === 'mysql' || $dbType === 'sqlite' ||
-                               $dbType === 'postgres' && $db->getServerVersion() >= 9.1
-                       ) {
-                               // 1999 rules, or screw-the-rules
+                       if ( $dbType === 'mysql' || $dbType === 'sqlite' ) {
+                               // Ignore the rules, or 1999 rules if you count unique keys
+                               // over non-NULL columns as satisfying the requirement for
+                               // "functional dependency" and don't require including
+                               // constant-in-WHERE columns in the GROUP BY.
+                               $this->addOption( 'GROUP BY', array( 'page_title' ) );
+                       } elseif ( $dbType === 'postgres' && $db->getServerVersion() >= 9.1 ) {
+                               // 1999 rules only counting primary keys
                                $this->addOption( 'GROUP BY', array( 'page_title', 'page_id' ) );
                        } else {
                                // 1992 rules
index f0c7430..014ca85 100644 (file)
@@ -108,12 +108,24 @@ class ApiResult implements ApiSerializable {
        const META_TYPE = '_type';
 
        /**
-        * Key (rather than "name" or other default) for when META_TYPE is 'kvp' or
-        * 'BCkvp'. Value is string.
+        * Key for the metadata item whose value specifies the name used for the
+        * kvp key in the alternative output format with META_TYPE 'kvp' or
+        * 'BCkvp', i.e. the "name" in <container><item name="key">value</item></container>.
+        * Value is string.
         * @since 1.25
         */
        const META_KVP_KEY_NAME = '_kvpkeyname';
 
+       /**
+        * Key for the metadata item that indicates that the KVP key should be
+        * added into an assoc value, i.e. {"key":{"val1":"a","val2":"b"}}
+        * transforms to {"name":"key","val1":"a","val2":"b"} rather than
+        * {"name":"key","value":{"val1":"a","val2":"b"}}.
+        * Value is boolean.
+        * @since 1.26
+        */
+       const META_KVP_MERGE = '_kvpmerge';
+
        /**
         * Key for the 'BC bools' metadata item. Value is string[].
         * Note no setter is provided.
@@ -941,19 +953,43 @@ class ApiResult implements ApiSerializable {
                                                : $transformTypes['ArmorKVP'];
                                        $valKey = isset( $transforms['BC'] ) ? '*' : 'value';
                                        $assocAsObject = !empty( $transformTypes['AssocAsObject'] );
+                                       $merge = !empty( $metadata[self::META_KVP_MERGE] );
 
                                        $ret = array();
                                        foreach ( $data as $k => $v ) {
-                                               $item = array(
-                                                       $key => $k,
-                                                       $valKey => $v,
-                                               );
-                                               if ( $strip === 'none' ) {
-                                                       $item += array(
-                                                               self::META_PRESERVE_KEYS => array( $key ),
-                                                               self::META_CONTENT => $valKey,
-                                                               self::META_TYPE => 'assoc',
+                                               if ( $merge && ( is_array( $v ) || is_object( $v ) ) ) {
+                                                       $vArr = (array)$v;
+                                                       if ( isset( $vArr[self::META_TYPE] ) ) {
+                                                               $mergeType = $vArr[self::META_TYPE];
+                                                       } elseif ( is_object( $v ) ) {
+                                                               $mergeType = 'assoc';
+                                                       } else {
+                                                               $keys = array_keys( $vArr );
+                                                               sort( $keys, SORT_NUMERIC );
+                                                               $mergeType = ( $keys === array_keys( $keys ) ) ? 'array' : 'assoc';
+                                                       }
+                                               } else {
+                                                       $mergeType = 'n/a';
+                                               }
+                                               if ( $mergeType === 'assoc' ) {
+                                                       $item = $vArr + array(
+                                                               $key => $k,
+                                                       );
+                                                       if ( $strip === 'none' ) {
+                                                               self::setPreserveKeysList( $item, array( $key ) );
+                                                       }
+                                               } else {
+                                                       $item = array(
+                                                               $key => $k,
+                                                               $valKey => $v,
                                                        );
+                                                       if ( $strip === 'none' ) {
+                                                               $item += array(
+                                                                       self::META_PRESERVE_KEYS => array( $key ),
+                                                                       self::META_CONTENT => $valKey,
+                                                                       self::META_TYPE => 'assoc',
+                                                               );
+                                                       }
                                                }
                                                $ret[] = $assocAsObject ? (object)$item : $item;
                                        }
index d3189c6..396f5da 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Gives interwiki links in the parsed wikitext.",
        "apihelp-parse-paramvalue-prop-wikitext": "Gives the original wikitext that was parsed.",
        "apihelp-parse-paramvalue-prop-properties": "Gives various properties defined in the parsed wikitext.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablepp</var> is set.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablepp</var> is set.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablelimitreport</var> is set.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablelimitreport</var> is set.",
        "apihelp-parse-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>)",
        "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
        "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Only retrieve the content of this section number or when <kbd>new</kbd> generate a new section.\n\n<kbd>new</kbd> section is only honored when specifying <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "New section title when <var>section</var> is <kbd>new</kbd>.\n\nUnlike page editing, this does not fall back to <var>summary</var> when omitted or empty.",
-       "apihelp-parse-param-disablepp": "Omit the preprocessor report (\"NewPP limit report\") from the parser output.",
+       "apihelp-parse-param-disablelimitreport": "Omit the limit report (\"NewPP limit report\") from the parser output.",
+       "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> instead.",
        "apihelp-parse-param-disableeditsection": "Omit edit section links from the parser output.",
+       "apihelp-parse-param-disabletidy": "Do not run HTML cleanup (e.g. tidy) on the parser output.",
        "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model <code>$1</code>; replaced by <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Parse in preview mode.",
        "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
index 8ad55b3..1d04304 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Da los enlaces interwiki del texto analizado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Da el wikitexto original que se había analizado.",
        "apihelp-parse-paramvalue-prop-properties": "Da varias propiedades definidas en el wikitexto analizado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Da el informe del límite de forma estructurada. No da datos si <var>$1disablepp</var> está establecido.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Da la versión HTML del informe del límite. No da datos si <var>$1disablepp</var> está establecido.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Da el informe del límite de forma estructurada. No da datos si <var>$1disablelimitreport</var> está establecido.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Da la versión HTML del informe del límite. No da datos si <var>$1disablelimitreport</var> está establecido.",
        "apihelp-parse-param-effectivelanglinks": "Incluye enlaces de idiomas proporcionados por las extensiones (para utilizar con <kbd>$1prop=langlinks</kbd>).",
+       "apihelp-parse-param-disablepp": "Usa <var>$1disablelimitreport</var> en su lugar.",
        "apihelp-parse-param-preview": "Analizar en modo de vista previa.",
        "apihelp-parse-param-sectionpreview": "Analizar sección en modo de vista previa (activa el modo de vista previa).",
        "apihelp-parse-param-disabletoc": "Omitir la tabla de contenidos en la salida.",
        "apihelp-query+allfileusages-param-to": "El título del archivo para detener la enumeración.",
        "apihelp-query+allfileusages-param-prefix": "Buscar todos los títulos de los archivos que comiencen con este valor.",
        "apihelp-query+allfileusages-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Agrega el título del archivo.",
        "apihelp-query+allfileusages-param-limit": "Cuántos elementos en total se devolverán.",
        "apihelp-query+allfileusages-param-dir": "La dirección en la que se listará.",
        "apihelp-query+allfileusages-example-B": "Listar títulos de archivos, incluyendo los desaparecidos, con las ID de páginas a las que pertenecen, empezando por la <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-from": "El título del enlace para comenzar la enumeración.",
        "apihelp-query+alllinks-param-to": "El título del enlace para detener la enumeración.",
        "apihelp-query+alllinks-param-prefix": "Buscar todos los títulos vinculados que comiencen con este valor.",
+       "apihelp-query+alllinks-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+alllinks-paramvalue-prop-title": "Añade el título del enlace.",
        "apihelp-query+alllinks-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+alllinks-param-limit": "Cuántos elementos en total se devolverán.",
        "apihelp-query+allpages-example-generator": "Mostrar información acerca de 4 páginas que empiecen por la letra <kbd>T</kbd>.",
        "apihelp-query+allpages-example-generator-revisions": "Mostrar el contenido de las 2 primeras páginas que no redirijan y empiecen por <kbd>Re</kbd>.",
        "apihelp-query+allredirects-param-prefix": "Buscar todas las páginas de destino que empiecen con este valor.",
+       "apihelp-query+allredirects-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Añade el título de la redirección.",
        "apihelp-query+allredirects-param-limit": "Cuántos elementos se devolverán.",
        "apihelp-query+alltransclusions-param-prefix": "Buscar todos los títulos transcluídos que comiencen con este valor.",
+       "apihelp-query+alltransclusions-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+alltransclusions-example-unique": "Listar títulos transcluidos de forma única.",
        "apihelp-query+alltransclusions-example-unique-generator": "Obtiene todos los títulos transcluídos, marcando los que faltan.",
        "apihelp-query+allusers-description": "Enumerar todos los usuarios registrados.",
        "apihelp-query+allusers-param-prefix": "Buscar todos los usuarios que empiecen con este valor.",
        "apihelp-query+allusers-param-group": "Incluir solo usuarios en los grupos dados.",
+       "apihelp-query+allusers-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+allusers-paramvalue-prop-blockinfo": "Añade información sobre un bloque actual al usuario.",
        "apihelp-query+allusers-paramvalue-prop-groups": "Lista los grupos a los que el usuario pertenece. Esto utiliza más recursos del servidor y puede devolver menos resultados que el límite.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Lista los permisos que tiene el usuario.",
        "apihelp-query+allusers-param-limit": "Cuántos nombres de usuario se devolverán.",
        "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
        "apihelp-query+allusers-example-Y": "Listar usuarios que empiecen por <kbd>Y</kbd>.",
        "apihelp-query+backlinks-example-simple": "Mostrar enlaces a la <kbd>Portada<kbd>.",
        "apihelp-query+blocks-description": "Listar todos los usuarios y direcciones IP bloqueadas.",
        "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+       "apihelp-query+blocks-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+blocks-paramvalue-prop-userid": "Añade el identificador del usuario bloqueado.",
        "apihelp-query+blocks-paramvalue-prop-timestamp": "Añade la fecha y hora de cuando se aplicó el bloque.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
+       "apihelp-query+categories-param-prop": "Qué propiedades adicionales obtener para cada categoría:",
        "apihelp-query+categories-param-show": "Qué tipo de categorías mostrar.",
        "apihelp-query+categories-param-limit": "Cuántas categorías se devolverán.",
        "apihelp-query+categories-example-generator": "Obtener información acerca de todas las categorías utilizadas en la página <kbd>Albert Einstein</kbd>.",
        "apihelp-query+categoryinfo-description": "Devuelve información acerca de las categorías dadas.",
        "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
+       "apihelp-query+categorymembers-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+categorymembers-param-startsortkey": "Utilizar $1starthexsortkey en su lugar.",
        "apihelp-query+categorymembers-param-endsortkey": "Utilizar $1endhexsortkey en su lugar.",
        "apihelp-query+categorymembers-example-simple": "Obtener las primeras 10 páginas de la <kbd>Categoría:Física</kbd>",
        "apihelp-query+extlinks-param-limit": "Cuántos enlaces se devolverán.",
        "apihelp-query+exturlusage-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+exturlusage-paramvalue-prop-ids": "Añade el identificado de la página.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+exturlusage-param-protocol": "Protocolo del URL. Si está vacío y se establece <var>$1query</var>, el protocolo es <kbd>http</kbd>. Deja vacío esto y <var>$1query</var> para listar todos los enlaces externos.",
        "apihelp-query+exturlusage-param-limit": "Cuántas páginas se devolverán.",
        "apihelp-query+exturlusage-example-simple": "Mostrar páginas que enlacen con <kbd>http://www.mediawiki.org</kbd>.",
        "apihelp-query+filearchive-param-from": "El título de imagen para comenzar la enumeración",
        "apihelp-query+filearchive-param-to": "El título de imagen para detener la enumeración.",
        "apihelp-query+filearchive-param-prefix": "Buscar todos los títulos de las imágenes que comiencen con este valor.",
+       "apihelp-query+filearchive-param-prop": "Qué información de imagen se obtendrá:",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Agrega el tamaño de la imagen en bytes y la altura, la anchura y el número de páginas (si es aplicable).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias del tamaño.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Añade la descripción de la versión de la imagen.",
        "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analizar la descripción de la versión.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Añade el MIME de la imagen.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Añade el tipo multimedia de la imagen.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Añade el nombre de archivo de la versión archivada para las versiones que no son las últimas.",
        "apihelp-query+filearchive-example-simple": "Mostrar una lista de todos los archivos eliminados.",
        "apihelp-query+filerepoinfo-example-simple": "Obtener información acerca de los repositorios de archivos.",
+       "apihelp-query+fileusage-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "Identificador de cada página.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada página.",
        "apihelp-query+fileusage-param-limit": "Cuántos se devolverán.",
        "apihelp-query+fileusage-example-simple": "Obtener una lista de páginas que utilicen [[:File:Example.jpg]].",
        "apihelp-query+fileusage-example-generator": "Obtener información acerca de las páginas que utilicen [[:File:Example.jpg]].",
        "apihelp-query+info-example-simple": "Obtener información acerca de la página <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obtén información general y protección acerca de la página <kb>Página principal</kbd>.",
        "apihelp-query+iwbacklinks-param-limit": "Cuántas páginas se devolverán.",
+       "apihelp-query+iwbacklinks-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+iwbacklinks-example-simple": "Obtener las páginas enlazadas a [[wikibooks:Test]]",
+       "apihelp-query+iwlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
        "apihelp-query+iwlinks-paramvalue-prop-url": "Añade el URL completo.",
        "apihelp-query+langbacklinks-param-lang": "Idioma del enlace de idioma.",
        "apihelp-query+langbacklinks-param-limit": "Cuántas páginas en total se devolverán.",
        "apihelp-query+langbacklinks-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Agrega el código de idioma del enlace de idioma.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Añade el título del enlace de idioma.",
        "apihelp-query+langbacklinks-example-simple": "Obtener las páginas enlazadas a [[:fr:Test]]",
        "apihelp-query+langbacklinks-example-generator": "Obtener información acerca de las páginas enlazadas a [[:fr:Test]].",
        "apihelp-query+langlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Añade el URL completo.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Añade el nombre del idioma nativo.",
        "apihelp-query+langlinks-param-lang": "Devolver solo enlaces de idioma con este código de idioma.",
        "apihelp-query+links-param-limit": "Cuántos enlaces se devolverán.",
+       "apihelp-query+linkshere-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+linkshere-paramvalue-prop-pageid": "Identificador de cada página.",
        "apihelp-query+linkshere-paramvalue-prop-title": "Título de cada página.",
        "apihelp-query+linkshere-paramvalue-prop-redirect": "Indicar si la página es una redirección.",
        "apihelp-query+linkshere-param-limit": "Cuántos se devolverán.",
        "apihelp-query+linkshere-example-simple": "Obtener una lista de páginas que enlacen a la [[Main Page]].",
        "apihelp-query+linkshere-example-generator": "Obtener información acerca de las páginas enlazadas a la [[Main Page|Portada]].",
+       "apihelp-query+logevents-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Agrega el identificador del evento de registro.",
        "apihelp-query+logevents-paramvalue-prop-type": "Añade el tipo del evento de registro.",
        "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Añade el comentario analizado del evento de registro.",
+       "apihelp-query+pageswithprop-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+pageswithprop-paramvalue-prop-ids": "Añade el identificador de página.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+pageswithprop-param-limit": "El máximo número de páginas que se devolverán.",
        "apihelp-query+pageswithprop-example-simple": "Listar las 10 primeras páginas que utilicen <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
        "apihelp-query+pageswithprop-example-generator": "Obtener información adicional acerca de las 10 primeras páginas que utilicen <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+protectedtitles-param-namespace": "Listar solo los títulos en estos espacios de nombres.",
        "apihelp-query+protectedtitles-param-level": "Listar solo títulos con estos niveles de protección.",
        "apihelp-query+protectedtitles-param-limit": "Cuántas páginas se devolverán.",
+       "apihelp-query+protectedtitles-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Agrega el usuario que agregó la protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Agrega el identificador de usuario que agregó la protección.",
        "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Añade la fecha y hora de cuando se levantará la protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Agrega el nivel de protección.",
        "apihelp-query+protectedtitles-example-simple": "Listar títulos protegidos.",
        "apihelp-query+protectedtitles-example-generator": "Encuentra enlaces a títulos protegidos en el espacio de nombres principal.",
        "apihelp-query+querypage-param-page": "El nombre de la página especial. Recuerda, es sensible a mayúsculas y minúsculas.",
        "apihelp-query+recentchanges-param-user": "Listar solo los cambios de este usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "No listar cambios de este usuario.",
        "apihelp-query+recentchanges-param-tag": "Listar solo los cambios con esta etiqueta.",
+       "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "Añade marcas para la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones patrullables como patrulladas o no patrulladas.",
        "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
        "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
        "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
        "apihelp-query+redirects-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "Identificador de página de cada redirección.",
        "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirección.",
        "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirección, si los hubiere.",
        "apihelp-query+redirects-param-limit": "Cuántas redirecciones se devolverán.",
        "apihelp-query+search-param-info": "Qué metadatos devolver.",
        "apihelp-query+search-param-prop": "Qué propiedades se devolverán:",
        "apihelp-query+search-paramvalue-prop-redirecttitle": "Añade el título de la redirección coincidente.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Desaconsejado e ignorado.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Desaconsejado e ignorado.</span>",
        "apihelp-query+search-param-limit": "Cuántas páginas en total se devolverán.",
        "apihelp-query+search-param-interwiki": "Incluir resultados interwiki en la búsqueda, si es posible.",
        "apihelp-query+search-example-simple": "Buscar <kbd>significado</kbd>.",
        "apihelp-query+search-example-text": "Buscar <kbd>meaning</kbd> en los textos.",
        "apihelp-query+search-example-generator": "Obtener información acerca de las páginas devueltas por una búsqueda de <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-description": "Devolver información general acerca de la página web.",
+       "apihelp-query+siteinfo-param-prop": "Qué información se obtendrá:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Información global del sistema.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista de espacios de nombres registrados y sus nombres canónicos.",
        "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de alias registrados de espacios de nombres",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de páginas especiales.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palabras mágicas y sus alias.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devuelve las estadísticas del sitio.",
        "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devuelve el mapa interwiki (opcionalmente filtrado, opcionalmente localizado mediante el uso de <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devuelve el servidor de base de datos con el retraso de replicación más grande.",
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devuelve los grupos de usuarios y los permisos asociados.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devuelve las bibliotecas instaladas en el wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devuelve las extensiones instaladas en el wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devuelve una lista de extensiones de archivo permitidas para cargadarse.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devuelve información de permisos (licencia) del wiki, si está disponible.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devuelve información sobre tipos de restricciones (protección) disponible.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Devuelve una lista de los idiomas que admite MediaWiki (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Devuelve una lista de todos las apariencias habilitadas (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>, de lo contrario en el idioma del contenido).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Devuelve una lista de identificadores variables.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devuelve una lista de los protocolos que se permiten en los enlaces externos.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devuelve los valores predeterminados de las preferencias del usuario.",
        "apihelp-query+siteinfo-example-simple": "Obtener información del sitio.",
        "apihelp-query+stashimageinfo-description": "Devuelve información del archivo para archivos escondidos.",
        "apihelp-query+stashimageinfo-param-sessionkey": "Alias de $1filekey, para retrocompatibilidad.",
        "apihelp-query+stashimageinfo-example-simple": "Devuelve información para un archivo escondido.",
        "apihelp-query+stashimageinfo-example-params": "Devuelve las miniaturas de dos archivos escondidos.",
        "apihelp-query+tags-param-limit": "El número máximo de etiquetas para enumerar.",
+       "apihelp-query+tags-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Agrega el mensaje de sistema para la etiqueta.",
        "apihelp-query+tags-paramvalue-prop-source": "Obtiene las fuentes de la etiqueta, que pueden incluir <samp>extension</samp> para etiquetas definidas por extensiones y <samp>manual</samp> para etiquetas que pueden aplicarse manualmente por los usuarios.",
        "apihelp-query+tags-paramvalue-prop-active": "Si la etiqueta aún se sigue aplicando.",
        "apihelp-query+templates-description": "Devuelve todas las páginas transcluídas en las páginas dadas.",
        "apihelp-query+templates-param-limit": "Cuántas plantillas se devolverán.",
        "apihelp-query+transcludedin-description": "Encuentra todas las páginas que transcluyan las páginas dadas.",
+       "apihelp-query+transcludedin-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "Identificador de cada página.",
        "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada página.",
+       "apihelp-query+transcludedin-param-namespace": "Incluir solo las páginas en estos espacios de nombres.",
        "apihelp-query+transcludedin-param-limit": "Cuántos se devolverán.",
        "apihelp-query+transcludedin-example-simple": "Obtener una lista de páginas transcluyendo <kbd>Main Page</kbd>.",
        "apihelp-query+usercontribs-param-limit": "Número máximo de contribuciones que se devolverán.",
        "apihelp-query+usercontribs-param-prop": "Incluir piezas adicionales de información:",
        "apihelp-query+usercontribs-paramvalue-prop-ids": "Añade el identificador de página y el de revisión.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+usercontribs-paramvalue-prop-comment": "Añade el comentario de la edición.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
        "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
        "apihelp-query+userinfo-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos los grupos al que pertenece el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos los permisos que tiene el usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas las preferencias que haya establecido el usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Añade el número de ediciones del usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos los límites de velocidad aplicados al usuario actual.",
        "apihelp-query+userinfo-example-simple": "Obtener información sobre el usuario actual.",
        "apihelp-query+userinfo-example-data": "Obtener información adicional sobre el usuario actual.",
        "apihelp-query+users-description": "Obtener información sobre una lista de usuarios.",
+       "apihelp-query+users-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+users-paramvalue-prop-blockinfo": "Etiqueta si el usuario está bloqueado, por quién y por qué razón.",
+       "apihelp-query+users-paramvalue-prop-groups": "Lista todos los grupos a los que pertenece cada usuario.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.",
        "apihelp-query+users-paramvalue-prop-gender": "Etiqueta el género del usuario. Devuelve \"masculino\", \"femenino\" o \"desconocido\".",
        "apihelp-query+users-example-simple": "Devolver información del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+watchlist-param-start": "El sello de tiempo para comenzar la enumeración",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
        "apihelp-query+watchlist-param-type": "Qué tipos de cambios mostrar:\n;edit:ediciones comunes a páginas.\n;external:cambios externos.\n;new:creaciones de páginas.\n;log:entradas del registro.",
+       "apihelp-query+watchlistraw-param-prop": "Qué propiedades adicionales se obtendrán:",
        "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios.",
        "apihelp-query+watchlistraw-param-fromtitle": "Título (con el prefijo de espacio de nombres) desde el que se empezará a enumerar.",
        "apihelp-query+watchlistraw-param-totitle": "Título (con el prefijo de espacio de nombres) desde el que se dejará de enumerar.",
index 70cc0e4..5aec2c6 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Fournit les liens interwikis dans le wikitexte analysé.",
        "apihelp-parse-paramvalue-prop-wikitext": "Fournit le wikitexte d’origine qui a été analysé.",
        "apihelp-parse-paramvalue-prop-properties": "Fournit les diverses propriétés définies dans le wikitexte analysé.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablepp</var> est positionné.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablepp</var> est positionné.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
        "apihelp-parse-paramvalue-prop-parsetree": "L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>)",
        "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
        "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section ou quand <kbd>nouveau</kbd> génère une nouvelle section.\n\nLa <kbd>nouvelle</kbd> section est mise à l’honneur uniquement quand <var>text</var> est spécifié.",
        "apihelp-parse-param-sectiontitle": "Nouveau titre de section quand <var>section</var> vaut <kbd>nouveau</kbd>.\n\nÀ la différence de la modification de page, cela ne revient pas à <var>summary</var> quand il est omis ou vide.",
-       "apihelp-parse-param-disablepp": "Omettre le rapport du préprocesseur (« rapport de limite du nouveau PP ») de la sortie de l’analyseur.",
+       "apihelp-parse-param-disablelimitreport": "Omettre le rapport de limite (« rapport de limite du nouveau PP ») de la sortie de l’analyseur.",
+       "apihelp-parse-param-disablepp": "Utiliser <var>$1disablelimitreport</var> à la place.",
        "apihelp-parse-param-disableeditsection": "Omettre les liens de modification de section de la sortie de l’analyseur.",
+       "apihelp-parse-param-disabletidy": "Ne pas exécuter de nettoyage du code HTML (par exemple,  réagencer) sur la sortie de l'analyseur.",
        "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code> ; remplacé par <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Analyser en mode aperçu.",
        "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
        "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la protection.",
        "apihelp-query+protectedtitles-paramvalue-prop-user": "Ajoute l’utilisateur ayant ajouté la protection.",
        "apihelp-query+protectedtitles-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur ayant ajouté la protection.",
-       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Ajoute le commentaire de la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Ajoute le commentaire pour la protection.",
        "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la protection.",
        "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Ajoute l’horodatage de levée de la protection.",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "Ajoute le niveau de protection.",
        "apihelp-query+userinfo-paramvalue-prop-rights": "Liste tous les droits qu’a l’utilisateur actuel.",
        "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.",
        "apihelp-query+userinfo-paramvalue-prop-options": "Liste toutes les préférences qu’a défini l’utilisateur actuel.",
-       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Obsolete.</span> Obtient un jeton pour modifier les préférences de l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Obsolete.</span> Obtenir un jeton pour modifier les préférences de l’utilisateur actuel.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur actuel.",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Ajoute le vrai nom de l’utilisateur actuel.",
index 6051872..fc0b267 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Devolve as ligazóns interwiki do texto wiki analizado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Devolve o texto wiki orixinal que foi analizado.",
        "apihelp-parse-paramvalue-prop-properties": "Obter varias propiedades definidas no texto wiki analizado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablepp</var> está fixado.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablepp</var> está fixado.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
        "apihelp-parse-paramvalue-prop-parsetree": "Árbores de análise XML do contido da revisión (precisa o modelo de contido <code>$1</code>)",
        "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
        "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Recuperar unicamente o contido deste número de sección ou cando <kbd>new</kbd> xera unha nova sección.\n\nA sección <kbd>new</kbd> só é atendida cando se especifica <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Novo título de sección cando <var>section</var> é <kbd>new</kbd>.\n\nA diferenza da edición de páxinas, non se oculta no <var>summary</var> cando se omite ou está baleiro.",
-       "apihelp-parse-param-disablepp": "Omitir o informe de preprocesador (\"Informe de límite NewPP\") da saída do analizador.",
+       "apihelp-parse-param-disablelimitreport": "Omitir o informe de preprocesador (\"Informe de límite NewPP\") da saída do analizador.",
        "apihelp-parse-param-disableeditsection": "Omitir as ligazóns de edición de sección da saída do analizador.",
        "apihelp-parse-param-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>; substituído por <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Analizar en modo vista previa.",
index 677fa98..de8e83d 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "מתן קישורי בינוויקי בקוד הוויקי המפוענח.",
        "apihelp-parse-paramvalue-prop-wikitext": "מתן קוד הוויקי המקורי שפוענח.",
        "apihelp-parse-paramvalue-prop-properties": "נותן מאפיינים שונים שמוגדרים בקוד הוויקי המפוענח.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "נותן דו\"ח הגבלות בדרך מובנית. לא נותן שום נתונים כאשר מוגדר <var>$1disablepp</var>.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "נותן את גרסת ה־HTML של דו\"ח ההגבלות. לא נותן שום נתונים כאשר מוגדר <var>$1disablepp</var>.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "נותן דו\"ח הגבלות בדרך מובנית. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "נותן את גרסת ה־HTML של דו\"ח ההגבלות. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
        "apihelp-parse-paramvalue-prop-parsetree": "עץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>)",
        "apihelp-parse-param-pst": "לעשות התמרה לפני שמירה על הקלט לפני פענוחו. תקין רק בשימוש עם טקסט.",
        "apihelp-parse-param-onlypst": "לעשות התמרה לפני שמירה (pre-save transform‏, PST) על הקלט, אבל לא לפענח אותו. מחזיר את אותו קוד הוויקי אחרי החלת PST. תקף רק בשימוש עם <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "כולל קישור שפה שמספקות הרחבות (לשימוש עם <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "לאחזר את התוכן של הפסקה עם המספר הזה, או, אם זה <kbd>new</kbd>, ליצור פסקה חדשה.\n\n<kbd>new</kbd> יכובד רק בעת ציון <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "כותרת פסקה חדשה כאשר <var>section</var> הוא <kbd>new</kbd>.\n\nבניגוד לעריכת דף, זה לא מתגבה ל־<var>summary</var> כשזה מושמט אם ריק.",
-       "apihelp-parse-param-disablepp": "להשמיט את דו\"ח הקדם־מעבד (\"NewPP limit report\") מפלט המפענח.",
+       "apihelp-parse-param-disablelimitreport": "להשמיט את דו\"ח הקדם־מעבד (\"NewPP limit report\") מפלט המפענח.",
+       "apihelp-parse-param-disablepp": "יש להשתמש ב־<var>$1disablelimitreport</var> במקום.",
        "apihelp-parse-param-disableeditsection": "להשמיט את קישורי עריכת הפסקאות מפלט המפענח.",
+       "apihelp-parse-param-disabletidy": "לא להריץ ניקוי HTML (למשל tidy) על פלט המפענח.",
        "apihelp-parse-param-generatexml": "יצירת עץ פענוח של XML (נדרש מודל תוכן <code>$1</code>; מוחלף ב־<kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "לפענח במצב תצוגה מקדימה.",
        "apihelp-parse-param-sectionpreview": "לפענח במצב תצוגה מקדימה של פסקה (מדליק גם את מצב תצוגה מקדימה).",
index ddaecde..ab018c9 100644 (file)
@@ -11,7 +11,7 @@
                        "Kurousagi"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page 설명문서]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 https://www.mediawiki.org/wiki/API:Errors_and_warnings 를 참고하십시오.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류 및 경고]]를 참조하십시오.",
        "apihelp-main-param-action": "수행할 동작",
        "apihelp-main-param-format": "출력값의 형식.",
        "apihelp-block-description": "사용자를 차단합니다.",
index 44324cc..cf54d29 100644 (file)
        "apihelp-parse-paramvalue-prop-properties": "Jitt devärse Eijeschafte uß, di em jepahßde Wikkitäx faßjelaat woode sen.",
        "apihelp-parse-param-section": "Holl blohß dann der Ennhalld vun däm Affschnett met dä Nommer, udder wann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, maach ene neu Affschnett derbei.",
        "apihelp-parse-param-sectiontitle": "De Övverschreff för dä neuje Afschnet, wann <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">section</var> = <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd> es.\n\nAnders wi beim Beärbeide vun dä Sigg weed dä Parramehter nit dorsch de <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">summary</var> ußjetuusch, wann hä fottjelohße udder läddesch es.",
+       "apihelp-parse-param-disablelimitreport": "Jiff keine Bereesch vum Vüürbereijde zom Paase (der „<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">NewPP limit report</i>“) mem Paaser singe Dahte zosamme uß.",
        "apihelp-parse-param-disableeditsection": "Donn de Lenks för Affschnedde ze änndere en de Ußjahbe vum Paaser eruß lohße.",
        "apihelp-parse-param-disabletoc": "Donn et Ennhaldsverzeijscheneß en de Ußjahbe vottlohße.",
        "apihelp-parse-example-page": "Donn en Sigg pahse.",
index 84b8ce6..5b7b2a1 100644 (file)
@@ -54,6 +54,7 @@
        "apihelp-options-description": "Astellunge fir den aktuelle Benotzer änneren.\n\nNëmmen Optiounen aus dem Haaptdeel (core) oder aus enger vun den installéierten Erweiderunge, oder Optioune mat Schlësselen déi viragestallt si mat <code>userjs-</code> (geduecht fir mat Benotzer-Scripte benotzt ze ginn), kënnen agestallt ginn.",
        "apihelp-options-param-optionname": "Den Numm vun der Optioun deen op de Wäert vun <var>$1optionvalue</var> gesat gi muss",
        "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+       "apihelp-parse-param-disablepp": "Benotzt an där Plaz <var>$1disablelimitreport</var>.",
        "apihelp-patrol-example-rcid": "Eng rezent Ännerung nokucken.",
        "apihelp-patrol-example-revid": "Eng Versioun nokucken.",
        "apihelp-protect-example-protect": "Eng Säit spären",
        "apihelp-query+allfileusages-paramvalue-prop-title": "Setzt den Titel vum Fichier derbäi.",
        "apihelp-query+alllinks-paramvalue-prop-title": "Setzt den Titel vum Link derbäi.",
        "apihelp-query+allusers-description": "All registréiert Benotzer opzielen.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lëscht vun alle Gruppen an deenen de Benotzer automatesch dran ass.",
        "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
        "apihelp-query+blocks-description": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Setzt de Beräich vun den IP-Adressen derbäi déi vun der Spär betraff sinn.",
        "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
        "apihelp-query+categories-description": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun dem Ament derbäi wou d'Kategorie derbäigesat gouf.",
        "apihelp-query+categories-example-generator": "Informatioun iwwer all Kategorien, déi an der Säit <kbd>Albert Einstein</kbd> benotzt ginn, kréien.",
        "apihelp-query+categorymembers-description": "All Säiten aus enger bestëmmter Kategorie opzielen.",
        "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der <kbd>Category:Physics</kbd> kréien.",
@@ -84,6 +88,7 @@
        "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
        "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
        "apihelp-query+info-paramvalue-prop-readable": "Ob de Benotzer dës Säit liese kann.",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Setzt déi komplett URL derbäi.",
        "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
        "apihelp-query+links-param-namespace": "Nëmme Linken an dësen Nummräim weisen.",
        "apihelp-query+linkshere-paramvalue-prop-title": "Titel vun all Säit.",
@@ -92,7 +97,9 @@
        "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
        "apihelp-query+random-param-redirect": "Eng zoufälleg Viruleedung lueden aplaz vun enger zoufälleger Säit.",
        "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
        "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-query+redirects-paramvalue-prop-title": "Titel vun all Viruleedung.",
        "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der <kbd>Haaptsäit</kbd> kréien.",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "D'Nummer vun der Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Den Zäitstempel vun der Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "Bemierkung vum Benotzer fir dës Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Text vun der Versioun.",
        "apihelp-query+search-param-namespace": "Nëmmen an dësen Nummräim sichen.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Setzt d'Zuel vun de Wierder vun der Säit derbäi.",
        "apihelp-query+search-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der leschter Ännerung vun der Säit derbäi.",
        "apihelp-query+transcludedin-paramvalue-prop-title": "Titel vun all Säit.",
        "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
        "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun derÄnnerung derbäi.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
        "apihelp-query+userinfo-paramvalue-prop-options": "Lëscht vun allen Astellungen déi den aktuelle Benotzer gemaach huet.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer derbäi.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm derbäi.",
        "apihelp-query+users-paramvalue-prop-rights": "Weist all Rechter déi all Benotzer huet.",
        "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
index a91fb9d..e6aab1e 100644 (file)
        "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Łączna ilość stron do zwrócenia.",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
        "apihelp-query+links-param-limit": "Ilość linków do zwrócenia.",
        "apihelp-query+linkshere-paramvalue-prop-title": "Nazwa każdej strony.",
        "apihelp-query+linkshere-param-limit": "Ilość do zwrócenia.",
index 82e05ff..a476b7a 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Fornece links interwiki no wikitexto analisado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Fornece o wikitexto original que foi analisado.",
        "apihelp-parse-paramvalue-prop-properties": "Fornece várias propriedades definidas no wikitexto analisado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório limite de uma forma estruturada. Não informa dado, quando<var>$1disablepp</var> se definido.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório limite de uma forma estruturada. Não informa dado, quando<var>$1disablelimitreport</var> se definido.",
        "apihelp-parse-example-page": "Analisa uma página.",
        "apihelp-parse-example-text": "Analisa wikitexto.",
        "apihelp-parse-example-texttitle": "Analisa wikitexto, especificando o título da página.",
index 4325c14..150ad8e 100644 (file)
@@ -18,8 +18,8 @@
        "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
        "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
        "apihelp-delete-description": "Eliminar uma página.",
-       "apihelp-delete-param-watch": "Adicionar esta página à lista de vigiadas.",
-       "apihelp-delete-param-unwatch": "Remover esta página da lista de vigiadas.",
+       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador actual.",
+       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador actual.",
        "apihelp-delete-example-simple": "Eliminar <kbd>Página Principal</kbd>.",
        "apihelp-disabled-description": "O módulo foi desativado.",
        "apihelp-edit-description": "Criar e editar páginas.",
@@ -41,7 +41,7 @@
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
-       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas por mim.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador actual.",
        "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
        "apihelp-help-example-main": "Ajuda para o módulo principal",
index 5ac1e0d..921cc58 100644 (file)
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
        "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
        "apihelp-parse-param-sectiontitle": "{{doc-apihelp-param|parse|sectiontitle}}",
+       "apihelp-parse-param-disablelimitreport": "{{doc-apihelp-param|parse|disablelimitreport}}",
        "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
        "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+       "apihelp-parse-param-disabletidy": "{{doc-apihelp-param|parse|disabletidy}}",
        "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
        "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
        "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
        "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
        "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
        "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
-       "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+       "apihelp-query+backlinks-param-redirect": "\"Is halved\" means that the limits are half of the usual ones.\n----\n{{doc-apihelp-param|query+backlinks|redirect}}",
        "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
        "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
        "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
index 2189d75..194e10f 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Дає інтервікі-посилання в аналізованому вікітексті.",
        "apihelp-parse-paramvalue-prop-wikitext": "Дає вихідний вікітекст, який було аналізовано.",
        "apihelp-parse-paramvalue-prop-properties": "Дає різні властивості, визначені в аналізованому вікітексті.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Дає звіт по обмеженнях у структурованому вигляді. Не видає даних, якщо встановлено <var>$1disablepp</var>.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Дає HTML-версію звіту по обмеженнях. Не видає даних, якщо встановлено <var>$1disablepp</var>.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Дає звіт по обмеженнях у структурованому вигляді. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Дає HTML-версію звіту по обмеженнях. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
        "apihelp-parse-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>)",
        "apihelp-parse-param-pst": "Зробіть трансформацію вхідних даних перед збереженням і аналізом. Дійсне лише при використанні з текстом.",
        "apihelp-parse-param-onlypst": "Зробіть трансформацію вхідних даних перед збереженням (PST), але не аналізуйте. Видає той самий вікітекст, після застосування PST. Дійсне лише у разі використання з <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Включає мовні посилання, додані розширеннями (для використання з <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Видає вміст лише розділу з цим номером або при <kbd>new</kbd> створенні нового розділу.\n\n<kbd>new</kbd> розділ відзначається лише при вказанні тексту <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Заголовок нового розділу, коли <var>section</var> має значення <kbd>new</kbd>.\n\nНа відміну від редагування сторінки, це не повертається до <var>summary</var>, якщо пропустити чи лишити порожнім.",
-       "apihelp-parse-param-disablepp": "Пропустити звіт препроцесора («NewPP limit report») на виході аналізу.",
+       "apihelp-parse-param-disablelimitreport": "Пропустити звіт препроцесора («NewPP limit report») на виході аналізу.",
        "apihelp-parse-param-disableeditsection": "Пропустити посилання на редагування розділів на виході аналізу.",
        "apihelp-parse-param-generatexml": "Генерувати синтаксичне дерево XML (передбачає модель вмісту <code>$1</code>; замінено на <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Аналізувати у режимі попереднього перегляду.",
index 3ffc792..53bc4e8 100644 (file)
        "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
        "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
        "apihelp-parse-param-section": "Chỉ truy xuất nội dung của số phần này; nếu có <kbd>new</kbd> thì tạo phần mới.\n\nPhần <kbd>new</kbd> chỉ được chấp nhận khi định rõ <var>text</var>.",
-       "apihelp-parse-param-disablepp": "Bỏ qua thông báo bộ tiền xử lý (“NewPP limit report”) khi cho ra kết quả bộ xử lý.",
+       "apihelp-parse-param-disablelimitreport": "Bỏ qua thông báo bộ tiền xử lý (“NewPP limit report”) khi cho ra kết quả bộ xử lý.",
        "apihelp-parse-example-page": "Phân tích trang.",
        "apihelp-parse-example-text": "Phân tích văn bản wiki.",
        "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
index e905c7b..9458fb2 100644 (file)
        "apihelp-parse-paramvalue-prop-indicators": "提供页面上使用的页面状态指示器的HTML。",
        "apihelp-parse-paramvalue-prop-iwlinks": "在被解析的wiki文本中提供跨wiki链接。",
        "apihelp-parse-paramvalue-prop-wikitext": "提供被解析的原始wiki文本。",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablepp</var>被设定则不提供数据。",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablepp</var>被设置时不会提供数据。",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablelimitreport</var>被设定则不提供数据。",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablelimitreport</var>被设置时不会提供数据。",
        "apihelp-parse-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)",
        "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
        "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
        "apihelp-parse-param-section": "只检索此段数的内容,或只当<kbd>new</kbd>生成新的段落时检索。\n\n<kbd>new</kbd>段落只当指定<var>text</var>时受尊重。",
        "apihelp-parse-param-sectiontitle": "当<var>section</var>为<kbd>new</kbd>时新段落标题。\n\n不像页面编辑,当省略或为空时将不会备选为<var>summary</var>。",
-       "apihelp-parse-param-disablepp": "从解析器输出中省略预处理器报告(“NewPP limit report”)。",
+       "apihelp-parse-param-disablelimitreport": "从解析器输出中省略限制报告(“NewPP limit report”)。",
+       "apihelp-parse-param-disablepp": "请改用<var>$1disablelimitreport</var>。",
        "apihelp-parse-param-disableeditsection": "从解析器输出中省略编辑段落链接。",
+       "apihelp-parse-param-disabletidy": "不要在解析器输出中运行HTML清理(例如tidy)。",
        "apihelp-parse-param-generatexml": "生成XML解析树(需要内容模型<code>$1</code>;被<kbd>$2prop=parsetree</kbd>所取代)。",
        "apihelp-parse-param-preview": "在预览模式下解析。",
        "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
        "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
        "apihelp-query+alltransclusions-param-limit": "要返回的总计项目。",
        "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
+       "apihelp-query+alltransclusions-example-B": "列出嵌入的标题,包括丢失的,带有来自的页面ID,从<kbd>B</kbd>开始。",
        "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
        "apihelp-query+alltransclusions-example-unique-generator": "获取所有嵌入的标题,并标记缺失的。",
        "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
        "apihelp-query+categorymembers-param-end": "列举的结尾时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
        "apihelp-query+categorymembers-param-starthexsortkey": "开始列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
        "apihelp-query+categorymembers-param-endhexsortkey": "结束列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "要开始列举的排序关键词前缀。只能与<kbd>$1sort=sortkey</kbd>一起使用。覆盖<var>$1starthexsortkey</var>。",
        "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
        "apihelp-query+categorymembers-example-simple": "获取<kbd>Category:Physics</kbd>中的前10个页面。",
        "apihelp-query+filearchive-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
        "apihelp-query+filearchive-paramvalue-prop-timestamp": "为已上传版本添加时间戳。",
        "apihelp-query+filearchive-paramvalue-prop-user": "添加上传了图片版本的用户。",
+       "apihelp-query+filearchive-paramvalue-prop-size": "添加图片大小(字节)及其高度、宽度和页面计数(如果可以)。",
        "apihelp-query+filearchive-paramvalue-prop-dimensions": "用于大小的别名。",
        "apihelp-query+filearchive-paramvalue-prop-description": "添加图片版本的说明。",
        "apihelp-query+filearchive-paramvalue-prop-parseddescription": "解析版本的描述。",
        "apihelp-query+fileusage-paramvalue-prop-redirect": "标记作为重定向的页面。",
        "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+fileusage-param-limit": "返回多少。",
+       "apihelp-query+fileusage-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
        "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表。",
        "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息。",
        "apihelp-query+imageinfo-description": "返回文件信息和上传历史。",
        "apihelp-query+info-paramvalue-prop-subjectid": "每个讨论页的母页面的页面ID。",
        "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
        "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "在页面标题实际显示的地方提供方式。",
        "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获取有关页面<kbd>Main Page</kbd>的信息。",
        "apihelp-query+logevents-paramvalue-prop-title": "为日志事件添加页面标题。",
        "apihelp-query+logevents-paramvalue-prop-type": "添加日志活动的类型。",
        "apihelp-query+logevents-paramvalue-prop-user": "为日志事件添加用户责任。",
+       "apihelp-query+logevents-paramvalue-prop-userid": "为日志事件添加对此负责的用户ID。",
        "apihelp-query+logevents-paramvalue-prop-timestamp": "为日志活动添加时间戳。",
        "apihelp-query+logevents-paramvalue-prop-comment": "添加日志活动的摘要。",
        "apihelp-query+logevents-paramvalue-prop-parsedcomment": "添加被解析的日志活动的摘要。",
        "apihelp-query+protectedtitles-paramvalue-prop-userid": "添加对页面添加保护的用户ID。",
        "apihelp-query+protectedtitles-paramvalue-prop-comment": "为保护添加摘要。",
        "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "为保护添加解析的摘要。",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加保护将被提升时的时间戳。",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
        "apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
        "apihelp-query+protectedtitles-example-generator": "找到主命名空间中已保护的标题的链接。",
index 10b4fb0..1296c13 100644 (file)
@@ -157,7 +157,7 @@ class BacklinkCache {
         * @param string $table
         * @param int|bool $startId
         * @param int|bool $endId
-        * @param int|INF $max
+        * @param int $max
         * @return TitleArrayFromResult
         */
        public function getLinks( $table, $startId = false, $endId = false, $max = INF ) {
@@ -169,7 +169,7 @@ class BacklinkCache {
         * @param string $table
         * @param int|bool $startId
         * @param int|bool $endId
-        * @param int|INF $max
+        * @param int $max
         * @param string $select 'all' or 'ids'
         * @return ResultWrapper
         */
@@ -319,7 +319,7 @@ class BacklinkCache {
        /**
         * Get the approximate number of backlinks
         * @param string $table
-        * @param int|INF $max Only count up to this many backlinks
+        * @param int $max Only count up to this many backlinks
         * @return int
         */
        public function getNumLinks( $table, $max = INF ) {
index dafb59d..e693922 100644 (file)
@@ -160,7 +160,7 @@ class MessageCache {
                $this->mExpiry = $expiry;
 
                if ( $wgUseLocalMessageCache ) {
-                       $this->localCache = ObjectCache::newAccelerator( array(), CACHE_NONE );
+                       $this->localCache = ObjectCache::newAccelerator( CACHE_NONE );
                } else {
                        $this->localCache = wfGetCache( CACHE_NONE );
                }
@@ -190,6 +190,7 @@ class MessageCache {
         */
        protected function getLocalCache( $code ) {
                $cacheKey = wfMemcKey( __CLASS__, $code );
+
                return $this->localCache->get( $cacheKey );
        }
 
@@ -226,8 +227,6 @@ class MessageCache {
         * @return bool
         */
        function load( $code = false, $mode = null ) {
-               global $wgUseLocalMessageCache;
-
                if ( !is_string( $code ) ) {
                        # This isn't really nice, so at least make a note about it and try to
                        # fall back
@@ -260,25 +259,23 @@ class MessageCache {
                # or local cache goes out of date (e.g. due to replace() on some other server)
                list( $hash, $hashVolatile ) = $this->getValidationHash( $code );
 
-               if ( $wgUseLocalMessageCache && $hash ) {
-                       # Try the local cache and check against the cluster hash key...
-                       $cache = $this->getLocalCache( $code );
-                       if ( !$cache ) {
-                               $where[] = 'local cache is empty';
-                       } elseif ( !isset( $cache['HASH'] ) || $cache['HASH'] !== $hash ) {
-                               $where[] = 'local cache has the wrong hash';
-                               $staleCache = $cache;
-                       } elseif ( $this->isCacheExpired( $cache ) ) {
-                               $where[] = 'local cache is expired';
-                               $staleCache = $cache;
-                       } elseif ( $hashVolatile ) {
-                               $where[] = 'local cache validation key is expired/volatile';
-                               $staleCache = $cache;
-                       } else {
-                               $where[] = 'got from local cache';
-                               $success = true;
-                               $this->mCache[$code] = $cache;
-                       }
+               # Try the local cache and check against the cluster hash key...
+               $cache = $this->getLocalCache( $code );
+               if ( !$cache ) {
+                       $where[] = 'local cache is empty';
+               } elseif ( !isset( $cache['HASH'] ) || $cache['HASH'] !== $hash ) {
+                       $where[] = 'local cache has the wrong hash';
+                       $staleCache = $cache;
+               } elseif ( $this->isCacheExpired( $cache ) ) {
+                       $where[] = 'local cache is expired';
+                       $staleCache = $cache;
+               } elseif ( $hashVolatile ) {
+                       $where[] = 'local cache validation key is expired/volatile';
+                       $staleCache = $cache;
+               } else {
+                       $where[] = 'got from local cache';
+                       $success = true;
+                       $this->mCache[$code] = $cache;
                }
 
                if ( !$success ) {
@@ -346,7 +343,7 @@ class MessageCache {
                                                # Wait for the other thread to finish, then retry. Normally,
                                                # the memcached get() will then yeild the other thread's result.
                                                $where[] = 'waited for other thread to complete';
-                                               $this->mMemc->getScopedLock( $cacheKey, self::WAIT_SEC, self::LOCK_TTL );
+                                               $this->getReentrantScopedLock( $cacheKey );
                                        }
                                }
                        }
@@ -400,7 +397,7 @@ class MessageCache {
                # If this lock fails, it doesn't really matter, it just means the
                # write is potentially non-atomic, e.g. the results of a replace()
                # may be discarded.
-               $mainUnlocker = $memCache->getScopedLock( $cacheKey, self::WAIT_SEC, self::LOCK_TTL );
+               $mainUnlocker = $this->getReentrantScopedLock( $cacheKey );
                if ( !$mainUnlocker ) {
                        $where[] = 'could not acquire main lock';
                }
@@ -548,8 +545,13 @@ class MessageCache {
                        return;
                }
 
+               # Note that if the cache is volatile, load() may trigger a DB fetch.
+               # In that case we reenter/reuse the existing cache key lock to avoid
+               # a self-deadlock. This is safe as no reads happen *directly* in this
+               # method between getReentrantScopedLock() and load() below. There is
+               # no risk of data "changing under our feet" for replace().
                $cacheKey = wfMemcKey( 'messages', $code );
-               $scopedLock = $this->mMemc->getScopedLock( $cacheKey, self::WAIT_SEC, self::LOCK_TTL );
+               $scopedLock = $this->getReentrantScopedLock( $cacheKey );
                $this->load( $code, self::FOR_UPDATE );
 
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
@@ -557,14 +559,14 @@ class MessageCache {
                if ( $text === false ) {
                        # Article was deleted
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->mMemc->delete( $titleKey );
+                       $this->wanCache->delete( $titleKey );
                } elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
                        # Check for size
                        $this->mCache[$code][$title] = '!TOO BIG';
-                       $this->mMemc->set( $titleKey, ' ' . $text, $this->mExpiry );
+                       $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
                } else {
                        $this->mCache[$code][$title] = ' ' . $text;
-                       $this->mMemc->delete( $titleKey );
+                       $this->wanCache->delete( $titleKey );
                }
 
                # Update caches
@@ -622,8 +624,6 @@ class MessageCache {
         * @return bool
         */
        protected function saveToCaches( $cache, $dest, $code = false ) {
-               global $wgUseLocalMessageCache;
-
                if ( $dest === 'all' ) {
                        $cacheKey = wfMemcKey( 'messages', $code );
                        $success = $this->mMemc->set( $cacheKey, $cache );
@@ -634,9 +634,7 @@ class MessageCache {
                $this->setValidationHash( $code, $cache['HASH'] );
 
                # Save to local cache
-               if ( $wgUseLocalMessageCache ) {
-                       $this->saveToLocalCache( $code, $cache );
-               }
+               $this->saveToLocalCache( $code, $cache );
 
                return $success;
        }
@@ -673,6 +671,14 @@ class MessageCache {
                );
        }
 
+       /**
+        * @param string $key A language message cache key that stores blobs
+        * @return null|ScopedCallback
+        */
+       protected function getReentrantScopedLock( $key ) {
+               return $this->mMemc->getScopedLock( $key, self::WAIT_SEC, self::LOCK_TTL, __METHOD__ );
+       }
+
        /**
         * Get a message from either the content language or the user language.
         *
@@ -914,7 +920,7 @@ class MessageCache {
 
                # Try the individual message cache
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
-               $entry = $this->mMemc->get( $titleKey );
+               $entry = $this->wanCache->get( $titleKey );
                if ( $entry ) {
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
                                $this->mCache[$code][$title] = $entry;
@@ -928,14 +934,12 @@ class MessageCache {
                                return false;
                        } else {
                                # Corrupt/obsolete entry, delete it
-                               $this->mMemc->delete( $titleKey );
+                               $this->wanCache->delete( $titleKey );
                        }
                }
 
                # Try loading it from the database
-               $revision = Revision::newFromTitle(
-                       Title::makeTitle( NS_MEDIAWIKI, $title ), false, Revision::READ_LATEST
-               );
+               $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
                if ( $revision ) {
                        $content = $revision->getContent();
                        if ( !$content ) {
@@ -962,7 +966,7 @@ class MessageCache {
                                        $message = false; // negative caching
                                } else {
                                        $this->mCache[$code][$title] = ' ' . $message;
-                                       $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry );
+                                       $this->wanCache->set( $titleKey, ' ' . $message, $this->mExpiry );
                                }
                        }
                } else {
@@ -971,7 +975,7 @@ class MessageCache {
 
                if ( $message === false ) { // negative caching
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->mMemc->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
+                       $this->wanCache->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
                }
 
                return $message;
diff --git a/includes/compat/IPSetCompat.php b/includes/compat/IPSetCompat.php
new file mode 100644 (file)
index 0000000..79c6000
--- /dev/null
@@ -0,0 +1,28 @@
+<?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
+ */
+
+/**
+ * Backward-compatibility alias for IPSet, which was moved out
+ * into an external library and namespaced.
+ *
+ * @deprecated since 1.26 use IPSet\IPSet directly
+ */
+class IPSet extends IPSet\IPSet {
+}
index dfa01e2..ae5f742 100644 (file)
@@ -49,7 +49,7 @@ class CssContentHandler extends CodeContentHandler {
         *
         * @param Title $destination
         * @param string $text ignored
-        * @return JavaScriptContent
+        * @return CssContent
         */
        public function makeRedirectContent( Title $destination, $text = '' ) {
                // The parameters are passed as a string so the / is not url-encoded by wfArrayToCgi
index d526d84..caf5afa 100644 (file)
@@ -168,6 +168,7 @@ abstract class ContextSource implements IContextSource {
         * Parameters are the same as wfMessage()
         *
         * @since 1.18
+        * @param mixed ...
         * @return Message
         */
        public function msg( /* $args */ ) {
index 2ca79cd..58bf5d9 100644 (file)
@@ -134,6 +134,7 @@ interface IContextSource {
        /**
         * Get a Message object with context set.  See wfMessage for parameters.
         *
+        * @param mixed ...
         * @return Message
         */
        public function msg();
index 76b5e52..93adde1 100644 (file)
@@ -62,7 +62,7 @@ class RequestContext implements IContextSource, MutableContext {
        private $skin;
 
        /**
-        * @var StatsdDataFactory
+        * @var \Liuggio\StatsdClient\Factory\StatsdDataFactory
         */
        private $stats;
 
@@ -427,6 +427,7 @@ class RequestContext implements IContextSource, MutableContext {
         * Get a Message object with context set
         * Parameters are the same as wfMessage()
         *
+        * @param mixed ...
         * @return Message
         */
        public function msg() {
index aa8e2a0..4d1b1c0 100644 (file)
@@ -1901,9 +1901,6 @@ abstract class DatabaseBase implements IDatabase {
         *     This causes a multi-row INSERT on DBMSs that support it. The keys in
         *     each subarray must be identical to each other, and in the same order.
         *
-        * Usually throws a DBQueryError on failure. If errors are explicitly ignored,
-        * returns success.
-        *
         * $options is an array of options, with boolean options encoded as values
         * with numeric keys, in the same style as $options in
         * DatabaseBase::select(). Supported options are:
@@ -1919,6 +1916,9 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $fname Calling function name (use __METHOD__) for logs/profiling
         * @param array $options Array of options
         *
+        * @throws DBQueryError Usually throws a DBQueryError on failure. If errors are explicitly ignored,
+        * returns success.
+        *
         * @return bool
         */
        public function insert( $table, $a, $fname = __METHOD__, $options = array() ) {
index 0742df2..cf522b2 100644 (file)
@@ -208,7 +208,7 @@ abstract class LBFactory {
         */
        public function hasMasterChanges() {
                $ret = false;
-               $this->forEachLB( function ( $lb ) use ( &$ret ) {
+               $this->forEachLB( function ( LoadBalancer $lb ) use ( &$ret ) {
                        $ret = $ret || $lb->hasMasterChanges();
                } );
                return $ret;
index aa305ab..92fbccd 100644 (file)
@@ -232,7 +232,7 @@ class LBFactoryMulti extends LBFactory {
        public function getMainLB( $wiki = false ) {
                $section = $this->getSectionForWiki( $wiki );
                if ( !isset( $this->mainLBs[$section] ) ) {
-                       $lb = $this->newMainLB( $wiki, $section );
+                       $lb = $this->newMainLB( $wiki );
                        $lb->parentInfo( array( 'id' => "main-$section" ) );
                        $this->chronProt->initLB( $lb );
                        $this->mainLBs[$section] = $lb;
index c80697b..3008419 100644 (file)
@@ -34,12 +34,10 @@ class LoadMonitorMySQL implements LoadMonitor {
        protected $mainCache;
 
        public function __construct( $parent ) {
-               global $wgMemc;
-
                $this->parent = $parent;
 
-               $this->srvCache = ObjectCache::newAccelerator( array(), 'hash' );
-               $this->mainCache = $wgMemc ?: wfGetMainCache();
+               $this->srvCache = ObjectCache::newAccelerator( 'hash' );
+               $this->mainCache = wfGetMainCache();
        }
 
        public function scaleLoads( &$loads, $group = false, $wiki = false ) {
index 6a0f2ee..408194f 100644 (file)
@@ -138,13 +138,12 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( PHP_SAPI === 'cli' ) {
                                $this->srvCache = wfGetMainCache(); // preferrably memcached
                        } else {
-                               try { // look for APC, XCache, WinCache, ect...
-                                       $this->srvCache = ObjectCache::newAccelerator( array() );
-                               } catch ( Exception $e ) {
-                               }
+                               // look for APC, XCache, WinCache, ect...
+                               $this->srvCache = ObjectCache::newAccelerator( CACHE_NONE );
                        }
+               } else {
+                       $this->srvCache = new EmptyBagOStuff();
                }
-               $this->srvCache = $this->srvCache ?: new EmptyBagOStuff();
        }
 
        public function getFeatures() {
@@ -716,6 +715,11 @@ class SwiftFileBackend extends FileBackendStore {
                        return $objHdrs; // failed
                }
 
+               // Find prior custom HTTP headers
+               $postHeaders = $this->getCustomHeaders( $objHdrs );
+               // Find prior metadata headers
+               $postHeaders += $this->getMetadataHeaders( $objHdrs );
+
                $status = Status::newGood();
                /** @noinspection PhpUnusedLocalVariableInspection */
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
@@ -725,11 +729,13 @@ class SwiftFileBackend extends FileBackendStore {
                                $hash = $tmpFile->getSha1Base36();
                                if ( $hash !== false ) {
                                        $objHdrs['x-object-meta-sha1base36'] = $hash;
+                                       // Merge new SHA1 header into the old ones
+                                       $postHeaders['x-object-meta-sha1base36'] = $hash;
                                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
-                                       list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
+                                       list( $rcode ) = $this->http->run( array(
                                                'method' => 'POST',
                                                'url' => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                                               'headers' => $this->authTokenHeaders( $auth ) + $objHdrs
+                                               'headers' => $this->authTokenHeaders( $auth ) + $postHeaders
                                        ) );
                                        if ( $rcode >= 200 && $rcode <= 299 ) {
                                                $this->deleteFileCache( $path );
index 39a5563..b81cf3e 100644 (file)
@@ -96,7 +96,7 @@ abstract class DBLockManager extends QuorumLockManager {
                                // Tracks peers that couldn't be queried recently to avoid lengthy
                                // connection timeouts. This is useless if each bucket has one peer.
                                try {
-                                       $this->statusCache = ObjectCache::newAccelerator( array() );
+                                       $this->statusCache = ObjectCache::newAccelerator();
                                } catch ( Exception $e ) {
                                        trigger_error( __CLASS__ .
                                                " using multiple DB peers without apc, xcache, or wincache." );
index b0b08a6..56a23ad 100644 (file)
@@ -28,7 +28,7 @@ class HTMLButtonField extends HTMLFormField {
                ) {
                        $prefix = 'mw-ui-';
                        // add mw-ui-button separately, so the descriptor doesn't need to set it
-                       $flags .= $prefix.'button';
+                       $flags .= ' ' . $prefix.'button';
                }
                foreach ( $this->mFlags as $flag ) {
                        $flags .= ' ' . $prefix . $flag;
index aeb4b7c..5cfea63 100644 (file)
@@ -71,6 +71,11 @@ class HTMLTextAreaField extends HTMLFormField {
                        'readonly' => 'readOnly',
                ) );
 
+               if ( isset( $attribs['readOnly'] ) ) {
+                       // this needs to be set to a boolean value - hack??
+                       $attribs['readOnly'] = true;
+               }
+
                return new OOUI\TextInputWidget( array(
                        'id' => $this->mID,
                        'name' => $this->mName,
index 7b1cfdc..09b5929 100644 (file)
@@ -332,9 +332,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## https://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 ${serverSetting}
-## The relative URL path to the skins directory
-\$wgStylePath = \"\$wgScriptPath/skins\";
-\$wgResourceBasePath = \$wgScriptPath;
 
 ## The relative URL path to the logo.  Make sure you change this from the default,
 ## or else you'll overwrite your logo when you upgrade!
index 36d2c1d..aa60c01 100644 (file)
@@ -267,12 +267,14 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-fa_major_mime-chemical.sql' ),
 
                        // 1.25
-                       array( 'dropTable', 'hitcounter' ),
-                       array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
-                       array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
                        array( 'doUserNewTalkUseridUnsigned' ),
                        // note this patch covers other _comment and _description fields too
                        array( 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ),
+
+                       // 1.26
+                       array( 'dropTable', 'hitcounter' ),
+                       array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+                       array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
                );
        }
 
index 3a73c3e..b28a40d 100644 (file)
@@ -1,8 +1,12 @@
 {
        "@metadata": {
                "authors": [
-                       "Geitost"
+                       "Geitost",
+                       "Das Schäfchen"
                ]
        },
+       "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es 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\nDieses Programm 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 <doclink href=Copying>Kopie der GNU General Public License</doclink> 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 [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
+       "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit grosser Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
+       "config-uploads-not-safe": "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien <code>$1</code> ist für die willkürliche Ausführung von Skripten anfällig.\nObwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen, diese [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security Sicherheitslücke] zu schliessen, bevor das Hochladen von Dateien aktiviert wird.",
        "config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz.]\nDies trägt dazu bei, ein Gefühl von Gemeinschaft zu schaffen, und ermutigt zu längerfristiger Mitarbeit.\nHingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.\n\nSofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die ''Creative-Commons''-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen“ gewählt werden.\n\nDie Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.\nEs ist zudem schwierig, gemäss dieser Lizenz lizenzierte Inhalte wiederzuverwenden."
 }
index 8318e9c..f5dff47 100644 (file)
        "config-page-install": "តំលើង",
        "config-page-complete": "បញ្ចប់!",
        "config-page-restart": "តំលើងឡើងវិញ",
+       "config-install-sysop": "កំពុងបង្កើតគណនីអភិបាល",
        "config-help": "ជំនួយ",
+       "config-help-tooltip": "ចុចដើម្បីពន្លាត",
+       "config-nofile": "រកមិនឃើញឯកសារ \"$1\" ទេ។ វាប្រហែលជាត្រូវបានលុបចោលហើយ។",
        "mainpagetext": "'''មេឌាវិគីត្រូវបានដំឡើងសំរេចហើយ​។'''",
        "mainpagedocfooter": "សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/Help:Contents ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមអំពី​ការប្រើប្រាស់សូហ្វវែរវិគី​។\n\n== ការចាប់ផ្ដើម ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings បញ្ជីការកំណត់នានា]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/km សំណួរញឹកញាប់​ក្នុងមេឌាវិគី]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​អ៊ីមែលផ្សព្វផ្សាយ​របស់​មេឌាវិគី]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources ការប្រែសម្រួលមេឌាវិគីសម្រាប់ភាសារបស់អ្នក]"
 }
index 69da6d3..573172d 100644 (file)
@@ -47,7 +47,7 @@
        "config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?",
        "config-restart": "예, 다시 시작합니다",
        "config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.",
-       "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 <strong>상용으로 사용</strong>되거나 <strong>특정 목적에 맞을 것</strong>이라는 것을 <strong>보증하지 않습니다</strong>.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+       "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 <strong>상용으로 사용</strong>되거나 <strong>특정 목적에 맞을 것</strong>이라는 것을 <strong>보증하지 않습니다</strong>.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
        "config-sidebar": "* [//www.mediawiki.org 미디어위키 홈]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 사용자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 관리자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>읽어보기</doclink>\n* <doclink href=ReleaseNotes>릴리스 노트</doclink>\n* <doclink href=Copying>전문</doclink>\n* <doclink href=UpgradeDoc>업그레이드하기</doclink>",
        "config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.",
        "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
index 6615026..6a1d4a4 100644 (file)
@@ -18,7 +18,8 @@
                        "Alan ffm",
                        "Matik7",
                        "Pio387",
-                       "Darellur"
+                       "Darellur",
+                       "The Polish"
                ]
        },
        "config-desc": "Instalator MediaWiki",
        "config-install-keys": "Generowanie tajnych kluczy",
        "config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
        "config-install-updates": "Zapobieganie uruchamianiu niepotrzebnych aktualizacji",
+       "config-install-updates-failed": "<strong>Błąd:</strong> Wstawianie kluczy aktualizacji d0 tabeli nie powiodło się z powodu następującego błędu: $1",
        "config-install-sysop": "Tworzenie konta administratora",
        "config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce” – $1",
        "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
index b63905b..ffb4fb6 100644 (file)
@@ -60,7 +60,6 @@
        "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
        "config-env-php": "O PHP $1 está instalado.",
        "config-env-hhvm": "HHVM $1 está instalado.",
-       "config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.",
        "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
        "config-unicode-update-warning": "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
        "config-magic-quotes-sybase": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativa!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
        "config-mbstring": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativa!'''\nEsta opção causa erros e pode corromper os dados de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
        "config-safe-mode": "'''Aviso:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está ativo.\nEste modo pode causar problemas, especialmente no upload de ficheiros e no suporte a <code>math</code>.",
-       "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nSe está a executar o Mandrake, instale o pacote php-xml.",
+       "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nPode precisar de instalar o pacote RPM chamado php-xml.",
        "config-pcre-old": "<strong>Erro fatal:</strong> É necessário o PCRE $1 ou versão posterior.\nO <i>link</i> do seu binário PHP foi feito com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].",
        "config-pcre-no-utf8": "'''Erro fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.\nO MediaWiki necessita do suporte UTF-8 para funcionar corretamente.",
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-memory-bad": "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!",
        "config-ctype": "'''Erro fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
+       "config-iconv": "<strong>Fatal:</strong> PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
        "config-json": "<strong>Erro fatal:</strong> O PHP foi compilado sem suporte de JSON.\nTem de instalar a extensão JSON do PHP (incluída no PHP 5.2 ou posterior) ou a extensão [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar o MediaWiki.\n* A extensão JSON do PHP está incluída nas distribuções 5 e 6 do Red Hat Enterprise Linux (CentOS), mas tem de estar ativa nos ficheiros <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Algumas distribuições do Linux posteriores a maio de 2013 omitem a extensão JSON do PHP e substituem-na pela extensão PECL chamando-lhe <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada",
        "config-apc": "[http://www.php.net/apc APC] instalada",
        "config-db-install-account": "Conta do utilizador para a instalação",
        "config-db-username": "Nome do utilizador da base de dados:",
        "config-db-password": "Palavra-chave do utilizador da base de dados:",
-       "config-db-password-empty": "Introduza a palavra-chave do novo utilizador da base de dados: $1.\nEmbora seja possível criar utilizadores sem palavra-chave, fazê-lo não é seguro.",
-       "config-db-username-empty": "Tem de introduzir um valor para \"{{int:config-db-username}}\"",
        "config-db-install-username": "Introduza o nome de utilizador que será usado para aceder à base de dados durante o processo de instalação. Este utilizador não é o do MediaWiki; é o utilizador da base de dados.",
        "config-db-install-password": "Introduza a palavra-chave do utilizador que será usado para aceder à base de dados durante o processo de instalação. Esta palavra-chave não é a do utilizador do MediaWiki; é a palavra-chave do utilizador da base de dados.",
        "config-db-install-help": "Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante o processo de instalação.",
index f3bb6dd..ee68882 100644 (file)
@@ -1,5 +1,12 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Ammartivari"
+               ]
+       },
+       "config-admin-box": "Llogari administruesi",
+       "config-admin-name-blank": "Shkruani nofkën e një administruesi.",
+       "config-admin-password-blank": "Shkruani një fjalëkalim për llogarinë e administruesit.",
        "mainpagetext": "'''MediaWiki software u instalua me sukses.'''",
        "mainpagedocfooter": "Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].\n\n== Sa për fillim==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]\n* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]"
 }
index c63ac00..95dad25 100644 (file)
@@ -4,7 +4,8 @@
                        "Rancher",
                        "Михајло Анђелковић",
                        "Milicevic01",
-                       "Aktron"
+                       "Aktron",
+                       "Сербијана"
                ]
        },
        "config-desc": "Инсталација за Медијавики",
@@ -37,6 +38,7 @@
        "config-help-restart": "Желите ли да обришете све сачуване податке које сте унели и поново покренете инсталацију?",
        "config-restart": "Да, покрени поново",
        "config-env-php": "PHP $1 је инсталиран.",
+       "config-env-hhvm": "HHVM $1 је инсталиран.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] је инсталиран",
        "config-apc": "[http://www.php.net/apc APC] је инсталиран",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
@@ -44,7 +46,6 @@
        "config-db-host": "Хост базе података",
        "config-db-name": "Назив базе података:",
        "config-db-password": "Лозинка за базу података:",
-       "config-db-password-empty": "Унесите лозинку за новог корисника базе података: ($1).\n\nМада је могуће отворити налоге без лозинки, то се не препоручује.",
        "config-type-mysql": "MySQL (или компактибилан)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
index 700a63d..1304362 100644 (file)
@@ -195,13 +195,20 @@ class JobRunner implements LoggerAwareInterface {
                                $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
                                $timeMsTotal += $timeMs;
 
+                               // Record how long jobs wait before getting popped
                                $readyTs = $job->getReadyTimestamp();
                                if ( $readyTs ) {
-                                       // Record time to run for the job type
                                        $pickupDelay = $popTime - $readyTs;
                                        $stats->timing( 'jobqueue.pickup_delay.all', 1000 * $pickupDelay );
                                        $stats->timing( "jobqueue.pickup_delay.$jType", 1000 * $pickupDelay );
                                }
+                               // Record root job age for jobs being run
+                               $root = $job->getRootJobParams();
+                               if ( $root['rootJobTimestamp'] ) {
+                                       $age = $popTime - wfTimestamp( TS_UNIX, $root['rootJobTimestamp'] );
+                                       $stats->timing( "jobqueue.pickup_root_age.$jType", 1000 * $age );
+                               }
+                               // Track the execution time for jobs
                                $stats->timing( "jobqueue.run.$jType", $timeMs );
 
                                // Mark the job as done on success or when the job cannot be retried
index a15d51e..ade4810 100644 (file)
@@ -166,11 +166,11 @@ class UploadFromUrlJob extends Job {
        }
 
        /**
-        * Initialize the session data. Sets the intial result to queued.
+        * Initialize the session data. Sets the initial result to queued.
         */
        public function initializeSessionData() {
                $session =& self::getSessionData( $this->params['sessionKey'] );
-               $$session['result'] = 'Queued';
+               $session['result'] = 'Queued';
        }
 
        /**
diff --git a/includes/libs/IPSet.php b/includes/libs/IPSet.php
deleted file mode 100644 (file)
index c1c841e..0000000
+++ /dev/null
@@ -1,276 +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
- * @author Brandon Black <blblack@gmail.com>
- */
-
-/**
- * Matches IP addresses against a set of CIDR specifications
- *
- * Usage:
- *   // At startup, calculate the optimized data structure for the set:
- *   $ipset = new IPSet( $wgSquidServersNoPurge );
- *   // runtime check against cached set (returns bool):
- *   $allowme = $ipset->match( $ip );
- *
- * In rough benchmarking, this takes about 80% more time than
- * in_array() checks on a short (a couple hundred at most) array
- * of addresses.  It's fast either way at those levels, though,
- * and IPSet would scale better than in_array if the array were
- * much larger.
- *
- * For mixed-family CIDR sets, however, this code gives well over
- * 100x speedup vs iterating IP::isInRange() over an array
- * of CIDR specs.
- *
- * The basic implementation is two separate binary trees
- * (IPv4 and IPv6) as nested php arrays with keys named 0 and 1.
- * The values false and true are terminal match-fail and match-success,
- * otherwise the value is a deeper node in the tree.
- *
- * A simple depth-compression scheme is also implemented: whole-byte
- * tree compression at whole-byte boundaries only, where no branching
- * occurs during that whole byte of depth.  A compressed node has
- * keys 'comp' (the byte to compare) and 'next' (the next node to
- * recurse into if 'comp' matched successfully).
- *
- * For example, given these inputs:
- * 25.0.0.0/9
- * 25.192.0.0/10
- *
- * The v4 tree would look like:
- * root4 => array(
- *     'comp' => 25,
- *     'next' => array(
- *         0 => true,
- *         1 => array(
- *             0 => false,
- *             1 => true,
- *         ),
- *     ),
- * );
- *
- * (multi-byte compression nodes were attempted as well, but were
- * a net loss in my test scenarios due to additional match complexity)
- *
- * @since 1.24
- */
-class IPSet {
-       /** @var array $root4: the root of the IPv4 matching tree */
-       private $root4 = array( false, false );
-
-       /** @var array $root6: the root of the IPv6 matching tree */
-       private $root6 = array( false, false );
-
-       /**
-        * __construct() instantiate the object from an array of CIDR specs
-        *
-        * @param array $cfg array of IPv[46] CIDR specs as strings
-        * @return IPSet new IPSet object
-        *
-        * Invalid input network/mask values in $cfg will result in issuing
-        * E_WARNING and/or E_USER_WARNING and the bad values being ignored.
-        */
-       public function __construct( array $cfg ) {
-               foreach ( $cfg as $cidr ) {
-                       $this->addCidr( $cidr );
-               }
-
-               self::recOptimize( $this->root4 );
-               self::recCompress( $this->root4, 0, 24 );
-               self::recOptimize( $this->root6 );
-               self::recCompress( $this->root6, 0, 120 );
-       }
-
-       /**
-        * Add a single CIDR spec to the internal matching trees
-        *
-        * @param string $cidr string CIDR spec, IPv[46], optional /mask (def all-1's)
-        */
-       private function addCidr( $cidr ) {
-               // v4 or v6 check
-               if ( strpos( $cidr, ':' ) === false ) {
-                       $node =& $this->root4;
-                       $defMask = '32';
-               } else {
-                       $node =& $this->root6;
-                       $defMask = '128';
-               }
-
-               // Default to all-1's mask if no netmask in the input
-               if ( strpos( $cidr, '/' ) === false ) {
-                       $net = $cidr;
-                       $mask = $defMask;
-               } else {
-                       list( $net, $mask ) = explode( '/', $cidr, 2 );
-                       if ( !ctype_digit( $mask ) || intval( $mask ) > $defMask ) {
-                               trigger_error( "IPSet: Bad mask '$mask' from '$cidr', ignored", E_USER_WARNING );
-                               return;
-                       }
-               }
-               $mask = intval( $mask ); // explicit integer convert, checked above
-
-               // convert $net to an array of integer bytes, length 4 or 16:
-               $raw = inet_pton( $net );
-               if ( $raw === false ) {
-                       return; // inet_pton() sends an E_WARNING for us
-               }
-               $rawOrd = array_map( 'ord', str_split( $raw ) );
-
-               // special-case: zero mask overwrites the whole tree with a pair of terminal successes
-               if ( $mask == 0 ) {
-                       $node = array( true, true );
-                       return;
-               }
-
-               // iterate the bits of the address while walking the tree structure for inserts
-               $curBit = 0;
-               while ( 1 ) {
-                       $maskShift = 7 - ( $curBit & 7 );
-                       $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift];
-                       ++$curBit;
-                       if ( $node === true ) {
-                               // already added a larger supernet, no need to go deeper
-                               return;
-                       } elseif ( $curBit == $mask ) {
-                               // this may wipe out deeper subnets from earlier
-                               $node = true;
-                               return;
-                       } elseif ( $node === false ) {
-                               // create new subarray to go deeper
-                               $node = array( false, false );
-                       }
-               }
-       }
-
-       /**
-        * Match an IP address against the set
-        *
-        * @param string $ip string IPv[46] address
-        * @return bool true is match success, false is match failure
-        *
-        * If $ip is unparseable, inet_pton may issue an E_WARNING to that effect
-        */
-       public function match( $ip ) {
-               $raw = inet_pton( $ip );
-               if ( $raw === false ) {
-                       return false; // inet_pton() sends an E_WARNING for us
-               }
-
-               $rawOrd = array_map( 'ord', str_split( $raw ) );
-               if ( count( $rawOrd ) == 4 ) {
-                       $node =& $this->root4;
-               } else {
-                       $node =& $this->root6;
-               }
-
-               $curBit = 0;
-               while ( 1 ) {
-                       if ( isset( $node['comp'] ) ) {
-                               // compressed node, matches 1 whole byte on a byte boundary
-                               if ( $rawOrd[$curBit >> 3] != $node['comp'] ) {
-                                       return false;
-                               }
-                               $curBit += 8;
-                               $node =& $node['next'];
-                       } else {
-                               // uncompressed node, walk in the correct direction for the current bit-value
-                               $maskShift = 7 - ( $curBit & 7 );
-                               $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift];
-                               ++$curBit;
-                       }
-
-                       if ( $node === true || $node === false ) {
-                               return $node;
-                       }
-               }
-       }
-
-       /**
-        * Recursively merges adjacent nets into larger supernets
-        *
-        * @param array &$node Tree node to optimize, by-reference
-        *
-        *  e.g.: 8.0.0.0/8 + 9.0.0.0/8 -> 8.0.0.0/7
-        */
-       private static function recOptimize( &$node ) {
-               if ( $node[0] !== false && $node[0] !== true && self::recOptimize( $node[0] ) ) {
-                       $node[0] = true;
-               }
-               if ( $node[1] !== false && $node[1] !== true && self::recOptimize( $node[1] ) ) {
-                       $node[1] = true;
-               }
-               if ( $node[0] === true && $node[1] === true ) {
-                       return true;
-               }
-               return false;
-       }
-
-       /**
-        * Recursively compresses a tree
-        *
-        * @param array &$node Tree node to compress, by-reference
-        * @param integer $curBit current depth in the tree
-        * @param integer $maxCompStart maximum depth at which compression can start, family-specific
-        *
-        * This is a very simplistic compression scheme: if we go through a whole
-        * byte of address starting at a byte boundary with no real branching
-        * other than immediate false-vs-(node|true), compress that subtree down to a single
-        * byte-matching node.
-        * The $maxCompStart check elides recursing the final 7 levels of depth (family-dependent)
-        */
-       private static function recCompress( &$node, $curBit, $maxCompStart ) {
-               if ( !( $curBit & 7 ) ) { // byte boundary, check for depth-8 single path(s)
-                       $byte = 0;
-                       $cnode =& $node;
-                       $i = 8;
-                       while ( $i-- ) {
-                               if ( $cnode[0] === false ) {
-                                       $byte |= 1 << $i;
-                                       $cnode =& $cnode[1];
-                               } elseif ( $cnode[1] === false ) {
-                                       $cnode =& $cnode[0];
-                               } else {
-                                       // partial-byte branching, give up
-                                       break;
-                               }
-                       }
-                       if ( $i == -1 ) { // means we did not exit the while() via break
-                               $node = array(
-                                       'comp' => $byte,
-                                       'next' => &$cnode,
-                               );
-                               $curBit += 8;
-                               if ( $cnode !== true ) {
-                                       self::recCompress( $cnode, $curBit, $maxCompStart );
-                               }
-                               return;
-                       }
-               }
-
-               ++$curBit;
-               if ( $curBit <= $maxCompStart ) {
-                       if ( $node[0] !== false && $node[0] !== true ) {
-                               self::recCompress( $node[0], $curBit, $maxCompStart );
-                       }
-                       if ( $node[1] !== false && $node[1] !== true ) {
-                               self::recCompress( $node[1], $curBit, $maxCompStart );
-                       }
-               }
-       }
-}
index 5004a8a..ddbe8ea 100644 (file)
@@ -43,16 +43,17 @@ use Psr\Log\NullLogger;
  * @ingroup Cache
  */
 abstract class BagOStuff implements LoggerAwareInterface {
-       private $debugMode = false;
-
+       /** @var array[] Lock tracking */
+       protected $locks = array();
        /** @var integer */
        protected $lastError = self::ERR_NONE;
 
-       /**
-        * @var LoggerInterface
-        */
+       /** @var LoggerInterface */
        protected $logger;
 
+       /** @var bool */
+       private $debugMode = false;
+
        /** Possible values for getLastError() */
        const ERR_NONE = 0; // no error
        const ERR_NO_RESPONSE = 1; // no response
@@ -221,49 +222,77 @@ abstract class BagOStuff implements LoggerAwareInterface {
        }
 
        /**
+        * Acquire an advisory lock on a key string
+        *
+        * Note that if reentry is enabled, duplicate calls ignore $expiry
+        *
         * @param string $key
         * @param int $timeout Lock wait timeout; 0 for non-blocking [optional]
         * @param int $expiry Lock expiry [optional]; 1 day maximum
+        * @param string $rclass Allow reentry if set and the current lock used this value
         * @return bool Success
         */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
+               // Avoid deadlocks and allow lock reentry if specified
+               if ( isset( $this->locks[$key] ) ) {
+                       if ( $rclass != '' && $this->locks[$key]['class'] === $rclass ) {
+                               ++$this->locks[$key]['depth'];
+                               return true;
+                       } else {
+                               return false;
+                       }
+               }
+
                $expiry = min( $expiry ?: INF, 86400 );
 
                $this->clearLastError();
                $timestamp = microtime( true ); // starting UNIX timestamp
                if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
-                       return true;
+                       $locked = true;
                } elseif ( $this->getLastError() || $timeout <= 0 ) {
-                       return false; // network partition or non-blocking
+                       $locked = false; // network partition or non-blocking
+               } else {
+                       $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+                       $sleep = 2 * $uRTT; // rough time to do get()+set()
+
+                       $attempts = 0; // failed attempts
+                       do {
+                               if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
+                                       // Exponentially back off after failed attempts to avoid network spam.
+                                       // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                                       $sleep *= 2;
+                               }
+                               usleep( $sleep ); // back off
+                               $this->clearLastError();
+                               $locked = $this->add( "{$key}:lock", 1, $expiry );
+                               if ( $this->getLastError() ) {
+                                       $locked = false; // network partition
+                                       break;
+                               }
+                       } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
                }
 
-               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
-               $sleep = 2 * $uRTT; // rough time to do get()+set()
-
-               $attempts = 0; // failed attempts
-               do {
-                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
-                               // Exponentially back off after failed attempts to avoid network spam.
-                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
-                               $sleep *= 2;
-                       }
-                       usleep( $sleep ); // back off
-                       $this->clearLastError();
-                       $locked = $this->add( "{$key}:lock", 1, $expiry );
-                       if ( $this->getLastError() ) {
-                               return false; // network partition
-                       }
-               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
+               if ( $locked ) {
+                       $this->locks[$key] = array( 'class' => $rclass, 'depth' => 1 );
+               }
 
                return $locked;
        }
 
        /**
+        * Release an advisory lock on a key string
+        *
         * @param string $key
         * @return bool Success
         */
        public function unlock( $key ) {
-               return $this->delete( "{$key}:lock" );
+               if ( isset( $this->locks[$key] ) && --$this->locks[$key]['depth'] <= 0 ) {
+                       unset( $this->locks[$key] );
+
+                       return $this->delete( "{$key}:lock" );
+               }
+
+               return true;
        }
 
        /**
@@ -278,13 +307,14 @@ abstract class BagOStuff implements LoggerAwareInterface {
         * @param string $key
         * @param int $timeout Lock wait timeout; 0 for non-blocking [optional]
         * @param int $expiry Lock expiry [optional]; 1 day maximum
+        * @param string $rclass Allow reentry if set and the current lock used this value
         * @return ScopedCallback|null Returns null on failure
         * @since 1.26
         */
-       final public function getScopedLock( $key, $timeout = 6, $expiry = 30 ) {
+       final public function getScopedLock( $key, $timeout = 6, $expiry = 30, $rclass = '' ) {
                $expiry = min( $expiry ?: INF, 86400 );
 
-               if ( !$this->lock( $key, $timeout, $expiry ) ) {
+               if ( !$this->lock( $key, $timeout, $expiry, $rclass ) ) {
                        return null;
                }
 
index e03c83f..b685e41 100644 (file)
@@ -68,10 +68,6 @@ class HashBagOStuff extends BagOStuff {
        }
 
        function delete( $key ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
                unset( $this->bag[$key] );
 
                return true;
index 20e146d..9e80e9f 100644 (file)
@@ -104,8 +104,8 @@ class ReplicatedBagOStuff extends BagOStuff {
                return $this->writeStore->decr( $key, $value );
        }
 
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               return $this->writeStore->lock( $key, $timeout, $expiry );
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
+               return $this->writeStore->lock( $key, $timeout, $expiry, $rclass );
        }
 
        public function unlock( $key ) {
index 3c6c282..dcd413d 100644 (file)
@@ -256,11 +256,19 @@ class WANObjectCache {
        /**
         * Purge a key from all clusters
         *
-        * This instantiates a hold-off period where the key cannot be
-        * written to avoid race conditions where dependent keys get updated
-        * with a stale value (e.g. from a DB slave). This is implemented by
-        * storing a special "tombstone" value at the cache key that this
-        * class recognizes; get() calls will return false for the key.
+        * This deletes the key and instantiates a hold-off period where the key
+        * cannot be written to for the next few seconds (HOLDOFF_TTL). This is to
+        * avoid the following race condition:
+        *   a) Some DB data changes and delete() is called on a corresponding key
+        *   b) A request refills the key with a stale value from a lagged DB
+        *   c) The stale value is stuck there until the key is expired/evicted
+        *
+        * This is implemented by storing a special "tombstone" value at the cache
+        * key that this class recognizes; get() calls will return false for the key
+        * and any set() calls will refuse to replace tombstone values at the key.
+        * For this to always avoid writing stale values, the following must hold:
+        *   a) Replication lag is bounded to being less than HOLDOFF_TTL; or
+        *   b) If lag is higher, the DB will have gone into read-only mode already
         *
         * This should only be called when the underlying data (being cached)
         * changes in a significant way. If called twice on the same key, then
@@ -272,6 +280,8 @@ class WANObjectCache {
         */
        final public function delete( $key, $ttl = self::HOLDOFF_TTL ) {
                $key = self::VALUE_KEY_PREFIX . $key;
+               // Avoid indefinite key salting for sanity
+               $ttl = max( $ttl, 1 );
                // Update the local cluster immediately
                $ok = $this->cache->set( $key, self::PURGE_VAL_PREFIX . microtime( true ), $ttl );
                // Publish the purge to all clusters
@@ -455,10 +465,9 @@ class WANObjectCache {
         *               Other threads will try to use stale values if possible.
         *               If, on miss, the time since expiration is low, the assumption
         *               is that the key is hot and that a stampede is worth avoiding.
-        *   - tempTTL : when 'lockTSE' is set, this determines the TTL of the temp
-        *               key used to cache values while a key is tombstoned.
-        *               This avoids excessive regeneration of hot keys on delete() but
-        *               may result in stale values.
+        *   - tempTTL : TTL of the temp key used to cache values while a key is tombstoned.
+        *               This avoids excessive regeneration of hot keys on delete() but may
+        *               result in stale values.
         * @return mixed Value to use for the key
         */
        final public function getWithSetCallback(
index 32a27f7..4c96e29 100644 (file)
  */
 class ParsoidVirtualRESTService extends VirtualRESTService {
        /**
-        * Example requests:
-        *  GET /local/v1/page/$title/html/$oldid
-        *   * $oldid is optional
-        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        * Example Parsoid v3 requests:
+        *  GET /local/v3/page/html/$title/{$revision}
+        *   * $revision is optional
+        *  POST /local/v3/transform/html/to/wikitext/{$title}{/$revision}
         *   * body: array( 'html' => ... )
-        *   * $title and $oldid are optional
-        *  POST /local/v1/transform/wikitext/to/html/$title
-        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title and $revision are optional
+        *  POST /local/v3/transform/wikitext/to/html/{$title}{/$revision}
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
         *   * $title is optional
+        *   * $revision is optional
+     *
+        * There are also deprecated "v1" requests; see onParsoid1Request
+        * for details.
         * @param array $params Key/value map
         *   - url            : Parsoid server URL
-        *   - prefix         : Parsoid prefix for this wiki
+        *   - domain         : Wiki domain to use
         *   - timeout        : Parsoid timeout (optional)
         *   - forwardCookies : Cookies to forward to Parsoid, or false. (optional)
         *   - HTTPProxy      : Parsoid HTTP proxy (optional)
+        *   - restbaseCompat : whether to parse URL as if they were meant for RESTBase
+        *                       boolean (optional)
         */
        public function __construct( array $params ) {
                // for backwards compatibility:
@@ -46,7 +52,29 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                        $params['url'] = $params['URL'];
                        unset( $params['URL'] );
                }
-               parent::__construct( $params );
+               // set up defaults and merge them with the given params
+               $mparams = array_merge( array(
+                       'url' => 'http://localhost:8000/',
+                       'prefix' => 'localhost',
+                       'domain' => 'localhost',
+                       'forwardCookies' => false,
+                       'HTTPProxy' => null,
+               ), $params );
+               // Ensure that the url parameter has a trailing slash.
+               $mparams['url'] = preg_replace(
+                       '#/?$#',
+                       '/',
+                       $mparams['url']
+               );
+               // Ensure the correct domain format: strip protocol, port,
+               // and trailing slash if present.  This lets us use
+               // $wgCanonicalServer as a default value, which is very convenient.
+               $mparams['domain'] = preg_replace(
+                       '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
+                       '$2',
+                       $mparams['domain']
+               );
+               parent::__construct( $mparams );
        }
 
        public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
@@ -56,71 +84,143 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
 
                        list(
                                $targetWiki, // 'local'
-                               $version, // 'v1'
-                               $reqType // 'page' or 'transform'
+                               $version, // 'v3' ('v1' for restbase compatibility)
+                               $reqType, // 'page' or 'transform'
+                               $format, // 'html' or 'wikitext'
+                               // $title (optional)
+                               // $revision (optional)
                        ) = $parts;
 
+                       if ( $this->params['restbaseCompat'] ) {
+                               if ( $version !== 'v1' ) {
+                                       throw new Exception( "Only RESTBase v1 API is supported." );
+                               }
+                               # Map RESTBase v1 API to Parsoid v3 API (pretty easy)
+                               $req['url'] = preg_replace( '#^local/v1/#', 'local/v3/', $req['url'] );
+                       } elseif ( $version !== 'v3' ) {
+                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
+                               continue;
+                       }
                        if ( $targetWiki !== 'local' ) {
+
                                throw new Exception( "Only 'local' target wiki is currently supported" );
-                       } elseif ( $version !== 'v1' ) {
-                               throw new Exception( "Only version 1 exists" );
-                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                               throw new Exception( "Request type must be either 'page' or 'transform'" );
                        }
-
-                       $req['url'] = $this->params['url'] . '/' . urlencode( $this->params['prefix'] ) . '/';
-
-                       if ( $reqType === 'page' ) {
-                               $title = $parts[3];
-                               if ( $parts[4] !== 'html' ) {
-                                       throw new Exception( "Only 'html' output format is currently supported" );
-                               }
-                               if ( isset( $parts[5] ) ) {
-                                       $req['url'] .= $title . '?oldid=' . $parts[5];
-                               } else {
-                                       $req['url'] .= $title;
-                               }
-                       } elseif ( $reqType === 'transform' ) {
-                               if ( $parts[4] !== 'to' ) {
-                                       throw new Exception( "Part index 4 is not 'to'" );
-                               }
-
-                               if ( isset( $parts[6] ) ) {
-                                       $req['url'] .= $parts[6];
-                               }
-
-                               if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
-                                       if ( !isset( $req['body']['html'] ) ) {
-                                               throw new Exception( "You must set an 'html' body key for this request" );
-                                       }
-                                       if ( isset( $parts[7] ) ) {
-                                               $req['body']['oldid'] = $parts[7];
-                                       }
-                               } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                                       if ( !isset( $req['body']['wikitext'] ) ) {
-                                               throw new Exception( "You must set a 'wikitext' body key for this request" );
-                                       }
-                                       $req['body']['wt'] = $req['body']['wikitext'];
-                                       unset( $req['body']['wikitext'] );
-                               } else {
-                                       throw new Exception( "Transformation unsupported" );
-                               }
+                       if ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                               throw new Exception( "Request action must be either 'page' or 'transform'" );
                        }
-
-                       if ( isset( $this->params['HTTPProxy'] ) && $this->params['HTTPProxy'] ) {
+                       if ( $format !== 'html' && $format !== 'wikitext' ) {
+                               throw new Exception( "Request format must be either 'html' or 'wt'" );
+                       }
+                       // replace /local/ with the current domain
+                       $req['url'] = preg_replace( '#^local/#', $this->params['domain'] . '/', $req['url'] );
+                       // and prefix it with the service URL
+                       $req['url'] = $this->params['url'] . $req['url'];
+                       // set the appropriate proxy, timeout and headers
+                       if ( $this->params['HTTPProxy'] ) {
                                $req['proxy'] = $this->params['HTTPProxy'];
                        }
-                       if ( isset( $this->params['timeout'] ) ) {
+                       if ( $this->params['timeout'] != null ) {
                                $req['reqTimeout'] = $this->params['timeout'];
                        }
-
-                       // Forward cookies
-                       if ( isset( $this->params['forwardCookies'] ) ) {
+                       if ( $this->params['forwardCookies'] ) {
                                $req['headers']['Cookie'] = $this->params['forwardCookies'];
                        }
-
                        $result[$key] = $req;
                }
                return $result;
        }
+
+       /**
+        * Remap a Parsoid v1 request to a Parsoid v3 request.
+        *
+        * Example Parsoid v1 requests:
+        *  GET /local/v1/page/$title/html/$oldid
+        *   * $oldid is optional
+        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        *   * body: array( 'html' => ... )
+        *   * $title and $oldid are optional
+        *  POST /local/v1/transform/wikitext/to/html/$title
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title is optional
+        *
+        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
+        * Visual Editor "pretends" the V1 API is like.  A previous version of
+        * ParsoidVirtualRESTService translated these to the "real" Parsoid v1
+        * API.  We now translate these to the "real" Parsoid v3 API.
+        */
+       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
+
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v1'
+                       $reqType // 'page' or 'transform'
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v1' ) {
+                       throw new Exception( "Only v1 and v3 are supported." );
+               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                       throw new Exception( "Request type must be either 'page' or 'transform'" );
+               }
+               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v3/';
+               if ( $reqType === 'page' ) {
+                       $title = $parts[3];
+                       if ( $parts[4] !== 'html' ) {
+                               throw new Exception( "Only 'html' output format is currently supported" );
+                       }
+                       $req['url'] .= 'page/html/' . $title;
+                       if ( isset( $parts[5] ) ) {
+                               $req['url'] .= '/' . $parts[5];
+                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+                               $req['url'] .= '/' . $req['query']['oldid'];
+                               unset( $req['query']['oldid'] );
+                       }
+               } elseif ( $reqType === 'transform' ) {
+                       $req['url'] .= 'transform/'. $parts[3] . '/to/' . $parts[5];
+                       // the title
+                       if ( isset( $parts[6] ) ) {
+                               $req['url'] .= '/' . $parts[6];
+                       }
+                       // revision id
+                       if ( isset( $parts[7] ) ) {
+                               $req['url'] .= '/' . $parts[7];
+                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+                               $req['url'] .= '/' . $req['body']['oldid'];
+                               unset( $req['body']['oldid'] );
+                       }
+                       if ( $parts[4] !== 'to' ) {
+                               throw new Exception( "Part index 4 is not 'to'" );
+                       }
+                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
+                               if ( !isset( $req['body']['html'] ) ) {
+                                       throw new Exception( "You must set an 'html' body key for this request" );
+                               }
+                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+                               if ( !isset( $req['body']['wikitext'] ) ) {
+                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
+                               }
+                               if ( isset( $req['body']['body'] ) ) {
+                                       $req['body']['bodyOnly'] = $req['body']['body'];
+                                       unset( $req['body']['body'] );
+                               }
+                       } else {
+                               throw new Exception( "Transformation unsupported" );
+                       }
+               }
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
+               }
+
+               return $req;
+
+       }
+
 }
index 8fe5b92..bc520aa 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Virtual HTTP service client for Restbase
+ * Virtual HTTP service client for RESTBase
  *
  * 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
  */
 
 /**
- * Virtual REST service for Restbase
+ * Virtual REST service for RESTBase
  * @since 1.25
  */
 class RestbaseVirtualRESTService extends VirtualRESTService {
        /**
-        * Example requests:
-        *  GET /local/v1/page/{title}/html{/revision}
+        * Example RESTBase v1 requests:
+        *  GET /local/v1/page/html/{title}{/revision}
         *  POST /local/v1/transform/html/to/wikitext{/title}{/revision}
         *   * body: array( 'html' => ... )
         *  POST /local/v1/transform/wikitext/to/html{/title}{/revision}
         *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
         *
         * @param array $params Key/value map
-        *   - url            : Restbase server URL
+        *   - url            : RESTBase server URL
         *   - domain         : Wiki domain to use
         *   - timeout        : request timeout in seconds (optional)
-        *   - forwardCookies : cookies to forward to Restbase/Parsoid (as a Cookie
+        *   - forwardCookies : cookies to forward to RESTBase/Parsoid (as a Cookie
         *                       header string) or false (optional)
         *                       Note: forwardCookies will in the future be a boolean
         *                       only, signifing request cookies should be forwarded
@@ -48,18 +48,26 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        public function __construct( array $params ) {
                // set up defaults and merge them with the given params
                $mparams = array_merge( array(
-                       'url' => 'http://localhost:7231',
+                       'url' => 'http://localhost:7231/',
                        'domain' => 'localhost',
                        'timeout' => 100,
                        'forwardCookies' => false,
                        'HTTPProxy' => null,
                        'parsoidCompat' => false
                ), $params );
-               // ensure the correct domain format
+               // Ensure that the url parameter has a trailing slash.
+               $mparams['url'] = preg_replace(
+                       '#/?$#',
+                       '/',
+                       $mparams['url']
+               );
+               // Ensure the correct domain format: strip protocol, port,
+               // and trailing slash if present.  This lets us use
+               // $wgCanonicalServer as a default value, which is very convenient.
                $mparams['domain'] = preg_replace(
-                               '/^(https?:\/\/)?([^\/:]+?)(\/|:\d+\/?)?$/',
-                               '$2',
-                               $mparams['domain']
+                       '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
+                       '$2',
+                       $mparams['domain']
                );
                parent::__construct( $mparams );
        }
@@ -73,7 +81,7 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
                $result = array();
                foreach ( $reqs as $key => $req ) {
                        // replace /local/ with the current domain
-                       $req['url'] = preg_replace( '/^\/local\//', '/' . $this->params['domain'] . '/', $req['url'] );
+                       $req['url'] = preg_replace( '#^local/#', $this->params['domain'] . '/', $req['url'] );
                        // and prefix it with the service URL
                        $req['url'] = $this->params['url'] . $req['url'];
                        // set the appropriate proxy, timeout and headers
@@ -94,83 +102,164 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        }
 
        /**
-        * Remaps Parsoid requests to Restbase paths
+        * Remaps Parsoid v1/v3 requests to RESTBase v1 requests.
         */
        public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
 
                $result = array();
                foreach ( $reqs as $key => $req ) {
                        $parts = explode( '/', $req['url'] );
-                       list(
-                               $targetWiki, // 'local'
-                               $version, // 'v1'
-                               $reqType // 'page' or 'transform'
-                       ) = $parts;
-                       if ( $targetWiki !== 'local' ) {
-                               throw new Exception( "Only 'local' target wiki is currently supported" );
-                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                               throw new Exception( "Request type must be either 'page' or 'transform'" );
+                       if ( $parts[1] === 'v3' ) {
+                               $result[$key] = $this->onParsoid3Request( $req, $idGeneratorFunc );
+                       } elseif ( $parts[1] === 'v1' ) {
+                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
+                       } else {
+                               throw new Exception( "Only v1 and v3 are supported." );
                        }
-                       $req['url'] = $this->params['url'] . '/' . $this->params['domain'] . '/v1/' . $reqType . '/';
-                       if ( $reqType === 'page' ) {
-                               $title = $parts[3];
-                               if ( $parts[4] !== 'html' ) {
-                                       throw new Exception( "Only 'html' output format is currently supported" );
-                               }
-                               $req['url'] .= 'html/' . $title;
-                               if ( isset( $parts[5] ) ) {
-                                       $req['url'] .= '/' . $parts[5];
-                               } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
-                                       $req['url'] .= '/' . $req['query']['oldid'];
-                                       unset( $req['query']['oldid'] );
-                               }
-                       } elseif ( $reqType === 'transform' ) {
-                               // from / to transform
-                               $req['url'] .= $parts[3] . '/to/' . $parts[5];
-                               // the title
-                               if ( isset( $parts[6] ) ) {
-                                       $req['url'] .= '/' . $parts[6];
-                               }
-                               // revision id
-                               if ( isset( $parts[7] ) ) {
-                                       $req['url'] .= '/' . $parts[7];
-                               } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
-                                       $req['url'] .= '/' . $req['body']['oldid'];
-                                       unset( $req['body']['oldid'] );
-                               }
-                               if ( $parts[4] !== 'to' ) {
-                                       throw new Exception( "Part index 4 is not 'to'" );
-                               }
-                               if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
-                                       if ( !isset( $req['body']['html'] ) ) {
-                                               throw new Exception( "You must set an 'html' body key for this request" );
-                                       }
-                               } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                                       if ( !isset( $req['body']['wikitext'] ) ) {
-                                               throw new Exception( "You must set a 'wikitext' body key for this request" );
-                                       }
-                                       if ( isset( $req['body']['body'] ) ) {
-                                               $req['body']['bodyOnly'] = $req['body']['body'];
-                                               unset( $req['body']['body'] );
-                                       }
-                               } else {
-                                       throw new Exception( "Transformation unsupported" );
-                               }
+               }
+
+               return $result;
+
+       }
+
+       /**
+        * Remap a Parsoid v1 request to a RESTBase v1 request.
+        *
+        * Example Parsoid v1 requests:
+        *  GET /local/v1/page/$title/html/$oldid
+        *   * $oldid is optional
+        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        *   * body: array( 'html' => ... )
+        *   * $title and $oldid are optional
+        *  POST /local/v1/transform/wikitext/to/html/$title
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title is optional
+        *
+        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
+        * Visual Editor "pretends" the V1 API is like.  (See
+        * ParsoidVirtualRESTService.)
+        */
+       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v1'
+                       $reqType // 'page' or 'transform'
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v1' ) {
+                       throw new Exception( "Version mismatch: should not happen." );
+               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                       throw new Exception( "Request type must be either 'page' or 'transform'" );
+               }
+               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v1/' . $reqType . '/';
+               if ( $reqType === 'page' ) {
+                       $title = $parts[3];
+                       if ( $parts[4] !== 'html' ) {
+                               throw new Exception( "Only 'html' output format is currently supported" );
                        }
-                       // set the appropriate proxy, timeout and headers
-                       if ( $this->params['HTTPProxy'] ) {
-                               $req['proxy'] = $this->params['HTTPProxy'];
+                       $req['url'] .= 'html/' . $title;
+                       if ( isset( $parts[5] ) ) {
+                               $req['url'] .= '/' . $parts[5];
+                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+                               $req['url'] .= '/' . $req['query']['oldid'];
+                               unset( $req['query']['oldid'] );
                        }
-                       if ( $this->params['timeout'] != null ) {
-                               $req['reqTimeout'] = $this->params['timeout'];
+               } elseif ( $reqType === 'transform' ) {
+                       // from / to transform
+                       $req['url'] .= $parts[3] . '/to/' . $parts[5];
+                       // the title
+                       if ( isset( $parts[6] ) ) {
+                               $req['url'] .= '/' . $parts[6];
                        }
-                       if ( $this->params['forwardCookies'] ) {
-                               $req['headers']['Cookie'] = $this->params['forwardCookies'];
+                       // revision id
+                       if ( isset( $parts[7] ) ) {
+                               $req['url'] .= '/' . $parts[7];
+                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+                               $req['url'] .= '/' . $req['body']['oldid'];
+                               unset( $req['body']['oldid'] );
+                       }
+                       if ( $parts[4] !== 'to' ) {
+                               throw new Exception( "Part index 4 is not 'to'" );
+                       }
+                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
+                               if ( !isset( $req['body']['html'] ) ) {
+                                       throw new Exception( "You must set an 'html' body key for this request" );
+                               }
+                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+                               if ( !isset( $req['body']['wikitext'] ) ) {
+                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
+                               }
+                               if ( isset( $req['body']['body'] ) ) {
+                                       $req['body']['bodyOnly'] = $req['body']['body'];
+                                       unset( $req['body']['body'] );
+                               }
+                       } else {
+                               throw new Exception( "Transformation unsupported" );
                        }
-                       $result[$key] = $req;
+               }
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
                }
 
-               return $result;
+               return $req;
+
+       }
+
+       /**
+        * Remap a Parsoid v3 request to a RESTBase v1 request.
+        *
+        * Example Parsoid v3 requests:
+        *  GET /local/v3/page/html/$title/{$revision}
+        *   * $revision is optional
+        *  POST /local/v3/transform/html/to/wikitext/{$title}{/$revision}
+        *   * body: array( 'html' => ... )
+        *   * $title and $revision are optional
+        *  POST /local/v3/transform/wikitext/to/html/{$title}{/$revision}
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
+        *   * $title is optional
+        *   * $revision is optional
+        */
+       public function onParsoid3Request( array $req, Closure $idGeneratorFunc ) {
+
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v3'
+                       $action, // 'transform' or 'page'
+                       $format, // 'html' or 'wikitext'
+                       // $title, // optional
+                       // $revision, // optional
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v3' ) {
+                       throw new Exception( "Version mismatch: should not happen." );
+               }
+               // replace /local/ with the current domain, change v3 to v1,
+               $req['url'] = preg_replace( '#^local/v3/#', $this->params['domain'] . '/v1/', $req['url'] );
+               // and prefix it with the service URL
+               $req['url'] = $this->params['url'] . $req['url'];
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
+               }
+
+               return $req;
 
        }
 
index 12550a5..64a7e8a 100644 (file)
@@ -348,7 +348,7 @@ class XMPReader implements LoggerAwareInterface {
                        // could declare entities unsafe to parse with xml_parse (T85848/T71210).
                        if ( $this->parsable !== self::PARSABLE_OK ) {
                                if ( $this->parsable === self::PARSABLE_NO ) {
-                                       throw new Exception( 'Unsafe doctype declaration in XML.' );
+                                       throw new RuntimeException( 'Unsafe doctype declaration in XML.' );
                                }
 
                                $content = $this->xmlParsableBuffer . $content;
@@ -361,29 +361,44 @@ class XMPReader implements LoggerAwareInterface {
                                        $msg = ( $this->parsable === self::PARSABLE_NO ) ?
                                                'Unsafe doctype declaration in XML.' :
                                                'No root element found in XML.';
-                                       throw new Exception( $msg );
+                                       throw new RuntimeException( $msg );
                                }
                        }
 
                        $ok = xml_parse( $this->xmlParser, $content, $allOfIt );
                        if ( !$ok ) {
-                               $error = xml_error_string( xml_get_error_code( $this->xmlParser ) );
-                               $where = 'line: ' . xml_get_current_line_number( $this->xmlParser )
-                                       . ' column: ' . xml_get_current_column_number( $this->xmlParser )
-                                       . ' byte offset: ' . xml_get_current_byte_index( $this->xmlParser );
-
-                               $this->logger->info( "XMPReader::parse : Error reading XMP content: $error ($where)" );
+                               $code = xml_get_error_code( $this->xmlParser );
+                               $error = xml_error_string( $code );
+                               $line = xml_get_current_line_number( $this->xmlParser );
+                               $col = xml_get_current_column_number( $this->xmlParser );
+                               $offset = xml_get_current_byte_index( $this->xmlParser );
+
+                               $this->logger->warning(
+                                       '{method} : Error reading XMP content: {error} ' .
+                                       '(line: {line} column: {column} byte offset: {offset})',
+                                       array(
+                                               'method' => __METHOD__,
+                                               'error_code' => $code,
+                                               'error' => $error,
+                                               'line' => $line,
+                                               'column' => $col,
+                                               'offset' => $offset,
+                                               'content' => $content,
+                               ) );
                                $this->results = array(); // blank if error.
                                $this->destroyXMLParser();
                                return false;
                        }
                } catch ( Exception $e ) {
-                       $this->logger->info( 'XMP parse error: ' . $e );
+                       $this->logger->warning(
+                               '{method} Exception caught while parsing: ' . $e->getMessage(),
+                               array(
+                                       'method' => __METHOD__,
+                                       'exception' => $e,
+                                       'content' => $content,
+                               )
+                       );
                        $this->results = array();
-
-                       if ( $allOfIt ) {
-                               $this->destroyXMLParser();
-                       }
                        return false;
                }
                if ( $allOfIt ) {
index b5f3bd9..bbfaa5e 100644 (file)
@@ -121,12 +121,13 @@ class MultiWriteBagOStuff extends BagOStuff {
         * @param string $key
         * @param int $timeout
         * @param int $expiry
+        * @param string $rclass
         * @return bool
         */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
                // Lock only the first cache, to avoid deadlocks
                if ( isset( $this->caches[0] ) ) {
-                       return $this->caches[0]->lock( $key, $timeout, $expiry );
+                       return $this->caches[0]->lock( $key, $timeout, $expiry, $rclass );
                } else {
                        return true;
                }
index 8a99f53..6019105 100644 (file)
@@ -28,15 +28,46 @@ use MediaWiki\Logger\LoggerFactory;
  *
  * The word "cache" has two main dictionary meanings, and both
  * are used in this factory class. They are:
- *   - a) A place to store copies or computations on existing data
- *        for higher access speeds (the computer science definition)
- *   - b) A place to store lightweight data that is not canonically
- *        stored anywhere else (e.g. a "hoard" of objects)
+ *
+ *   - a) Cache (the computer science definition).
+ *        A place to store copies or computations on existing data for
+ *        higher access speeds.
+ *   - b) Storage.
+ *        A place to store lightweight data that is not canonically
+ *        stored anywhere else (e.g. a "hoard" of objects).
  *
  * The former should always use strongly consistent stores, so callers don't
  * have to deal with stale reads. The later may be eventually consistent, but
  * callers can use BagOStuff:READ_LATEST to see the latest available data.
  *
+ * Primary entry points:
+ *
+ * - ObjectCache::newAccelerator( $fallbackType )
+ *   Purpose: Cache.
+ *   Stored only on the individual web server.
+ *   Not associated with other servers.
+ *
+ * - wfGetMainCache()
+ *   Purpose: Cache.
+ *   Stored centrally within the local data-center.
+ *   Not replicated to other DCs.
+ *   Also known as $wgMemc. Configured by $wgMainCacheType.
+ *
+ * - ObjectCache::getMainWANInstance()
+ *   Purpose: Cache.
+ *   Stored in the local data-center's main cache (uses different cache keys).
+ *   Delete events are broadcasted to other DCs. See WANObjectCache for details.
+ *
+ * - ObjectCache::getMainStashInstance()
+ *   Purpose: Ephemeral storage.
+ *   Stored centrally within the local data-center.
+ *   Changes are replicated to other DCs (eventually consistent).
+ *   To retrieve the latest value (e.g. not from a slave), use BagOStuff:READ_LATEST.
+ *   This store may be subject to LRU style evictions.
+ *
+ * - wfGetCache( $cacheType )
+ *   Get a specific cache type by key in $wgObjectCaches.
+ *
  * @ingroup Cache
  */
 class ObjectCache {
@@ -49,10 +80,10 @@ class ObjectCache {
        /**
         * Get a cached instance of the specified type of cache object.
         *
-        * @param string $id
+        * @param string $id A key in $wgObjectCaches.
         * @return BagOStuff
         */
-       static function getInstance( $id ) {
+       public static function getInstance( $id ) {
                if ( !isset( self::$instances[$id] ) ) {
                        self::$instances[$id] = self::newFromId( $id );
                }
@@ -61,13 +92,13 @@ class ObjectCache {
        }
 
        /**
-        * Get a cached instance of the specified type of cache object.
+        * Get a cached instance of the specified type of WAN cache object.
         *
         * @since 1.26
-        * @param string $id
+        * @param string $id A key in $wgWANObjectCaches.
         * @return WANObjectCache
         */
-       static function getWANInstance( $id ) {
+       public static function getWANInstance( $id ) {
                if ( !isset( self::$wanInstances[$id] ) ) {
                        self::$wanInstances[$id] = self::newWANCacheFromId( $id );
                }
@@ -75,22 +106,14 @@ class ObjectCache {
                return self::$wanInstances[$id];
        }
 
-       /**
-        * Clear all the cached instances.
-        */
-       static function clear() {
-               self::$instances = array();
-               self::$wanInstances = array();
-       }
-
        /**
         * Create a new cache object of the specified type.
         *
-        * @param string $id
+        * @param string $id A key in $wgObjectCaches.
         * @return BagOStuff
         * @throws MWException
         */
-       static function newFromId( $id ) {
+       public static function newFromId( $id ) {
                global $wgObjectCaches;
 
                if ( !isset( $wgObjectCaches[$id] ) ) {
@@ -102,13 +125,17 @@ class ObjectCache {
        }
 
        /**
-        * Create a new cache object from parameters
+        * Create a new cache object from parameters.
         *
-        * @param array $params
+        * @param array $params Must have 'factory' or 'class' property.
+        *  - factory: Callback passed $params that returns BagOStuff.
+        *  - class: BagOStuff subclass constructed with $params.
+        *  - loggroup: Alias to set 'logger' key with LoggerFactory group.
+        *  - .. Other parameters passed to factory or class.
         * @return BagOStuff
         * @throws MWException
         */
-       static function newFromParams( $params ) {
+       public static function newFromParams( $params ) {
                if ( isset( $params['loggroup'] ) ) {
                        $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
                } else {
@@ -129,7 +156,7 @@ class ObjectCache {
        }
 
        /**
-        * Factory function referenced from DefaultSettings.php for CACHE_ANYTHING
+        * Factory function for CACHE_ANYTHING (referenced from DefaultSettings.php)
         *
         * CACHE_ANYTHING means that stuff has to be cached, not caching is not an option.
         * If a caching method is configured for any of the main caches ($wgMainCacheType,
@@ -141,7 +168,7 @@ class ObjectCache {
         * @param array $params
         * @return BagOStuff
         */
-       static function newAnything( $params ) {
+       public static function newAnything( $params ) {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
                $candidates = array( $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType );
                foreach ( $candidates as $candidate ) {
@@ -153,17 +180,20 @@ class ObjectCache {
        }
 
        /**
-        * Factory function referenced from DefaultSettings.php for CACHE_ACCEL.
+        * Factory function for CACHE_ACCEL (referenced from DefaultSettings.php)
         *
         * This will look for any APC style server-local cache.
         * A fallback cache can be specified if none is found.
         *
-        * @param array $params
+        * @param array $params [optional]
         * @param int|string $fallback Fallback cache, e.g. (CACHE_NONE, "hash") (since 1.24)
         * @return BagOStuff
         * @throws MWException
         */
-       static function newAccelerator( $params, $fallback = null ) {
+       public static function newAccelerator( $params = array(), $fallback = null ) {
+               if ( !is_array( $params ) && $fallback === null ) {
+                       $fallback = $params;
+               }
                if ( function_exists( 'apc_fetch' ) ) {
                        $id = 'apc';
                } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) {
@@ -190,19 +220,19 @@ class ObjectCache {
         * @param array $params
         * @return MemcachedPhpBagOStuff
         */
-       static function newMemcached( $params ) {
+       public static function newMemcached( $params ) {
                return new MemcachedPhpBagOStuff( $params );
        }
 
        /**
-        * Create a new cache object of the specified type
+        * Create a new cache object of the specified type.
         *
         * @since 1.26
-        * @param string $id
+        * @param string $id A key in $wgWANObjectCaches.
         * @return WANObjectCache
         * @throws MWException
         */
-       static function newWANCacheFromId( $id ) {
+       public static function newWANCacheFromId( $id ) {
                global $wgWANObjectCaches;
 
                if ( !isset( $wgWANObjectCaches[$id] ) ) {
@@ -220,18 +250,20 @@ class ObjectCache {
        }
 
        /**
-        * Get the main WAN cache object
+        * Get the main WAN cache object.
         *
         * @since 1.26
         * @return WANObjectCache
         */
-       static function getMainWANInstance() {
+       public static function getMainWANInstance() {
                global $wgMainWANCache;
 
                return self::getWANInstance( $wgMainWANCache );
        }
 
        /**
+        * Get the cache object for the main stash.
+        *
         * Stash objects are BagOStuff instances suitable for storing light
         * weight data that is not canonically stored elsewhere (such as RDBMS).
         * Stashes should be configured to propagate changes to all data-centers.
@@ -247,9 +279,17 @@ class ObjectCache {
         * @return BagOStuff
         * @since 1.26
         */
-       static function getMainStashInstance() {
+       public static function getMainStashInstance() {
                global $wgMainStash;
 
                return self::getInstance( $wgMainStash );
        }
+
+       /**
+        * Clear all the cached instances.
+        */
+       public static function clear() {
+               self::$instances = array();
+               self::$wanInstances = array();
+       }
 }
index b129bd2..657c4d0 100644 (file)
@@ -1199,10 +1199,9 @@ class WikiPage implements Page, IDBAccessObject {
         * Best if all done inside a transaction.
         *
         * @param DatabaseBase $dbw
-        * @return int The newly created page_id key, or false if the title already existed
+        * @return int|bool The newly created page_id key; false if the title already existed
         */
        public function insertOn( $dbw ) {
-
                $page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
                $dbw->insert( 'page', array(
                        'page_id'           => $page_id,
@@ -1223,9 +1222,11 @@ class WikiPage implements Page, IDBAccessObject {
                        $newid = $dbw->insertId();
                        $this->mId = $newid;
                        $this->mTitle->resetArticleID( $newid );
-               }
 
-               return $affected ? $newid : false;
+                       return $newid;
+               } else {
+                       return false;
+               }
        }
 
        /**
@@ -3224,10 +3225,10 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Purge squid for this page only
                $title->purgeSquid();
-
-               $revid = $revision ? $revision->getId() : null;
                // Clear file cache for this page only
                HTMLFileCache::clearFileCache( $title );
+
+               $revid = $revision ? $revision->getId() : null;
                DeferredUpdates::addCallableUpdate( function() use ( $title, $revid ) {
                        InfoAction::invalidateCache( $title, $revid );
                } );
index 8095539..ea619f1 100644 (file)
@@ -233,6 +233,13 @@ abstract class TablePager extends IndexPager {
                }
        }
 
+       /**
+        * @return stdClass
+        */
+       protected function getCurrentRow() {
+               return $this->mCurrentRow;
+       }
+
        /**
         * Get any extra attributes to be applied to the given cell. Don't
         * take this as an excuse to hardcode styles; use classes and
index 3d5d23e..664f0a4 100644 (file)
@@ -509,6 +509,9 @@ class Parser {
                        if ( $wgShowHostnames ) {
                                $limitReport .= 'Parsed by ' . wfHostname() . "\n";
                        }
+                       $limitReport .= 'Cached time: ' . $this->mOutput->getCacheTime() . "\n";
+                       $limitReport .= 'Cache expiry: ' . $this->mOutput->getCacheExpiry() . "\n";
+                       $limitReport .= 'Dynamic content: ' . ( $this->mOutput->hasDynamicContent() ? 'true' : 'false' ) . "\n";
                        foreach ( $this->mOutput->getLimitReportData() as $key => $value ) {
                                if ( Hooks::run( 'ParserLimitReportFormat',
                                        array( $key, &$value, &$limitReport, false, false )
@@ -5324,6 +5327,7 @@ class Parser {
                $ig->setParser( $this );
                $ig->setHideBadImages();
                $ig->setAttributes( Sanitizer::validateTagAttributes( $params, 'table' ) );
+               $this->getOutput()->addModuleStyles( 'mediawiki.page.gallery.styles' );
 
                if ( isset( $params['showfilename'] ) ) {
                        $ig->setShowFilename( true );
index 100656d..4459047 100644 (file)
@@ -34,145 +34,145 @@ class ParserOptions {
        /**
         * Interlanguage links are removed and returned in an array
         */
-       public $mInterwikiMagic;
+       private $mInterwikiMagic;
 
        /**
         * Allow external images inline?
         */
-       public $mAllowExternalImages;
+       private $mAllowExternalImages;
 
        /**
         * If not, any exception?
         */
-       public $mAllowExternalImagesFrom;
+       private $mAllowExternalImagesFrom;
 
        /**
         * If not or it doesn't match, should we check an on-wiki whitelist?
         */
-       public $mEnableImageWhitelist;
+       private $mEnableImageWhitelist;
 
        /**
         * Date format index
         */
-       public $mDateFormat = null;
+       private $mDateFormat = null;
 
        /**
         * Create "edit section" links?
         */
-       public $mEditSection = true;
+       private $mEditSection = true;
 
        /**
         * Allow inclusion of special pages?
         */
-       public $mAllowSpecialInclusion;
+       private $mAllowSpecialInclusion;
 
        /**
         * Use tidy to cleanup output HTML?
         */
-       public $mTidy = false;
+       private $mTidy = false;
 
        /**
         * Which lang to call for PLURAL and GRAMMAR
         */
-       public $mInterfaceMessage = false;
+       private $mInterfaceMessage = false;
 
        /**
         * Overrides $mInterfaceMessage with arbitrary language
         */
-       public $mTargetLanguage = null;
+       private $mTargetLanguage = null;
 
        /**
         * Maximum size of template expansions, in bytes
         */
-       public $mMaxIncludeSize;
+       private $mMaxIncludeSize;
 
        /**
         * Maximum number of nodes touched by PPFrame::expand()
         */
-       public $mMaxPPNodeCount;
+       private $mMaxPPNodeCount;
 
        /**
         * Maximum number of nodes generated by Preprocessor::preprocessToObj()
         */
-       public $mMaxGeneratedPPNodeCount;
+       private $mMaxGeneratedPPNodeCount;
 
        /**
         * Maximum recursion depth in PPFrame::expand()
         */
-       public $mMaxPPExpandDepth;
+       private $mMaxPPExpandDepth;
 
        /**
         * Maximum recursion depth for templates within templates
         */
-       public $mMaxTemplateDepth;
+       private $mMaxTemplateDepth;
 
        /**
         * Maximum number of calls per parse to expensive parser functions
         */
-       public $mExpensiveParserFunctionLimit;
+       private $mExpensiveParserFunctionLimit;
 
        /**
         * Remove HTML comments. ONLY APPLIES TO PREPROCESS OPERATIONS
         */
-       public $mRemoveComments = true;
+       private $mRemoveComments = true;
 
        /**
         * Callback for current revision fetching. Used as first argument to call_user_func().
         */
-       public $mCurrentRevisionCallback =
+       private $mCurrentRevisionCallback =
                array( 'Parser', 'statelessFetchRevision' );
 
        /**
         * Callback for template fetching. Used as first argument to call_user_func().
         */
-       public $mTemplateCallback =
+       private $mTemplateCallback =
                array( 'Parser', 'statelessFetchTemplate' );
 
        /**
         * Enable limit report in an HTML comment on output
         */
-       public $mEnableLimitReport = false;
+       private $mEnableLimitReport = false;
 
        /**
         * Timestamp used for {{CURRENTDAY}} etc.
         */
-       public $mTimestamp;
+       private $mTimestamp;
 
        /**
         * Target attribute for external links
         */
-       public $mExternalLinkTarget;
+       private $mExternalLinkTarget;
 
        /**
         * Clean up signature texts?
         * @see Parser::cleanSig
         */
-       public $mCleanSignatures;
+       private $mCleanSignatures;
 
        /**
         * Transform wiki markup when saving the page?
         */
-       public $mPreSaveTransform = true;
+       private $mPreSaveTransform = true;
 
        /**
         * Whether content conversion should be disabled
         */
-       public $mDisableContentConversion;
+       private $mDisableContentConversion;
 
        /**
         * Whether title conversion should be disabled
         */
-       public $mDisableTitleConversion;
+       private $mDisableTitleConversion;
 
        /**
         * Automatically number headings?
         */
-       public $mNumberHeadings;
+       private $mNumberHeadings;
 
        /**
         * Thumb size preferred by the user.
         */
-       public $mThumbSize;
+       private $mThumbSize;
 
        /**
         * Maximum article size of an article to be marked as "stub"
@@ -182,38 +182,38 @@ class ParserOptions {
        /**
         * Language object of the User language.
         */
-       public $mUserLang;
+       private $mUserLang;
 
        /**
         * @var User
         * Stored user object
         */
-       public $mUser;
+       private $mUser;
 
        /**
         * Parsing the page for a "preview" operation?
         */
-       public $mIsPreview = false;
+       private $mIsPreview = false;
 
        /**
         * Parsing the page for a "preview" operation on a single section?
         */
-       public $mIsSectionPreview = false;
+       private $mIsSectionPreview = false;
 
        /**
         * Parsing the printable version of the page?
         */
-       public $mIsPrintable = false;
+       private $mIsPrintable = false;
 
        /**
         * Extra key that should be present in the caching key.
         */
-       public $mExtraKey = '';
+       private $mExtraKey = '';
 
        /**
         * Function to be called when an option is accessed.
         */
-       protected $onAccessCallback = null;
+       private $onAccessCallback = null;
 
        /**
         * If the page being parsed is a redirect, this should hold the redirect
@@ -372,16 +372,17 @@ class ParserOptions {
        }
 
        /**
-        * Get the user language used by the parser for this page.
+        * Get the user language used by the parser for this page and split the parser cache.
         *
-        * You shouldn't use this. Really. $parser->getFunctionLang() is all you need.
+        * @warning: Calling this causes the parser cache to be fragmented by user language!
+        * To avoid cache fragmentation, output should not depend on the user language.
+        * Use Parser::getFunctionLang() or Parser::getTargetLanguage() instead!
         *
-        * To avoid side-effects where the page will be rendered based on the language
-        * of the user who last saved, this function will triger a cache fragmentation.
-        * Usage of this method is discouraged for that reason.
-        *
-        * When saving, this will return the default language instead of the user's.
+        * @note This function will trigger a cache fragmentation by recording the
+        * 'userlang' option, see optionUsed(). This is done to avoid cache pollution
+        * when the page is rendered based on the language of the user.
         *
+        * @note When saving, this will return the default language instead of the user's.
         * {{int: }} uses this which used to produce inconsistent link tables (bug 14404).
         *
         * @return Language
@@ -395,6 +396,12 @@ class ParserOptions {
        /**
         * Same as getUserLangObj() but returns a string instead.
         *
+        * @warning: Calling this causes the parser cache to be fragmented by user language!
+        * To avoid cache fragmentation, output should not depend on the user language.
+        * Use Parser::getFunctionLang() or Parser::getTargetLanguage() instead!
+        *
+        * @see getUserLangObj()
+        *
         * @return string Language code
         * @since 1.17
         */
@@ -700,6 +707,10 @@ class ParserOptions {
 
        /**
         * Called when an option is accessed.
+        * Calls the watcher that was set using registerWatcher().
+        * Typically, the watcher callback is ParserOutput::registerOption().
+        * The information registered that way will be used by ParserCache::save().
+        *
         * @param string $optionName Name of the option
         */
        public function optionUsed( $optionName ) {
index 15321c2..2eb1dc9 100644 (file)
@@ -686,6 +686,8 @@ class ParserOutput extends CacheTime {
        /**
         * Tags a parser option for use in the cache key for this parser output.
         * Registered as a watcher at ParserOptions::registerWatcher() by Parser::clearState().
+        * The information gathered here is available via getUsedOptions(),
+        * and is used by ParserCache::save().
         *
         * @see ParserCache::getKey
         * @see ParserCache::save
index a702d2e..d601467 100644 (file)
@@ -142,8 +142,12 @@ class PoolWorkArticleView extends PoolCounterWork {
 
                // Timing hack
                if ( $time > 3 ) {
-                       wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
-                               $this->page->getTitle()->getPrefixedDBkey() ) );
+                       // TODO: Use Parser's logger (once it has one)
+                       $logger = MediaWiki\Logger\LoggerFactory::getInstance( 'slow-parse' );
+                       $logger->info( '{time} {title}', array(
+                               'time' => number_format( $time, 2 ),
+                               'title' => $this->page->getTitle()->getPrefixedDBkey(),
+                       ) );
                }
 
                if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
index 68e5a17..dc35347 100644 (file)
@@ -59,7 +59,6 @@ class ExtensionProcessor implements Processor {
                'wgHooks' => 'array_merge_recursive',
                // credits are handled in the ExtensionRegistry
                //'wgExtensionCredits' => 'array_merge_recursive',
-               'wgExtraNamespaces' => 'array_plus',
                'wgExtraGenderNamespaces' => 'array_plus',
                'wgNamespacesWithSubpages' => 'array_plus',
                'wgNamespaceContentModels' => 'array_plus',
@@ -213,7 +212,7 @@ class ExtensionProcessor implements Processor {
                        foreach ( $info['namespaces'] as $ns ) {
                                $id = $ns['id'];
                                $this->defines[$ns['constant']] = $id;
-                               $this->globals['wgExtraNamespaces'][$id] = $ns['name'];
+                               $this->attributes['ExtensionNamespaces'][$id] = $ns['name'];
                                if ( isset( $ns['gender'] ) ) {
                                        $this->globals['wgExtraGenderNamespaces'][$id] = $ns['gender'];
                                }
index 7414925..f838103 100644 (file)
@@ -81,7 +81,7 @@ class ExtensionRegistry {
                // we don't want to fail here if $wgObjectCaches is not configured
                // properly for APC setup
                try {
-                       $this->cache = ObjectCache::newAccelerator( array() );
+                       $this->cache = ObjectCache::newAccelerator();
                } catch ( MWException $e ) {
                        $this->cache = new EmptyBagOStuff();
                }
@@ -222,14 +222,7 @@ class ExtensionRegistry {
                                        $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
                                        break;
                                case 'array_plus_2d':
-                                       // First merge items that are in both arrays
-                                       foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
-                                               if ( isset( $val[$name] ) ) {
-                                                       $groupVal += $val[$name];
-                                               }
-                                       }
-                                       // Now add items that didn't exist yet
-                                       $GLOBALS[$key] += $val;
+                                       $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val );
                                        break;
                                case 'array_plus':
                                        $GLOBALS[$key] = $val + $GLOBALS[$key];
index cecb6a2..5fb6c96 100644 (file)
@@ -191,6 +191,7 @@ class ResourceLoader implements LoggerAwareInterface {
                }
                // Defaults
                $options += array( 'cache' => true, 'cacheReport' => false );
+               $stats = RequestContext::getMain()->getStats();
 
                // Don't filter empty content
                if ( trim( $data ) === '' ) {
@@ -211,18 +212,16 @@ class ResourceLoader implements LoggerAwareInterface {
                        $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
-                               wfIncrStats( "resourceloader_cache.$filter.hit" );
+                               $stats->increment( "resourceloader_cache.$filter.hit" );
                                return $cacheEntry;
                        }
                        $result = '';
                        try {
-                               $stats = RequestContext::getMain()->getStats();
                                $statStart = microtime( true );
-
                                $result = self::applyFilter( $filter, $data, $this->config );
-
                                $statTiming = microtime( true ) - $statStart;
-                               $stats->timing( "resourceloader_cache.$filter.miss", 1000 * $statTiming );
+                               $stats->increment( "resourceloader_cache.$filter.miss" );
+                               $stats->timing( "resourceloader_cache.$filter.timing", 1000 * $statTiming );
                                if ( $options['cacheReport'] ) {
                                        $result .= "\n/* cache key: $key */";
                                }
@@ -1486,9 +1485,7 @@ MESSAGE;
                $query = self::createLoaderQuery( $context, $extraQuery );
                $script = $this->getLoadScript( $source );
 
-               // Prevent the IE6 extension check from being triggered (bug 28840)
-               // by appending a character that's invalid in Windows extensions ('*')
-               return wfExpandUrl( wfAppendQuery( $script, $query ) . '&*', PROTO_RELATIVE );
+               return wfExpandUrl( wfAppendQuery( $script, $query ), PROTO_RELATIVE );
        }
 
        /**
@@ -1516,9 +1513,7 @@ MESSAGE;
                        $only, $printable, $handheld, $extraQuery
                );
 
-               // Prevent the IE6 extension check from being triggered (bug 28840)
-               // by appending a character that's invalid in Windows extensions ('*')
-               return wfExpandUrl( wfAppendQuery( $wgLoadScript, $query ) . '&*', PROTO_RELATIVE );
+               return wfExpandUrl( wfAppendQuery( $wgLoadScript, $query ), PROTO_RELATIVE );
        }
 
        /**
index a1844a8..baf9d95 100644 (file)
@@ -54,12 +54,18 @@ class SkinTemplate extends Skin {
                $moduleStyles = array(
                        'mediawiki.legacy.shared',
                        'mediawiki.legacy.commonPrint',
-                       'mediawiki.ui.button',
                        'mediawiki.sectionAnchor'
                );
                if ( $out->isSyndicated() ) {
                        $moduleStyles[] = 'mediawiki.feedlink';
                }
+
+               // Deprecated since 1.26: Unconditional loading of mediawiki.ui.button
+               // on every page is deprecated. Express a dependency instead.
+               if ( strpos( $out->getHTML(), 'mw-ui-button' ) !== false ) {
+                       $moduleStyles[] = 'mediawiki.ui.button';
+               }
+
                $out->addModuleStyles( $moduleStyles );
        }
 
index da1a54c..0f8b729 100644 (file)
@@ -50,10 +50,12 @@ class SpecialComparePages extends SpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
+               # Form (.mw-searchInput enables suggestions)
                $form = new HTMLForm( array(
                        'Page1' => array(
                                'type' => 'text',
                                'name' => 'page1',
+                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page1',
                                'size' => '40',
                                'section' => 'page1',
@@ -70,6 +72,7 @@ class SpecialComparePages extends SpecialPage {
                        'Page2' => array(
                                'type' => 'text',
                                'name' => 'page2',
+                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page2',
                                'size' => '40',
                                'section' => 'page2',
index 6356155..147f67e 100644 (file)
@@ -43,6 +43,10 @@ class EmailConfirmation extends UnlistedSpecialPage {
         * @throws UserNotLoggedIn
         */
        function execute( $code ) {
+               // Ignore things like master queries/connections on GET requests.
+               // It's very convenient to just allow formless link usage.
+               Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
                $this->setHeaders();
 
                $this->checkReadOnly();
@@ -151,6 +155,10 @@ class EmailInvalidation extends UnlistedSpecialPage {
        }
 
        function execute( $code ) {
+               // Ignore things like master queries/connections on GET requests.
+               // It's very convenient to just allow formless link usage.
+               Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
                $this->setHeaders();
                $this->checkReadOnly();
                $this->checkPermissions();
index 3d68813..74662ae 100644 (file)
@@ -299,7 +299,9 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         */
        private function getWatchlist() {
                $list = array();
-               $dbr = wfGetDB( DB_MASTER );
+
+               $index = $this->getRequest()->wasPosted() ? DB_MASTER : DB_SLAVE;
+               $dbr = wfGetDB( $index );
 
                $res = $dbr->select(
                        'watchlist',
@@ -312,6 +314,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                );
 
                if ( $res->numRows() > 0 ) {
+                       /** @var Title[] $titles */
                        $titles = array();
                        foreach ( $res as $row ) {
                                $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
index e77479f..eb8a274 100644 (file)
@@ -104,7 +104,9 @@ class MovePageForm extends UnlistedSpecialPage {
                $permErrors = $this->oldTitle->getUserPermissionsErrors( 'move', $user );
                if ( count( $permErrors ) ) {
                        // Auto-block user's IP if the account was "hard" blocked
-                       $user->spreadAnyEditBlock();
+                       DeferredUpdates::addCallableUpdate( function() use ( $user ) {
+                               $user->spreadAnyEditBlock();
+                       } );
                        throw new PermissionsError( 'move', $permErrors );
                }
 
index 500a931..38baf5b 100644 (file)
@@ -92,7 +92,14 @@ class SpecialVersion extends SpecialPage {
                                        if ( $file ) {
                                                $wikiText = file_get_contents( $file );
                                                if ( substr( $file, -4 ) === '.txt' ) {
-                                                       $wikiText = Html::element( 'pre', array(), $wikiText );
+                                                       $wikiText = Html::element(
+                                                               'pre',
+                                                               array(
+                                                                       'lang' => 'en',
+                                                                       'dir' => 'ltr',
+                                                               ),
+                                                               $wikiText
+                                                       );
                                                }
                                        }
                                }
@@ -109,7 +116,14 @@ class SpecialVersion extends SpecialPage {
                                        $file = $this->getExtLicenseFileName( dirname( $extNode['path'] ) );
                                        if ( $file ) {
                                                $wikiText = file_get_contents( $file );
-                                               $wikiText = "<pre>$wikiText</pre>";
+                                               $wikiText = Html::element(
+                                                       'pre',
+                                                       array(
+                                                               'lang' => 'en',
+                                                               'dir' => 'ltr',
+                                                       ),
+                                                       $wikiText
+                                               );
                                        }
                                }
 
index ae3736a..666660a 100644 (file)
@@ -21,6 +21,8 @@
  * @author Antoine Musso "<hashar at free dot fr>", Aaron Schulz
  */
 
+use IPSet\IPSet;
+
 // Some regex definition to "play" with IP address and IP address blocks
 
 // An IPv4 address is made of 4 bytes from x00 to xFF which is d0 to d255
index 950dd84..740df92 100644 (file)
@@ -161,7 +161,7 @@ class MWCryptHKDF {
         * @throws MWException
         */
        protected static function singleton() {
-               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey;
+               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey, $wgMainCacheType;
 
                $secret = $wgHKDFSecret ?: $wgSecretKey;
                if ( !$secret ) {
@@ -176,11 +176,7 @@ class MWCryptHKDF {
                $context[] = gethostname();
 
                // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
-               try {
-                       $cache = ObjectCache::newAccelerator( array() );
-               } catch ( Exception $e ) {
-                       $cache = wfGetMainCache();
-               }
+               $cache = ObjectCache::newAccelerator( $wgMainCacheType );
 
                if ( is_null( self::$singleton ) ) {
                        self::$singleton = new self( $secret, $wgHKDFAlgorithm, $cache, $context );
index 2d7d932..04c8e19 100644 (file)
@@ -283,7 +283,7 @@ class UIDGenerator {
                $cache = null;
                if ( ( $flags & self::QUICK_VOLATILE ) && PHP_SAPI !== 'cli' ) {
                        try {
-                               $cache = ObjectCache::newAccelerator( array() );
+                               $cache = ObjectCache::newAccelerator();
                        } catch ( Exception $e ) {
                                // not supported
                        }
index b698beb..b47442d 100644 (file)
@@ -2270,30 +2270,33 @@ class Language {
 
        /**
         * Get a format string for a given type and preference
-        * @param string $type May be date, time or both
-        * @param string $pref The format name as it appears in Messages*.php
+        * @param string $type May be 'date', 'time', 'both', or 'pretty'.
+        * @param string $pref The format name as it appears in Messages*.php under
+        *  $datePreferences.
         *
         * @since 1.22 New type 'pretty' that provides a more readable timestamp format
         *
         * @return string
         */
        function getDateFormatString( $type, $pref ) {
+               $wasDefault = false;
+               if ( $pref == 'default' ) {
+                       $wasDefault = true;
+                       $pref = $this->getDefaultDateFormat();
+               }
+
                if ( !isset( $this->dateFormatStrings[$type][$pref] ) ) {
-                       if ( $pref == 'default' ) {
-                               $pref = $this->getDefaultDateFormat();
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                       } else {
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
 
-                               if ( $type === 'pretty' && $df === null ) {
-                                       $df = $this->getDateFormatString( 'date', $pref );
-                               }
+                       if ( $type === 'pretty' && $df === null ) {
+                               $df = $this->getDateFormatString( 'date', $pref );
+                       }
 
-                               if ( $df === null ) {
-                                       $pref = $this->getDefaultDateFormat();
-                                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                               }
+                       if ( !$wasDefault && $df === null ) {
+                               $pref = $this->getDefaultDateFormat();
+                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
                        }
+
                        $this->dateFormatStrings[$type][$pref] = $df;
                }
                return $this->dateFormatStrings[$type][$pref];
@@ -2838,7 +2841,7 @@ class Language {
         * @return bool
         */
        function isMultibyte( $str ) {
-               return (bool)preg_match( '/[\x80-\xff]/', $str );
+               return strlen( $str ) !== mb_strlen( $str );
        }
 
        /**
index ee24312..8cf83e5 100644 (file)
        "databaseerror-error": "Хэукъоныгъэ: $1",
        "laggedslavemode": "<strong>Сакъ:</strong> НэкIубгъом имылъын лъэкIыщт хэIэзэныкIэмэ ащыщ.",
        "readonly": "Датэбазэр гъэпытагъэ",
-       "missingarticle-diff": "(Зэгъпш: $1, $2)",
+       "missingarticle-rev": "(версиеу № $1)",
+       "missingarticle-diff": "(Зэгъапш: $1, $2)",
        "internalerror": "ЫкIоцI хэукъоныгъэ",
-       "internalerror_info": "ЫкIоÑ\86I Ñ\85Ñ\8dÑ\83кÑ\8aонÑ\8bгъэ: $1",
+       "internalerror_info": "ЫкIоÑ\86I Ñ\84Ñ\8bкÑ\8aÑ\83агъэ: $1",
        "filecopyerror": "\"$1\"-файлыр \"$2\"-м копи шIын лъэкIыгъэп.",
        "filerenameerror": "Файлэу \"$1\" ыц1э \"$2\" фэдэу хъожьын лъэкIырэп.",
        "filedeleteerror": "Файлэу \"$1\" тегъэкIын лъэкIырэп.",
        "userlogin-yourname": "НэбгырацӀэр",
        "userlogin-yourname-ph": "Итх уи нэбгырацIэ",
        "createacct-another-username-ph": "Итх уи нэбгырацӀэр",
-       "yourpassword": "Шъэфыгъэ:",
+       "yourpassword": "ШъэфгущыI:",
        "userlogin-yourpassword": "ШъэфгущыI",
        "userlogin-yourpassword-ph": "Уи шъэфгущыIэ итх",
        "createacct-yourpassword-ph": "Къэтх шъэфгущыIэ горэ",
        "gotaccount": "Аккаунт уиӏаха? $1.",
        "gotaccountlink": "Системэм хахь",
        "userlogin-resetlink": "Уи хэхьан датэхэр пщыгъупшагъа?",
-       "userlogin-resetpassword-link": "Уипаролыр пщыгъупшагъа?",
+       "userlogin-resetpassword-link": "УишъэфгущыIэр пщыгъупшагъа?",
        "userlogin-helplink2": "Системэм сыхэхьанэу къыздеӏ",
        "userlogin-createanother": "НэмыкI аккаунт къэубл",
        "createacct-emailrequired": "Емэйл адрес",
        "createacct-benefit-body1": "{{PLURAL:$1|еӀэзэныгъэ|еӀэзэныгъ}}",
        "createacct-benefit-body2": "{{PLURAL:$1|нэкӀубгъо|нэкӀубгъу}}",
        "createacct-benefit-body3": "бэмышӀэу {{PLURAL:$1|хэлэжьакӀу|хэлэжьакӀо}}",
+       "badretype": "ШъэфгущыIэу ибгъэхьагъэхэр зэтефэрэп.",
        "userexists": "Ибгъэхьэгъэ нэбгырацIэр агъэфедэ.\nНэмыкI цIэ горэ къыхэхба.",
        "loginerror": "Системэ хэхьаныгъэр къуанчэ",
        "createacct-error": "Аккаунт къэублэныгъэ къончагъ",
        "nouserspecified": "НэбгырацIэр птхын фае.",
        "wrongpassword": "ШъэфгущыIэр тэрэзэп.\nДжыри зэ еплъ.",
        "wrongpasswordempty": "ШъэфгущыIэр нэкIы.\nДжыри зэ еплъ.",
+       "passwordtooshort": "ШъэфгущыIэр мыхъуми {{PLURAL:$1|1 символ |символ $1}} хъун фае.",
        "password-name-match": "Уи шъэфгущыIэр уи нэбгырацIэм фэдапэ хъущтэп.",
        "mailmypassword": "Зэтедз шъэфгущыIэр",
        "noemailcreate": "Емэйл тэрэз птхын фае.",
        "mailerror": "Емэйл егъэхьыныр къуанчэ: $1",
+       "emailauthenticated": "Уи емэйл адресыр уплъэкIужьыгъы, мафэр $2, уахъэр $3",
        "emailconfirmlink": "Тегъэпытыхь уи емэйл адресыр",
        "emaildisabled": "Мы сайтым емэйлхэр ыгъэхьын лъэкIырэп.",
        "accountcreated": "Аккаунтыр ублагъэ",
        "pt-userlogout": "ХэкӀыжь системэм",
        "php-mail-error-unknown": "PHP-функциеу mail()-м къончагъэ горэ иI.",
        "user-mail-no-addy": "Емэйл адрес имыIэу емэйл аригъэхьынэу фэягъ.",
+       "user-mail-no-body": "Емэйл ебгъэхьынэу уфаягъ, нэкIэу е мэхьанэнчъэ кIакоу.",
        "changepassword": "ШъэфгущыIэр зэблэхъу",
+       "resetpass_announce": "Системэ хэхьаныр зэшIобгъэкIынэу, шъэфгущыIакIэ бгъэпсын фае.",
        "resetpass_header": "Аккаунтым и шъэфгущыIэр зэблэхъу",
        "oldpassword": "ШъэфгущыIэжъыр:",
        "newpassword": "ШъэфгущыIакIэр:",
        "resetpass-no-info": "Мы нэкIубгъом занкIэу укIонэу уфаемэ, системэм ухэхьэгъэн фае.",
        "resetpass-submit-loggedin": "ШъэфгущыIэр зэблэхъу",
        "resetpass-submit-cancel": "Ыуж икӀ",
+       "resetpass-recycled": "УишъэфгущыIэр зэтедзба джырэм фэмыдэу.",
        "resetpass-expired": "ШъэфгущыIэм и зэман икIыгъ. ШъэфгущыIакIэ горэ гъэпсба.",
-       "passwordreset": "Зэтедз паролыр",
+       "passwordreset": "Зэтедз шъэфгущыIэр",
        "passwordreset-disabled": "Мы виким шъэфгущыIэр щызэтебдзэшъущтэп.",
        "passwordreset-emaildisabled": "Мы виким емэйл-Iофыгъохэр щылажьэхэрэп.",
        "passwordreset-username": "НэбгырацIэ:",
        "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
        "passwordreset-emailelement": "НэбгырацIэ: $1\nTemporary password: $2",
        "passwordreset-emailsent": "ШъэфгущыIэм и зэтедзым пае емэйл агъэхьыгъ.",
+       "passwordreset-emailsent-capture": "ШъэфгущыIэм изэтедз фэгъэхьыгъэ емэйлыр гъахьыгъэ, ычIэгъкIэ ар олъэгъу.",
        "changeemail": "Зэблэхъу емэйл адресыр",
        "changeemail-oldemail": "Джырэ емэйл адрес:",
        "changeemail-newemail": "Емэйл адресыкIэр:",
        "preview": "Ыпэтеплъ",
        "showpreview": "Итеплъэ къэгъэлъагъу",
        "showdiff": "ЗэхъокӀыныгъэхэр къэгъэлъагъу",
+       "anoneditwarning": "<strong>Сакъ:</strong>Системэм ухэхьагъэп. Уи IP-адресыр зэкIэми алъэгъушъущт зыгорэм ухэIазэмэ. <strong>[$1 ухахьэмэ]</strong> е <strong>[$2 аккаунт уублэмэ]</strong>, уи еIэзэнхэр уи нэбгырацIэм пышIэгъэщтых, нэмыкI шIуагъэхэм анэмыкIэу.",
        "missingcommenttext": "ТегущыIэн горэ кIэтхэжьба ычIэгъ.",
        "summary-preview": "Къэбарым и ыпэтеплъ:",
        "previewerrortext": "Уи ыпэтеплъэмэ я къэгъэлъэгъон игъо зы къончагъэ горэ хъугъэ.",
        "loginreqlink": "системэм хахь",
        "accmailtitle": "ШъэфгущыIэр агъэхьыгъ",
        "newarticle": "(КIэ)",
+       "noarticletext": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын],\nе [{{fullurl:{{FULLPAGENAME}}|action=edit}} мы нэкIубгъом уеIэзэн]</span>.",
+       "noarticletext-nopermission": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ, е\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын]</span>. Ау мы нэкIубгъор уублэнэу фитыныгъэ уиIэп.",
        "userpage-userdoesnotexist-view": "Аккаунтэу \"$1\" регистрацие ыкIугъэп.",
        "note": "<strong>Еплъ:</strong>",
        "previewnote": "<strong>Зыщымыгъэгъупш, мыр ыпэтеплъэ къодый.</strong>\nУи еIэзэнхэр джыри дэгъэпытыхьагъэхэп.",
        "revdelete-hide-user": "ЕIэзакIом и нэбгырацI/IP-адрес",
        "revdelete-radio-same": "(зэблэмыхъу)",
        "revdelete-radio-set": "(гъэбылъыгъэ)",
+       "revdelete-radio-unset": "Плъэгъушъунэу",
        "revdelete-log": "ЗыпкъырыкIырэр:",
        "revdel-restore": "плъэгъушъущтыр зэблэхъу",
        "pagehist": "НэкIубгъом и тарихъ",
        "deletedhist": "ТегъэкIыгъэмэ я тарихъ",
        "revdelete-reasonotherlist": "ПэмыкI къызпкъырыкIрэр",
        "revdelete-offender": "Версием и аутор:",
+       "mergehistory": "НэкIубгъомэ ятарихъхэр зэпыдз",
+       "mergehistory-box": "НэкIубгъуитIум ятарихъхэр зэпыдзэх:",
        "mergehistory-from": "Лъапсэ нэкIубгъор:",
        "mergehistory-into": "ЗыдакIорэ нэкIубгъор:",
        "mergehistory-go": "Зэпыбдзэшъурэ еIэзэнхэр къэгъэлъагъу",
        "nextn-title": "КIэлъыкIорэ $1 {{PLURAL:$1|резултат|резултатхэр}}",
        "shown-title": "Зы нэкӀубгъом $1{{PLURAL:$1|гъотыгъэ|гъотыгъэхэр}} къыщыгъэлъагъу",
        "viewprevnext": "Еплъ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>НэкIубгъор щыублэ \"[[:$1]]\" мы вики-проектым!</strong> {{PLURAL:$2|0=|Узщылъыхъугъэм ирезултат-нэкIубгъоми еплъ.|Узщылъыхъугъэм ирезултат-нэкIубгъохэми яплъ.}}",
        "searchprofile-articles": "НэкӀубгъо шъхьаӀхэр",
        "searchprofile-images": "Мултимедие",
        "searchprofile-everything": "ЗэкӀэ",
        "search-relatedarticle": "ЕхьылIагъ",
        "searchrelated": "ехьылIагъ",
        "searchall": "зэкӀэ",
+       "search-showingresults": "{{PLURAL:$4|Резултат <strong>$1</strong> мыщ щыщэу <strong>$3</strong>|Резултатхэр <strong>$1 - $2</strong> мыщ щыщхэу <strong>$3</strong>}}",
        "search-nonefound": "Узлъыхъугъэм пари ехьылӀагъэ щыӀэп.",
        "powersearch-legend": "Зэхэщыгъэ лъыхъун",
        "powersearch-ns": "ЦIэчIыпIэмэ ащылъыхъу:",
        "prefs-tokenwatchlist": "Токен",
        "email-address-validity-valid": "Емэйл адресыр тэрэзым фэд",
        "email-address-validity-invalid": "Емэйл адрес тэрэз итх",
+       "userrights-lookup-user": "Нэбгырэмэ якупхэр гъэпс",
        "userrights-user-editname": "Итх уи нэбгырацӀэр:",
        "editusergroup": "Нэбгырэмэ я купмэ яIаз",
        "userrights-editusergroup": "Нэбгырэмэ я купмэ яIаз",
+       "userrights-groupsmember": "Мы купмэ ахахьэ:",
        "userrights-reason": "ЗыпкъырыкIырэр:",
+       "userrights-nodatabase": "Датэбазэу $1 щыIэп е хьанэгъунэу щытэп.",
        "userrights-changeable-col": "Купхэу узхэIэзыхьашъущтхэр",
        "userrights-unchangeable-col": "Купхэу узхэМыIэзыхьашъущтхэр",
        "group": "Куп:",
        "right-createtalk": "ТегущыIэнэ нэкIубгъохэр шIы",
        "right-createaccount": "Нэбгырэмэ я аккаунт кIэхэр шIы",
        "right-minoredit": "ЕIэзэнхэр цIыкIухэу гъэнафэх",
-       "right-move": "Ð¥Ñ\8cÑ\8bÑ\85 Ð½Ñ\8dкIÑ\83бгÑ\8aоÑ\85Ñ\8dÑ\80",
+       "right-move": "Ð\9dÑ\8dкIÑ\83бгÑ\8aомÑ\8d Ð°Ñ\86\8dÑ\85Ñ\8dÑ\80 Ñ\85Ñ\8aожÑ\8c",
        "right-move-subpages": "Хьых нэкIубгъохэмрэ кIэтнэкIубгъохэмрэ",
        "right-move-categorypages": "Хьы категорием и нэкIубгъохэр",
-       "right-movefile": "Ð¥Ñ\8cÑ\8b Ñ\84айлÑ\85Ñ\8dÑ\80",
+       "right-movefile": "ФайлÑ\8dмÑ\8d Ð°Ñ\86\8dÑ\85Ñ\8dÑ\80 Ñ\85Ñ\8aожÑ\8c",
        "right-upload": "Файлыр илъхь",
        "right-reupload": "ЩыIэ файлхэм ашъхьэтетхэн",
+       "right-upload_by_url": "URL-м файлэхэр къищых",
        "right-writeapi": "Итхэным пае API игъэфедэн",
        "right-delete": "ТегъэкI нэкIбгъохэр",
        "right-bigdelete": "ТегъэкI нэкIубгъохэр тарихъ кIахь зиIэ",
+       "right-browsearchive": "ТегъэкIыжьыгъэ нэкIубгъомэ алъыхъу",
        "right-undelete": "ТемыгъэкI нэкIубгъор",
+       "right-viewsuppressed": "ЗэкIэмэ ашIогъэбылъыгъэ версиемэ яплъ",
        "right-editcontentmodel": "НэкIубгъом и кIоцIырытым и модел зэблэхъун",
        "right-editinterface": "Нэбгырэ-интерфейсым еIэзэн",
        "right-editusercssjs": "НэмыкI нэбгырэмэ я CSS, JavaScript файлэмэ яIэзэн",
        "right-editmyusercss": "Уи CSS файлэмэ яIэзэн",
        "right-editmyuserjs": "Уи JavaScript файлэмэ яIэзэн",
        "right-viewmywatchlist": "Уи лъыплъэ купым еплъ",
+       "right-editmyoptions": "УигъэпсыкIэмэ яIаз",
+       "right-unwatchedpages": "Зылъымыплъэрэ нэкIубгъо купым еплъ",
+       "right-mergehistory": "НэкIубгъомэ ятарихъхэр зэпыдзэх",
+       "right-sendemail": "НэмыкIмэ емэйл афегъэхь",
+       "right-passwordreset": "ШъэфгущыIэм фэгъэхьыгъэ емэйлхэм яплъ",
        "newuserlogpage": "ХэлэжьакӀомэ яублэн лог",
        "action-read": "едж мы нэкIубгъом",
        "action-edit": "мы нэкIубгъом еIаз",
        "action-createaccount": "мы нэбгырэм и аккаунт ублэн",
        "action-history": "мы нэкIубгъом и тарихъым еплъын",
        "action-minoredit": "мы еIэзэныгъэр цIыкIоу гъэнаф",
-       "action-move": "хьы мы нэкӀубгъор",
+       "action-move": "мы нэкIубгъом ыцIэ хъожь",
        "action-move-subpages": "хьы мы нэкIубгъори, кIэтнэкIубгъохэри",
        "action-move-categorypages": "хьы категорием и нэкIубгъохэр",
        "action-movefile": "хьы мы файлыр",
        "recentchangeslinked-feed": "ЕхьылӀэгъэ зэхъокӀыныгъэхэр",
        "recentchangeslinked-toolbox": "ЕхьылӀэгъэ зэблэхъуныгъэхэр",
        "recentchangeslinked-title": "\"$1\"-м ехьылӀэгъэ зэхъокӀыныгъэхэр",
+       "recentchangeslinked-summary": "НэкIубгъо гъэнэфагъэ горэм зыщэрэ (е категорие гъэнэфагъэм итхэм зыщэрэ) нэкIубгъомэ яеIэзэнмэ ябэмышIэ куп.\n\n[[Special:Watchlist|Уилъыплъэ купым]] хахьэрэ нэкIубгъохэр <strong>хэунэфыкIыгъэх</strong>.",
        "recentchangeslinked-page": "НэкӀубгъом ыцӀэр:",
        "recentchangeslinked-to": "Пхэнджэу, зигугъу шIыгъэ нэкIубгъом къэзыщэрэ нэкIубгъомэ язэхъокIыныгъэхэр къэгъэлъагъу",
        "upload": "Файлыр илъхь",
        "minlength1": "ФайлэцIэр зы буквэу щытын фае мыхъуми.",
        "filename-toolong": "ФайлыцIэр байт 240 нахьыбэ хъун лъэкIыщтэп.",
        "badfilename": "ФайлыцIэр хъожьыгъэ мыщкIэ \"$1\".",
+       "filetype-missing": "Мы файлым зэхэщьыгъэ пари еIэп (\".jpg\" фэдэу).",
        "empty-file": "Ебгъэхьыгъэ файлыр нэкIы.",
        "file-too-large": "Ебгъэхьыгъэ файлыр иныщэ.",
        "filename-tooshort": "ФайлыцIэр кIэкуащэ.",
        "sourcefilename": "Лъэпсэ файлым ыцI:",
        "sourceurl": "Лъэпсэ URL:",
        "destfilename": "ЗдакIорэ файлым цыI:",
+       "upload-maxfilesize": "Файлым иинагъэ максимум: $1",
        "upload-description": "Файлым и къэбар",
        "upload-options": "Илъхьан гъэпсыкIэхэр",
        "watchthisupload": "Мы файлым лъыплъ",
        "license-nopreview": "(Ыпэтеплъэр гъэпсыгъэп)",
        "upload_source_file": "(къыхэпхыгъэ файлыр уи компьютер щыщ)",
        "listfiles-delete": "ТегъэкI",
+       "listfiles_search_for": "ФайлыцIэмкIэ лыхъу:",
        "imgfile": "файл",
        "file-anchor-link": "Файл",
        "filehist": "Файл тарихъ",
        "nolinkstoimage": "Мыщ къэзыщэу нэкӀубгъо пари щыӀэп.",
        "sharedupload-desc-here": "Мы файлыр мыщ къикIыгъ $1 ыкIи нэмыкI проектхэм ащыгъэфедэн лъэкIыщт.\nИнформациеу [$2 файлым и гурыIон-тхыгъэм] щыщыр ычIэгъкIэ щыт.",
        "upload-disallowed-here": "Мы файлым ухэӀэзахьыжьын уфитэп.",
+       "mimesearch": "MIME лъыхъун",
+       "mimetype": "MIME-тип",
+       "unwatchedpages": "Пари лымыплъэрэ нэкIубгъохэр",
+       "unusedtemplateswlh": "нэмыкI зэпыщэхэр",
        "randompage": "ОшӀэдэмышӀэ нэкӀубгъу",
+       "randomincategory-category": "Категорие:",
+       "randomincategory-legend": "Категорием щыщэу ошIэдэмышIэ нэкIубгъу",
+       "randomincategory-submit": "КӀо",
+       "statistics": "Статистикэ",
+       "statistics-header-pages": "Нэк1убгъо статистикэ",
+       "statistics-header-edits": "ЕIэзэнхэм ястатистикэ",
+       "statistics-header-users": "Нэбгырэмэ ястатистикэ",
+       "statistics-header-hooks": "НэмыкI статистикэ",
+       "statistics-pages": "НэкӀубгъохэр",
        "statistics-files": "Илъхьэгъэ файлэхэр",
+       "pageswithprop-submit": "КӀо",
+       "brokenredirects-edit": "еӀаз",
+       "brokenredirects-delete": "тегъэкI",
+       "withoutinterwiki": "Бзэ зэпыщэ зимыIэ нэкIубгъохэр",
+       "withoutinterwiki-summary": "Мы нэкIубгъомэ нэмыкI бзэ версиехэм ащэрэп.",
+       "withoutinterwiki-submit": "Къэгъэлъагъу",
        "nbytes": "$1{{PLURAL:$1|байт|байтхэр}}",
        "nmembers": "$1 {{PLURAL:$1|объект|объектхэр}}",
+       "uncategorizedcategories": "Категорие мыхьыгъэ категориехэр",
+       "uncategorizedimages": "Категорие мыхьыгъэ файлхэр",
+       "uncategorizedtemplates": "Категорие мыхьыгъэ шапхъэхэр",
+       "unusedcategories": "Мыгъэсэбэпыгъэ категориехэр",
+       "unusedimages": "Мыгъэсэбэпыгъэ файлхэр",
+       "wantedcategories": "ИщыкIэгъэ категориехэр",
+       "wantedpages": "ИщыкIэгъэ нэкIубгъохэр",
+       "wantedfiles": "ИщыкIэгъэ файлхэр",
+       "wantedtemplates": "ИщыкIэгъэ шапхъэхэр",
+       "mostlinked": "Нахьыбэу зыдащэрэ нэкIубгъохэр",
+       "mostlinkedcategories": "Нахьыбэу зыдащэрэ категориехэр",
+       "mostcategories": "Категорие нахьыбэ зиIэ нэкIубгъохэр",
+       "mostimages": "Нахьыбэу зыдащэрэ файлхэр",
+       "shortpages": "НэкIубгъо кIакIохэр",
+       "longpages": "НэкIубгъо кIахьхэр",
+       "protectedpages-page": "НэкӀубгъо",
+       "protectedpages-reason": "ЗыпкъырыкIырэр",
+       "protectedpages-unknown-timestamp": "ЗэхэмышIыкIыгъэ",
        "newpages": "НэкӀубгъуакӀэхэр",
+       "newpages-username": "НэбгырацIэ:",
+       "ancientpages": "Жъыдэдэ нэкIубгъохэр",
        "move": "Хьы",
+       "movethispage": "ЫцIэ зэблэхъу мы нэкIубгъом",
        "pager-older-n": "{{PLURAL:$1|нахьыжъэу 1|нахьыжъхэу $1}}",
        "booksources": "Тхылъхэр къыздикӀыгъэхэр",
        "booksources-search-legend": "Тхылъ лъапсэхэм алъыхъу",
        "booksources-search": "Лъыхъу",
        "log": "Логхэр",
+       "log-title-wildcard": "Мы символхэмкIэ къежьэрэ нэкIубгъуацIэмэ алъыхъу",
        "allpages": "НэкIубгъо пстэур",
+       "nextpage": "КIэлъыкIорэ нэкIубгъор ($1)",
        "prevpage": "Ыпэит нэкубгъор ($1)",
        "allarticles": "НэкӀубгъо пстэур",
+       "allinnamespace": "НэкIубгъо пстэур ($1 цIэчIыпIэр)",
        "allpagessubmit": "KӀо",
+       "cachedspecial-refresh-now": "Ыуждэдэм еплъын.",
        "categories": "Категориехэр",
+       "special-categories-sort-count": "гъэзаф пчъагъэкIэ",
+       "special-categories-sort-abc": "гъэзаф алфыбэкIэ",
+       "sp-deletedcontributions-contribs": "лэжьыгъэ",
+       "linksearch-pat": "Лъыхъун шапхъ:",
+       "linksearch-ns": "ЦӀэчӀыпӀ:",
+       "linksearch-ok": "Лъыхъу",
+       "listusers-submit": "Къэгъэлъагъу",
+       "listusers-noresult": "Нэбгырэ пари гъотыгъэп.",
+       "activeusers-hidebots": "Ботхэр гъэбылъ",
+       "activeusers-hidesysops": "Администраторхэр гъэбылъ",
+       "activeusers-noresult": "Нэбгырэ пари гъотыгъэп.",
+       "listgrouprights": "Нэбгырэмэ якупмэ яфитыныгъэхэр",
+       "listgrouprights-group": "Куп",
+       "listgrouprights-rights": "Фитыныгъэхэр",
+       "listgrouprights-helppage": "Help:Купхэм яфитыныгъэхэр",
+       "listgrouprights-members": "(хэлэжьэкIо пстэур)",
+       "listgrouprights-addgroup-all": "Куп пстэум хэгъахъу",
+       "listgrouprights-removegroup-all": "Куп пстэур тегъэкI",
+       "listgrouprights-namespaceprotection-namespace": "ЦӀэчӀыпӀ",
+       "trackingcategories": "Лъыплъэрэ категориехэр",
+       "trackingcategories-msg": "Лъыплъэрэ категорие",
+       "trackingcategories-name": "Мессаджым ыцIэ",
+       "mailnologin": "Гъахьыным пае адрес щыIэп",
+       "emailuser": "Нэбгырэм емэйл фегъэхь",
+       "emailuser-title-notarget": "Нэбгырэм емэйл фегъэхьын",
+       "noemailtitle": "Емэйл адресыр щыIэп",
+       "emailusername": "НэбгырацIэ:",
+       "emailusernamesubmit": "Егъэхь",
+       "emailmessage": "Мессадж:",
+       "emailsend": "Егъэхь",
+       "emailccme": "Симессаджым икопие къысфегъэхь.",
+       "emailsent": "Емэйлыр гъахьыгъэ",
+       "emailsenttext": "Уиемэйлыр моу джы гъахьыгъэ.",
+       "usermessage-summary": "Системэ мессадж къэгъан.",
+       "watchlist": "Лъыплъэ куп",
        "mywatchlist": "Лъыплъэ куп",
+       "watchlistfor2": "$1 $2 пае",
+       "watchnologin": "Системэм хэхьагъэп",
+       "addwatch": "Лъыплъэ купым хэгъахъу",
+       "removewatch": "Лъыплъэ купым хэгъэкI",
+       "removedwatchtext-short": "НэкIубгъоу \"$1\" лъыплъэ купым хэгъэкIыгъэ.",
        "watch": "Лъыплъ",
+       "watchthispage": "Мы нэкӀубгъом лъыплъ",
        "unwatch": "Лъымыплъэжь",
+       "unwatchthispage": "Лъыплъэныр щыгъэт",
        "watching": "Лъыплъ...",
        "unwatching": "Лъымплъэжь...",
-       "enotif_impersonal_salutation": "{{SITENAME}} хэлэжьакIо",
+       "enotif_impersonal_salutation": "{{SITENAME}} инэбгырэ",
        "enotif_anon_editor": "ТымышӀэрэ нэбгыр $1",
        "created": "къагъэхъуыгъ",
        "changed": "зэблэхъугъэ",
-       "deletepage": "ТегъэкI нэкIбгъор",
+       "deletepage": "ТегъэкI нэкIубгъор",
        "confirm": "Теубыт",
        "excontent": "дэтхэгъагъэр: \"$1\"",
        "excontentauthor": "дэтхэгъагъэр: \"$1\" (хэлэжьэкIо закъоэр \"[[Special:Contributions/$2|$2]]\")",
        "undelete-show-file-submit": "Ары",
        "namespace": "ЦӀэчӀыпӀ:",
        "invert": "Зэшъхьатегъэуцу хэгъэщыгъэр",
+       "tooltip-invert": "Мы плIэмыер гъэнаф, хэхыгъэ цIэчIыпIэм щыщ нэкIубгъомэ яеIэзэнхэр бгъэбылъынэу (ыкIи ехьылIэгъэ цIэчIыпIэр, гъэнэфагъэмэ)",
        "namespace_association": "ЕхьылӀэгъэ цӀэчӀыпӀэр",
+       "tooltip-namespace_association": "Мы плIэмыер гъэнаф, хэхыгъэ цIэчIыпIэм ехьылIэгъэ тегущыIэн-нэкIубгъор е субъект цIэчIыпIэр пыбгъэхъонэу уфаемэ.",
        "blanknamespace": "(ШъхьаӀ)",
        "contributions": "{{GENDER:$1|ХэлэжьакIом}} и лэжьыгъэ Iахь",
        "contributions-title": "$1 нэбгырэм и лэжьыгъэ",
        "sp-contributions-newbies": "Аккаунт кШэ закъомэ я лэжьыгъэр къэгъэлъагъу",
        "sp-contributions-newbies-sub": "Аккаунт кIэмэ апай",
        "sp-contributions-logs": "Логхэр",
-       "sp-contributions-talk": "гущыIэ",
+       "sp-contributions-talk": "тегущыI",
        "sp-contributions-username": "IP-адрес е нэбгырацIэ:",
        "sp-contributions-submit": "Лъыхъу",
        "whatlinkshere": "Мы нэкӀубгъом къэзыщэрэ зэпыщэхэр",
        "whatlinkshere-hideredirs": "$1 гъэкӀожьын",
        "whatlinkshere-hidelinks": "$1 зэпыщ",
        "whatlinkshere-filters": "Филтрэхэр",
+       "ipaddressorusername": "IP-адрес е нэбгырацIэ:",
+       "ipbreason": "ЗыпкъырыкIырэр:",
+       "ipbemailban": "Нэбгырэм емэйл ымыгъэхьышъунэу шIы",
        "ipboptions": "сыхьатитIу:2 hours, зымаф:1 day,мэфищ:3 days, зытхьамаф:1 week, тхьамафитӀу:2 weeks, зымаз:1 month, мэзищ:3 months, мэзих:6 months, зыилъэс:1 year, ренэу:infinite",
+       "badipaddress": "IP адрес фыкъуагъэ",
+       "blocklist-reason": "ЗыпкъырыкIырэр",
+       "ipblocklist-submit": "Лъыхъу",
+       "ipblocklist-empty": "Блок купыр нэкIы.",
        "blocklink": "егъэт",
        "unblocklink": "Ӏухъотещ",
        "change-blocklink": "Ӏухъор зэблэхъу",
        "movelogpage": "Кощхэм я лог",
        "revertmove": "зэкIэгъэкIон",
        "export": "НэкӀубгъохэр къыхэщын",
+       "export-addcattext": "Хэгъахъу нэкIубгъохэр категорием щыщэу:",
+       "export-addcat": "Хэгъахъу",
+       "export-addnstext": "Хэгъахъу нэкIубгъохэр цIэчIыпIэм щыщэу:",
+       "export-addns": "Хэгъахъу",
+       "allmessages": "Системэ мессаджхэр",
        "allmessagesname": "ЦIэ",
+       "allmessagescurrent": "Джырэ мессаджым итекст",
+       "allmessages-filter-legend": "Филтр",
+       "allmessages-filter-unmodified": "ЗэмыхъакIыгъэ",
+       "allmessages-filter-all": "ЗэкIэ",
+       "allmessages-filter-modified": "ЗэхъокIыгъэ",
+       "allmessages-language": "Бзэ:",
+       "allmessages-filter-submit": "КӀо",
+       "allmessages-filter-translate": "ЗэдзэкI",
        "thumbnail-more": "Джадэ къэшӀ",
+       "filemissing": "Файлыр щэкIэ",
+       "thumbnail_error_remote": "Къончагъэм имессадж, зиер $1: $2",
+       "import-interwiki-sourcewiki": "Лъапсэм и вики:",
+       "import-interwiki-sourcepage": "Лъапсэ нэкIубгъор:",
        "import-interwiki-submit": "Къих",
        "import-mapping-namespace": "Къихи цIэчIыпIэм къилъхь:",
+       "import-upload-filename": "ФайлыцIэ:",
+       "import-comment": "ПыIухьажь:",
        "tooltip-pt-userpage": "Ситхьапэ",
        "tooltip-pt-mytalk": "Уи гущыӀэ нэкӀубгъу",
        "tooltip-pt-preferences": "Сызыфаехэр",
        "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": "Мэхьанэ зимыIэ хэIэзэныгъэу къэгъэлъагъу",
        "tooltip-undo": "«КӀэгъэкӀожьын»-ым мы зэхъокӀыныгъэр зэкӀегъэкӀожьы ыкӀи еӀэзэкӀо формэр утеплъэшъунэу къызэӀуехы. ЗыфызэкӀэбгъэкӀожьыгъэри пыптхэжьышъущт.",
        "tooltip-summary": "Къэбар тӀэкӀу горэ итх",
        "simpleantispam-label": "Спам-ебэнрэ уплъэкӀун.\nМыщ зи хаптхэ <strong>хъущтэп</strong>!",
+       "pageinfo-language": "НэкIубгъом ыбз",
        "pageinfo-toolboxlink": "НэкӀубгъом и информацие",
        "previousdiff": "← ЫпэкъэкӀорэ еӀэзэн",
        "nextdiff": "Нахь еӀэзэныгъакӀ →",
        "show-big-image-preview": "Мыщ и ыпэтеплъэм иинагъэр: $1.",
        "show-big-image-other": "НэпэмыкI {{PLURAL:$2|зэхэщыкIэ|зэхэщыкIэхэр}}: $1.",
        "show-big-image-size": "Пиксел $1 × $2",
+       "ilsubmit": "Лъыхъу",
        "bad_image_list": "Форматыр зэрщытыр:\n\nГулытэ зиӀэныр тхылъым и тамыгъэхэм (сатыр тамыгъэ * къежьэхэр).\nСатырым и техьэпӀэ япэрем сурэт иплъхьэ мыхъуным и техьэпӀэ иӀэн фай.\nЯужы ит техьэпӀэхэр хэгъэкӀа фэдэу къилъытэну, сурэтыр здиплъэ хъуну тхыгъэхэр.",
        "metadata": "Метадатэр",
+       "metadata-help": "Мы файлым нэмыкI информацие илъ, диджитал камерэм сканнерым къикIыгъэу, шIыным е и диджитацие пае.\nМы файлыр иублэ щытыкIэ елъытыгъэу еIэзагъэхэмэ, детал горэхэр щыкIэщтхэнкIи мэхъу.",
+       "metadata-fields": "Сурэтым иметадатэ ишъофхэр мы мессаджым къыщыгъэлъэгъуагъэхэр сурэтым инэкIубгъо щыIэщтых, метадатэм инэкIубгъо щыхьагъэу щытэу.\nАдрэхэр гъэбылъыгъэу щытыщтых.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-orientation": "Кадрым и ориентацие",
        "exif-xresolution": "Шъомбгъуагъ зэхэщыкIэ",
        "exif-yresolution": "Iатыгъагъ зэхэщыкIэ",
        "exif-colorspace": "Теплъэшъо чӀыпӀэ",
        "exif-datetimeoriginal": "Датэм и къежьэпӀэ мафэрэ уахътэрэ",
        "exif-datetimedigitized": "ЦифрэшӀыным и мафэрэ, и уахътэрэ",
+       "exif-languagecode": "Бзэ",
        "exif-orientation-1": "Тэрэз",
        "namespacesall": "зэкӀэ",
        "monthsall": "зэкӀэ",
+       "fileduplicatesearch-submit": "Лъыхъу",
        "specialpages": "ЯӀамышӀыкӀ нэкӀубгъохэр",
+       "specialpages-group-login": "Къыхахь / аккаунт къэубл",
        "tag-filter": "[[Special:Tags|Tag]] филтрэр:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Гъэнэфалъ|Гъэнэфалъэхэр}}]]: $2)",
        "logentry-delete-delete": "$3 нэкӀубгъор $1 {{GENDER:$2|Ӏыгъ}}",
        "logentry-move-move": "$1 {{GENDER:$2|ыгъэкощыгъэ}} нэкIубгъоу $3-р $4-м",
        "logentry-newusers-create": "ХэлэжьэкIо аккаунтэу $1 {{GENDER:$2|ублагъэ}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|къырищыгъ}} $3",
+       "feedback-message": "Мессадж:",
        "searchsuggest-search": "Лъыхъу",
-       "api-error-badtoken": "ЫкIоцI фыкъуагъэ: Токен дэй."
+       "api-error-badtoken": "ЫкIоцI фыкъуагъэ: Токен дэй.",
+       "api-error-empty-file": "Ебгъэхьыгъэ файлыр нэкIы.",
+       "expand_templates_input": "Ихьэрэ текст:",
+       "expand_templates_output": "Резултат",
+       "expand_templates_xml_output": "XML къикIырэр",
+       "expand_templates_ok": "Хъун",
+       "expand_templates_remove_comments": "ТегъэкI комментхэр",
+       "expand_templates_preview": "Ыпэтеплъ",
+       "pagelanguage": "НэкIубгъом ыбзэ къыхэх",
+       "pagelang-name": "НэкӀубгъо",
+       "pagelang-language": "Бзэ",
+       "pagelang-select-lang": "Бзэр къыхэх",
+       "right-pagelang": "НэкIубгъом ыбзэр зэблэхъу",
+       "action-pagelang": "мы нэкIубгъом ыбзэ зэблэхъу",
+       "log-name-pagelang": "Бзэ зэблэхъунхэм я журнал",
+       "mediastatistics-table-mimetype": "MIME-тип",
+       "mediastatistics-table-count": "Файл пчъагъэр",
+       "mediastatistics-table-totalbytes": "Пстэум ионтэгъугъэ",
+       "mediastatistics-header-unknown": "ЗэхэмышIыкIыгъэ",
+       "mediastatistics-header-drawing": "Сурэтхэр (вектор сурэтхэр)",
+       "mediastatistics-header-audio": "Мэкъамэ",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-multimedia": "Мултимедиэ",
+       "mediastatistics-header-office": "Офис",
+       "mediastatistics-header-text": "Текстхэр",
+       "mediastatistics-header-archive": "Фызыгъэ форматхэр",
+       "json-error-state-mismatch": "Мыхъун е фыкъуэгъэ JSON",
+       "json-error-syntax": "Синтакс къончагъэ",
+       "headline-anchor-title": "Мы секцием къэзыщэрэ зэпыщ",
+       "special-characters-group-latin": "Латин",
+       "special-characters-group-latinextended": "Латин зэхэщыгъэ",
+       "special-characters-group-ipa": "ДФА",
+       "special-characters-group-symbols": "Символхэр",
+       "special-characters-group-greek": "Урым",
+       "special-characters-group-cyrillic": "Кирилл",
+       "special-characters-group-arabic": "Арап",
+       "special-characters-group-arabicextended": "Арап зэхэщыгъэ",
+       "special-characters-group-persian": "Перс",
+       "special-characters-group-hebrew": "Джурт",
+       "special-characters-group-bangla": "Бенгал",
+       "special-characters-group-tamil": "Тамил",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингал",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "Кхмер",
+       "special-characters-title-endash": "ыку-тире",
+       "special-characters-title-emdash": "тире кIахь",
+       "special-characters-title-minus": "минус символ",
+       "mw-widgets-dateinput-no-date": "Мафэр гъэнэфагъэп",
+       "mw-widgets-titleinput-description-new-page": "нэкIубгъор джыри щыIэп",
+       "mw-widgets-titleinput-description-redirect": "гъакIо мыкIэ $1"
 }
index 7a6bc77..e9e2f89 100644 (file)
        "navigation-heading": "Navigasie-keuseskerm",
        "errorpagetitle": "Fout",
        "returnto": "Keer terug na $1.",
-       "tagline": "in {{SITENAME}}",
+       "tagline": "Vanaf {{SITENAME}}",
        "help": "Hulp",
        "search": "Soek",
        "searchbutton": "Soek",
        "go": "Wys",
        "searcharticle": "Wys",
-       "history": "Ouer weergawes",
+       "history": "Bladsygeskiedenis",
        "history_short": "Geskiedenis",
        "updatedmarker": "opgedateer sedert my laaste besoek",
        "printableversion": "Drukbare weergawe",
        "aboutsite": "Inligting oor {{SITENAME}}",
        "aboutpage": "Project:Omtrent",
        "copyright": "Inhoud is onderhewig aan $1, tensy anders vermeld",
-       "copyrightpage": "{{ns:project}}:kopiereg",
+       "copyrightpage": "{{ns:project}}:Kopieregte",
        "currentevents": "Huidige gebeure",
        "currentevents-url": "Project:Huidige gebeure",
        "disclaimers": "Voorbehoud",
        "feed-invalid": "Voertipe word nie ondersteun nie.",
        "feed-unavailable": "Sindikasievoer is nie beskikbaar",
        "site-rss-feed": "$1 RSS-voer",
-       "site-atom-feed": "$1 Atom-voer",
+       "site-atom-feed": "$1 Atoomvoer",
        "page-rss-feed": "\"$1\" RSS-voer",
-       "page-atom-feed": "\"$1\" Atom-voer",
+       "page-atom-feed": "\"$1\" Atoomvoer",
        "red-link-title": "$1 (bladsy bestaan nie)",
        "sort-descending": "Sorteer aflopend",
        "sort-ascending": "Sorteer oplopend",
        "changeemail-password": "U wagwoord vir {{SITENAME}}:",
        "changeemail-submit": "Wysig E-posadres",
        "resettokens-token-label": "$1 (huidige waarde: $2)",
-       "bold_sample": "Vetgedrukte teks",
+       "bold_sample": "Vetdruk",
        "bold_tip": "Vetdruk",
        "italic_sample": "Skuinsgedrukte teks",
        "italic_tip": "Skuinsdruk",
        "nowiki_sample": "Plaas ongeformatteerde teks hier",
        "nowiki_tip": "Ignoreer wiki-formattering",
        "image_sample": "Voorbeeld.jpg",
-       "image_tip": "Beeld/prentjie/diagram",
+       "image_tip": "Medialêer",
        "media_sample": "Voorbeeld.ogg",
-       "media_tip": "Skakel na ander tipe medialêer",
+       "media_tip": "Lêerskakel",
        "sig_tip": "Handtekening met datum",
        "hr_tip": "Horisontale streep (selde nodig)",
        "summary": "Opsomming:",
        "viewpagelogs": "Bekyk logboeke vir hierdie bladsy",
        "nohistory": "Daar is geen wysigingsgeskiedenis vir hierdie bladsy nie.",
        "currentrev": "Huidige wysiging",
-       "currentrev-asof": "Huidige wysiging per $1",
+       "currentrev-asof": "Huidige wysiging sedert $1",
        "revisionasof": "Wysiging soos op $1",
-       "revision-info": "Weergawe deur {{GENDER:$6|$2}} op $4 om $5$7",
+       "revision-info": "Weergawe deur {{GENDER:$6|$2}} op $1$7",
        "previousrevision": "← Ouer weergawe",
        "nextrevision": "Nuwer weergawe →",
        "currentrevisionlink": "Huidige weergawe",
        "mergelog": "Versmeltingslogboek",
        "revertmerge": "Samesmelting ongedaan maak",
        "mergelogpagetext": "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
-       "history-title": "$1: weergawegeskiedenis",
-       "difference-title": "$1: verskil tussen weergawes",
+       "history-title": "Weergawegeskiedenis van \"$1\"",
+       "difference-title": "Verskil tussen weergawes van \"$1\"",
        "difference-title-multipage": "$1 en $2: verskil tussen bladsye",
        "difference-multipage": "(Verskil tussen bladsye)",
        "lineno": "Lyn $1:",
        "showhideselectedversions": "Wys/versteek gekose weergawes",
        "editundo": "maak ongedaan",
        "diff-empty": "(Geen verskil)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur dieselfde gebruiker nie gewys nie)",
        "diff-multi-manyusers": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur meer as $2 {{PLURAL:$2|gebruiker|gebruikers}} nie gewys nie)",
        "difference-missing-revision": "{{PLURAL:$2|'n Weergawe|$2 weergawes}} van die verskil ($1) {{PLURAL:$2|is|is}} nie gevind nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
        "searchresults": "Soekresultate",
        "next-page": "volgende bladsy",
        "prevn-title": "Vorige {{PLURAL:$1|resultaat|$1 resultate}}",
        "nextn-title": "Volgende {{PLURAL:$1|resultaat|$1 resultate}}",
-       "shown-title": "$1 {{PLURAL:$1|resultaat|resultate}} per bladsy",
+       "shown-title": "Wys $1 {{PLURAL:$1|resultaat|resultate}} per bladsy",
        "viewprevnext": "Wys ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Daar is reeds 'n bladsy genaamd \"[[:$1]]\" op die wiki'''",
        "searchmenu-new": "<strong>Skep die bladsy \"[[:$1]]\" op hierdie wiki</strong> {{PLURAL:$2|0=|Sien ook die bladsy wat in u soektog gevind is.|Sien ook die soekresultate wat gevind is.}}",
        "searchall": "alle",
        "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
        "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultate <strong>$1 - $2</strong> van <strong>$3</strong>}}",
-       "search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
+       "search-nonefound": "Daar is geen resultate vir die navraag nie.",
        "powersearch-legend": "Gevorderde soektog",
        "powersearch-ns": "Soek in naamruimtes:",
        "powersearch-togglelabel": "Kies:",
        "recentchanges-feed-description": "Hierdie voer laat u toe om die mees onlangse wysigings aan die wiki te volg.",
        "recentchanges-label-newpage": "Met die wysiging is 'n nuwe bladsy geskep.",
        "recentchanges-label-minor": "Hierdie is 'n klein wysiging",
-       "recentchanges-label-bot": "Hierdie wysiging is deur 'n bot uitgevoer",
+       "recentchanges-label-bot": "Hierdie wysiging is deur 'n bot gemaak",
        "recentchanges-label-unpatrolled": "Die wysiging is nog nie gekontroleer nie",
        "recentchanges-label-plusminus": "Bladsy is met die aantal grepe gewysig",
        "recentchanges-legend-heading": "'''Sleutel:'''",
        "imagelinks": "Lêergebruik",
        "linkstoimage": "Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} gebruik hierdie prent:",
        "linkstoimage-more": "Daar is meer as $1 {{PLURAL:$1|skakel|skakels}} na hierdie lêer.\nDie volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na die lêer verwys.\n'n [[Special:WhatLinksHere/$2|Volledige lys]] is ook beskikbaar.",
-       "nolinkstoimage": "Daar is geen bladsye wat hierdie prent gebruik nie.",
+       "nolinkstoimage": "Daar is geen bladsye wat skakel na hierdie lêer nie.",
        "morelinkstoimage": "Wys [[Special:WhatLinksHere/$1|meer skakels]] na die lêer.",
        "linkstoimage-redirect": "$1 (lêeraanstuur) $2",
        "duplicatesoffile": "Die volgende {{PLURAL:$1|lêer is 'n duplikaat|$1 lêers is duplikate}} van die lêer ([[Special:FileDuplicateSearch/$2|meer details]]):",
        "emailuser": "Stuur e-pos na hierdie gebruiker",
        "emailuser-title-target": "E-pos die {{GENDER:$1|gebruiker}}",
        "emailuser-title-notarget": "E-pos gebruiker",
-       "emailpage": "Stuur e-pos na gebruiker",
        "emailpagetext": "As {{GENDER:$1|dié gebruiker}} 'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm 'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verskyn as die \"Van\"-adres van die pos. Dus sal die ontvanger kan terug antwoord.",
        "defemailsubject": "E-pos van {{SITENAME}}-gebruiker \"$1\"",
        "usermaildisabled": "E-pos deur gebruikers is gedeaktiveer.",
        "delete-toobig": "Die bladsy het 'n lang wysigingsgeskiedenis, meer as $1 {{PLURAL:$1|weergawe|weergawes}}.\nVerwydering van die soort blaaie is beperk om ontwrigting van {{SITENAME}} te voorkom.",
        "delete-warning-toobig": "Hierdie bladsy het 'n lang wysigingsgeskiedenis; meer as $1 {{PLURAL:$1|wysiging|wysigings}}.\nDeur weg te doen met hierdie bladsy mag dalk die werking van {{SITENAME}} versteur;\nTree asseblief versigtig op.",
        "rollback": "Rol veranderinge terug",
-       "rollbacklink": "Rol terug",
+       "rollbacklink": "rol terug",
        "rollbacklinkcount": "rol {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
        "rollbacklinkcount-morethan": "rol meer as {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
        "rollbackfailed": "Terugrol onsuksesvol",
        "rollback-success": "Wysigings deur $1 is teruggerol.\nDie laaste weergawe van $2 is teruggeplaas.",
        "sessionfailure-title": "Sessie het gefaal",
        "sessionfailure": "Dit lyk of daar 'n probleem met u sessie is.\nHierdie aksie is gekanselleer omdat dit 'n veiligheidsrisiko is (moontlike kaping van u sessie).\nGaan een bladsy terug, herlaai die bladsy en probeer dan weer.",
-       "protectlogpage": "Beskermlogboek",
+       "protectlogpage": "Beskermingboekstaaf",
        "protectlogtext": "Hieronder is 'n lys van veranderinge wat aan die beveilig van bladsye aangebring is.\nSien die [[Special:ProtectedPages|lys van beveiligde bladsye]] vir alle bladsye wat tans operasioneel beveilig is.",
        "protectedarticle": "het [[$1]] beskerm",
        "modifiedarticleprotection": "Die beskermingsvlak vir \"[[$1]]\" is gewysig",
        "tooltip-pt-watchlist": "Die lys bladsye wat u vir veranderinge dophou",
        "tooltip-pt-mycontris": "Lys van my bydraes",
        "tooltip-pt-login": "U word aangemoedig om aan te meld. Dit is egter nie verpligtend nie.",
-       "tooltip-pt-logout": "Teken uit",
+       "tooltip-pt-logout": "Meld af",
        "tooltip-pt-createaccount": "U word aangemoedig om 'n gebruiker te skep en aan te meld, hoewel dit nie verpligtend is nie.",
        "tooltip-ca-talk": "Bespreking oor die inhoudbladsy",
-       "tooltip-ca-edit": "U kan hierdie bladsy wysig. Gebruik asseblief die voorskoufunksie vóór u dit stoor.",
+       "tooltip-ca-edit": "Wysig hierdie bladsy",
        "tooltip-ca-addsection": "Begin 'n nuwe bespreking",
        "tooltip-ca-viewsource": "Hierdie bladsy is beskerm. U kan die bronteks besigtig.",
        "tooltip-ca-history": "Ouer weergawes van hierdie bladsy",
        "tooltip-n-mainpage": "Besoek die Tuisblad",
        "tooltip-n-mainpage-description": "Gaan na die tuisblad",
        "tooltip-n-portal": "Meer oor die projek, wat jy kan doen, nuttige skakels",
-       "tooltip-n-currentevents": "'n Plek waar almal gesellig kan verkeer",
+       "tooltip-n-currentevents": "Agtergrondinligting oor aktuele sake",
        "tooltip-n-recentchanges": "'n Lys van onlangse wysigings",
        "tooltip-n-randompage": "Laai 'n lukrake bladsye",
        "tooltip-n-help": "Vind meer uit oor iets",
        "tooltip-t-whatlinkshere": "'n Lys bladsye wat hierheen skakel",
        "tooltip-t-recentchangeslinked": "Onlangse wysigings aan bladsye wat vanaf hierdie bladsy geskakel is",
        "tooltip-feed-rss": "RSS-voed vir hierdie bladsy",
-       "tooltip-feed-atom": "Atom-voed vir hierdie bladsy",
+       "tooltip-feed-atom": "Atoomvoer vir hierdie bladsy",
        "tooltip-t-contributions": "Bekyk 'n lys van bydraes deur hierdie gebruiker",
        "tooltip-t-emailuser": "Stuur 'n e-pos aan hierdie gebruiker",
-       "tooltip-t-upload": "Laai beelde of ander medialêers op",
+       "tooltip-t-upload": "Laai lêers op",
        "tooltip-t-specialpages": "'n Lys van al die spesiale bladsye",
        "tooltip-t-print": "Drukbare weergawe van hierdie bladsy",
        "tooltip-t-permalink": "'n Permanente skakel na hierdie weergawe van die bladsy",
        "tooltip-ca-nstab-media": "Bekyk die mediabladsy",
        "tooltip-ca-nstab-special": "Hierdie is 'n spesiale bladsy; u kan dit nie wysig nie",
        "tooltip-ca-nstab-project": "Bekyk die projekbladsy",
-       "tooltip-ca-nstab-image": "Bekyk die lrbladsy",
+       "tooltip-ca-nstab-image": "Bekyk die lêerbladsy",
        "tooltip-ca-nstab-mediawiki": "Bekyk die stelselboodskap",
        "tooltip-ca-nstab-template": "Bekyk die sjabloon",
        "tooltip-ca-nstab-help": "Bekyk die hulpbladsy",
        "tooltip-watchlistedit-raw-submit": "Opdateer dophoulys",
        "tooltip-recreate": "Herskep hierdie bladsy al is dit voorheen geskrap",
        "tooltip-upload": "Begin oplaai",
-       "tooltip-rollback": "Rol met een kliek die laaste gebruiker se wysiging(s) van aan hierdie bladsy terug.",
-       "tooltip-undo": "Met \"ongedaan maak\" maak u hierdie wysiging ongedaan en land u in die wysigingsvenster.\nU kan daar 'n wysigingsopsomming byvoeg.",
+       "tooltip-rollback": "Rol met een kliek die laaste gebruiker se wysiging(s) aan hierdie bladsy terug.",
+       "tooltip-undo": "\"Maak ongedaan\" keer die wysiging om wys die wysigingsbladsy met 'n voorskou. U kan daar 'n wysigingsopsomming byvoeg.",
        "tooltip-preferences-save": "Stoor voorkeure",
        "tooltip-summary": "Verskaf 'n kort opsomming",
        "interlanguage-link-title": "$1 – $2",
        "spam_reverting": "Besig met terugrol na die laaste weergawe wat nie skakels na $1 bevat nie",
        "spam_blanking": "Alle weergawes met 'n skakel na $1 word verwyder",
        "spam_deleting": "Alle weergawes bevat verwysings na $1. Bladsy verwyder",
-       "simpleantispam-label": "Antispam-kontrole.\n<strong>Moenie</strong> die veld invul nie!",
+       "simpleantispam-label": "<strong>Moenie</strong> die veld invul nie!",
        "pageinfo-title": "Inligting oor \"$1\"",
        "pageinfo-not-current": "Hierdie gegewens is slegs vir die huidige weergawe beskikbaar.",
        "pageinfo-header-basic": "Basiese inligting",
        "yesterday-at": "Gister om $1",
        "bad_image_list": "Die formaat is as volg:\n\nSlegs lys-items (lyne wat met * begin) word verwerk.\nDie eerste skakel op 'n lyn moet na 'n ongewenste lêer skakel.\nEnige opeenvolgende skakels op dieselfde lyn word as uitsonderings beskou, bv. blaaie waar die lêer inlyn kan voorkom.",
        "metadata": "Metadata",
-       "metadata-help": "Die lêer bevat aanvullende inligting wat moontlik deur 'n digitale kamera of skandeerder bygevoeg is.\nAs die lêer verander is, mag sekere inligting nie meer ooreenkom met die van die gewysigde lêer nie.",
+       "metadata-help": "Die lêer bevat aanvullende inligting wat moontlik deur 'n digitale kamera of skandeerder bygevoeg is.\nAs die lêer verander is, sal sekere inligting dalk nie meer ooreenkom met dié van die gewysigde lêer nie.",
        "metadata-expand": "Wys uitgebreide gegewens",
        "metadata-collapse": "Versteek uitgebreide gegewens",
        "metadata-fields": "Die velde in die boodskap word ook gewys op 'n beeldbladsy as die metadatatabel toegevou is.\nAnder velde sal versteek wees.\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-referenceblackwhite": "Paar swart en wit verwysingswaardes",
        "exif-datetime": "Tydstip laaste lêerwysiging",
        "exif-imagedescription": "Beeldtitel",
-       "exif-make": "Kamera vervaardiger:",
-       "exif-model": "Kamera model",
+       "exif-make": "Kameravervaardiger:",
+       "exif-model": "Kameramodel",
        "exif-software": "Sagteware gebruik",
        "exif-artist": "Outeur",
        "exif-copyright": "Kopiereghouer",
-       "exif-exifversion": "Exif weergawe",
+       "exif-exifversion": "Exif-weergawe",
        "exif-flashpixversion": "Ondersteunde Flashpix-weergawe",
        "exif-colorspace": "Kleurruimte",
        "exif-componentsconfiguration": "Betekenis van elke komponent",
index 1bf03a3..f5b8df0 100644 (file)
        "history": "Trametes stǣr",
        "history_short": "Stǣr",
        "updatedmarker": "nīwod æfter mīnre lætestan sōcne",
-       "printableversion": "Ūtmǣlendlīc fadung",
+       "printableversion": "Ūtmǣlendlicu fadung",
        "permalink": "Fæst hlenca",
        "print": "Ūtmǣlan",
        "view": "Sihþ",
        "view-foreign": "Sihþ on $1",
-       "edit": "Adihtan",
+       "edit": "Ādihtan",
        "create": "Scieppan",
        "create-local": "Besettan stōwlice gemearcunge",
        "editthispage": "Adihtan þisne tramet",
        "view-pool-error": "Wālā, þā þegntōlas nū oferlīce wyrcaþ.\nTō mænige brūcendas gesēcaþ tō sēonne þisne tramet.\nWē biddaþ þæt þū abīde scortne tīman ǣr þū gesēce to sēonne þisne tramet eft.\n\n$1",
        "pool-errorunknown": "Uncūþ wōh",
        "aboutsite": "Gecȳþness ymbe {{GRAMMAR:wrēgendlīc|{{SITENAME}}}}",
-       "aboutpage": "Project:Gecȳþness",
+       "aboutpage": "Project:Gefrǣge",
        "copyright": "Man mæg innunge under $1 findan, būton þǣr hit is elles amearcod.",
        "copyrightpage": "{{ns:project}}:Gelīcnessriht",
        "currentevents": "Gelimpunga þisses tīman",
        "portal": "Gemǣnscipes ingang",
        "portal-url": "Project:Gemǣnscipes ingang",
        "privacy": "Ānlēpnesse rǣd",
-       "privacypage": "Project:Ānlēpnesse rǣd",
+       "privacypage": "Project:Ä\80nlÄ«Ä\93pnesse rÇ£d",
        "badaccess": "Þafunge wōh",
        "badaccess-group0": "Þū ne mōst dōn þā dǣde þǣre þe þū hafast abede.",
        "badaccess-groups": "Þēos dǣd þǣre þū hafast abeden is synderlīce alȳfedlic brūcendum on {{PLURAL:$2|þissum þrēate|ānum þāra þrēata}}: $1.",
        "resetpass-submit-loggedin": "Andwendan þafungword",
        "resetpass-submit-cancel": "Undōn",
        "passwordreset": "Settan þafungword eft",
-       "passwordreset-legend": "Settan þafungword eft",
        "passwordreset-username": "Brūcendnama:",
        "bold_sample": "Þicce traht",
        "bold_tip": "Þicce traht",
        "recentchanges-legend": "Nīwra andwendunga cyras",
        "recentchanges-summary": "Sēon þā nīwostan andwendunga þisses wiki on þissum tramete",
        "recentchanges-feed-description": "Īwan þā nīwostan andwendunga þæs wiki mid þissum strēame",
-       "recentchanges-label-newpage": "Þēos adihtung scōp nīwne tramet",
-       "recentchanges-label-minor": "Þēos is lytel adihtung",
+       "recentchanges-label-newpage": "Þēos ādihtung scōp nīwne tramet",
+       "recentchanges-label-minor": "Þēos is lytel ādihtung",
        "recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
        "recentchanges-label-plusminus": "Þæs trametes micelness wæs andwended þȳs rīme grēatbitena",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
        "filerevert-legend": "Settan ymelan on bæc",
        "filedelete-submit": "Forlēosan",
        "unusedtemplateswlh": "ōðre hlencan",
-       "randompage": "Gelimplīc tramet",
+       "randompage": "Gelimplic tramet",
        "statistics": "Cȳþþu",
        "statistics-articles": "Innunge trametas",
        "statistics-pages": "Trametas",
        "allmessages-filter-modified": "Andwended",
        "allmessages-language": "Sprǣc:",
        "allmessages-filter-submit": "Gān",
-       "thumbnail-more": "Mǣrsian",
+       "thumbnail-more": "Gerȳman",
        "filemissing": "Ymele is æfweard",
        "import": "Inbringan trametas",
        "import-interwiki-submit": "Inbringan",
        "tooltip-pt-logout": "Ūtmeldian",
        "tooltip-pt-createaccount": "Þū āhst wyrcan grīman tō brūcenne, ac þū ne þearft þæt dōn.",
        "tooltip-ca-talk": "Mōtung ymbe þone innunge tramet",
-       "tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone forebysene cnæpp ǣr þū hordie.",
+       "tooltip-ca-edit": "Þisne tramet ādihtan.",
        "tooltip-ca-addsection": "Beginnan nīwne dǣl",
        "tooltip-ca-viewsource": "Þes tramet is borgen.\nÞū canst his fruman sēon.",
        "tooltip-ca-history": "Ǣrran fadunga þisses trametes",
        "specialpages-group-other": "Ōðre syndrige trametas",
        "specialpages-group-users": "Brūcendas and riht",
        "blankpage": "Tramet is æmettig",
+       "tag-filter": "[[Special:Tags|Mearcincles]] siftere:",
        "tags-edit": "adihtan",
        "htmlform-submit": "Forþsendan",
        "htmlform-reset": "Undōn andwendunga",
index af56180..6bbfe2d 100644 (file)
        "hidden-category-category": "تصنيفات مستخبية",
        "category-subcat-count": "{{PLURAL:$2| التصنيف دا فيه  التصنيف الفرعى الجاى بس.|التصنيف دا فيه {{PLURAL:$1|تصنيف فرعى|$1 تصنيف فرعى}}، من إجمالى $2.}}",
        "category-subcat-count-limited": " التصنيف دا فيه {{PLURAL:$1|تصنيف فرعي|$1 تصنيف فرعي}} كدا.",
-       "category-article-count": "{{PLURAL:$2| التصنيف دا فيه  الصفحة دى بس.|تحت {{PLURAL:$1|ملف|$1 ملف}} فى  التصنيف دا ، من إجمالى $2.}}",
+       "category-article-count": "{{PLURAL:$2|التصنيف دا فيه الصفحه دى بس.|{{PLURAL:$1|الصفحه دى|$1 الصفحات دول}} فى التصنيف دا، من إجمالى $2.}}",
        "category-article-count-limited": "تحت {{PLURAL:$1|صفحة|$1 صفحة}} فى التصنيف الحالى.",
        "category-file-count": "{{PLURAL:$2| التصنيف دا  فيه الملف الجاى دا بس.|تحت {{PLURAL:$1|ملف|$1 ملف}} فى  التصنيف دا، من إجمالى $2.}}",
        "category-file-count-limited": "تحت {{PLURAL:$1|ملف|$1 ملف}} فى التصنيف الحالى.",
        "welcomecreation-msg": "اتفتحلك حساب.\nلو تحب ممكن تغير [[Special:Preferences|تفضيلاتك ف {{SITENAME}}]].",
        "yourname": "اليوزرنيم:",
        "userlogin-yourname": "اسم اليوزر",
+       "userlogin-yourname-ph": "إكتب اسم اليوزر بتاعك:",
        "createacct-another-username-ph": "إكتب اسم يوزر:",
        "yourpassword": "الباسوورد:",
+       "userlogin-yourpassword": "الباسورد:",
        "yourpasswordagain": "اكتب الباسورد تاني:",
        "remembermypassword": " (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا",
        "yourdomainname": "النطاق بتاعك:",
        "logout": "خروج",
        "userlogout": "خروج",
        "notloggedin": "انت مش مسجل دخولك",
+       "userlogin-noaccount": "معندكش حساب؟",
+       "userlogin-joinproject": "انضم ل {{SITENAME}}",
        "nologin": "معندكش حساب؟ '''$1'''.",
        "nologinlink": "افتح حساب",
        "createaccount": "افتح حساب",
        "gotaccount": "عندك حساب؟ '''$1'''.",
        "gotaccountlink": "دخول",
        "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
+       "createacct-email-ph": "أكتب عنوان الإيميل بتاعك",
        "createaccountmail": "استخدم باسورد مؤقته و إبعتها ع الايميل المحدد ده",
        "createaccountreason": "السبب:",
+       "createacct-submit": "افتح حسابك",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|تعديل|تعديلات}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحه|صفحات}}",
        "badretype": "كلمتين السر اللى  كتبتهم مش  زى بعضهم",
        "userexists": "اسم اليوزر اللى كتبته بيستعمله يوزر غيرك.\nاكتت اسم يوزر تانى.",
        "loginerror": "غلط فى الدخول",
        "login-throttled": "انت عملت  محاولات لوجين كتيره  ع الحساب ده.\nمن فضلك استنى $1 قبل المحاولة مرة تانيه.",
        "loginlanguagelabel": "اللغة: $1",
        "pt-login": "دخول",
+       "pt-login-button": "دخول",
        "pt-createaccount": "افتح حساب",
+       "pt-userlogout": "خروج",
        "changepassword": "غير الباسورد",
        "resetpass_announce": "اتسجل دخولك دلوقتى بالكود اللى اتبعتلك فى الايميل. علشان تخلص عملية الدخول ،لازم تعملك باسورد جديدة هنا:",
        "resetpass_text": "<!-- أضف نصا هنا -->",
        "preview": "بروفه",
        "showpreview": "عرض البروفه",
        "showdiff": "بيين التعديلات",
-       "anoneditwarning": "'''تحذير:''' انت ما عملتش لوجين.\nعنوان الاى  بى  بتاعك هايتسجل فى تاريخ الصفحه .",
+       "anoneditwarning": "<strong>تحذير:'</strong> انت ما عملتش لوجين. عنوان الاى  بى  بتاعك هايتسجل ف تاريخ الصفحه. لو  <strong>[$1 عملت لوجين ]</strong> او <strong>[$2 فتحت حساب ]</strong>,   اليوزرنيم بتاعك هايتسجل ف تاريخ الصفحه.",
        "missingsummary": "'''خد بالك:''' انت ما كتبتش ملخص للتعديل.\nلو دوست على سييڤ الصفحه مرة تانية التعديل بتاعك ح يتحفظ من غير ملخص.",
        "missingcommenttext": "لو سمحت اكتب تعليق تحت.",
        "missingcommentheader": "'''.خد بالك:''' انت ما كتبتش عنوان\\موضوع للتعليق دا\nلو دوست على {{int:savearticle}} مرة تانيه، تعليقك ح يتحفظ من غير عنوان.",
        "session_fail_preview_html": "'''ماقدرناش نعالج تعديلك بسبب ضياع بيانات الجلسة.'''\n\n''لأن {{SITENAME}} بها HTML هل الخام شغاله، البروفه مخفيه كاحتياط ضد هجمات الجافا سكريبت.''\n\n'''إذا كانت دى محاولة تعديل صادقه، من فضلك حاول مرة تانيه. إذا كانت لسه مش شغاله، حاول [[Special:UserLogout|تسجيل الخروج]] و تسجيل الدخول من جديد.'''",
        "token_suffix_mismatch": "'''تعديلك اترفض لأن عميلك غلط فى علامات الترقيم\nفى نص التعديل. التعديل اترفض علشان ما يبوظش نص المقالة.\nدا ساعات بيحصل لما تستعمل خدمة بروكسى مجهولة بايظة أساسها الويب.'''",
        "editing": "تعديل $1",
+       "creating": "إنشاء «$1»",
        "editingsection": "تعديل $1 (جزء)",
        "editingcomment": "تعديل $1 (قسم جديد)",
        "editconflict": "تضارب فى التحرير: $1",
        "currentrev": "النسخه دلوقتى",
        "currentrev-asof": "المراجعة الحالية بتاريخ $1",
        "revisionasof": "تعديلات من $1",
-       "revision-info": "نسخه $1 بواسطة $2",
+       "revision-info": "نسخة $1 ل {{GENDER:$6|$2}}$7",
        "previousrevision": "←نسخه اقدم",
        "nextrevision": "نسخه احدث→",
        "currentrevisionlink": "النسخه دلوقتى",
        "revertmerge": "استرجاع الدمج",
        "mergelogpagetext": "فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.",
        "history-title": " «$1»: تاريخ التعديل",
+       "difference-title": "«$1»: الفرق بين النسختين",
        "difference-multipage": "(الفرق بين الصفحتين)",
        "lineno": "سطر $1:",
        "compareselectedversions": "قارن بين النسختين المختارتين",
        "showhideselectedversions": "عرض/تخبية المراجعات المختاره.",
        "editundo": "استرجاع",
+       "diff-multi-sameuser": "({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}}  بواسطة {{PLURAL:|يوزر واحد |يوزرات}}  مش معروضه)",
        "diff-multi-manyusers": "({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}} by {{PLURAL:$2|يوزر واحد |$2 يوزرات}}  مش معروضه)",
        "searchresults": "نتايج التدوير",
        "searchresults-title": "نتايج التدوير على \"$1\"",
        "shown-title": "اعرض $1 {{PLURAL:$1|نتيجه|نتايج}} فى كل صفحه",
        "viewprevnext": "شوف ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''فيه صفحه اسمها \"[[:$1]]\" على الويكى ده.''' {{PLURAL:$2|0=|بص كمان على نتايج البحث التانيه.}}",
-       "searchmenu-new": "'''ابتدى الصفحه \"[[:$1]]\" ع الويكى دا!''' {{PLURAL:$2|0=|بص كمان على الصفحه اللى لقيناها من بحثك.|بص كمان على نتايج البحث اللى لقيناها.}}",
+       "searchmenu-new": "<strong>ابتدى الصفحه \"[[:$1]]\" ع الويكى دا!</strong>  {{PLURAL:$2|0=|بص كمان على الصفحه اللى لقيناها من تدويرك.|بص كمان على نتايج التدوير.}}",
        "searchprofile-articles": "صفحات محتوى",
        "searchprofile-images": "مالتيميديا",
        "searchprofile-everything": "كل شىء",
        "searchrelated": "مرتبطه",
        "searchall": "الكل",
        "showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول  رقم '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|النتايج <strong>$1</strong> من <strong>$3</strong>|النتايج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "powersearch-legend": "تدوير متقدم",
        "powersearch-ns": "تدوير فى اسم المساحه:",
        "action-userrights-interwiki": "تعديل صلاحيات اليوزر لليوزرز فى الويكيات التانية",
        "action-siteadmin": "غلق أو رفع غلق قاعدة البيانات",
        "nchanges": "{{PLURAL:$1|تعديل|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديل}}",
+       "enhancedrc-history": "تاريخ",
        "recentchanges": "اخر التعديلات",
        "recentchanges-legend": "اختيارات اخر التعديلات",
        "recentchanges-summary": "تابع آخر التغييرات فى الويكى على الصفحة دى.",
        "recentchanges-label-minor": "ده تعديل صغير",
        "recentchanges-label-bot": "التعديل ده عمله بوت",
        "recentchanges-label-unpatrolled": "التعديل ده مإتراجعش لسه",
+       "recentchanges-legend-heading": "شرح",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بص كمان على [[Special:NewPages|قايمه الصفحات الجديده]])",
        "rcnotefrom": "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
        "rclistfrom": "اظهر التعديلات بدايه من $3 $2",
        "rcshowhideminor": "$1 تعديلات صغيره",
+       "rcshowhideminor-show": "اعرض",
+       "rcshowhideminor-hide": "تخبية",
        "rcshowhidebots": "$1 البوتات",
+       "rcshowhidebots-show": "عرض",
+       "rcshowhidebots-hide": "تخبية",
        "rcshowhideliu": "$1 اليوزرز المتسجلين",
+       "rcshowhideliu-hide": "تخبية",
        "rcshowhideanons": "$1 اليوزرز المجهولين",
+       "rcshowhideanons-show": "عرض",
+       "rcshowhideanons-hide": "تخبية",
        "rcshowhidepatr": "$1 التعديلات المتراجعه",
        "rcshowhidemine": "$1 تعديلاتى",
+       "rcshowhidemine-show": "اعرض",
+       "rcshowhidemine-hide": "تخبية",
        "rclinks": "بيين اخر $1 تعديل فى اخر $2 يوم، $3",
        "diff": "التغيير",
        "hist": "تاريخ",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1| يوزر مراقب|يوزر مراقب}}]",
        "rc_categories": "حصر لتصنيفات (مفصولة برمز \"|\")",
        "rc_categories_any": "أى",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بايت|بايتس}} بعد التغيير",
        "newsectionsummary": "/* $1 */ قسم جديد",
        "rc-enhanced-expand": "[اعرض التفاصيل]",
        "rc-enhanced-hide": "إخفاء التفاصيل",
        "suppress": "أوفرسايت",
        "booksources": "مصادر من كتب",
        "booksources-search-legend": "التدوير على مصادر الكتب",
+       "booksources-search": "تدوير",
        "booksources-text": "فى تحت لستة بوصلات لمواقع تانية بتبيع الكتب الجديدة والمستعملة، كمان ممكن تلاقى معلومات إضافية عن الكتب اللى يتدور عليها :",
        "booksources-invalid-isbn": "رقم الـ ISBN اللى كتبته شكله مش صحيح؛ اتإكد من الغلطات بتاعة النسخ من المصدر الاصلى.",
        "specialloguserlabel": "اليوزر:",
        "delete-warning-toobig": "الصفحة دى ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nممكن مسحها يعمل اضطراب  فى عمليات قاعدة البيانات فى {{SITENAME}}؛\nاستمر بس خد بالك.",
        "rollback": "إرجع فى التعديلات",
        "rollbacklink": "ترجيع",
+       "rollbacklinkcount": "استرجع {{PLURAL:$1|لا تعديلات|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|تعديل}}",
        "rollbackfailed": "الترجيع ما نفعش",
        "cantrollback": "ماقدرناش نرجع فى التعديل؛ آخر مساهم هوه الوحيد اللى ساهم فى الصفحة دي.",
        "alreadyrolled": "ماقدرناش نرجع التعديل الاخير لـ [[:$1]] بتاع [[User:$2|$2]] ([[User talk:$2|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nفى واحد تانى عدل الصفحه او عمل استرجاع قبل كده.\n\nاخر تعديل للصفحه دى عمله [[User:$3|$3]] ([[User talk:$3|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "tooltip-pt-mycontris": "ليستة تعديلاتك",
        "tooltip-pt-login": "يستحسن تسجل دخولك; لكن, ده مش اجبارى",
        "tooltip-pt-logout": "خروج",
+       "tooltip-pt-createaccount": "نشجعك على عمل حساب وتسجيل دخولك; لكنه مش  ضروري",
        "tooltip-ca-talk": "مناقشة صفحة الموضوع",
        "tooltip-ca-edit": "عدل الصفحه دى",
        "tooltip-ca-addsection": "ابتدى قسم جديد",
        "spambot_username": "تنظيف سبام ميدياويكى",
        "spam_reverting": "ترجيع آخر نسخة مافيهاش لينكات لـ $1",
        "spam_blanking": "كل النسخ فيها لينكات ل $1، فضيها",
-       "simpleantispam-label": "اختبار انتي-سبام.\n'''ماتعبيش''' دا!",
+       "simpleantispam-label": "اختبار انتيسبام.\nاكتب <strong>ماتكتبش</strong> دا!",
        "pageinfo-toolboxlink": "معلومات عن الصفحه",
        "markaspatrolleddiff": "علم عليها انها متراجعة",
        "markaspatrolledtext": "علم على المقاله دى إنها متراجعة",
        "file-nohires": "مافيش  ريزوليوشن اعلى متوفر.",
        "svg-long-desc": "ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3",
        "show-big-image": "الصوره الاصليه",
+       "show-big-image-size": "$1 × $2 بكسل",
        "file-info-gif-looped": "ملفوف",
        "file-info-gif-frames": "$1 {{PLURAL:$1|برواز|براويز}}",
        "newimages": "جاليرى الصور الجديده",
        "tags": "وسوم التغيير الصحيحة",
        "tag-filter": "فلتر [[Special:Tags|الوسم]]:",
        "tag-filter-submit": "فلتر",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمين|وسوم}}]]: $2)",
        "tags-title": "وسوم",
        "tags-intro": "الصفحه دى فيها ليستة الوسوم اللى ممكن البرنامج يعلم عى التعديل بيها، و معانيهم",
        "tags-tag": "اسم الوسم",
        "htmlform-selectorother-other": "تانيين",
        "revdelete-restricted": "طبق التعليمات على السيسوبات",
        "revdelete-unrestricted": "شيل الضوابط من على السيسوبات",
+       "logentry-upload-upload": " {{GENDER:$2|رفع|اترفعت}} $1 $3",
        "rightsnone": "(فاضى)",
        "revdelete-summary": "ملخص التعديل",
        "searchsuggest-search": "تدوير",
index b70f13f..ec213a1 100644 (file)
@@ -87,8 +87,8 @@
        "march": "মাৰ্চ",
        "april": "এপ্ৰিল",
        "may_long": "মে'",
-       "june": "june",
-       "july": "july",
+       "june": "জুন",
+       "july": "জুলাই",
        "august": "আগষ্ট",
        "september": "ছেপ্টেম্বৰ",
        "october": "অক্টোবৰ",
        "april-gen": "এপ্ৰিল",
        "may-gen": "মে’",
        "june-gen": "জুন",
-       "july-gen": "july",
+       "july-gen": "জুলাই",
        "august-gen": "আগষ্ট",
        "september-gen": "ছেপ্টেম্বৰ",
        "october-gen": "অক্টোবৰ",
        "jun": "জুন",
        "jul": "জুলাই",
        "aug": "আগষ্ট",
-       "sep": "ছেপ্টেম্বৰ:",
-       "oct": "অক্টোবৰ:",
+       "sep": "ছেপ্টেম্বৰ",
+       "oct": "অক্টোবৰ",
        "nov": "নৱেম্বৰ:",
-       "dec": "ডিচেম্বৰ:",
+       "dec": "ডিচেম্বৰ",
        "january-date": "জানুৱাৰী $1",
        "february-date": "ফেব্ৰুৱাৰী $1",
        "march-date": "মাৰ্চ $1",
        "hidden-category-category": "অদৃশ্য শ্ৰেণীসমূহ",
        "category-subcat-count": "{{PLURAL:$2|এই শ্ৰেণীত নিম্নলিখিত উপশ্ৰেণীসমূহ আছে। মুঠ $2টা উপশ্ৰেণীৰ ভিতৰত এই শ্ৰেণীত নিম্নলিখিত {{PLURAL:$1|এটা উপশ্ৰেণী|$1 টা উপশ্ৰেণী}} আছে।}}",
        "category-subcat-count-limited": "এই শ্ৰেণীত নিম্নলিখিত {{PLURAL:$1|টা উপশ্ৰেণী আছে|$1টা উপশ্ৰেণী আছে}}।",
-       "category-article-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦ªà§\83ষà§\8dঠাহà§\87 à¦\86à¦\9bà§\87। à¦®à§\81ঠ $2 à¦\96নৰ à¦­à¦¿à¦¤à§°à¦¤ à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦¤à¦²à§° {{PLURAL:$1|à¦\8fà¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87}}।}}",
+       "category-article-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল à¦¤à¦²à¦¤ à¦¦à§\87à¦\96à§\81à¦\93ৱা à¦ªà§\83ষà§\8dঠাহà§\87 à¦\86à¦\9bà§\87।| à¦®à§\81ঠ $2 à¦\9fাৰ à¦­à¦¿à¦¤à§°à¦¤ à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦¤à¦²à§° {{PLURAL:$1|à¦\8fà¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87।}}}}",
        "category-article-count-limited": "এই {{PLURAL:$1|পৃষ্ঠা|$1 পৃষ্ঠাসমূহ}} সাম্প্ৰতিক শ্ৰেণীত আছে ।",
-       "category-file-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87বল তলত দিয়া ফাইলটোহে আছে। মুঠ $2টাৰ ভিতৰত এই শ্ৰেণীটোত তলৰ {{PLURAL:$1|এটা ফাইল|$1 টা ফাইল}} আছে।}}",
+       "category-file-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল তলত দিয়া ফাইলটোহে আছে। মুঠ $2টাৰ ভিতৰত এই শ্ৰেণীটোত তলৰ {{PLURAL:$1|এটা ফাইল|$1 টা ফাইল}} আছে।}}",
        "category-file-count-limited": "তলৰ {{PLURAL:$1|ফাইলটো|$1 ফাইলসমূহ}} সাম্প্ৰতিক শ্ৰেণীত আছে।",
        "listingcontinuesabbrev": "আগলৈ",
        "index-category": "সূচীকৃত পৃষ্ঠাসমূহ",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|জন সদস্যই|জন সদস্যই}} এই পৃষ্ঠা নিৰীক্ষণ কৰিছে]",
        "rc_categories": "শ্ৰেণীসমূহৰ সীমাবদ্ধতা (\"|\" দি পৃথক কৰক):",
        "rc_categories_any": "বাছনি কৰাৰ মাজত যিকোনো",
-       "rc-change-size-new": "সালসলনিৰ পিছত $1 {{PLURAL:$1|বাইট|বাইট}}",
+       "rc-change-size-new": "$1 {{PLURAL:$1|বাইট}} যোগ দিয়া হ’ল",
        "newsectionsummary": "/* $1 */ নতুন অনুচ্ছেদ",
        "rc-enhanced-expand": "সবিশেষ দেখুৱাওক",
        "rc-enhanced-hide": "সবিশেষ  লুকুৱাওক",
        "tooltip-pt-logout": "প্ৰস্থান",
        "tooltip-pt-createaccount": "আপোনাক এটা একাউণ্ট সৃষ্টি কৰি প্ৰৱেশ কৰিবলৈ অনুৰোধ জনোৱা হৈছে, কিন্তু এয়া বাধ্যতামূলক নহয়",
        "tooltip-ca-talk": "সংশ্লিষ্ট প্ৰবন্ধ সম্পৰ্কীয় আলোচনা",
-       "tooltip-ca-edit": "à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦\95ৰিব à¦ªà¦¾à§°à§\87, à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦¸à¦¾à¦\9aà§\80 à¦¥à§\8bৱাৰ à¦\86à¦\97তà§\87 à¦\96à¦\9aৰা à¦\9aাà¦\87 à¦²à¦¬",
+       "tooltip-ca-edit": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à¦®à§\8dপাদনা à¦\95ৰà¦\95",
        "tooltip-ca-addsection": "নতুন অনুচ্ছেদ আৰম্ভ কৰক",
        "tooltip-ca-viewsource": "এই পৃষ্ঠাটো সুৰক্ষিত কৰা হৈছে, আপুনি ইয়াৰ উৎস চাব পাৰে।",
        "tooltip-ca-history": "এই পৃষ্ঠাৰ যোৱা সংস্কৰণসমূহ",
        "spam_reverting": "$1লৈ সংযোগ নথকা সৰ্বশেষ পুনৰীক্ষনলে উভতাই নিয়া হৈছে",
        "spam_blanking": "সকলো পুনৰীক্ষনৰ $1লৈ সংযোগ আছিল, ৰিক্ত কৰা হৈছে",
        "spam_deleting": "সকলো পুনৰীক্ষণৰ $1লৈ সংযোগ আছিল, বিলোপ কৰা হৈছে",
-       "simpleantispam-label": "এণ্টি-স্পাম পৰীক্ষা।\nএইখন পূৰণ '''নকৰিব'''!",
+       "simpleantispam-label": "এণ্টি-স্পাম পৰীক্ষা।\nএইখন পূৰণ <strong>নকৰিব</strong>!",
        "pageinfo-title": "\"$1\" ৰ তথ্য",
        "pageinfo-not-current": "ক্ষমা কৰিব, পুৰণা সংশোধনৰ বাবে এই তথ্য মুকলি কৰাটো সম্ভৱ নহয়।",
        "pageinfo-header-basic": "প্ৰাথমিক তথ্য",
        "exif-subjectarea": "বিষয়বস্তুৰ ক্ষেত্ৰফল",
        "exif-flashenergy": "ফ্লেছ শক্তি",
        "exif-focalplanexresolution": "X ফোকাচ তলৰ ৰিজলিউশ্যন",
-       "exif-focalplaneyresolution": "Y ফকাচ তলৰ ৰিজলিউশ্যন",
+       "exif-focalplaneyresolution": "Y ফ'কাচ তলৰ ৰিজলিউশ্যন",
        "exif-focalplaneresolutionunit": "ফ'কেল তল ৰিজলিউশ্যন একক",
        "exif-subjectlocation": "বিষয়বস্তুৰ স্থান",
        "exif-exposureindex": "উন্মুক্ত সূচী",
index c00cf1d..cca3b29 100644 (file)
        "recentchangesdays-max": "Maksimum $1 {{PLURAL:$1|gün|gün}}",
        "recentchangescount": "Son dəyişikliklərdə başlıq sayı:",
        "prefs-help-recentchangescount": "Buraya yeni dəyişikliklər, səhifələrin və jurnalların tarixçəsi daxildir.",
-       "savedprefs": "Seçiminiz qeyd edildi.",
+       "savedprefs": "Seçiminiz qəbul edildi.",
        "timezonelegend": "Vaxt zonası:",
        "localtime": "Yerli vaxt:",
        "timezoneuseserverdefault": "Susmaya görə serverdən istifadə ($1)",
        "emailmessage": "Mesaj:",
        "emailsend": "Göndər",
        "emailccme": "Məktubun surətini elektron ünvanıma göndər.",
-       "emailccsubject": " $1: $2-yə olan ismarıclarınızın surəti",
+       "emailccsubject": "$1 adlı istifadəçiyə olan ismarıcınızın surəti: $2",
        "emailsent": "E-məktub göndərildi",
        "emailsenttext": "E-məktub mesajınız göndərildi.",
        "usermessage-summary": "Sistem mesajı qoyun.",
index 1b0e2ed..ac35bce 100644 (file)
        "emailuser": "E-suratan ining paragamit",
        "emailuser-title-target": "E-surat kaining {{GENDER:$1|paragamit}}",
        "emailuser-title-notarget": "E-surat na paragamit",
-       "emailpage": "E-suratan an parágamit",
        "emailpagetext": "Ika makakagamit kan porma na yaon sa ibaba sa pagpadara nin mensahe na e-surat sa {{GENDER:$1|paragamit}}.\nAn e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong paragamit na mga kamuyahan]] ipapahiling bilang iyo an \"Gikan sa\" estada kan e-surat, kaya an resipiyente makakapagsimbag direkta mismo saimo.",
        "defemailsubject": "{{SITENAME}} e-surat gikan sa paragamit \"$1\"",
        "usermaildisabled": "Paragamit na e-surat pinagpundo",
        "tooltip-pt-login": "Ika inaagyat na maglaog; alagad, bako tabi ining piriritan",
        "tooltip-pt-logout": "Magluwas",
        "tooltip-ca-talk": "Orolayan dapit sa laog kan pahina",
-       "tooltip-ca-edit": "Ika makakaliwat kaining pahina. Tabi man gamiton an pindutan nin patanaw bago itatagama",
+       "tooltip-ca-edit": "Liwata ining pahina",
        "tooltip-ca-addsection": "Magpoon nin sarong baguhon na seksyon",
        "tooltip-ca-viewsource": "Ining pahina protektado.\nIka makakatanaw kan pinaggikanan",
        "tooltip-ca-history": "Mga nakaaging rebisyon kaining pahina",
index 001c9f6..57252e7 100644 (file)
        "searchprofile-advanced": "Пашыраны",
        "searchprofile-articles-tooltip": "Пошук у $1",
        "searchprofile-images-tooltip": "Пошук файлаў",
-       "searchprofile-everything-tooltip": "Шукаць усюды (уключна са старонкамі абмеркаваньня)",
+       "searchprofile-everything-tooltip": "Шукаць усюды (у тым ліку на старонках абмеркаваньня)",
        "searchprofile-advanced-tooltip": "Шукаць у дадатковых прасторах назваў",
        "search-result-size": "$1 ($2 {{PLURAL:$2|слова|словы|словаў}})",
        "search-result-category-size": "$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})",
        "upload-dialog-button-cancel": "Адмяніць",
        "upload-dialog-button-done": "Зроблена",
        "upload-dialog-button-save": "Захаваць",
+       "upload-dialog-button-upload": "Загрузіць",
+       "upload-dialog-label-select-file": "Абраць файл",
+       "upload-dialog-label-infoform-title": "Падрабязнасьці",
+       "upload-dialog-label-infoform-name": "Назва",
+       "upload-dialog-label-infoform-description": "Апісаньне",
+       "upload-dialog-label-usage-title": "Выкарыстаньне",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
index 5f71422..1f6b7ca 100644 (file)
@@ -27,7 +27,8 @@
                        "Vodnokon4e",
                        "ShadeOfGrey",
                        "PetaRZ",
-                       "Macofe"
+                       "Macofe",
+                       "V111P"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "noindex-category": "Неиндексирани страници",
        "broken-file-category": "Страници с неработещи препратки към файлове",
        "about": "За {{SITENAME}}",
-       "article": "Страница",
+       "article": "Статия",
        "newwindow": "(отваря се в нов прозорец)",
        "cancel": "Отказ",
        "moredotdotdot": "Още…",
        "revdelete-show-file-confirm": "Необходимо е потвърждение, че желаете да прегледате изтритата версия на файла „<nowiki>$1</nowiki>“ от $2 $3.",
        "revdelete-show-file-submit": "Да",
        "logdelete-selected": "{{PLURAL:$1|Избрано събитие|Избрани събития}}:",
-       "revdelete-confirm": "Ð\9dеобÑ\85одимо Ðµ Ð´Ð° Ð¿Ð¾Ñ\82вÑ\8aÑ\80диÑ\82е, Ñ\87е Ð²елаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].",
+       "revdelete-confirm": "Ð\9dеобÑ\85одимо Ðµ Ð´Ð° Ð¿Ð¾Ñ\82вÑ\8aÑ\80диÑ\82е, Ñ\87е Ðелаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].",
        "revdelete-suppress-text": "Премахването трябва да се използва '''само''' при следните случаи:\n*Неподходяща или неприемлива лична информация\n*: ''домашни адреси и телефонни номера, номера за социално осигуряване и др.''",
        "revdelete-legend": "Задаване на ограничения:",
        "revdelete-hide-text": "Текст на версията",
        "emailuser": "Писмо до потребителя",
        "emailuser-title-target": "Изпращане на е-писмо на този {{GENDER:$1|потребител}}",
        "emailuser-title-notarget": "Изпращане на е-писмо на потребител",
-       "emailpage": "Пращане писмо на потребител",
        "emailpagetext": "Можете да използвате формуляра по-долу, за да изпратите електронно писмо на {{GENDER:$1|този потребител}}.\nАдресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори директно.",
        "defemailsubject": "Писмо от потребител $1 в {{SITENAME}}",
        "usermaildisabled": "Потребителят не е разрешил да получава електронна поща",
        "viewdeletedpage": "Преглед на изтрити страници",
        "undeletepagetext": "{{PLURAL:$1|Следната страница беше изтрита, но все още се намира в архива и може да бъде възстановена|Следните $1 страници бяха изтрити, но все още се намират в архива и могат да бъдат възстановени}}. Архивът може да се почиства от време на време.",
        "undelete-fieldset-title": "Възстановяване на версии",
-       "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки тези версии на страницата, които трябва да бъдат въстановени, след което се натиска ''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки на тези версии на страницата, които трябва да бъдат възстановени, след което се натиска '''''{{int:undeletebtn}}'''''.",
        "undeleterevisions": "{{PLURAL:$1|Една версия беше архивирана|$1 версии бяха архивирани}}",
        "undeletehistory": "Ако възстановите страницата, всички версии ще бъдат върнати в историята.\nАко след изтриването е създадена страница със същото име, възстановените версии ще се появят като по-ранна история, а текущата версия на страницата няма да бъде заменена автоматично. Също така обърнете внимание, че ограниченията, приложени върху версиите, ще се загубят след възстановяването.",
        "undeleterevdel": "Възстановяването няма да бъде изпълнено, ако би довело до частично изтриване на актуалната версия. В такъв случай актуалната версия не трябва да бъде избирана или пък състоянието й трябва да бъде променено на нормална (нескрита) версия. Версиите на файлове, които нямате право да преглеждате, няма да бъдат възстановени.",
index 4a409ca..7681660 100644 (file)
        "mypreferences": "পছন্দসমূহ",
        "prefs-edits": "সম্পাদনা সংখ্যা:",
        "prefsnologintext2": "আপনার পছন্দসমূহ পরিবর্তন করতে প্রবেশ করুন।",
-       "prefs-skin": "আবরণ (Skin)",
+       "prefs-skin": "আবরণ",
        "skin-preview": "প্রাকদর্শন",
        "datedefault": "কোন পছন্দ নেই",
        "prefs-labs": "পরীক্ষাগার বৈশিষ্টসমূহ",
index 76d3325..9fd5248 100644 (file)
        "sectioneditnotsupported-text": "Uređivanje sekcije nije podržano na ovoj stranici.",
        "permissionserrors": "Greške pri odobrenju",
        "permissionserrorstext": "Nemate dopuštenje da to uradite, iz {{PLURAL:$1|slijedećeg razloga|slijedećih razloga}}:",
-       "permissionserrorstext-withaction": "Nemate dopuštenje da $2, iz {{PLURAL:$1|slijedećeg|slijedećih}} razloga:",
+       "permissionserrorstext-withaction": "Nemate dopuštenje da $2, iz {{PLURAL:$1|sljedećeg|sljedećih}} razloga:",
        "recreate-moveddeleted-warn": "'''Upozorenje: Postavljate stranicu koja je prethodno brisana.'''\n\nRazmotrite da li je nastavljanje uređivanja ove stranice u skladu s pravilima.\nOvdje je naveden zapisnik brisanja i premještanja s obrazloženjem:",
        "moveddeleted-notice": "Ova stranica je obrisana.\nZapisnik brisanja i premještanja stranice je prikazan ispod kao referenca.",
        "log-fulllog": "Vidi potpuni zapisnik",
        "group-user-member": "{{GENDER:$1|korisnik|korisnica}}",
        "group-autoconfirmed-member": "Potvrđeni korisnik",
        "group-bot-member": "bot",
-       "group-sysop-member": "Administrator",
-       "group-bureaucrat-member": "Birokrat",
+       "group-sysop-member": "{{GENDER:$1|administrator|administratorica}}",
+       "group-bureaucrat-member": "{{GENDER:$1|birokrat|birokratica}}",
        "group-suppress-member": "Nadzornik",
        "grouppage-user": "{{ns:project}}:Korisnici",
        "grouppage-autoconfirmed": "{{ns:project}}:Potvrđeni korisnici",
        "logentry-contentmodel-change-revert": "vrati",
        "protectlogpage": "Zapisnik zaključavanja",
        "protectlogtext": "Ispod je spisak promjena zaštićenja stranice.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za pregled trenutno zaštićenih stranica.",
-       "protectedarticle": "stranica \"[[$1]]\" je zaštićena",
-       "modifiedarticleprotection": "promijenjen stepen zaštite za \"[[$1]]\"",
+       "protectedarticle": "{{GENDER:|zaštitio|zaštitila}} je stranicu \"[[$1]]\"",
+       "modifiedarticleprotection": "{{GENDER:|promijenio|promijenila}} je stepen zaštite stranice \"[[$1]]\"",
        "unprotectedarticle": "uklonjena zaštita sa stranice \"[[$1]]\"",
        "movedarticleprotection": "podešavanja zaštite premještena sa \"[[$2]]\" na \"[[$1]]\"",
        "protect-title": "Zaštićuje se \"$1\"",
        "protect-otherreason-op": "Ostali razlozi",
        "protect-dropdown": "*Uobičajeni razlozi zaštite\n** Prekomjerni vandalizam\n** Prekomjerno spamovanje\n** Ne produktivni rat izmjena\n** Stranica velikog prometa",
        "protect-edit-reasonlist": "Uredi razloge zaštićavanja",
-       "protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite",
+       "protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "restriction-type": "Dopuštenje:",
        "restriction-level": "Stepen ograničenja:",
        "minimum-size": "Najmanja veličina",
        "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu koju je koristio ovaj korisnik i sve druge IP-adrese s kojih je pokušao uređivati",
        "ipbsubmit": "Blokirajte ovog korisnika",
        "ipbother": "Ostali period:",
-       "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite",
+       "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "ipbhidename": "Sakrij korisničko ime iz uređivanja i spiskova",
        "ipbwatchuser": "Prati korisničku stranicu i stranicu za razgovor ovog korisnika",
        "ipb-disableusertalk": "Onemogući ovog korisnika da uređuje svoju stranicu za razgovor dok je blokiran",
        "ipblocklist-submit": "Traži",
        "ipblocklist-localblock": "Lokalna blokada",
        "ipblocklist-otherblocks": "Ostale {{PLURAL:$1|blokada|blokade}}",
-       "infiniteblock": "neograničeno",
+       "infiniteblock": "beskonačno",
        "expiringblock": "ističe dana $1 u $2",
        "anononlyblock": "samo anonimni korisnici",
        "noautoblockblock": "automatsko blokiranje onemogućeno",
        "block-log-flags-anononly": "samo anonimni korisnici",
        "block-log-flags-nocreate": "onemogućeno pravljenje računa",
        "block-log-flags-noautoblock": "automatsko blokiranje onemogućeno",
-       "block-log-flags-noemail": "e-mail je blokiran",
+       "block-log-flags-noemail": "e-pošta blokirana",
        "block-log-flags-nousertalk": "ne može uređivati vlastitu stranicu za razgovor",
-       "block-log-flags-angry-autoblock": "omogućeno napredno autoblokiranje",
+       "block-log-flags-angry-autoblock": "uključeno poboljšano automatsko blokiranje",
        "block-log-flags-hiddenname": "korisničko ime sakriveno",
        "range_block_disabled": "Administratorska mogućnost da blokira grupe je isključena.",
        "ipb_expiry_invalid": "Neispravno vrijeme isteka.",
        "img-lang-go": "Idi",
        "ascending_abbrev": "rast",
        "descending_abbrev": "opad",
-       "table_pager_next": "Slijedeća stranica",
+       "table_pager_next": "Sljedeća stranica",
        "table_pager_prev": "Prethodna stranica",
        "table_pager_first": "Prva stranica",
        "table_pager_last": "Posljednja stranica",
        "logentry-move-move_redir": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4 preko preusmjeravanja",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja",
        "logentry-patrol-patrol": "$1 je {{GENDER:$2|označio|označila}} izmjenu $4 stranice $3 pregledanim",
-       "logentry-patrol-patrol-auto": "$1 je automatski {{GENDER:$2|označio|označila}} izmjenu $4 stranice $3 pregledanim",
+       "logentry-patrol-patrol-auto": "$1 automatski je {{GENDER:$2|označio|označila}} verziju $4 stranice $3 pregledanom",
        "logentry-newusers-newusers": "Korisnički račun $1 je {{GENDER:$2|napravljen}}",
        "logentry-newusers-create": "Korisnički račun $1 je {{GENDER:$2|napravljen}}",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|napravio|napravila}} korisnički račun $3",
        "logentry-newusers-byemail": "Korisnički račun $3 je {{GENDER:$2|napravio|napravila}} $1 i lozinka/šifra je poslana putem e-maila",
-       "logentry-newusers-autocreate": "Korisnički račun $1 je automatski {{GENDER:$2|napravljen}}",
-       "logentry-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
+       "logentry-newusers-autocreate": "Korisnički račun $1 automatski je {{GENDER:$2|napravljen}}",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|premjestio|premjestila}} je postavke zaštite sa $4 na $3",
+       "logentry-rights-rights": "$1 {{GENDER:$2|promijenio|promijenila}} je članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|postavio|postavila}} je $3",
index 2ad45a8..217863f 100644 (file)
        "protectthispage": "Ларъе хӀара агӀо",
        "unprotect": "ГӀароллех къаста",
        "unprotectthispage": "ГӀароллех къаста",
-       "newpage": "Керла агӀо",
+       "newpage": "Керла агӀонаш",
        "talkpage": "Дийцаре йила хӀара агӀо",
        "talkpagelinktext": "Дийцаре",
        "specialpage": "Белхан агӀо",
        "viewdeleted": "Хьожий $1?",
        "restorelink": "{{PLURAL:$1|1=$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}",
        "feedlinks": "Тайпанехь:",
-       "feed-invalid": "Тайпан нийсадоцу талол оцу куьгтаlорна.",
+       "feed-invalid": "Тайпан нийса доцу талол оцу куьгтаlорна.",
        "feed-unavailable": "Хаитарца йолу асанаш тlекхочучехь яц",
        "site-rss-feed": "$1 — RSS-аса",
        "site-atom-feed": "$1 — Atom-аса",
        "storedversion": "Ӏалашйина верси",
        "editingold": "'''ДӀахьедар. Ахьа таеш ю хӀокху агӀона шира елла верси.'''\nАгӀо Ӏалаш йинчул тӀехьа хьалхо бина хийцамаш дӀабяра бу.",
        "yourdiff": "Башхаллаш",
-       "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцушсанна оцу лицензи хьоляхь $2 (хьаж. $1).\nНагахь хьо лууш вацахь хьайн йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИшта чӀагӀо йой ахьа, айхьа далош долучуьн хьо куьг да ву аьлла, я хьаэцна цхьан\nхьостера, хийцам ба а дӀаса даржада а чулацам болуш.<br />\n'''МАТОХИЙШ БАКЪО ЙОЦУ ГӀИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
+       "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцуш санна оцу лицензи хьолехь.\nНагахь хьо лууш вацахь хьайн йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИштта чӀагӀо йой ахьа, айхьа далош долучуьнна хьо куьг да ву аьлла, я хьаэцна цхьан\nхьостера, хийцам ба а дӀаса даржада а чулацам болуш.<br />\n'''МА-КХИССА БАКЪО ЙОЦУ ГӀИРСАШ КХУ ЧУ, КУЬЙГАЛХОЧУЬННА БАКЪО ЛАРЪЕШ ЙОЛУ!'''",
        "readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
        "protectedpagewarning": "'''ДӀахьедар. ХӀара агӀо ларйина ю хийцам цабайта, иза хийца я нисъян а бакъо йолуш куьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тӀаьххьара бина болу хийцамна тептар чура:",
        "semiprotectedpagewarning": "'''ДӀахьедо.''' ХӀара агӀо ларйина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьххьаралера дӀаязбина хаам:",
        "pageswithprop-prophidden-binary": "шалха маьӀна долу хӀума хьулйина ($1)",
        "doubleredirects": "Шалха дIасахьажийнарш",
        "doubleredirectstext": "ХӀокху агӀонехь ю дӀасахьажорашан тӀе хьажийна йолу дӀасахьажораш.\n<del>ТӀехула сиз хаькхна </del>нисйина чарна.",
-       "double-redirect-fixed-move": "АгӀон [[$1]] цӀе хийцина, хӀинца иза дӀахьажийна оцу [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] агӀонан цӀе хийцина.\nХӀинца иза авто-карлаяьккхина а [[$2]] агӀона тӀехьажийна.",
        "double-redirect-fixed-maintenance": "Шалха дӀасахьажинарг нисъяр [[$1]] → [[$2]].",
        "double-redirect-fixer": "ДӀасахьажинарш нисерг",
-       "brokenredirects": "ДIахаьдна долу дIасахьажораш",
+       "brokenredirects": "ДIадаьхна долу дIасахьажораш",
        "brokenredirectstext": "Лахара дӀасахьажийнарш ю йоцучу агӀонийн тӀе хьажийна:",
        "brokenredirects-edit": "нисъе",
        "brokenredirects-delete": "дӀаяккха",
        "protect-expiring": "чакхйолу $1 (UTC)",
        "protect-expiring-local": "чекхйолу $1",
        "protect-expiry-indefinite": "хан чаккхе йоцуш",
-       "protect-cascade": "Ð\9bаÑ\80Ñ\8aе Ð°Ð³Ó\80онаÑ\88, Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онÑ\86а Ñ\85Ó\80оÑ\82Ñ\82айеллаÑ\80Ñ\88 (Ñ\87аÑ\85Ñ\87аÑ\80é Ð»Ð°Ñ\80Ñ\8fÑ\8aр)",
+       "protect-cascade": "Ð\90гÓ\80онаÑ\88 Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80, Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онÑ\86а Ñ\85Ó\80оÑ\82Ñ\82айеллаÑ\80Ñ\88 (Ñ\87аÑ\85Ñ\87аÑ\80é Ð»Ð°Ñ\80Ñ\8aÑ\8fр)",
        "protect-cantedit": "Хьéга хийцам цабало хӀокху агӀон гlаролли локхалан, хӀуд аьлча хьан бакъо яц оцунна тадар дан.",
        "protect-othertime": "Кхин хан:",
        "protect-othertime-op": "кхин хан",
        "protect-existing-expiry-infinity": "Карара чекхйолу хан: чаккхе йоцу",
        "protect-otherreason": "Кхин бахьана/тӀетохар:",
        "protect-otherreason-op": "Кхин бахьана",
-       "protect-dropdown": "* Ð\9bаÑ\8aÑ\80Ñ\8aÑ\8fÑ\80ан Ð±Ð°Ñ\8cÑ\85Ñ\8cаÑ\88 \n** Ñ\81иÑ\85\81иÑ\85а Ð·Ñ\83лам Ð´Ð°Ñ\80 \n** Ð´Ñ\83ккÑ\85а Ñ\81пам Ñ\85илаÑ\80\n** Ð½Ð¸Ñ\81даÑ\80ийн Ñ\82Ó\80ом \n** Ð³Ó\80аÑ\80аÑ\8fлл агӀо",
+       "protect-dropdown": "* Ð\9bаÑ\8aÑ\80Ñ\8aÑ\8fÑ\80ан Ð±Ð°Ñ\85Ñ\8cанаÑ\88 \n** Ñ\81иÑ\85\81иÑ\85а Ð·Ñ\83лам Ð´Ð°Ñ\80 \n** Ð´Ñ\83ккÑ\85а Ñ\81пам Ñ\85илаÑ\80\n** Ð½Ð¸Ñ\81даÑ\80ийн Ñ\82Ó\80ом \n** Ð³Ó\80аÑ\80аÑ\8fÑ\8cлла агӀо",
        "protect-edit-reasonlist": "Бахьанин могӀам нисбар",
        "protect-expiry-options": "1 сахьт:1 hour,1 де:1 day,1 кӀиран:1 week,2 кӀиран:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шо:1 year,цlкъа:infinite",
        "restriction-type": "Бакъонаш:",
        "tooltip-ca-talk": "Дийцаре агlон чулацам",
        "tooltip-ca-edit": "Тае хӀара агӀо",
        "tooltip-ca-addsection": "Кхолла керла дакъа",
-       "tooltip-ca-viewsource": "Хlара агlо хийцам цабайта гароллехь ю, хьоьга далундерг хьажар а дезахь чура йоза хьаэцар",
+       "tooltip-ca-viewsource": "ХӀара агӀо ларъеш ю, хийцамаш ца-байта, амма хьо хьажа а, копи яккхан а мегар ду",
        "tooltip-ca-history": "ХӀокху агӀона хийцамаш болу тептар",
        "tooltip-ca-protect": "Ларъе агӀо хийцамаш цабайта",
        "tooltip-ca-unprotect": "Дlадаккха хlокху агlонна долу гаролла",
        "tooltip-n-randompage": "Хьажа цахууш нисйеллачу агlоне",
        "tooltip-n-help": "ГӀоде меттиг",
        "tooltip-t-whatlinkshere": "Массо агӀон могӀам, хӀокху агӀонтӀе хьажийна йолу",
-       "tooltip-t-recentchangeslinked": "Тlаьхьарлера хийцамаш хlокху агlонашкахь, мичхьа хьажийна хlара агlо",
+       "tooltip-t-recentchangeslinked": "ТӀаьххьарлера хийцамаш хӀокху агӀонашкахь, хьажийна хӀара агӀо болу",
        "tooltip-feed-rss": "ХӀокху агӀона трансляци RSS-рца",
        "tooltip-feed-atom": "Хьагайтар оцу Atom цани хlокху агlон",
        "tooltip-t-contributions": "ХӀокху декъашхочо хийцина йолу агӀонийн могӀам",
        "autosumm-blank": "Агӏон чулацам дӏабяккхина",
        "autosumm-replace": "АгӀона чуьраниг хийцина → «$1»",
        "autoredircomment": "[[$1]] тӀе хьажийна",
-       "autosumm-new": "Керла агlо: «$1»",
+       "autosumm-new": "Керла агӀо: «$1»",
        "autosumm-newblank": "Кхоьллина еса агӀо",
        "lag-warn-normal": "{{PLURAL:$1|$1 Секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
        "lag-warn-high": "Сервераш синхронизаци еш тӀехьайисарна, {{PLURAL:$1|$1 секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
index 5a52a76..b5a4438 100644 (file)
        "linksearch-pat": "Suchmuster:",
        "linksearch-ns": "Namensraum:",
        "linksearch-ok": "Suchen",
-       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</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.)",
+       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter, wie beispielsweise <code>*.beispiel.de</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.)",
        "linksearch-line": "$1 ist verlinkt von $2",
        "linksearch-error": "Wildcards können nur am Anfang der URL verwendet werden.",
        "listusersfrom": "Zeige Benutzer ab:",
index 1fe87a9..6eedb8c 100644 (file)
        "watchlistedit-clear-explain": "तमरा ध्यान सूचीबठे सम्पूर्ण पाना हटाइया",
        "watchlistedit-clear-done": "तमरो ध्यान सूची खाली गरीयाको छ।",
        "watchlisttools-view": "आधारित फेरबदलीहरू हेर",
-       "signature": "[[{{एनस:प्रयोगकर्ता}}:$1|$2]]([[{{एनस:प्रयोगकर्ता_कुरडी}}:$1|कुरडी]])",
+       "signature": "[[{{ns:प्रयोगकर्ता}}:$1|$2]][[{{ns:प्रयोगकर्ता_कुरडी}}:$1|कुरडी]]",
        "specialpages": "खास पानो",
        "specialpages-note": "* साधारण खास पानाहरू।\n* <span class=\"mw-specialpagerestricted\">निषेधित खास पानाहरू।</span>",
        "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
index 51cc927..990d38a 100644 (file)
        "rows": "Rows:",
        "columns": "Columns:",
        "searchresultshead": "Search",
-       "stub-threshold": "Threshold for <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
+       "stub-threshold": "Threshold for stub link formatting ($1):",
+       "stub-threshold-sample-link": "sample",
        "stub-threshold-disabled": "Disabled",
        "recentchangesdays": "Days to show in recent changes:",
        "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
        "tooltip-feed-rss": "RSS feed for this page",
        "tooltip-feed-atom": "Atom feed for this page",
-       "tooltip-t-contributions": "A list of contributions of this user",
+       "tooltip-t-contributions": "A list of contributions by this user",
        "tooltip-t-emailuser": "Send an email to this user",
        "tooltip-t-info": "More information about this page",
        "tooltip-t-upload": "Upload files",
        "autosumm-new": "Created page with \"$1\"",
        "autosumm-newblank": "Created blank page",
        "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21",
-       "size-bytes": "$1 B",
+       "size-bytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
        "size-exabytes": "$1 EB",
        "size-zetabytes": "$1 ZB",
        "size-yottabytes": "$1 YB",
-       "size-pixel": "$1 P",
+       "size-pixel": "$1 {{PLURAL:$1|pixel|pixels}}",
        "size-kilopixel": "$1 KP",
        "size-megapixel": "$1 MP",
        "size-gigapixel": "$1 GP",
index 7f1e39f..6cd6f66 100644 (file)
        "tooltip-pt-logout": "Elsaluti",
        "tooltip-pt-createaccount": "Ni rekomendas al vi kreon de uzantokonto kaj ensaluto; tamen, tio ne estas deviga",
        "tooltip-ca-talk": "Diskuto pri la artikolo",
-       "tooltip-ca-edit": "Vi povas redakti tiun ĉi paĝon. Bv uzi la antaŭvidbutonon antaŭ ol konservi.",
+       "tooltip-ca-edit": "Redakti tiun ĉi paĝon",
        "tooltip-ca-addsection": "Starti novan sekcion",
        "tooltip-ca-viewsource": "Tiu paĝo estas protektita. Vi povas nur rigardi ties fonton.",
        "tooltip-ca-history": "Antaŭaj versioj de tiu ĉi paĝo.",
        "spam_reverting": "Restarigo de lasta versio ne entenante ligilojn al $1",
        "spam_blanking": "Forviŝo de ĉiuj versioj entenantaj ligilojn al $1",
        "spam_deleting": "Ĉiuj versioj enhavis ligilojn al $1 - forigante",
-       "simpleantispam-label": "Kontrolo kontraŭ spamo.\n'''NE ENIGU''' ion ajn!",
+       "simpleantispam-label": "Kontrolo kontraŭ spamo.\n<strong>Ne entajpu</strong> ion ajn!",
        "pageinfo-title": "Informoj por \"$1\"",
        "pageinfo-not-current": "Informoj povas esti montritaj nur por la nuna versio",
        "pageinfo-header-basic": "Baza informo",
        "pageinfo-category-subcats": "Nombro de subkategorioj",
        "pageinfo-category-files": "Nombro de dosieroj",
        "markaspatrolleddiff": "Marki kiel patrolitan",
-       "markaspatrolledtext": "Marki ĉi tiun paĝon kiel patrolitan",
+       "markaspatrolledtext": "Marki ĉi tiun paĝon patrolita",
        "markedaspatrolled": "Markita kiel patrolita",
        "markedaspatrolledtext": "La elektita versio [[:$1]] estas markita kiel patrolita.",
        "rcpatroldisabled": "Patrolado de lastaj ŝanĝoj malaktivigita",
index 49b8b7b..5456bc5 100644 (file)
        "tog-prefershttps": "Utilizar siempre conexiones seguras en mis sesiones",
        "underline-always": "Siempre",
        "underline-never": "Nunca",
-       "underline-default": "Configuración predeterminada del tema o el navegador",
+       "underline-default": "Configuración predeterminada de la apariencia o el navegador",
        "editfont-style": "Tipo de letra del área de edición:",
        "editfont-default": "Predeterminado del navegador",
        "editfont-monospace": "Tipo de letra monoespaciado",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vacío",
        "content-json-empty-array": "Matriz vacía",
-       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] convoca a [[:$2]] con más de un valor para el parámetro «$3». Se usará solo el último valor proporcionado.",
+       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] llama a [[:$2]] con más de un valor para el parámetro «$3». Se usará solo el último valor proporcionado.",
        "duplicate-args-category": "Páginas que usan argumentos duplicados en invocaciones de plantillas",
        "duplicate-args-category-desc": "La página contiene invocaciones de plantillas que utilizan argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Advertencia:</strong> esta página contiene demasiadas llamadas a funciones sintácticas costosas.\n\nTiene {{PLURAL:$1|una llamada|$1 llamadas}}, pero debería tener menos de {{PLURAL:$2|una|$2}}.",
        "userrights-removed-self": "Has eliminado con éxito tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
        "group": "Grupo:",
        "group-user": "Usuarios",
-       "group-autoconfirmed": "Usuarios autoconfirmados",
+       "group-autoconfirmed": "Autoconfirmados",
        "group-bot": "Bots",
        "group-sysop": "Administradores",
        "group-bureaucrat": "Burócratas",
        "group-suppress": "Supresores",
        "group-all": "(todos)",
        "group-user-member": "{{GENDER:$1|usuario|usuaria}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|usuario autoconfirmado|usuaria autoconfirmada}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmado|autoconfirmada}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
        "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
        "group-suppress-member": "{{GENDER:$1|supresor|supresora}}",
        "grouppage-user": "{{ns:project}}:Usuarios",
-       "grouppage-autoconfirmed": "{{ns:project}}:Usuarios autoconfirmados",
+       "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmados",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Administradores",
        "grouppage-bureaucrat": "{{ns:project}}:Burócratas",
        "filetype-banned-type": "{{PLURAL:$4|El tipo de archivo|Los tipos de archivo}} <strong>\".$1\"</strong> no {{PLURAL:$4|está permitido|están permitidos}}.\n{{PLURAL:$3|El único tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
        "filetype-missing": "El archivo no tiene extensión (como «.jpg»).",
        "empty-file": "El archivo que enviaste estaba vacío.",
-       "file-too-large": "El archivo que enviste era demasiado grande.",
-       "filename-tooshort": "El nombre de archivo es demasiado corto.",
+       "file-too-large": "El archivo que enviaste era demasiado grande.",
+       "filename-tooshort": "El nombre del archivo es demasiado corto.",
        "filetype-banned": "El tipo de archivo está prohibido.",
        "verification-error": "Este archivo no superó la verificación de archivos.",
        "hookaborted": "Una extensión ha impedido la modificación que intentaste realizar.",
-       "illegal-filename": "El nombre de archivo no está permitido.",
-       "overwrite": "Sobrescribir un archivo existente no está permitido.",
+       "illegal-filename": "El nombre del archivo no está permitido.",
+       "overwrite": "No está permitido sobrescribir un archivo existente.",
        "unknown-error": "Ocurrió un error desconocido.",
        "tmp-create-error": "No se pudo crear archivo temporal.",
-       "tmp-write-error": "Error al escribir archivo temporal.",
+       "tmp-write-error": "Error al escribir el archivo temporal.",
        "large-file": "Se recomienda que los archivos no sean mayores de $1; este archivo ocupa $2.",
        "largefileserver": "El tamaño de este archivo es mayor del que este servidor admite por configuración.",
        "emptyfile": "El archivo que has intentado subir parece estar vacío; por favor, verifica que realmente se trate del archivo que intentabas subir.",
        "upload-misc-error-text": "Ha ocurrido un error durante la subida.\nVerifica que la URL es válida y accesible e inténtalo de nuevo.\nSi el problema persiste, contacta con un [[Special:ListUsers/sysop|administrador]].",
        "upload-too-many-redirects": "La URL contenía demasiadas redirecciones",
        "upload-http-error": "Ha ocurrido un error HTTP: $1",
-       "upload-copy-upload-invalid-domain": "No se pueden realizar cargas remotas desde este dominio.",
+       "upload-copy-upload-invalid-domain": "No se pueden realizar subidas remotas desde este dominio.",
        "upload-dialog-title": "Subir archivo",
        "upload-dialog-error": "Ha ocurrido un error",
        "upload-dialog-warning": "Ha ocurrido una advertencia",
        "filedelete-nofile": "<strong>$1</strong> no existe.",
        "filedelete-nofile-old": "No existe una versión guardada de <strong>$1</strong> con los atributos especificados.",
        "filedelete-otherreason": "Otra razón:",
-       "filedelete-reason-otherlist": "Otra razón",
+       "filedelete-reason-otherlist": "Otro motivo",
        "filedelete-reason-dropdown": "*Razones habituales de borrado\n** Violación de derechos de autor\n** Archivo duplicado",
        "filedelete-edit-reasonlist": "Edita los motivos del borrado",
        "filedelete-maintenance": "Borrado y restauración de archivos temporalmente deshabilitados durante el mantenimiento.",
        "ancientpages": "Artículos más antiguos",
        "move": "Trasladar",
        "movethispage": "Trasladar esta página",
-       "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nPor favor note que otros sitios web pueden vincular a un archivo con un URL directo, y por tanto pueden ser listados aquí a pesar de estar en uso activo.",
+       "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nTen en cuenta que otros sitios web pueden enlazar un archivo directamente por la URL, y por tanto pueden estar listados aquí a pesar de estar siendo usados de forma activa.",
        "unusedcategoriestext": "Las siguientes categorías han sido creadas, pero ningún artículo o categoría las utiliza.",
        "notargettitle": "No hay página objetivo",
        "notargettext": "No has especificado sobre qué página deseas llevar a cabo esta acción.",
        "protect-existing-expiry": "Fecha de caducidad actual: $2 a las $3",
        "protect-existing-expiry-infinity": "Tiempo de caducidad existente: infinito",
        "protect-otherreason": "Otra razón:",
-       "protect-otherreason-op": "Otra razón",
+       "protect-otherreason-op": "Otro motivo",
        "protect-dropdown": "*Razones de protección habituales\n**Vandalismo excesivo\n**Spam excesivo\n**Guerra de ediciones\n**Página muy visitada",
        "protect-edit-reasonlist": "Editar las razones de protección",
        "protect-expiry-options": "1 hora:1 hour,1 día:1 day,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
        "export-submit": "Exportar",
        "export-addcattext": "Añadir páginas desde la categoría:",
        "export-addcat": "Añadir",
-       "export-addnstext": "Agregar páginas del nombre del sitio:",
+       "export-addnstext": "Agregar páginas desde el espacio de nombres:",
        "export-addns": "Agregar",
        "export-download": "Guardar como archivo",
        "export-templates": "Incluir plantillas",
        "importstart": "Importando páginas...",
        "import-revision-count": "$1 {{PLURAL:$1|revisión|revisiones}}",
        "importnopages": "No hay páginas que importar.",
-       "imported-log-entries": "Importados $1 {{PLURAL:$1|entradas de registro|entradas de registro}}.",
+       "imported-log-entries": "{{PLURAL:$1|Se importó|Se importaron}} $1 {{PLURAL:$1|entrada|entradas}} de registro.",
        "importfailed": "La importación ha fallado: $1",
        "importunknownsource": "Tipo de fuente de importación desconocida",
        "importcantopen": "No se pudo importar el archivo",
        "group-sysop.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Administradores */",
        "group-bureaucrat.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Burócratas */",
        "anonymous": "{{PLURAL:$1|Usuario anónimo|Usuarios anónimos}} de {{SITENAME}}",
-       "siteuser": "{{GENDER:$1|Usuario|Usuaria}} $1 de {{SITENAME}}",
-       "anonuser": "{{SITENAME}} usuario anónimo $1",
-       "lastmodifiedatby": "Esta página fue modificada por última vez en $2, $1 por $3.",
+       "siteuser": "{{GENDER:$1|el usuario|la usuaria}} $1 de {{SITENAME}}",
+       "anonuser": "el usuario anónimo $1 de {{SITENAME}}",
+       "lastmodifiedatby": "Esta página fue modificada por última vez el $1 a las $2 por $3.",
        "othercontribs": "Basado en el trabajo de $1.",
        "others": "otros",
-       "siteusers": "{{PLURAL:$2|Usuario|Usuarios}} $1 de {{SITENAME}}",
-       "anonusers": "{{SITENAME}} {{PLURAL:$2|usuario|usuarios}} anónimos $1",
+       "siteusers": "{{PLURAL:$2|el usuario|los usuarios}} $1 de {{SITENAME}}",
+       "anonusers": "{{PLURAL:$2|el usuario anónimo|los usuarios anónimos}} $1 de {{SITENAME}}",
        "creditspage": "Créditos de la página",
        "nocredits": "No hay información de créditos para esta página.",
        "spamprotectiontitle": "Filtro de protección contra spam",
        "invalid-indicator-name": "<strong>Error:</strong> el atributo <code>name</code> de los indicadores de estado de página no debe estar vacío.",
        "version": "Versión",
        "version-extensions": "Extensiones instaladas",
-       "version-skins": "Temas instalados",
+       "version-skins": "Apariencias instaladas",
        "version-specialpages": "Páginas especiales",
        "version-parserhooks": "Extensiones del analizador sintáctico",
        "version-variables": "Variables",
        "htmlform-user-not-valid": "<strong>$1</strong> no es un nombre de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para búsqueda de texto completo",
        "sqlite-no-fts": "$1 sin soporte para búsqueda de texto completo",
-       "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página «$3»",
+       "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página $3",
        "logentry-delete-restore": "$1 restauró la página «$3»",
        "logentry-delete-event": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|una revisión |$5 revisiones}} en la página  $3: $4",
        "logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de registro de eventos en $3",
        "logentry-delete-revision-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de las revisiones en la página $3",
-       "logentry-suppress-delete": "$1 {{GENDER:$2|borró}}, con restricciones para administradores aplicadas, la página $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|borró}} la página $3",
        "logentry-suppress-event": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
        "logentry-suppress-revision": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de los eventos del registro en $3",
        "expand_templates_generate_xml": "Mostrar el árbol XML.",
        "expand_templates_generate_rawhtml": "Mostrar HTML en crudo",
        "expand_templates_preview": "Previsualización",
-       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor inténtelo de nuevo.</strong>\nSi aun así no funciona, pruebe a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
-       "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y usted no ha iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor [[Special:UserLogin|inicie sesión]] e inténtelo de nuevo.</strong>",
+       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, inténtalo de nuevo.</strong>\nSi aun así no funciona, intenta [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+       "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y no has iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, [[Special:UserLogin|inicia sesión]] e inténtalo de nuevo.</strong>",
        "pagelanguage": "Selector de idioma de página",
        "pagelang-name": "Página",
        "pagelang-language": "Idioma",
index 3b48a1a..e8cb188 100644 (file)
        "accmailtitle": "Parool saadetud",
        "accmailtext": "Kasutajale [[User talk:$1|$1]] genereeritud juhuslik parool saadeti aadressile $2.\n\nSeda saab pärast sisselogimist muuta ''[[Special:ChangePassword|parooli muutmise]]'' leheküljel.",
        "newarticle": "(Uus)",
-       "newarticletext": "Lehekülge, kuhu link sind suunas, pole veel.\nLehekülje loomiseks alusta allolevasse kasti kirjutamist (lisateave [$1 juhendist]).\nKui sattusid siia kogemata, klõpsa võrgulehitseja ''tagasi''-nupule.",
+       "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 veebilehitseja ''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:UserLogin/signup|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-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.",
        "confirmemail_success": "Sinu e-posti aadress on kinnitatud\nVõid nüüd [[Special:UserLogin|sisse logida]].",
        "confirmemail_loggedin": "Sinu e-posti aadress on nüüd kinnitatud.",
        "confirmemail_subject": "{{GRAMMAR:genitive|{{SITENAME}}}} e-posti aadressi kinnitamine",
-       "confirmemail_body": "Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\".\n\nKinnitamaks, et see kasutajakonto tõepoolest kuulub sulle ning e-posti teenuste aktiveerimiseks, ava oma võrgulehitsejas järgmine link:\n\n$3\n\nKui see *pole* sinu loodud konto, ava järgmine link kinnituse tühistamiseks:\n\n$5\n\nKinnituskood aegub kuupäeval $4.",
+       "confirmemail_body": "Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\".\n\nKinnitamaks, et kasutajakonto tõepoolest kuulub sulle ning et aktiveerida e-posti teenused, ava veebilehitsejas järgmine link:\n\n$3\n\nKui sa *pole* kontot registreerinud, ava järgmine link kinnituse tühistamiseks:\n\n$5\n\nKinnituskoodi aegumistähtaeg: $4.",
        "confirmemail_body_changed": "Keegi IP-aadressilt $1, ilmselt sa ise,\nmuutis {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks selle aadressi.\n\nKinnitamaks, et see konto tõepoolest kuulub sulle ja e-posti teenuste taasaktiveerimiseks, ava oma veebilehitsejas järgmine link:\n\n$3\n\nKui see *pole* sinu konto, ava järgmine link\nkinnituse tühistamiseks:\n\n$5\n\nKinnituskood aegub kuupäeval $4.",
-       "confirmemail_body_set": "Keegi, arvatavasti sina ise, IP-aadressilt $1 on {{GRAMMAR:genitive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks määranud selle aadressi.\n\nKinnitamaks, et see konto kuulub tõesti sulle ja {{GRAMMAR:genitive|{{SITENAME}}}} e-posti funktsioonide aktiveerimiseks ava võrgulehitsejas järgmine link:\n\n$3\n\nKui konto *ei* kuulu sulle, kasuta e-posti aadressi kinnituse tühistamiseks järgmist linki:\n\n$5\n\nSelle kinnituskoodi aegumistähtaeg on $4.",
+       "confirmemail_body_set": "Keegi IP-aadressilt $1, arvatavasti sina ise, on {{GRAMMAR:genitive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks määranud selle aadressi.\n\nKinnitamaks, et see konto kuulub tõesti sulle ja et aktiveerida e-posti teenused, ava võrgulehitsejas järgmine link:\n\n$3\n\nKui konto *ei* kuulu sulle, kasuta e-posti aadressi kinnituse tühistamiseks järgmist linki:\n\n$5\n\nSelle kinnituskoodi aegumistähtaeg on $4.",
        "confirmemail_invalidated": "E-posti aadressi kinnitamine tühistati",
        "invalidateemail": "E-posti aadressi kinnituse tühistamine",
        "scarytranscludedisabled": "[Vikidevaheline mallina kasutamine on keelatud]",
        "autoredircomment": "Ümbersuunamine lehele [[$1]]",
        "autosumm-new": "Uus lehekülg: '$1'",
        "autosumm-newblank": "Alustatud tühja leheküljega",
+       "size-bytes": "$1 {{PLURAL:$1|bait|baiti}}",
+       "size-pixel": "$1 {{PLURAL:$1|piksel|pikslit}}",
        "lag-warn-normal": "Viimase {{PLURAL:$1|ühe sekundi|$1 sekundi}} jooksul tehtud muudatused ei pruugi selles loendis näha olla.",
        "lag-warn-high": "Andmebaasiserveri töö viivituste tõttu ei pruugi viimase {{PLURAL:$1|ühe sekundi|$1 sekundi}} jooksul tehtud muudatused selles loendis näha olla.",
        "watchlistedit-normal-title": "Jälgimisloendi redigeerimine",
        "feedback-back": "Tagasi",
        "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
        "feedback-bugnew": "Kontrollisin. Teata uuest veast",
-       "feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanime ja teabega kasutatava võrgulehitsejaga kohta leheküljele \"[$3 $2]\".",
+       "feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanimega leheküljele \"[$3 $2]\".",
        "feedback-cancel": "Loobu",
        "feedback-close": "Valmis",
        "feedback-external-bug-report-button": "Koosta tehniline tööülesanne",
index eb2e660..e0b0ee9 100644 (file)
        "shown-title": "Erakutsi {{PLURAL:$1|emaitza $1|$1 emaitza}} orrialdeko",
        "viewprevnext": "Ikusi ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''«[[:$1]]» izena duen orri bat bada wiki honetan.''' {{PLURAL:$2|0=|Ikus, gainera, aurkitutako beste bilaketa emaitzak.}}",
-       "searchmenu-new": "'''Sortu «[[:$1]]» orria wiki honetan!''' {{PLURAL:$2|0=|Ikus, gainera, zure bilaketarekin aurkitutako orria.|Ikus, gainera, bilaketaren emaitzak.}}",
+       "searchmenu-new": "<strong>Sortu «[[:$1]]» orria wiki honetan!<strong> {{PLURAL:$2|0=|Ikus, gainera, zure bilaketarekin aurkitutako orria.|Ikus, gainera, bilaketaren emaitzak.}}",
        "searchprofile-articles": "Eduki-orriak",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Guztia",
index 8a19223..8c5c936 100644 (file)
        "actionthrottledtext": "به منظور جلوگیری از انتشار اسپم، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.\nلطفاً پس از چند دقیقه دوباره تلاش کنید.",
        "protectedpagetext": "این صفحه برای جلوگیری از ویرایش یا فعالیت دیگر محافظت شده‌است.",
        "viewsourcetext": "می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:",
-       "viewyourtext": "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
+       "viewyourtext": "می‌توانید کد مبدأ <strong>ویرایش‌هایتان</strong> در این صفحه را ببینید و کپی کنید.",
        "protectedinterface": "این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
        "editinginterface": "<strong>هشدار:</strong> صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.",
        "translateinterface": "برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
        "search-category": "(رده  $1)",
        "search-file-match": "(تشابه محتوی پرونده)",
        "search-suggest": "آیا منظورتان این بود: $1",
+       "search-rewritten": "نمایش نتایج $1. جستجوی به جای $2.",
        "search-interwiki-caption": "پروژه‌های خواهر",
        "search-interwiki-default": "نتایج از $1 :",
        "search-interwiki-more": "(بیشتر)",
        "newpageletter": "نو",
        "boteditletter": "ر",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کاربر}} پی‌گیرنده]",
-       "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید)",
+       "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید):",
        "rc_categories_any": "هر کدام از منتخب‌ها",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پس از تغییر",
        "newsectionsummary": "/* $1 */ بخش جدید",
        "upload-http-error": "یک خطای اچ‌تی‌تی‌پی رخ داد: $1",
        "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
        "upload-dialog-title": "بارگذاری پرونده",
+       "upload-dialog-error": "يک خطا اتفاق افتاد",
        "upload-dialog-warning": "یک هشدار رخ‌داد",
        "upload-dialog-button-cancel": "لغو",
        "upload-dialog-button-done": "انجام شد",
        "watchlistanontext": "برای مشاهده و ویرایش فهرست پی‌گیری‌های خود از $1 استفاده کنید.",
        "watchnologin": "به سامانه وارد نشده‌اید",
        "addwatch": "افزودن به فهرست پی‌گیری",
-       "addedwatchtext": "صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.\nتغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد.",
+       "addedwatchtext": "«[[:$1]]» و صفحهٔ بحث آن به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.",
        "addedwatchtext-short": "صفحه \" $1 \" به فهرست پیگیریهای خود اضافه شده است.",
        "removewatch": "حذف از فهرست پی‌گیری",
-       "removedwatchtext": "صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.",
+       "removedwatchtext": "صفحهٔ «[[:$1]]» و صفحهٔ بحث آن از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.",
        "removedwatchtext-short": "صفحهٔ \"$1\" از فهرست پیگیری‌های شما حذف شده‌است.",
        "watch": "پی‌گیری",
        "watchthispage": "پی‌گیری این صفحه",
        "undeletepagetext": "{{PLURAL:$1|صفحهٔ زیر حدف شده|صفحه‌های زیر حذف شده‌اند}} ولی هنوز در بایگانی {{PLURAL:$1|هست|هستند}} و {{PLURAL:$1|می‌تواند احیا شود|می‌توانند احیا شوند}}.\nاین بایگانی ممکن است هر چند وقت تمیز شود.",
        "undelete-fieldset-title": "احیای نسخه‌ها",
        "undeleteextrahelp": "برای احیای تمام تاریخچهٔ صفحه، همهٔ جعبه‌ها را خالی رها کرده و دکمهٔ '''''{{int:undeletebtn}}''''' را کلیک کنید.\nبرای انجام احیای انتخابی، جعبه‌های متناظر با نسخه‌های مورد نظر برای احیا را علامت زده و دکمهٔ '''''{{int:undeletebtn}}''''' را کلیک کنید.",
-       "undeleterevisions": "$1 Ù\86سخÙ\87 Ø¨Ø§Û\8cگاÙ\86Û\8c {{PLURAL:$1|شده‌است|شده‌اند}}",
+       "undeleterevisions": "$1 Ù\86سخÙ\87 Ø­Ø°Ù\81 {{PLURAL:$1|شده‌است|شده‌اند}}",
        "undeletehistory": "اگر این صفحه را احیا کنید، همهٔ نسخه‌های آن در تاریخچه احیا خواهند شد.\nاگر صفحهٔ جدیدی با نام یکسان از زمان حذف ایجاد شده باشد، نسخه‌های احیاشده در تاریخچهٔ قبلی خواهند آمد.",
        "undeleterevdel": "احیای صفحه‌های در حالتی که باعث حذف شدن بخشی از آخرین نسخهٔ صفحه یا پرونده بشود مقدور نیست.\nدر این حالت شما باید جدیدترین نسخهٔ حذف شده را نیز احیا کنید.",
        "undeletehistorynoadmin": "این مقاله حذف شده‌است.\nدلیل حذف این مقاله به همراه مشخصات کاربرانی که قبل از حذف این صفحه را ویرایش کرده‌اند، در خلاصهٔ زیر آمده‌است.\nمتن واقعی این ویرایش‌های حذف شده فقط در دسترس مدیران است.",
        "spam_reverting": "واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.",
        "spam_blanking": "تمام نسخه‌ها حاوی پیوند به $1 بود، در حال خالی کردن",
        "spam_deleting": "تمام نسخه‌ها حاوی پیوند به $1 بود، در حال حذف",
-       "simpleantispam-label": "بررسی ضدهرزنگاری.\nاین قسمت را پر '''نکنید'''!",
+       "simpleantispam-label": "بررسی ضدهرزنگاری.\nاین قسمت را پر <strong>نکنید</strong>!",
        "pageinfo-title": "اطلاعات در مورد «$1»",
        "pageinfo-not-current": "متأسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.",
        "pageinfo-header-basic": "اطلاعات اولیه",
        "logentry-newusers-create2": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}}",
        "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به وسیلهٔ ایمیل ارسال شد",
        "logentry-newusers-autocreate": "حساب $1  به شکل خودکار {{GENDER:$2|ایجاد شد}}",
+       "logentry-protect-move_prot": "$1 تنظیمات محافظت را از $4 به $3 {{GENDER:$2|منتقل کرد}}",
        "logentry-rights-rights": "$1 عضویت $3 را از گروه $4 به $5 {{GENDER:$2|تغییر داد}}",
        "logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
        "logentry-rights-autopromote": "$1 به طور خودکار از $4 به $5 {{GENDER:$2|ارتقاء داد}}",
index 315e8f0..9dbbee4 100644 (file)
        "tog-watchlisthidebots": "Masquer les modifications faites par des robots dans la liste de suivi",
        "tog-watchlisthideminor": "Masquer les modifications mineures dans la liste de suivi",
        "tog-watchlisthideliu": "Masquer les modifications faites par des utilisateurs inscrits dans la liste de suivi",
-       "tog-watchlisthideanons": "Masquer les modifications anonymes dans la liste de suivi",
+       "tog-watchlisthideanons": "Masquer les modifications d'utilisateurs anonymes dans la liste de suivi",
        "tog-watchlisthidepatrolled": "Masquer les modifications surveillées dans la liste de suivi",
        "tog-ccmeonemails": "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs",
        "tog-diffonly": "Ne pas afficher le contenu des pages sous les diffs",
        "tog-showhiddencats": "Afficher les catégories cachées",
-       "tog-norollbackdiff": "Ne pas afficher le diff lors d'une révocation",
+       "tog-norollbackdiff": "Ne pas afficher le diff après avoir révoqué",
        "tog-useeditwarning": "M'avertir quand je quitte une page de modification sans publier les changements",
        "tog-prefershttps": "Toujours utiliser une connexion sécurisée en étant connecté(e)",
        "underline-always": "Toujours",
        "toc": "Sommaire",
        "showtoc": "afficher",
        "hidetoc": "masquer",
-       "collapsible-collapse": "masquer",
-       "collapsible-expand": "afficher",
+       "collapsible-collapse": "Replier",
+       "collapsible-expand": "Développer",
        "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e}} ?",
        "confirmable-yes": "Oui",
        "confirmable-no": "Non",
index 6caa44d..d367e8a 100644 (file)
        "searchprofile-advanced": "Ütjwidjet",
        "searchprofile-articles-tooltip": "Schük uun $1",
        "searchprofile-images-tooltip": "Bilen schük",
-       "searchprofile-everything-tooltip": "Schük aueraal (uk diskusjuunssidjen)",
+       "searchprofile-everything-tooltip": "Schük aueraal (uk diskuschuunsidjen)",
        "searchprofile-advanced-tooltip": "Uun ööder nöömrümer schük",
        "search-result-size": "$1 ({{PLURAL:$2|1 wurd|$2 wurden}})",
        "search-result-category-size": "{{PLURAL:$1|1 sidj|$1 sidjen}} ({{PLURAL:$2|1 onerkategorii|$2 onerkategoriin}}, {{PLURAL:$3|1 datei|$3 datein}})",
        "yourvariant": "Spriak:",
        "prefs-help-variant": "Uun hün skriiwwiis skel a sidjen uunwiset wurd:",
        "yournick": "Nei signatuur:",
-       "prefs-help-signature": "Wees so gud an onerskriiw üüb diskusjuunssidjen mä „<nowiki>~~~~</nowiki>“. Diar komt do dan brükernööm an det klooktidj bi ütj.",
+       "prefs-help-signature": "Wees so gud an onerskriiw üüb diskuschuunsidjen mä „<nowiki>~~~~</nowiki>“. Diar komt do dan brükernööm an det klooktidj bi ütj.",
        "badsig": "Diar stemet wat ei mä't signatuur. Preewe at HTML.",
        "badsiglength": "Din signatuur mut ei muar üs $1 {{PLURAL:$1|tiaken|tiakens}} haa.",
        "yourgender": "Hü wel dü betiakent wurd?",
        "grouppage-suppress": "{{ns:project}}:Oversighter",
        "right-read": "Sidjen lees",
        "right-edit": "Sidjen bewerke",
-       "right-createpage": "Sidjen maage (saner diskusjuunssidjen)",
-       "right-createtalk": "Diskusjuunssidjen maage",
+       "right-createpage": "Sidjen maage (saner diskuschuunsidjen)",
+       "right-createtalk": "Diskuschuunsidjen maage",
        "right-createaccount": "Brükerkonto iinracht",
        "right-minoredit": "Feranrangen üs letj kääntiakne",
        "right-move": "Sidjen fersküüw",
        "right-purge": "Sidjen-cache leesag maage saner efterfraagin",
        "right-autoconfirmed": "Ei troch IP-limits beskäären",
        "right-bot": "Automatisiaret bewerke",
-       "right-nominornewtalk": "Letj feranrangen üüb diskusjuunssidjen wurd ei üs „nei noorachten“ uunwiset.",
+       "right-nominornewtalk": "Letj feranrangen üüb diskuschuunsidjen wurd ei üs „nei bööd“ uunwiset.",
        "right-apihighlimits": "Huuger taalen für API-uunfraagen brük",
        "right-writeapi": "Write-API brük",
        "right-delete": "Sidjen strik",
        "action-read": "jüdeer sid leese",
        "action-edit": "detdiar sidj tu bewerkin",
        "action-createpage": "nei sidjen tu maagin",
-       "action-createtalk": "diskusjuunssidjen maage",
+       "action-createtalk": "diskuschuunsidjen maage",
        "action-createaccount": "jüdeer brükerkonto mååge",
        "action-history": "di ferluup faan detdiar sidj uuntulukin.",
        "action-minoredit": "detdiar feranrang üs letj kääntiakne",
        "statistics-header-hooks": "Ööder statistiken",
        "statistics-articles": "Artiikler",
        "statistics-pages": "Sidjen",
-       "statistics-pages-desc": "Aal a sidjen uun det wiki, mä diskusjuunssidjen, widjerfeerangen asw.",
+       "statistics-pages-desc": "Aal a sidjen uun det wiki, mä diskuschuunsidjen, widjerfeerangen ...",
        "statistics-files": "Huuchschüürd datein",
        "statistics-edits": "Feranrangen, sant {{SITENAME}} maaget wurden as",
        "statistics-edits-average": "Feranrangen per sidj uun't madel",
        "move-page-legend": "Sidj fersküüw",
        "movepagetext": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjerfeer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
        "movepagetext-noredirectfixer": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjer feer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
-       "movepagetalktext": "Uk det diskusjuunssidj woort fersköwen, wan det diar as, '''oober ei, wan:'''\n*Diar al en diskusjuunssidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskusjuunssidjen faan hun tuupfeer.\n\nDreeg di '''nei''' tiitel bi '''ööder sidj''' iin, an diaroner '''en grünj''' för't amnäämen.",
+       "movepagetalktext": "Uk det diskuschuunsidj woort fersköwen, wan det diar as, <strong>oober ei, wan:</strong>\n*Diar al en diskuschuunsidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskuschuunsidjen faan hun tuupfeer.",
        "movearticle": "Sidj fersküüw:",
        "moveuserpage-warning": "'''Paase üüb:''' Dü wel en brükersidj fersküüw. Seenk diaram, dat bluas det brükersidj amnäämd woort, oober '''ei''' di brüker. Hi behäält san ual nööm.",
        "movecategorypage-warning": "<strong>Paase üüb:</strong> Dü wel jüst en kategoriisidj fersküüw. Seenk diaram, dat bluas det sidj fersköwen woort. A sidjen uun det kategorii wurd <em>ei</em> nei kategorisiaret.",
        "tags-deactivate-reason": "Grünj:",
        "tags-deactivate-not-allowed": "Dü könst det markiarang \"$1\" ei de-aktiwiare.",
        "tags-deactivate-submit": "De-aktiwiare",
+       "tags-edit-title": "Markiarangen bewerke",
+       "tags-edit-manage-link": "Markiarangen ferwalte",
+       "tags-edit-existing-tags": "Markiarangen:",
+       "tags-edit-existing-tags-none": "\"Nianen\"",
+       "tags-edit-new-tags": "Nei markiarangen:",
+       "tags-edit-add": "Jodiar markiarangen diartusaat:",
+       "tags-edit-remove": "Jodiar markiarangen wechnem:",
+       "tags-edit-remove-all-tags": "(aal a markiarangen wechnem)",
+       "tags-edit-chosen-placeholder": "Enkelt markiarangen ütjschük",
+       "tags-edit-chosen-no-results": "Sok markiarangen ei fünjen",
+       "tags-edit-reason": "Grünj:",
+       "tags-edit-nooldid-title": "Nian werjuun uunden",
        "comparepages": "Sidjen ferglik",
        "compare-page1": "Sidj 1",
        "compare-page2": "Sidj 2",
        "htmlform-cloner-create": "Muar diartudu",
        "htmlform-cloner-delete": "Wechnem",
        "htmlform-cloner-required": "Dü skel tumanst ään wäärs uundu.",
+       "htmlform-title-not-exists": "[[:$1]] jaft at ei.",
+       "htmlform-user-not-exists": "<strong>$1</strong> jaft at ei.",
+       "htmlform-user-not-valid": "<strong>$1</strong> as nään tuläät brükernööm",
        "sqlite-has-fts": "Werjuun $1 mä halep för't schüken uun di hialer tekst.",
        "sqlite-no-fts": "Werjuun $1 saner halep för't schüken uun di hialer tekst.",
        "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "seenkstreg",
        "special-characters-title-emdash": "speegelstreg",
-       "special-characters-title-minus": "minus tiaken"
+       "special-characters-title-minus": "minus tiaken",
+       "mw-widgets-dateinput-no-date": "Nian dootem ütjsoocht",
+       "mw-widgets-titleinput-description-new-page": "sidj jaft at noch ei",
+       "mw-widgets-titleinput-description-redirect": "widjerfeerang tu $1"
 }
index 006d7a3..87b9415 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|páxina|páxinas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador recente|colaboradores recentes}}",
        "badretype": "Os contrasinais que inseriu non coinciden.",
+       "usernameinprogress": "Xa está en marcha a creación dunha conta para este nome de usuario.\nPor favor, agarde.",
        "userexists": "O nome de usuario que inseriu xa está en uso.\nEscolla un nome diferente.",
        "loginerror": "Erro ao acceder ao sistema",
        "createacct-error": "Erro ao crear a conta",
        "blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
        "clearyourcache": "'''Nota:''' Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* '''Firefox/Safari:''' Prema ''Maiúsculas'' á vez que en ''Recargar'', ou prema en ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' nos Mac)\n* '''Google Chrome:''' Prema en ''Ctrl-Maiús-R'' (''⌘-Maiús-R'' nos Mac)\n* '''Internet Explorer:''' Prema ''Ctrl'' ao tempo que fai clic en ''Refrescar'', ou prema en ''Ctrl-F5''\n* '''Opera:''' Limpe a súa memoria caché en ''Ferramentas → Preferencias''",
        "usercssyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo CSS antes de gardalo.",
-       "userjsyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo JS antes de gardalo.",
+       "userjsyoucanpreview": "<strong>Nota:</strong> Use o botón \"{{int:showpreview}}\" para verificar o novo JavaScript antes de gardalo.",
        "usercsspreview": "'''Lembre que só está vendo a vista previa do seu CSS de usuario.'''\n'''Este aínda non foi gardado!'''",
        "userjspreview": "'''Lembre que só está probando/previsualizando o seu JavaScript de usuario.'''\n'''Este aínda non foi gardado!'''",
        "sitecsspreview": "'''Lembre que só está vendo a vista previa deste CSS.'''\n'''Este aínda non foi gardado!'''",
        "sitejspreview": "'''Lembre que só está vendo a vista previa deste código JavaScript.'''\n'''Este aínda non foi gardado!'''",
-       "userinvalidcssjstitle": "'''Aviso:''' Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Foo/vector.css\" no canto de \"{{ns:user}}:Foo/Vector.css\".",
+       "userinvalidcssjstitle": "<strong>Aviso:</strong> Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Exemplo/vector.css\" no canto de \"{{ns:user}}:Exemplo/Vector.css\".",
        "updated": "(Actualizado)",
        "note": "'''Nota:'''",
        "previewnote": "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''",
        "default": "predeterminado",
        "prefs-files": "Ficheiros",
        "prefs-custom-css": "CSS personalizado",
-       "prefs-custom-js": "JS personalizado",
-       "prefs-common-css-js": "CSS/JS compartido por todas as aparencias:",
+       "prefs-custom-js": "JavaScript personalizado",
+       "prefs-common-css-js": "CSS/JavaScript compartido por todas as aparencias:",
        "prefs-reset-intro": "Pode usar esta páxina para restablecer as súas preferencias ás que veñen dadas por defecto.\nEste cambio non se poderá desfacer.",
        "prefs-emailconfirm-label": "Confirmación do correo:",
        "youremail": "Correo electrónico:",
        "noindex-category-desc": "A páxina non está indexada polos bots porque contén a palabra máxica <code><nowiki>__NOINDEX__</nowiki></code> e está nun espazo de nomes no que esa marca está permitida.",
        "index-category-desc": "A páxina contén a palabra máxica <code><nowiki>__INDEX__</nowiki></code> (e está nun espazo de nomes no que esa marca está permitida) e, polo tanto, será indexada polos bots cando non debera selo normalmente.",
        "post-expand-template-inclusion-category-desc": "O tamaño da páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir todos os modelos; algúns modelos non se expandiron.",
-       "post-expand-template-argument-category-desc": "A páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir o argumento dun modelo (algo entre chaves triples, como <code>{{{Proba}}}</code>).",
+       "post-expand-template-argument-category-desc": "A páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir o argumento dun modelo (algo entre chaves triples, como <code>{{{Exemplo}}}</code>).",
        "expensive-parserfunction-category-desc": "A páxina utiliza demasiadas funcións analíticas custosas (como <code>#ifexist</code>). Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "A páxina contén unha ligazón de ficheiro rota (unha ligazón para incorporar un ficheiro que non existe).",
        "hidden-category-category-desc": "A categoría contén a palabra máxica <code><nowiki>__HIDDENCAT__</nowiki></code>, que impide que se mostre por defecto na caixa de categorías das páxinas.",
        "logentry-newusers-create2": "$1 {{GENDER:$2|creou}} a conta de usuario $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|creou}} a conta de usuario $3; o contrasinal enviouse por correo electrónico",
        "logentry-newusers-autocreate": "A conta de {{GENDER:$2|usuario|usuaria}} $1 creouse automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|trasladou}} a protección de \"$4\" a \"$3\"",
        "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3",
        "logentry-rights-autopromote": "$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5",
        "json-warn-trailing-comma": "{{PLURAL:$1|Eliminouse $1 coma final|Elimináronse $1 comas finais}} do JSON.",
        "json-error-unknown": "Houbo un problema co JSON. Erro: $1",
        "json-error-depth": "Superouse o número máximo de ficheiros apartados.",
-       "json-error-state-mismatch": "O JSON non é válido.",
+       "json-error-state-mismatch": "O JSON non é válido ou ten un formato incorrecto",
        "json-error-ctrl-char": "Produciuse un erro de carácter de control, trátase probablemente dun problema de codificación.",
        "json-error-syntax": "Erro de sintaxe",
        "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
index c7006d3..9fd07d3 100644 (file)
        "savearticle": "Syte spychere",
        "preview": "Vorschou",
        "showpreview": "Vorschau aaluege",
-       "showdiff": "Zeig Änderige",
+       "showdiff": "Änderige zeige",
        "blankarticle": "<strong>Warnig:</strong> D Syte, wu Du aalaisch, isch läär.\nWänn Du nomol uf „{{int:savearticle}}“ klicksch, wird d Syte ohni Inhalt aaglait.",
        "anoneditwarning": "<strong>Warnig:</strong> Du bisch nit aagmäldet. Dy IP-Adräss wird effetli sichtbar, wänn Du Bearbeitige machsch. Wänn di <strong>[$1 aamälde duesch]</strong> oder <strong>[$2 e Benutzerkonto aalaisch]</strong>, wäre Bearbeitige zämme mit andere Bytreg Dym Nenutzername zuegordnet.",
        "anonpreviewwarning": "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''",
        "missingsummary": "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.",
+       "selfredirect": "<strong>Obacht:</strong> Du bisch die Syten uf sech sälber am Wyterleite.\nVilech hesch für d Wyterleitig ds falsche Zil y’gä, oder vilech bisch di falschi Syten am bearbeite.\nWe d’ nomal «{{int:savearticle}}» kliksch, de wird d Wyterleitig einewäg agleit.",
        "missingcommenttext": "Bitte gib Dyy Kommentar unte yy.",
        "missingcommentheader": "'''ACHTIG:''' Du hesch kei Iberschrift im Fäld „Betreff:“ yygee. Wänn nomol uf „{{int:savearticle}}“ drucksch, wird Dyyni Bearbeitig ohni Iberschrift gspicheret.",
        "summary-preview": "Vorschou vor Zämefassig:",
        "subject-preview": "Vorschau vum Betreff:",
+       "previewerrortext": "Es het e Fähler ’gä bim Versuech, e Vorschou vo dynen Änderige z zeige.",
        "blockedtitle": "Benutzer isch gsperrt.",
        "blockedtext": "'''Dyy Benutzername oder Dyyni IP-Adräss isch gsperrt wore.'''\n\nD Sperrig isch vu $1 uusgfiert wore.\nAs Grund isch ''$2'' aagee wore.\n\n* Aafang vu dr Sperrig: $8\n* Ändi vu dr Sperrig: $6\n* Sperrig betrifft: $7\n\nDu chasch $1 oder e andere [[{{MediaWiki:Grouppage-sysop}}|Ammann]] kontaktiere go dischpetiere iber die Sperrig.\nDu chasch d „E-Mail an dää Benutzer“-Funktion nit bruche, solang kei giltigi E-Mail-Adräss in Dyyne [[Special:Preferences|Benutzerkonto-Yystellige]] yydrait isch, oder solang die Funktion fir Di gsperrt isch.\nDyy aktuälli IP-Adräss isch $3, un d Sperr-ID isch #$5.\nBitte fieg in jedi Aafrog, wu du stellsch, alli Information yy.",
        "autoblockedtext": "Dyyni IP-Adräss isch automatisch gsperrt wore, wel si vu me andere Benutzer brucht woren isch, wu dur $1 gsperrt woren isch.\nAs Grund isch aagee wore:\n\n:''$2''\n\n* Aafang vu dr Sperri: $8\n* Änd vu dr Sperri: $6\n* Sperre betrifft: $7\n\nDu chasch $1 oder ein vu dr andre [[{{MediaWiki:Grouppage-sysop}}|Ammanne]] kontaktiere, zum iber die Sperri z diskutiere.\n\nDu chasch d „E-Mail an dää Benutzer“-Funktion nit nutze, solange kei giltigi E-Mail-Adräss in Dyne  [[Special:Preferences|Benutzerkonto-Yystellige]] yytrait isch oder die Funktion fir di gsperrt woren isch.\n\nDyy aktuäll IP-Adräss isch $3, un d Sperr-ID isch $5.\nBitte fieg alli Informatione jedere Aafrog zue, wu Du stellsch.",
        "yourdiff": "Unterschid",
        "copyrightwarning": "'''Bitte <big>kopier kener Internetsyte</big>, wo nid dyner eigete sy, bruuch <big>kener urhäberrächtlech gschützte Wärch</big> ohni Erloubnis vor Copyright-Inhaberschaft!'''<br />\nHiemit gisch du zue, das du dä Tekscht '''sälber gschribe''' hesch, das der Tekscht Allgmeinguet ('''public domain''') isch, oder das der '''Copyright-Inhaberschaft''' iri '''Zuestimmig''' het 'gä. Falls dä Tekscht scho nöumen anders isch veröffentlecht worde, de schryb das bitte uf d Diskussionssyte.\n<i>Bis dir bewusst, dass alli {{SITENAME}}-Byträg outomatisch under der „$2“ stöh (für Details vgl. $1). We du nid wosch, das anderi dy Bytrag chöu veränderen u wyterverbreite, de drück nid uf „Syte spychere“.</i>",
        "copyrightwarning2": "Dängge Si dra, dass alli Änderige {{GRAMMAR:dativ {{SITENAME}}}} vo andere Benutzer wider gänderet oder glöscht chönne wärde. Wenn Si nit wänn, dass ander Lüt an Ihrem Tekscht ummedoktere denn schicke Si ihn jetz nit ab.<br />\nSi verspräche uns usserdäm, dass Si des alles selber gschribe oder vo nere Quälle kopiert hen, wo Public Domain odr sunscht frei isch (lueg $1 für Details).\n'''SETZE SI DO OHNI ERLAUBNIS KEINI URHEBERRÄCHTLICH GSCHÜTZTI WÄRK INE!'''",
+       "editpage-cannot-use-custom-model": "Ds Inhaltsmodäll vo dere Syte lat sech nid la ändere.",
        "longpageerror": "'''Fähler: Dä Täxt, wu Du spychere wit, isch {{PLURAL:$1|ei Kilobyte|$1 Kilobyte}} groß. Des isch greßer wie s erlaubt Maximum vu {{PLURAL:$2|eim Kilobyte|$2 Kilobyte}}.''' S Spychere isch nit megli.",
        "readonlywarning": "'''Achtig: D Datebank isch fir Wartigsarbete gesperrt. Wäge däm chenne Dyyni Änderige im Momänt nit gspycheret wäre.\nSichere de Täxt bitte lokal uf Dyynem Computer un versuech speter nomol, d Änderige z ibertrage.'''\n\nGrund fir d Sperri: $1",
        "protectedpagewarning": "'''WARNIG: Die Syten isch gsperrt wore, ass si nume Benutzer mit Administrator-Rächt chenne verändere.'''\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
        "semiprotectedpagewarning": "'''Obacht''': Die Syte isch halb gsperrt, ass si nume vu aagmäldete Benutzer cha bearbeitet wäre.\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
-       "cascadeprotectedwarning": "'''ACHTIG: Die Syte isch gsperrt. Wäg däm cha si nume vu Benutzer mit Ammannerächt bearbeitet wäre. Si isch in die {{PLURAL:$1|Syte|Syte}} yybunde, wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:'''",
+       "cascadeprotectedwarning": "<strong>Obacht:</strong> Die Syten isch gschützt. Nume Lüt mit Administrationsrächt (Ammannen oder -froue) chöü sen ändere. Der Grund derfür isch, das si i di {{PLURAL:$1|folgendi|folgende}} Syten isch y’bunde, wo mit ere Kaskadesperroption gschützt {{PLURAL:$1|isch|sy}}:",
        "titleprotectedwarning": "'''Obacht: S Aalege vu däre Syte isch gsperrt. Wäg däm bruucht mer [[Special:ListGroupRights|bstimmti Rächt]] go si aalege.'''\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
        "templatesused": "{{PLURAL:$1|Vorlag, wu in däm Artikel brucht wird|Vorlage, wu in däm Artikel brucht wäre}}:",
        "templatesusedpreview": "{{PLURAL:$1|Vorlag, wu in däre Vorschau brucht wird|Vorlage, wu in däre Vorschau brucht wäre}}:",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Läärs Objekt",
+       "content-json-empty-array": "Läären Array",
+       "duplicate-args-warning": "<strong>Obacht:</strong> D Syte [[:$1]] rüefft [[:$2]] ab. Im Abrueff het der Parameter «$3» meh weder ei Wärt. Nume der letst Wärt chunt zum Zug.",
        "duplicate-args-category": "Syte, wu doppleti Argumänt in Vorlagenufruef verwände",
        "duplicate-args-category-desc": "Uf dr Syte het s Vorlagenufruef, wu Duplikat vu Argumänt verwände, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.\n\nS {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.",
        "history-feed-description": "Versionsgschicht fir die Syte in {{SITENAME}}",
        "history-feed-item-nocomment": "$1 um $2",
        "history-feed-empty": "Di aagforderet Syte git s nid. Villicht isch si glescht oder verschobe wore. [[Special:Search|Suech]] {{SITENAME}} fir neji Syte, wu passe.",
+       "history-edit-tags": "Markierige vo usgwählte Versionen ändere",
        "rev-deleted-comment": "(Zämmefassig uusegnuh)",
        "rev-deleted-user": "(Benutzername uusegnuh)",
-       "rev-deleted-event": "(Logbuechaktion uusegnuh)",
+       "rev-deleted-event": "(Logbuechdetails uusegnuh)",
        "rev-deleted-user-contribs": "[Benutzername oder IP-Adräss uusegnuu - Bearbeitig in dr Byytragslischt versteckt]",
        "rev-deleted-text-permission": "Die Version isch '''glescht''' wore.\nInformation zue dr Leschig un e Begrindig het s im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech].",
        "rev-suppressed-text-permission": "Die Version isch <strong>unterdruckt</strong> wore.\nEinzelheite het s im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuech].",
        "rev-showdeleted": "zeig",
        "revisiondelete": "Versione lesche/widerherstelle",
        "revdelete-nooldid-title": "Kei Version aagee",
-       "revdelete-nooldid-text": "Du hesch entwäder kei Version aagee, wu die Aktion soll usgfiert wäre, die usgwehlt Version git s nid oder Du versuechsch di aktuäll Version z verstecke.",
+       "revdelete-nooldid-text": "Entweder hesch kei Zilversion usgwählt, für die Funktion drann uszfüere, oder di usgwählti Zilversion git’s nid oder du probiersch, di aktuelli Version z verstecke.",
        "revdelete-no-file": "D Datei, wu Du aagee hesch, git s nit.",
        "revdelete-show-file-confirm": "Bisch sicher, ass Du di glescht Version vu dr Datei „<nowiki>$1</nowiki>“ vum $2 am $3 witt aaluege?",
        "revdelete-show-file-submit": "Jo",
        "revdelete-legend": "Setze vu dr Sichtbarkeits-Yyschränkige",
        "revdelete-hide-text": "Täxt vu dr Version versteckle",
        "revdelete-hide-image": "Bildinhalt versteckle",
-       "revdelete-hide-name": "Logbuech-Aktion versteckle",
+       "revdelete-hide-name": "Zil u Parameter verstecke",
        "revdelete-hide-comment": "Bearbeitigskommentar versteckle",
        "revdelete-hide-user": "Benutzername/d IP vum Bearbeiter versteckle",
        "revdelete-hide-restricted": "Date vu Ammanne glyych unterdrucke wie vu andere",
        "mergehistory-empty": "S chenne kei Versione zämegfierd wäre.",
        "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versione}} vu „[[:$1]]“ isch no „[[:$2]]“ zämegfierd.",
        "mergehistory-fail": "Zämefierig vu dr Versione nid megli, bitte prief d Syte un d Zytaagobe.",
+       "mergehistory-fail-toobig": "D Versionsgschichte lö sech nid la zämefüere, wil me meh weder ds Limit {{PLURAL:$1|eire Version|$1 Versione}} müesst verschiebe.",
        "mergehistory-no-source": "Ursprungssyte „$1“ isch nit vorhande.",
        "mergehistory-no-destination": "Ziilsyte „$1“ isch nit vorhande.",
        "mergehistory-invalid-source": "Ursprungssyte muess e giltige Sytename syy.",
        "editundo": "rückgängig",
        "diff-empty": "(kei Unterschid)",
        "diff-multi-sameuser": "({{PLURAL:$1|E Version vum nämlige Benutzer, wu derzwische lyt, wird|$1 Versione vum nämlige Benutzer, wu derzwische lige, wäre}} nit aazeigt)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Ei Version|$1 Versione}} derzwüsche vo {{PLURAL:$2|öpper anderem|$2 andernen}} isch nid azeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ei Version|$1 Versione}} vu meh {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt un nit aazeigt wird|wu derzwische lige un nit aazeigt wäre}})",
        "difference-missing-revision": "{{PLURAL:$2|Ei Version|$2 Versione}} vui däre Unterschidsaazeig ($1) {{PLURAL:$2|isch|sin}} nit gfunde wore.\n\nDää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.\nEinzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.",
        "searchresults": "Suech-Ergäbnis",
        "notextmatches": "Kei Iberyystimmige mit Inhalte",
        "prevn": "{{PLURAL:$1|vorige|vorigi $1}}",
        "nextn": "{{PLURAL:$1|nächschte|nächschti $1}}",
+       "prev-page": "vorderi Syte",
+       "next-page": "nächsti Syte",
        "prevn-title": "{{PLURAL:$1|Vorig Ergebnis|Vorigi $1 Ergebnis}}",
        "nextn-title": "{{PLURAL:$1|Negscht Ergebnis|Negschti $1 Ergebnis}}",
        "shown-title": "Zeig $1 {{PLURAL:$1|Ergebnis|Ergebnis}} pro Syte",
        "search-result-category-size": "{{PLURAL:$1|1 Kategorii|$1 Kategorie}} ({{PLURAL:$2|1 Unterkategorii|$2 Unterkategorie}}, {{PLURAL:$3|1 Datei|$3 Dateie}})",
        "search-redirect": "(Wyterleitig $1)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
+       "search-file-match": "(Resultat us em Inhalt vo Dateie)",
        "search-suggest": "Hesch „$1“ gmeint?",
+       "search-rewritten": "Resultat für $1 sy azeigt. Würklech nach $2 sueche.",
        "search-interwiki-caption": "Schweschterprojäkt",
-       "search-interwiki-default": "$1 Ergebniss:",
+       "search-interwiki-default": "Ergäbnis us $1:",
        "search-interwiki-more": "(meh)",
        "search-relatedarticle": "Verwandti",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
+       "showingresultsinrange": "Uf der Liste {{PLURAL:$1|isch <strong>ei</strong> Kategorie|sy <strong>$1</stong> Kategorië}} vo Nummere <strong>$2</strong> bis <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Ergebnis <strong>$1</strong> vu <strong>$3</strong>|Ergebnis <strong>$1 bis $2</strong> vu <strong>$3</strong>}}",
        "search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
        "powersearch-legend": "Erwytereti Suech",
        "powersearch-togglelabel": "Wehl uus:",
        "powersearch-toggleall": "Alli",
        "powersearch-togglenone": "Keini",
+       "powersearch-remember": "Uswahl für zuekünftigi Suechine merke",
        "search-external": "Externi Suech",
        "searchdisabled": "D {{SITENAME}}-Suech isch deaktiviert. Du chasch mit Google sueche, s cha aber syy ass dr Suechindex vu Google fir {{SITENAME}} veraltet isch.",
        "search-error": "Bi dr Suechi het s e Fähler gee: $1",
        "preferences": "Yystellige",
        "mypreferences": "Yystellige",
        "prefs-edits": "Aazahl vu dr Bearbeitige:",
+       "prefsnologintext2": "Bitte mäld di a, für Ystellige z ändere.",
        "prefs-skin": "Benutzeroberflechi",
        "skin-preview": "Vorschou",
        "datedefault": "kei Aagab",
        "prefs-personal": "Benutzerdate",
        "prefs-rc": "Letschti Änderige",
        "prefs-watchlist": "Beobachtigslischte",
+       "prefs-editwatchlist": "Beobachtigslisten ändere",
+       "prefs-editwatchlist-label": "Yträg uf dyre Beobachtigslisten ändere:",
+       "prefs-editwatchlist-edit": "Normal bearbeite",
+       "prefs-editwatchlist-raw": "Imene groosse Textfäld bearbeite",
+       "prefs-editwatchlist-clear": "Beobachtigsliste lääre",
        "prefs-watchlist-days": "Aazahl vu dr Täg, wu d Beobchtigslischt standardmässig soll umfasse:",
        "prefs-watchlist-days-max": "Maximal {{PLURAL:$1|ei Tag|$1 Täg}}",
        "prefs-watchlist-edits": "Maximali Zahl vu dr Yyträg:",
        "prefs-help-signature": "Byyträg uf Diskussionssyte sotte mit „<nowiki>~~~~</nowiki>“ unterschribe wäre, was derno in d Unterschrift mit eme Zytstämpfel umgwandlet wird.",
        "badsig": "Dr Syntax vu dr Signatur isch nid giltig; bitte d HTML iberpriefe.",
        "badsiglength": "Dyyni Unterschrift isch z lang. Si derf hegschtens $1 {{PLURAL:$1|Zeiche|Zeiche}} lang syy.",
-       "yourgender": "Wie witt gärn bschribe wäre?",
-       "gender-unknown": "Ich wett doderzue kei Aagab mache",
-       "gender-male": "Är schafft an Syte",
-       "gender-female": "Si schafft an Syte",
+       "yourgender": "Wie sölle Systemmäldigen über di brichte?",
+       "gender-unknown": "I’re müglechst gschlächstneutrale Form. – Byspil: «'''∅''' ''Musterperson'' het d Syte bearbeitet», «Bearbeitig (vo ''Musterperson'')», «'''si/är''' het gschribe», «öpper».",
+       "gender-male": "Im Maskulinum – Byspil: «'''Der''' ''Max Musterma'' het d Syte bearbeitet», «'''syni''' Bearbeitig», «'''är''' het gschribe», «Benutz'''er'''».",
+       "gender-female": "Im Femininum – Byspil: «'''D''' ''Frida Musterfrou'' het d Syte bearbeitet», «'''iri''' Bearbeitig», «'''si''' het gschribe», «Benutzer'''in'''».",
        "prefs-help-gender": "Optional: bruucht fir gschlächtsspezifischi Adrässierig dur d Software. Die Information isch effentlig.\n\nDes isch e frejwilligi Aagab. D Software brucht si go Di aarede un as Hiiwys fir anderi dur d Verwändig vum grammatische Gschlächt. Die Information isch effetli.",
        "email": "E-Mail",
-       "prefs-help-realname": "* <strong>Dyy ächte Name</strong> (optional): Wänn du wetsch, ass Dyyni Änderige uf Dii chenne zruckgfierd wäre.",
+       "prefs-help-realname": "Der ächt Namen isch optional.\nWe d’nen agisch, de lö sech dyni Byträg uf di la zrüggfüere.",
        "prefs-help-email": "D Aagab vun ere E-Mail isch optional, macht aber s Zueschicke vun eme Ersatzpasswort meglig, wänn Du dyy Passwort vergässe hesch.",
        "prefs-help-email-others": "Mit andere Benutzer chasch au iber d Benutzerdiskussionssyte Kontakt ufneh, ohne dass Du dyy Identitet muesch uffelege.",
        "prefs-help-email-required": "S brucht e giltigi E-Mail-Adräss.",
        "prefs-dateformat": "Datumsformat",
        "prefs-timeoffset": "Zytunterschid",
        "prefs-advancedediting": "Allgmeini Optione",
+       "prefs-editor": "Bearbeitigsfänster",
+       "prefs-preview": "Vorschou",
        "prefs-advancedrc": "Erwytereti Optione",
        "prefs-advancedrendering": "Erwytereti Optione",
        "prefs-advancedsearchoptions": "Erwytereti Optione",
        "prefs-advancedwatchlist": "Erwytereti Optione",
        "prefs-displayrc": "Aazeigoptione",
        "prefs-displaywatchlist": "Aazeigoptione",
+       "prefs-tokenwatchlist": "Schlüssel für persönleche Webfeed",
        "prefs-diffs": "Versionsverglych",
+       "prefs-help-prefershttps": "Die Ystellig würkt sech uus, we du di ds nächste Mal amäldisch.",
+       "prefswarning-warning": "Du hesch Ystellige g’änderet wo no nid gspycheret sy.\nWe du die Syte verlasch, ohni uf «$1» z drücke, de gö die Änderige verlore.",
+       "prefs-tabs-navigation-hint": "Tipp: Mit der linggen u der rächte Pfyltaste chasch zwüsche de Tabs wächsle.",
        "email-address-validity-valid": "Siht giltig uus",
        "email-address-validity-invalid": "S brucht e giltigi Adräss!",
        "userrights": "Benutzerrächtsverwaltig",
        "userrights-lookup-user": "Verwalt d Gruppezuegherigkeit",
        "userrights-user-editname": "Benutzername:",
        "editusergroup": "Ändere vo Benutzerrächt",
-       "editinguser": "Am Ändere vu dr Benutzerrächt vu '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Bearbeit d Gruppezuegherigkeit vum Benutzer",
-       "saveusergroups": "Spychere d Gruppezuegherigkeit",
+       "editinguser": "{{GENDER:$1|Em <strong>[[User:$1|$1]]</strong> $2 syni Rächt|Der <strong>[[User:$1|$1]]</strong> $2 iri Rächt|Rächt vo <strong>[[User:$1|$1]]</strong> $2}} bearbeite",
+       "userrights-editusergroup": "Gruppezuegherigkeit bearbeite",
+       "saveusergroups": "Gruppezuegherigkeit spychere",
        "userrights-groupsmember": "Mitgliid vu:",
        "userrights-groupsmember-auto": "Automatisch Mitglid vu:",
-       "userrights-groups-help": "Du chasch d Gruppezuegherigkeit fir dää Benutzer ändere:\n* E markiert Chäschtli bedytet, ass dr Benutzer Mitgliid vu däre Gruppe isch\n* E * bedytet, ass Du s Benutzerrächt nit wider chasch zruckneh, wänn s erteilt isch (oder umgchehrt).",
+       "userrights-groups-help": "Du chasch {{GENDER:$1|däm Benutzer syni|dere Benutzerin iri|dere Person iri}} Gruppezueghörigkeit ändere:\n* Es markierts Chästli bedütet, das {{GENDER:$1|der Benutzer|d Benutzerin|d Person}} zur Gruppe ghört.\n* Es nid markierts Chästli bedütet, das {{GENDER:$1|der Benutzer|d Benutzerin|d Person}} nid zur Gruppe ghört.\n* Es Stärnli «*» nach emne Gruppename zeigt a, das du die Gruppezueghörigkeit zwar chasch ändere, aber das du ein Änderig nümm chasch rückgängig mache.",
        "userrights-reason": "Grund:",
        "userrights-no-interwiki": "Du hesch nit d Berächtigung, Benutzerrächt in andere Wiki z ändere.",
        "userrights-nodatabase": "D Datebank $1 git s nit oder si isch nit lokal.",
        "userrights-notallowed": "Du hesch nit d Berächtigung zum Benutzerrächt vergee oder ewägnee.",
        "userrights-changeable-col": "Gruppezuegherigkeit, wu Du chasch ändere",
        "userrights-unchangeable-col": "Gruppezuegherigkeit, wu Du nit chasch ändere",
+       "userrights-conflict": "Di veränderete Rächt göh nid uuf! Bitte lueg d Änderige düren u tue se nomal spychere.",
+       "userrights-removed-self": "Du hesch dir di eigete Rächt erfolgrych furtgnoh. Drum hesch kei Zuegriff meh uf die Syte.",
        "group": "Grupp:",
        "group-user": "Benutzer",
        "group-autoconfirmed": "Bstetigti Benutzer",
        "right-move": "Syte verschiebe",
        "right-move-subpages": "Syte verschiebe mitsamt dr Untersyte",
        "right-move-rootuserpages": "Haupt-Benutzersyte verschiebe",
+       "right-move-categorypages": "Kategoriesyte verschiebe",
        "right-movefile": "Dateie verschiebe",
        "right-suppressredirect": "Bim Verschiebe s Aalege vun ere Wyterleitig unterdrucke",
        "right-upload": "Dateie uffelade",
        "right-deletedtext": "Gleschti Text un Versionsunterschid zwische gleschte Versionen aaluege",
        "right-browsearchive": "Gleschti Syte sueche",
        "right-undelete": "Syte widerherstelle",
-       "right-suppressrevision": "Versione, wu au vor Ammanne verborge sin, aaluege un widerherstelle",
+       "right-suppressrevision": "Bestimmti Versione vor allne Lüt verstecke, wider füre holen oder aluege.",
+       "right-viewsuppressed": "Vor allne Lüt versteckti Versionen aluege",
        "right-suppressionlog": "Privati Logbiecher aaluege",
        "right-block": "Benutzer sperre (Schrybrächt)",
        "right-blockemail": "Benutzer am Verschicke vu E-Mail hindere",
        "right-proxyunbannable": "Uusnahm vu automatische Proxysperrine",
        "right-unblockself": "Sich sälber entsperre",
        "right-protect": "Syteschutzstatus änderen un kaskadegschitzti Syte bearbeite",
-       "right-editprotected": "Gschitzti Syte bearbeite (ohni Kaskadeschutz)",
+       "right-editprotected": "Mit «{{int:protect-level-sysop}}» gschützti Syten ändere",
+       "right-editsemiprotected": "Mit «{{protect-level-autoconfirmed}}» gschützti Syten ändere",
+       "right-editcontentmodel": "Inhaltsmodäll vo’re Syten ändere",
        "right-editinterface": "Benutzerinterface bearbeite",
        "right-editusercssjs": "Bearbeite vu CSS- und JS-Dateie vu andere Benutzer",
        "right-editusercss": "Bearbeite vu CSS-Dateie vu andere Benutzer",
        "right-edituserjs": "Bearbeite vu JS-Dateie vu andere Benutzer",
+       "right-editmyusercss": "Dyni eigete CSS-Dateien ändere",
        "right-rollback": "D Bearbeitige vum letschte Benutzer, wu ne einzelni Syte bearbeitet het, schnell zrucksetze",
        "right-markbotedits": "Schnell zruckgsetzti Bearbeitige as Bot-Bearbeitig markiere",
        "right-noratelimit": "Kei Bschränkig dur Limit",
index 6873f85..01809a4 100644 (file)
@@ -29,7 +29,8 @@
                        "Matanya",
                        "GilCahana",
                        "Ldorfman",
-                       "LaG roiL"
+                       "LaG roiL",
+                       "Eraab"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "tog-numberheadings": "מספור כותרות אוטומטי",
        "tog-showtoolbar": "הצגת סרגל העריכה",
        "tog-editondblclick": "עריכת דפים בלחיצה כפולה",
-       "tog-editsectiononrightclick": "עריכת פסקאות באמצעות לחיצה ימנית על כותרות הפסקאות",
-       "tog-watchcreations": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×\99צרת×\99 ×\95ק×\91צ×\99×\9d ×©×\94×¢×\9c×\99תי",
-       "tog-watchdefault": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×¢×¨×\9bתי",
-       "tog-watchmoves": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\94×¢×\91רתי",
-       "tog-watchdeletion": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\9e×\97קתי",
-       "tog-watchrollback": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×\91×\94×\9d ×\91×\99צעת×\99 ×©×\97×\96×\95ר ×\9e×\94×\99ר",
-       "tog-minordefault": "×\94×\92×\93רת ×\9b×\9c ×¤×¢×\95×\9cת ×¢×¨×\99×\9b×\94 ×\9b×\9eשנ×\99ת ×\90×\9d ×\9c×\90 ×¦×\95×\99×\9f ×\90×\97רת",
+       "tog-editsectiononrightclick": "×\94פע×\9cת ×¢×¨×\99×\9bת ×¤×¡×§×\90×\95ת ×\91×\90×\9eצע×\95ת ×\9c×\97×\99צ×\94 ×\99×\9e× ×\99ת ×¢×\9c ×\9b×\95תר×\95ת ×\94פסק×\90×\95ת",
+       "tog-watchcreations": "×\94×\95ספת ×\93פ×\99×\9d ×©×\99צרת×\99 ×\95ק×\91צ×\99×\9d ×©×\94×¢×\9c×\99ת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchdefault": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×¢×¨×\9bת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchmoves": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\94×¢×\91רת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchdeletion": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\9e×\97קת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchrollback": "×\94×\95ספת ×\93פ×\99×\9d ×©×\91×\94×\9d ×\91×\99צעת×\99 ×©×\97×\96×\95ר ×\9c×\92רס×\94 ×§×\95×\93×\9eת ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\99",
+       "tog-minordefault": "ס×\99×\9e×\95×\9f ×\9b×\9c ×¤×¢×\95×\9cת ×¢×¨×\99×\9b×\94 ×\9b×\9eשנ×\99ת ×\9b×\91ר×\99רת ×\9e×\97×\93×\9c",
        "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה",
        "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה ראשונה",
-       "tog-enotifwatchlistpages": "לשלוח אליי דואר אלקטרוני כאשר משתנה דף או קובץ ברשימת המעקב שלי",
-       "tog-enotifusertalkpages": "לשלוח אליי דואר אלקטרוני כאשר נעשה שינוי בדף שיחת המשתמש שלי",
-       "tog-enotifminoredits": "לשלוח אליי דואר אלקטרוני גם על עריכות משניות של דפים וקבצים",
-       "tog-enotifrevealaddr": "×\97ש×\99פת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\9a ×\91×\94×\95×\93×¢ות דוא\"ל",
+       "tog-enotifwatchlistpages": "לשלוח אליי דוא\"ל כאשר משתנה דף או קובץ ברשימת המעקב שלי",
+       "tog-enotifusertalkpages": "לשלוח אליי דוא\"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי",
+       "tog-enotifminoredits": "לשלוח אליי דוא\"ל גם על עריכות משניות של דפים וקבצים",
+       "tog-enotifrevealaddr": "×\97ש×\99פת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\99 ×\91×\94תר×\90ות דוא\"ל",
        "tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים",
        "tog-oldsig": "החתימה הנוכחית:",
        "tog-fancysig": "התייחסות לחתימה כקוד ויקי (ללא קישור אוטומטי)",
-       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\9e×\94×\99רה",
+       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\97×\99ה",
        "tog-forceeditsummary": "הצגת אזהרה בעת הכנסת תקציר עריכה ריק",
        "tog-watchlisthideown": "הסתרת העריכות שלי ברשימת המעקב",
        "tog-watchlisthidebots": "הסתרת עריכות של בוטים ברשימת המעקב",
        "prefs-watchlist-days": "מספר הימים המרבי שיוצגו ברשימת המעקב:",
        "prefs-watchlist-days-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
        "prefs-watchlist-edits": "מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:",
-       "prefs-watchlist-edits-max": "×\9eספר ×\9e×\99ר×\91×\99: 1000",
+       "prefs-watchlist-edits-max": "מספר מרבי: 1000",
        "prefs-watchlist-token": "אסימון לרשימת המעקב:",
        "prefs-misc": "שונות",
        "prefs-resetpass": "שינוי סיסמה",
        "autoredircomment": "הפניה לדף [[$1]]",
        "autosumm-new": "יצירת דף עם התוכן \"$1\"",
        "autosumm-newblank": "יצירת דף ריק",
-       "size-bytes": "$1 בייט",
+       "size-bytes": "{{PLURAL:$1|בייט אחד|$1 בייט}}",
        "size-kilobytes": "$1 קילו־בייט",
        "size-megabytes": "$1 מגה־בייט",
        "size-gigabytes": "$1 ג'יגה־בייט",
        "size-exabytes": "$1 אקסה־בייט",
        "size-zetabytes": "$1 זטה־בייט",
        "size-yottabytes": "$1 יוטה־בייט",
+       "size-pixel": "{{PLURAL:$1|פיקסל אחד|$1 פיקסלים}}",
        "lag-warn-normal": "שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
        "lag-warn-high": "בגלל עיכוב בעדכון בסיס הנתונים, שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
        "watchlistedit-normal-title": "עריכת רשימת המעקב",
index 6a9bc88..41d53e0 100644 (file)
        "newarticle": "(Baro)",
        "newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
        "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
-       "noarticletext": "Awan ti agdama a testo daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
+       "noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
        "noarticletext-nopermission": "Awan ti agdama  a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
        "missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "userpage-userdoesnotexist": "Ti pakabilangan ti agar-aramat ni \"$1\" ket saan a nakarehistro. \nPangngaasi a kitaem no kayatmo ti agpartuat/agurnos iti daytoy a panid.",
        "tooltip-pt-createaccount": "Maaw-awis nga agpartuatka iti pakabilangan ken sumrek; nupay kasta, daytoy ket saan a nasken",
        "tooltip-ca-talk": "Pagtungtungan a maipapan ti linaon ti panid",
        "tooltip-ca-edit": "Urnosen daytoy a panid",
-       "tooltip-ca-addsection": "Mangirugi ti baro a paset",
+       "tooltip-ca-addsection": "Mangirugi iti baro a seksion",
        "tooltip-ca-viewsource": "Nasalakniban daytoy a panid.\nMabalinmo a kitaen ti taudanna.",
        "tooltip-ca-history": "Dagiti napalabas a rebision iti daytoy a panid.",
        "tooltip-ca-protect": "Salakniban daytoy a panid",
        "tooltip-p-logo": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage-description": "Sarungkaran ti umuna a panid",
-       "tooltip-n-portal": "Maipapan ti gandat, ti aniaman a maaramidmo, no sadino ti pagbirukam kadagiti banbanag",
+       "tooltip-n-portal": "Maipapan iti proyekto, no ania ti maaramidmo, ti pagbirukan kadagiti banag",
        "tooltip-n-currentevents": "Agsapul ti pakaammo kadagiti agdama a paspasamak",
        "tooltip-n-recentchanges": "Listaan dagiti naudi a sinukatan iti wiki",
        "tooltip-n-randompage": "Agikarga iti pugto a panid",
index 14f9568..bc8ce8f 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|pagine}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributore recente|contributori recenti}}",
        "badretype": "Le password inserite non coincidono tra loro.",
+       "usernameinprogress": "La creazione di account con questo nome utente è già in corso.\nSi prega di attendere.",
        "userexists": "Il nome utente inserito è già utilizzato.\nScegli un nome utente diverso.",
        "loginerror": "Errore durante l'accesso",
        "createacct-error": "Errore durante la creazione dell'utenza",
        "rows": "Righe:",
        "columns": "Colonne:",
        "searchresultshead": "Ricerca",
-       "stub-threshold": "Valore minimo per i <a href=\"#\" class=\"stub\">collegamenti agli stub</a>, in byte:",
+       "stub-threshold": "Valore minimo per i <a href=\"#\" class=\"stub\">collegamenti agli abbozzi</a> (in byte):",
        "stub-threshold-disabled": "Disattivato",
        "recentchangesdays": "Numero di giorni da mostrare nelle ultime modifiche:",
        "recentchangesdays-max": "(massimo $1 {{PLURAL:$1|giorno|giorni}})",
        "prefs-tabs-navigation-hint": "Suggerimento: è possibile utilizzare i tasti freccia sinistra e destra per spostarsi tra le schede nell'elenco delle schede.",
        "email-address-validity-valid": "L'indirizzo e-mail sembra valido",
        "email-address-validity-invalid": "Inserisci un indirizzo e-mail valido",
-       "userrights": "Gestione dei permessi relativi agli utenti",
+       "userrights": "Gestione dei permessi degli utenti",
        "userrights-lookup-user": "Gestione dei gruppi utente",
        "userrights-user-editname": "Inserire il nome utente:",
        "editusergroup": "Modifica gruppi utente",
index 12848c4..5ab3ec8 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|бет|бет}}",
        "createacct-benefit-body3": "жуықтағы {{PLURAL:$1|қатысушы|қатысушы}}",
        "badretype": "Енгізген құпия сөздеріңіз бір-біріне сәйкес емес.",
+       "usernameinprogress": "Бұл қатысушы есіміне тіркелгі жасау әлдеқашан басталды. Күте тұрыңыз.",
        "userexists": "Енгізген қатысушы атыңыз әлдеқашан пайдалануда.\nӨзге атауды таңдаңыз.",
        "loginerror": "Кіру қатесі",
        "createacct-error": "Тіркелгі жасауада қате кетті",
        "search-category": "(Санат:$1)",
        "search-file-match": "(файлдың мазмұны сәйкес келеді)",
        "search-suggest": "Мүмкін осы болар: $1",
+       "search-rewritten": "$1 дегенге қатысты нәтижелер көрсетілуде. $2 дегенмен бірге іздеу.",
        "search-interwiki-caption": "Бауырлас жобалар",
        "search-interwiki-default": "$1 дегеннен нәтиже:",
        "search-interwiki-more": "(көбірек)",
        "newpageletter": "Ж",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[бақылаған $1 қатысушы]",
-       "rc_categories": "Санаттарға шектеу (\"|\" белгісімен бөліктеңіз)",
-       "rc_categories_any": "Ð\9aез ÐºÐµÐ»Ð³ÐµÐ½",
+       "rc_categories": "Санаттарға шектеу («|» белгісімен бөлектеңіз):",
+       "rc_categories_any": "ТаңдалÒ\93аннÑ\8bÒ£ ÐºÐµÐ· ÐºÐµÐ»Ð³ÐµÐ½Ñ\96",
        "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1 {{PLURAL:$1|байт|байт}}",
        "newsectionsummary": "/* $1 */ жаңа бөлім",
        "rc-enhanced-expand": "Толық ақпаратты көрсету",
        "upload-too-many-redirects": "URL шектен тыс жылжытуларға ие",
        "upload-http-error": "HTTP қатесі кездесті: $1",
        "upload-copy-upload-invalid-domain": "Бұл домейннен еселеп жүктеу қолжетімді емес.",
+       "upload-dialog-title": "Файл жүктеу",
+       "upload-dialog-error": "Белгісіз қате кездесті",
+       "upload-dialog-warning": "Ескерту кездесті",
+       "upload-dialog-button-cancel": "Қажет емес",
+       "upload-dialog-button-done": "Бітті",
+       "upload-dialog-button-save": "Сақтау",
+       "upload-dialog-button-upload": "Жүктеу",
+       "upload-dialog-label-select-file": "Файлды таңдау",
+       "upload-dialog-label-infoform-title": "Егжей-тегжейі",
+       "upload-dialog-label-infoform-name": "Атауы",
+       "upload-dialog-label-infoform-description": "Сипаттамасы",
+       "upload-dialog-label-usage-title": "Қолданылуы",
+       "upload-dialog-label-usage-filename": "Файл атауы",
        "backend-fail-stream": "«$1» файлы ақпады.",
        "backend-fail-backup": "«$1» файлының сақтық есесі жасалмады.",
        "backend-fail-notexists": "$1 файлы бар емес.",
        "undeletepagetext": "Келесі {{PLURAL:$1|бет жойылған бірақ|$1 бет жойылған бірақ}} мағлұматы мұрағатта бар\nжәне қалпына келтіруге болады. Мұрағат ұдайы тазаланып тұруы мүмкін.",
        "undelete-fieldset-title": "Нұсқаларды қалпына келтіру",
        "undeleteextrahelp": "Толық бет тарихын қалпына келтіру үшін барлық құсбелгі көздерді босатып <strong><em>{{int:undeletebtn}}</em></strong> батырмасын нұқыңыз.\nБөлектеумен қалпына келтіруді орындау үшін қалпына келтіру керек түзетулеріне сәйкес көздерге құсбелгімен белгілеп <strong><em>{{int:undeletebtn}}</em></strong> батырмасын басыңыз.",
-       "undeleterevisions": "$1 түзету мұрағатталды",
+       "undeleterevisions": "$1 {{PLURAL:$1|нұсқа|нұсқа}} жойылды",
        "undeletehistory": "Егер бетті қалпына келтірсеңіз тарихындағы барлық түзетулер де қалпына келтіріледі. Егер жоюдан соң дәл солай атауымен жаңа бет басталса қалпына келтірілген түзетулер бұрынғы өңделу тарихында көрсетіледі.",
        "undeleterevdel": "Егер бұл үстіңгі бетте аяқталса, не файл түзетуі жарым-жартылай жойылған болса, жою болдырмауы орындалмайды.\nОсындай жағдайларда, ең жаңа жойылған түзетуін алып тастауыңыз не жасыруын болдырмауыңыз жөн.",
        "undeletehistorynoadmin": "Бұл бет жойылған.\nЖою себебі алдындағы өңдеген қатысушылар егжей-тегжейлерімен бірге төмендегі қысқаша мазмұндамасында көрсетілген.\nМына жойылған түзетулерін көкейкесті мәтіні тек әкімшілерге жетімді.",
        "anonymous": "{{SITENAME}} тіркелгісіз {{PLURAL:$1|қатысушысы|қатысушылары}}",
        "siteuser": "{{SITENAME}} қатысушы $1",
        "anonuser": "{{SITENAME}} анонимді қатысушы: $1",
-       "lastmodifiedatby": "Бұл бетті $3 қатысушы соңғы өзгерткен кезі: $2, $1.",
+       "lastmodifiedatby": "Бұл бетті $3 есімді қатысушы соңғы өзгерткен кезі: $2, $1.",
        "othercontribs": "Шығарма негізін $1 жазған.",
        "others": "басқалар",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|қатысушысы|қатысушылары}} $1",
        "revdelete-unrestricted": "әкімшілерден тиымдарды аластады",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} дегенді $5 $6 мерзімге {{GENDER:$2|бұғаттады}}",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}} деген қатысушыны {{GENDER:$2|бұғатынан босатты}}",
-       "logentry-block-reblock": "$1 {{GENDER:$4|$3}} дегеннің бұғаттау параметрлерін біту уақытын $5 $6 мерзіміне {{GENDER:$2|өзгерті}}",
+       "logentry-block-reblock": "$1 {{GENDER:$4|$3}} Ð´ÐµÐ³ÐµÐ½Ð½Ñ\96Ò£ Ð±Ò±Ò\93аÑ\82Ñ\82аÑ\83 Ð¿Ð°Ñ\80амеÑ\82Ñ\80леÑ\80Ñ\96н Ð±Ñ\96Ñ\82Ñ\83 Ñ\83аÒ\9bÑ\8bÑ\82Ñ\8bн $5 $6 Ð¼ÐµÑ\80зÑ\96мÑ\96не {{GENDER:$2|өзгеÑ\80Ñ\82Ñ\82Ñ\96}}",
        "logentry-suppress-block": "$1 {{GENDER:$4|$3}} дегенді $5 $6 мерзімге {{GENDER:$2|бұғаттады}}",
        "logentry-suppress-reblock": "$1 {{GENDER:$4|$3}} есімді қатысушының бұғаттау параметрлерінің біту уақытын $5 $6 мерзіміне {{GENDER:$2|өзгертті}}",
        "logentry-import-upload": "$1 $3 файл жүктемесі арқылы {{GENDER:$2|импорттады}}",
        "logentry-newusers-create2": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}}",
        "logentry-newusers-byemail": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}} және құпия сөзі е-пошта арқылы жіберілді",
        "logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}",
+       "logentry-protect-move_prot": "$1 protection settings from $4 дегеннен $3 дегенге қорғалу баптауларын {{GENDER:$2|жылжытты}}",
        "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгертті}}",
-       "logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
+       "logentry-rights-rights-legacy": "$1 $3 Ò¯Ñ\88Ñ\96н Ñ\82оп Ð¼Ò¯Ñ\88елÑ\96гÑ\96н {{GENDER:$2|өзгеÑ\80Ñ\82Ñ\82Ñ\96}}",
        "logentry-rights-autopromote": "$1 $4 дегенен $5 дегенге автоматты түрде {{GENDER:$2|деңгейі көтерілген}}",
        "logentry-upload-upload": "$1 $3 файлын {{GENDER:$2|жүктеді}}",
        "logentry-upload-overwrite": "$1 $3 дегеннің жаңа нұсқасын {{GENDER:$2|жүктеді}}",
        "special-characters-title-endash": "дефис",
        "special-characters-title-emdash": "сызықша",
        "special-characters-title-minus": "минус белгісі",
+       "mw-widgets-dateinput-no-date": "Ай-күн таңдалмаған",
        "mw-widgets-dateinput-placeholder-day": "ЖЖЖЖ-АА-КК",
        "mw-widgets-dateinput-placeholder-month": "ЖЖЖЖ-АА",
        "mw-widgets-titleinput-description-new-page": "бет жоқ екен",
index 666aac4..6acf87f 100644 (file)
        "markaspatrolleddiff": "ចំណាំថាបានល្បាត",
        "markaspatrolledtext": "ចំណាំទំព័រនេះថាបានល្បាត",
        "markedaspatrolled": "បានចំណាំថាបានល្បាត",
-       "rcpatroldisabled": "á\9e\94á\9f\86លាស់ប្តូរថ្មីៗនៃការតាមដានមិនត្រូវបានអនុញ្ញាតទេ",
+       "rcpatroldisabled": "á\9e\94á\9e\93á\9f\92លាស់ប្តូរថ្មីៗនៃការតាមដានមិនត្រូវបានអនុញ្ញាតទេ",
        "markedaspatrollederror": "មិនអាចគូសចំណាំថាបានល្បាត",
        "patrol-log-page": "កំណត់ហេតុនៃការតាមដាន",
        "patrol-log-header": "នេះជាកំណត់ហេតុនៃកំណែ​ប្រែ​ដែល​បាន​តាមដាន",
        "size-kilobytes": "$1គីឡូបៃ",
        "size-megabytes": "$1មេកាបៃ",
        "size-gigabytes": "$1ជីកាបៃ",
-       "lag-warn-normal": "á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 {{PLURAL:$1|second|á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸}}អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
+       "lag-warn-normal": "á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\80á\9f\92á\9e\9aá\9f\84á\9e\99 {{PLURAL:$1|á\9e\98á\9e½á\9e\99á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸|á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸}}á\9e\98á\9e»á\9e\93 អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
        "lag-warn-high": "ដោយសារប្រព័ន្ធបំរើការមូលដ្ឋានទិន្នន័យមានភាពយឺតយ៉ាវខ្លាំង បន្លាស់ប្ដូរដែលថ្មីជាង $1 វិនាទីមិនអាចបង្ហាញនៅក្នុងបញ្ជីនេះបានទេ។",
        "watchlistedit-normal-title": "កែប្រែបញ្ជីតាមដាន",
        "watchlistedit-normal-legend": "ដកចំណងជើងចេញពីបញ្ជីតាមដាន",
        "specialpages-group-maintenance": "របាយការណ៍នានាអំពីតំហែទាំ",
        "specialpages-group-other": "ទំព័រពិសេសៗផ្សេងៗទៀត",
        "specialpages-group-login": "កត់ឈ្មោះចូល / បង្កើតគណនី",
-       "specialpages-group-changes": "á\9e\94á\9f\86លាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ",
+       "specialpages-group-changes": "á\9e\94á\9e\93á\9f\92លាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ",
        "specialpages-group-media": "របាយការណ៍មេឌានិងការផ្ទុកឯកសារ",
        "specialpages-group-users": "អ្នកប្រើប្រាស់និងសិទ្ធិ",
        "specialpages-group-highuse": "ទំព័រដែលត្រូវបានប្រើច្រើន",
        "expand_templates_ok": "យល់ព្រម",
        "expand_templates_remove_comments": "ដកចេញ វិចារនានា",
        "expand_templates_preview": "បង្ហាញការមើលជាមុន",
+       "pagelanguage": "ឧបករណ៍ជ្រើសរើសភាសាទំព័រ",
+       "pagelang-language": "ភាសា",
+       "pagelang-use-default": "ប្រើភាសាតាមលំនាំដើម",
+       "right-pagelang": "ប្ដូរភាសាទំព័រ",
+       "log-name-pagelang": "កំណត់ហេតុបន្លាស់ប្ដូរភាសា",
+       "log-description-pagelang": "នេះជាកំណត់ហេតុបន្លាស់ប្ដូរភាសាទំព័រ។",
        "special-characters-group-latin": "អក្សរឡាតាំង",
        "special-characters-group-latinextended": "អក្សរឡាតាំងផ្សេងទៀត",
        "special-characters-group-ipa": "អក្ខរក្រមសំលេងអន្តរជាតិ",
index 0d237f7..50d183a 100644 (file)
        "changeemail": "이메일 주소 바꾸기",
        "changeemail-text": "이메일 주소를 바꾸려면 이 양식을 채우세요. 이 바뀜을 확인하기 위해 비밀번호를 입력해야 합니다.",
        "changeemail-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
-       "changeemail-oldemail": "현재 이메일 주소 :",
+       "changeemail-oldemail": "현재 이메일 주소:",
        "changeemail-newemail": "새 이메일 주소:",
        "changeemail-none": "(없음)",
        "changeemail-password": "{{SITENAME}} 비밀번호:",
        "loginreqlink": "로그인",
        "loginreqpagetext": "다른 문서를 보기 위해서는 $1해야 합니다.",
        "accmailtitle": "비밀번호를 보냈습니다",
-       "accmailtext": "[[User talk:$1|$1]] 사용자의 비밀번호를 임의로 만들어 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.",
+       "accmailtext": "[[User talk:$1|$1]] 사용자의 비밀번호를 임의로 만들어 $2(으)로 보냈습니다. 로그인하고 나서 <em>[[Special:ChangePassword|비밀번호를 바꿀]]</em> 수 있습니다.",
        "newarticle": "(새 문서)",
        "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참조하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
        "anontalkpagetext": "----\n여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.\n익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.\nIP 주소는 여러 사용자가 공유할 수 있습니다.\n자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.",
        "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>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
        "usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "longpageerror": "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''\n저장할 수 없습니다.",
        "readonlywarning": "'''경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
        "protectedpagewarning": "<strong>경고: 이 문서는 관리자 권한이 있는 사용자만 편집할 수 있도록 보호되어 있습니다.</strong>\n이 문서의 최근 기록을 참조하십시오:",
-       "semiprotectedpagewarning": "<strong>참고:</strong> 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.\n이 문서의 최근 기록을 참하십시오:",
+       "semiprotectedpagewarning": "<strong>참고:</strong> 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.\n이 문서의 최근 기록을 참하십시오:",
        "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
        "titleprotectedwarning": "<strong>경고: 이 문서는 잠겨 있어, 문서를 만드려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.</strong>\n아래 문서의 최근 기록을 참조하십시오:",
        "templatesused": "이 문서에서 사용한 {{PLURAL:$1|틀}}:",
        "uploadstash-refresh": "파일 목록을 새로 고침",
        "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 을 참하십시오.",
+       "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 을 참하십시오.",
        "img-auth-notindir": "요청한 경로가 설정한 올리기 디렉터리에 없습니다.",
        "img-auth-badtitle": "\"$1\"에서 올바른 제목을 만들 수 없습니다.",
        "img-auth-nologinnWL": "로그인하지 않았으며 \"$1\" 파일은 화이트리스트에 존재하지 않습니다.",
        "filehist-user": "사용자",
        "filehist-dimensions": "크기",
        "filehist-filesize": "파일 크기",
-       "filehist-comment": "ë\8d§글",
+       "filehist-comment": "ë\8c\93글",
        "imagelinks": "이 파일을 사용하는 문서",
        "linkstoimage": "다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:",
        "linkstoimage-more": "$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.\n다음 목록은 이 파일을 {{PLURAL:$1|가리키는 처음 문서 $1개}}만 보여주고 있습니다.\n이 파일을 가리키는 [[Special:WhatLinksHere/$2|모든 문서 목록]]을 볼 수 있습니다.",
        "newpages": "새 문서 목록",
        "newpages-username": "사용자 이름:",
        "ancientpages": "오래된 문서 목록",
-       "move": "ì\98®ê¸°ê¸°",
+       "move": "ì\9d´ë\8f\99",
        "movethispage": "이 문서 옮기기",
        "unusedimagestext": "다음은 어떠한 문서도 사용하지 않는 파일의 목록입니다.\n다른 사이트에서 URL 접근을 통해 파일을 사용할 수 있기 때문에, 아래 목록에 있는 파일도 실제로 사용 중일 가능성이 있다는 점을 주의해주세요.",
        "unusedcategoriestext": "사용하지 않는 분류 문서의 목록입니다.",
        "version-poweredby-others": "그 외 다른 개발자",
        "version-poweredby-translators": "translatewiki.net 번역자",
        "version-credits-summary": "[[Special:Version|미디어위키]]에 기여한 다음 사람에게 감사드립니다.",
-       "version-license-info": "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.\n\n미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참하십시오.\n\n당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
+       "version-license-info": "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.\n\n미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참하십시오.\n\n당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
        "version-software": "설치된 소프트웨어",
        "version-software-product": "제품",
        "version-software-version": "버전",
        "htmlform-cloner-create": "더 추가",
        "htmlform-cloner-delete": "제거",
        "htmlform-cloner-required": "적어도 하나의 값이 필요합니다.",
+       "htmlform-title-badnamespace": "[[:$1]] 문서는 \"{{ns:$2}}\" 이름공간에 없습니다.",
        "htmlform-title-not-creatable": "\"$1\"은 만들 수 없는 문서 제목입니다.",
        "htmlform-title-not-exists": "[[:$1]] 문서는 존재하지 않습니다.",
        "htmlform-user-not-exists": "<strong>$1</strong> 문서는 존재하지 않습니다.",
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
        "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
+       "logentry-protect-move_prot": "$1 사용자가 보호 설정을 $4에서 $3으로 {{GENDER:$2|옮겼습니다}}",
        "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
index f108e80..ce0f13c 100644 (file)
        "content-model-json": "<i lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>",
        "content-json-empty-object": "Nix dren",
        "content-json-empty-array": "Nix dren",
-       "duplicate-args-warning": "<strong>Opjepaß:</strong> [[:$1]] röhf [[:$2]] met mih wi eijnem Wäät för der Parramehter „$3“ op. Blohß der läzde wäät vun dänne weed opjenumme un jebruch.",
+       "duplicate-args-warning": "<strong>Opjepaß:</strong> [[:$1]] röhf [[:$2]] met mih wi eijnem Wäät för der Parramehter „$3“ op. Blohß der läzde Wäät vun dänne weed opjenumme un jebruch.",
        "duplicate-args-category": "Sigge met dubbelt aanjejovve Parramehtere för Schablohne.",
        "duplicate-args-category-desc": "Sigge met Oprohve vun Schablohne met dubbelt aanjejovve Parramehtere dren, alsu esu jät wi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> un <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Opjepaß:</strong> Di Sigg heh määt zovill Opwand met Paaser-Funkßjohne.\n\n{{PLURAL:$2|Eine Oproof|Beß $2 Oproofe|Keine Oproof}} es älaup, {{PLURAL:$1|un eine Oproof|ävver $1 Oproofe|un keine Oproof}} määt di Sigg em Momang.",
        "expansion-depth-exceeded-category": "Sigge, woh de \"expansion depth\" övverschredde es",
        "expansion-depth-exceeded-category-desc": "Dat heh es de Saachjropp för Sigge, woh de \"expansion depth\" övverschreddde es.",
        "expansion-depth-exceeded-warning": "Heh di Sigg hät de \"expansion depth\" övverschredde",
-       "parser-unstrip-loop-warning": "Ene Befähl em Täx betrick sesch op sesch sellef.",
+       "parser-unstrip-loop-warning": "Ene Befähl em Täx betrek sesch op sesch sällefs.",
        "parser-unstrip-recursion-limit": "Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.",
        "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprohche.",
        "undo-success": "De Änderong könnte mer zeröck nämme. Belohr Der de Ungerscheide un dann donn di Sigg avspeijschere, wann De dängks, et es en Ohdenong esu.",
        "action-history": "de Leß met de fröhjere Väsohne vun heh dä Sigg ze belohre",
        "action-minoredit": "heh di Änderong als klein „mini“ ze makkehre",
        "action-move": "di Sigg ömzebenänne",
-       "action-move-subpages": "hee di Sigg un ier Ongersigge ömzebenänne",
+       "action-move-subpages": "heh di Sigg un ier Ongersigge ömzebenänne",
        "action-move-rootuserpages": "enem Metmaacher sing (Houp)-Metmaacher-Sigg ömzenänne",
        "action-move-categorypages": "Sigge vun Saachjroppe ömzebenänne",
        "action-movefile": "Di Dattei ömnänne",
        "common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
        "group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
        "group-user.js": "/* De JavaSkreppte heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
-       "group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
+       "group-bot.js": "/* De JavaSkreppte fun heh krijje bloß de Bots jescheck */",
        "group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
        "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokrahde jescheck */",
        "anonymous": "Namelose {{PLURAL:$1|Metmaacher|Metmaacher|Metmaacher}} vun {{GRAMMAR:Dat|{{SITENAME}}}}",
        "confirmemail_success": "Ding E-Mail Adress es jetz bestätich.\nJetz künns De och noch enlogge. Vill Spass!",
        "confirmemail_loggedin": "Ding Addräß fö de <i lang=\"en\">e-mail</i> es jäz beschtäätesch!",
        "confirmemail_subject": "Don Ding e-mail-Adräß för {{GRAMMAR:Akkusativ|{{SITENAME}}}} beschtähteje.",
-       "confirmemail_body": "Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" {{GRAMMAR:vun|{{SITENAME}}}}\nsin, un hät en E-Mail Adress aanjejovve.\n\nÖm jetz klor ze krije, dat di e-mail Adräß un dä neue Metmaacher och\nzosamme jehüre, muss dä Neue en singem Brauser dä Link:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding e-mail Adräß aanjejovve hät, do bruchs de\njar nix ze don. De e-mail Adräß kann nit jebruch wääde, ih dat se nit\nbestätich es. Do kanns ävver och op he dä Lengk jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adräß nit bestätije wells.",
+       "confirmemail_body": "Künnt johd sin, Do wors et selver. Vun dä IP_Adräß $1 hät sich\njedenfalls einer jemäldt, un well dä Metmaacher \"$2\" {{GRAMMAR:vun|{{SITENAME}}}}\nsin, un hät en e-mail-Adräss aanjejovve.\n\nÖm jetz klor ze krije, dat di e-mail Adräß un dä neue Metmaacher och\nzosamme jehüre, muss dä Neue en singem Brauser dä Link:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann De et bes.\n\nWann nit Do, sondern söns wä Ding e-mail-Adräß aanjejovve hät, do bruchs de\njar nix ze don. De e-mail-Adräß kann nit jebruch wähde, ih dat se\nbeschtähtesch es. Do kanns ävver och op heh dä Lengk jon:\n\n$5\n\nDomet deiß De tirek sahre, dat De di Adräß nit beschtähteje wells.",
        "confirmemail_body_changed": "Künnt jod sin, Do wors et selver. Vun de IP_Adräß $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nsin, un hät en neu Adress för sing e-mail aanjejovve.\n\nÖm jetz klor ze krije, dat di neu Adräß un dä Metmaacher och\nzosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nwidder aanzschallde, moss dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding E-Mail Adress aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit bestätich es.\nDo kanns ävver och op heh dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adress nit bestätije wells.",
        "confirmemail_body_set": "Künnt johd sin, Do wors et sällver. Vun dä IP-Adräß $1 hät op\njede Fall einer för dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nheh di Adräß för däm sing e-mail aanjejovve.\n\nÖm jäz kloh ze kreje, dat di neu Adräß un dä Metmaacher och\nzosamme jehühre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\naanzschallde, moß dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann dat sing\nReeschteschkeijt hät.\n\nWann nit Doh, sönders söns wä Ding Addräß för de e-Mail aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit beschtähtesch es.\nDo kanns ävver och op heh dä Lengk jon:\n\n$5\n\nDomet deiß De tirek vermällde, dat De di Adräß nit beschtähteje wells.",
        "confirmemail_invalidated": "Et Beschtähtejje för di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß es afjebroche wohde, un di Adräß es '''nit''' beschtähtesch.",
index 33bd086..88b9970 100644 (file)
        "editingsection": "د حال و بال ڤیرایئشت $1 (بأرجا$1)",
        "editingcomment": "د حال و بال ڤیرایئشت $1 (بأرجا تازە)",
        "editconflict": "ری ڤئ ری کاری د ڤیرایئشت: $1",
-       "explainconflict": "داوسه که شما شرو د ویرایشت ای بلگه کردیته، یه نفر هنی ای بلگه نه آلشت دئه.\nراساگه وارو نیسسه بلگه نیسسه نه چی یه که وجود داشتوه د ور میئره.\nآلشتیا شما د نیسسه هاری نشو دئه هئ.\nشما با آلشتیاتونه د نیسسه که هئش یکی بکید.\nفقط متنی که ها د رو د گاتی که شما\"{{رقم:اماییه کاری گوتار}}\" نه گزارشت می کید اماییه بوئه",
+       "explainconflict": "د گاتی کئ شوما شوروٙ د ڤیرایئشت کاری د بألگە کئردیتە، یئ کأس ھأنی ئی بألگە نئ آلئشت دئە.\nراساگە ڤارو نیسئسە بألگە، نیسئسە نە چی یە کئ ڤوجوٙد داشتوٙە د ڤأر گئرئتە.\nآلئشتکاریا شوم د نیسئسە ھاری دیاری میکە.\nشوما بایأد آلئشت کاریاتوٙنە د نیسئسە یی کئ ھیش سأریأک بأکیت.\nفأقأط نیسئسە یی کئ ھا د ڤارو د گاتی کئ شوما\"{{int:savearticle}}\" نە گوزارئشت میکیت ئمایە بوٙە.",
        "yourtext": "نیسئسە شوما",
        "storedversion": "ڤانئیأری ئمایە بییە",
-       "nonunicodebrowser": "<strong>زئÙ\86ار:دÙ\88Ù\88ارتÙ\87 Ù\86ئر Ø´Ù\85ا Ù\88ا Ù\86Û\8cسسÙ\87 Û\8cا Û\8cÙ\88Ù\86Û\8cکد Ø³Ø§Ø²Ú¯Ø§Ø±Û\8c Ù\86ارÙ\87.</strong>\nÛ\8cÙ\87 Ú¯Ù\84 Ø±Ø§Ø­Ù\84 Ù\88Ù\87 Ú©Ø§Ø± Ú¯Ø±ØªÙ\87 Ø¨Û\8cÙ\87 Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ø´Ù\85ا Ø¨Ù\84Ú¯Ù\87 Û\8cا Ù\86Ù\87 Ù\88ا Ø§Ù\85Ù\86Û\8cت Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cت:\nÙ\86Û\8cسÙ\87 Û\8cا ØºÛ\8cر-ASCII  Ø¯ Ù¾Ø§Û\8cÙ\87 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Û\8cا 16 ØªØ§Û\8cÛ\8c Ø¯ØªÙ\88 Ù\86Ø´Ù\88 Ø¯Ø¦Ù\87 Ø¨Ù\88ئÙ\87.",
-       "editingold": "<strong>زئÙ\86ار:Ø´Ù\85ا Ø¯Ø§Ø±Û\8cت Û\8cÙ\87 Ú¯Ù\84 Ù\88اÙ\86ئرÛ\8c Ù\86ا Ø¨Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø¨Û\8cÙ\87 Ù\86Ù\87 Ø³Û\8c Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\88Û\8cراÛ\8cشت Ù\85Û\8c Ú©Û\8cد</strong>\nار Ø´Ù\85ا Ù\88Ù\86Ù\87 Ø§Ù\85اÛ\8cÛ\8cÙ\87 Ø¨Ú©Û\8cتØ\8cÙ\87ر Ø¢Ù\84شتÛ\8c Ú©Ù\87 Ø¯ Ø§Ù\88Ù\84 Ø³Û\8c Ø§Û\8c Ù\88اÙ\86ئرÛ\8c Ø§Ù\86جÙ\88Ù\85 Ø¨Û\8cÙ\87 Ú¯Ù\85 Ø¨Ù\88ئÙ\87.",
+       "nonunicodebrowser": "<strong>د Ú¤Û\8cرئتÙ\88Ù\99با:دÙ\88ڤارتÛ\95 Ù\86Û\8cأر Ø´Ù\88Ù\85ا Ú¤Ø§ Ù\86Û\8cسئسÛ\95 Û\8cا Û\8cÙ\88Ù\99Ù\86Û\8cÚ©Ù\88د Ø³Ø§Ø²Ø¦Ú¯Ø§Ø±Û\8c Ù\86ارÛ\95.</strong>\nÛ\8cئ Ú¯Ø¦Ù\84 Ø±Ø§ Ø­Ø£Ù\84 Ú¤Ø¦ Ú©Ø§Ø± Ú¯Ø¦Ø±Ø¦ØªØ¦ Ø¨Û\8cÛ\8cÛ\95 Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø´Ù\88Ù\85ا Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ù\86Û\95 Ú¤Ø§ Ø£Ù\85Ù\86Û\8cأت Ú¤Û\8cراÛ\8cئشت Ø¨Ø£Ú©Û\8cت:\nÙ\86Û\8cسئسÛ\95 Û\8cا ØºØ¦Ø±-ASCII  Ø¯ Ù¾Ø§Û\8cÛ\95 Ø±Ø§Ø²Û\8cÙ\86Û\95 Û\8cا 16 ØªØ§Û\8cÛ\8c Ø³Û\8c ØªÙ\88Ù\99 Ø¯Û\8cارÛ\8c Ù\85Û\8cÚ©Û\95.",
+       "editingold": "<strong>د Ú¤Û\8cرئتÙ\88Ù\99 Ø¨Ø§:Ø´Ù\88Ù\85ا Ø¯Ø§Ø±Û\8cت Û\8cئ Ú¯Ø¦Ù\84 Ú¤Ø§Ù\86ئÛ\8cأرÛ\8c Ú¤Ø¦ Ú¾Ø¦Ù\86Ú¯Ù\88Ù\85 Ù\86أبÛ\8cÛ\8cÛ\95 Ù\86Û\95 Ø³Û\8c Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ù\85Û\8cÚ©Û\8cد.</strong>\nأر Ø´Ù\88Ù\85ا Ú¤Ø¦Ù\86Û\95 Ø¦Ù\85اÛ\8cÛ\95 Ø¨Ø£Ú©Û\8cتØ\8c Ú¾Ø£Ø± Ø¢Ù\84ئشت Ú©Ø§Ø±Û\8c Ú©Ø¦ Ø¯ Ø£Ú¤Ø£Ù\84 Ø³Û\8c Ø¦Û\8c Ú¤Ø§Ù\86ئÛ\8cأرÛ\8c Ø£Ù\86جÙ\88Ù\85 Ø¨Û\8cÛ\8cÛ\95 Ù\86ادÛ\8cار Ù\85Ù\88Ù\99Û\95.",
        "yourdiff": "فأرخیا",
-       "copyrightwarning": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
-       "copyrightwarning2": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
+       "copyrightwarning": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
+       "copyrightwarning2": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
        "longpageerror": "<strong>خطا:نیسسه شما  {{PLURAL:$1|یه کلوبایت|$1 کلوبایت}}  درازی نه دئه، که ونو د بیشرونه انازه{{PLURAL:$2|یه کلوبایت|$2 کلوبایت}} گپترن.</strong>\nنبوئه وه اماییه با.",
        "readonlywarning": "<strong>زئنار:رسینه گا سی واداشت قلف بیه، سی یه نه که شما ایسه نمی تونیت ویرایشتیاتونه اماییه بکیت.</strong>\nشات شما بحایت که نیسسه خوتونه د جانیا نیسسه ای وردار بدیس بکیت و ونه سی نهاتر اماییه بکیت.\n\nدیوونداری که ونه قلف کرده چنی گوته:$1",
        "protectedpagewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
        "cantcreateaccounttitle": "نبوئه حساو راس بکید",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه '''$1''' ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ('''$4''')، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
-       "viewpagelogs": "سی ای بلگه بوینتو.",
+       "viewpagelogs": "سئیل پئرئستنوٙمە یا ئی بألگە بأکیت",
        "nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
        "currentrev": "آخرین دوواره دیئن",
        "currentrev-asof": "آخري وانئری چی $1",
index b29271e..33be438 100644 (file)
        "thu": "Ce",
        "fri": "Pk",
        "sat": "Se",
-       "january": "janvārī,",
-       "february": "februārī,",
-       "march": "martā,",
-       "april": "aprīlī,",
-       "may_long": "maijā,",
-       "june": "jūnijā,",
-       "july": "jūlijā,",
-       "august": "augustā,",
-       "september": "septembrī,",
-       "october": "oktobrī,",
-       "november": "novembrī,",
-       "december": "decembrī,",
-       "january-gen": "Janvāra",
-       "february-gen": "Februāra",
-       "march-gen": "Marta",
-       "april-gen": "Aprīļa",
-       "may-gen": "Maija",
-       "june-gen": "Jūnija",
-       "july-gen": "Jūlija",
-       "august-gen": "Augusta",
-       "september-gen": "Septembra",
-       "october-gen": "Oktobra",
-       "november-gen": "Novembra",
-       "december-gen": "Decembra",
-       "jan": "janvārī,",
-       "feb": "februārī,",
-       "mar": "martā,",
-       "apr": "aprīlī,",
-       "may": "maijā,",
-       "jun": "jūnijā,",
-       "jul": "jūlijā,",
-       "aug": "augustā,",
-       "sep": "septembrī,",
-       "oct": "oktobrī,",
-       "nov": "novembrī,",
-       "dec": "decembrī,",
+       "january": "janvāris",
+       "february": "februāris",
+       "march": "marts",
+       "april": "aprīlis",
+       "may_long": "maijs",
+       "june": "jūnijs",
+       "july": "jūlijs",
+       "august": "augusts",
+       "september": "septembris",
+       "october": "oktobris",
+       "november": "novembris",
+       "december": "decembris",
+       "january-gen": "janvāra",
+       "february-gen": "februāra",
+       "march-gen": "marta",
+       "april-gen": "aprīļa",
+       "may-gen": "maija",
+       "june-gen": "jūnija",
+       "july-gen": "jūlija",
+       "august-gen": "augusta",
+       "september-gen": "septembra",
+       "october-gen": "oktobra",
+       "november-gen": "novembra",
+       "december-gen": "decembra",
+       "jan": "janvāris",
+       "feb": "februāris",
+       "mar": "marts",
+       "apr": "aprīlis",
+       "may": "maijs",
+       "jun": "jūnijs",
+       "jul": "jūlijs",
+       "aug": "augusts",
+       "sep": "septembris",
+       "oct": "oktobris",
+       "nov": "novembris",
+       "dec": "decembris",
        "january-date": "$1. janvāris",
        "february-date": "$1. februāris",
        "march-date": "$1. marts",
        "accmailtitle": "Parole nosūtīta.",
        "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": "Tu šeit nonāci sekojot saitei uz, pagaidām vēl neuzrakstītu, lapu.\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 '''back''' pogu pārlūkprogrammā.",
+       "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 lietotājam, kurš vēl nav kļuvis par reģistrētu lietotāju vai arī neizmanto savu lietotājvārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem lietotājiem.\nJa tu esi anonīms lietotājs un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:UserLogin/signup|kļūsti par lietotāju]] vai arī [[Special:UserLogin|izmanto jau izveidotu lietotājvārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem lietotājiem.''",
        "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 si lapu.",
index 210ede0..32dd176 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|താൾ|താളുകൾ}}",
        "createacct-benefit-body3": "സമീപകാലത്ത് സംഭാവന {{PLURAL:$1|ചെയ്തയാൾ|ചെയ്തവർ}}",
        "badretype": "താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ ഒത്തുപോകുന്നില്ല.",
+       "usernameinprogress": "ഈ ഉപയോക്തൃനാമത്തിലുള്ള അംഗത്വ നിർമ്മിതി നടന്നുകൊണ്ടിരിക്കുന്നു.\nദയവായി കാത്തിരിക്കുക.",
        "userexists": "നൽകിയ ഉപയോക്തൃനാമം മുമ്പേ നിലവിലുണ്ട്.\nദയവായി മറ്റൊരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക.",
        "loginerror": "പ്രവേശനം സാധിച്ചില്ല",
        "createacct-error": "അംഗത്വസൃഷ്ടിക്കിടെ പിഴവുണ്ടായി",
        "logentry-newusers-create2": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}",
        "logentry-newusers-byemail": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു",
        "logentry-newusers-autocreate": "$1 എന്ന ഉപയോക്തൃ അംഗത്വം സ്വയം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}",
+       "logentry-protect-move_prot": "സംരക്ഷണ സജ്ജീകരണങ്ങൾ $4  എന്നതിൽ നിന്ന് $3 എന്നതിലേക്ക് $1 {{GENDER:$2|മാറ്റി}}",
        "logentry-rights-rights": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-rights-legacy": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-autopromote": "$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയമേവ {{GENDER:$2|ഉയർത്തപ്പെട്ടിരിക്കുന്നു}}",
index 79140a7..71ff9d3 100644 (file)
@@ -11,7 +11,8 @@
                        "Tupikovs",
                        "Urhixidur",
                        "Игорь Бродский",
-                       "아라"
+                       "아라",
+                       "Denö"
                ]
        },
        "tog-underline": "Сюлмавома петнень алга черькстамс:",
        "rcshowhideminor-hide": "Кекшемс",
        "rcshowhidebots": "$1 ботт",
        "rcshowhidebots-show": "Невтемс",
+       "rcshowhidebots-hide": "Кекшемс",
        "rcshowhideliu": "$1 совавтозь теицят",
        "rcshowhideliu-hide": "Кекшемс",
        "rcshowhideanons": "$1 лемтеме теицят",
        "listgrouprights-removegroup-all": "Весе куротнень нардамс",
        "mailnologin": "Кучомс сёрма парго арась",
        "emailuser": "Кучомс е-сёрма те теицянтень",
-       "emailpage": "Кучт э-сёрма теицянтень",
        "defemailsubject": "{{SITENAME}} е-сёрма \"$1\"-нь пельде",
        "usermaildisabled": "Теицянь е-сёрмась пекстазь",
        "noemailtitle": "Е-сёрма парго арась",
index 2dc5a97..2dada9d 100644 (file)
@@ -16,7 +16,7 @@
        },
        "tog-underline": "Sottolinia 'e jonte:",
        "tog-hideminor": "Annascunne 'e cagne piccirille  'int'a ll'úrdeme cagne",
-       "tog-hidepatrolled": "Annascunne 'e cagne 'verificate' 'int'a ll'úrdeme cagne",
+       "tog-hidepatrolled": "Annascunne 'e cagne 'verificate' 'a ll'úrdeme cagnamiente",
        "tog-newpageshidepatrolled": "Annascunne 'e paggene cuntrullate 'a ll'elenco 'e ppaggene",
        "tog-extendwatchlist": "Spanne ll'asservate speciale pe fà vedé tutte 'e cagnàmiente, nun solo l'ultimo",
        "tog-usenewrc": "Urdeme càgnamiente avanzate (JavaScript)",
index e044c19..4438a4f 100644 (file)
        "actionthrottled": "Handeling tegengehouden",
        "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat u deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
        "protectedpagetext": "Deze pagina is beveiligd. Bewerken of andere handelingen zijn niet mogelijk.",
-       "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren:",
-       "viewyourtext": "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
+       "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren.",
+       "viewyourtext": "U kunt <strong>uw bewerkingen</strong> aan de brontekst van deze pagina bekijken en kopiëren.",
        "protectedinterface": "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
        "editinginterface": "<strong>Waarschuwing:</strong> u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
        "translateinterface": "Om vertalingen voor alle wiki's toe te voegen of te wijzigen kunt u gebruik maken van [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
-       "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
+       "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
        "namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte <strong>$1</strong> te bewerken.",
        "customcssprotected": "U kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "customjsprotected": "U kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "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.\nGelieve te wachten.",
        "userexists": "De gekozen gebruikersnaam is al in gebruik.\nKies een andere naam.",
        "loginerror": "Aanmeldfout",
        "createacct-error": "Fout tijdens aanmaken gebruiker",
        "readonlywarning": "'''Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
        "protectedpagewarning": "'''Waarschuwing: deze beveiligde pagina kan alleen door gebruikers met beheerdersrechten bewerkt worden.'''\nDe laatste logboekregel staat hieronder:",
        "semiprotectedpagewarning": "'''Let op:''' deze pagina is beveiligd en kan alleen door geregistreerde gebruikers bewerkt worden.\nDe laatste logboekregel staat hieronder:",
-       "cascadeprotectedwarning": "'''Waarschuwing:''' deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat deze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
+       "cascadeprotectedwarning": "<strong>Waarschuwing:</strong> deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
        "titleprotectedwarning": "'''Waarschuwing: Deze pagina is beveiligd. Er zijn [[Special:ListGroupRights|speciale rechten]] nodig om de pagina aan te kunnen maken.'''\nDe laatste logboekregel staat hieronder:",
        "templatesused": "Op deze pagina {{PLURAL:$1|gebruikt sjabloon|gebruikte sjablonen}}:",
        "templatesusedpreview": "{{PLURAL:$1|Sjabloon|Sjablonen}} gebruikt in deze voorvertoning:",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|keer|keer}} op een volglijst]",
-       "rc_categories": "Beperken tot categorieën (scheiden met een \"|\")",
-       "rc_categories_any": "Elke",
+       "rc_categories": "Beperken tot categorieën (scheiden met een \"|\"):",
+       "rc_categories_any": "Een van de aangeduide",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} na de wijziging",
        "newsectionsummary": "/* $1 */ nieuwe subkop",
        "rc-enhanced-expand": "Details weergeven",
        "php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
        "uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
        "upload-scripted-pi-callback": "Het uploaden van een bestand met instructies voor de verwerking van XML-stijlbladen is niet mogelijk.",
-       "uploaded-script-svg": "Gevonden scriptable element \"$1\" in het geüploade SVG-bestand.",
-       "uploaded-hostile-svg": "Gevonden onveilige CSS in de stijl element van het geüploade SVG-bestand .",
+       "uploaded-script-svg": "Scriptable 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-handler attributen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
        "uploaded-href-attribute-svg": "href-attributen <code>&lt;$1 $2=\"$3\"&gt;</code> met niet-lokaal doel (bv. http://, javascript:, enz.) zijn niet toegestaan in SVG-bestanden.",
-       "uploaded-href-unsafe-target-svg": "Gevonden href tot onveilige doel <code><$1 $2=\"$3\"></code> in het geüploade SVG-bestand .",
-       "uploaded-animate-svg": "Gevonden \"animeren\" tag die kan veranderen href behulp van de \"uit\" - attribuut <code><$1 $2=\"$3\"></code> in het geüploade svg-bestand.",
-       "uploaded-setting-event-handler-svg": "Het instellen van de event-handler attributen is geblokkeerd, gevonden <code><$1 $2=\"$3\"></code> in het geüploade SVG-bestand.",
+       "uploaded-href-unsafe-target-svg": "href met onveilig doel <code>&lt;$1 $2=\"$3\"&gt;</code> in het geüploade SVG-bestand gevonden.",
+       "uploaded-animate-svg": "\"animate\"-tag 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-handler-attributen is geblokkeerd, <code>&lt;$1 $2=\"$3\"&gt;</code> gevonden in het geüploade SVG-bestand.",
        "uploaded-setting-href-svg": "Met behulp van de \"set\" tag toevoegen \"href\" attribuut te bovenliggende element is geblokkeerd.",
        "uploaded-wrong-setting-svg": "Met behulp van de \"set\" tag toevoegen van een afstandsbediening/data/script doel aan een kenmerk is geblokkeerd. Gevonden <code><set=\"$1\"></code> in het geüploade SVG-bestand.",
        "uploaded-setting-handler-svg": "SVG-dat stelt de \"handler\" attribuut met afstandsbediening/data/script geblokkeerd. Gevonden <code>$1=\"$2\"</code> in de SVG-bestand geüpload.",
        "upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
        "upload-http-error": "Er is een HTTP-fout opgetreden: $1",
        "upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
-       "backend-fail-stream": "Het was niet mogelijk het bestand $1 te streamen.",
+       "upload-dialog-title": "Bestand uploaden",
+       "upload-dialog-error": "Er is een fout opgetreden",
+       "upload-dialog-warning": "Een waarschuwing is opgetreden",
+       "upload-dialog-button-cancel": "Annuleren",
+       "upload-dialog-button-done": "Afgerond",
+       "upload-dialog-button-save": "Opslaan",
+       "upload-dialog-button-upload": "Upload",
+       "upload-dialog-label-select-file": "Selecteer bestand",
+       "upload-dialog-label-infoform-title": "Details",
+       "upload-dialog-label-infoform-name": "Naam",
+       "upload-dialog-label-infoform-description": "Beschrijving",
+       "upload-dialog-label-usage-title": "Gebruik",
+       "upload-dialog-label-usage-filename": "Bestandsnaam",
+       "backend-fail-stream": "Het was niet mogelijk het bestand \"$1\" te streamen.",
        "backend-fail-backup": "Het was niet mogelijk een reservekopie van het bestand $1 te maken.",
        "backend-fail-notexists": "Het bestand $1 bestaat niet.",
        "backend-fail-hashes": "Het was niet mogelijk de hashes voor het bestand op te halen om ze te vergelijken.",
        "unusedimages": "Ongebruikte bestanden",
        "wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
        "wantedpages": "Niet-bestaande pagina's met koppelingen",
-       "wantedpages-summary": "Lijst van niet-bestaande pagina 's met de meeste schakels naar hen, met uitsluiting van pagina' s die slechts omleidingen linken naar hen. Voor een lijst van niet-bestaande pagina ' s die omleidingen linken naar hen, zie [[{{#special:BrokenRedirects}}|de lijst van gebroken redirects]].",
+       "wantedpages-summary": "Lijst van niet-bestaande pagina's met de meeste koppelingen naar hen, met uitsluiting van pagina's waarheen enkel doorverwijzingen linken. Voor een lijst van niet-bestaande pagina's waar doorverwijzingen naar linken, zie [[{{#special:BrokenRedirects}}|de lijst van gebroken doorverwijzingen]].",
        "wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
        "wantedfiles": "Niet-bestaande bestanden met koppelingen",
        "wantedfiletext-cat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>. Pagina's die niet-bestaande bestanden insluiten staan op de pagina [[:$1]].",
index 9051f4c..826921e 100644 (file)
        "logentry-newusers-create2": "$1 {{GENDER:$2|utworzył|utworzyła}} konto użytkownika $3",
        "logentry-newusers-byemail": "Konto $3 zostało utworzone przez użytkownika $1, hasło wysłano e-mailem",
        "logentry-newusers-autocreate": "$1 automatycznie {{GENDER:$2|utworzył|utworzyła|utworzył}} konto użytkownika",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|przeniósł|przeniosła}} ustawienia zabezpieczeń z $4 do $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup",
        "logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)",
index b80f724..d03c991 100644 (file)
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
-       "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong>{{PLURAL:$2|0=| Veja também a página encontrada com sua pesquisa.|Veja também os resultados das pesquisas encontradas.}}",
+       "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada com sua pesquisa.|Veja também os resultados da pesquisa encontrados.}}",
        "searchprofile-articles": "Páginas de conteúdo",
        "searchprofile-images": "Multimídia",
        "searchprofile-everything": "Tudo",
        "log": "Registros",
        "all-logs-page": "Todos os registros públicos",
        "alllogstext": "Exibição combinada de todos registros disponíveis para o {{SITENAME}}.\nVocê pode diminuir a lista escolhendo um tipo de registro, um nome de usuário (sensível a maiúsculas e minúsculas), ou uma página afetada (também sensível a maiúsculas e minúsculas).",
-       "logempty": "Nenhum item idêntico no registro.",
+       "logempty": "Nenhum item correspondente no registro.",
        "log-title-wildcard": "Procurar por títulos que sejam iniciados com o seguinte texto",
        "showhideselectedlogentries": "Exibir/ocultar os itens de registros selecionados",
        "log-edit-tags": "Editar etiquetas das entradas selecionadas",
index e2a6219..6ed709b 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuidor|contribuidores}} recentes",
        "badretype": "As palavras-passe que introduziu não coincidem.",
+       "usernameinprogress": "Uma conta para este nome de utilizador já está a ser criada.\nPor favor, aguarde.",
        "userexists": "O nome de utilizador introduzido já existe.\nPor favor escolha um nome diferente.",
        "loginerror": "Erro ao iniciar sessão",
        "createacct-error": "Erro na criação da conta",
        "yourdiff": "Diferenças",
        "copyrightwarning": "Note, por favor, que todas as suas contribuições na {{SITENAME}} são consideradas publicadas nos termos da licença $2 (consulte $1 para mais detalhes).\nSe não deseja que o seu texto possa ser inexoravelmente editado e redistribuído, não o envie.\nGarante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre.<br />\n'''Não envie conteúdos cujos direitos de autor estão protegidos, sem ter a devida permissão!'''",
        "copyrightwarning2": "Note, por favor, que todas as suas contribuições na {{SITENAME}} podem ser editadas, alteradas ou removidas por outros utilizadores.\nSe não deseja que o seu texto seja inexoravelmente editado, não o envie.<br />\nGarante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre (consulte $1 para mais detalhes).<br />\n'''Não envie conteúdos cujos direitos de autor estão protegidos, sem ter a devida permissão!'''",
+       "editpage-cannot-use-custom-model": "O modelo de conteúdo desta página não pode ser alterado.",
        "longpageerror": "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''\nA página não pode ser gravada.",
        "readonlywarning": "'''Aviso: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar a sua edição neste momento.'''\nPode, no entanto, copiar e colar o seu texto num ficheiro de texto e guardá-lo para mais tarde.\n\nO administrador que bloqueou a base de dados forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Aviso: Esta página foi protegida para só poder ser editada por administradores.'''\nO último registo é apresentado abaixo para referência:",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 utilizador|$1 utilizadores}} a vigiar]",
        "rc_categories": "Limitar às categorias (separar com \"|\"):",
-       "rc_categories_any": "Qualquer",
+       "rc_categories_any": "Qualquer dos escolhidos",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após mudança",
        "newsectionsummary": "/* $1 */ nova secção",
        "rc-enhanced-expand": "Mostrar detalhes",
        "upload-copy-upload-invalid-domain": "Não é possível realizar carregamentos remotos neste domínio.",
        "upload-dialog-title": "Carregar ficheiro",
        "upload-dialog-error": "Ocorreu um erro",
+       "upload-dialog-warning": "Ocorreu um aviso",
        "upload-dialog-button-cancel": "Cancelar",
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Gravar",
        "unusedimages": "Ficheiros não utilizados",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
+       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações à elas, excluindo páginas que possuem apenas redirecionamentos à elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento à elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "wantedfiles": "Ficheiros desejados",
        "wantedfiletext-cat": "Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].",
        "log": "Registos",
        "all-logs-page": "Todos os registos públicos",
        "alllogstext": "Apresentação combinada de todos os registos disponíveis na wiki {{SITENAME}}.\nPode reduzir a lista escolhendo um tipo de registo, um nome de utilizador ou um título de página. Respeite maiúsculas e minúsculas.",
-       "logempty": "Não há dados a apresentar.",
+       "logempty": "Nenhum item correspondente no registo.",
        "log-title-wildcard": "Procurar títulos iniciados por este texto",
        "showhideselectedlogentries": "Mostrar ou ocultar as entradas selecionadas",
        "log-edit-tags": "Editar etiquetas das entradas de registo selecionadas",
        "undeletepagetext": "{{PLURAL:$1|A seguinte página foi eliminada|As seguintes páginas foram eliminadas}}, mas ainda {{PLURAL:$1|permanece|permanecem}} em arquivo e podem ser restauradas. O arquivo pode ser limpo periodicamente.",
        "undelete-fieldset-title": "Restaurar edições",
        "undeleteextrahelp": "Para restaurar o histórico de edições completo desta página, desmarque todas as caixas de seleção e clique '''''{{int:undeletebtn}}'''''.\nPara efetuar uma restauração seletiva, marque as caixas correspondentes às edições que pretende restaurar e clique '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|edição disponível|edições disponíveis}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisão eliminada|revisões eliminadas}}",
        "undeletehistory": "Se restaurar uma página, todas as edições serão restauradas para o histórico.\nSe uma nova página foi criada com o mesmo nome desde a eliminação, as edições restauradas aparecerão no histórico anterior.",
        "undeleterevdel": "O restauro não será efetuado se resulta na remoção parcial da versão mais recente da página ou ficheiro.\nNestes casos, deverá desmarcar ou revelar a versão eliminada mais recente.",
        "undeletehistorynoadmin": "Esta página foi eliminada. O motivo de eliminação é apresentado no sumário abaixo, junto dos detalhes do utilizador que editou esta página antes de eliminar. O texto atual destas edições eliminadas encontra-se agora apenas disponível para administradores.",
        "importcantopen": "Não foi possível abrir o ficheiro a importar",
        "importbadinterwiki": "Ligação interlíngua incorreta",
        "importsuccess": "Importação completa!",
-       "importnosources": "Não foram definidas fontes de importação transwikis e o carregamento direto de históricos encontra-se desativado.",
+       "importnosources": "Não foram definidas as wikis das quais importar e o carregamento direto de históricos encontra-se desativado.",
        "importnofile": "Nenhum ficheiro de importação foi carregado.",
        "importuploaderrorsize": "O carregamento do ficheiro importado falhou.\nO ficheiro é maior do que o tamanho máximo permitido.",
        "importuploaderrorpartial": "O carregamento do ficheiro importado falhou.\nO ficheiro foi recebido parcialmente.",
        "spam_reverting": "A reverter para a última revisão que não contém ligação para $1",
        "spam_blanking": "Todas as revisões continham ligações para $1; a esvaziar",
        "spam_deleting": "Todas as revisões continham ligações para $1; a eliminar",
-       "simpleantispam-label": "Verificação contra spam.\n<strong>NÃ\83O</strong> preencha isto!",
+       "simpleantispam-label": "Verificação contra spam.\n<strong>Não</strong> preencha isto!",
        "pageinfo-title": "Informações sobre \"$1\"",
        "pageinfo-not-current": "Desculpe, é impossível fornecer esta informação para revisões antigas.",
        "pageinfo-header-basic": "Informação básica",
        "pageinfo-watchers": "Número de vigilantes da página",
        "pageinfo-visiting-watchers": "Número de vigilantes que consultaram as edições recentes da página",
        "pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
+       "pageinfo-few-visiting-watchers": "Pode ou não pode haver editores a vigiar as edições recentes",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
        "pageinfo-subpages-name": "Subpáginas desta página",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})",
        "tags-edit-success": "As alterações foram aplicadas com sucesso.",
        "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
        "tags-edit-nooldid-title": "Revisão de página inválida",
+       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta acção, ou a revisão especificada não existe.",
        "tags-edit-none-selected": "Por favor, selecione pelo menos uma etiqueta para adicionar ou remover.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
        "htmlform-title-not-creatable": "\"$1\" não é um título que possa ser atribuído a uma página",
        "htmlform-title-not-exists": "[[:$1]] não existe.",
        "htmlform-user-not-exists": "<strong>$1</strong> não existe.",
+       "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de utilizador válido.",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
        "sqlite-no-fts": "$1 sem suporte de pesquisa de texto completo",
        "logentry-delete-delete": "$1 apagou a página $3",
        "logentry-newusers-create2": "A conta de utilizador $3 foi criada por $1",
        "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de protecção de $4 para $3",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
        "feedback-message": "Mensagem:",
        "feedback-subject": "Assunto:",
        "feedback-submit": "Enviar",
+       "feedback-terms": "Entendo que as informações de meu agente de utilizador inclui a informação acerca da versão exata de meu navegador e sistema operacional e que serão partilhadas publicamente juntamente aos meus comentários.",
        "feedback-termsofuse": "Concordo em fornecer comentários de acordo com as Condições de Uso.",
        "feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
        "feedback-thanks-title": "Obrigado!",
+       "feedback-useragent": "Agente de utilizador:",
        "searchsuggest-search": "Pesquisa",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
        "mediastatistics-header-audio": "Áudio",
        "mediastatistics-header-video": "Vídeo",
+       "mediastatistics-header-multimedia": "Rich media",
        "mediastatistics-header-office": "Documentos",
        "mediastatistics-header-text": "Textuais",
        "mediastatistics-header-executable": "Executáveis",
index 0cf37cd..0943c83 100644 (file)
        "rows": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Row}}",
        "columns": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Column}}",
        "searchresultshead": "Replaced by {{msg-mw|prefs-searchoptions}}, though may still be used in some extensions. DEPRECATED.\n\n{{Identical|Search}}",
-       "stub-threshold": "Used in [[Special:Preferences]], tab \"Misc\".",
+       "stub-threshold": "Used in [[Special:Preferences]], \"Advanced options\" section. The setting allows the user to select a threshold value, in bytes, from a predefined list of options. Any links that lead to pages smaller than the threshold (\"stub links\") will be styled differently.\n\nParameters:\n* $1: the text of {{msg-mw|stub-threshold-sample-link}}, styled as a stub link",
+       "stub-threshold-sample-link": "Passed as a parameter to the {{msg-mw|stub-threshold}} message.",
        "stub-threshold-disabled": "Used in [[Special:Preferences]].\n{{Identical|Disabled}}",
        "recentchangesdays": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "recentchangesdays-max": "Shown as hint in [[Special:Preferences]], tab \"Recent changes\". Parameters:\n* $1 - number of days\nSee also:\n* {{msg-mw|Prefs-watchlist-days-max}}",
        "upload-dialog-label-infoform-title": "Title for the information form\n{{Identical|Detail}}",
        "upload-dialog-label-infoform-name": "Label for the file name input\n{{Identical|Name}}",
        "upload-dialog-label-infoform-description": "Label for the file description input\n{{Identical|Description}}",
-       "upload-dialog-label-usage-title": "Title for the usage form\n{{Identical|Usage}}",
+       "upload-dialog-label-usage-title": "Title for the insert form showing how to use the uploaded item.\n{{Identical|Usage}}",
        "upload-dialog-label-usage-filename": "Label for the file name input\n{{Identical|Filename}}",
        "backend-fail-stream": "Parameters:\n* $1 - a filename",
        "backend-fail-backup": "Parameters:\n* $1 - a filename",
        "version-api": "{{optional}}",
        "version-other": "{{Identical|Other}}",
        "version-mediahandlers": "Used in [[Special:Version]]. It is the title of a section for media handler extensions (e.g. [[mw:Extension:OggHandler]]).\nThere are no such extensions here, so look at [[wikipedia:Special:Version]] for an example.",
-       "version-hooks": "Shown in [[Special:Version]]",
+       "version-hooks": "Shown in [[Special:Version]]\n{{Identical|Hook}}",
        "version-parser-extensiontags": "Part of [[Special:Version]].\nThis message is followed by the list of parser extension tags like <code><nowiki><charinsert></nowiki></code>, <code><nowiki><coordinates></nowiki></code>, etc.",
        "version-parser-function-hooks": "Shown in [[Special:Version]]",
        "version-hook-name": "Shown in [[Special:Version]].\n\nFor meaning of hook see [[mw:Special:MyLanguage/Manual:Hooks|mw:Manual:Hooks]] and [[w:Hooking]].",
index d26b052..1f65899 100644 (file)
@@ -27,7 +27,9 @@
                        "아라",
                        "Gertakapllani",
                        "OrvenBregu",
-                       "Macofe"
+                       "Macofe",
+                       "Liridon",
+                       "Ammartivari"
                ]
        },
        "tog-underline": "Nënvizo lidhjet:",
@@ -94,7 +96,7 @@
        "february": "shkurt",
        "march": "mars",
        "april": "prill",
-       "may_long": "Maj",
+       "may_long": "maj",
        "june": "qershor",
        "july": "korrik",
        "august": "gusht",
        "feb": "Shku",
        "mar": "Mar",
        "apr": "Pri",
-       "may": "maj",
+       "may": "Maj",
        "jun": "Qer",
        "jul": "Korr",
        "aug": "Gush",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nën-kategori",
-       "category-media-header": "Skeda në kategori \"$1\"",
+       "category-media-header": "Skeda në kategori \"$1\"",
        "category-empty": "''Kjo kategori aktualisht nuk përmban asnjë faqe apo media.''",
        "hidden-categories": "{{PLURAL:$1|Kategori e fshehur|Kategori të fshehura}}",
        "hidden-category-category": "Kategori të fshehura",
        "invalid-content-data": "Të pavlefshme të dhënave e përmbajtjes",
        "editwarning-warning": "Duke e lënë këtë faqe mund të shkaktojë ju për të humbur të gjitha ndryshimet që keni bërë ju.\nNëse ju jeni regjistruar, ju mund të çaktivizoni këtë paralajmërim në \"{{int:prefs-editing}}\" seksionin e preferencave tuaja.",
        "content-model-text": "tekst i thejshtë",
+       "content-model-javascript": "JavaScript",
        "expensive-parserfunction-warning": "Kujdes: Kjo faqe ka shumë kërkesa që kërkojnë analizë gramatikore të kushtueshme për sistemin.\n\nDuhet të ketë më pakë se $2, {{PLURAL:$2|kërkesë|kërkesa}}, kurse tani {{PLURAL:$1|është $1 kërkesë|janë $1 kërkesa}}.",
        "expensive-parserfunction-category": "Faqe me shumë shprehje të kushtueshmë për analizë gramatikore",
        "post-expand-template-inclusion-warning": "'''Kujdes''': Numri i shablloneve që perfshihen është shumë i madh.\nDisa shabllone nuk do të përfshihen.",
        "currentrev": "Versioni i tanishëm",
        "currentrev-asof": "Versioni momental që nga $1",
        "revisionasof": "Versioni i $1",
-       "revision-info": "Versioni më $1 nga $2",
+       "revision-info": "Versioni i datës $1 nga {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version më i vjetër",
        "nextrevision": "Version më i ri →",
        "currentrevisionlink": "shikoni versionin e tanishëm",
        "histlegend": "Legjenda: (tani) = ndryshimet me versionin e tanishëm,\n(fund) = ndryshimet me versionin e parardhshëm, V = redaktim i vogël",
        "history-fieldset-title": "Shfleto historikun",
        "history-show-deleted": "Vetëm versionet të grisur",
-       "histfirst": "Së pari",
-       "histlast": "Së fundmi",
+       "histfirst": "më të vjetër",
+       "histlast": "më të rinj",
        "historysize": "({{PLURAL:$1|1 B|$1 B}})",
        "historyempty": "(bosh)",
        "history-feed-title": "Historiku i versioneve",
        "revdelete-hide-image": "Fshih përmbajtjen skedës",
        "revdelete-hide-name": "Fshihe veprimin dhe shënjestrën",
        "revdelete-hide-comment": "fshih komentin e redaktimit",
-       "revdelete-hide-user": "Fshihe emrin/IP-në të redaktuesit",
+       "revdelete-hide-user": "Nofta e redaktuesit/Adresa IP",
        "revdelete-hide-restricted": "Ndalo të dhëna nga administrues si dhe të tjerë",
        "revdelete-radio-same": "(Mos ndryshoni)",
-       "revdelete-radio-set": "Po",
-       "revdelete-radio-unset": "Jo",
+       "revdelete-radio-set": "Fshehur",
+       "revdelete-radio-unset": "Dukshëm",
        "revdelete-suppress": "Ndalo të dhëna nga administrues si dhe të tjerë",
        "revdelete-unsuppress": "Hiq kufizimet nga versionet e restauruara",
        "revdelete-log": "Arsyeja:",
        "revdelete-no-change": "'''Kujdes:''' artikulli i datës $2, $1 e ka kërkesën e parametrit të dukshmërisë.",
        "revdelete-concurrent-change": "Gabim gjatë modifikimit të artikullit të datës $2, $1: statusi i tij duket të jetë ndryshuar nga dikush tjetër kur ju po provonit ta modifikonit.\nJu lutemi kontrolloni regjistrat.",
        "revdelete-only-restricted": "Gabim gjatë fshehjes së artikullit të datës $2, $1: ju nuk mund të fshihni artikuj nga pamja e administratorëve pa zgjedhur gjithashtu një nga opsionet e tjera të dukshmërisë.",
-       "revdelete-reason-dropdown": "* Arsye grisjeje e përbashkët\n** Shkelje të të drejtave të autorit\n** Informacion pa  kriter personal\n** Potencialisht informacion shfipës",
+       "revdelete-reason-dropdown": "* Arsye të zakonshme të grisjes\n** Shkelje të të drejtave të autorit\n** Komente ose të dhëna personale të papërshtatshme\n** Emër i papërshtatshëm i përdoruesit\n** Të dhëna potencialisht shpifëse",
        "revdelete-otherreason": "Arsye tjetër/shtesë:",
        "revdelete-reasonotherlist": "Arsye tjetër",
        "revdelete-edit-reasonlist": "Arsye grisjeje për redaktimet",
        "compareselectedversions": "Krahasoni versionet e zgjedhura",
        "showhideselectedversions": "Shfaq/fshih versionet e zgjedhura",
        "editundo": "zhbëje",
+       "diff-empty": "(Pa ndryshime)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Një versioni i ndërmjetëm|$1 versione të ndërmjetme}} nga i njëjti përdorues nuk {{PLURAL:$1|është|janë}} paraqitur)",
        "diff-multi-manyusers": "({{PLURAL:$1|Një versioni i ndërmjetshëm|$1 versione të ndërmjetshme}} nga më shumë se $2 {{PLURAL:$2|përdorues|përdorues}} i/të pashfaqur)",
        "searchresults": "Rezultatet e kërkimit",
        "searchresults-title": "Rezultatet e kërkimit për \"$1\"",
        "notextmatches": "Nuk ka asnjë tekst faqeje që përputhet",
        "prevn": "{{PLURAL:$1|$1}} më para",
        "nextn": "{{PLURAL:$1|$1}} më pas",
+       "prev-page": "faqja paraardhëse",
+       "next-page": "faqja pasardhëse",
        "prevn-title": "$1 i mëparshëm {{PLURAL:$1|rezultat|rezultate}}",
        "nextn-title": "$1 në vazhdim {{PLURAL:$1|rezultat|rezultate}}",
        "shown-title": "Trego $1 {{PLURAL:$1|rezultat|rezultate}} për faqe",
        "viewprevnext": "Shikoni ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Në këtë wiki kjo faqe është emëruar \"[[:$1]]\"'''",
-       "searchmenu-new": "'''Hapë faqen \"[[:$1]]\" në këtë wiki!'''",
+       "searchmenu-new": "<strong>Krijo faqen \"[[:$1]]\" në këtë wiki!</strong> {{PLURAL:$2|0=|Shih gjithashtu faqen e gjetur në kërkimin tuaj.|Shih gjithashtu rezultatet e gjetura nga kërkimi.}}",
        "searchprofile-articles": "Përmbajtja e faqeve",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Gjithçka",
        "search-result-category-size": "{{PLURAL:$1|1 anëtar|$1 anëtarë}} ({{PLURAL:$2|1 nën-kategori|$2 nën-kategori}}, {{PLURAL:$3|1 skedë|$3 skeda}})",
        "search-redirect": "(përcjellim $1)",
        "search-section": "(seksioni $1)",
+       "search-category": "(kategoria $1)",
        "search-suggest": "Mos kishit në mendje: $1",
        "search-interwiki-caption": "Projekte simotra",
        "search-interwiki-default": "$1 përfundime:",
        "searchrelated": "të ngjashme",
        "searchall": "të gjitha",
        "showingresults": "Më poshtë tregohen {{PLURAL:$1|'''1''' përfundim|'''$1''' përfundime}} duke filluar nga #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Rezultati <strong>$1</strong> nga <strong>$3</strong>|Rezultatet <strong>$1 - $2</strong> nga <strong>$3</strong>}}",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkim i përparuar",
        "powersearch-ns": "Kërkim në hapësira:",
        "prefs-personal": "Përdoruesi",
        "prefs-rc": "Ndryshime së fundmi",
        "prefs-watchlist": "Lista mbikqyrëse",
+       "prefs-editwatchlist": "Redakto listën mbikqyrëse",
        "prefs-watchlist-days": "Numri i ditëve të treguara tek lista mbikqyrëse:",
        "prefs-watchlist-days-max": "Maksimumi $1 ditë",
        "prefs-watchlist-edits": "Numri i redaktimeve të treguara tek lista mbikqyrëse e zgjeruar:",
        "timezoneregion-indian": "Oqeani Indian",
        "timezoneregion-pacific": "Oqeani Paqësor",
        "allowemail": "Lejo përdoruesit të më dërgojnë email",
-       "prefs-searchoptions": "Mundësi kërkimi",
+       "prefs-searchoptions": "Kërko",
        "prefs-namespaces": "Hapësirat",
        "default": "parazgjedhje",
        "prefs-files": "Figura",
        "badsiglength": "Nënshkrimi është tepër i gjatë.\nNuk duhet të jetë më i gjatë se $1 {{PLURAL:$1|karakter|karaktere}}.",
        "yourgender": "Gjinia:",
        "gender-unknown": "e pacaktuar",
-       "gender-male": "Mashkull",
-       "gender-female": "Femër",
+       "gender-male": "Ai redakton faqet wiki",
+       "gender-female": "Ajo redakton faqet wiki",
        "prefs-help-gender": "Sipas dëshirës: përdoret për adresim korrekt në relacion me gjininë nga software-i.\nKjo informatë është publike.",
        "email": "Email",
        "prefs-help-realname": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jipni do të përmendeni si kontribues për punën që ke bërë.",
        "prefs-dateformat": "Data i formatit",
        "prefs-timeoffset": "Kohë të kompensuar",
        "prefs-advancedediting": "Opsionet e avancuar",
+       "prefs-editor": "redaktor",
+       "prefs-preview": "Parapamje",
        "prefs-advancedrc": "Opsionet e avancuar",
        "prefs-advancedrendering": "Opsionet e avancuar",
        "prefs-advancedsearchoptions": "Opsionet e avancuar",
        "right-importupload": "Importo faqet nga një ngarkim skede",
        "right-patrol": "Shëno redaktimin e tjerëve si të patrulluar",
        "right-autopatrol": "A e vet redaktimet e shënuar automatikisht patrulluar",
-       "right-patrolmarks": "Shiko ndryshimet e fundit shënon patrullë",
+       "right-patrolmarks": "Shiko shënimet patrulluese tek ndryshimet e fundit",
        "right-unwatchedpages": "Shiko listën e faqeve të pa vëzhguara",
        "right-mergehistory": "Bashko historinë e faqeve",
        "right-userrights": "Redakto të gjitha të drejtat e përdoruesit",
        "action-siteadmin": "mbyll ose hap bazën e të dhënave",
        "action-sendemail": "dërgo e-maile",
        "nchanges": "$1 {{PLURAL:$1|ndryshim|ndryshime}}",
+       "enhancedrc-history": "historia",
        "recentchanges": "Ndryshimet e fundit",
        "recentchanges-legend": "Zgjedhjet e ndryshimeve momentale",
        "recentchanges-summary": "Ndiqni ndryshime së fundmi tek kjo faqe.",
        "recentchanges-feed-description": "Ndjek ndryshimet më të fundit në wiki tek kjo fushë.",
        "recentchanges-label-newpage": "Ky redaktim krijoi një faqe të re",
        "recentchanges-label-minor": "Ky është një editim i vogël",
-       "recentchanges-label-bot": "Ky editim është kryer nga një bot",
+       "recentchanges-label-bot": "Ky redaktim u krye nga një robot",
        "recentchanges-label-unpatrolled": "Ky editim ende nuk është patrolluar",
-       "recentchanges-legend-newpage": "$1 - faqe të re",
+       "recentchanges-label-plusminus": "Madhësia e faqes ndryshoi me këtë numër bajtësh",
+       "recentchanges-legend-heading": "'''Legjenda:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (shiko gjithashtu [[Special:NewPages|listën e faqeve të reja]])",
        "rcnotefrom": "Më poshtë janë ndryshime së fundmi nga <b>$2</b> (treguar deri në <b>$1</b>).",
        "rclistfrom": "Tregon ndryshime së fundmi duke filluar nga $3 $2",
        "rcshowhideminor": "$1 redaktimet e vogla",
+       "rcshowhideminor-show": "Shfaq",
+       "rcshowhideminor-hide": "Fshih",
        "rcshowhidebots": "$1 robotët",
-       "rcshowhideliu": "$1 përdoruesit e regjistruar",
+       "rcshowhidebots-show": "Shfaq",
+       "rcshowhidebots-hide": "Fshih",
+       "rcshowhideliu": "$1 përdorues të regjistruar",
+       "rcshowhideliu-hide": "Fshih",
        "rcshowhideanons": "$1 përdoruesit anonim",
+       "rcshowhideanons-show": "Shfaq",
+       "rcshowhideanons-hide": "Fshih",
        "rcshowhidepatr": "$1 redaktime të patrulluara",
        "rcshowhidemine": "$1 redaktimet e mia",
+       "rcshowhidemine-show": "Shfaq",
+       "rcshowhidemine-hide": "Fshih",
        "rclinks": "Trego $1 ndryshime gjatë $2 ditëve<br />$3",
        "diff": "ndrysh",
        "hist": "hist",
        "uploadnewversion-linktext": "Ngarkoni një version të ri për këtë skedë",
        "shared-repo-from": "nga $1",
        "shared-repo": "një magazinë e përbashkët",
+       "upload-disallowed-here": "Ju nuk mund mbishkruani këtë skedë.",
        "filerevert": "Rikthe $1",
        "filerevert-legend": "Rikthe skedën",
        "filerevert-intro": "Po ktheni '''[[Media:$1|$1]]''' tek [versioni $4 i $3, $2].",
        "querypage-disabled": "Kjo faqe speciale është çaktivizuar për arsye të performancës.",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim burimor librash",
+       "booksources-search": "Kërko",
        "booksources-text": "Më posht është një listë me lidhje të cilët shesin ose përdorin libra dhe munden të kenë informacione për librat që kërkoni ju:",
        "booksources-invalid-isbn": "ISBN-ja e dhënë nuk duket të jetë e vlefshme; kontrolloni oër gabime gjatë kopjimit nga burimi origjinal.",
        "specialloguserlabel": "Performuesi:",
        "listgrouprights-removegroup-self-all": "Hiq të gjitha grupet nga llogaria",
        "mailnologin": "S'ka adresë dërgimi",
        "mailnologintext": "Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.",
-       "emailuser": "Email përdoruesit",
-       "emailpage": "Dërgo email përdoruesve",
+       "emailuser": "Email {{GENDER:{{PAGENAME}}|përdoruesit|përdorueses}}",
        "emailpagetext": "Mund të përdorni formularin e mëposhtëm për të dërguar e-mail tek ky përdorues.\nAdresa e email-it që shkruat tek [[Special:Preferences|preferencat tuaja]] do të duket si \"Nga\" adresa e email-it, pra marrësi do të ketë mundësinë t'ju përgjigjet direkt.",
        "defemailsubject": "{{SITENAME}} posta elektronike nga përdoruesi \"$1\"",
        "usermaildisabled": "Email-i i përdoruesit çaktivizua",
        "tooltip-pt-mycontris": "Lista e kontributeve tuaja",
        "tooltip-pt-login": "Identifikimi nuk është i detyrueshëm, megjithatë ne jua rekomandojmë.",
        "tooltip-pt-logout": "Dalje",
+       "tooltip-pt-createaccount": "Ju rekomandojmë të krijoni një llogari dhe të kyqeni; megjithatë,  nuk është e detyrueshme",
        "tooltip-ca-talk": "Diskutim për përmbajtjen e faqes",
        "tooltip-ca-edit": "Redakto këtë faqe",
        "tooltip-ca-addsection": "Fillo një temë të re diskutimi.",
        "tooltip-feed-rss": "Burimi ushqyes \"RSS\" për këtë faqe",
        "tooltip-feed-atom": "Burimi ushqyes \"Atom\" për këtë faqe",
        "tooltip-t-contributions": "Shiko listën e kontributeve për përdoruesin në fjalë",
-       "tooltip-t-emailuser": "Dërgoni një email përdoruesit",
+       "tooltip-t-emailuser": "Dërgoni një email {{GENDER:{{PAGENAME}}|përdoruesit|përdorueses}}",
        "tooltip-t-upload": "Ngarko skeda",
        "tooltip-t-specialpages": "Lista e të gjitha faqeve speciale.",
        "tooltip-t-print": "Version i shtypshëm i kësaj faqeje",
        "spam_reverting": "U kthye tek versioni i fundit që s'ka lidhje tek $1",
        "spam_blanking": "U boshatis sepse të gjitha versionet kanë lidhje tek $1",
        "spam_deleting": "Të gjitha inspektimet përmbanin lidhje në $1, duke fshirë",
-       "simpleantispam-label": "Kontroll anti-spam.\n'''MOS''' e plotësoni këtë!",
+       "simpleantispam-label": "Kontrolli anti-spam.\n<strong>Mos</strong> e plotëso këtë!",
        "pageinfo-title": "Informacion për \" $1 \"",
        "pageinfo-header-edits": "Redaktimet",
        "pageinfo-watchers": "Numri i mbikqyrësve",
        "pageinfo-edits": "Numri i redaktimeve",
        "pageinfo-authors": "Numri i autorëve të veçantë",
+       "pageinfo-toolboxlink": "Informacioni i faqes",
        "markaspatrolleddiff": "Shënoje si të patrulluar",
        "markaspatrolledtext": "Shënoje këtë artikull të patrulluar",
        "markedaspatrolled": "Shënoje të patrulluar",
        "file-info-size-pages": "$1 × $2 pixel, madhësia e dokumentit: $3 , MIME tipi: $4 , $5 {{PLURAL:$5| faqe | faqet}}",
        "file-nohires": "Nuk ka rezolucion më të madh.",
        "svg-long-desc": "skedë SVG, fillimisht $1 × $2 pixel, madhësia e skedës: $3",
-       "show-big-image": "Rezolucion i plotë",
+       "show-big-image": "Dokument origjinal",
        "show-big-image-preview": "Madhësia e këtij shikimi: $1.",
        "show-big-image-other": "{{PLURAL:$2|Rezolucion tjetër|Rezolucione të tjera}}: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "tags": "Etiketat e ndryshimeve të pavlefshme",
        "tag-filter": "[[Special:Tags|Etiketa]] filter:",
        "tag-filter-submit": "Filtër",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketat}}]]: $2)",
        "tags-title": "Etiketat",
        "tags-intro": "Kjo faqe liston etiketat që softueri mund t'i shënojë me një redaktim, dhe kuptimin e tyre.",
        "tags-tag": "Emri i etiketës",
        "htmlform-selectorother-other": "Gjitha",
        "sqlite-has-fts": "$1 me mbështetje të kërkimit me teskt të plotë",
        "sqlite-no-fts": "$1 pa mbështetje të kërkimit me teskt të plotë",
-       "logentry-delete-delete": "$1 grisi faqen $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|grisi}} faqen $3",
        "logentry-delete-restore": "$1 riktheu faqen $3",
        "logentry-delete-event": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një ngjarje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
        "logentry-delete-revision": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një versioni|$5 versioneve}} në $3: $4",
        "revdelete-uname-unhid": "emri i përdoruesit jo i fshehur",
        "revdelete-restricted": "u vendosën kufizime për administruesit",
        "revdelete-unrestricted": "u hoqën kufizimet për administruesit",
-       "logentry-move-move": "$1 zhvendosi faqen $3 te $4",
+       "logentry-move-move": "$1 {{GENDER:$2|zhvendosi}} faqen $3 tek $4",
        "logentry-move-move-noredirect": "$1 zhvendosi faqen $3 te $4 pa lënë një përcjellim",
        "logentry-move-move_redir": "$1 zhvendosi faqen $3 te $4 nëpërmjet përcjellimit",
        "logentry-move-move_redir-noredirect": "$1 zhvendosi faqen $3 te $4 nëpërmjet një përcjellimi pa lënë një përcjellim",
        "logentry-patrol-patrol": "$1 shënoi versionin $4 të faqes $3 të patrolluar",
        "logentry-patrol-patrol-auto": "$1 automatikisht shënoi versionin $4 të faqes $3 të patrolluar",
        "logentry-newusers-newusers": "$1 krijoi një llogari",
-       "logentry-newusers-create": "$1 krijoi një llogari",
+       "logentry-newusers-create": "Llogaria e {{GENDER:$2|përdoruesit|përdorueses}} $1 u krijua.",
        "logentry-newusers-create2": "$1 krijoi një llogari $3",
        "logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ngarkoi}} $3",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
        "feedback-adding": "Duke shtuar përshtypjen te faqja...",
index b18cc6b..1bdd3d5 100644 (file)
        "undeletepagetext": "{{PLURAL:$1|Следећа страница је обрисана, али је још у архиви и може бити враћена|Следеће $1 странице су обрисане, али су још у архиви и могу бити враћене|Следећих $1 страница је обрисано, али су још у архиви и могу бити враћене}}.\nАрхива се повремено чисти од оваквих страница.",
        "undelete-fieldset-title": "Враћање измена",
        "undeleteextrahelp": "Да бисте вратили целу историју странице, оставите све кућице неозначене и кликните на дугме '''''{{int:undeletebtn}}'''''.\nАко желите да вратите одређене измене, означите их и кликните на '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|измена је архивирана|измене су архивиране|измена је архивирано}}",
+       "undeleterevisions": "{{PLURAL:$1|Измена}} обрисано: $1",
        "undeletehistory": "Ако вратите страницу, све ревизије ће бити враћене њеној историји.\nАко је у међувремену направљена нова страница с истим називом, враћене измене ће се појавити у њеној ранијој историји.",
        "undeleterevdel": "Враћање неће бити извршено ако је резултат тога делимично брисање последње измене.\nУ таквим случајевима морате искључити или открити најновије обрисане измене.",
        "undeletehistorynoadmin": "Ова страница је обрисана.\nРазлог за брисање се налази испод, заједно с детаљима о кориснику који је изменио ову страницу пре брисања.\nТекст обрисаних измена је доступан само администраторима.",
        "tags-deactivate-reason": "Разлог:",
        "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
        "tags-deactivate-submit": "Декативирај",
+       "tags-edit-title": "Уреди ознаке",
        "tags-edit-existing-tags": "Постојеће ознаке:",
        "tags-edit-new-tags": "Нове ознаке:",
        "tags-edit-reason": "Разлог:",
index af99a41..8d32a88 100644 (file)
        "logentry-newusers-create2": "Användarkonto $3 har {{GENDER:$2|skapats}} av $1",
        "logentry-newusers-byemail": "Användarkontot $3 har {{GENDER:$2|skapats}} av $1 och lösenordet skickades via e-post",
        "logentry-newusers-autocreate": "Användarkontot $1 {{GENDER:$2|skapades}} automatiskt",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|flyttade}} skyddsinställningarna från $4 till $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5",
index 17ab3e7..be1612f 100644 (file)
        "minoreditletter": "சி",
        "newpageletter": "பு",
        "boteditletter": "தா",
-       "unpatrolledletter": "\n{{delete}}\n!",
        "number_of_watching_users_pageview": "[இப்பக்க்த்தை {{PLURAL:$1|ஒரு பயனர் பார்கிறார்|$1 பயனர்கள் பார்கிறார்கள்}}]",
        "rc_categories": "பகுப்புகளுக்கு மட்டுப்படுத்து (\"|\" குறியீட்டால் பிரிக்கப்பட்டுள்ளது)",
        "rc_categories_any": "ஏதாவது",
index 0b9c883..4406660 100644 (file)
        "tooltip-ca-watch": "Bu sayfayı izleme listenize ekleyin",
        "tooltip-ca-unwatch": "Bu sayfayı izleme listenizden çıkarın",
        "tooltip-search": "{{SITENAME}} içinde ara",
-       "tooltip-search-go": "Eğer varsa, tam bu addaki bir sayfaya git",
+       "tooltip-search-go": "Eğer varsa, aynı isimli sayfaya gidin",
        "tooltip-search-fulltext": "Sayfalarda bu metni ara",
        "tooltip-p-logo": "Ana sayfayı ziyaret edin",
        "tooltip-n-mainpage": "Ana sayfaya git",
index 99a6fd0..fe9ec13 100644 (file)
@@ -23,7 +23,8 @@
                        "아라",
                        "Derslek",
                        "Macofe",
-                       "Selimcan"
+                       "Selimcan",
+                       "Исмаил Садуев"
                ]
        },
        "tog-underline": "Сылтамаларның астына сызу:",
        "qbfind": "Эзләү",
        "qbbrowse": "Карау",
        "qbedit": "Үзгәртү",
-       "qbpageoptions": "Ð\91Ñ\83 Ð±Ð¸Ñ\82",
+       "qbpageoptions": "Ð\90гÓ\80онан Ñ\82одаÑ\80Ñ\88",
        "qbmyoptions": "Битләрем",
        "faq": "ЕБС",
        "faqpage": "Project:ЕБС",
        "emailuser": "Бу кулланучыга хат",
        "emailuser-title-target": "{{GENDER:$1|Кулланучыга}} электрон хат язу",
        "emailuser-title-notarget": "Кулланучыга хат җибәрү",
-       "emailpage": "Кулланучыга хат җибәрү",
        "emailpagetext": "Әлеге форма ярдәмендә {{GENDER:$1|кулланучының}} электрон почта адресына хат җибәрергә мөмкин. Җибәрелгән адрес исемендә Сезнең [[Special:Preferences|көйләнмәләрдә]] күрсәтелгән адресыгыз күрсәтеләчәк, шуның ярдәмендә Сез ул кулланучы белән турыдан-туры сөйләшә аласыз.",
        "defemailsubject": "{{SITENAME}}: хат",
        "noemailtitle": "Электрон почта адресы юк",
index 8f009ca..39554c2 100644 (file)
        "permalink": "Link parmanente",
        "print": "Stanpa",
        "view": "Varda",
+       "view-foreign": "Varda su $1",
        "edit": "Canbia",
        "create": "Crea",
+       "create-local": "Xonta na descrision local",
        "editthispage": "Canbia sta pagina",
        "create-this-page": "Crea sta pagina",
        "delete": "Scansela",
        "loginlanguagelabel": "Lengua: $1",
        "suspicious-userlogout": "Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.",
        "pt-login": "Va drento",
+       "pt-login-button": "Va drento",
+       "pt-createaccount": "Crea utensa",
+       "pt-userlogout": "Và fora",
        "php-mail-error-unknown": "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
        "user-mail-no-addy": "Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.",
        "user-mail-no-body": "Tentà de inviar na e-mail có un testo vodo o masa curto.",
        "currentrev": "Ultima version",
        "currentrev-asof": "Ultima version de le $1",
        "revisionasof": "Version de le $1",
-       "revision-info": "Version del $1, autor: $2",
+       "revision-info": "Version del $1 de {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version pi vecia",
        "nextrevision": "Version pì nova →",
        "currentrevisionlink": "Ultima version",
        "showhideselectedversions": "Mostra/scondi version selessionà",
        "editundo": "tira indrìo",
        "diff-empty": "(Nissuna difarensa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} del stesso utente mia mostrà)",
        "diff-multi-manyusers": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de pi de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)",
        "difference-missing-revision": "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.\n\nCuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.\nI detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
        "searchresults": "Risultati de la riserca",
        "searchrelated": "ligà",
        "searchall": "tuti",
        "showingresults": "Qua de soto vien mostrà al massimo {{PLURAL:$1|'''1''' risultato|'''$1''' risultati}} a partir dal nùmaro '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Risultato <strong>$1</strong> de <strong>$3</strong>|Risultati <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "La riserca no la gà catà gnente.",
        "powersearch-legend": "Riserca avansà",
        "powersearch-ns": "Serca ne i namespace:",
        "prefs-diffs": "Difarense",
        "email-address-validity-valid": "L'indiriso de posta eletronega pararìa vałido",
        "email-address-validity-invalid": "Inserisi un indiriso de posta eletronega vałido",
-       "userrights": "Gestion dei parmessi relativi ai utenti",
+       "userrights": "Gestion dei parmessi dei utenti",
        "userrights-lookup-user": "Gestion de i gruppi utente",
        "userrights-user-editname": "Inserir el nome utente:",
        "editusergroup": "Modifica grupi utente",
        "recentchanges-label-bot": "Sta modifica el la ga fata un bot",
        "recentchanges-label-unpatrolled": "Sta modifica no la xe stà gnancora verificà",
        "recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
+       "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rcshowhideliu": "$1 i utenti registrài",
        "rcshowhideliu-hide": "Scondi",
        "rcshowhideanons": "$1 i utenti anonimi",
+       "rcshowhideanons-show": "Mostra",
        "rcshowhideanons-hide": "Scondi",
        "rcshowhidepatr": "$1 łe modifeghe controłae",
        "rcshowhidemine": "$1 i me canbiamenti",
        "emailuser": "Scrìveghe a sto utente",
        "emailuser-title-target": "Scrivi na e-mail a {{GENDER:$1|sto|sta}} utente",
        "emailuser-title-notarget": "Scrivi na e-mail a l'utente",
-       "emailpage": "Scrivi na e-mail a l'utente",
        "emailpagetext": "Te podi usar el moduło chi soto par mandare na e-mail a sto {{GENDER:$1|utente}}.\nŁa e-mail che te ghè indicà inte łe [[Special:Preferences|to prefarense]] ła vegnarà fora inte'l canpo \"Da\" de la mail, cusì che'l destinatario el posa rispóndarte diretamente a ti.",
        "defemailsubject": "Mesajo da {{SITENAME}} dal utente \"$1\"",
        "usermaildisabled": "e-mail utente disabiłità",
        "tooltip-pt-login": "Te consiliemo de registrarte, ma no te ghè da farlo par forsa.",
        "tooltip-pt-logout": "Và fora",
        "tooltip-ca-talk": "Discussion sul contenuto de sta pagina",
-       "tooltip-ca-edit": "Te poli canbiar sta pagina. Par piaser dòpara el boton de anteprima, prima de salvar.",
+       "tooltip-ca-edit": "Modifega sta pagina",
        "tooltip-ca-addsection": "Scumisia na nova sesion",
        "tooltip-ca-viewsource": "Sta pagina la xe proteta, ma te poli vardar el so testo",
        "tooltip-ca-history": "Version vece de sta pagina",
        "spam_reverting": "Ripristinà l'ultima version priva de colegamenti a $1",
        "spam_blanking": "Pàxena svodà, tute łe version le contegneva cołegamenti a $1",
        "spam_deleting": "Pàjina scansełà, tute łe version łe contegneva ligamenti a $1",
-       "simpleantispam-label": "Controlo anti spam.\n'''NO STA''' scrivar gnente qua de soto!",
+       "simpleantispam-label": "Controlo anti spam.\n<strong>No stà</strong> scrivar gnente qua drento!",
        "pageinfo-title": "Informasion par \"$1\"",
        "pageinfo-not-current": "Ne disipiaxe, ma xe inposibiłe fornir sta informasion par vecie version.",
        "pageinfo-header-basic": "Informassion de base",
        "logentry-rights-rights": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa de $3 dal grupo $4 al grupo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa a grupi de $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|el|la}} gà cargà $3",
        "rightsnone": "(nissun)",
        "revdelete-summary": "modifica ogeto",
        "feedback-adding": "Inserimento del feedback inte ła pàjina...",
index a8cb6ba..471fda9 100644 (file)
        "autosumm-newblank": "Đã tạo trang trống",
        "size-kilobytes": "$1 kB",
        "size-kilopixel": "$1 kP",
-       "bitrate-bits": "$1 bps",
-       "bitrate-kilobits": "$1 kbps",
-       "bitrate-megabits": "$1 Mbps",
-       "bitrate-gigabits": "$1 Gbps",
-       "bitrate-terabits": "$1 Tbps",
-       "bitrate-petabits": "$1 Pbps",
+       "bitrate-bits": "$1 bit/s",
+       "bitrate-kilobits": "$1 kbit/s",
+       "bitrate-megabits": "$1 Mbit/s",
+       "bitrate-gigabits": "$1 Gbit/s",
+       "bitrate-terabits": "$1 Tbit/s",
+       "bitrate-petabits": "$1 Pbit/s",
        "bitrate-exabits": "$1 Ebps",
-       "bitrate-zetabits": "$1 Zbps",
-       "bitrate-yottabits": "$1 Ybps",
+       "bitrate-zetabits": "$1 Zbit/s",
+       "bitrate-yottabits": "$1 Ybit/s",
        "lag-warn-normal": "Những thay đổi trong vòng $1 {{PLURAL:||}}giây trở lại đây có thể chưa xuất hiện trong danh sách.",
        "lag-warn-high": "Do độ trễ của máy chủ cơ sở dữ liệu, những thay đổi trong vòng $1 {{PLURAL:$1||}}giây trở lại đây có thể chưa xuất hiện trong danh sách.",
        "watchlistedit-normal-title": "Sửa các trang tôi theo dõi",
index 5f06880..ae6928f 100644 (file)
@@ -19,7 +19,8 @@
                        "TheChampionMan1234",
                        "Fitoschido",
                        "Poiuyt",
-                       "反共复国"
+                       "反共复国",
+                       "姑苏小恐龙"
                ]
        },
        "tog-underline": "鏈接下橫線:",
        "jumptonavigation": "导航",
        "jumptosearch": "搜寻",
        "view-pool-error": "對弗住,服務器能界超載。\n望箇頁個人忒多哉。\n相勞爾等瑲起再試試相趒箇頁來。\n\n$1",
+       "generic-pool-error": "對弗住,服務器能界超載。\n望箇頁個人忒多哉。\n相勞爾等瑲起再試試相趒箇頁來。",
        "pool-timeout": "等锁过时",
        "pool-queuefull": "池队列满哉",
        "pool-errorunknown": "弗识个错误",
+       "pool-servererror": "池计数器服务现在弗好用($1)",
        "poolcounter-usage-error": "用法出错:$1",
        "aboutsite": "有关{{SITENAME}}",
        "aboutpage": "Project:关于",
        "ok": "好",
        "retrievedfrom": "取自“$1”",
        "youhavenewmessages": "你侬有$1($2)。",
+       "youhavenewmessagesfromusers": "侬有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。",
        "newmessageslinkplural": "{{PLURAL:$1|新消息|999=新消息}}",
        "newmessagesdifflinkplural": "此垡̺{{PLURAL:$1|变化|999=变化}}",
        "youhavenewmessagesmulti": "爾徠$1裏有新信息",
        "no-null-revision": "\"$1\"页呒处建新个修改",
        "badtitle": "坏标题",
        "badtitletext": "所请求页面个标题是无效个、弗存在,跨语言或跨wiki链接个标题错误。渠作兴包含一只或多只弗好用拉标题里向字符。",
+       "title-invalid-empty": "请求个页面标题是空个,或着只包括名字空间个名称。",
+       "title-invalid-utf8": "请求个页面标题包括一只无效个UTF-8序列。",
+       "title-invalid-interwiki": "请求个页面标题包含跨wiki个链接,伊弗好用于标题。",
+       "title-invalid-talk-namespace": "请求个页面标题引用子一只弗好存在个讨论页面。",
        "title-invalid-characters": "请求个页面标题包括无效字符:“$1”。",
+       "title-invalid-relative": "标题有相对个路径。相关个页面标题(./, ../)呒没效果,因为用户浏览器经常呒没办法到达这些页面。",
+       "title-invalid-magic-tilde": "请求个页面标题包含呒没效果个连续波浪线(<nowiki>~~~</nowiki>)。",
        "title-invalid-too-long": "请求个页面标题忒长。作为UTF-8编码,它弗好超过$1个{{PLURAL:$1|字节}}。",
+       "title-invalid-leading-colon": "请求个页面标题开头包括一只呒没效果个冒号。",
        "perfcached": "下向是缓存数据,呒数弗是最新个。 A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "下头是缓存数据,阿末一趟更新辰光是$1。缓存里最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "当前禁止对此页面进行更新。箇搭个数据弗好立即刷新。",
        "actionthrottled": "动作已压制",
        "actionthrottledtext": "基于反垃圾链接个考量,限制垃拉短时间内多趟重复箇只操作。请过脱几分钟再试试看。",
        "protectedpagetext": "箇页锁牢定,防编搭各许操作。",
-       "viewsourcetext": "侬可以查看搭仔复制箇只页面个源码",
+       "viewsourcetext": "侬可以查看搭仔复制箇只页面个源码",
        "viewyourtext": "你侬好望也好畀'''你侬编个'''复制到箇页:",
        "protectedinterface": "箇页为箇维基个软件提供界面文本,锁牢定防乱用。\n加改全部维基个译文,用[//translatewiki.net/ translatewiki.net],MediaWiki软件个本地化计划。",
        "editinginterface": "<strong>警告:</strong>侬来里编写个页面是畀软件用个界面文本。箇页变化会影响各许人个界面样子。",
+       "translateinterface": "要加入或着更改所有个wiki个翻译,请侬访问MediaWiki本地化项目个网站[//translatewiki.net/ translatewiki.net]。",
        "cascadeprotected": "箇只页面拨保护拉许,因为箇只页面拨下底已经标注“级联保护”个{{PLURAL:$1|一只|多只}}被保护页面包含:\n$2",
        "namespaceprotected": "侬无没编辑'''$1'''名字空间里向页面个权限。",
        "customcssprotected": "箇CSS页你呒处编,箇页有各许用户个私人设置。",
        "createacct-benefit-body2": "{{PLURAL:$1|页}}",
        "createacct-benefit-body3": "此垡 {{PLURAL:$1|出力个人}}",
        "badretype": "倷输入个密码搭倪个档案弗配。",
+       "usernameinprogress": "迭个用户名个账户创建已经勒了进行。请侬等一等。",
        "userexists": "用戶名有人用哉。相勞爾揀別樣名字。",
        "loginerror": "登录错误",
        "createacct-error": "建账号出错",
        "login-migrated-generic": "侬个账号已经畀移脱哉,并且侬个用户名来箇wiki弗再存在。",
        "loginlanguagelabel": "语言:$1",
        "suspicious-userlogout": "侬登出个要求已经拨回头脱,因为渠可能是由已损坏个浏览器或者缓存代理传送个。",
+       "createacct-another-realname-tip": "真实姓名是选填个项目。\n假使侬选择提供伊,伊会得用勒了贡献署名方面高头。",
        "pt-login": "登录",
        "pt-login-button": "登录",
        "pt-createaccount": "建账号",
        "pt-userlogout": "登出",
+       "user-mail-no-addy": "尝试发送邮件而弗附带电子邮件个地址。",
+       "user-mail-no-body": "试图发送空个或者主体短的一点也弗合理个电子邮件",
        "changepassword": "改密码",
        "resetpass_announce": "要完成登录,侬必须设定一只新密码。",
        "resetpass_header": "更改密码",
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "无效个临时或者现有密码。\n侬作兴已经成功拿密码改脱,或者已经请求一个新个临时密码。",
+       "resetpass-recycled": "请重置侬个密码是忒侬当前密码不同个密码。",
        "resetpass-temp-password": "临时密码:",
        "passwordreset": "重置密码",
        "passwordreset-username": "用戶名",
        "listgrouprights-members": "(成员列表)",
        "emailuser": "发电子信畀箇个用户",
        "emailuser-title-notarget": "郵箱用戶",
-       "emailpage": "郵箱用戶",
        "emailfrom": "從",
        "emailto": "發畀",
        "emailsubject": "主題",
index 5646814..b2dfd21 100644 (file)
        "title-invalid-interwiki": "דער געזונט ער בלאט־קעפל אנטהאלט אן אינטערוויקי־לינק, וואס מ'קען נישט ניצן אין א קעפל.",
        "title-invalid-talk-namespace": "דער געזוכטער בלאט־קעפל באציט זיך צו א שמועס־בלאט וואס קען נישט עקזעסטירן.",
        "title-invalid-characters": "דער געזוכטער בלאט־קעפל אנטהאלט אומגילטיקע צייכענען: \"$1\".",
+       "title-invalid-relative": "דער טיטל האט א רעלאטיוון שטעג. . רעלאטיווע בלאט טיטלען  (./, ../) זענען אומגילטיג, ווייל אפט זענען זיי אומגרייכבאר דורכן בלעטערער פונעם באניצער.",
+       "title-invalid-magic-tilde": "דער געבעטענער בלאט־טיטל אנטהאלט אן אומגילטיגן מאגישן טילדה־סעקווענץ (<nowiki>~~~</nowiki>).",
        "title-invalid-leading-colon": "דער געבעטענער בלאט־טיטל הייבט אן מיט אן אומגילטיגן צווייפינטל.",
        "perfcached": "די פאלגנדע דאטן זענען גענומען פונעם 'זאַפאַס' און מעגלעך נישט אקטועל. מאקסימום {{PLURAL:$1|איין רעזולטאט איז|$1 רעזולטאטן זענען}} פאראן אין זאפאס.",
        "perfcachedts": "די פאלגנדע דאטן זענען פונעם זאַפאַס, וואס איז לעצט געווארן דערהײַנטיגט $1. מאקסימום {{PLURAL:$4|איין רעזולטאט איז|$4 רעזולטאטן זענען}} פאראן אין זאפאס",
        "upload-too-many-redirects": "דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.",
        "upload-http-error": "א HTTP גרײַז האט פאַסירט: $1",
        "upload-copy-upload-invalid-domain": "ארויפלאדן טעקעס פון דעם דאמיין נישט מעגלעך.",
+       "upload-dialog-title": "אַרױפֿלאָדן טעקע",
+       "upload-dialog-error": "א גרײַז האט פאסירט",
+       "upload-dialog-warning": "א ווארענונג האט פאסירט",
+       "upload-dialog-button-cancel": "אַנולירן",
+       "upload-dialog-button-done": "ערליידיקט",
+       "upload-dialog-button-save": "אויפֿהיטן",
+       "upload-dialog-button-upload": "אַרויפֿלאָדן",
+       "upload-dialog-label-select-file": "קלויבן טעקע",
+       "upload-dialog-label-infoform-title": "פרטים",
+       "upload-dialog-label-infoform-name": "נאָמען",
+       "upload-dialog-label-infoform-description": "באַשרײבונג",
+       "upload-dialog-label-usage-title": "באניץ",
+       "upload-dialog-label-usage-filename": "טעקע נאמען",
        "backend-fail-stream": "קען נישט מאכן שטראמען טעקע $1.",
        "backend-fail-notexists": "נישט פֿאראן די טעקע $1.",
        "backend-fail-notsame": "א נישט־אידענטישע טעקע עקזיסטירט שוין ביי \"$1\".",
index cb33de4..ac3cb4e 100644 (file)
        "javascripttest-pagetext-frameworks": "请选择以下的框架之一:$1",
        "javascripttest-pagetext-skins": "选择外观来运行测试:",
        "javascripttest-qunit-intro": "请见mediawiki.org的[$1 测试说明文件]。",
-       "tooltip-pt-userpage": "你的用户页面",
+       "tooltip-pt-userpage": "您的用户页",
        "tooltip-pt-anonuserpage": "你用于编辑的IP地址的用户页面",
        "tooltip-pt-mytalk": "你的讨论页面",
        "tooltip-pt-anontalk": "有关本IP地址的编辑的讨论",
index 74a4542..81e0605 100644 (file)
     "lonelypagestext": "以下頁面尚未被這個wiki中的其它頁面連結。",
     "uncategorizedimages": "待分類圖片",
     "unusedimages": "未使用圖片",
-    "popularpages": "熱門頁面",
     "mostimages": "最多連結圖片",
     "prefixindex": "所有頁面之前綴",
     "deadendpagestext": "以下頁面沒有連結到這個wiki中的其它頁面。",
index 40627a2..4f7638a 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Peugah_haba_lon' ),
        'Newimages'                 => array( 'Beureukaih_baro' ),
        'Newpages'                  => array( 'On_baro' ),
-       'Popularpages'              => array( 'On_meuceuhu' ),
        'Preferences'               => array( 'Geunalak' ),
        'Prefixindex'               => array( 'Dapeuta_neuaway' ),
        'Protectedpages'            => array( 'On_nyang_geupeulindong' ),
index 7482841..320efa3 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nuwe_beelde', 'Nuwebeelde', 'Nuwe_lêers', 'Nuwelêers' ),
        'Newpages'                  => array( 'Nuwe_bladsye', 'Nuwebladsye' ),
        'PasswordReset'             => array( 'WagwoordHerstel' ),
-       'Popularpages'              => array( 'PopulêreBladsye' ),
        'Preferences'               => array( 'Voorkeure' ),
        'Prefixindex'               => array( 'VoorvoegselIndeks' ),
        'Protectedpages'            => array( 'BeskermdeBladsye' ),
index 588cf34..98b8b66 100644 (file)
@@ -44,7 +44,6 @@ $namespaceGenderAliases = array(
 );
 
 $specialPageAliases = array(
-       'Popularpages'              => array( 'Faqe të famshme' ),
        'Search'                    => array( 'Kërko' ),
 );
 
index 7ec924e..4f84bfb 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'A_mía_descusión', 'A_mía_pachina_de_descusión' ),
        'Newimages'                 => array( 'Nuevos_fichers', 'Nuevas_imáchens', 'Nuevas_imachens', 'Nuebas_imachens' ),
        'Newpages'                  => array( 'Pachinas_nuevas', 'Pachinas_recients', 'Pachinas_nuebas', 'Pachinas_más_nuebas', 'Pachinas_más_rezients', 'Pachinas_rezients' ),
-       'Popularpages'              => array( 'Pachinas_populars', 'Pachinas_más_populars' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Pachinas_por_prefixo', 'Mirar_por_prefixo' ),
        'Protectedpages'            => array( 'Pachinas_protechitas', 'Pachinas_protechidas' ),
index 7817990..5441237 100644 (file)
@@ -373,7 +373,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغة_الصفحة' ),
        'PasswordReset'             => array( 'إعادة_ضبط_كلمة_السر' ),
        'PermanentLink'             => array( 'وصلة_دائمة', 'رابط_دائم' ),
-       'Popularpages'              => array( 'صفحات_مشهورة' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بادئة' ),
        'Protectedpages'            => array( 'صفحات_محمية' ),
index f88650b..c833b02 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
        'Newpages'                  => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
        'PermanentLink'             => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
-       'Popularpages'              => array( 'ܦܐܬܬ̈ܐ_ܡܫܡܗ̈ܐ' ),
        'Preferences'               => array( 'ܨܒܝܢܝܘ̈ܬܐ' ),
        'Protectedpages'            => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
        'Protectedtitles'           => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
index 4d0b3db..e2078ad 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغه_الصفحه' ),
        'PasswordReset'             => array( 'ضبط_الباسوورد' ),
        'PermanentLink'             => array( 'وصله_دايمه' ),
-       'Popularpages'              => array( 'صفح_مشهوره' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بدايه' ),
        'Protectedpages'            => array( 'صفح_محميه' ),
index f9f1b5b..e173661 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'পৰৱৰ্তী_পৃষ্ঠা' ),
        'PasswordReset'             => array( 'গুপ্তশব্দ_ঘূৰাই_আনক' ),
        'PermanentLink'             => array( 'স্থায়ী_সংযোগ' ),
-       'Popularpages'              => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ),
        'Preferences'               => array( 'পচন্দ' ),
        'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
        'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
index ea64271..34b2ba0 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ЦІиял_гьумерал' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Даимаб_ссылка' ),
-       'Popularpages'              => array( 'Машгьурал_гьумерал' ),
        'Preferences'               => array( 'Рекъезабиял' ),
        'Prefixindex'               => array( 'ЦІаразул_бетІералде_бихьизаби' ),
        'Protectedpages'            => array( 'ЦІунарал_гьумерал' ),
index 0892ec9..0c8b1e6 100644 (file)
@@ -62,7 +62,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'JinafaPrilara' ),
        'Newimages'                 => array( 'WarzafEwaveem' ),
        'Newpages'                  => array( 'WarzafBueem' ),
-       'Popularpages'              => array( 'LorupenBueem' ),
        'Preferences'               => array( 'Lodamaceem' ),
        'Protectedpages'            => array( 'NendanBueem' ),
        'Protectedtitles'           => array( 'NendanVergumvelteem' ),
index aaf6c2b..50ed217 100644 (file)
@@ -91,7 +91,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Яңы_биттәр' ),
        'PasswordReset'             => array( 'Паролде_яңыртыу' ),
        'PermanentLink'             => array( 'Даими_һылтанма' ),
-       'Popularpages'              => array( 'Популяр_биттәр' ),
        'Preferences'               => array( 'Көйләүҙәр' ),
        'Protectedpages'            => array( 'Һаҡланған_биттәр' ),
        'Protectedtitles'           => array( 'Һаҡланған_исемдәр' ),
index f9ee1be..b32067c 100644 (file)
@@ -97,7 +97,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'منی گپ' ),
        'Newimages'                 => array( 'نوکین عکسان' ),
        'Newpages'                  => array( 'نوکین صفحات' ),
-       'Popularpages'              => array( 'مردمی صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'ایندکس پیشوند' ),
        'Protectedpages'            => array( 'صفحات محافظتی' ),
index 5a2a7a0..2309d79 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Мае_размовы' ),
        'Newimages'                 => array( 'Новыя_файлы' ),
        'Newpages'                  => array( 'Новыя_старонкі' ),
-       'Popularpages'              => array( 'Папулярныя_старонкі' ),
        'Protectedpages'            => array( 'Абароненыя_старонкі' ),
        'Protectedtitles'           => array( 'Забароненыя_старонкі' ),
        'Randompage'                => array( 'Выпадковая_старонка' ),
index 2425817..322255f 100644 (file)
@@ -85,7 +85,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Моята_беседа' ),
        'Newimages'                 => array( 'Нови_файлове' ),
        'Newpages'                  => array( 'Нови_страници' ),
-       'Popularpages'              => array( 'Най-посещавани_страници' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Всички_страници_с_представка', 'Представка' ),
        'Protectedpages'            => array( 'Защитени_страници' ),
index 0c9fa26..45a13bf 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'وّرق_ئی_زبان' ),
        'PasswordReset'             => array( 'چیهرگالی_نادینتین' ),
        'PermanentLink'             => array( 'دایمین_لینک' ),
-       'Popularpages'              => array( 'مشهورین_وّرق_ئان' ),
        'Preferences'               => array( 'تنزیمات' ),
        'Prefixindex'               => array( 'دیمۆندین_نمایگ' ),
        'Protectedpages'            => array( 'قُلپ_بوته_ئین_ورق_ئان' ),
index 07246a4..4cd2022 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Barakas_hanyar' ),
        'Newpages'                  => array( 'Tungkaran_hanyar' ),
        'PermanentLink'             => array( 'Tautan_tatap' ),
-       'Popularpages'              => array( 'Tungkaran_popular' ),
        'Preferences'               => array( 'Kakatujuan' ),
        'Protectedpages'            => array( 'Tungkaran_nang_dilindungi' ),
        'Protectedtitles'           => array( 'Judul_nang_dilindungi' ),
index 66cef9e..040beda 100644 (file)
@@ -71,7 +71,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MaC\'haozeadennoù' ),
        'Newimages'                 => array( 'RestroùNevez', 'SkeudennoùNevez' ),
        'Newpages'                  => array( 'PajennoùNevez' ),
-       'Popularpages'              => array( 'PajennoùPoblek' ),
        'Preferences'               => array( 'Penndibaboù' ),
        'Protectedpages'            => array( 'PajennoùGwarezet' ),
        'Protectedtitles'           => array( 'TitloùGwarezet' ),
index e553b7f..a5f33fe 100644 (file)
@@ -90,7 +90,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojRazgovor' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'NoveStranice' ),
-       'Popularpages'              => array( 'PopularneStranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'IndeksPrefiksa' ),
        'Protectedpages'            => array( 'ZasticeneStranice' ),
index f9a58ca..8ae5e4c 100644 (file)
@@ -60,7 +60,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Минии_хэлэлсэл' ),
        'Myuploads'                 => array( 'Минии_ашаалһан_зүйл' ),
        'Newpages'                  => array( 'Шэнэ_хуудаһан' ),
-       'Popularpages'              => array( 'Оло_уншагдаһан_хуудаһан' ),
        'Protectedpages'            => array( 'Хамгаалалтатай_хуудаһан' ),
        'Protectedtitles'           => array( 'Хамгаалалтатай_гаршаг' ),
        'Recentchanges'             => array( 'Сайтдахи_хубилалтанууд' ),
index 29c9a16..9169f97 100644 (file)
@@ -82,7 +82,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Discussió_personal' ),
        'Newimages'                 => array( 'Imatges_noves', 'Fitxers_nous' ),
        'Newpages'                  => array( 'Pàgines_noves' ),
-       'Popularpages'              => array( 'Pàgines_populars' ),
        'Preferences'               => array( 'Preferències' ),
        'Prefixindex'               => array( 'Cerca_per_prefix' ),
        'Protectedpages'            => array( 'Pàgines_protegides' ),
index 1bc4385..f175246 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新其頁面' ),
        'PasswordReset'             => array( '密碼重置' ),
        'PermanentLink'             => array( '永久鏈接' ),
-       'Popularpages'              => array( '受歡迎其頁面' ),
        'Preferences'               => array( '喜好' ),
        'Prefixindex'               => array( '前綴索引' ),
        'Protectedpages'            => array( '受保護其頁面' ),
index 514ec17..f146a86 100644 (file)
@@ -126,7 +126,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Керла_агӀонаш' ),
        'PasswordReset'             => array( 'Пароль_кхоссар' ),
        'PermanentLink'             => array( 'Гуттарлера_хьажорг' ),
-       'Popularpages'              => array( 'ГӀараяьлла_агӀонаш' ),
        'Preferences'               => array( 'ГӀирсаш' ),
        'Prefixindex'               => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
        'Protectedpages'            => array( 'ГӀаролла_дина_агӀонаш' ),
index 027161f..cdde53a 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'لێدوانەکەم' ),
        'Newimages'                 => array( 'پەڕگە_نوێکان' ),
        'Newpages'                  => array( 'پەڕە_نوێکان' ),
-       'Popularpages'              => array( 'پەڕە_ناودارەکان' ),
        'Preferences'               => array( 'ھەڵبژاردەکان' ),
        'Protectedpages'            => array( 'پەڕە_پارێزراوەکان' ),
        'Protectedtitles'           => array( 'بابەتە_پارێزراوەکان' ),
index b796aca..609629f 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Moje_diskuse' ),
        'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
        'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
-       'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
        'Preferences'               => array( 'Nastavení', 'Nastaveni' ),
        'Protectedpages'            => array( 'Zamčené_stránky', 'Zamcene_stranky' ),
        'Protectedtitles'           => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ),
index 075369e..d2096e9 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Min_diskussionsside' ),
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Indstillinger' ),
        'Prefixindex'               => array( 'Præfiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index c9994e2..b5c1475 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Seitensprache' ),
        'PasswordReset'             => array( 'Passwort_neu_vergeben' ),
        'PermanentLink'             => array( 'Permanenter_Link', 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteste_Seiten' ),
        'Preferences'               => array( 'Einstellungen' ),
        'Prefixindex'               => array( 'Präfixindex' ),
        'Protectedpages'            => array( 'Geschützte_Seiten' ),
index 445aba0..6adf6f1 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Zıwanê_Pele' ),
        'PasswordReset'             => array( 'ParolaPeysereştış' ),
        'PermanentLink'             => array( 'GıreyoDaimi' ),
-       'Popularpages'              => array( 'PelêPopuleri' ),
        'Preferences'               => array( 'Tercihi' ),
        'Prefixindex'               => array( 'VerbendZerrek' ),
        'Protectedpages'            => array( 'PelêKeŞevekiyayiyé' ),
index f291a1d..06b90f3 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mója_diskusija' ),
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_boki' ),
-       'Popularpages'              => array( 'Woblubowane_boki' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Indeks_prefiksow' ),
        'Protectedpages'            => array( 'Šćitane_boki' ),
index 0334344..5f239fb 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ΤαΑρχείαΜου', 'ΤαΑνεβάσματάΜου', 'ΟιΕπιφορτώσειςΜου' ),
        'Newimages'                 => array( 'ΝέαΑρχεία', 'ΝέεςΕικόνες' ),
        'Newpages'                  => array( 'ΝέεςΣελίδες' ),
-       'Popularpages'              => array( 'ΔημοφιλείςΣελίδες' ),
        'Preferences'               => array( 'Προτιμήσεις' ),
        'Prefixindex'               => array( 'ΕυρετήριοΠροθεμάτων' ),
        'Protectedpages'            => array( 'ΠροστατευμένεςΣελίδες' ),
index 57a79bc..4e6f12b 100644 (file)
@@ -644,4 +644,3 @@ $preloadedMessages = array(
        'whatlinkshere',
        'word-separator',
 );
-
index e31710b..958fa6f 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Novaj_paĝoj' ),
        'PasswordReset'             => array( 'Ŝanĝo_de_pasvorto' ),
        'PermanentLink'             => array( 'Daŭra_ligilo' ),
-       'Popularpages'              => array( 'Popularaj_paĝoj' ),
        'Preferences'               => array( 'Preferoj' ),
        'Prefixindex'               => array( 'Indekso_de_prefiksoj' ),
        'Protectedpages'            => array( 'Protektitaj_paĝoj' ),
index 52e363c..dfd97f5 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PáginasNuevas', 'Páginas_nuevas' ),
        'PasswordReset'             => array( 'RestablecerContraseña' ),
        'PermanentLink'             => array( 'EnlacePermanente' ),
-       'Popularpages'              => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ),
        'Protectedpages'            => array( 'PáginasProtegidas', 'Páginas_protegidas' ),
index 1aaabd6..b8ef360 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Atribuudiga_leheküljed' ),
        'PasswordReset'             => array( 'Parooli_lähtestamine' ),
        'PermanentLink'             => array( 'Püsilink' ),
-       'Popularpages'              => array( 'Loetumad_leheküljed' ),
        'Preferences'               => array( 'Eelistused' ),
        'Prefixindex'               => array( 'Kõik_pealkirjad_eesliitega' ),
        'Protectedpages'            => array( 'Kaitstud_leheküljed' ),
index dd1cc55..fa359fc 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'زبان_صفحه' ),
        'PasswordReset'             => array( 'بازنشاندن_گذرواژه' ),
        'PermanentLink'             => array( 'پیوند_دائمی' ),
-       'Popularpages'              => array( 'صفحه‌های_محبوب' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'نمایه_پیشوندی' ),
        'Protectedpages'            => array( 'صفحه‌های_محافظت‌شده' ),
index 1219911..fd5db32 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sivun_kieli' ),
        'PasswordReset'             => array( 'Unohtuneen_salasanan_vaihto' ),
        'PermanentLink'             => array( 'Ikilinkki' ),
-       'Popularpages'              => array( 'Suositut_sivut' ),
        'Preferences'               => array( 'Asetukset' ),
        'Prefixindex'               => array( 'Etuliiteluettelo' ),
        'Protectedpages'            => array( 'Suojatut_sivut' ),
index b9e8b54..b64922e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Pages_avec_la_propriété' ),
        'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
        'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
-       'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
        'Preferences'               => array( 'Préférences' ),
        'Prefixindex'               => array( 'Index', 'Préfixes', 'Prefixes' ),
        'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
index 51a0e13..6c25ae9 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Novéls_fichiérs', 'NovélsFichiérs', 'Émâges_novèles', 'ÉmâgesNovèles' ),
        'Newpages'                  => array( 'Pâges_novèles', 'PâgesNovèles' ),
        'PermanentLink'             => array( 'Lim_fixo', 'LimFixo' ),
-       'Popularpages'              => array( 'Pâges_les_ples_consultâs', 'PâgesLesPlesConsultâs' ),
        'Preferences'               => array( 'Prèferences' ),
        'Prefixindex'               => array( 'Endèxe_des_prèfixos', 'EndèxeDesPrèfixos' ),
        'Protectedpages'            => array( 'Pâges_protègiês', 'PâgesProtègiês' ),
index 52fdee8..03ac8e5 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MêsDiscussions' ),
        'Newimages'                 => array( 'GnovisFiguris' ),
        'Newpages'                  => array( 'GnovisPagjinis' ),
-       'Popularpages'              => array( 'PagjinisPopolârs' ),
        'Preferences'               => array( 'Preferencis' ),
        'Prefixindex'               => array( 'Prefìs' ),
        'Protectedpages'            => array( 'PagjinisProtezudis' ),
index e02baf0..473e212 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Myn oerlis' ),
        'Newimages'                 => array( 'Nije ôfbylden', 'Nije ôfbyldings', 'Nije ôfbyldingen', 'List mei nije ôfbylden', 'Nije Ofbylden' ),
        'Newpages'                  => array( 'Nije siden' ),
-       'Popularpages'              => array( 'Populêre siden', 'Grage siden' ),
        'Preferences'               => array( 'Ynstellings', 'Ynsteld' ),
        'Prefixindex'               => array( 'Alle siden neffens foarheaksel' ),
        'Protectedpages'            => array( 'Befeilige siden', 'Skoattele siden' ),
index 390e658..059b8a0 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'SözleşmäkSayfam', 'SözleşmäkYapraım' ),
        'Newimages'                 => array( 'EniDosyeler', 'EniPätretler' ),
        'Newpages'                  => array( 'EniYazılar', 'EniSayfalar', 'EniYapraklar' ),
-       'Popularpages'              => array( 'EnAnılmışSayfalar', 'EnAnılmışYazılar' ),
        'Preferences'               => array( 'Seçimner' ),
        'Prefixindex'               => array( 'Prefiksİndeksi' ),
        'Randompage'                => array( 'Razgele', 'RazgeleYazı', 'RazgeleSayfa', 'RazgeleYaprak' ),
index 8ab5bcc..e00988c 100644 (file)
@@ -113,7 +113,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Páxinas_con_propiedades' ),
        'PasswordReset'             => array( 'Restablecer_o_contrasinal', 'Restablecer_contrasinal' ),
        'PermanentLink'             => array( 'Ligazón_permanente' ),
-       'Popularpages'              => array( 'Páxinas_populares' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Índice_de_prefixos' ),
        'Protectedpages'            => array( 'Páxinas_protexidas' ),
index d165495..52833cb 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Neji_Syte' ),
        'PasswordReset'             => array( 'Passwort_zruggsetze' ),
        'PermanentLink'             => array( 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteschti_Syte' ),
        'Preferences'               => array( 'Ystellige' ),
        'Prefixindex'               => array( 'Vorsilbeverzeichnis' ),
        'Protectedpages'            => array( 'Gschitzti_Syte' ),
index 3fc9f6b..937b50d 100644 (file)
@@ -74,7 +74,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'મારીચર્ચા' ),
        'Newimages'                 => array( 'નવીફાઇલો', 'નવાંચિત્રો' ),
        'Newpages'                  => array( 'નવાપાનાં' ),
-       'Popularpages'              => array( 'લોકપ્રિયપાનાં' ),
        'Preferences'               => array( 'પસંદ' ),
        'Prefixindex'               => array( 'ઉપસર્ગ' ),
        'Protectedpages'            => array( 'સંરક્ષિતપાનાં' ),
index 3d7fc43..e806118 100644 (file)
@@ -108,7 +108,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'שפת_הדף' ),
        'PasswordReset'             => array( 'איפוס_סיסמה' ),
        'PermanentLink'             => array( 'קישור_קבוע' ),
-       'Popularpages'              => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
        'Preferences'               => array( 'העדפות', 'ההעדפות_שלי' ),
        'Prefixindex'               => array( 'דפים_המתחילים_ב' ),
        'Protectedpages'            => array( 'דפים_מוגנים' ),
index 65077c1..6452b00 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index fb8fdb3..e06512b 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_strony' ),
        'PermanentLink'             => array( 'Trajny_wotkaz' ),
-       'Popularpages'              => array( 'Najwoblubowaniše_strony' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Škitane_strony' ),
index 18e4a2d..d345fab 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PajNouvo' ),
        'PasswordReset'             => array( 'ResètMopas2' ),
        'PermanentLink'             => array( 'LyenPouToutTan' ),
-       'Popularpages'              => array( 'PajPopilè' ),
        'Preferences'               => array( 'Preferans' ),
        'Prefixindex'               => array( 'EndèksPrefiks' ),
        'Protectedpages'            => array( 'PajPwoteje' ),
index 0019a4b..3309314 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Új_fájlok', 'Új_képek', 'Új_képek_galériája' ),
        'Newpages'                  => array( 'Új_lapok' ),
        'PasswordReset'             => array( 'Jelszó_helyreállítása' ),
-       'Popularpages'              => array( 'Népszerű_lapok', 'Népszerű_oldalak' ),
        'Preferences'               => array( 'Beállításaim' ),
        'Prefixindex'               => array( 'Keresés_előtag_szerint' ),
        'Protectedpages'            => array( 'Védett_lapok' ),
index ea23ef0..1b95c78 100644 (file)
@@ -223,7 +223,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Իմքննարկումները' ),
        'Newimages'                 => array( 'Նորպատկերներ' ),
        'Newpages'                  => array( 'Նորէջերը' ),
-       'Popularpages'              => array( 'Հանրաճանաչէջերը' ),
        'Preferences'               => array( 'Նախընտրությունները' ),
        'Prefixindex'               => array( 'Որոնումնախածանցով' ),
        'Randompage'                => array( 'Պատահականէջ' ),
index 0d4fd18..41f9fdf 100644 (file)
@@ -93,7 +93,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Paginas_nove', 'Nove_paginas' ),
        'PasswordReset'             => array( 'Reinitialisar_contrasigno' ),
        'PermanentLink'             => array( 'Ligamine_permanente' ),
-       'Popularpages'              => array( 'Paginas_popular' ),
        'Preferences'               => array( 'Preferentias' ),
        'Prefixindex'               => array( 'Indice_de_prefixos' ),
        'Protectedpages'            => array( 'Paginas_protegite' ),
index 3510931..1fcfa7e 100644 (file)
@@ -252,7 +252,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Halaman_baru', 'HalamanBaru' ),
        'PasswordReset'             => array( 'Reset_sandi', 'ResetSandi' ),
        'PermanentLink'             => array( 'Pranala_permanen' ),
-       'Popularpages'              => array( 'Halaman_populer', 'HalamanPopuler' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'Indeks_awalan', 'IndeksAwalan' ),
        'Protectedpages'            => array( 'Halaman_yang_dilindungi', 'HalamanDilindungi' ),
index 748f82b..699da88 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Nov_págines' ),
        'PasswordReset'             => array( 'Recomensar_parol-clave' ),
        'PermanentLink'             => array( 'Catenun_permanen' ),
-       'Popularpages'              => array( 'Págines_populari' ),
        'Preferences'               => array( 'Preferenties' ),
        'Prefixindex'               => array( 'Index_de_prefixe' ),
        'Protectedpages'            => array( 'Págines_gardat' ),
index effce71..7500a23 100644 (file)
@@ -169,7 +169,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nýjar_myndir' ),
        'Newpages'                  => array( 'Nýjustu_greinar' ),
        'PasswordReset'             => array( 'Endursetja_lykilorð' ),
-       'Popularpages'              => array( 'Vinsælar_síður' ),
        'Preferences'               => array( 'Stillingar' ),
        'Prefixindex'               => array( 'Forskeyti' ),
        'Protectedpages'            => array( 'Verndaðar_síður' ),
index a369d1d..c072a42 100644 (file)
@@ -111,7 +111,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'PagineConProprietà' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index caca23d..ecf64ab 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ページ言語' ),
        'PasswordReset'             => array( 'パスワード再設定', 'パスワードの再設定', 'パスワードのリセット', 'パスワードリセット' ),
        'PermanentLink'             => array( '固定リンク', 'パーマリンク' ),
-       'Popularpages'              => array( '人気ページ' ),
        'Preferences'               => array( '個人設定', 'オプション' ),
        'Prefixindex'               => array( '前方一致ページ一覧', '始点指定ページ一覧' ),
        'Protectedpages'            => array( '保護されているページ' ),
index 598f101..01a2b66 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ჩემი_ატვირთვები' ),
        'Newimages'                 => array( 'ახალი_ფაილები' ),
        'Newpages'                  => array( 'ახალი_გვერდები' ),
-       'Popularpages'              => array( 'პოპგვერდები' ),
        'Preferences'               => array( 'კონფიგურაცია' ),
        'Protectedpages'            => array( 'დაცული_გვერდები' ),
        'Protectedtitles'           => array( 'დაცული_სათაურები' ),
index 44b7224..af1be4f 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Menin\' sa\'wbetim' ),
        'Newimages'                 => array( 'Taza su\'wretler' ),
        'Newpages'                  => array( 'Taza betler' ),
-       'Popularpages'              => array( 'Ko\'p ko\'rilgen betler' ),
        'Preferences'               => array( 'Sazlawlar' ),
        'Protectedpages'            => array( 'Qorg\'alg\'an betler' ),
        'Randompage'                => array( 'Qa\'legen', 'Qa\'legen bet' ),
index bcc8328..b11e03e 100644 (file)
@@ -6,6 +6,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Rachitrali
  */
 
 $fallback = 'ur';
@@ -14,7 +15,19 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'میڈیا',
        NS_SPECIAL          => 'خاص',
-       NS_TALK             => 'مشقولگی',
-       NS_USER             => 'ممبار/یوزر',
+       NS_TALK             => 'تبادلۂ_خیال',
+       NS_USER             => 'صارف',
+       NS_USER_TALK        => 'تبادلۂ_خیال_صارف',
+       NS_PROJECT_TALK     => 'تبادلۂ_خیال_$1',
+       NS_FILE             => 'فائل',
+       NS_FILE_TALK        => 'تبادلۂ_خیال_فائل',
+       NS_MEDIAWIKI        => 'میڈیاویکی',
+       NS_MEDIAWIKI_TALK   => 'تبادلۂ_خیال_میڈیاویکی',
+       NS_TEMPLATE         => 'سانچہ',
+       NS_TEMPLATE_TALK    => 'تبادلۂ_خیال_سانچہ',
+       NS_HELP             => 'مدد',
+       NS_HELP_TALK        => 'تبادلۂ_خیال_مدد',
+       NS_CATEGORY         => 'زمرہ',
+       NS_CATEGORY_TALK    => 'تبادلۂ_خیال_زمرہ',
 );
 
index 8749ccb..516da1d 100644 (file)
@@ -348,7 +348,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'تالقىلاۋىم' ),
        'Newimages'                 => array( 'جاڭا_سۋرەتتەر' ),
        'Newpages'                  => array( 'جاڭا_بەتتەر' ),
-       'Popularpages'              => array( 'ەڭ_كوپ_قارالعان_بەتتەر', 'ايگىلى_بەتتەر' ),
        'Preferences'               => array( 'باپتالىمدار', 'باپتاۋ' ),
        'Prefixindex'               => array( 'ٴباستاۋىش_ٴتىزىمى' ),
        'Protectedpages'            => array( 'قورعالعان_بەتتەر' ),
index 680c2ea..01aaab9 100644 (file)
@@ -322,7 +322,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Талқылауым' ),
        'Newimages'                 => array( 'Жаңа_суреттер' ),
        'Newpages'                  => array( 'Жаңа_беттер' ),
-       'Popularpages'              => array( 'Ең_көп_қаралған_беттер', 'Әйгілі_беттер' ),
        'Preferences'               => array( 'Бапталымдар', 'Баптау' ),
        'Prefixindex'               => array( 'Бастауыш_тізімі' ),
        'Protectedpages'            => array( 'Қорғалған_беттер' ),
index b7f8c6f..7a9cbaa 100644 (file)
@@ -316,7 +316,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Talqılawım' ),
        'Newimages'                 => array( 'Jaña_swretter' ),
        'Newpages'                  => array( 'Jaña_better' ),
-       'Popularpages'              => array( 'Eñ_köp_qaralğan_better', 'Äýgili_better' ),
        'Preferences'               => array( 'Baptalımdar', 'Baptaw' ),
        'Prefixindex'               => array( 'Bastawış_tizimi' ),
        'Protectedpages'            => array( 'Qorğalğan_better' ),
index 289e5c2..4c41209 100644 (file)
@@ -147,7 +147,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ទំព័រថ្មីៗ' ),
        'PasswordReset'             => array( 'កំណត់ពាក្យសំងាត់ឡើងវិញ' ),
        'PermanentLink'             => array( 'តំណភ្ជាប់អចិន្ត្រែយ៍' ),
-       'Popularpages'              => array( 'ទំព័រដែលមានប្រជាប្រិយ' ),
        'Preferences'               => array( 'ចំណង់ចំណូលចិត្ត' ),
        'Prefixindex'               => array( 'លិបិក្រមបុព្វបទ' ),
        'Protectedpages'            => array( 'ទំព័របានការពារ' ),
index d34e249..abe287a 100644 (file)
@@ -139,7 +139,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '문서언어' ),
        'PasswordReset'             => array( '비밀번호재설정', '비밀번호초기화' ),
        'PermanentLink'             => array( '고유링크', '영구링크' ),
-       'Popularpages'              => array( '인기있는문서' ),
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
index 6b62160..659f97f 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Джангы_бетле' ),
        'PasswordReset'             => array( 'Паролну_ийиу' ),
        'PermanentLink'             => array( 'Дайым_джибериу' ),
-       'Popularpages'              => array( 'Популяр_бетле' ),
        'Preferences'               => array( 'Джарашдырыула' ),
        'Protectedpages'            => array( 'Джакъланнган_бетле' ),
        'Protectedtitles'           => array( 'Джакъланнган_атла' ),
index b1c9d3b..11c1a49 100644 (file)
@@ -158,7 +158,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Ming_Klaafsigg', 'Klaaf' ),
        'Newimages'                 => array( 'Neu_Dateie' ),
        'Newpages'                  => array( 'Neu_Atikelle' ),
-       'Popularpages'              => array( 'Miehts_affjeroofe_Sigge' ),
        'Preferences'               => array( 'Ming_Enstellunge', 'Enstellunge' ),
        'Prefixindex'               => array( 'Sigge_met_Aanfang' ),
        'Protectedpages'            => array( 'Siggeschotz' ),
index b093b58..fc4dbd0 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'FolennowNowyth' ),
        'PasswordReset'             => array( 'DassetyaGerTremena' ),
        'PermanentLink'             => array( 'KevrenFast' ),
-       'Popularpages'              => array( 'FolennowGerysDa' ),
        'Preferences'               => array( 'Dewisyansow' ),
        'Prefixindex'               => array( 'MenegvaRagerow' ),
        'Protectedpages'            => array( 'FolennowDifresys' ),
index 9f3d904..8ea1978 100644 (file)
@@ -120,7 +120,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Disputatio_mea' ),
        'Newimages'                 => array( 'Fasciculi_novi', 'Imagines_novae' ),
        'Newpages'                  => array( 'Paginae_novae' ),
-       'Popularpages'              => array( 'Paginae_saepe_monstratae' ),
        'Preferences'               => array( 'Praeferentiae' ),
        'Prefixindex'               => array( 'Praefixa', 'Quaerere_per_praefixa' ),
        'Protectedpages'            => array( 'Paginae_protectae' ),
index cbeb69e..96d11ae 100644 (file)
@@ -129,7 +129,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'HojasMuevas' ),
        'PasswordReset'             => array( 'Meter_á_zero_el_kóddiche' ),
        'PermanentLink'             => array( 'AtamientoPermanente' ),
-       'Popularpages'              => array( 'HojasMásVisitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Fijhrist_de_prefiksos' ),
        'Protectedpages'            => array( 'HojasGuardadas' ),
index 203788c..45cde70 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sprooch_vun_der_Säit' ),
        'PasswordReset'             => array( 'Zrécksetze_vum_Passwuert' ),
        'PermanentLink'             => array( 'Permanente_Link' ),
-       'Popularpages'              => array( 'Beléifst_Säiten' ),
        'Preferences'               => array( 'Astellungen' ),
        'Prefixindex'               => array( 'Indexsich' ),
        'Protectedpages'            => array( 'Protegéiert_Säiten' ),
index 4efd38c..babd32b 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mien_euverlèk' ),
        'Newimages'                 => array( 'Nuuj_plaetjes' ),
        'Newpages'                  => array( 'Nuuj_pagina\'s' ),
-       'Popularpages'              => array( 'Populair_pagina\'s' ),
        'Preferences'               => array( 'Veurkäöre' ),
        'Prefixindex'               => array( 'Alle_artikele' ),
        'Protectedpages'            => array( 'Beveiligde_pagina\'s' ),
index 8cc1a21..b5de509 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mæ Discûscioîn' ),
        'Newimages'                 => array( 'Immaggini reçenti' ),
        'Newpages'                  => array( 'Paggine ciû reçenti' ),
-       'Popularpages'              => array( 'Paggine ciû viscitæ' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefisci' ),
        'Protectedpages'            => array( 'Paggine protezûe' ),
index 94a7a39..8b706d7 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'بألگە_زوٙن' ),
        'PasswordReset'             => array( 'د_نۊ_زئنە_کئردئن_رازینە_گوڤاردئن' ),
        'PermanentLink'             => array( 'ھوم_پئیڤأند_دایئمی' ),
-       'Popularpages'              => array( 'بألگە_یا_حاستئنی' ),
        'Preferences'               => array( 'میزوٙنکاریا' ),
        'Prefixindex'               => array( 'دئماڤأن_سیاأ' ),
        'Protectedpages'            => array( 'بألگە_یا_پور_و_پیم_بیە' ),
index a2ce260..fdaeecd 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mano_aptarimas' ),
        'Newimages'                 => array( 'Nauji_paveikslėliai' ),
        'Newpages'                  => array( 'Naujausi_puslapiai' ),
-       'Popularpages'              => array( 'Populiarūs_puslapiai' ),
        'Preferences'               => array( 'Nustatymai' ),
        'Prefixindex'               => array( 'Prasidedantys' ),
        'Protectedpages'            => array( 'Užrakinti_puslapiai' ),
index 865ebb3..6408c4d 100644 (file)
@@ -38,8 +38,8 @@ $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Special',
        NS_TALK             => 'Diskusija',
-       NS_USER             => 'Lietotājs',
-       NS_USER_TALK        => 'Lietotāja_diskusija',
+       NS_USER             => 'Dalībnieks',
+       NS_USER_TALK        => 'Dalībnieka_diskusija',
        NS_PROJECT_TALK     => '{{grammar:ģenitīvs|$1}}_diskusija',
        NS_FILE             => 'Attēls',
        NS_FILE_TALK        => 'Attēla_diskusija',
@@ -52,5 +52,92 @@ $namespaceNames = array(
        NS_CATEGORY         => 'Kategorija',
        NS_CATEGORY_TALK    => 'Kategorijas_diskusija',
 );
+
+$namespaceAliases = array(
+       'Lietotājs' => NS_USER,
+       'Lietotāja_diskusija' => NS_USER_TALK,
+);
+
+$wgExtraGenderNamespaces = array(
+       NS_USER => array( 'male' => 'Dalībnieks', 'female' => 'Dalībniece' ),
+       NS_USER_TALK => array( 'male' => 'Dalībnieka_diskusija', 'female' => 'Dalībnieces_diskusija' )
+);
+
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
+/**
+ * A list of date format preference keys, which can be selected in user
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are
+ * supported by the wikitext converter (parser/DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on
+ * $wgAmericanDates
+ */
+$datePreferences = array(
+       'default',
+       'ydm',
+       'mdy',
+       'dmy',
+       'ymd',
+       'ISO 8601',
+);
+
+/**
+ * The date format to use for generated dates in the user interface.
+ * This may be one of the above date preferences, or the special value
+ * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy
+ * if $wgAmericanDates is false.
+ */
+$defaultDateFormat = 'ydm';
+
+/**
+ * Associative array mapping old numeric date formats, which may still be
+ * stored in user preferences, to the new string formats.
+ */
+$datePreferenceMigrationMap = array(
+       'default',
+       'mdy',
+       'dmy',
+       'ymd'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in
+ * Language.php, search for sprintfDate.
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+       'ydm time' => 'H.i',
+       'ydm date' => 'Y". gada" j. F',
+       'ydm monthonly' => 'Y". gada" F',
+       'ydm both' => 'Y". gada" j. F", plkst." H.i',
+       'ydm pretty' => 'j F',
+
+       'mdy time' => 'H:i',
+       'mdy date' => 'F j, Y',
+       'mdy monthonly' => 'F Y',
+       'mdy both' => 'H:i, F j, Y',
+       'mdy pretty' => 'F j',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j F Y',
+       'dmy monthonly' => 'F Y',
+       'dmy both' => 'H:i, j F Y',
+       'dmy pretty' => 'j F',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y F j',
+       'ymd monthonly' => 'Y F',
+       'ymd both' => 'H:i, Y F j',
+       'ymd pretty' => 'F j',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 monthonly' => 'xnY-xnm',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+       'ISO 8601 pretty' => 'xnm-xnd'
+);
index 274b724..874dfb3 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКорхнемазе' ),
        'Newimages'                 => array( 'ОдНяйфне' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'СидестаЛопатне' ),
        'Preferences'               => array( 'Латцематне' ),
        'Prefixindex'               => array( 'ВалынгольксИндекс' ),
        'Protectedpages'            => array( 'АралафЛопат' ),
index 4c962ad..3e4bfd5 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Fitenim-pejy', 'Fitenimpejy' ),
        'PasswordReset'             => array( 'Famerenan-tenimiafina', 'Famerenantenimiafina' ),
        'PermanentLink'             => array( 'Rohy_maharitra', 'RohyMaharitra' ),
-       'Popularpages'              => array( 'Pejy_be_mpitsidika_indrindra' ),
        'Preferences'               => array( 'Safidy' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pejy_voaaro' ),
index 451e373..cbe9a8f 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'LamanJoProperti', 'Laman_jo_properti' ),
        'PasswordReset'             => array( 'TukaSandi', 'Tuka_baliak_sandi' ),
        'PermanentLink'             => array( 'PautanPamanen', 'Pautan_pamanen' ),
-       'Popularpages'              => array( 'LamanPopuler', 'Laman_populer' ),
        'Preferences'               => array( 'Rujuakan' ),
        'Prefixindex'               => array( 'DaptaAwalan' ),
        'Protectedpages'            => array( 'LamanTalinduang', 'Laman_nan_dilinduang' ),
index 9f74d16..3c7b31d 100644 (file)
@@ -159,7 +159,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ЈазикНаСтраницата' ),
        'PasswordReset'             => array( 'ПроменаНаЛозинка' ),
        'PermanentLink'             => array( 'ПостојанаВрска' ),
-       'Popularpages'              => array( 'ПопуларниСтраници' ),
        'Preferences'               => array( 'Нагодувања' ),
        'Prefixindex'               => array( 'ИндексНаПретставки' ),
        'Protectedpages'            => array( 'ЗаштитениСтраници' ),
index d23e47f..4de1f31 100644 (file)
@@ -148,7 +148,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'താളിന്റെഭാഷ' ),
        'PasswordReset'             => array( 'രഹസ്യവാക്ക്‌‌പുനക്രമീകരണം' ),
        'PermanentLink'             => array( 'സ്ഥിരംകണ്ണി' ),
-       'Popularpages'              => array( 'ജനപ്രിയതാളുകൾ' ),
        'Preferences'               => array( 'ക്രമീകരണങ്ങൾ' ),
        'Prefixindex'               => array( 'പൂർവ്വപദസൂചിക' ),
        'Protectedpages'            => array( 'സംരക്ഷിത_താളുകൾ' ),
index 5cdb35f..8c284e4 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'माझ्या_चर्चा' ),
        'Newimages'                 => array( 'नवीन_संचिका', 'नवीन_चित्रे' ),
        'Newpages'                  => array( 'नवीन_पाने' ),
-       'Popularpages'              => array( 'प्रसिद्ध_पाने' ),
        'Preferences'               => array( 'पसंती' ),
        'Prefixindex'               => array( 'उपसर्गसुची' ),
        'Protectedpages'            => array( 'सुरक्षित_पाने' ),
index fb972b0..69d5652 100644 (file)
@@ -170,7 +170,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Bahasa_laman' ),
        'PasswordReset'             => array( 'Tetap_semula_kata_kunci' ),
        'PermanentLink'             => array( 'Pautan_kekal' ),
-       'Popularpages'              => array( 'Laman_popular' ),
        'Preferences'               => array( 'Keutamaan' ),
        'Prefixindex'               => array( 'Indeks_awalan' ),
        'Protectedpages'            => array( 'Laman_dilindungi' ),
index 2529cc9..a043864 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'DiskussjonijietTiegħi' ),
        'Newimages'                 => array( 'StampiĠodda', 'FajlsĠodda' ),
        'Newpages'                  => array( 'PaġniĠodda' ),
-       'Popularpages'              => array( 'PaġniPopolari' ),
        'Preferences'               => array( 'Preferenzi' ),
        'Prefixindex'               => array( 'IndiċiPrefiss' ),
        'Protectedpages'            => array( 'PaġniProtetti' ),
index ac3342b..fe3db11 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКортамом' ),
        'Newimages'                 => array( 'ОдАртовкст' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'ЛисийСовийМартоЛопат' ),
        'Protectedpages'            => array( 'ВанстоньЛопат' ),
        'Protectedtitles'           => array( 'ВанстоньКонякст' ),
        'Randompage'                => array( 'КодамоПонгсьЛопа' ),
index 6f9cf1f..08d3e93 100644 (file)
@@ -160,7 +160,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Sider_med_egenskap' ),
        'PasswordReset'             => array( 'Nullstill_passord' ),
        'PermanentLink'             => array( 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillinger' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index f87d770..87f460f 100644 (file)
@@ -179,7 +179,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Miene Diskuschoonssiet' ),
        'Newimages'                 => array( 'Nee Datein' ),
        'Newpages'                  => array( 'Nee Sieden' ),
-       'Popularpages'              => array( 'Veel besöchte Sieden' ),
        'Preferences'               => array( 'Instellungen' ),
        'Prefixindex'               => array( 'Sieden de anfangt mit' ),
        'Protectedpages'            => array( 'Schuulte Sieden' ),
index 5e82e82..7625fef 100644 (file)
@@ -278,7 +278,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Ziejen_mit_eigenschap' ),
        'PasswordReset'             => array( 'Wachtwoord_opniej_instellen' ),
        'PermanentLink'             => array( 'Vaste_verwiezing' ),
-       'Popularpages'              => array( 'Populaere_artikels' ),
        'Preferences'               => array( 'Veurkeuren' ),
        'Prefixindex'               => array( 'Veurvoegselindex' ),
        'Protectedpages'            => array( 'Beveiligden_ziejen' ),
index 7d7fa05..27af255 100644 (file)
@@ -335,7 +335,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Paginataal' ),
        'PasswordReset'             => array( 'WachtwoordOpnieuwInstellen' ),
        'PermanentLink'             => array( 'PermanenteVerwijzing' ),
-       'Popularpages'              => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ),
        'Preferences'               => array( 'Voorkeuren' ),
        'Prefixindex'               => array( 'Voorvoegselindex' ),
        'Protectedpages'            => array( 'BeveiligdePaginas', 'BeveiligdePagina\'s', 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ),
index 606f720..4cdb3d7 100644 (file)
@@ -274,7 +274,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
        'PermanentLink'             => array( 'Permanent_lenkje', 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillingar' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Verna_sider' ),
index 64220d8..443cd90 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mas_discussions', 'Masdiscussions' ),
        'Newimages'                 => array( 'Imatges_novèls', 'ImatgesNovèls' ),
        'Newpages'                  => array( 'Paginas_novèlas' ),
-       'Popularpages'              => array( 'Paginas_mai_visitadas', 'Paginas_las_mai_visitadas', 'Paginasmaivisitadas' ),
        'Preferences'               => array( 'Preferéncias' ),
        'Prefixindex'               => array( 'Indèx' ),
        'Protectedpages'            => array( 'Paginas_protegidas' ),
index f3bea17..5df9cdf 100644 (file)
@@ -131,7 +131,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ନୂଆଫାଇଲ' ),
        'Newpages'                  => array( 'ନୂଆପୃଷ୍ଠା' ),
        'PermanentLink'             => array( 'ଚିରକାଳଲିଙ୍କ' ),
-       'Popularpages'              => array( 'ଜଣାଶୁଣାପୃଷ୍ଠା' ),
        'Preferences'               => array( 'ପସନ୍ଦ' ),
        'Prefixindex'               => array( 'ଆଗରେଯୋଡ଼ାହେବାଇଣ୍ଡେକ୍ସ' ),
        'Protectedpages'            => array( 'କିଳାଯାଇଥିବାପୃଷ୍ଠା' ),
index 3c65610..1790209 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'НогФæрстæ' ),
        'PasswordReset'             => array( 'ПарольНогКæнын' ),
        'PermanentLink'             => array( 'УдгасÆрвитæн' ),
-       'Popularpages'              => array( 'АрæхФæрстæ' ),
        'Preferences'               => array( 'Уагæвæрдтæ' ),
        'Prefixindex'               => array( 'РазæфтуантыИндекс' ),
        'Protectedpages'            => array( 'ÆхгæдФæрстæ' ),
index 3e3090c..988e0b0 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ਸਫ਼ੇ_ਦੀ_ਭਾਸ਼ਾ' ),
        'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
        'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ', 'ਪੱਕੀ_ਕੜੀ' ),
-       'Popularpages'              => array( 'ਮਸ਼ਹੂਰ_ਸਫ਼ੇ' ),
        'Preferences'               => array( 'ਪਸੰਦਾਂ' ),
        'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
        'Protectedpages'            => array( 'ਸੁਰੱਖਿਅਤ_ਸਫ਼ੇ' ),
index 4c82276..8f1fbf4 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Strony_z_własnością' ),
        'PasswordReset'             => array( 'Wyczyść_hasło' ),
        'PermanentLink'             => array( 'Niezmienny_link' ),
-       'Popularpages'              => array( 'Popularne_strony' ),
        'Preferences'               => array( 'Preferencje' ),
        'Prefixindex'               => array( 'Strony_według_prefiksu' ),
        'Protectedpages'            => array( 'Zabezpieczone_strony' ),
index fbc9419..df393a6 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'زما_خبرې_اترې' ),
        'Newimages'                 => array( 'نوي_انځورونه' ),
        'Newpages'                  => array( 'نوي_مخونه' ),
-       'Popularpages'              => array( 'نامتومخونه' ),
        'Preferences'               => array( 'غوره_توبونه' ),
        'Prefixindex'               => array( 'د_مختاړيو_ليکلړ' ),
        'Protectedpages'            => array( 'ژغورلي_مخونه' ),
index 7a293f6..814a7f4 100644 (file)
@@ -174,7 +174,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Propriedades_de_página' ),
        'PasswordReset'             => array( 'Redefinir_autenticação' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_por_prefixo', 'Índice_de_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 8a63470..cc69fd4 100644 (file)
@@ -177,7 +177,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Arquivos_novos', 'Imagens_novas', 'Ficheiros_novos' ),
        'Newpages'                  => array( 'Páginas_novas', 'Artigos_novos' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_de_prefixo', 'Índice_por_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 97afe6b..9a3b57e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'MusuqPanqa' ),
        'PasswordReset'             => array( 'YaykunaRimaKutichina' ),
        'PermanentLink'             => array( 'KakuqTinki' ),
-       'Popularpages'              => array( 'WatukuqsapaPanqa', 'RikuqsapaPanqa', 'QhawaqsapaPanqa' ),
        'Preferences'               => array( 'Allinkachina', 'Allinkachinakuna' ),
        'Prefixindex'               => array( 'QallarinaKaskaSutisuyu' ),
        'Protectedpages'            => array( 'AmachasqaPanqa' ),
index 3d62d43..b13be7b 100644 (file)
@@ -243,7 +243,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Imagini_noi' ),
        'Newpages'                  => array( 'Pagini_noi' ),
        'PasswordReset'             => array( 'Resetare_parolă' ),
-       'Popularpages'              => array( 'Pagini_populare' ),
        'Preferences'               => array( 'Preferințe' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pagini_protejate' ),
index a74c9db..1c5e371 100644 (file)
@@ -194,7 +194,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новые_страницы' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Постоянная_ссылка' ),
-       'Popularpages'              => array( 'Популярные_страницы' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Указатель_по_началу_названия' ),
        'Protectedpages'            => array( 'Защищённые_страницы' ),
index cb23741..255ed66 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новы_сторінкы' ),
        'PasswordReset'             => array( 'Ресет_гесла' ),
        'PermanentLink'             => array( 'Тырвалый_одказ' ),
-       'Popularpages'              => array( 'Популарны_сторінкы' ),
        'Preferences'               => array( 'Наставлїня' ),
        'Protectedpages'            => array( 'Замкнуты_сторінкы' ),
        'Protectedtitles'           => array( 'Замкнуты_назвы' ),
index 9968066..35bc37a 100644 (file)
@@ -46,19 +46,19 @@ $linkPrefixExtension = false;
 
 $namespaceNames = array(
        NS_MEDIA            => 'माध्यमम्',
-       NS_SPECIAL          => 'विशà¥\87षमà¥\8d',
+       NS_SPECIAL          => 'विशà¥\87षà¤\83',
        NS_TALK             => 'सम्भाषणम्',
-       NS_USER             => 'यà¥\8bà¤\9cà¤\95ः',
-       NS_USER_TALK        => 'यà¥\8bà¤\9cà¤\95सम्भाषणम्',
+       NS_USER             => 'सदसà¥\8dयः',
+       NS_USER_TALK        => 'सदसà¥\8dयसम्भाषणम्',
        NS_PROJECT_TALK     => '$1सम्भाषणम्',
-       NS_FILE             => 'à¤\9aितà¥\8dरमà¥\8d',
-       NS_FILE_TALK        => 'à¤\9aितà¥\8dरसम्भाषणम्',
-       NS_MEDIAWIKI        => 'मिडà¥\80याविà¤\95à¥\80',
-       NS_MEDIAWIKI_TALK   => 'मिडियाविà¤\95à¥\80सम्भाषणम्',
+       NS_FILE             => 'सà¤\9eà¥\8dà¤\9aिà¤\95ा',
+       NS_FILE_TALK        => 'सà¤\9eà¥\8dà¤\9aिà¤\95ासम्भाषणम्',
+       NS_MEDIAWIKI        => 'मà¥\80डियाविà¤\95ि',
+       NS_MEDIAWIKI_TALK   => 'मà¥\80डियाविà¤\95िसम्भाषणम्',
        NS_TEMPLATE         => 'फलकम्',
-       NS_TEMPLATE_TALK    => 'फलà¤\95सà¥\8dय_समà¥\8dभाषणमà¥\8d',
-       NS_HELP             => 'सहाय्यम्',
-       NS_HELP_TALK        => 'सहायà¥\8dयसà¥\8dय_सम्भाषणम्',
+       NS_TEMPLATE_TALK    => 'फलकसम्भाषणम्',
+       NS_HELP             => 'साहायà¥\8dयमà¥\8d',
+       NS_HELP_TALK        => 'साहायà¥\8dयसम्भाषणम्',
        NS_CATEGORY         => 'वर्गः',
        NS_CATEGORY_TALK    => 'वर्गसम्भाषणम्',
 );
@@ -66,19 +66,29 @@ $namespaceNames = array(
 $namespaceAliases = array(
        'माध्यम'             => NS_MEDIA,
        'विशेष'              => NS_SPECIAL,
+       'विशेषम्'            => NS_SPECIAL,
        'संभाषणं'            => NS_TALK,
+       'योजकः'              => NS_USER,
        'योजकसंभाषणं'        => NS_USER_TALK,
-       '$1संभाषणं'         => NS_PROJECT_TALK,
+       'योजकसम्भाषणम्'      => NS_USER_TALK,
+       '$1संभाषणं'          => NS_PROJECT_TALK,
        'चित्रं'             => NS_FILE,
+       'चित्रम्'           => NS_FILE,
        'चित्रसंभाषणं'       => NS_FILE_TALK,
-       'मिडियाविकीसंभाषणं' => NS_MEDIAWIKI_TALK,
+       'चित्रसम्भाषणम्'     => NS_FILE_TALK,
+       'मिडीयाविकी'         => NS_MEDIAWIKI,
+       'मिडियाविकीसंभाषणं'  => NS_MEDIAWIKI_TALK,
+       'मिडियाविकीसम्भाषणम्' => NS_MEDIAWIKI_TALK,
        'बिंबधर'             => NS_TEMPLATE,
-       'बिंबधर_संभाषणं'      => NS_TEMPLATE_TALK,
+       'बिंबधर_संभाषणं'     => NS_TEMPLATE_TALK,
+       'फलकस्य_सम्भाषणम्'   => NS_TEMPLATE_TALK,
        'सहाय्य'             => NS_HELP,
+       'सहाय्यम्'           => NS_HELP,
        'सहाय्यसंभाषणं'      => NS_HELP_TALK,
+       'सहाय्यस्य_सम्भाषणम्' => NS_HELP_TALK,
        'उपकारः'             => NS_HELP,
-       'उपकारसंभाषणं'        => NS_HELP_TALK,
-       'वर्गसंभाषणं'         => NS_CATEGORY_TALK,
+       'उपकारसंभाषणं'       => NS_HELP_TALK,
+       'वर्गसंभाषणं'        => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
@@ -132,7 +142,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'नूतनसंचिका', 'नूतनचित्रानि' ),
        'Newpages'                  => array( 'नूतनपृष्टानि' ),
        'PasswordReset'             => array( 'सङ्केतशब्दपुन:प्रयु्क्ता' ),
-       'Popularpages'              => array( 'लोकप्रियपृष्टानि' ),
        'Preferences'               => array( 'इष्टतमानि' ),
        'Prefixindex'               => array( 'उपसर्गअनुक्रमणी' ),
        'Protectedpages'            => array( 'सुरक्षितपृष्टानि' ),
index 6cc09a9..9016a0b 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PaginePiùRecenti' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index adfc05e..2339c07 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'مون سان ڳالهه' ),
        'Newimages'                 => array( 'نوان عڪس' ),
        'Newpages'                  => array( 'نوان صفحا' ),
-       'Popularpages'              => array( 'مقبول صفحا' ),
        'Preferences'               => array( 'ترجيحات' ),
        'Prefixindex'               => array( 'اڳياڙي ڏسڻي' ),
        'Protectedpages'            => array( 'تحفظيل صفحا' ),
index 4ab9c11..fe98236 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MéDischussioni' ),
        'Newimages'                 => array( 'ImmaginiRizzenti' ),
        'Newpages'                  => array( 'PàginiPiùRizzenti' ),
-       'Popularpages'              => array( 'PàginiPiùVisitaddi' ),
        'Preferences'               => array( 'Prifirènzi' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PàginiPrutiggiddi' ),
index 1917f32..66fa2e4 100644 (file)
@@ -80,7 +80,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mu_ságastallan' ),
        'Newimages'                 => array( 'Ođđa_govat', 'Ođđa_fiillat' ),
        'Newpages'                  => array( 'Ođđa_siiddut' ),
-       'Popularpages'              => array( 'Bivnnuhis_siiddut' ),
        'Preferences'               => array( 'Válljemat', 'Ásahusat' ),
        'Protectedpages'            => array( 'Suodjaluvvon_siiddut' ),
        'Protectedtitles'           => array( 'Suodjaluvvon_bajilčállagat', 'Suodjaluvvon_siidonamat' ),
index f8aa19f..9fb137a 100644 (file)
@@ -76,7 +76,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_postavljene_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index 1ac48a0..e13e014 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'මගේ_සාකච්ඡාව' ),
        'Newimages'                 => array( 'නව_ගොනු', 'නව_රූප' ),
        'Newpages'                  => array( 'නව_පිටුව' ),
-       'Popularpages'              => array( 'ජනප්‍රිය_පිටු' ),
        'Preferences'               => array( 'අභිරුචියන්' ),
        'Prefixindex'               => array( 'උපසර්ග_සූචිය' ),
        'Protectedpages'            => array( 'ආරක්‍ෂිත_පිටුව' ),
index 83155da..26d474f 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojaDiskusia' ),
        'Newimages'                 => array( 'NovéSúbory' ),
        'Newpages'                  => array( 'NovéStránky' ),
-       'Popularpages'              => array( 'PopulárneStránky' ),
        'Preferences'               => array( 'Nastavenia' ),
        'Prefixindex'               => array( 'IndexPredpon' ),
        'Protectedpages'            => array( 'ZamknutéStránky' ),
index ea6b569..bc7afb9 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojPogovor' ),
        'Newimages'                 => array( 'NoveDatoteke', 'NoveSlike' ),
        'Newpages'                  => array( 'NoveStrani' ),
-       'Popularpages'              => array( 'PriljubljeneStrani' ),
        'Preferences'               => array( 'Nastavitve' ),
        'Protectedpages'            => array( 'ZaščiteneStrani' ),
        'Protectedtitles'           => array( 'ZaščiteniNaslovi' ),
index 71180c3..c647010 100644 (file)
@@ -96,7 +96,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'NgarkimeteMia' ),
        'Newimages'                 => array( 'SkedaTëReja' ),
        'Newpages'                  => array( 'FaqeteReja' ),
-       'Popularpages'              => array( 'FaqetëFamshme' ),
        'Preferences'               => array( 'Preferencat' ),
        'Protectedpages'            => array( 'FaqeteMbrojtura' ),
        'Protectedtitles'           => array( 'TitujteMbrojtur' ),
index 0f89cca..a325067 100644 (file)
@@ -143,7 +143,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'НовеДатотеке', 'НовиФајлови', 'НовеСлике' ),
        'Newpages'                  => array( 'НовеСтране' ),
        'PermanentLink'             => array( 'Привремена_веза' ),
-       'Popularpages'              => array( 'Популарне_странице' ),
        'Preferences'               => array( 'Подешавања', 'Поставке' ),
        'Protectedpages'            => array( 'ЗаштићенеСтранице', 'Заштићене_странице' ),
        'Protectedtitles'           => array( 'ЗаштићениНаслови', 'Заштићени_наслови' ),
index 9092e9e..b4643f0 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'ObrolanKuring' ),
        'Newimages'                 => array( 'GambarAnyar' ),
        'Newpages'                  => array( 'KacaAnyar' ),
-       'Popularpages'              => array( 'KacaPayu' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'IndeksAwalan' ),
        'Protectedpages'            => array( 'KacaDikonci' ),
index 48e3511..f85659f 100644 (file)
@@ -156,7 +156,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sidspråk' ),
        'PasswordReset'             => array( 'Återställ_lösenord' ),
        'PermanentLink'             => array( 'Permanent_länk' ),
-       'Popularpages'              => array( 'Populära_sidor' ),
        'Preferences'               => array( 'Inställningar' ),
        'Protectedpages'            => array( 'Skyddade_sidor' ),
        'Protectedtitles'           => array( 'Skyddade_titlar' ),
index c653de3..311b6cc 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MajadilianoYangu' ),
        'Newimages'                 => array( 'FailiMpya', 'FailimpyazaPicha' ),
        'Newpages'                  => array( 'KurasaMpya' ),
-       'Popularpages'              => array( 'KurasaMaarufu' ),
        'Preferences'               => array( 'Mapendekezo' ),
        'Prefixindex'               => array( 'KurasaKuu' ),
        'Protectedpages'            => array( 'KurasaZilizolindwa' ),
index 5a5e44b..808df08 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'నాచర్చ' ),
        'Newimages'                 => array( 'కొత్తఫైళ్లు', 'కొత్తబొమ్మలు' ),
        'Newpages'                  => array( 'కొత్తపేజీలు' ),
-       'Popularpages'              => array( 'ప్రాచుర్యంపొందినపేజీలు' ),
        'Preferences'               => array( 'అభిరుచులు' ),
        'Protectedpages'            => array( 'సంరక్షితపేజీలు' ),
        'Randompage'                => array( 'యాదృచ్చికపేజీ' ),
index 140073a..99b2ab4 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'หน้าใหม่' ),
        'PasswordReset'             => array( 'ตั้งรหัสผ่านใหม่' ),
        'PermanentLink'             => array( 'ลิงก์ถาวร' ),
-       'Popularpages'              => array( 'หน้าที่ได้รับความนิยม' ),
        'Preferences'               => array( 'การตั้งค่า', 'ตั้งค่า' ),
        'Prefixindex'               => array( 'ดัชนีตามคำขึ้นต้น' ),
        'Protectedpages'            => array( 'หน้าที่ถูกป้องกัน' ),
index 799dc34..c111a02 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Bagong_mga_pahina' ),
        'PasswordReset'             => array( 'Muling_Pagtatakda_ng_Hudyat' ),
        'PermanentLink'             => array( 'Pamalagiang_Kawing' ),
-       'Popularpages'              => array( 'Sikat_na_mga_pahina' ),
        'Preferences'               => array( 'Mga_nais' ),
        'Prefixindex'               => array( 'Talatuntunan_ng_unlapi' ),
        'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
index 0f61a96..ffd23f7 100644 (file)
@@ -153,7 +153,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'YeniSayfalar' ),
        'PasswordReset'             => array( 'ParolaSıfırlama' ),
        'PermanentLink'             => array( 'KalıcıBağ' ),
-       'Popularpages'              => array( 'PopülerSayfalar' ),
        'Preferences'               => array( 'Tercihler', 'Ayarlar' ),
        'Prefixindex'               => array( 'ÖnekDizini' ),
        'Protectedpages'            => array( 'KorunanSayfalar' ),
index 0487c8f..8a61e33 100644 (file)
@@ -145,7 +145,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Бәхәсем' ),
        'Newimages'                 => array( 'Яңа_файл' ),
        'Newpages'                  => array( 'Яңа_бит' ),
-       'Popularpages'              => array( 'Популяр_битләр' ),
        'Preferences'               => array( 'Көйләнмәләр' ),
        'Protectedpages'            => array( 'Якланган_битләр' ),
        'Protectedtitles'           => array( 'Якланган_башлыклар' ),
index 2caaefa..4cc1859 100644 (file)
@@ -176,7 +176,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Нові_сторінки' ),
        'PasswordReset'             => array( 'Скинути_пароль' ),
        'PermanentLink'             => array( 'Постійне_посилання' ),
-       'Popularpages'              => array( 'Популярні_сторінки' ),
        'Preferences'               => array( 'Налаштування' ),
        'Prefixindex'               => array( 'Покажчик_за_початком_назви' ),
        'Protectedpages'            => array( 'Захищені_сторінки' ),
index 81a6d2f..1de001a 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'جدید_املاف', 'جدید_تصاویر' ),
        'Newpages'                  => array( 'جدید_صفحات' ),
        'PermanentLink'             => array( 'مستقل_ربط' ),
-       'Popularpages'              => array( 'مقبول_صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'اشاریہ_سابقہ' ),
        'Protectedpages'            => array( 'محفوظ_صفحات' ),
index 9242d83..ebfc64a 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PagineNove' ),
        'PasswordReset'             => array( 'ReinpostaPassword' ),
        'PermanentLink'             => array( 'LinkParmanente' ),
-       'Popularpages'              => array( 'PaginePiassèVisità' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtete' ),
index 2724a60..56ee88c 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Ngôn_ngữ_trang' ),
        'PasswordReset'             => array( 'Tái_tạo_mật_khẩu', 'Đặt_lại_mật_khẩu' ),
        'PermanentLink'             => array( 'Liên_kết_thường_trực' ),
-       'Popularpages'              => array( 'Trang_phổ_biến' ),
        'Preferences'               => array( 'Tùy_chọn', 'Tuỳ_chọn' ),
        'Prefixindex'               => array( 'Tiền_tố' ),
        'Protectedpages'            => array( 'Trang_khóa', 'Trang_khoá' ),
index ed61df4..37d7015 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'מיינע_ארויפלאדונגען' ),
        'Newimages'                 => array( 'נייע_בילדער' ),
        'Newpages'                  => array( 'נייע_בלעטער' ),
-       'Popularpages'              => array( 'פאפולערע_בלעטער' ),
        'Preferences'               => array( 'פרעפערענצן' ),
        'Prefixindex'               => array( 'בלעטער_וואס_הייבן_אן_מיט' ),
        'Protectedpages'            => array( 'געשיצטע_בלעטער' ),
index 8c4c93f..e1bb672 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新版' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '永久鏈' ),
-       'Popularpages'              => array( '最歡迎頁' ),
        'Preferences'               => array( '喜好設定' ),
        'Prefixindex'               => array( '全部頁嘅前綴' ),
        'Protectedpages'            => array( '保護頁' ),
index 8ee87f0..617dd46 100644 (file)
@@ -144,7 +144,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( '新建文件', '新建檔案' ),
        'Newpages'                  => array( '最新页面', '最新頁面' ),
        'PasswordReset'             => array( '重置密码', '重設密碼' ),
-       'Popularpages'              => array( '热点页面', '熱點頁面' ),
        'Preferences'               => array( '参数设置', '偏好設定', '參數設置' ),
        'Prefixindex'               => array( '前缀索引', '前綴索引', '字首索引' ),
        'Protectedpages'            => array( '已保护页面', '已保護頁面' ),
index 84d4373..57c9a61 100644 (file)
@@ -199,7 +199,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '页面语言' ),
        'PasswordReset'             => array( '重设密码' ),
        'PermanentLink'             => array( '固定链接', '永久链接' ),
-       'Popularpages'              => array( '热点页面' ),
        'Preferences'               => array( '参数设置', '设置' ),
        'Prefixindex'               => array( '前缀索引' ),
        'Protectedpages'            => array( '已保护页面' ),
index 6e5dea1..1f6bcfa 100644 (file)
@@ -183,7 +183,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '頁面語言' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '靜態連結', '永久連結' ),
-       'Popularpages'              => array( '熱門頁面', '熱點頁面' ),
        'Preferences'               => array( '偏好設定' ),
        'Prefixindex'               => array( '字首索引', '前綴索引' ),
        'Protectedpages'            => array( '受保護頁面', '已保護頁面' ),
index 93507b3..e6321e1 100644 (file)
@@ -97,7 +97,6 @@ class DeleteBatch extends Maintenance {
                        }
 
                        $this->output( $title->getPrefixedText() );
-                       $dbw->begin( __METHOD__ );
                        if ( $title->getNamespace() == NS_FILE ) {
                                $img = wfFindFile( $title, array( 'ignoreRedirect' => true ) );
                                if ( $img && $img->isLocal() && !$img->delete( $reason ) ) {
@@ -106,8 +105,7 @@ class DeleteBatch extends Maintenance {
                        }
                        $page = WikiPage::factory( $title );
                        $error = '';
-                       $success = $page->doDeleteArticle( $reason, false, 0, false, $error, $user );
-                       $dbw->commit( __METHOD__ );
+                       $success = $page->doDeleteArticle( $reason, false, 0, true, $error, $user );
                        if ( $success ) {
                                $this->output( " Deleted!\n" );
                        } else {
index 5aeeb8e..a1c0f61 100644 (file)
@@ -76,10 +76,9 @@ class DeleteDefaultMessages extends Maintenance {
                        $dbw->ping();
                        $title = Title::makeTitle( $row->page_namespace, $row->page_title );
                        $page = WikiPage::factory( $title );
-                       $dbw->begin( __METHOD__ );
                        $error = ''; // Passed by ref
-                       $page->doDeleteArticle( 'No longer required', false, 0, false, $error, $user );
-                       $dbw->commit( __METHOD__ );
+                       // FIXME: Deletion failures should be reported, not silently ignored.
+                       $page->doDeleteArticle( 'No longer required', false, 0, true, $error, $user );
                }
 
                $this->output( "done!\n", 'msg' );
index dbe9698..478e0d7 100644 (file)
@@ -182,14 +182,20 @@ class DeleteEqualMessages extends Maintenance {
                        $this->output( "\n* [[$title]]" );
                        $page = WikiPage::factory( $title );
                        $error = ''; // Passed by ref
-                       $page->doDeleteArticle( 'No longer required', false, 0, false, $error, $user );
+                       $success = $page->doDeleteArticle( 'No longer required', false, 0, true, $error, $user );
+                       if ( !$success ) {
+                               $this->output( " (Failed!)" );
+                       }
                        if ( $result['hasTalk'] && $doDeleteTalk ) {
                                $title = Title::makeTitle( NS_MEDIAWIKI_TALK, $result['title'] );
                                $this->output( "\n* [[$title]]" );
                                $page = WikiPage::factory( $title );
                                $error = ''; // Passed by ref
-                               $page->doDeleteArticle( 'Orphaned talk page of no longer required message',
-                                       false, 0, false, $error, $user );
+                               $success = $page->doDeleteArticle( 'Orphaned talk page of no longer required message',
+                                       false, 0, true, $error, $user );
+                               if ( !$success ) {
+                                       $this->output( " (Failed!)" );
+                               }
                        }
                }
                $this->output( "\n\ndone!\n" );
index d5f6834..5838201 100644 (file)
@@ -184,7 +184,7 @@ class GetConfiguration extends Maintenance {
                        }
 
                        return true;
-               } elseif ( is_scalar( $value ) ) {
+               } elseif ( is_scalar( $value ) || $value === null ) {
                        return true;
                }
 
index d547b7b..d142556 100644 (file)
@@ -31,7 +31,8 @@
                                        "mw.user",
                                        "mw.util",
                                        "mw.plugin.*",
-                                       "mw.cookie"
+                                       "mw.cookie",
+                                       "mw.experiments"
                                ]
                        },
                        {
@@ -60,7 +61,9 @@
                                "name": "Interfaces",
                                "classes": [
                                        "mw.Feedback*",
-                                       "mw.Upload*"
+                                       "mw.Upload*",
+                                       "mw.ForeignUpload",
+                                       "mw.ForeignStructuredUpload"
                                ]
                        },
                        {
index a989aef..25a096c 100644 (file)
@@ -34,42 +34,53 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class ShowJobs extends Maintenance {
+       protected static $stateMethods = array(
+               'unclaimed' => 'getAllQueuedJobs',
+               'delayed'   => 'getAllDelayedJobs',
+               'claimed'   => 'getAllAcquiredJobs',
+               'abandoned' => 'getAllAbandonedJobs',
+       );
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Show number of jobs waiting in master database";
                $this->addOption( 'group', 'Show number of jobs per job type' );
-               $this->addOption( 'list',
-                       'Show a list of all jobs in a machine-readable format, instead of statistics' );
+               $this->addOption( 'list', 'Show a list of all jobs instead of counts' );
                $this->addOption( 'type', 'Only show/count jobs of a given type', false, true );
+               $this->addOption( 'status', 'Filter list by state (unclaimed,delayed,claimed,abandoned)' );
+               $this->addOption( 'limit', 'Limit of jobs listed' );
        }
 
        public function execute() {
-               $filterType = $this->getOption( 'type', '' );
+               $typeFilter = $this->getOption( 'type', '' );
+               $stateFilter = $this->getOption( 'status', '' );
+               $stateLimit = (float)$this->getOption( 'limit', INF );
+
                $group = JobQueueGroup::singleton();
+
+               $filteredTypes = $typeFilter
+                       ? array( $typeFilter )
+                       : $group->getQueueTypes();
+               $filteredStates = $stateFilter
+                       ? array_intersect_key( self::$stateMethods, array( $stateFilter => 1 ) )
+                       : self::$stateMethods;
+
                if ( $this->hasOption( 'list' ) ) {
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       $count = 0;
+                       foreach ( $filteredTypes as $type ) {
                                $queue = $group->get( $type );
-                               foreach ( $queue->getAllQueuedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=unclaimed\n" );
-                               }
-                               foreach ( $queue->getAllDelayedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=delayed\n" );
-                               }
-                               foreach ( $queue->getAllAcquiredJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=claimed\n" );
-                               }
-                               foreach ( $queue->getAllAbandonedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=abandoned\n" );
+                               foreach ( $filteredStates as $state => $method ) {
+                                       foreach ( $queue->$method() as $job ) {
+                                               /** @var Job $job */
+                                               $this->output( $job->toString() . " status=$state\n" );
+                                               if ( ++$count >= $stateLimit ) {
+                                                       return;
+                                               }
+                                       }
                                }
                        }
                } elseif ( $this->hasOption( 'group' ) ) {
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       foreach ( $filteredTypes as $type ) {
                                $queue = $group->get( $type );
                                $delayed = $queue->getDelayedCount();
                                $pending = $queue->getSize();
@@ -86,10 +97,7 @@ class ShowJobs extends Maintenance {
                        }
                } else {
                        $count = 0;
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       foreach ( $filteredTypes as $type ) {
                                $count += $group->get( $type )->getSize();
                        }
                        $this->output( "$count\n" );
index de36d26..aa0c7ea 100644 (file)
@@ -3,7 +3,9 @@
 -- not have to run it by itself unless doing a manual install.
 
 -- This is a shared schema file used for both MySQL and SQLite installs.
-
+--
+-- For more documentation on the database schema, see
+-- https://www.mediawiki.org/wiki/Manual:Database_layout
 --
 -- General notes:
 --
index 7f1bced..36ad394 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -4,6 +4,9 @@
        <file>.</file>
        <arg name="encoding" value="utf8"/>
        <arg name="extensions" value="php,php5,inc,sample"/>
+       <rule ref="Generic.Files.LineLength">
+               <exclude-pattern>*/languages/messages/Messages*.php</exclude-pattern>
+       </rule>
        <exclude-pattern>node_modules</exclude-pattern>
        <exclude-pattern>vendor</exclude-pattern>
        <exclude-pattern>extensions</exclude-pattern>
index cac87b9..2ecd3e7 100644 (file)
@@ -827,7 +827,6 @@ return array(
                        'resources/lib/phpjs-sha1/sha1.js',
                        'resources/src/mediawiki/mediawiki.js',
                        'resources/src/mediawiki/mediawiki.errorLogger.js',
-                       'resources/src/mediawiki/mediawiki.startUp.js',
                ),
                'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
                'targets' => array( 'desktop', 'mobile' ),
@@ -986,6 +985,7 @@ return array(
                ),
        ),
        'mediawiki.ForeignApi' => array(
+               'targets' => array( 'desktop', 'mobile' ),
                'class' => 'ResourceLoaderForeignApiModule',
                // Additional dependencies generated dynamically
                'dependencies' => 'mediawiki.ForeignApi.core',
@@ -996,6 +996,7 @@ return array(
                        'mediawiki.api',
                        'oojs',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.helplink' => array(
                'position' => 'top',
@@ -1129,6 +1130,20 @@ return array(
                        'mediawiki.api.upload',
                ),
        ),
+       'mediawiki.ForeignUpload' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.ForeignUpload.js',
+               'dependencies' => array(
+                       'mediawiki.ForeignApi',
+                       'mediawiki.Upload',
+                       'oojs',
+               ),
+       ),
+       'mediawiki.ForeignStructuredUpload' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js',
+               'dependencies' => array(
+                       'mediawiki.ForeignUpload',
+               ),
+       ),
        'mediawiki.Upload.Dialog' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Upload.Dialog.js',
                'dependencies' => array(
@@ -1204,6 +1219,10 @@ return array(
                'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
                'position' => 'top',
        ),
+       'mediawiki.experiments' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
 
        /* MediaWiki Action */
 
@@ -1436,9 +1455,18 @@ return array(
        'mediawiki.page.gallery' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.gallery.js',
                'dependencies' => array(
+                       'mediawiki.page.gallery.styles',
                        'jquery.throttle-debounce',
                )
        ),
+       'mediawiki.page.gallery.styles' => array(
+               'styles' => array(
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.css',
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.page.ready' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js',
                'dependencies' => array(
@@ -1720,6 +1748,8 @@ return array(
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
+                       // @todo: Remove mediawiki.page.gallery when cache has cleared
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
                        'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
                ),
                'group' => 'print',
@@ -1733,6 +1763,8 @@ return array(
        'mediawiki.legacy.shared' => array(
                'position' => 'top',
                'styles' => array(
+                       // @todo: Remove when mediawiki.page.gallery in cached html.
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.css',
                        'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
                ),
        ),
index 8c3d091..ad905c6 100644 (file)
@@ -114,8 +114,9 @@ return call_user_func( function () {
 
                if ( substr( $name, 0, 5 ) === 'icons' ) {
                        $module['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before';
-                       $module['selectorWithVariant'] = '.oo-ui-image-{variant} .oo-ui-icon-{name},
+                       $module['selectorWithVariant'] = '
                                .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
+                               /* Hack for Flow, see T110051 */
                                .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
                                .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
                }
index 216df70..3ecbe50 100644 (file)
@@ -19,5 +19,6 @@
        "ooui-dialog-process-retry": "Vuelvi a intentalo",
        "ooui-dialog-process-continue": "Siguir",
        "ooui-selectfile-not-supported": "Nun hai encontu pa la seleición de ficheros",
-       "ooui-selectfile-placeholder": "Nun se seleicionó nengún ficheru"
+       "ooui-selectfile-placeholder": "Nun se seleicionó nengún ficheru",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar el ficheru equí (o facer clic pa restolar)"
 }
index 35a550b..33b0ce0 100644 (file)
@@ -28,5 +28,6 @@
        "ooui-dialog-process-retry": "Torneu-ho a provar",
        "ooui-dialog-process-continue": "Continua",
        "ooui-selectfile-not-supported": "El tipus de fitxer no és compatible",
-       "ooui-selectfile-placeholder": "No s'ha seleccionat cap fitxer"
+       "ooui-selectfile-placeholder": "No s'ha seleccionat cap fitxer",
+       "ooui-selectfile-dragdrop-placeholder": "Deixeu-hi anar el fitxer (o feu clic a navega)"
 }
index d5649b0..b48dfb5 100644 (file)
@@ -25,6 +25,8 @@
        "ooui-dialog-process-dismiss": "Ausblenden",
        "ooui-dialog-process-retry": "Erneut versuchen",
        "ooui-dialog-process-continue": "Fortfahren",
+       "ooui-selectfile-button-select": "Eine Datei auswählen",
        "ooui-selectfile-not-supported": "Die Dateiauswahl wird nicht unterstützt",
-       "ooui-selectfile-placeholder": "Keine Datei ausgewählt"
+       "ooui-selectfile-placeholder": "Keine Datei ausgewählt",
+       "ooui-selectfile-dragdrop-placeholder": "Dateien hier ablegen"
 }
index 27f1996..b3c4845 100644 (file)
@@ -8,7 +8,8 @@
                        "Geraki",
                        "Glavkos",
                        "Nikosguard",
-                       "Tifa93"
+                       "Tifa93",
+                       "Stam.nikos"
                ]
        },
        "ooui-outline-control-move-down": "Μετακίνηση στοιχείου προς τα κάτω",
@@ -24,5 +25,6 @@
        "ooui-dialog-process-retry": "Δοκιμάστε ξανά",
        "ooui-dialog-process-continue": "Συνέχεια",
        "ooui-selectfile-not-supported": "Επιλογή αρχείου δεν υποστηρίζεται",
-       "ooui-selectfile-placeholder": "Κανένα αρχείο δεν είναι επιλεγμένο"
+       "ooui-selectfile-placeholder": "Κανένα αρχείο δεν είναι επιλεγμένο",
+       "ooui-selectfile-dragdrop-placeholder": "Σύρετε ένα αρχείο εδώ (ή κάντε κλικ για αναζήτηση)"
 }
diff --git a/resources/lib/oojs-ui/i18n/en-ca.json b/resources/lib/oojs-ui/i18n/en-ca.json
new file mode 100644 (file)
index 0000000..218ece2
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Skyllful"
+               ]
+       },
+       "ooui-outline-control-move-down": "Move item down",
+       "ooui-outline-control-move-up": "Move item up",
+       "ooui-outline-control-remove": "Remove item",
+       "ooui-toolbar-more": "More",
+       "ooui-toolgroup-expand": "More",
+       "ooui-toolgroup-collapse": "Less",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Cancel",
+       "ooui-dialog-process-error": "Something went wrong",
+       "ooui-dialog-process-dismiss": "Dismiss",
+       "ooui-dialog-process-retry": "Try again",
+       "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-not-supported": "File(s) not supported",
+       "ooui-selectfile-placeholder": "No file selected",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here (or click to browse your computer)",
+       "ooui-semicolon-separator": ";"
+}
index 9812ec6..7cf2eb1 100644 (file)
@@ -28,7 +28,9 @@
        "ooui-dialog-process-dismiss": "Dismiss",
        "ooui-dialog-process-retry": "Try again",
        "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-button-select": "Select a file",
        "ooui-selectfile-not-supported": "File selection is not supported",
        "ooui-selectfile-placeholder": "No file is selected",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here",
        "ooui-semicolon-separator": "; "
 }
index e5a8e45..3f690fc 100644 (file)
@@ -31,5 +31,6 @@
        "ooui-dialog-process-retry": "Intentar de nuevo",
        "ooui-dialog-process-continue": "Continuar",
        "ooui-selectfile-not-supported": "No se admite la selección de archivos",
-       "ooui-selectfile-placeholder": "Ningún archivo seleccionado"
+       "ooui-selectfile-placeholder": "Ningún archivo seleccionado",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar el archivo aquí (o pulsa para examinar)"
 }
index e86f11e..1283c8d 100644 (file)
@@ -19,5 +19,6 @@
        "ooui-dialog-process-retry": "Proovi uuesti",
        "ooui-dialog-process-continue": "Jätka",
        "ooui-selectfile-not-supported": "Faili valiku tugi puudub",
-       "ooui-selectfile-placeholder": "Faili ei ole valitud"
+       "ooui-selectfile-placeholder": "Faili ei ole valitud",
+       "ooui-selectfile-dragdrop-placeholder": "Lohista fail siia (või klõpsa, et sirvida)"
 }
index e20997a..11bd4b8 100644 (file)
@@ -13,7 +13,8 @@
                        "Armin1392",
                        "Alirezaaa",
                        "Leyth",
-                       "الناز"
+                       "الناز",
+                       "فلورانس"
                ]
        },
        "ooui-outline-control-move-down": "انتقال مورد به پایین",
@@ -29,5 +30,6 @@
        "ooui-dialog-process-retry": "دوباره امتحان کنید",
        "ooui-dialog-process-continue": "ادامه",
        "ooui-selectfile-not-supported": "انتخاب پرونده پشتیبانی نمی‌شود",
-       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است"
+       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است",
+       "ooui-selectfile-dragdrop-placeholder": "رها کردن فایل در اینجا (و یا کلیک کنید به فهرست)"
 }
index c96a74e..bdf015f 100644 (file)
@@ -30,5 +30,6 @@
        "ooui-dialog-process-retry": "Yritä uudelleen",
        "ooui-dialog-process-continue": "Jatka",
        "ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta",
-       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu"
+       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu",
+       "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto (tai selaa tiedostoja napsauttamalla)"
 }
index 537f6b8..fe8ec04 100644 (file)
@@ -45,5 +45,6 @@
        "ooui-dialog-process-retry": "Réessayer",
        "ooui-dialog-process-continue": "Continuer",
        "ooui-selectfile-not-supported": "La sélection de fichier n’est pas prise en charge",
-       "ooui-selectfile-placeholder": "Aucun fichier sélectionné"
+       "ooui-selectfile-placeholder": "Aucun fichier sélectionné",
+       "ooui-selectfile-dragdrop-placeholder": "Déposer le fichier ici (ou cliquez pour parcourir)"
 }
index 1283c53..0f7ac78 100644 (file)
@@ -20,5 +20,6 @@
        "ooui-dialog-process-retry": "Inténteo de novo",
        "ooui-dialog-process-continue": "Continuar",
        "ooui-selectfile-not-supported": "Non está soportada a selección de ficheiros",
-       "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro"
+       "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro",
+       "ooui-selectfile-dragdrop-placeholder": "Solte un ficheiro aquí (ou prema para buscalo)"
 }
diff --git a/resources/lib/oojs-ui/i18n/glk.json b/resources/lib/oojs-ui/i18n/glk.json
new file mode 100644 (file)
index 0000000..9b15046
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "V6rg"
+               ]
+       },
+       "ooui-outline-control-move-down": "مأسمکه جابجا بۊکۊن جير",
+       "ooui-outline-control-move-up": "مأسمکه جابجا بۊکۊن جؤر",
+       "ooui-outline-control-remove": "مأسمکه حذفأکۊن",
+       "ooui-toolbar-more": "ويشتر",
+       "ooui-toolgroup-expand": "ويشتر",
+       "ooui-toolgroup-collapse": "کمتر",
+       "ooui-dialog-message-accept": "خؤ",
+       "ooui-dialog-message-reject": "لغو",
+       "ooui-dialog-process-error": "ىک مؤشکلي هنأ",
+       "ooui-dialog-process-dismiss": "وأبدي",
+       "ooui-dialog-process-retry": "هنده حقسأى بۊکۊنين",
+       "ooui-dialog-process-continue": "سره",
+       "ooui-selectfile-button-select": "ىکته فاىله دؤجين بۊکۊنين",
+       "ooui-selectfile-not-supported": "نشأنهىکته فاىله دؤجين گۊدن",
+       "ooui-selectfile-placeholder": "هيچ فاىلي دؤجين نۊبؤ",
+       "ooui-selectfile-dragdrop-placeholder": "فاىله ائره فدي"
+}
index de67665..650d67d 100644 (file)
@@ -27,6 +27,8 @@
        "ooui-dialog-process-dismiss": "לוותר",
        "ooui-dialog-process-retry": "לנסות שוב",
        "ooui-dialog-process-continue": "המשך",
+       "ooui-selectfile-button-select": "נא לבחור קובץ",
        "ooui-selectfile-not-supported": "בחירת קבצים אינה נתמכת",
-       "ooui-selectfile-placeholder": "לא נבחר שום קובץ"
+       "ooui-selectfile-placeholder": "לא נבחר שום קובץ",
+       "ooui-selectfile-dragdrop-placeholder": "נא לשחרר את הקובץ כאן"
 }
index 0a8bfac..e54099d 100644 (file)
@@ -16,5 +16,8 @@
        "ooui-dialog-process-error": "មានបញ្ហាអ្វីមួយ",
        "ooui-dialog-process-dismiss": "បិទ",
        "ooui-dialog-process-retry": "ព្យាយាមម្ដងទៀត",
-       "ooui-dialog-process-continue": "បន្ត"
+       "ooui-dialog-process-continue": "បន្ត",
+       "ooui-selectfile-not-supported": "ការជ្រើសរើសឯកសារមិនអាចប្រើបានទេ",
+       "ooui-selectfile-placeholder": "គ្មានឯកសារណាមួយត្រូវបានជ្រើសរើស",
+       "ooui-selectfile-dragdrop-placeholder": "ទម្លាក់ឯកសារនៅទីនេះ(ឬចុចដើម្បីរាវរក)"
 }
index 79bb469..65bce10 100644 (file)
@@ -22,5 +22,6 @@
        "ooui-dialog-process-dismiss": "Verwerfen",
        "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
        "ooui-dialog-process-continue": "Virufueren",
-       "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht"
+       "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht",
+       "ooui-selectfile-dragdrop-placeholder": "Fichier hei deposéieren (oder klickt fir ze sichen)"
 }
index 4334efb..20aa2f1 100644 (file)
@@ -20,5 +20,6 @@
        "ooui-dialog-process-retry": "Bandykite dar kartą",
        "ooui-dialog-process-continue": "Tęsti",
        "ooui-selectfile-not-supported": "Failų pasirinkimas nepalaikomas",
-       "ooui-selectfile-placeholder": "Nėra pasirinktų failų"
+       "ooui-selectfile-placeholder": "Nėra pasirinktų failų",
+       "ooui-selectfile-dragdrop-placeholder": "Atitempkite failą čia (arba paspauskite paieškai)"
 }
index 53e5bf4..46f37fe 100644 (file)
@@ -18,6 +18,8 @@
        "ooui-dialog-process-dismiss": "Тргни",
        "ooui-dialog-process-retry": "Обиди се пак",
        "ooui-dialog-process-continue": "Продолжи",
+       "ooui-selectfile-button-select": "Одберете податотека",
        "ooui-selectfile-not-supported": "Изборот на податотеки не е поддржан",
-       "ooui-selectfile-placeholder": "Немате одбрано податотека"
+       "ooui-selectfile-placeholder": "Немате одбрано податотека",
+       "ooui-selectfile-dragdrop-placeholder": "Тука пуштете ја податотеката"
 }
index 9c07f41..b7e37b4 100644 (file)
@@ -4,7 +4,8 @@
                        "Chelin",
                        "Chrisportelli",
                        "PiRSquared17",
-                       "C.R."
+                       "C.R.",
+                       "Candalua"
                ]
        },
        "ooui-outline-control-move-down": "Mòve abbascio",
@@ -19,6 +20,8 @@
        "ooui-dialog-process-dismiss": "Passa 'a vacca",
        "ooui-dialog-process-retry": "Prova n'ata vota",
        "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-button-select": "Sceglie nu file",
        "ooui-selectfile-not-supported": "Filtro 'e selezione nun suppurtato",
-       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file"
+       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file",
+       "ooui-selectfile-dragdrop-placeholder": "Lassa 'o file ccà"
 }
index 81da6f5..9dd84b0 100644 (file)
@@ -16,7 +16,8 @@
                        "Jacenty359",
                        "Matik7",
                        "Gloria sah",
-                       "Andrzej aa"
+                       "Andrzej aa",
+                       "The Polish"
                ]
        },
        "ooui-outline-control-move-down": "Przenieś niżej",
@@ -32,5 +33,6 @@
        "ooui-dialog-process-retry": "Spróbuj ponownie",
        "ooui-dialog-process-continue": "Kontynuuj",
        "ooui-selectfile-not-supported": "Wybór pliku nie jest obsługiwany",
-       "ooui-selectfile-placeholder": "Nie wybrano pliku"
+       "ooui-selectfile-placeholder": "Nie wybrano pliku",
+       "ooui-selectfile-dragdrop-placeholder": "Umieść plik tutaj (lub kliknij, aby je przeglądać)"
 }
index aab0aed..8379cac 100644 (file)
@@ -26,5 +26,6 @@
        "ooui-dialog-process-retry": "Tentar novamente",
        "ooui-dialog-process-continue": "Continuar",
        "ooui-selectfile-not-supported": "A seleção de ficheiros não é suportada",
-       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado"
+       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar ficheiro aqui (ou clicar para navegar)"
 }
index bef65ed..cd9c0c2 100644 (file)
@@ -32,7 +32,9 @@
        "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
        "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
        "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}",
-       "ooui-selectfile-not-supported": "Label for the file selection dialog if file selection is not supported",
-       "ooui-selectfile-placeholder": "Label for the file selection dialog when no file is currently selected",
+       "ooui-selectfile-button-select": "Label for the file selection widget's select file button",
+       "ooui-selectfile-not-supported": "Label for the file selection widget if file selection is not supported",
+       "ooui-selectfile-placeholder": "Label for the file selection widget when no file is currently selected",
+       "ooui-selectfile-dragdrop-placeholder": "Label for the file selection widget's drop target",
        "ooui-semicolon-separator": "{{optional}} Semicolon used as a separator"
 }
index 970a602..bf44621 100644 (file)
@@ -21,5 +21,6 @@
        "ooui-dialog-process-retry": "Reîncearcă",
        "ooui-dialog-process-continue": "Continuă",
        "ooui-selectfile-not-supported": "Selecția de fișiere nu este acceptată",
-       "ooui-selectfile-placeholder": "Niciun fișier selectat"
+       "ooui-selectfile-placeholder": "Niciun fișier selectat",
+       "ooui-selectfile-dragdrop-placeholder": "Trageți fișierul aici (sau faceți clic pentru a răsfoi)"
 }
diff --git a/resources/lib/oojs-ui/i18n/su.json b/resources/lib/oojs-ui/i18n/su.json
new file mode 100644 (file)
index 0000000..a8cf762
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kandar"
+               ]
+       },
+       "ooui-outline-control-move-down": "Pindahkeun ka handap",
+       "ooui-outline-control-move-up": "Pindahkeun ka luhur",
+       "ooui-outline-control-remove": "Hapus",
+       "ooui-toolbar-more": "Lobaan",
+       "ooui-toolgroup-expand": "Lobaan",
+       "ooui-toolgroup-collapse": "Saeutikan",
+       "ooui-dialog-message-accept": "Heug",
+       "ooui-dialog-message-reject": "Bolay",
+       "ooui-dialog-process-error": "Aya nu teu bener",
+       "ooui-dialog-process-dismiss": "Tutup",
+       "ooui-dialog-process-retry": "Cobaan deui",
+       "ooui-dialog-process-continue": "Teruskeun",
+       "ooui-selectfile-not-supported": "Pamilihan berkas teu dirojong",
+       "ooui-selectfile-placeholder": "Taya berkas anu dipilih"
+}
index 9cd8ea3..41c2646 100644 (file)
@@ -28,5 +28,6 @@
        "ooui-dialog-process-retry": "Försök igen",
        "ooui-dialog-process-continue": "Fortsätt",
        "ooui-selectfile-not-supported": "Filval stöds inte",
-       "ooui-selectfile-placeholder": "Ingen fil är vald"
+       "ooui-selectfile-placeholder": "Ingen fil är vald",
+       "ooui-selectfile-dragdrop-placeholder": "Släpp filen här (eller klicka för att bläddra)"
 }
index 9e0b977..9e727e4 100644 (file)
@@ -16,7 +16,8 @@
                        "Tifinaghes",
                        "Ата",
                        "Piramidion",
-                       "A1"
+                       "A1",
+                       "Dars"
                ]
        },
        "ooui-outline-control-move-down": "Перемістити елемент униз",
@@ -32,5 +33,6 @@
        "ooui-dialog-process-retry": "Спробуйте ще раз",
        "ooui-dialog-process-continue": "Продовжити",
        "ooui-selectfile-not-supported": "Вибір файлу не підтримується",
-       "ooui-selectfile-placeholder": "Жодного файлу не вибрано"
+       "ooui-selectfile-placeholder": "Жодного файлу не вибрано",
+       "ooui-selectfile-dragdrop-placeholder": "Помістіть файл сюди (або натисніть, щоб переглянути)"
 }
index 7d4252d..ff14801 100644 (file)
@@ -21,5 +21,6 @@
        "ooui-dialog-process-retry": "Thử lại",
        "ooui-dialog-process-continue": "Tiếp tục",
        "ooui-selectfile-not-supported": "Không hỗ trợ việc chọn tập tin",
-       "ooui-selectfile-placeholder": "Không có tập tin nào được chọn"
+       "ooui-selectfile-placeholder": "Không có tập tin nào được chọn",
+       "ooui-selectfile-dragdrop-placeholder": "Thả tập tin vào đây (hoặc nhấn chuột để duyệt)"
 }
index 7247d93..b5b51a0 100644 (file)
                        "Yfdyh000",
                        "Zhangjintao",
                        "乌拉跨氪",
-                       "Great Brightstar"
+                       "Great Brightstar",
+                       "Nbdd0121"
                ]
        },
-       "ooui-outline-control-move-down": "项目下移",
-       "ooui-outline-control-move-up": "项目上移",
+       "ooui-outline-control-move-down": "向下移动一项",
+       "ooui-outline-control-move-up": "向上移动一项",
        "ooui-outline-control-remove": "移除项目",
        "ooui-toolbar-more": "更多",
        "ooui-toolgroup-expand": "更多",
        "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "确定",
        "ooui-dialog-message-reject": "取消",
-       "ooui-dialog-process-error": "发生一些错误",
-       "ooui-dialog-process-dismiss": "解除",
+       "ooui-dialog-process-error": "å\8f\91ç\94\9fäº\86ä¸\80äº\9bé\94\99误",
+       "ooui-dialog-process-dismiss": "关闭",
        "ooui-dialog-process-retry": "重试",
        "ooui-dialog-process-continue": "继续",
        "ooui-selectfile-not-supported": "文件选择不受支持",
-       "ooui-selectfile-placeholder": "没有选定文件"
+       "ooui-selectfile-placeholder": "没有选定文件",
+       "ooui-selectfile-dragdrop-placeholder": "将文件拖动至此(或点击以浏览)"
 }
index 8320362..880648e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.5
+ * OOjs UI v0.12.7
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-19T02:10:25Z
+ * Date: 2015-09-01T23:25:39Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
+}
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid rgba(0, 0, 0, 0.1);
        border-radius: 0.25em;
        padding: 0 0.5em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
        width: 100%;
        white-space: nowrap;
                box-sizing: border-box;
        text-overflow: ellipsis;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info {
        padding-left: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info {
        padding-right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info {
        padding-right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
        padding-right: 1em;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info {
        padding-right: 2em;
 }
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
+       border: 1px dashed #aaaaaa;
+       padding: 0.5em 1em;
+       margin-bottom: 0.5em;
+       background: #ffffff;
+       text-align: center;
+       vertical-align: middle;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover,
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop oo-ui-selectfilewidget-droptarget {
+       background-color: #e1f3ff;
+}
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
 .oo-ui-outlineOptionWidget {
        position: relative;
        cursor: pointer;
index 085f744..dc0103e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.5
+ * OOjs UI v0.12.7
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-19T02:10:17Z
+ * Date: 2015-09-01T23:25:30Z
  */
 /**
  * @class
index 41d06ff..b2e5813 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.5
+ * OOjs UI v0.12.7
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-19T02:10:25Z
+ * Date: 2015-09-01T23:25:39Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #347bff;
+       color: #2962cc;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #347bff;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #00af89;
+       color: #008064;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #00af89;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #d11d13;
+       color: #8c130d;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #d11d13;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
 .oo-ui-horizontalLayout > .oo-ui-widget:last-child {
        margin-right: 0;
 }
+.oo-ui-horizontalLayout .oo-ui-fieldLayout {
+       margin-bottom: 0;
+}
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        z-index: 4;
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+       background-size: contain;
+       background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -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,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid #cccccc;
        border-radius: 0.1em;
        padding: 0 1em;
-       background: #ffffff;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
        width: 100%;
        white-space: nowrap;
                box-sizing: border-box;
        text-overflow: ellipsis;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info {
        padding-left: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info {
        padding-right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info {
        padding-right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
        padding-right: 1em;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info {
        padding-right: 2em;
 }
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
+       border: 1px dashed #cccccc;
+       padding: 0.5em 1em;
+       margin-bottom: 0.5em;
+       background: #ffffff;
+       text-align: center;
+       vertical-align: middle;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover {
+       background-color: #eeeeee;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
+       background: rgba(52, 123, 255, 0.1);
+}
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
 .oo-ui-outlineOptionWidget {
        position: relative;
        cursor: pointer;
index 7d20dfb..669fcf9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.5
+ * OOjs UI v0.12.7
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-19T02:10:17Z
+ * Date: 2015-09-01T23:25:30Z
  */
 /**
  * @class
index 5344b1e..df68873 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.5
+ * OOjs UI v0.12.7
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-19T02:10:17Z
+ * Date: 2015-09-01T23:25:30Z
  */
 ( function ( OO ) {
 
@@ -64,10 +64,10 @@ OO.ui.generateElementId = function () {
  * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
  *
  * @param {jQuery} element Element to test
- * @return {Boolean} [description]
+ * @return {boolean}
  */
 OO.ui.isFocusableElement = function ( $element ) {
-       var node = $element[0],
+       var node = $element[ 0 ],
                nodeName = node.nodeName.toLowerCase(),
                // Check if the element have tabindex set
                isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ),
@@ -279,10 +279,14 @@ OO.ui.infuse = function ( idOrNode ) {
                'ooui-dialog-process-retry': 'Try again',
                // Label for process dialog retry action button, visible when describing only warnings
                'ooui-dialog-process-continue': 'Continue',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget's select file button
+               'ooui-selectfile-button-select': 'Select a file',
+               // Label for the file selection widget if file selection is not supported
                'ooui-selectfile-not-supported': 'File selection is not supported',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget when no file is currently selected
                'ooui-selectfile-placeholder': 'No file is selected',
+               // Label for the file selection widget's drop target
+               'ooui-selectfile-dragdrop-placeholder': 'Drop file here',
                // Semicolon separator
                'ooui-semicolon-separator': '; '
        };
@@ -369,14 +373,14 @@ OO.ui.infuse = function ( idOrNode ) {
                        return true;
                }
 
-               protocol = url.split( ':', 1 )[0] + ':';
+               protocol = url.split( ':', 1 )[ 0 ] + ':';
                if ( !protocol.match( /^([A-za-z0-9\+\.\-])+:/ ) ) {
                        // Not a valid protocol, safe
                        return true;
                }
 
                // Safe if in the whitelist
-               return $.inArray( protocol, whitelist ) !== -1;
+               return whitelist.indexOf( protocol ) !== -1;
        };
 
 } )();
@@ -1069,8 +1073,7 @@ OO.ui.Element = function OoUiElement( config ) {
        this.$element = config.$element ||
                $( document.createElement( this.getTagName() ) );
        this.elementGroup = null;
-       this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
-       this.updateThemeClassesPending = false;
+       this.debouncedUpdateThemeClassesHandler = OO.ui.debounce( this.debouncedUpdateThemeClasses );
 
        // Initialization
        if ( Array.isArray( config.classes ) ) {
@@ -1171,7 +1174,7 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
        if ( !$elem.length ) {
                throw new Error( 'Widget not found: ' + id );
        }
-       data = $elem.data( 'ooui-infused' ) || $elem[0].oouiInfused;
+       data = $elem.data( 'ooui-infused' ) || $elem[ 0 ].oouiInfused;
        if ( data ) {
                // cached!
                if ( data === true ) {
@@ -1248,7 +1251,7 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
                // This element is now gone from the DOM, but if anyone is holding a reference to it,
                // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
                // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
-               $elem[0].oouiInfused = obj;
+               $elem[ 0 ].oouiInfused = obj;
                top.resolve();
        }
        obj.$element.data( 'ooui-infused', obj );
@@ -1312,6 +1315,8 @@ OO.ui.Element.static.getDocument = function ( obj ) {
  */
 OO.ui.Element.static.getWindow = function ( obj ) {
        var doc = this.getDocument( obj );
+       // Support: IE 8
+       // Standard Document.defaultView is IE9+
        return doc.parentWindow || doc.defaultView;
 };
 
@@ -1427,9 +1432,13 @@ OO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {
  */
 OO.ui.Element.static.getBorders = function ( el ) {
        var doc = el.ownerDocument,
+               // Support: IE 8
+               // Standard Document.defaultView is IE9+
                win = doc.parentWindow || doc.defaultView,
                style = win && win.getComputedStyle ?
                        win.getComputedStyle( el, null ) :
+                       // Support: IE 8
+                       // Standard getComputedStyle() is IE9+
                        el.currentStyle,
                $el = $( el ),
                top = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,
@@ -1455,6 +1464,8 @@ OO.ui.Element.static.getBorders = function ( el ) {
 OO.ui.Element.static.getDimensions = function ( el ) {
        var $el, $win,
                doc = el.ownerDocument || el.document,
+               // Support: IE 8
+               // Standard Document.defaultView is IE9+
                win = doc.parentWindow || doc.defaultView;
 
        if ( win === el || el === doc.documentElement ) {
@@ -1571,16 +1582,18 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension )
  * @param {Function} [config.complete] Function to call when scrolling completes
  */
 OO.ui.Element.static.scrollIntoView = function ( el, config ) {
+       var rel, anim, callback, sc, $sc, eld, scd, $win;
+
        // Configuration initialization
        config = config || {};
 
-       var rel, anim = {},
-               callback = typeof config.complete === 'function' && config.complete,
-               sc = this.getClosestScrollableContainer( el, config.direction ),
-               $sc = $( sc ),
-               eld = this.getDimensions( el ),
-               scd = this.getDimensions( sc ),
-               $win = $( this.getWindow( el ) );
+       anim = {};
+       callback = typeof config.complete === 'function' && config.complete;
+       sc = this.getClosestScrollableContainer( el, config.direction );
+       $sc = $( sc );
+       eld = this.getDimensions( el );
+       scd = this.getDimensions( sc );
+       $win = $( this.getWindow( el ) );
 
        // Compute the distances between the edges of el and the edges of the scroll viewport
        if ( $sc.is( 'html, body' ) ) {
@@ -1741,18 +1754,16 @@ OO.ui.Element.prototype.supports = function ( methods ) {
  *   guaranteeing that theme updates do not occur within an element's constructor
  */
 OO.ui.Element.prototype.updateThemeClasses = function () {
-       if ( !this.updateThemeClassesPending ) {
-               this.updateThemeClassesPending = true;
-               setTimeout( this.debouncedUpdateThemeClassesHandler );
-       }
+       this.debouncedUpdateThemeClassesHandler();
 };
 
 /**
  * @private
+ * @localdoc This method is called directly from the QUnit tests instead of #updateThemeClasses, to
+ *   make them synchronous.
  */
 OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () {
        OO.ui.theme.updateElementClasses( this );
-       this.updateThemeClassesPending = false;
 };
 
 /**
@@ -2709,7 +2720,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
        this.actions = new OO.ui.ActionSet();
        this.attachedActions = [];
        this.currentAction = null;
-       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
+       this.onDialogKeyDownHandler = this.onDialogKeyDown.bind( this );
 
        // Events
        this.actions.connect( this, {
@@ -2792,7 +2803,7 @@ OO.ui.Dialog.static.escapable = true;
  * @private
  * @param {jQuery.Event} e Key down event
  */
-OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
+OO.ui.Dialog.prototype.onDialogKeyDown = function ( e ) {
        if ( e.which === OO.ui.Keys.ESCAPE ) {
                this.close();
                e.preventDefault();
@@ -2889,7 +2900,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
                        this.actions.add( this.getActionWidgets( actions ) );
 
                        if ( this.constructor.static.escapable ) {
-                               this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
+                               this.$element.on( 'keydown', this.onDialogKeyDownHandler );
                        }
                }, this );
 };
@@ -2902,7 +2913,7 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        return OO.ui.Dialog.parent.prototype.getTeardownProcess.call( this, data )
                .first( function () {
                        if ( this.constructor.static.escapable ) {
-                               this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
+                               this.$element.off( 'keydown', this.onDialogKeyDownHandler );
                        }
 
                        this.actions.clear();
@@ -2914,10 +2925,12 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
  * @inheritdoc
  */
 OO.ui.Dialog.prototype.initialize = function () {
+       var titleId;
+
        // Parent method
        OO.ui.Dialog.parent.prototype.initialize.call( this );
 
-       var titleId = OO.ui.generateElementId();
+       titleId = OO.ui.generateElementId();
 
        // Properties
        this.title = new OO.ui.LabelWidget( {
@@ -3543,12 +3556,14 @@ OO.ui.WindowManager.prototype.clearWindows = function () {
  * @chainable
  */
 OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
+       var isFullscreen;
+
        // Bypass for non-current, and thus invisible, windows
        if ( win !== this.currentWindow ) {
                return;
        }
 
-       var isFullscreen = win.getSize() === 'full';
+       isFullscreen = win.getSize() === 'full';
 
        this.$element.toggleClass( 'oo-ui-windowManager-fullscreen', isFullscreen );
        this.$element.toggleClass( 'oo-ui-windowManager-floating', !isFullscreen );
@@ -3567,14 +3582,14 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
  * @chainable
  */
 OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
-       on = on === undefined ? !!this.globalEvents : !!on;
-
        var scrollWidth, bodyMargin,
                $body = $( this.getElementDocument().body ),
                // We could have multiple window managers open so only modify
                // the body css at the bottom of the stack
                stackDepth = $body.data( 'windowManagerGlobalEvents' ) || 0 ;
 
+       on = on === undefined ? !!this.globalEvents : !!on;
+
        if ( on ) {
                if ( !this.globalEvents ) {
                        $( this.getElementWindow() ).on( {
@@ -4087,11 +4102,11 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
  * @constructor
  */
 OO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {
+       var i, l, defaultClasses;
        // Parent constructor
        OO.Factory.call( this );
 
-       var i, l,
-               defaultClasses = this.constructor.static.getDefaultClasses();
+       defaultClasses = this.constructor.static.getDefaultClasses();
 
        // Register default toolgroups
        for ( i = 0, l = defaultClasses.length; i < l; i++ ) {
@@ -4160,9 +4175,17 @@ OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
  * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
  */
 OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
-       var classes = this.getElementClasses( element );
+       var $elements = $( [] ),
+               classes = this.getElementClasses( element );
+
+       if ( element.$icon ) {
+               $elements = $elements.add( element.$icon );
+       }
+       if ( element.$indicator ) {
+               $elements = $elements.add( element.$indicator );
+       }
 
-       element.$element
+       $elements
                .removeClass( classes.off.join( ' ' ) )
                .addClass( classes.on.join( ' ' ) );
 };
@@ -4277,7 +4300,8 @@ OO.ui.mixin.TabIndexedElement.prototype.updateTabIndex = function () {
                        // Do not index over disabled elements
                        this.$tabIndexed.attr( {
                                tabindex: this.isDisabled() ? -1 : this.tabIndex,
-                               // ChromeVox and NVDA do not seem to inherit this from parent elements
+                               // Support: ChromeVox and NVDA
+                               // These do not seem to inherit aria-disabled from parent elements
                                'aria-disabled': this.isDisabled().toString()
                        } );
                } else {
@@ -4320,7 +4344,6 @@ OO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {
  * @cfg {jQuery} [$button] The button element created by the class.
  *  If this configuration is omitted, the button element will use a generated `<a>`.
  * @cfg {boolean} [framed=true] Render the button with a frame
- * @cfg {string} [accessKey] Button's access key
  */
 OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Configuration initialization
@@ -4329,7 +4352,6 @@ OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Properties
        this.$button = null;
        this.framed = null;
-       this.accessKey = null;
        this.active = false;
        this.onMouseUpHandler = this.onMouseUp.bind( this );
        this.onMouseDownHandler = this.onMouseDown.bind( this );
@@ -4341,7 +4363,6 @@ OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Initialization
        this.$element.addClass( 'oo-ui-buttonElement' );
        this.toggleFramed( config.framed === undefined || config.framed );
-       this.setAccessKey( config.accessKey );
        this.setButtonElement( config.$button || $( '<a>' ) );
 };
 
@@ -4399,7 +4420,7 @@ OO.ui.mixin.ButtonElement.prototype.setButtonElement = function ( $button ) {
 
        this.$button = $button
                .addClass( 'oo-ui-buttonElement-button' )
-               .attr( { role: 'button', accesskey: this.accessKey } )
+               .attr( { role: 'button' } )
                .on( {
                        mousedown: this.onMouseDownHandler,
                        keydown: this.onKeyDownHandler,
@@ -4532,29 +4553,6 @@ OO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {
        return this;
 };
 
-/**
- * Set the button's access key.
- *
- * @param {string} accessKey Button's access key, use empty string to remove
- * @chainable
- */
-OO.ui.mixin.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
-       accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
-
-       if ( this.accessKey !== accessKey ) {
-               if ( this.$button ) {
-                       if ( accessKey !== null ) {
-                               this.$button.attr( 'accesskey', accessKey );
-                       } else {
-                               this.$button.removeAttr( 'accesskey' );
-                       }
-               }
-               this.accessKey = accessKey;
-       }
-
-       return this;
-};
-
 /**
  * Set the button to its 'active' state.
  *
@@ -4716,7 +4714,7 @@ OO.ui.mixin.GroupElement.prototype.aggregate = function ( events ) {
                                item = this.items[ i ];
                                if ( item.connect && item.disconnect ) {
                                        remove = {};
-                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
                                        item.disconnect( this, remove );
                                }
                        }
@@ -4759,7 +4757,7 @@ OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {
                item = items[ i ];
 
                // Check if item exists then remove it first, effectively "moving" it
-               currentIndex = $.inArray( item, this.items );
+               currentIndex = this.items.indexOf( item );
                if ( currentIndex >= 0 ) {
                        this.removeItems( [ item ] );
                        // Adjust index to compensate for removal
@@ -4808,7 +4806,7 @@ OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {
        // Remove specific items
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[ i ];
-               index = $.inArray( item, this.items );
+               index = this.items.indexOf( item );
                if ( index !== -1 ) {
                        if (
                                item.connect && item.disconnect &&
@@ -4932,13 +4930,13 @@ OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
        // Define drop effect
        dataTransfer.dropEffect = 'none';
        dataTransfer.effectAllowed = 'move';
+       // Support: Firefox
        // We must set up a dataTransfer data property or Firefox seems to
        // ignore the fact the element is draggable.
        try {
                dataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );
        } catch ( err ) {
-               // The above is only for firefox. No need to set a catch clause
-               // if it fails, move on.
+               // The above is only for Firefox. Move on if it fails.
        }
        // Add dragging class
        this.$element.addClass( 'oo-ui-draggableElement-dragging' );
@@ -5046,8 +5044,8 @@ OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( con
                itemDragEnd: 'onItemDragEnd'
        } );
        this.$element.on( {
-               dragover: $.proxy( this.onDragOver, this ),
-               dragleave: $.proxy( this.onDragLeave, this )
+               dragover: this.onDragOver.bind( this ),
+               dragleave: this.onDragLeave.bind( this )
        } );
 
        // Initialize
@@ -5377,6 +5375,8 @@ OO.ui.mixin.IconElement.prototype.setIconElement = function ( $icon ) {
        if ( this.iconTitle !== null ) {
                this.$icon.attr( 'title', this.iconTitle );
        }
+
+       this.updateThemeClasses();
 };
 
 /**
@@ -5546,6 +5546,8 @@ OO.ui.mixin.IndicatorElement.prototype.setIndicatorElement = function ( $indicat
        if ( this.indicatorTitle !== null ) {
                this.$indicator.attr( 'title', this.indicatorTitle );
        }
+
+       this.updateThemeClasses();
 };
 
 /**
@@ -5976,7 +5978,7 @@ OO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {
        var widget = this,
                value = this.getValue();
 
-       if ( this.lookupsDisabled ) {
+       if ( this.lookupsDisabled || this.isReadOnly() ) {
                return;
        }
 
@@ -6142,9 +6144,8 @@ OO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {
        // Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget
        OO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );
 
-       this.setLookupsDisabled( readOnly );
        // During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor
-       if ( readOnly && this.lookupMenu ) {
+       if ( this.isReadOnly() && this.lookupMenu ) {
                this.closeLookupMenu();
        }
 
@@ -6514,12 +6515,21 @@ OO.ui.mixin.TitledElement.prototype.getTitle = function () {
  * {@link OO.ui.mixin.ClippableElement#clip} to make sure it's still
  * clipping correctly.
  *
+ * The dimensions of #$clippableContainer will be compared to the boundaries of the
+ * nearest scrollable container. If #$clippableContainer is too tall and/or too wide,
+ * then #$clippable will be given a fixed reduced height and/or width and will be made
+ * scrollable. By default, #$clippable and #$clippableContainer are the same element,
+ * but you can build a static footer by setting #$clippableContainer to an element that contains
+ * #$clippable and the footer.
+ *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
+ * @cfg {jQuery} [$clippable] Node to clip, assigned to #$clippable, omit to use #$element
+ * @cfg {jQuery} [$clippableContainer] Node to keep visible, assigned to #$clippableContainer,
+ *   omit to use #$clippable
  */
 OO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {
        // Configuration initialization
@@ -6527,18 +6537,22 @@ OO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {
 
        // Properties
        this.$clippable = null;
+       this.$clippableContainer = null;
        this.clipping = false;
        this.clippedHorizontally = false;
        this.clippedVertically = false;
-       this.$clippableContainer = null;
+       this.$clippableScrollableContainer = null;
        this.$clippableScroller = null;
        this.$clippableWindow = null;
        this.idealWidth = null;
        this.idealHeight = null;
-       this.onClippableContainerScrollHandler = this.clip.bind( this );
+       this.onClippableScrollHandler = this.clip.bind( this );
        this.onClippableWindowResizeHandler = this.clip.bind( this );
 
        // Initialization
+       if ( config.$clippableContainer ) {
+               this.setClippableContainer( config.$clippableContainer );
+       }
        this.setClippableElement( config.$clippable || this.$element );
 };
 
@@ -6562,6 +6576,23 @@ OO.ui.mixin.ClippableElement.prototype.setClippableElement = function ( $clippab
        this.clip();
 };
 
+/**
+ * Set clippable container.
+ *
+ * This is the container that will be measured when deciding whether to clip. When clipping,
+ * #$clippable will be resized in order to keep the clippable container fully visible.
+ *
+ * If the clippable container is unset, #$clippable will be used.
+ *
+ * @param {jQuery|null} $clippableContainer Container to keep visible, or null to unset
+ */
+OO.ui.mixin.ClippableElement.prototype.setClippableContainer = function ( $clippableContainer ) {
+       this.$clippableContainer = $clippableContainer;
+       if ( this.$clippable ) {
+               this.clip();
+       }
+};
+
 /**
  * Toggle clipping.
  *
@@ -6576,13 +6607,13 @@ OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
        if ( this.clipping !== clipping ) {
                this.clipping = clipping;
                if ( clipping ) {
-                       this.$clippableContainer = $( this.getClosestScrollableElementContainer() );
+                       this.$clippableScrollableContainer = $( this.getClosestScrollableElementContainer() );
                        // If the clippable container is the root, we have to listen to scroll events and check
                        // jQuery.scrollTop on the window because of browser inconsistencies
-                       this.$clippableScroller = this.$clippableContainer.is( 'html, body' ) ?
-                               $( OO.ui.Element.static.getWindow( this.$clippableContainer ) ) :
-                               this.$clippableContainer;
-                       this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScroller = this.$clippableScrollableContainer.is( 'html, body' ) ?
+                               $( OO.ui.Element.static.getWindow( this.$clippableScrollableContainer ) ) :
+                               this.$clippableScrollableContainer;
+                       this.$clippableScroller.on( 'scroll', this.onClippableScrollHandler );
                        this.$clippableWindow = $( this.getElementWindow() )
                                .on( 'resize', this.onClippableWindowResizeHandler );
                        // Initial clip after visible
@@ -6591,8 +6622,8 @@ OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
                        this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
                        OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
 
-                       this.$clippableContainer = null;
-                       this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScrollableContainer = null;
+                       this.$clippableScroller.off( 'scroll', this.onClippableScrollHandler );
                        this.$clippableScroller = null;
                        this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
                        this.$clippableWindow = null;
@@ -6665,40 +6696,51 @@ OO.ui.mixin.ClippableElement.prototype.setIdealSize = function ( width, height )
  * @chainable
  */
 OO.ui.mixin.ClippableElement.prototype.clip = function () {
+       var $container, extraHeight, extraWidth, ccOffset,
+               $scrollableContainer, scOffset, scHeight, scWidth,
+               ccWidth, scrollerIsWindow, scrollTop, scrollLeft,
+               desiredWidth, desiredHeight, allotedWidth, allotedHeight,
+               naturalWidth, naturalHeight, clipWidth, clipHeight,
+               buffer = 7; // Chosen by fair dice roll
+
        if ( !this.clipping ) {
-               // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+               // this.$clippableScrollableContainer and this.$clippableWindow are null, so the below will fail
                return this;
        }
 
-       var buffer = 7, // Chosen by fair dice roll
-               cOffset = this.$clippable.offset(),
-               $container = this.$clippableContainer.is( 'html, body' ) ?
-                       this.$clippableWindow : this.$clippableContainer,
-               ccOffset = $container.offset() || { top: 0, left: 0 },
-               ccHeight = $container.innerHeight() - buffer,
-               ccWidth = $container.innerWidth() - buffer,
-               cWidth = this.$clippable.outerWidth() + buffer,
-               scrollerIsWindow = this.$clippableScroller[0] === this.$clippableWindow[0],
-               scrollTop = scrollerIsWindow ? this.$clippableScroller.scrollTop() : 0,
-               scrollLeft = scrollerIsWindow ? this.$clippableScroller.scrollLeft() : 0,
-               desiredWidth = cOffset.left < 0 ?
-                       cWidth + cOffset.left :
-                       ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
-               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
-               naturalWidth = this.$clippable.prop( 'scrollWidth' ),
-               naturalHeight = this.$clippable.prop( 'scrollHeight' ),
-               clipWidth = desiredWidth < naturalWidth,
-               clipHeight = desiredHeight < naturalHeight;
+       $container = this.$clippableContainer || this.$clippable;
+       extraHeight = $container.outerHeight() - this.$clippable.outerHeight();
+       extraWidth = $container.outerWidth() - this.$clippable.outerWidth();
+       ccOffset = $container.offset();
+       $scrollableContainer = this.$clippableScrollableContainer.is( 'html, body' ) ?
+               this.$clippableWindow : this.$clippableScrollableContainer;
+       scOffset = $scrollableContainer.offset() || { top: 0, left: 0 };
+       scHeight = $scrollableContainer.innerHeight() - buffer;
+       scWidth = $scrollableContainer.innerWidth() - buffer;
+       ccWidth = $container.outerWidth() + buffer;
+       scrollerIsWindow = this.$clippableScroller[ 0 ] === this.$clippableWindow[ 0 ];
+       scrollTop = scrollerIsWindow ? this.$clippableScroller.scrollTop() : 0;
+       scrollLeft = scrollerIsWindow ? this.$clippableScroller.scrollLeft() : 0;
+       desiredWidth = ccOffset.left < 0 ?
+               ccWidth + ccOffset.left :
+               ( scOffset.left + scrollLeft + scWidth ) - ccOffset.left;
+       desiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top;
+       allotedWidth = desiredWidth - extraWidth;
+       allotedHeight = desiredHeight - extraHeight;
+       naturalWidth = this.$clippable.prop( 'scrollWidth' );
+       naturalHeight = this.$clippable.prop( 'scrollHeight' );
+       clipWidth = allotedWidth < naturalWidth;
+       clipHeight = allotedHeight < naturalHeight;
 
        if ( clipWidth ) {
-               this.$clippable.css( { overflowX: 'scroll', width: desiredWidth } );
+               this.$clippable.css( { overflowX: 'scroll', width: Math.max( 0, allotedWidth ) } );
        } else {
-               this.$clippable.css( { width: this.idealWidth || '', overflowX: '' } );
+               this.$clippable.css( { width: this.idealWidth ? this.idealWidth - extraWidth : '', overflowX: '' } );
        }
        if ( clipHeight ) {
-               this.$clippable.css( { overflowY: 'scroll', height: desiredHeight } );
+               this.$clippable.css( { overflowY: 'scroll', height: Math.max( 0, allotedHeight ) } );
        } else {
-               this.$clippable.css( { height: this.idealHeight || '', overflowY: '' } );
+               this.$clippable.css( { height: this.idealHeight ? this.idealHeight - extraHeight : '', overflowY: '' } );
        }
 
        // If we stopped clipping in at least one of the dimensions
@@ -6712,6 +6754,113 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
        return this;
 };
 
+/**
+ * AccessKeyedElement is mixed into other classes to provide an `accesskey` attribute.
+ * Accesskeys allow an user to go to a specific element by using
+ * a shortcut combination of a browser specific keys + the key
+ * set to the field.
+ *
+ *     @example
+ *     // AccessKeyedElement provides an 'accesskey' attribute to the
+ *     // ButtonWidget class
+ *     var button = new OO.ui.ButtonWidget( {
+ *         label: 'Button with Accesskey',
+ *         accessKey: 'k'
+ *     } );
+ *     $( 'body' ).append( button.$element );
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$accessKeyed] The element to which the `accesskey` attribute is applied.
+ *  If this config is omitted, the accesskey functionality is applied to $element, the
+ *  element created by the class.
+ * @cfg {string|Function} [accessKey] The key or a function that returns the key. If
+ *  this config is omitted, no accesskey will be added.
+ */
+OO.ui.mixin.AccessKeyedElement = function OoUiMixinAccessKeyedElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$accessKeyed = null;
+       this.accessKey = null;
+
+       // Initialization
+       this.setAccessKey( config.accessKey || null );
+       this.setAccessKeyedElement( config.$accessKeyed || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.mixin.AccessKeyedElement );
+
+/* Static Properties */
+
+/**
+ * The access key, a function that returns a key, or `null` for no accesskey.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.mixin.AccessKeyedElement.static.accessKey = null;
+
+/* Methods */
+
+/**
+ * Set the accesskeyed element.
+ *
+ * This method is used to retarget a AccessKeyedElement mixin so that its functionality applies to the specified element.
+ * If an element is already set, the mixin's effect on that element is removed before the new element is set up.
+ *
+ * @param {jQuery} $accessKeyed Element that should use the 'accesskeyes' functionality
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement = function ( $accessKeyed ) {
+       if ( this.$accessKeyed ) {
+               this.$accessKeyed.removeAttr( 'accesskey' );
+       }
+
+       this.$accessKeyed = $accessKeyed;
+       if ( this.accessKey ) {
+               this.$accessKeyed.attr( 'accesskey', this.accessKey );
+       }
+};
+
+/**
+ * Set accesskey.
+ *
+ * @param {string|Function|null} accesskey Key, a function that returns a key, or `null` for no accesskey
+ * @chainable
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.setAccessKey = function ( accessKey ) {
+       accessKey = typeof accessKey === 'string' ? OO.ui.resolveMsg( accessKey ) : null;
+
+       if ( this.accessKey !== accessKey ) {
+               if ( this.$accessKeyed ) {
+                       if ( accessKey !== null ) {
+                               this.$accessKeyed.attr( 'accesskey', accessKey );
+                       } else {
+                               this.$accessKeyed.removeAttr( 'accesskey' );
+                       }
+               }
+               this.accessKey = accessKey;
+       }
+
+       return this;
+};
+
+/**
+ * Get accesskey.
+ *
+ * @return {string} accessKey string
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.getAccessKey = function () {
+       return this.accessKey;
+};
+
 /**
  * Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute {@link OO.ui.Toolbar toolbars}.
  * Each tool is configured with a static name, title, and icon and is customized with the command to carry
@@ -8105,7 +8254,7 @@ OO.ui.MessageDialog.prototype.getReadyProcess = function ( data ) {
                                return action.getFlags().indexOf( 'primary' ) > -1;
                        } );
                        if ( actions.length > 0 ) {
-                               actions[0].$button.focus();
+                               actions[ 0 ].$button.focus();
                        }
                }, this );
 };
@@ -8545,14 +8694,14 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        }
        this.$errorItems = $( items );
        if ( recoverable ) {
-               abilities[this.currentAction] = true;
+               abilities[ this.currentAction ] = true;
                // Copy the flags from the first matching action
                actions = this.actions.get( { actions: this.currentAction } );
                if ( actions.length ) {
-                       this.retryButton.clearFlags().setFlags( actions[0].getFlags() );
+                       this.retryButton.clearFlags().setFlags( actions[ 0 ].getFlags() );
                }
        } else {
-               abilities[this.currentAction] = false;
+               abilities[ this.currentAction ] = false;
                this.actions.setAbilities( abilities );
        }
        if ( warning ) {
@@ -8631,6 +8780,8 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
  * @throws {Error} An error is thrown if no widget is specified
  */
 OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+       var hasInputWidget, div, i;
+
        // Allow passing positional parameters inside the config object
        if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
                config = fieldWidget;
@@ -8642,8 +8793,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
                throw new Error( 'Widget not found' );
        }
 
-       var hasInputWidget = fieldWidget.constructor.static.supportsSimpleLabel,
-               div, i;
+       hasInputWidget = fieldWidget.constructor.static.supportsSimpleLabel;
 
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
@@ -8705,10 +8855,10 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
                .append( this.fieldWidget.$element );
 
        for ( i = 0; i < this.notices.length; i++ ) {
-               this.$messages.append( this.makeMessage( 'notice', this.notices[i] ) );
+               this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
        }
        for ( i = 0; i < this.errors.length; i++ ) {
-               this.$messages.append( this.makeMessage( 'error', this.errors[i] ) );
+               this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
        }
 
        this.setAlignment( config.align );
@@ -9484,7 +9634,7 @@ OO.ui.BookletLayout.prototype.focusFirstFocusable = function () {
                }
                // Find all potentially focusable elements in the item
                // and check if they are focusable
-               items[i].$element
+               items[ i ].$element
                        .find( 'input, select, textarea, button, object' )
                        /* jshint loopfunc:true */
                        .each( checkAndFocus );
@@ -9555,7 +9705,7 @@ OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
 OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
        var next, prev, level,
                pages = this.stackLayout.getItems(),
-               index = $.inArray( page, pages );
+               index = pages.indexOf( page );
 
        if ( index !== -1 ) {
                next = pages[ index + 1 ];
@@ -9655,7 +9805,7 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
 
                if ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {
                        // Correct the insertion index
-                       currentIndex = $.inArray( this.pages[ name ], stackLayoutPages );
+                       currentIndex = stackLayoutPages.indexOf( this.pages[ name ] );
                        if ( currentIndex !== -1 && currentIndex + 1 < index ) {
                                index--;
                        }
@@ -10004,7 +10154,7 @@ OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
                }
                // Find all potentially focusable elements in the item
                // and check if they are focusable
-               items[i].$element
+               items[ i ].$element
                        .find( 'input, select, textarea, button, object' )
                        .each( checkAndFocus );
        }
@@ -10031,7 +10181,7 @@ OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
 OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
        var next, prev, level,
                cards = this.stackLayout.getItems(),
-               index = $.inArray( card, cards );
+               index = cards.indexOf( card );
 
        if ( index !== -1 ) {
                next = cards[ index + 1 ];
@@ -10116,7 +10266,7 @@ OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
 
                if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
                        // Correct the insertion index
-                       currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+                       currentIndex = stackLayoutCards.indexOf( this.cards[ name ] );
                        if ( currentIndex !== -1 && currentIndex + 1 < index ) {
                                index--;
                        }
@@ -10725,7 +10875,7 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
        // Mixin method
        OO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );
 
-       if ( $.inArray( this.currentItem, items ) !== -1 ) {
+       if ( items.indexOf( this.currentItem ) !== -1 ) {
                if ( this.items.length ) {
                        this.setItem( this.items[ 0 ] );
                } else {
@@ -10765,7 +10915,7 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
        if ( item !== this.currentItem ) {
                this.updateHiddenState( this.items, item );
 
-               if ( $.inArray( item, this.items ) !== -1 ) {
+               if ( this.items.indexOf( item ) !== -1 ) {
                        this.currentItem = item;
                        this.emit( 'set', item );
                } else {
@@ -11335,8 +11485,9 @@ OO.ui.ListToolGroup.prototype.populate = function () {
 };
 
 OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+       var ExpandCollapseTool;
        if ( this.expandCollapseTool === undefined ) {
-               var ExpandCollapseTool = function () {
+               ExpandCollapseTool = function () {
                        ExpandCollapseTool.parent.apply( this, arguments );
                };
 
@@ -11957,8 +12108,8 @@ OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
        var ability;
 
        for ( ability in this.abilities ) {
-               if ( abilities[ability] !== undefined ) {
-                       this.abilities[ability] = !!abilities[ability];
+               if ( abilities[ ability ] !== undefined ) {
+                       this.abilities[ ability ] = !!abilities[ ability ];
                }
        }
 
@@ -12153,6 +12304,7 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.mixin.GroupElement );
  * @mixins OO.ui.mixin.TitledElement
  * @mixins OO.ui.mixin.FlaggedElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.AccessKeyedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -12175,6 +12327,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
        OO.ui.mixin.FlaggedElement.call( this, config );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$button } ) );
 
        // Properties
        this.href = null;
@@ -12204,6 +12357,7 @@ OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.LabelElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TitledElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.FlaggedElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.AccessKeyedElement );
 
 /* Methods */
 
@@ -12908,8 +13062,8 @@ OO.ui.CapsuleMultiSelectWidget.prototype.setItemsFromData = function ( datas ) {
 
                item = null;
                for ( j = 0; j < items.length; j++ ) {
-                       if ( items[j].data === data && items[j].label === label ) {
-                               item = items[j];
+                       if ( items[ j ].data === data && items[ j ].label === label ) {
+                               item = items[ j ];
                                items.splice( j, 1 );
                                break;
                        }
@@ -12996,7 +13150,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.addItems = function ( items ) {
        } else {
                same = true;
                for ( i = 0, l = oldItems.length; same && i < l; i++ ) {
-                       same = same && this.items[i] === oldItems[i];
+                       same = same && this.items[ i ] === oldItems[ i ];
                }
        }
        if ( !same ) {
@@ -13020,7 +13174,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.removeItems = function ( items ) {
        } else {
                same = true;
                for ( i = 0, l = oldItems.length; same && i < l; i++ ) {
-                       same = same && this.items[i] === oldItems[i];
+                       same = same && this.items[ i ] === oldItems[ i ];
                }
        }
        if ( !same ) {
@@ -13100,7 +13254,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.onPopupFocusOut = function () {
        setTimeout( function () {
                if (
                        widget.isVisible() &&
-                       !OO.ui.contains( widget.$element[0], document.activeElement, true ) &&
+                       !OO.ui.contains( widget.$element[ 0 ], document.activeElement, true ) &&
                        ( !widget.$autoCloseIgnore || !widget.$autoCloseIgnore.has( document.activeElement ).length )
                ) {
                        widget.toggle( false );
@@ -13247,7 +13401,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.setDisabled = function ( disabled ) {
 
        if ( this.items ) {
                for ( i = 0, len = this.items.length; i < len; i++ ) {
-                       this.items[i].updateDisabled();
+                       this.items[ i ].updateDisabled();
                }
        }
 
@@ -13544,7 +13698,6 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @mixins OO.ui.mixin.IndicatorElement
  * @mixins OO.ui.mixin.PendingElement
  * @mixins OO.ui.mixin.LabelElement
- * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13552,32 +13705,40 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @cfg {string} [placeholder] Text to display when no file is selected.
  * @cfg {string} [notsupported] Text to display when file support is missing in the browser.
  * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.
+ * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.
+ * @cfg {boolean} [dragDropUI=false] Deprecated alias for showDropTarget
  */
 OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        var dragHandler;
 
+       // TODO: Remove in next release
+       if ( config && config.dragDropUI ) {
+               config.showDropTarget = true;
+       }
+
        // Configuration initialization
        config = $.extend( {
                accept: null,
                placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
                notsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),
-               droppable: true
+               droppable: true,
+               showDropTarget: false
        }, config );
 
        // Parent constructor
        OO.ui.SelectFileWidget.parent.call( this, config );
 
-       // Properties (must be set before TabIndexedElement constructor call)
-       this.$handle = $( '<span>' );
-
        // Mixin constructors
        OO.ui.mixin.IconElement.call( this, config );
        OO.ui.mixin.IndicatorElement.call( this, config );
-       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
+       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );
        OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { autoFitLabel: true } ) );
-       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Properties
+       this.$info = $( '<span>' );
+
+       // Properties
+       this.showDropTarget = config.showDropTarget;
        this.isSupported = this.constructor.static.isSupported();
        this.currentFile = null;
        if ( Array.isArray( config.accept ) ) {
@@ -13589,6 +13750,12 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.notsupported = config.notsupported;
        this.onFileSelectedHandler = this.onFileSelected.bind( this );
 
+       this.selectButton = new OO.ui.ButtonWidget( {
+               classes: [ 'oo-ui-selectFileWidget-selectButton' ],
+               label: 'Select a file',
+               disabled: this.disabled || !this.isSupported
+       } );
+
        this.clearButton = new OO.ui.ButtonWidget( {
                classes: [ 'oo-ui-selectFileWidget-clearButton' ],
                framed: false,
@@ -13597,7 +13764,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
 
        // Events
-       this.$handle.on( {
+       this.selectButton.$button.on( {
                keypress: this.onKeyPress.bind( this )
        } );
        this.clearButton.connect( this, {
@@ -13605,7 +13772,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
        if ( config.droppable ) {
                dragHandler = this.onDragEnterOrOver.bind( this );
-               this.$handle.on( {
+               this.$element.on( {
                        dragenter: dragHandler,
                        dragover: dragHandler,
                        dragleave: this.onDragLeave.bind( this ),
@@ -13617,14 +13784,20 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.addInput();
        this.updateUI();
        this.$label.addClass( 'oo-ui-selectFileWidget-label' );
-       this.$handle
-               .addClass( 'oo-ui-selectFileWidget-handle' )
+       this.$info
+               .addClass( 'oo-ui-selectFileWidget-info' )
                .append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );
        this.$element
                .addClass( 'oo-ui-selectFileWidget' )
-               .append( this.$handle );
-       if ( config.droppable ) {
-               this.$element.addClass( 'oo-ui-selectFileWidget-droppable' );
+               .append( this.$info, this.selectButton.$element );
+       if ( config.droppable && config.showDropTarget ) {
+               this.$dropTarget = $( '<div>' )
+                       .addClass( 'oo-ui-selectFileWidget-dropTarget' )
+                       .text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )
+                       .on( {
+                               click: this.onDropTargetClick.bind( this )
+                       } );
+               this.$element.prepend( this.$dropTarget );
        }
 };
 
@@ -13635,7 +13808,6 @@ OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );
-OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
 
@@ -13649,7 +13821,7 @@ OO.ui.SelectFileWidget.static.isSupported = function () {
        var $input;
        if ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {
                $input = $( '<input type="file">' );
-               OO.ui.SelectFileWidget.static.isSupportedCache = $input[0].files !== undefined;
+               OO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;
        }
        return OO.ui.SelectFileWidget.static.isSupportedCache;
 };
@@ -13700,14 +13872,17 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
                this.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );
                this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
                this.setLabel( this.notsupported );
-       } else if ( this.currentFile ) {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.currentFile.name +
-                       ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
-               );
        } else {
-               this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.placeholder );
+               this.$element.addClass( 'oo-ui-selectFileWidget-supported' );
+               if ( this.currentFile ) {
+                       this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.currentFile.name +
+                               ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
+                       );
+               } else {
+                       this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.placeholder );
+               }
        }
 
        if ( this.$input ) {
@@ -13716,7 +13891,7 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
 };
 
 /**
- * Add the input to the handle
+ * Add the input to the widget
  *
  * @private
  */
@@ -13739,31 +13914,30 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
        if ( this.accept ) {
                this.$input.attr( 'accept', this.accept.join( ', ' ) );
        }
-       this.$handle.append( this.$input );
+       this.selectButton.$button.append( this.$input );
 };
 
 /**
  * Determine if we should accept this file
  *
  * @private
- * @param {File} file
+ * @param {string} File MIME type
  * @return {boolean}
  */
-OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
-       var i, mime, mimeTest;
+OO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {
+       var i, mimeTest;
 
-       if ( !this.accept || file.type === '' ) {
+       if ( !this.accept || !mimeType ) {
                return true;
        }
 
-       mime = file.type;
        for ( i = 0; i < this.accept.length; i++ ) {
-               mimeTest = this.accept[i];
-               if ( mimeTest === mime ) {
+               mimeTest = this.accept[ i ];
+               if ( mimeTest === mimeType ) {
                        return true;
                } else if ( mimeTest.substr( -2 ) === '/*' ) {
                        mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
-                       if ( mime.substr( 0, mimeTest.length ) === mimeTest ) {
+                       if ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {
                                return true;
                        }
                }
@@ -13779,13 +13953,10 @@ OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
  * @param {jQuery.Event} e
  */
 OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
-       var file = null;
+       var file = OO.getProp( e.target, 'files', 0 ) || null;
 
-       if ( e.target.files && e.target.files[0] ) {
-               file = e.target.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
 
        this.setValue( file );
@@ -13817,6 +13988,19 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
        }
 };
 
+/**
+ * Handle drop target click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {
+       if ( this.isSupported && !this.isDisabled() && this.$input ) {
+               this.$input.click();
+               return false;
+       }
+};
+
 /**
  * Handle drag enter and over events
  *
@@ -13824,7 +14008,8 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
  * @param {jQuery.Event} e Drag event
  */
 OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
-       var file = null,
+       var itemOrFile,
+               droppableFile = false,
                dt = e.originalEvent.dataTransfer;
 
        e.preventDefault();
@@ -13836,21 +14021,23 @@ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
                return false;
        }
 
-       if ( dt && dt.files && dt.files[0] ) {
-               file = dt.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
+       // DataTransferItem and File both have a type property, but in Chrome files
+       // have no information at this point.
+       itemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );
+       if ( itemOrFile ) {
+               if ( this.isAllowedType( itemOrFile.type ) ) {
+                       droppableFile = true;
                }
-       } else if ( dt && dt.types && $.inArray( 'Files', dt.types ) ) {
-               // We know we have files so set 'file' to something truthy, we just
-               // can't know any details about them.
-               // * https://bugzilla.mozilla.org/show_bug.cgi?id=640534
-               file = 'Files exist, but details are unknown';
+       // dt.types is Array-like, but not an Array
+       } else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {
+               // File information is not available at this point for security so just assume
+               // it is acceptable for now.
+               // https://bugzilla.mozilla.org/show_bug.cgi?id=640534
+               droppableFile = true;
        }
-       if ( file ) {
-               this.$element.addClass( 'oo-ui-selectFileWidget-canDrop' );
-       } else {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+
+       this.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );
+       if ( !droppableFile ) {
                dt.dropEffect = 'none';
        }
 
@@ -13885,11 +14072,9 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
                return false;
        }
 
-       if ( dt && dt.files && dt.files[0] ) {
-               file = dt.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       file = OO.getProp( dt, 'files', 0 );
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
        if ( file ) {
                this.setValue( file );
@@ -13901,10 +14086,13 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
 /**
  * @inheritdoc
  */
-OO.ui.SelectFileWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, state );
+OO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {
+       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );
+       if ( this.selectButton ) {
+               this.selectButton.setDisabled( disabled );
+       }
        if ( this.clearButton ) {
-               this.clearButton.setDisabled( state );
+               this.clearButton.setDisabled( disabled );
        }
        return this;
 };
@@ -14030,11 +14218,14 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
  * @extends OO.ui.Widget
  * @mixins OO.ui.mixin.FlaggedElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.AccessKeyedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
  * @cfg {string} [value=''] The value of the input.
+ * @cfg {string} [accessKey=''] The access key of the input.
  * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
  *  before it is accepted.
  */
@@ -14053,6 +14244,8 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        // Mixin constructors
        OO.ui.mixin.FlaggedElement.call( this, config );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+       OO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$input } ) );
 
        // Events
        this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
@@ -14066,6 +14259,7 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
                .addClass( 'oo-ui-inputWidget' )
                .append( this.$input );
        this.setValue( config.value );
+       this.setAccessKey( config.accessKey );
 };
 
 /* Setup */
@@ -14073,6 +14267,8 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
 OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.FlaggedElement );
 OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.AccessKeyedElement );
 
 /* Static Properties */
 
@@ -14166,6 +14362,30 @@ OO.ui.InputWidget.prototype.setValue = function ( value ) {
        return this;
 };
 
+/**
+ * Set the input's access key.
+ * FIXME: This is the same code as in OO.ui.mixin.ButtonElement, maybe find a better place for it?
+ *
+ * @param {string} accessKey Input's access key, use empty string to remove
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setAccessKey = function ( accessKey ) {
+       accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
+
+       if ( this.accessKey !== accessKey ) {
+               if ( this.$input ) {
+                       if ( accessKey !== null ) {
+                               this.$input.attr( 'accesskey', accessKey );
+                       } else {
+                               this.$input.removeAttr( 'accesskey' );
+                       }
+               }
+               this.accessKey = accessKey;
+       }
+
+       return this;
+};
+
 /**
  * Clean up incoming value.
  *
@@ -14558,13 +14778,14 @@ OO.ui.CheckboxInputWidget.prototype.restorePreInfuseState = function ( state ) {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ * @cfg {Object} [dropdown] Configuration options for {@link OO.ui.DropdownWidget DropdownWidget}
  */
 OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
        // Configuration initialization
        config = config || {};
 
        // Properties (must be done before parent constructor which calls #setDisabled)
-       this.dropdownWidget = new OO.ui.DropdownWidget();
+       this.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown );
 
        // Parent constructor
        OO.ui.DropdownInputWidget.parent.call( this, config );
@@ -15254,7 +15475,7 @@ OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
                }
 
                // Find topmost node in the tree
-               topmostNode = this.$element[0];
+               topmostNode = this.$element[ 0 ];
                while ( topmostNode.parentNode ) {
                        topmostNode = topmostNode.parentNode;
                }
@@ -15288,7 +15509,7 @@ OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
                };
 
                // Create a fake parent and observe it
-               fakeParentNode = $( '<div>' ).append( topmostNode )[0];
+               fakeParentNode = $( '<div>' ).append( topmostNode )[ 0 ];
                mutationObserver.observe( fakeParentNode, { childList: true } );
        } else {
                // Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for
@@ -15402,6 +15623,23 @@ OO.ui.TextInputWidget.prototype.select = function () {
        return this;
 };
 
+/**
+ * Focus the input and move the cursor to the end.
+ */
+OO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {
+       var textRange,
+               element = this.$input[ 0 ];
+       this.focus();
+       if ( element.selectionStart !== undefined ) {
+               element.selectionStart = element.selectionEnd = element.value.length;
+       } else if ( element.createTextRange ) {
+               // IE 8 and below
+               textRange = element.createTextRange();
+               textRange.collapse( false );
+               textRange.select();
+       }
+};
+
 /**
  * Set the validation pattern.
  *
@@ -15457,8 +15695,10 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
  * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
  */
 OO.ui.TextInputWidget.prototype.isValid = function () {
+       var result;
+
        if ( this.validate instanceof Function ) {
-               var result = this.validate( this.getValue() );
+               result = this.validate( this.getValue() );
                if ( $.isFunction( result.promise ) ) {
                        return result.promise();
                } else {
@@ -15574,6 +15814,7 @@ OO.ui.TextInputWidget.prototype.updateSearchIndicator = function () {
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.positionLabel = function () {
+       var after, rtl, property;
        // Clear old values
        this.$input
                // Clear old values if present
@@ -15589,9 +15830,9 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
                return;
        }
 
-       var after = this.labelPosition === 'after',
-               rtl = this.$element.css( 'direction' ) === 'rtl',
-               property = after === rtl ? 'padding-left' : 'padding-right';
+       after = this.labelPosition === 'after';
+       rtl = this.$element.css( 'direction' ) === 'rtl';
+       property = after === rtl ? 'padding-left' : 'padding-right';
 
        this.$input.css( property, this.$label.outerWidth( true ) );
 
@@ -16194,6 +16435,7 @@ OO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );
  * @extends OO.ui.DecoratedOptionWidget
  * @mixins OO.ui.mixin.ButtonElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.TitledElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -16207,6 +16449,7 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
 
        // Mixin constructors
        OO.ui.mixin.ButtonElement.call( this, config );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, {
                $tabIndexed: this.$button,
                tabIndex: -1
@@ -16222,6 +16465,7 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
 
 OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
@@ -16626,6 +16870,7 @@ OO.ui.TabOptionWidget.static.highlightable = false;
  *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
  * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.
  * @cfg {jQuery} [$content] Content to append to the popup's body
+ * @cfg {jQuery} [$footer] Content to append to the popup's footer
  * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.
  * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.
  *  This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]
@@ -16644,14 +16889,18 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
 
        // Properties (must be set before ClippableElement constructor call)
        this.$body = $( '<div>' );
+       this.$popup = $( '<div>' );
 
        // Mixin constructors
        OO.ui.mixin.LabelElement.call( this, config );
-       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
+       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, {
+               $clippable: this.$body,
+               $clippableContainer: this.$popup
+       } ) );
 
        // Properties
-       this.$popup = $( '<div>' );
        this.$head = $( '<div>' );
+       this.$footer = $( '<div>' );
        this.$anchor = $( '<div>' );
        // If undefined, will be computed lazily in updateDimensions()
        this.$container = config.$container;
@@ -16677,12 +16926,16 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.$head
                .addClass( 'oo-ui-popupWidget-head' )
                .append( this.$label, this.closeButton.$element );
+       this.$footer.addClass( 'oo-ui-popupWidget-footer' );
        if ( !config.head ) {
                this.$head.addClass( 'oo-ui-element-hidden' );
        }
+       if ( !config.$footer ) {
+               this.$footer.addClass( 'oo-ui-element-hidden' );
+       }
        this.$popup
                .addClass( 'oo-ui-popupWidget-popup' )
-               .append( this.$head, this.$body );
+               .append( this.$head, this.$body, this.$footer );
        this.$element
                .addClass( 'oo-ui-popupWidget' )
                .append( this.$popup, this.$anchor );
@@ -16690,6 +16943,9 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        if ( config.$content instanceof jQuery ) {
                this.$body.append( config.$content );
        }
+       if ( config.$footer instanceof jQuery ) {
+               this.$footer.append( config.$footer );
+       }
        if ( config.padded ) {
                this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
        }
@@ -16821,9 +17077,10 @@ OO.ui.PopupWidget.prototype.hasAnchor = function () {
  * @inheritdoc
  */
 OO.ui.PopupWidget.prototype.toggle = function ( show ) {
+       var change;
        show = show === undefined ? !this.isVisible() : !!show;
 
-       var change = show !== this.isVisible();
+       change = show !== this.isVisible();
 
        // Parent method
        OO.ui.PopupWidget.parent.prototype.toggle.call( this, show );
@@ -17778,7 +18035,7 @@ OO.ui.SelectWidget.prototype.getItemFromLabel = function ( label, prefix ) {
                filter = this.getItemMatcher( label, true );
 
        for ( i = 0; i < len; i++ ) {
-               item = this.items[i];
+               item = this.items[ i ];
                if ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {
                        return item;
                }
@@ -17788,7 +18045,7 @@ OO.ui.SelectWidget.prototype.getItemFromLabel = function ( label, prefix ) {
                found = null;
                filter = this.getItemMatcher( label, false );
                for ( i = 0; i < len; i++ ) {
-                       item = this.items[i];
+                       item = this.items[ i ];
                        if ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {
                                if ( found ) {
                                        return null;
@@ -17935,7 +18192,7 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
        }
 
        if ( item instanceof OO.ui.OptionWidget ) {
-               currentIndex = $.inArray( item, this.items );
+               currentIndex = this.items.indexOf( item );
                nextIndex = ( currentIndex + increase + len ) % len;
        } else {
                // If no item is selected and moving forward, start at the beginning.
@@ -18305,7 +18562,7 @@ OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
                filter = showAll ? null : this.getItemMatcher( this.$input.val() );
 
        for ( i = 0; i < len; i++ ) {
-               item = this.items[i];
+               item = this.items[ i ];
                if ( item instanceof OO.ui.OptionWidget ) {
                        item.toggle( showAll || filter( item ) );
                }
@@ -18440,10 +18697,10 @@ OO.ui.MenuSelectWidget.prototype.clearItems = function () {
  * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
-       visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
+       var i, len, change;
 
-       var i, len,
-               change = visible !== this.isVisible();
+       visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
+       change = visible !== this.isVisible();
 
        // Parent method
        OO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );
@@ -18543,9 +18800,10 @@ OO.ui.FloatingMenuSelectWidget.prototype.onWindowResize = function () {
  * @inheritdoc
  */
 OO.ui.FloatingMenuSelectWidget.prototype.toggle = function ( visible ) {
+       var change;
        visible = visible === undefined ? !this.isVisible() : !!visible;
 
-       var change = visible !== this.isVisible();
+       change = visible !== this.isVisible();
 
        if ( change && visible ) {
                // Make sure the width is set before the parent method runs.
index 8fdc505..f7b3862 100644 (file)
@@ -5,6 +5,10 @@
                "alignCentre": { "file": "images/icons/align-center.svg" },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
+               "calendar": { "file": {
+                       "ltr": "images/icons/calendar-ltr.svg",
+                       "rtl": "images/icons/calendar-rtl.svg"
+               } },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
index 2c5f858..92791d6 100644 (file)
@@ -2,12 +2,12 @@
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
        "images": {
-               "circle": { "file": "images/icons/circle.svg" },
                "add": { "file": "images/icons/add.svg" },
                "advanced": { "file": "images/icons/advanced.svg" },
-               "cancel": { "file": "images/icons/cancel.svg" },
                "alert": { "file": "images/icons/alert.svg" },
+               "cancel": { "file": "images/icons/cancel.svg" },
                "check": { "file": "images/icons/check.svg" },
+               "circle": { "file": "images/icons/circle.svg" },
                "close": { "file": "images/icons/close.svg" },
                "code": { "file": "images/icons/code.svg" },
                "collapse": { "file": "images/icons/collapse.svg" },
index 9769e03..3709f21 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 4922543..8d96876 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.803-1.28-1.51-2.087-2.084l-1.927 1.558c-.488-.28-1.015-.5-1.57-.648l-.26-2.463C12.996 3.053 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685c-.804.576-1.51 1.28-2.085 2.086l1.558 1.927c-.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.92c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.076.97.13 1.475.13s.994-.054 1.476-.13l.26-2.466c.553-.15 1.08-.367 1.57-.648l1.92 1.558c.806-.576 1.51-1.28 2.087-2.087l-1.558-1.925c.28-.488.5-1.015.647-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
+        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.802-1.28-1.51-2.087-2.083L15.3 6.245c-.488-.28-1.015-.5-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.685c-.804.576-1.51 1.28-2.085 2.086L6.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.92c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.075.97.13 1.475.13s.994-.055 1.476-.13l.26-2.467c.552-.15 1.08-.367 1.57-.648l1.92 1.558c.805-.576 1.51-1.28 2.086-2.087L17.758 15.3c.28-.487.5-1.014.647-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
     </g>
 </svg>
index 918c5b6..1c2abb7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.884.046-6.52 4.244-6.52 4.244s2.752-2.64 6.924-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.475 2.32 6.782-.01z"/>
+        <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.883.046-6.52 4.244-6.52 4.244s2.753-2.64 6.925-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.475 2.32 6.782-.01z"/>
     </g>
 </svg>
index ad07634..e9dce68 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 2f0edb7..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index 0ade40c..46d579b 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 ba7ffe1..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.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-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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"/>
+        <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-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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 0a16f8c..5e16e38 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 0dc8b52..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index d87d0fc..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <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-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index 3c0a879..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.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"/>
+        <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.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.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 e809453..cc4be63 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 277f17e..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-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.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png
new file mode 100644 (file)
index 0000000..8b3ed72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg
new file mode 100644 (file)
index 0000000..121180e
--- /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="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 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>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png
new file mode 100644 (file)
index 0000000..8ec5023
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg
new file mode 100644 (file)
index 0000000..9b736bf
--- /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="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 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 1b0a659..f36e52c 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 8de2583..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.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.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.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.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.665.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 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 4eedfbc..86dc8b3 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 f05a965..d058d65 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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="close">
-        <path id="x" d="M18.717 6.697l-1.414-1.414L12 10.586 6.697 5.283 5.283 6.697 10.586 12l-5.303 5.303 1.414 1.414L12 13.414l5.303 5.303 1.414-1.414L13.414 12z"/>
+        <path id="cross" 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"/>
     </g>
 </svg>
index ee58c9a..6e678e2 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 fe5309d..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?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-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <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-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-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 10927e1..4b59b2a 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 e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <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 7a3454e..2978654 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 9fdc8ca..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <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 5c66688..9f418b8 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 bbfdaa0..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <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.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 28aab68..b63eb84 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 e70ae48..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <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.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index a9a0ebb..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <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"/>
index 1b513d0..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <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"/>
index 9375751..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <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 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index 3147340..6cff2ff 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">
+<?xml 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 17C8.462 17 6 14.536 6 11.5 6 8.463 8.462 6 11.5 6c3.036 0 5.5 2.462 5.5 5.5 0 3.036-2.464 5.5-5.5 5.5zm0-12C7.91 5 5 7.91 5 11.5S7.91 18 11.5 18s6.5-2.91 6.5-6.5S15.09 5 11.5 5zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
     </g>
index 3285ad9..9f603ea 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 04cdebb..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <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.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 3c5adc3..03493be 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 f315377..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.627-.272.64-.633 1.252-1.082 1.833-.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.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <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.627-.272.64-.633 1.252-1.082 1.833-.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.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 15795c5..b5e55cc 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 f0d10d9..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.678c-.268-.13-.578-.22-.93-.268-.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-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.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-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index 2b8b6e4..f46dea5 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 2018e60..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.04-.896.686-1.9 1.03-3.015 1.03-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-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.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.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-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.893-.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.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index c044c86..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index 7f2512e..7f9da2a 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 867f458..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-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"/>
+        <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.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-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.697-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 c3b1e6e..4a7b1fc 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 1c5a4ca..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 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-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.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.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index cae0e77..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language.png differ
index 694d225..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index 710872b..23c9539 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.095 0 1.986.917 1.986 2.017z"/>
+        <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.094 0 1.985.917 1.985 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>
index a7b7ae8..85baad2 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 id="lock">
         <path d="M12 6c-2.21 0-4 1.79-4 4v1H7v7h10v-7h-1v-1c0-2.21-1.79-4-4-4zm0 2c1.105 0 2 .895 2 2v1h-4v-1c0-1.105.895-2 2-2z"/>
index 48d2c7e..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index b7fb2e7..9334b50 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" id="svg3116">
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index b8736a0..00ace19 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 5f10d4d..844013d 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index 070e4bf..137150b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.566 8 10.647 8c-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.542.143.79-.104s.292-.6.103-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.995-2.213 2.216-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.993 2.213-2.214 2.213z"/>
+        <path id="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.567 8 10.648 8 8.727 8 7.17 9.557 7.17 11.478c0 1.92 1.556 3.477 3.477 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.542.143.79-.104s.292-.6.103-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.996-2.213 2.217-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.993 2.213-2.214 2.213z"/>
     </g>
 </svg>
index 6eefe90..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 7ec6263..3799767 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">
+<?xml 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 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1H8c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
     </g>
index e632f8a..7f65881 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 bb81880..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <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.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index 71fa960..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <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-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-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-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <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-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.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-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 71671c0..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 77c66a0..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <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 6f3da1e..f443f84 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 id="unLock">
         <path d="M8 6c-2.21 0-4 1.79-4 4v1h2v-1c0-1.105.895-2 2-2s2 .895 2 2v1H9v7h10v-7h-7v-1c0-2.21-1.79-4-4-4z"/>
index 96305a6..1aabf8b 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 id="unLock">
         <path d="M15 6c2.21 0 4 1.79 4 4v1h-2v-1c0-1.105-.895-2-2-2s-2 .895-2 2v1h1v7H4v-7h7v-1c0-2.21 1.79-4 4-4z"/>
index 7378298..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <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.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,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="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index c4f7998..e0f13e6 100644 (file)
@@ -1,4 +1,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"/>
index b49613e..c88c364 100644 (file)
@@ -1,4 +1,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"/>
index b18405d..3c010c1 100644 (file)
@@ -1,4 +1,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"/>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,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="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"/>
index 985e602..2718a9b 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 e5c4010..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index 4213d67..b7a8d22 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 759f57e..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?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"/>
index 0e1a8a1..ef368c2 100644 (file)
                "alignCentre": { "file": "images/icons/align-center.svg" },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
+               "calendar": { "file": {
+                       "ltr": "images/icons/calendar-ltr.svg",
+                       "rtl": "images/icons/calendar-rtl.svg"
+               } },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
index f351b5b..a79b329 100644 (file)
@@ -1,6 +1,6 @@
 {
        "selectorWithoutVariant": ".oo-ui-icon-{name}",
-       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-icon-{name}",
        "intro": "@import '../../../../src/styles/common';",
        "variants": {
                "invert": {
index 4f786c5..ba0b477 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
index a0f0670..7813622 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"><style>* { fill: #FFFFFF }</style>
-    <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-.997c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-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.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-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 1358969..c2a2e5e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
index d0bd78b..a68158d 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">
-    <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-.997c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-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.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-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 37b57fe..327e1dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
index 5b29c98..1414c99 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3032"><style>* { fill: #FFFFFF }</style>
+    <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" id="path3034"/>
 </svg>
index 7d2113f..649cd14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
index 20835d2..266bc2a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3032">
+    <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" id="path3034"/>
 </svg>
index a50b306..f04017c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
index 6f69940..d577dde 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3032"><style>* { fill: #FFFFFF }</style>
+    <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" id="path3034"/>
 </svg>
index ed69a01..d591768 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
index e919d37..7c4779c 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3032">
+    <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" id="path3034"/>
 </svg>
index b498481..30d7d20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png differ
index 4363d3e..e1a7c67 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index ad07634..e9dce68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png differ
index 2f0edb7..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index 42518e7..9eb593b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png differ
index 6a2a9e3..8b75d71 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.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-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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"/>
+        <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-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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 0ade40c..46d579b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png differ
index ba7ffe1..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.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-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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"/>
+        <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-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.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 c11de3e..03a7931 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png differ
index e3a0813..0176bb2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 0a16f8c..5e16e38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png differ
index 0dc8b52..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.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.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 5716249..396215d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <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-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index d87d0fc..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <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-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index 6085d9c..3d7523a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.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"/>
+        <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.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.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 3c0a879..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.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"/>
+        <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.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-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-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.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 18de673..5dc39ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png differ
index c840c51..88733e0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-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.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
index e809453..cc4be63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png differ
index 277f17e..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-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.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png
new file mode 100644 (file)
index 0000000..330a53d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5eef30c
--- /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"><style>* { fill: #FFFFFF }</style>
+    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png
new file mode 100644 (file)
index 0000000..8b3ed72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg
new file mode 100644 (file)
index 0000000..121180e
--- /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="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png
new file mode 100644 (file)
index 0000000..2f9c5ba
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f7202a9
--- /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"><style>* { fill: #FFFFFF }</style>
+    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png
new file mode 100644 (file)
index 0000000..8ec5023
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg
new file mode 100644 (file)
index 0000000..9b736bf
--- /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="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 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 1a1ce2e..212e16d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png differ
index 1708674..a90feeb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.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.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.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.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.665.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 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 1b0a659..f36e52c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png differ
index 8de2583..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.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.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.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.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-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.665.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 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 6d8abc3..32d5ae8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ
index 89c5e25..cd7ce21 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M18.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index ea65697..b05cc97 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ
index 4dfa16a..1427670 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="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.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index 004a518..731baf9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ
index d20fff1..ee8a82d 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 1cb898d..3752520 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ
index 3666a34..6e0ca93 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="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.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 23c5983..97e0c2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
index fab61c1..d62d230 100644 (file)
@@ -1,7 +1,7 @@
 <?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"><style>* { fill: #FFFFFF }</style>
     <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-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <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-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-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 ee58c9a..6e678e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
index fe5309d..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?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-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <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-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-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 3be50ba..eec3102 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png differ
index 99ded02..0526f75 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <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 10927e1..4b59b2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png differ
index e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <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 eaeaf6e..bf0ef13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png differ
index d1d7093..d747aa6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <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 7a3454e..2978654 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png differ
index 9fdc8ca..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <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 dd95034..010b224 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png differ
index dc37aa1..5764ee6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <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.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 5c66688..9f418b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png differ
index bbfdaa0..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <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.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 9f23f4a..4a70b13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png differ
index 083c2d3..6854553 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <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.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index 28aab68..b63eb84 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png differ
index e70ae48..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <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.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index 3f56009..fdefd97 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <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"/>
index a9a0ebb..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <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"/>
index 6866809..b369813 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <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"/>
index 1b513d0..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <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"/>
index 6fcd856..31287cd 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index 9375751..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <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 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index cf194aa..d899142 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png differ
index 938c32e..b359c47 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <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.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 3285ad9..9f603ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png differ
index 04cdebb..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <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.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 37282ef..960653e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png differ
index 4b9da20..a0f9c0c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.627-.272.64-.633 1.252-1.082 1.833-.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.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <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.627-.272.64-.633 1.252-1.082 1.833-.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.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 3c5adc3..03493be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png differ
index f315377..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.627-.272.64-.633 1.252-1.082 1.833-.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.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <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.627-.272.64-.633 1.252-1.082 1.833-.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.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 91497a7..7f6d412 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png differ
index c75dda0..fd60619 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.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-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.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-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index 15795c5..b5e55cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png differ
index f0d10d9..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.678c-.268-.13-.578-.22-.93-.268-.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-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.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-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index f7851fa..a2a2c82 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png differ
index 761aea3..f2850c4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-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-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.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.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-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.893-.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.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index 2b8b6e4..f46dea5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png differ
index 2018e60..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.04-.896.686-1.9 1.03-3.015 1.03-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-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.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.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-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.893-.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.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index e9ce6db..8ca4218 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index c044c86..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index c3feced..68e90a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png differ
index d77fe40..8669961 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-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"/>
+        <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.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-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.697-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 7f2512e..7f9da2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png differ
index 867f458..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-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"/>
+        <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.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-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.697-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 eb3dc91..954bfbf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png differ
index ef5a411..9515299 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 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-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.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.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index c3b1e6e..4a7b1fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png differ
index 1c5a4ca..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 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-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.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.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index 81930e3..ad816df 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png differ
index d857a04..abc618e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index cae0e77..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png differ
index 694d225..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index ed0006c..ca5beaf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png differ
index 7b545ca..705645c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-471.2 493.6c-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 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3095"><style>* { fill: #FFFFFF }</style>
+    <g id="g3097">
+        <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" id="path3099"/>
     </g>
 </svg>
index 3db2467..25980e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png differ
index 0d3c186..86f3ede 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-471.2 493.6c-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 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3095">
+    <g id="g3097">
+        <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" id="path3099"/>
     </g>
 </svg>
index 0246e4d..72bbf34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
index 59885e9..b104fab 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3165"><style>* { fill: #FFFFFF }</style>
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
index de7b1d2..45daeab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
index 9ef19fe..ec17daf 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3165">
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
index 8ca43a3..9c859e4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index 48d2c7e..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index 48273f4..386ccc2 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" id="svg3116"><style>* { fill: #FFFFFF }</style>
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index b7fb2e7..9334b50 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" id="svg3116">
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index dbde6ed..472bb4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png differ
index e514672..db8484e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3224"><style>* { fill: #FFFFFF }</style>
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 5f14322..72c7e3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png differ
index c2925ca..c9f7d01 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3224">
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 0b7d107..47fd687 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png differ
index be46adf..e085452 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3224"><style>* { fill: #FFFFFF }</style>
+    <g id="g3226">
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index e5039fc..2b4c8d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png differ
index dd7bfb1..cf8a7a7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="svg3224">
+    <g id="g3226">
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 0d34e60..21b4d79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png differ
index e7889c3..5d2ff77 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index b8736a0..00ace19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png differ
index 5f10d4d..844013d 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index ce6f7b2..8660556 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 6eefe90..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <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.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 10e7967..008efd0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png differ
index fbba082..5f3d914 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <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.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index e632f8a..7f65881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png differ
index bb81880..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <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.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.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.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index b707280..fd1c16d 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-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-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <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-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.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-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 71fa960..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <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-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-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-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <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-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.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-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.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.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index b79e14c..aab025e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 61848c7..1fe8f5a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 71e05f1..394e431 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index d4b7032..0f140c3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 36e56b2..ed26598 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FF5D00 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 71671c0..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml 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="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 33089a0..0367cfe 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <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 77c66a0..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <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 342493b..c998822 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <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.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <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.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 7378298..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml 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.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <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.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 3207aaf..0d17c02 100644 (file)
@@ -1,4 +1,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"><style>* { fill: #FFFFFF }</style>
     <g id="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,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="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index f18841d..fcb50d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
index 6330d97..dbf1c03 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 15ec586..034fe2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
index d8979ae..9fbb784 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 476dbcc..708161e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index d824ff1..8618466 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index 276052b..6c34aa2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index 88ad88b..5d389cc 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index e33ba06..66c712b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
index 0640cc3..5ebef4b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
index ba5fd1d..5b03054 100644 (file)
@@ -1,4 +1,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"><style>* { fill: #FFFFFF }</style>
     <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"/>
index b18405d..3c010c1 100644 (file)
@@ -1,4 +1,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"/>
index 0d2e79a..4068699 100644 (file)
@@ -1,4 +1,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"><style>* { fill: #FFFFFF }</style>
     <g 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"/>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,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="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"/>
index fbd6af1..68fcab8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
index 322b5b1..cf4de68 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index 985e602..2718a9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
index e5c4010..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index bcafcd6..c8ebef4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
index a90817d..41fe9bd 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index 4213d67..b7a8d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
index 759f57e..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?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="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?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"/>
index 3d66337..5a83258 100644 (file)
@@ -1,6 +1,6 @@
 {
        "selectorWithoutVariant": ".oo-ui-indicator-{name}",
-       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-indicator-{name}, .oo-ui-image-{variant}.oo-ui-indicator-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-indicator-{name}",
        "intro": "@import '../../../../src/styles/common';",
        "variants": {
                "invert": {
index 6e7851a..9395ecf 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.8 optimised for jQuery
+ * OOjs v1.1.9 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-23T19:16:00Z
+ * Date: 2015-08-25T21:35:29Z
  */
 ( function ( global ) {
 
@@ -22,7 +22,21 @@ var
        oo = {},
        // Optimisation: Local reference to Object.prototype.hasOwnProperty
        hasOwn = oo.hasOwnProperty,
-       toString = oo.toString;
+       toString = oo.toString,
+       // Object.create() is impossible to fully polyfill, so don't require it
+       createObject = Object.create || ( function () {
+               // Reusable constructor function
+               function Empty() {}
+               return function ( prototype, properties ) {
+                       var obj;
+                       Empty.prototype = prototype;
+                       obj = new Empty();
+                       if ( properties && hasOwn.call( properties, 'constructor' ) ) {
+                               obj.constructor = properties.constructor.value;
+                       }
+                       return obj;
+               };
+       } )();
 
 /* Class Methods */
 
@@ -88,7 +102,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
        // allows people to comply with their style guide.
        targetFn['super'] = targetFn.parent = originFn;
 
-       targetFn.prototype = Object.create( originFn.prototype, {
+       targetFn.prototype = createObject( originFn.prototype, {
                // Restore constructor property of targetFn
                constructor: {
                        value: targetConstructor,
@@ -100,7 +114,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
 
        // Extend static properties - always initialize both sides
        oo.initClass( originFn );
-       targetFn.static = Object.create( originFn.static );
+       targetFn.static = createObject( originFn.static );
 };
 
 /**
@@ -242,7 +256,7 @@ oo.setProp = function ( obj ) {
 oo.cloneObject = function ( origin ) {
        var key, r;
 
-       r = Object.create( origin.constructor.prototype );
+       r = createObject( origin.constructor.prototype );
 
        for ( key in origin ) {
                if ( hasOwn.call( origin, key ) ) {
@@ -891,6 +905,8 @@ oo.Registry.prototype.lookup = function ( name ) {
        }
 };
 
+/*global createObject */
+
 /**
  * @class OO.Factory
  * @extends OO.Registry
@@ -991,7 +1007,7 @@ oo.Factory.prototype.create = function ( name ) {
        // the constructor's prototype (which also makes it an "instanceof" the constructor),
        // then invoke the constructor with the object as context, and return it (ignoring
        // the constructor's return value).
-       obj = Object.create( constructor.prototype );
+       obj = createObject( constructor.prototype );
        constructor.apply( obj, args );
        return obj;
 };
index e2315d2..afff463 100644 (file)
         * "fobo", not "foba". Basically emulating the native maxlength by
         * reconstructing where the insertion occurred.
         *
-        * @private
+        * @static
         * @param {string} safeVal Known value that was previously returned by this
         * function, if none, pass empty string.
         * @param {string} newVal New value that may have to be trimmed down.
         * @param {number} byteLimit Number of bytes the value may be in size.
-        * @param {Function} [fn] See jQuery.byteLimit.
+        * @param {Function} [fn] See jQuery#byteLimit.
         * @return {Object}
         * @return {string} return.newVal
         * @return {boolean} return.trimmed
         */
-       function trimValueForByteLength( safeVal, newVal, byteLimit, fn ) {
+       $.trimByteLength = function ( safeVal, newVal, byteLimit, fn ) {
                var startMatches, endMatches, matchesLen, inpParts,
                        oldVal = safeVal;
 
@@ -92,7 +92,7 @@
                        newVal: newVal,
                        trimmed: true
                };
-       }
+       };
 
        var eventKeys = [
                'keyup.byteLimit',
                        // See http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboard-event-order for
                        // the order and characteristics of the key events.
                        $el.on( eventKeys, function () {
-                               var res = trimValueForByteLength(
+                               var res = $.trimByteLength(
                                        prevSafeVal,
                                        this.value,
                                        elLimit,
                                        this.value = res.newVal;
                                }
                                // Always adjust prevSafeVal to reflect the input value. Not doing this could cause
-                               // trimValueForByteLength to compare the new value to an empty string instead of the
+                               // trimByteLength to compare the new value to an empty string instead of the
                                // old value, resulting in trimming always from the end (bug 40850).
                                prevSafeVal = res.newVal;
                        } );
                } );
        };
 
-       $.fn.byteLimit.trimValueForByteLength = trimValueForByteLength;
-
        /**
         * @class jQuery
         * @mixins jQuery.plugin.byteLimit
index c835345..b8cc059 100644 (file)
@@ -76,9 +76,9 @@
         * @return {string}
         */
        CoreForeignApi.prototype.getOrigin = function () {
-               var origin = window.location.protocol + '//' + window.location.hostname;
-               if ( window.location.port ) {
-                       origin += ':' + window.location.port;
+               var origin = location.protocol + '//' + location.hostname;
+               if ( location.port ) {
+                       origin += ':' + location.port;
                }
                return origin;
        };
@@ -90,7 +90,7 @@
                var url, origin, newAjaxOptions;
 
                // 'origin' query parameter must be part of the request URI, and not just POST request body
-               if ( ajaxOptions.type !== 'GET' ) {
+               if ( ajaxOptions.type === 'POST' ) {
                        url = ( ajaxOptions && ajaxOptions.url ) || this.defaults.ajax.url;
                        origin = ( parameters && parameters.origin ) || this.defaults.parameters.origin;
                        url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
index 19d2542..d05ba57 100644 (file)
        $.extend( mw.Api.prototype, {
                /**
                 * Upload a file to MediaWiki.
-                * @param {HTMLInputElement|File} file HTML input type=file element with a file already inside of it, or a File object.
+                *
+                * The file will be uploaded using AJAX and FormData, if the browser supports it, or via an
+                * iframe if it doesn't.
+                *
+                * Caveats of iframe upload:
+                * - The returned jQuery.Promise will not receive `progress` notifications during the upload
+                * - It is incompatible with uploads to a foreign wiki using mw.ForeignApi
+                * - You must pass a HTMLInputElement and not a File for it to be possible
+                *
+                * @param {HTMLInputElement|File} file HTML input type=file element with a file already inside
+                *     of it, or a File object.
                 * @param {Object} data Other upload options, see action=upload API docs for more
                 * @return {jQuery.Promise}
                 */
                 * APIs, and continues to work in browsers with those APIs.
                 *
                 * The rough sketch of how this method works is as follows:
-                * * An iframe is loaded with no content.
-                * * A form is submitted with the passed-in file input and some extras.
-                * * The MediaWiki API receives that form data, and sends back a response.
-                * * The response is sent to the iframe, because we set target=(iframe id)
-                * * The response is parsed out of the iframe's document, and passed back
-                *   through the promise.
+                * 1. An iframe is loaded with no content.
+                * 2. A form is submitted with the passed-in file input and some extras.
+                * 3. The MediaWiki API receives that form data, and sends back a response.
+                * 4. The response is sent to the iframe, because we set target=(iframe id)
+                * 5. The response is parsed out of the iframe's document, and passed back
+                *    through the promise.
+                *
+                * @private
                 * @param {HTMLInputElement} file The file input with a file in it.
                 * @param {Object} data Other upload options, see action=upload API docs for more
                 * @return {jQuery.Promise}
 
                /**
                 * Uploads a file using the FormData API.
+                *
+                * @private
                 * @param {File} file
-                * @param {Object} data
+                * @param {Object} data Other upload options, see action=upload API docs for more
                 * @return {jQuery.Promise}
                 */
                uploadWithFormData: function ( file, data ) {
                                        return $.Deferred().reject( 'Filename not included in file data.' );
                                }
 
-                               return api.postWithEditToken( data );
+                               return api.postWithEditToken( data ).then( function ( result ) {
+                                       if ( result.upload && ( result.upload.error || result.upload.warnings ) ) {
+                                               return $.Deferred().reject( result.upload.error || result.upload.warnings ).promise();
+                                       }
+                                       return result;
+                               } );
                        }
 
                        return this.upload( file, { stash: true, filename: data.filename } ).then( function ( result ) {
index e35b1cf..2291572 100644 (file)
@@ -284,45 +284,6 @@ img.thumbborder {
        border: 1px solid #dddddd;
 }
 
-/**
- * Galleries (see shared.css for more info)
- */
-li.gallerybox {
-       vertical-align: top;
-       display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       margin: 2px;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
 /**
  * Table rendering
  * As on shared.css but with white background.
index 7e171cf..8122701 100644 (file)
@@ -417,11 +417,6 @@ p.mw-upload-editlicenses {
 /* The auto-generated edit comments */
 .autocomment {
        color: gray;
-       /* In RTL wikis, Latin heading sections can get jumbled with comments that
-          begin with Latin letters or numbers */
-       unicode-bidi: -moz-isolate;
-       unicode-bidi: -webkit-isolate;
-       unicode-bidi: isolate;
 }
 
 #pagehistory .history-user {
@@ -787,108 +782,6 @@ table.mw_metadata ul.metadata-langlist {
        margin-left: 0;
 }
 
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
-       vertical-align: top;
-       display: -moz-inline-box;
-       display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       background-color: #f9f9f9;
-       margin: 2px;
-}
-
-li.gallerybox div.thumb img {
-       display: block;
-       margin: 0 auto;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/* new gallery stuff */
-ul.mw-gallery-nolines li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-nolines li.gallerybox div.gallerytext {
-       text-align: center;
-}
-
-/* height constrained gallery */
-
-ul.mw-gallery-packed li.gallerybox div.thumb,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-packed li.gallerybox div.thumb img,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
-       margin: 0 auto;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox,
-ul.mw-gallery-packed-overlay li.gallerybox {
-       position: relative;
-}
-
-ul.mw-gallery-packed-hover div.gallerytextwrapper {
-       overflow: hidden;
-       height: 0;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
-ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
-ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
-       position: absolute;
-       background: white;
-       background: rgba(255, 255, 255, 0.8);
-       padding: 5px 10px;
-       bottom: 0;
-       left: 0; /* Needed for IE */
-       height: auto;
-       font-weight: bold;
-       margin: 2px; /* correspond to style on div.thumb */
-}
-
-ul.mw-gallery-packed-hover,
-ul.mw-gallery-packed-overlay,
-ul.mw-gallery-packed {
-       text-align: center;
-}
-
 .mw-ajax-loader {
        background-image: url(images/ajax-loader.gif);
        background-position: center center;
diff --git a/resources/src/mediawiki.page/mediawiki.page.gallery.css b/resources/src/mediawiki.page/mediawiki.page.gallery.css
new file mode 100644 (file)
index 0000000..20deb21
--- /dev/null
@@ -0,0 +1,101 @@
+/* Galleries */
+/* These display attributes look nonsensical, but are needed to support IE and FF2 */
+/* Don't forget to update mediawiki.page.gallery.print.css */
+li.gallerybox {
+       vertical-align: top;
+       display: -moz-inline-box;
+       display: inline-block;
+}
+
+ul.gallery,
+li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       background-color: #f9f9f9;
+       margin: 2px;
+}
+
+li.gallerybox div.thumb img {
+       display: block;
+       margin: 0 auto;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/* new gallery stuff */
+ul.mw-gallery-nolines li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-nolines li.gallerybox div.gallerytext {
+       text-align: center;
+}
+
+/* height constrained gallery */
+
+ul.mw-gallery-packed li.gallerybox div.thumb,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-packed li.gallerybox div.thumb img,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
+       margin: 0 auto;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox,
+ul.mw-gallery-packed-overlay li.gallerybox {
+       position: relative;
+}
+
+ul.mw-gallery-packed-hover div.gallerytextwrapper {
+       overflow: hidden;
+       height: 0;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
+ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
+ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
+       position: absolute;
+       background: white;
+       background: rgba(255, 255, 255, 0.8);
+       padding: 5px 10px;
+       bottom: 0;
+       left: 0; /* Needed for IE */
+       height: auto;
+       font-weight: bold;
+       margin: 2px; /* correspond to style on div.thumb */
+}
+
+ul.mw-gallery-packed-hover,
+ul.mw-gallery-packed-overlay,
+ul.mw-gallery-packed {
+       text-align: center;
+}
diff --git a/resources/src/mediawiki.page/mediawiki.page.gallery.print.css b/resources/src/mediawiki.page/mediawiki.page.gallery.print.css
new file mode 100644 (file)
index 0000000..0c14865
--- /dev/null
@@ -0,0 +1,35 @@
+li.gallerybox {
+       vertical-align: top;
+       display: inline-block;
+}
+
+ul.gallery, li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
index 7dd0369..8f72d63 100644 (file)
                                ctx,
                                meta,
                                previewSize = 180,
+                               $spinner = $.createSpinner( { size: 'small', type: 'block' } )
+                                       .css( { width: previewSize, height: previewSize } ),
                                thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
 
-                       thumb.find( '.filename' ).text( file.name ).end()
-                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
+                       thumb
+                               .find( '.filename' ).text( file.name ).end()
+                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end()
+                               .find( '.thumbinner' ).prepend( $spinner ).end();
 
-                       $canvas = $( '<canvas width="' + previewSize + '" height="' + previewSize + '" ></canvas>' );
+                       $canvas = $( '<canvas>' ).attr( { width: previewSize, height: previewSize } );
                        ctx = $canvas[0].getContext( '2d' );
                        $( '#mw-htmlform-source' ).parent().prepend( thumb );
 
                                        ctx.clearRect( 0, 0, 180, 180 );
                                        ctx.rotate( rotation / 180 * Math.PI );
                                        ctx.drawImage( img, x, y, width, height );
-                                       thumb.find( '.mw-spinner-small' ).replaceWith( $canvas );
+                                       $spinner.replaceWith( $canvas );
 
                                        // Image size
                                        info = mw.msg( 'widthheight', logicalWidth, logicalHeight ) +
index 305f20c..bf0e701 100644 (file)
@@ -1,7 +1,5 @@
 <div id="mw-upload-thumbnail" class="thumb tright">
        <div class="thumbinner">
-               <!-- Note: Change showPreview() in mediawiki.special.upload.js if mw-spinner-small classname changes -->
-               <div class="mw-spinner mw-spinner-small" style="width: 180px; height: 180px"></div>
                <div class="thumbcaption">
                        <div class="filename"></div>
                        <div class="fileinfo"></div>
index 3697a1c..cf4d788 100644 (file)
        mw.widgets.TitleInputWidget.prototype.cleanUpValue = function ( value ) {
                var widget = this;
                value = mw.widgets.TitleInputWidget.parent.prototype.cleanUpValue.call( this, value );
-               return $.fn.byteLimit.trimValueForByteLength( this.value, value, this.maxLength, function ( value ) {
+               return $.trimByteLength( this.value, value, this.maxLength, function ( value ) {
                        var title = widget.getTitle( value );
                        return title ? title.getMain() : value;
                } ).newVal;
diff --git a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
new file mode 100644 (file)
index 0000000..be63936
--- /dev/null
@@ -0,0 +1,162 @@
+( function ( mw, OO ) {
+       /**
+        * @class mw.ForeignStructuredUpload
+        * @extends mw.ForeignUpload
+        *
+        * Used to represent an upload in progress on the frontend.
+        *
+        * This subclass will upload to a wiki using a structured metadata
+        * system similar to (or identical to) the one on Wikimedia Commons.
+        *
+        * See <https://commons.wikimedia.org/wiki/Commons:Structured_data> for
+        * a more detailed description of how that system works.
+        *
+        * TODO this currently only supports uploads under CC-BY-SA 4.0,
+        *     and should really have support for more licenses.
+        *
+        * @inheritdoc
+        */
+       function ForeignStructuredUpload( targetHost, apiconfig ) {
+               this.date = undefined;
+               this.descriptions = [];
+               this.categories = [];
+
+               mw.ForeignUpload.call( this, targetHost, apiconfig );
+       }
+
+       OO.inheritClass( ForeignStructuredUpload, mw.ForeignUpload );
+
+       /**
+        * Add categories to the upload.
+        * @param {string[]} categories Array of categories to which this upload will be added.
+        */
+       ForeignStructuredUpload.prototype.addCategories = function ( categories ) {
+               var i, category;
+
+               for ( i = 0; i < categories.length; i++ ) {
+                       category = categories[i];
+                       this.categories.push( category );
+               }
+       };
+
+       /**
+        * Add a description to the upload.
+        * @param {string} language The language code for the description's language. Must have a template on the target wiki to work properly.
+        * @param {string} description The description of the file.
+        */
+       ForeignStructuredUpload.prototype.addDescription = function ( language, description ) {
+               this.descriptions.push( {
+                       language: language,
+                       text: description
+               } );
+       };
+
+       /**
+        * Set the date of creation for the upload.
+        * @param {Date} date
+        */
+       ForeignStructuredUpload.prototype.setDate = function ( date ) {
+               this.date = date;
+       };
+
+       /**
+        * Get the text of the file page, to be created on upload. Brings together
+        * several different pieces of information to create useful text.
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getText = function () {
+               return (
+                       '{{' +
+                       this.getTemplateName() +
+                       '\n|description=' +
+                       this.getDescriptions() +
+                       '\n|date=' +
+                       this.getDate() +
+                       '\n|source=' +
+                       this.getUser() +
+                       '\n|author=' +
+                       this.getUser() +
+                       '\n}}\n\n' +
+                       this.getLicense() +
+                       '\n\n' +
+                       this.getCategories()
+               );
+       };
+
+       /**
+        * Gets the wikitext for the creation date of this upload.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getDate = function () {
+               if ( !this.date ) {
+                       return '';
+               }
+
+               return this.date.toString();
+       };
+
+       /**
+        * Gets the name of the template to use for creating the file metadata.
+        * Override in subclasses for other templates.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getTemplateName = function () {
+               return 'Information';
+       };
+
+       /**
+        * Fetches the wikitext for any descriptions that have been added
+        * to the upload.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getDescriptions = function () {
+               var i, desc, templateCalls = [];
+
+               for ( i = 0; i < this.descriptions.length; i++ ) {
+                       desc = this.descriptions[i];
+                       templateCalls.push( '{{' + desc.language + '|' + desc.text + '}}' );
+               }
+
+               return templateCalls.join( '\n' );
+       };
+
+       /**
+        * Fetches the wikitext for the categories to which the upload will
+        * be added.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getCategories = function () {
+               var i, cat, categoryLinks = [];
+
+               for ( i = 0; i < this.categories.length; i++ ) {
+                       cat = this.categories[i];
+                       categoryLinks.push( '[[Category:' + cat + ']]' );
+               }
+
+               return categoryLinks.join( '\n' );
+       };
+
+       /**
+        * Gets the wikitext for the license of the upload. Abstract for now.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getLicense = function () {
+               return '';
+       };
+
+       /**
+        * Get the username.
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getUser = function () {
+               return mw.config.get( 'wgUserName' );
+       };
+
+       mw.ForeignStructuredUpload = ForeignStructuredUpload;
+}( mediaWiki, OO ) );
diff --git a/resources/src/mediawiki/mediawiki.ForeignUpload.js b/resources/src/mediawiki/mediawiki.ForeignUpload.js
new file mode 100644 (file)
index 0000000..0929661
--- /dev/null
@@ -0,0 +1,58 @@
+( function ( mw, OO ) {
+       /**
+        * @class mw.ForeignUpload
+        * @extends mw.Upload
+        *
+        * Used to represent an upload in progress on the frontend.
+        *
+        * Subclassed to upload to a foreign API, with no other goodies. Use
+        * this for a generic foreign image repository on your wiki farm.
+        *
+        * Note you can provide the {@link #targetHost targetHost} or not - if the first argument is
+        * an object, we assume you want the default, and treat it as apiconfig
+        * instead.
+        *
+        * @constructor
+        * @param {string} [targetHost="commons.wikimedia.org"] Used to set up the target
+        *     wiki. If not remote, this class behaves identically to mw.Upload (unless further subclassed)
+        * @param {Object} [apiconfig] Passed to the constructor of mw.ForeignApi or mw.Api, as needed.
+        */
+       function ForeignUpload( targetHost, apiconfig ) {
+               var api;
+
+               if ( typeof targetHost === 'object' ) {
+                       // targetHost probably wasn't passed in, it must
+                       // be apiconfig
+                       apiconfig = targetHost;
+               } else {
+                       // targetHost is a useful string, set it here
+                       this.targetHost = targetHost || this.targetHost;
+               }
+
+               if ( location.host !== this.targetHost ) {
+                       api = new mw.ForeignApi(
+                               location.protocol + '//' + this.targetHost + '/w/api.php',
+                               apiconfig
+                       );
+               } else {
+                       // We'll ignore the CORS and centralauth stuff if we're on Commons already
+                       api = new mw.Api( apiconfig );
+               }
+
+               mw.Upload.call( this, api );
+       }
+
+       OO.inheritClass( ForeignUpload, mw.Upload );
+
+       /**
+        * @property targetHost
+        * Used to specify the target repository of the upload.
+        *
+        * You could override this to point at something that isn't Commons,
+        * but be sure it has the correct templates and is CORS and CentralAuth
+        * ready.
+        */
+       ForeignUpload.prototype.targetHost = 'commons.wikimedia.org';
+
+       mw.ForeignUpload = ForeignUpload;
+}( mediaWiki, OO ) );
index 3c10eeb..96db7cc 100644 (file)
                                return false;
                        }
 
-                       dialog.upload.finishStashUpload().then( function () {
+                       dialog.upload.finishStashUpload().always( function () {
                                var name;
 
                                if ( dialog.upload.getState() === mw.Upload.State.ERROR ) {
index 58c66c1..07a0b75 100644 (file)
         * Sets the filename based on the filename as it was on the upload.
         */
        UP.setFilenameFromFile = function () {
-               if ( this.file.nodeType && this.file.nodeType === Node.ELEMENT_NODE ) {
+               var file = this.getFile();
+               if ( file.nodeType && file.nodeType === Node.ELEMENT_NODE ) {
                        // File input element, use getBasename to cut out the path
-                       this.setFilename( this.getBasename( this.file.value ) );
-               } else if ( this.file.name && this.file.lastModified ) {
+                       this.setFilename( this.getBasename( file.value ) );
+               } else if ( file.name && file.lastModified ) {
                        // HTML5 FileAPI File object, but use getBasename to be safe
-                       this.setFilename( this.getBasename( this.file.name ) );
+                       this.setFilename( this.getBasename( file.name ) );
                }
        };
 
        UP.upload = function () {
                var upload = this;
 
-               if ( !this.file ) {
+               if ( !this.getFile() ) {
                        return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
                }
 
-               if ( !this.filename ) {
+               if ( !this.getFilename() ) {
                        return $.Deferred().reject( 'No filename set. Call setFilename to add one.' );
                }
 
                this.state = Upload.State.UPLOADING;
 
-               return this.api.upload( this.file, {
-                       watchlist: ( this.watchlist === true ) ? 1 : undefined,
-                       comment: this.comment,
-                       filename: this.filename,
-                       text: this.text
+               return this.api.upload( this.getFile(), {
+                       watchlist: ( this.getWatchlist() ) ? 1 : undefined,
+                       comment: this.getComment(),
+                       filename: this.getFilename(),
+                       text: this.getText()
                } ).then( function ( result ) {
                        upload.state = Upload.State.UPLOADED;
                        upload.imageinfo = result.upload.imageinfo;
        UP.uploadToStash = function () {
                var upload = this;
 
-               if ( !this.file ) {
+               if ( !this.getFile() ) {
                        return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
                }
 
-               if ( !this.filename ) {
+               if ( !this.getFilename() ) {
                        this.setFilenameFromFile();
                }
 
                this.state = Upload.State.UPLOADING;
 
-               this.stashPromise = this.api.uploadToStash( this.file, {
-                       filename: this.filename
+               this.stashPromise = this.api.uploadToStash( this.getFile(), {
+                       filename: this.getFilename()
                } ).then( function ( finishStash ) {
                        upload.state = Upload.State.STASHED;
                        return finishStash;
                        upload.state = Upload.State.UPLOADING;
 
                        return finishStash( {
-                               watchlist: ( upload.watchlist === true ) ? 1 : undefined,
+                               watchlist: ( upload.getWatchlist() ) ? 1 : undefined,
                                comment: upload.getComment(),
                                filename: upload.getFilename(),
                                text: upload.getText()
diff --git a/resources/src/mediawiki/mediawiki.experiments.js b/resources/src/mediawiki/mediawiki.experiments.js
new file mode 100644 (file)
index 0000000..930bfec
--- /dev/null
@@ -0,0 +1,110 @@
+/* jshint bitwise:false */
+( function ( mw, $ ) {
+
+       var CONTROL_BUCKET = 'control',
+               MAX_INT32_UNSIGNED = 4294967295;
+
+       /**
+        * An implementation of Jenkins' one-at-a-time hash.
+        *
+        * @see http://en.wikipedia.org/wiki/Jenkins_hash_function
+        *
+        * @param {String} string String to hash
+        * @return {Number} The hash as a 32-bit unsigned integer
+        * @ignore
+        *
+        * @author Ori Livneh <ori@wikimedia.org>
+        * @see http://jsbin.com/kejewi/4/watch?js,console
+        */
+       function hashString( string ) {
+               var hash = 0,
+                       i = string.length;
+
+               while ( i-- ) {
+                       hash += string.charCodeAt( i );
+                       hash += ( hash << 10 );
+                       hash ^= ( hash >> 6 );
+               }
+               hash += ( hash << 3 );
+               hash ^= ( hash >> 11 );
+               hash += ( hash << 15 );
+
+               return hash >>> 0;
+       }
+
+       /**
+        * Provides an API for bucketing users in experiments.
+        *
+        * @class mw.experiments
+        * @singleton
+        */
+       mw.experiments = {
+
+               /**
+                * Gets the bucket for the experiment given the token.
+                *
+                * The name of the experiment and the token are hashed. The hash is converted
+                * to a number which is then used to get a bucket.
+                *
+                * Consider the following experiment specification:
+                *
+                * ```
+                * {
+                *   name: 'My first experiment',
+                *   enabled: true,
+                *   buckets: {
+                *     control: 0.5
+                *     A: 0.25,
+                *     B: 0.25
+                *   }
+                * }
+                * ```
+                *
+                * The experiment has three buckets: control, A, and B. The user has a 50%
+                * chance of being assigned to the control bucket, and a 25% chance of being
+                * assigned to either the A or B buckets. If the experiment were disabled,
+                * then the user would always be assigned to the control bucket.
+                *
+                * This function is based on the deprecated `mw.user.bucket` function.
+                *
+                * @param {Object} experiment
+                * @param {String} experiment.name The name of the experiment
+                * @param {Boolean} experiment.enabled Whether or not the experiment is
+                *  enabled. If the experiment is disabled, then the user is always assigned
+                *  to the control bucket
+                * @param {Object} experiment.buckets A map of bucket name to probability
+                *  that the user will be assigned to that bucket
+                * @param {String} token A token that uniquely identifies the user for the
+                *  duration of the experiment
+                * @returns {String} The bucket
+                */
+               getBucket: function ( experiment, token ) {
+                       var buckets = experiment.buckets,
+                               key,
+                               range = 0,
+                               hash,
+                               max,
+                               acc = 0;
+
+                       if ( !experiment.enabled || $.isEmptyObject( experiment.buckets ) ) {
+                               return CONTROL_BUCKET;
+                       }
+
+                       for ( key in buckets ) {
+                               range += buckets[key];
+                       }
+
+                       hash = hashString( experiment.name + ':' + token );
+                       max = ( hash / MAX_INT32_UNSIGNED ) * range;
+
+                       for ( key in buckets ) {
+                               acc += buckets[key];
+
+                               if ( max <= acc ) {
+                                       return key;
+                               }
+                       }
+               }
+       };
+
+}( mediaWiki, jQuery ) );
index 6548896..2621a97 100644 (file)
                        /**
                         * Mapping of registered modules.
                         *
-                        * See #implement for exact details on support for script, style and messages.
+                        * See #implement and #execute for exact details on support for script, style and messages.
                         *
                         * Format:
                         *
                         *     {
                         *         'moduleName': {
-                        *             // From startup mdoule
-                        *             'version': '################' (Hash)
+                        *             // From mw.loader.register() in startup module
+                        *             'version': '########' (hash)
                         *             'dependencies': ['required.foo', 'bar.also', ...], (or) function () {}
                         *             'group': 'somegroup', (or) null
                         *             'source': 'local', (or) 'anotherwiki'
                         *             'skip': 'return !!window.Example', (or) null
+                        *
+                        *             // Set from execute() or mw.loader.state()
                         *             'state': 'registered', 'loaded', 'loading', 'ready', 'error', or 'missing'
                         *
-                        *             // Added during implementation
+                        *             // Optionally added at run-time by mw.loader.implement()
                         *             'skipped': true
-                        *             'script': ...
-                        *             'style': ...
-                        *             'messages': { 'key': 'value' }
+                        *             'script': closure, array of urls, or string
+                        *             'style': { ... } (see #execute)
+                        *             'messages': { 'key': 'value', ... }
                         *         }
                         *     }
                         *
                                                        } else if ( $.isFunction( script ) ) {
                                                                // Pass jQuery twice so that the signature of the closure which wraps
                                                                // the script can bind both '$' and 'jQuery'.
-                                                               registry[module].state = 'ready';
                                                                script( $, $ );
-                                                               handlePending( module );
+                                                               markModuleReady();
                                                        } else if ( typeof script === 'string' ) {
                                                                // Site and user modules are a legacy scripts that run in the global scope.
                                                                // This is transported as a string instead of a function to avoid needing
                                                                        // Implicit dependency on the site module. Not real dependency because
                                                                        // it should run after 'site' regardless of whether it succeeds or fails.
                                                                        mw.loader.using( 'site' ).always( function () {
-                                                                               registry[module].state = 'ready';
                                                                                $.globalEval( script );
-                                                                               handlePending( module );
+                                                                               markModuleReady();
                                                                        } );
                                                                } else {
-                                                                       registry[module].state = 'ready';
                                                                        $.globalEval( script );
-                                                                       handlePending( module );
+                                                                       markModuleReady();
                                                                }
                                                        }
                                                } );
                                registry[module].state = 'loading';
 
                                // Add localizations to message system
-                               if ( $.isPlainObject( registry[module].messages ) ) {
+                               if ( registry[module].messages ) {
                                        mw.messages.set( registry[module].messages );
                                }
 
                                // * back-compat: { <media>: [url, ..] }
                                // * { "css": [css, ..] }
                                // * { "url": { <media>: [url, ..] } }
-                               if ( $.isPlainObject( registry[module].style ) ) {
+                               if ( registry[module].style ) {
                                        for ( key in registry[module].style ) {
                                                value = registry[module].style[key];
                                                media = undefined;
                                        currReqBase
                                );
                                request = sortQuery( request );
-                               // Support: IE6
-                               // Append &* to satisfy load.php's WebRequest::checkUrlExtension test.
-                               // This script isn't actually used in IE6, but MediaWiki enforces it in general.
-                               addScript( sourceLoadScript + '?' + $.param( request ) + '&*' );
+                               addScript( sourceLoadScript + '?' + $.param( request ) );
                        }
 
                        /**
                                 * The reason css strings are not concatenated anymore is bug 31676. We now check
                                 * whether it's safe to extend the stylesheet.
                                 *
-                                * @param {Object} [msgs] List of key/value pairs to be added to mw#messages.
+                                * @param {Object} [messages] List of key/value pairs to be added to mw#messages.
                                 * @param {Object} [templates] List of key/value pairs to be added to mw#templates.
                                 */
-                               implement: function ( module, script, style, msgs, templates ) {
+                               implement: function ( module, script, style, messages, templates ) {
                                        // Validate input
                                        if ( typeof module !== 'string' ) {
                                                throw new Error( 'module must be of type string, not ' + typeof module );
                                        if ( style && !$.isPlainObject( style ) ) {
                                                throw new Error( 'style must be of type object, not ' + typeof style );
                                        }
-                                       if ( msgs && !$.isPlainObject( msgs ) ) {
-                                               throw new Error( 'msgs must be of type object, not a ' + typeof msgs );
+                                       if ( messages && !$.isPlainObject( messages ) ) {
+                                               throw new Error( 'messages must be of type object, not a ' + typeof messages );
                                        }
                                        if ( templates && !$.isPlainObject( templates ) ) {
                                                throw new Error( 'templates must be of type object, not a ' + typeof templates );
                                        // Attach components
                                        registry[module].script = script || [];
                                        registry[module].style = style || {};
-                                       registry[module].messages = msgs || {};
+                                       registry[module].messages = messages || {};
                                        registry[module].templates = templates || {};
                                        // The module may already have been marked as erroneous
                                        if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
diff --git a/resources/src/mediawiki/mediawiki.startUp.js b/resources/src/mediawiki/mediawiki.startUp.js
deleted file mode 100644 (file)
index 028784c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * Auto-register from pre-loaded startup scripts
- */
-( function ( $ ) {
-       'use strict';
-
-       if ( $.isFunction( window.startUp ) ) {
-               window.startUp();
-               window.startUp = undefined;
-       }
-}( jQuery ) );
index 3b79bd3..eb4dc9f 100644 (file)
@@ -68,39 +68,48 @@ function isCompatible( ua ) {
        );
 }
 
-/**
- * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
- */
-function startUp() {
-       mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
+// Conditional script injection
+( function () {
+       if ( !isCompatible() ) {
+               // Undo class swapping in case of an unsupported browser.
+               // See OutputPage::getHeadScripts().
+               document.documentElement.className = document.documentElement.className
+                       .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
+       }
+
+       /**
+        * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
+        */
+       function startUp() {
+               mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
 
-       $CODE.registrations();
+               $CODE.registrations();
 
-       mw.config.set( $VARS.configuration );
+               mw.config.set( $VARS.configuration );
 
-       // Must be after mw.config.set because these callbacks may use mw.loader which
-       // needs to have values 'skin', 'debug' etc. from mw.config.
-       window.RLQ = window.RLQ || [];
-       while ( RLQ.length ) {
-               RLQ.shift()();
+               // Must be after mw.config.set because these callbacks may use mw.loader which
+               // needs to have values 'skin', 'debug' etc. from mw.config.
+               window.RLQ = window.RLQ || [];
+               while ( RLQ.length ) {
+                       RLQ.shift()();
+               }
+               window.RLQ = {
+                       push: function ( fn ) {
+                               fn();
+                       }
+               };
        }
-       window.RLQ = {
-               push: function ( fn ) {
-                       fn();
+
+       var 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();
                }
        };
-}
-
-// Conditional script injection
-if ( isCompatible() ) {
-       ( function () {
-               var script = document.createElement( 'script' );
-               script.src = $VARS.baseModulesUri;
-               document.getElementsByTagName( 'head' )[0].appendChild( script );
-       }() );
-} else {
-       // Undo class swapping in case of an unsupported browser.
-       // See OutputPage::getHeadScripts().
-       document.documentElement.className = document.documentElement.className
-               .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
-}
+       document.getElementsByTagName( 'head' )[0].appendChild( script );
+}() );
index f70a1b0..8fe8c61 100644 (file)
@@ -6859,9 +6859,6 @@ parsoid=wt2html,wt2wt
 </tbody></table>
 !! end
 
-
-# PHP throws away the (semi-broken) "foo" class here; Parsoid
-# preserves it.
 !!test
 Parsoid: Recover better from broken table attributes
 !!options
@@ -6872,7 +6869,7 @@ parsoid=wt2html
 foo
 |}
 !!html/php+tidy
-<table>
+<table class="foo">
 <tr>
 <td class="bar">
 <p>foo</p>
@@ -20616,7 +20613,7 @@ __TOC__
 </div>
 
 <h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></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: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup class="a"> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
@@ -23407,20 +23404,9 @@ HTML tag with broken attribute value quoting
 !! wikitext
 <span title="Hello world>Foo</span>
 !! html/php
-<p><span>Foo</span>
-</p>
-!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
-!! end
-
-!! test
-Parsoid-only: HTML tag with broken attribute value quoting
-!! options
-parsoid
-!! wikitext
-<span title="Hello world>Foo</span>
-!! html
+!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
 !! end
@@ -23434,7 +23420,7 @@ Table with broken attribute value quoting
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td></tr></table>
 
 !! html/parsoid
@@ -23455,9 +23441,9 @@ Table with broken attribute value quoting on consecutive lines
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td>
-<td>Bar
+<td style="color:red">Bar
 </td></tr></table>
 
 !! html/parsoid
diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
new file mode 100644 (file)
index 0000000..88875bb
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @group GlobalFunctions
+ * @covers ::wfArrayPlus2d
+ */
+class WfArrayPlus2dTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider provideArrays
+        */
+       public function testWfArrayPlus2d( $baseArray, $newValues, $expected, $testName ) {
+               $this->assertEquals(
+                       $expected,
+                       wfArrayPlus2d( $baseArray, $newValues ),
+                       $testName
+               );
+       }
+
+       /**
+        * Provider for testing wfArrayPlus2d
+        *
+        * @return array
+        */
+       public static function provideArrays() {
+               return array(
+                       // target array, new values array, expected result
+                       array(
+                               array( 0 => '1dArray' ),
+                               array( 1 => '1dArray' ),
+                               array( 0 => '1dArray', 1 => '1dArray' ),
+                               "Test simple union of two arrays with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 1 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray', 1 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '1dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with same keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 1 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ), 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with same keys in the value array",
+                       ),
+               );
+       }
+}
index 8c8b8b2..ee2b278 100644 (file)
@@ -142,20 +142,20 @@ class OutputPageTest extends MediaWikiTestCase {
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
                                "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
-                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.foo\u0026only=scripts\u0026skin=fallback\u0026*");'
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.foo\u0026only=scripts\u0026skin=fallback");'
                                        . "\n} );</script>"
                        ),
                        array(
                                // Don't condition wrap raw modules (like the startup module)
                                array( 'test.raw', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script async src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback&amp;*"></script>'
+                               '<script async src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback"></script>'
                        ),
                        // Load module styles only
                        // This also tests the order the modules are put into the url
                        array(
                                array( array( 'test.baz', 'test.foo', 'test.bar' ), ResourceLoaderModule::TYPE_STYLES ),
 
-                               '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback&amp;*">'
+                               '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback">'
                        ),
                        // Load private module (only=scripts)
                        array(
@@ -180,16 +180,16 @@ class OutputPageTest extends MediaWikiTestCase {
                        // noscript group
                        array(
                                array( 'test.noscript', ResourceLoaderModule::TYPE_STYLES ),
-                               '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.noscript&amp;only=styles&amp;skin=fallback&amp;*"></noscript>'
+                               '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.noscript&amp;only=styles&amp;skin=fallback"></noscript>'
                        ),
                        // Load two modules in separate groups
                        array(
                                array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
                                "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
-                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.bar\u0026skin=fallback\u0026*");'
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.bar\u0026skin=fallback");'
                                        . "\n} );</script>\n"
                                        . "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
-                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.foo\u0026skin=fallback\u0026*");'
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.foo\u0026skin=fallback");'
                                        . "\n} );</script>"
                        ),
                );
index f894f87..affb0fa 100644 (file)
@@ -674,6 +674,10 @@ class ApiResultTest extends MediaWikiTestCase {
                                ApiResult::META_TYPE => 'BCkvp',
                                ApiResult::META_KVP_KEY_NAME => 'key',
                        ),
+                       'kvpmerge' => array( 'x' => 'a', 'y' => array( 'b' ), 'z' => array( 'c' => 'd' ),
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_MERGE => true,
+                       ),
                        'emptyDefault' => array( '_dummy' => 1 ),
                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                        '_dummy' => 1,
@@ -858,6 +862,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'assoc',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               'x' => 'a',
+                                               'y' => array( 'b', ApiResult::META_TYPE => 'array' ),
+                                               'z' => array( 'c' => 'd', ApiResult::META_TYPE => 'assoc' ),
+                                               ApiResult::META_TYPE => 'assoc',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -889,6 +900,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'assoc',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => (object)array(
+                                               'x' => 'a',
+                                               'y' => array( 'b', ApiResult::META_TYPE => 'array' ),
+                                               'z' => (object)array( 'c' => 'd', ApiResult::META_TYPE => 'assoc' ),
+                                               ApiResult::META_TYPE => 'assoc',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -920,6 +938,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               $kvp( 'name', 'x', 'value', 'a' ),
+                                               $kvp( 'name', 'y', 'value', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -951,6 +976,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               $kvp( 'name', 'x', '*', 'a' ),
+                                               $kvp( 'name', 'y', '*', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -986,6 +1018,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               (object)$kvp( 'name', 'x', 'value', 'a' ),
+                                               (object)$kvp( 'name', 'y', 'value', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               (object)array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -1025,6 +1064,11 @@ class ApiResultTest extends MediaWikiTestCase {
                                                (object)array( 'key' => 'x', 'value' => 'a' ),
                                                (object)array( 'key' => 'y', 'value' => 'b' ),
                                        ),
+                                       'kvpmerge' => array(
+                                               (object)array( 'name' => 'x', 'value' => 'a' ),
+                                               (object)array( 'name' => 'y', 'value' => array( 'b' ) ),
+                                               (object)array( 'name' => 'z', 'c' => 'd' ),
+                                       ),
                                        'emptyDefault' => array(),
                                        'emptyAssoc' => (object)array(),
                                        '_dummy' => 1,
index 05c32a0..f12cf5b 100644 (file)
@@ -28,6 +28,13 @@ use TestingAccessWrapper;
 
 class LineFormatterTest extends MediaWikiTestCase {
 
+       public function setUp() {
+               if ( !class_exists( 'Monolog\Formatter\LineFormatter' ) ) {
+                       $this->markTestSkipped( 'This test requires monolog to be installed' );
+               }
+               parent::setUp();
+       }
+
        /**
         * @covers LineFormatter::normalizeException
         */
index 65db7e4..551d3a7 100644 (file)
@@ -75,11 +75,11 @@ class MigrateFileRepoLayoutTest extends MediaWikiTestCase {
        }
 
        protected function tearDown() {
-       foreach ( glob( $this->tmpPrefix . '*' ) as $directory ) {
-               $this->deleteFilesRecursively( $directory );
-       }
+               foreach ( glob( $this->tmpPrefix . '*' ) as $directory ) {
+                       $this->deleteFilesRecursively( $directory );
+               }
 
-       unlink( $this->tmpFilepath );
+               unlink( $this->tmpFilepath );
 
                parent::tearDown();
        }
diff --git a/tests/phpunit/includes/libs/IPSetTest.php b/tests/phpunit/includes/libs/IPSetTest.php
deleted file mode 100644 (file)
index 5bbacef..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-
-/**
- * @group IPSet
- */
-class IPSetTest extends PHPUnit_Framework_TestCase {
-       /**
-        * Provides test cases for IPSetTest::testIPSet
-        *
-        * Returns an array of test cases. Each case is an array of (description,
-        * config, tests).  Description is just text output for failure messages,
-        * config is an array constructor argument for IPSet, and the tests are
-        * an array of IP => expected (boolean) result against the config dataset.
-        */
-       public static function provideIPSets() {
-               return array(
-                       array(
-                               'old_list_subset',
-                               array(
-                                       '208.80.152.162',
-                                       '10.64.0.123',
-                                       '10.64.0.124',
-                                       '10.64.0.125',
-                                       '10.64.0.126',
-                                       '10.64.0.127',
-                                       '10.64.0.128',
-                                       '10.64.0.129',
-                                       '10.64.32.104',
-                                       '10.64.32.105',
-                                       '10.64.32.106',
-                                       '10.64.32.107',
-                                       '91.198.174.45',
-                                       '91.198.174.46',
-                                       '91.198.174.47',
-                                       '91.198.174.57',
-                                       '2620:0:862:1:A6BA:DBFF:FE30:CFB3',
-                                       '91.198.174.58',
-                                       '2620:0:862:1:A6BA:DBFF:FE38:FFDA',
-                                       '208.80.152.16',
-                                       '208.80.152.17',
-                                       '208.80.152.18',
-                                       '208.80.152.19',
-                                       '91.198.174.102',
-                                       '91.198.174.103',
-                                       '91.198.174.104',
-                                       '91.198.174.105',
-                                       '91.198.174.106',
-                                       '91.198.174.107',
-                                       '91.198.174.81',
-                                       '2620:0:862:1:26B6:FDFF:FEF5:B2D4',
-                                       '91.198.174.82',
-                                       '2620:0:862:1:26B6:FDFF:FEF5:ABB4',
-                                       '10.20.0.113',
-                                       '2620:0:862:102:26B6:FDFF:FEF5:AD9C',
-                                       '10.20.0.114',
-                                       '2620:0:862:102:26B6:FDFF:FEF5:7C38',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.64.0.122' => false,
-                                       '10.64.0.123' => true,
-                                       '10.64.0.124' => true,
-                                       '10.64.0.129' => true,
-                                       '10.64.0.130' => false,
-                                       '91.198.174.81' => true,
-                                       '91.198.174.80' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:FFFF:FFFF:FFFF:FFFF' => false,
-                                       '2001:db8::1234' => false,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb3' => false,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb4' => true,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb5' => false,
-                               ),
-                       ),
-                       array(
-                               'new_cidr_set',
-                               array(
-                                       '208.80.154.0/26',
-                                       '2620:0:861:1::/64',
-                                       '208.80.154.128/26',
-                                       '2620:0:861:2::/64',
-                                       '208.80.154.64/26',
-                                       '2620:0:861:3::/64',
-                                       '208.80.155.96/27',
-                                       '2620:0:861:4::/64',
-                                       '10.64.0.0/22',
-                                       '2620:0:861:101::/64',
-                                       '10.64.16.0/22',
-                                       '2620:0:861:102::/64',
-                                       '10.64.32.0/22',
-                                       '2620:0:861:103::/64',
-                                       '10.64.48.0/22',
-                                       '2620:0:861:107::/64',
-                                       '91.198.174.0/25',
-                                       '2620:0:862:1::/64',
-                                       '10.20.0.0/24',
-                                       '2620:0:862:102::/64',
-                                       '10.128.0.0/24',
-                                       '2620:0:863:101::/64',
-                                       '10.2.4.26',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => true,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => true,
-                                       '10.128.0.0' => true,
-                                       '10.64.17.55' => true,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => true,
-                               ),
-                       ),
-                       array(
-                               'empty_set',
-                               array(),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => false,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => false,
-                                       '10.128.0.0' => false,
-                                       '10.64.17.55' => false,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => false,
-                               ),
-                       ),
-                       array(
-                               'edge_cases',
-                               array(
-                                       '0.0.0.0',
-                                       '255.255.255.255',
-                                       '::',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
-                                       '10.10.10.10/25', // host bits intentional
-                               ),
-                               array(
-                                       '0.0.0.0' => true,
-                                       '255.255.255.255' => true,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => false,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => false,
-                                       '10.128.0.0' => false,
-                                       '10.64.17.55' => false,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => false,
-                                       '10.10.9.255' => false,
-                                       '10.10.10.0' => true,
-                                       '10.10.10.1' => true,
-                                       '10.10.10.10' => true,
-                                       '10.10.10.126' => true,
-                                       '10.10.10.127' => true,
-                                       '10.10.10.128' => false,
-                                       '10.10.10.177' => false,
-                                       '10.10.10.255' => false,
-                                       '10.10.11.0' => false,
-                               ),
-                       ),
-                       array(
-                               'exercise_optimizer',
-                               array(
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffe:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffd:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffc:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffb:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffa:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8000/113',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:0/113',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff8:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff7:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff6:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff5:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff4:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff3:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff2:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff1:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff0:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffef:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffee:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffec:0/111',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffeb:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffea:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe9:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe8:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe7:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe6:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe5:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe4:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe3:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe2:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe1:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe0:0/110',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:0/107',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0/107',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '::' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ff9f:ffff' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:1234' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffed:ffff' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff4:4444' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8080' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true,
-                               ),
-                       ),
-               );
-       }
-
-       /**
-        * Validates IPSet loading and matching code
-        *
-        * @covers IPSet
-        * @dataProvider provideIPSets
-        */
-       public function testIPSet( $desc, array $cfg, array $tests ) {
-               $ipset = new IPSet( $cfg );
-               foreach ( $tests as $ip => $expected ) {
-                       $result = $ipset->match( $ip );
-                       $this->assertEquals( $expected, $result, "Incorrect match() result for $ip in dataset $desc" );
-               }
-       }
-}
index fcc15d3..f5814e4 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * @author Matthias Mullie <mmullie@wikimedia.org>
+ * @group BagOStuff
  */
 class BagOStuffTest extends MediaWikiTestCase {
        /** @var BagOStuff */
@@ -169,5 +170,12 @@ class BagOStuffTest extends MediaWikiTestCase {
 
                $value3 = $this->cache->getScopedLock( $key, 0 );
                $this->assertType( 'ScopedCallback', $value3, 'Lock returned callback after release' );
+               unset( $value3 );
+
+               $value1 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
+               $value2 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
+
+               $this->assertType( 'ScopedCallback', $value1, 'First reentrant call returned lock' );
+               $this->assertType( 'ScopedCallback', $value1, 'Second reentrant call returned lock' );
        }
 }
index ade8fc4..4fca002 100644 (file)
@@ -1030,7 +1030,7 @@ class LanguageTest extends LanguageClassesTestCase {
                return array(
                        array(
                                0,
-                               "0 B",
+                               "0 bytes",
                                "Zero bytes"
                        ),
                        array(
@@ -1046,7 +1046,7 @@ class LanguageTest extends LanguageClassesTestCase {
                        array(
                                1024 * 1024 * 1024,
                                "1 GB",
-                               "1 gigabytes"
+                               "1 gigabyte"
                        ),
                        array(
                                pow( 1024, 4 ),
index 60b2802..0a29af5 100644 (file)
@@ -71,6 +71,8 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js',
@@ -88,6 +90,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
                        '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',
                ),
                'dependencies' => array(
                        'jquery.accessKeyLabel',
@@ -113,6 +116,8 @@ return array(
                        'mediawiki.api.upload',
                        'mediawiki.api.watch',
                        'mediawiki.ForeignApi.core',
+                       'mediawiki.ForeignUpload',
+                       'mediawiki.ForeignStructuredUpload',
                        'mediawiki.jqueryMsg',
                        'mediawiki.messagePoster',
                        'mediawiki.RegExp',
@@ -127,6 +132,7 @@ return array(
                        'mediawiki.language',
                        'mediawiki.cldr',
                        'mediawiki.cookie',
+                       'mediawiki.experiments',
                        'test.mediawiki.qunit.testrunner',
                ),
        )
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js
new file mode 100644 (file)
index 0000000..3007416
--- /dev/null
@@ -0,0 +1,30 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.ForeignStructuredUpload', QUnit.newMwEnvironment( {} ) );
+
+       QUnit.test( 'Constructor check', function ( assert ) {
+               QUnit.expect( 3 );
+               var upload = new mw.ForeignStructuredUpload();
+
+               assert.ok( upload, 'The ForeignUpload constructor is working.' );
+               assert.ok( upload.descriptions, 'The descriptions array was initialized properly' );
+               assert.ok( upload.categories, 'The categories array was initialized properly' );
+       } );
+
+       QUnit.test( 'getText', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var upload = new mw.ForeignStructuredUpload();
+
+               // Set basic information
+               upload.addDescription( 'en', 'Test description one two three' );
+               upload.addDescription( 'en-x-piglatin', 'Esttay escriptionday unway ootay eethray' );
+               upload.setDate( '1776-07-04' );
+               upload.addCategories( [ 'Test 1', 'Test 2' ] );
+               upload.addCategories( [ 'Test 3' ] );
+
+               // Fake the user
+               this.sandbox.stub( upload, 'getUser' ).returns( 'Test user' );
+
+               assert.strictEqual( upload.getText().trim(), '{{Information\n|description={{en|Test description one two three}}\n{{en-x-piglatin|Esttay escriptionday unway ootay eethray}}\n|date=1776-07-04\n|source=Test user\n|author=Test user\n}}\n\n\n\n[[Category:Test 1]]\n[[Category:Test 2]]\n[[Category:Test 3]]' );
+       } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js
new file mode 100644 (file)
index 0000000..98b9678
--- /dev/null
@@ -0,0 +1,12 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.ForeignUpload', QUnit.newMwEnvironment( {} ) );
+
+       QUnit.test( 'Constructor check', function ( assert ) {
+               QUnit.expect( 3 );
+               var upload = new mw.ForeignUpload();
+
+               assert.ok( upload, 'The ForeignUpload constructor is working.' );
+               assert.strictEqual( upload.targetHost, 'commons.wikimedia.org', 'Default target host is correct' );
+               assert.ok( upload.api instanceof mw.ForeignApi, 'API is correctly configured to point at a foreign wiki.' );
+       } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js
new file mode 100644 (file)
index 0000000..774b205
--- /dev/null
@@ -0,0 +1,63 @@
+( function ( mw ) {
+
+       var getBucket = mw.experiments.getBucket;
+
+       function createExperiment() {
+               return {
+                       name: 'experiment',
+                       enabled: true,
+                       buckets: {
+                               control: 0.25,
+                               A: 0.25,
+                               B: 0.25,
+                               C: 0.25
+                       }
+               };
+       }
+
+       QUnit.module( 'mediawiki.experiments' );
+
+       QUnit.test( 'getBucket( experiment, token )', 4, function ( assert ) {
+               var experiment = createExperiment(),
+                       token = '123457890';
+
+               assert.equal(
+                       getBucket( experiment, token ),
+                       getBucket( experiment, token ),
+                       'It returns the same bucket for the same experiment-token pair.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.buckets = {
+                       A: 0.314159265359
+               };
+
+               assert.equal(
+                       'A',
+                       getBucket( experiment, token ),
+                       'It returns the bucket if only one is defined.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.enabled = false;
+
+               assert.equal(
+                       'control',
+                       getBucket( experiment, token ),
+                       'It returns "control" if the experiment is disabled.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.buckets = {};
+
+               assert.equal(
+                       'control',
+                       getBucket( experiment, token ),
+                       'It returns "control" if the experiment doesn\'t have any buckets.'
+               );
+       } );
+
+}( mediaWiki ) );
index c8f0011..fcf6dda 100644 (file)
        } );
 
        // @import (bug 31676)
-       QUnit.asyncTest( 'mw.loader.implement( styles has @import)', 5, function ( assert ) {
+       QUnit.asyncTest( 'mw.loader.implement( styles has @import)', 7, function ( assert ) {
                var isJsExecuted, $element;
 
                mw.loader.implement(
                        'test.implement.import',
                        function () {
-                               assert.strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
+                               assert.strictEqual( isJsExecuted, undefined, 'script not executed multiple times' );
                                isJsExecuted = true;
 
-                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'ready', 'module state is "ready" while implement() is executing javascript' );
+                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'loading', 'module state during implement() script execution' );
 
                                $element = $( '<div class="mw-test-implement-import">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
-                               assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
+                               assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'messages load before script execution' );
 
                                assertStyleAsync( assert, $element, 'float', 'right', function () {
                                        assert.equal( $element.css( 'text-align' ), 'center',
                        }
                );
 
-               mw.loader.load( 'test.implement' );
-
+               mw.loader.using( 'test.implement.import' ).always( function () {
+                       assert.strictEqual( isJsExecuted, true, 'script executed' );
+                       assert.equal( mw.loader.getState( 'test.implement.import' ), 'ready', 'module state after script execution' );
+               } );
        } );
 
        QUnit.asyncTest( 'mw.loader.implement( dependency with styles )', 4, function ( assert ) {
index 25bca87..d39d43b 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -190,6 +190,7 @@ function wfStreamThumb( array $params ) {
                                if ( $targetFile->exists() ) {
                                        $newThumbName = $targetFile->thumbName( $params );
                                        if ( $isOld ) {
+                                               /** @var array $bits */
                                                $newThumbUrl = $targetFile->getArchiveThumbUrl(
                                                        $bits[0] . '!' . $targetFile->getName(), $newThumbName );
                                        } else {
@@ -221,7 +222,7 @@ function wfStreamThumb( array $params ) {
                wfThumbErrorText( 404, "The source file '$fileName' does not exist." );
                return;
        } elseif ( $img->getPath() === false ) {
-               wfThumbErrorText( 500, "The source file '$fileName' is not locally accessible." );
+               wfThumbErrorText( 400, "The source file '$fileName' is not locally accessible." );
                return;
        }
 
@@ -316,22 +317,25 @@ function wfStreamThumb( array $params ) {
 
        $user = RequestContext::getMain()->getUser();
        if ( !wfThumbIsStandard( $img, $params ) && $user->pingLimiter( 'renderfile-nonstandard' ) ) {
-               wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+               wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
                return;
        } elseif ( $user->pingLimiter( 'renderfile' ) ) {
-               wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+               wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
                return;
        }
 
        list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath );
 
-       /** @var MediaTransformOutput|bool $thumb */
+       /** @var MediaTransformOutput|MediaTransformError|bool $thumb */
 
        // Check for thumbnail generation errors...
        $msg = wfMessage( 'thumbnail_error' );
        $errorCode = 500;
        if ( !$thumb ) {
                $errorMsg = $errorMsg ?: $msg->rawParams( 'File::transform() returned false' )->escaped();
+               if ( $errorMsg instanceof MessageSpecifier && $errorMsg->getKey() === 'thumbnail_image-failure-limit' ) {
+                       $errorCode = 429;
+               }
        } elseif ( $thumb->isError() ) {
                $errorMsg = $thumb->getHtmlMsg();
        } elseif ( !$thumb->hasFile() ) {
@@ -412,7 +416,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
                                'fallback' => function () {
                                        return wfMessage( 'generic-pool-error' )->parse();
                                },
-                               'error' => function ( $status ) {
+                               'error' => function ( Status $status ) {
                                        return $status->getHTML();
                                }
                        )
@@ -427,6 +431,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
                // Tried to select a page on a non-paged file?
        }
 
+       /** @noinspection PhpUnusedLocalVariableInspection */
        $done = true; // no PHP fatal occured
 
        if ( !$thumb || $thumb->isError() ) {
@@ -497,7 +502,7 @@ function wfExtractThumbRequestInfo( $thumbRel ) {
  */
 function wfExtractThumbParams( $file, $params ) {
        if ( !isset( $params['thumbName'] ) ) {
-               throw new MWException( "No thumbnail name passed to wfExtractThumbParams" );
+               throw new InvalidArgumentException( "No thumbnail name passed to wfExtractThumbParams" );
        }
 
        $thumbname = $params['thumbName'];
@@ -536,7 +541,7 @@ function wfExtractThumbParams( $file, $params ) {
 
        // As a last ditch fallback, use the traditional common parameters
        if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
-               list( /* all */, $pagefull, $pagenum, $size ) = $matches;
+               list( /* all */, /* pagefull */, $pagenum, $size ) = $matches;
                $params['width'] = $size;
                if ( $pagenum ) {
                        $params['page'] = $pagenum;
@@ -551,11 +556,11 @@ function wfExtractThumbParams( $file, $params ) {
  * Output a thumbnail generation error message
  *
  * @param int $status
- * @param string $msg Plain text (will be html escaped)
+ * @param string $msgText Plain text (will be html escaped)
  * @return void
  */
 function wfThumbErrorText( $status, $msgText ) {
-       return wfThumbError( $status, htmlspecialchars( $msgText ) );
+       wfThumbError( $status, htmlspecialchars( $msgText ) );
 }
 
 /**
@@ -570,10 +575,8 @@ function wfThumbError( $status, $msgHtml ) {
 
        header( 'Cache-Control: no-cache' );
        header( 'Content-Type: text/html; charset=utf-8' );
-       if ( $status == 400 ) {
-               HttpStatus::header( 400 );
-       } elseif ( $status == 404 ) {
-               HttpStatus::header( 404 );
+       if ( $status == 400 || $status == 404 || $status == 429 ) {
+               HttpStatus::header( $status );
        } elseif ( $status == 403 ) {
                HttpStatus::header( 403 );
                header( 'Vary: Cookie' );