aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--RELEASE-NOTES-1.441
-rw-r--r--includes/MediaWikiServices.php2
-rw-r--r--includes/Storage/PageUpdater.php44
-rw-r--r--includes/api/i18n/fr.json3
-rw-r--r--includes/api/i18n/sr-ec.json2
-rw-r--r--includes/htmlform/CodexHTMLForm.php2
-rw-r--r--includes/htmlform/HTMLForm.php6
-rw-r--r--includes/htmlform/HTMLFormField.php20
-rw-r--r--includes/htmlform/OOUIHTMLForm.php6
-rw-r--r--includes/htmlform/fields/HTMLCheckMatrix.php48
-rw-r--r--includes/htmlform/fields/HTMLRestrictionsField.php2
-rw-r--r--includes/installer/i18n/cs.json3
-rw-r--r--includes/parser/Parser.php55
-rw-r--r--includes/parser/Parsoid/Config/DataAccess.php13
-rw-r--r--includes/parser/Parsoid/ParsoidParser.php50
-rw-r--r--includes/parser/Parsoid/ParsoidParserFactory.php4
-rw-r--r--includes/specialpage/ContributionsSpecialPage.php2
-rw-r--r--languages/i18n/ang.json60
-rw-r--r--languages/i18n/az.json2
-rw-r--r--languages/i18n/btm.json17
-rw-r--r--languages/i18n/codex/sr-ec.json2
-rw-r--r--languages/i18n/cop.json16
-rw-r--r--languages/i18n/cs.json30
-rw-r--r--languages/i18n/de.json1
-rw-r--r--languages/i18n/en.json1
-rw-r--r--languages/i18n/fi.json4
-rw-r--r--languages/i18n/ja.json4
-rw-r--r--languages/i18n/krc.json6
-rw-r--r--languages/i18n/ms.json7
-rw-r--r--languages/i18n/pa.json36
-rw-r--r--languages/i18n/preferences/ang.json9
-rw-r--r--languages/i18n/preferences/cs.json2
-rw-r--r--languages/i18n/qqq.json7
-rw-r--r--languages/i18n/ru.json10
-rw-r--r--package-lock.json923
-rw-r--r--package.json2
-rw-r--r--resources/Resources.php1
-rw-r--r--resources/src/mediawiki.htmlform.styles/styles.less6
-rw-r--r--resources/src/mediawiki.htmlform/cond-state.js6
-rw-r--r--resources/src/mediawiki.special.block/SpecialBlock.vue61
-rw-r--r--resources/src/mediawiki.special.block/components/BlockLog.vue2
-rw-r--r--resources/src/mediawiki.special.block/components/UserLookup.vue8
-rw-r--r--resources/src/mediawiki.special.block/stores/block.js33
-rw-r--r--resources/src/mediawiki.special.userlogin.common.styles/authentication-popup.less4
-rw-r--r--resources/src/mediawiki.special/contribute.less2
-rw-r--r--resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js15
-rw-r--r--resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js16
-rw-r--r--tests/common/TestsAutoLoader.php1
-rw-r--r--tests/jest/mediawiki.special.block/SpecialBlock.test.js4
-rw-r--r--tests/parser/parserTests.txt89
-rw-r--r--tests/phpunit/includes/content/WikitextContentHandlerIntegrationTest.php11
-rw-r--r--tests/phpunit/integration/includes/Rest/Handler/Helper/HtmlOutputRendererHelperTest.php3
-rw-r--r--tests/phpunit/integration/includes/parser/Parsoid/ParsoidParserTest.php12
-rw-r--r--tests/phpunit/mocks/MockWikiMapTrait.php28
-rw-r--r--tests/phpunit/unit/includes/Rest/Handler/PageHandlerTestTrait.php3
-rw-r--r--tests/phpunit/unit/includes/parser/Parsoid/ParsoidParserFactoryTest.php8
56 files changed, 993 insertions, 722 deletions
diff --git a/RELEASE-NOTES-1.44 b/RELEASE-NOTES-1.44
index 7190734606ab..4d598c72c6ab 100644
--- a/RELEASE-NOTES-1.44
+++ b/RELEASE-NOTES-1.44
@@ -102,6 +102,7 @@ For notes on 1.43.x and older releases, see HISTORY.
===== Changed development-only external libraries =====
* Updated nikic/php-parser from ^4.10.2 to ^5.3.1.
* Updated phpunit/phpunit from 9.6.19 to 9.6.21.
+* Updated stylelint-config-wikimedia from v0.17.2 to v0.18.0.
* …
==== Removed external libraries ====
diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php
index 9b3728de2348..fb8be481e5e5 100644
--- a/includes/MediaWikiServices.php
+++ b/includes/MediaWikiServices.php
@@ -118,6 +118,7 @@ use MediaWiki\Parser\Parser;
use MediaWiki\Parser\ParserCache;
use MediaWiki\Parser\ParserCacheFactory;
use MediaWiki\Parser\ParserFactory;
+use MediaWiki\Parser\Parsoid\Config\DataAccess;
use MediaWiki\Parser\Parsoid\Config\PageConfigFactory;
use MediaWiki\Parser\Parsoid\Config\SiteConfig;
use MediaWiki\Parser\Parsoid\HtmlTransformFactory;
@@ -209,7 +210,6 @@ use Wikimedia\NonSerializable\NonSerializableTrait;
use Wikimedia\ObjectCache\BagOStuff;
use Wikimedia\ObjectCache\WANObjectCache;
use Wikimedia\ObjectFactory\ObjectFactory;
-use Wikimedia\Parsoid\Config\DataAccess;
use Wikimedia\Rdbms\ChronologyProtector;
use Wikimedia\Rdbms\ConfiguredReadOnlyMode;
use Wikimedia\Rdbms\DatabaseFactory;
diff --git a/includes/Storage/PageUpdater.php b/includes/Storage/PageUpdater.php
index 569a9299a107..a82f991891fb 100644
--- a/includes/Storage/PageUpdater.php
+++ b/includes/Storage/PageUpdater.php
@@ -1257,8 +1257,6 @@ class PageUpdater {
$slots = $this->revisionStore->updateSlotsOn( $revision, $this->slotsUpdate, $dbw );
- $dbw->endAtomic( __METHOD__ );
-
// Return the slots and revision to the caller
$newRevisionRecord = MutableRevisionRecord::newUpdatedRevisionRecord( $revision, $slots );
$status = PageUpdateStatus::newGood( [
@@ -1275,7 +1273,6 @@ class PageUpdater {
$this->buildEditResult( $newRevisionRecord, false );
- // Do secondary updates once the main changes have been committed...
$wikiPage = $this->getWikiPage(); // TODO: use for legacy hooks only!
$this->prepareDerivedDataUpdater(
$wikiPage,
@@ -1289,8 +1286,9 @@ class PageUpdater {
]
);
+ // Notify the dispatcher of the PageUpdatedEvent during the transaction round
$this->dispatchPageUpdatedEvent();
-
+ // Schedule the secondary updates to run after the transaction round commits
DeferredUpdates::addUpdate(
$this->getAtomicSectionUpdate(
$dbw,
@@ -1303,6 +1301,12 @@ class PageUpdater {
);
}
+ // Mark the earliest point where the transaction round can be committed in CLI mode.
+ // We want to make sure that the event was bound to a round of transactions. We also
+ // want the deferred update to enqueue similarly in both web and CLI modes, in order
+ // to simplify testing assertions.
+ $dbw->endAtomic( __METHOD__ );
+
return $status;
}
@@ -1361,10 +1365,9 @@ class PageUpdater {
$this->buildEditResult( $newRevisionRecord, false );
$dbw = $this->dbProvider->getPrimaryDatabase( $this->getWikiId() );
+ $dbw->startAtomic( __METHOD__ );
if ( $changed || $this->forceEmptyRevision ) {
- $dbw->startAtomic( __METHOD__ );
-
// Get the latest page_latest value while locking it.
// Do a CAS style check to see if it's the same as when this method
// started. If it changed then bail out before touching the DB.
@@ -1411,12 +1414,11 @@ class PageUpdater {
$tags
);
- $this->dispatchPageUpdatedEvent();
-
- $dbw->endAtomic( __METHOD__ );
-
// Return the new revision to the caller
$status->setNewRevision( $newRevisionRecord );
+
+ // Notify the dispatcher of the PageUpdatedEvent during the transaction round
+ $this->dispatchPageUpdatedEvent();
} else {
// T34948: revision ID must be set to page {{REVISIONID}} and
// related variables correctly. Likewise for {{REVISIONUSER}} (T135261).
@@ -1431,7 +1433,7 @@ class PageUpdater {
$this->getTitle()->invalidateCache( $now );
}
- // Do secondary updates once the main changes have been committed...
+ // Schedule the secondary updates to run after the transaction round commits.
// NOTE: the updates have to be processed before sending the response to the client
// (DeferredUpdates::PRESEND), otherwise the client may already be following the
// HTTP redirect to the standard view before derived data has been created - most
@@ -1448,6 +1450,12 @@ class PageUpdater {
DeferredUpdates::PRESEND
);
+ // Mark the earliest point where the transaction round can be committed in CLI mode.
+ // We want to make sure that the event was bound to a round of transactions. We also
+ // want the deferred update to enqueue similarly in both web and CLI modes, in order
+ // to simplify testing assertions.
+ $dbw->endAtomic( __METHOD__ );
+
return $status;
}
@@ -1534,14 +1542,12 @@ class PageUpdater {
$tags
);
- $this->dispatchPageUpdatedEvent();
-
- $dbw->endAtomic( __METHOD__ );
-
// Return the new revision to the caller
$status->setNewRevision( $newRevisionRecord );
- // Do secondary updates once the main changes have been committed...
+ // Notify the dispatcher of the PageUpdatedEvent during the transaction round
+ $this->dispatchPageUpdatedEvent();
+ // Schedule the secondary updates to run after the transaction round commits
DeferredUpdates::addUpdate(
$this->getAtomicSectionUpdate(
$dbw,
@@ -1553,6 +1559,12 @@ class PageUpdater {
DeferredUpdates::PRESEND
);
+ // Mark the earliest point where the transaction round can be committed in CLI mode.
+ // We want to make sure that the event was bound to a round of transactions. We also
+ // want the deferred update to enqueue similarly in both web and CLI modes, in order
+ // to simplify testing assertions.
+ $dbw->endAtomic( __METHOD__ );
+
return $status;
}
diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json
index 3a0fe44db8ee..6712b252ffae 100644
--- a/includes/api/i18n/fr.json
+++ b/includes/api/i18n/fr.json
@@ -35,6 +35,7 @@
"Pols12",
"Raphoraph",
"Raulel",
+ "Rigoluce",
"Terio legale",
"The RedBurn",
"Thibaut120094",
@@ -86,7 +87,7 @@
"apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit <code>hideuser</code>).",
"apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
"apihelp-block-param-reblock": "Si l’utilisateur est actuellement bloqué par un seul blocage, remplace le blocage existant. Si l'utilisateur est bloqué plusieurs fois, cette opération échouera. Utilisez plutôt le paramètre id pour spécifier le blocage à remplacer.",
- "apihelp-block-param-newblock": "Ajoute un autre blocage même si l'utilisateur est déjà bloqué.",
+ "apihelp-block-param-newblock": "Ajouter un autre blocage même si l'utilisateur est déjà bloqué.",
"apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
"apihelp-block-param-watchlistexpiry": "Horodatage d’expiration de la liste de suivi. Omettre complètement ce paramètre pour laisser l’expiration actuelle inchangée.",
"apihelp-block-param-tags": "Les balises de modification à appliquer à l’entrée du journal des blocages.",
diff --git a/includes/api/i18n/sr-ec.json b/includes/api/i18n/sr-ec.json
index 2c53d1f02bd1..9f01fc23f74a 100644
--- a/includes/api/i18n/sr-ec.json
+++ b/includes/api/i18n/sr-ec.json
@@ -14,6 +14,7 @@
"apihelp-main-param-format": "Формат излаза.",
"apihelp-main-param-maxlag": "Максимално кашњење може се користити када је Медијавики инсталиран на репликовани кластер базе података. Да би се сачувало од радња које ће изазвати још кашњења услед репликације сајта, овај параметар може да учини да клијент чека док кашњење због репликације не буде мање од одређене вредности. У случају прекомерних кашњења, код грешке <samp>maxlag</samp> бива враћен са поруком као што је <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Погледајте [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Приручник: параметар Maxlag]] за више информација.",
"apihelp-block-summary": "Блокирање корисника.",
+ "apihelp-block-param-id": "ID блока за измену.",
"apihelp-block-param-user": "Корисник ког желите да блокирате",
"apihelp-block-param-reason": "Разлог за блокирање.",
"apihelp-block-param-allowusertalk": "Омогући уреднику да уређује сопствену страницу за разговор (зависи од <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
@@ -99,6 +100,7 @@
"apierror-filedoesnotexist": "Датотека не постоји.",
"apierror-invalidmethod": "Неважећи HTTP метод. Размотрите коришћење команде GET или POST.",
"apierror-mustbeloggedin-generic": "Морате бити пријављени.",
+ "apierror-nosuchblockid": "Нема блока са ID $1.",
"apierror-revisions-badid": "Није пронађена измена за параметар <var>$1</var>.",
"apierror-unknownerror-nocode": "Непозната грешка.",
"apierror-unknownerror": "Непозната грешка: „$1”.",
diff --git a/includes/htmlform/CodexHTMLForm.php b/includes/htmlform/CodexHTMLForm.php
index 256fd8c2b019..fd0e9337896f 100644
--- a/includes/htmlform/CodexHTMLForm.php
+++ b/includes/htmlform/CodexHTMLForm.php
@@ -168,7 +168,7 @@ class CodexHTMLForm extends HTMLForm {
$submitName = $this->mSubmitName;
$submitTooltip = [];
- if ( isset( $this->mSubmitTooltip ) ) {
+ if ( $this->mSubmitTooltip !== null ) {
$submitTooltip += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
}
diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php
index d7b2c33622f7..dec8d43c1828 100644
--- a/includes/htmlform/HTMLForm.php
+++ b/includes/htmlform/HTMLForm.php
@@ -1534,15 +1534,15 @@ class HTMLForm extends ContextSource {
if ( $this->mShowSubmit ) {
$attribs = [];
- if ( isset( $this->mSubmitID ) ) {
+ if ( $this->mSubmitID !== null ) {
$attribs['id'] = $this->mSubmitID;
}
- if ( isset( $this->mSubmitName ) ) {
+ if ( $this->mSubmitName !== null ) {
$attribs['name'] = $this->mSubmitName;
}
- if ( isset( $this->mSubmitTooltip ) ) {
+ if ( $this->mSubmitTooltip !== null ) {
$attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
}
diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php
index 397242bdb20d..4406ff45ad74 100644
--- a/includes/htmlform/HTMLFormField.php
+++ b/includes/htmlform/HTMLFormField.php
@@ -28,9 +28,9 @@ abstract class HTMLFormField {
/** @var array|array[] */
public $mParams;
- /** @var callable(mixed,array,HTMLForm):(StatusValue|string|bool|Message) */
+ /** @var callable(mixed,array,HTMLForm):(StatusValue|string|bool|Message)|null */
protected $mValidationCallback;
- /** @var callable(mixed,array,HTMLForm):(StatusValue|string|bool|Message) */
+ /** @var callable(mixed,array,HTMLForm):(StatusValue|string|bool|Message)|null */
protected $mFilterCallback;
/** @var string */
protected $mName;
@@ -449,7 +449,7 @@ abstract class HTMLFormField {
return $this->msg( 'htmlform-required' );
}
- if ( !isset( $this->mValidationCallback ) ) {
+ if ( $this->mValidationCallback === null ) {
return true;
}
@@ -473,7 +473,7 @@ abstract class HTMLFormField {
* @return mixed
*/
public function filter( $value, $alldata ) {
- if ( isset( $this->mFilterCallback ) ) {
+ if ( $this->mFilterCallback !== null ) {
$value = ( $this->mFilterCallback )( $value, $alldata, $this->mParent );
}
@@ -664,6 +664,9 @@ abstract class HTMLFormField {
if ( $this->mCondState ) {
$rowAttributes['data-cond-state'] = FormatJson::encode( $this->parseCondStateForClient() );
$rowClasses .= implode( ' ', $this->mCondStateClass );
+ if ( $this->isHidden( $this->mParent->mFieldData ) ) {
+ $rowClasses .= ' mw-htmlform-hide-if-hidden';
+ }
}
if ( $verticalLabel ) {
@@ -730,6 +733,9 @@ abstract class HTMLFormField {
if ( $this->mCondState ) {
$wrapperAttributes['data-cond-state'] = FormatJson::encode( $this->parseCondStateForClient() );
$wrapperAttributes['class'] = array_merge( $wrapperAttributes['class'], $this->mCondStateClass );
+ if ( $this->isHidden( $this->mParent->mFieldData ) ) {
+ $wrapperAttributes['class'][] = 'mw-htmlform-hide-if-hidden';
+ }
}
return Html::rawElement( 'div', $wrapperAttributes, $label . $field ) .
$helptext;
@@ -794,6 +800,9 @@ abstract class HTMLFormField {
}
if ( $this->mCondState ) {
$config['classes'] = array_merge( $config['classes'], $this->mCondStateClass );
+ if ( $this->isHidden( $this->mParent->mFieldData ) ) {
+ $config['classes'][] = 'mw-htmlform-hide-if-hidden';
+ }
}
// the element could specify, that the label doesn't need to be added
@@ -890,6 +899,9 @@ abstract class HTMLFormField {
if ( $this->mCondState ) {
$fieldAttributes['data-cond-state'] = FormatJson::encode( $this->parseCondStateForClient() );
$fieldClasses = array_merge( $fieldClasses, $this->mCondStateClass );
+ if ( $this->isHidden( $this->mParent->mFieldData ) ) {
+ $fieldClasses[] = 'mw-htmlform-hide-if-hidden';
+ }
}
return Html::rawElement( 'div', [ 'class' => $fieldClasses ] + $fieldAttributes,
diff --git a/includes/htmlform/OOUIHTMLForm.php b/includes/htmlform/OOUIHTMLForm.php
index 04c311f66171..07170673a136 100644
--- a/includes/htmlform/OOUIHTMLForm.php
+++ b/includes/htmlform/OOUIHTMLForm.php
@@ -74,15 +74,15 @@ class OOUIHTMLForm extends HTMLForm {
'flags' => $this->mSubmitFlags,
];
- if ( isset( $this->mSubmitID ) ) {
+ if ( $this->mSubmitID !== null ) {
$attribs['id'] = $this->mSubmitID;
}
- if ( isset( $this->mSubmitName ) ) {
+ if ( $this->mSubmitName !== null ) {
$attribs['name'] = $this->mSubmitName;
}
- if ( isset( $this->mSubmitTooltip ) ) {
+ if ( $this->mSubmitTooltip !== null ) {
$attribs += [
'title' => Linker::titleAttrib( $this->mSubmitTooltip ),
'accessKey' => Linker::accesskey( $this->mSubmitTooltip ),
diff --git a/includes/htmlform/fields/HTMLCheckMatrix.php b/includes/htmlform/fields/HTMLCheckMatrix.php
index f894f118c3ed..a0bf967dad6d 100644
--- a/includes/htmlform/fields/HTMLCheckMatrix.php
+++ b/includes/htmlform/fields/HTMLCheckMatrix.php
@@ -6,7 +6,6 @@ use MediaWiki\Html\Html;
use MediaWiki\HTMLForm\HTMLFormField;
use MediaWiki\HTMLForm\HTMLFormFieldRequiredOptionsException;
use MediaWiki\HTMLForm\HTMLNestedFilterable;
-use MediaWiki\Json\FormatJson;
use MediaWiki\Request\WebRequest;
use MediaWiki\Xml\Xml;
@@ -56,6 +55,9 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
if ( $missing ) {
throw new HTMLFormFieldRequiredOptionsException( $this, $missing );
}
+
+ // The label should always be on a separate line above the options
+ $params['vertical-label'] = true;
parent::__construct( $params );
}
@@ -204,50 +206,6 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
}
/**
- * Get the complete table row for the input, including help text,
- * labels, and whatever.
- * We override this function since the label should always be on a separate
- * line above the options in the case of a checkbox matrix, i.e. it's always
- * a "vertical-label".
- *
- * @param string|array $value The value to set the input to
- *
- * @return string Complete HTML table row
- */
- public function getTableRow( $value ) {
- [ $errors, $errorClass ] = $this->getErrorsAndErrorClass( $value );
- $inputHtml = $this->getInputHTML( $value );
- $fieldType = $this->getClassName();
- $helptext = $this->getHelpTextHtmlTable( $this->getHelpText() );
- $cellAttributes = [ 'colspan' => 2 ];
-
- $moreClass = '';
- $moreAttributes = [];
- if ( $this->mCondState ) {
- $moreAttributes['data-cond-state'] = FormatJson::encode( $this->mCondState );
- $moreClass = implode( ' ', $this->mCondStateClass );
- }
-
- $label = $this->getLabelHtml( $cellAttributes );
-
- $field = Html::rawElement(
- 'td',
- [ 'class' => 'mw-input' ] + $cellAttributes,
- $inputHtml . "\n$errors"
- );
-
- $html = Html::rawElement( 'tr',
- [ 'class' => "mw-htmlform-vertical-label $moreClass" ] + $moreAttributes,
- $label );
- $html .= Html::rawElement( 'tr',
- [ 'class' => "mw-htmlform-field-$fieldType {$this->mClass} $errorClass $moreClass" ] +
- $moreAttributes,
- $field );
-
- return $html . $helptext;
- }
-
- /**
* @param WebRequest $request
*
* @return array
diff --git a/includes/htmlform/fields/HTMLRestrictionsField.php b/includes/htmlform/fields/HTMLRestrictionsField.php
index 51640b0e096d..90e2b21878dc 100644
--- a/includes/htmlform/fields/HTMLRestrictionsField.php
+++ b/includes/htmlform/fields/HTMLRestrictionsField.php
@@ -102,7 +102,7 @@ class HTMLRestrictionsField extends HTMLFormField {
return $statusFormatter->getMessage( $value->validity );
}
- if ( isset( $this->mValidationCallback ) ) {
+ if ( $this->mValidationCallback !== null ) {
return call_user_func( $this->mValidationCallback, $value, $alldata, $this->mParent );
}
diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json
index 1da486640835..4e407ed4b33c 100644
--- a/includes/installer/i18n/cs.json
+++ b/includes/installer/i18n/cs.json
@@ -303,6 +303,9 @@
"config-install-done-path": "<strong>Gratulujeme!</strong>\nNainstalovali jste MediaWiki.\n\nInstalátor vytvořil soubor <code>LocalSettings.php</code>.\nTen obsahuje veškerou vaši konfiguraci.\n\nBudete si ho muset stáhnout a uložit do <code>$4</code>. Stažení souboru se mělo spustit automaticky.\n\nPokud se vám stažení nenabídlo nebo jste ho zrušili, můžete ho spustit znovu kliknutím na následující odkaz:\n\n$3\n\n<strong>Poznámka:</strong> Pokud to neuděláte hned, tento vygenerovaný konfigurační soubor nebude později dostupný, pokud instalaci opustíte, aniž byste si ho stáhli.\n\nAž to dokončíte, můžete <strong>[$2 vstoupit do své wiki]</strong>.",
"config-install-success": "MediaWiki byla úspěšně nainstalována. Nyní můžete navštívit <$1$2>, abyste si prohlédli svou novou wiki.\nPokud máte dotazy, podívejte se do našeho seznamu často kladených otázek:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> nebo použijte jedno\nz tam odkazovaných diskusních fór.",
"config-install-db-success": "Databáze byla úspěšně nastavena",
+ "config-install-generic": "Běží úloha „$1“",
+ "config-install-external-domains": "Vytváření externích databází",
+ "config-skip-shared-domain": "Přeskakuji potenciálně sdílenou doménu „$1“",
"config-download-localsettings": "Stáhnout <code>LocalSettings.php</code>",
"config-help": "nápověda",
"config-help-tooltip": "rozbalíte kliknutím",
diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index df04d4d11591..186f0344d43e 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -749,7 +749,7 @@ class Parser {
# Information on limits, for the benefit of users who try to skirt them
if ( $this->svcOptions->get( MainConfigNames::EnableParserLimitReporting ) ) {
- $this->makeLimitReport();
+ $this->makeLimitReport( $this->mOptions, $this->mOutput );
}
$this->mOutput->setFromParserOptions( $options );
@@ -769,43 +769,46 @@ class Parser {
/**
* Set the limit report data in the current ParserOutput.
+ * @internal
*/
- protected function makeLimitReport() {
- $maxIncludeSize = $this->mOptions->getMaxIncludeSize();
+ public function makeLimitReport(
+ ParserOptions $parserOptions, ParserOutput $parserOutput
+ ) {
+ $maxIncludeSize = $parserOptions->getMaxIncludeSize();
- $cpuTime = $this->mOutput->getTimeProfile( 'cpu' );
+ $cpuTime = $parserOutput->getTimeProfile( 'cpu' );
if ( $cpuTime !== null ) {
- $this->mOutput->setLimitReportData( 'limitreport-cputime',
+ $parserOutput->setLimitReportData( 'limitreport-cputime',
sprintf( "%.3f", $cpuTime )
);
}
- $wallTime = $this->mOutput->getTimeProfile( 'wall' );
- $this->mOutput->setLimitReportData( 'limitreport-walltime',
+ $wallTime = $parserOutput->getTimeProfile( 'wall' );
+ $parserOutput->setLimitReportData( 'limitreport-walltime',
sprintf( "%.3f", $wallTime )
);
- $this->mOutput->setLimitReportData( 'limitreport-ppvisitednodes',
- [ $this->mPPNodeCount, $this->mOptions->getMaxPPNodeCount() ]
+ $parserOutput->setLimitReportData( 'limitreport-ppvisitednodes',
+ [ $this->mPPNodeCount, $parserOptions->getMaxPPNodeCount() ]
);
- $this->mOutput->setLimitReportData( 'limitreport-postexpandincludesize',
+ $parserOutput->setLimitReportData( 'limitreport-postexpandincludesize',
[ $this->mIncludeSizes['post-expand'], $maxIncludeSize ]
);
- $this->mOutput->setLimitReportData( 'limitreport-templateargumentsize',
+ $parserOutput->setLimitReportData( 'limitreport-templateargumentsize',
[ $this->mIncludeSizes['arg'], $maxIncludeSize ]
);
- $this->mOutput->setLimitReportData( 'limitreport-expansiondepth',
- [ $this->mHighestExpansionDepth, $this->mOptions->getMaxPPExpandDepth() ]
+ $parserOutput->setLimitReportData( 'limitreport-expansiondepth',
+ [ $this->mHighestExpansionDepth, $parserOptions->getMaxPPExpandDepth() ]
);
- $this->mOutput->setLimitReportData( 'limitreport-expensivefunctioncount',
- [ $this->mExpensiveFunctionCount, $this->mOptions->getExpensiveParserFunctionLimit() ]
+ $parserOutput->setLimitReportData( 'limitreport-expensivefunctioncount',
+ [ $this->mExpensiveFunctionCount, $parserOptions->getExpensiveParserFunctionLimit() ]
);
foreach ( $this->mStripState->getLimitReport() as [ $key, $value ] ) {
- $this->mOutput->setLimitReportData( $key, $value );
+ $parserOutput->setLimitReportData( $key, $value );
}
- $this->hookRunner->onParserLimitReportPrepare( $this, $this->mOutput );
+ $this->hookRunner->onParserLimitReportPrepare( $this, $parserOutput );
// Add on template profiling data in human/machine readable way
$dataByFunc = $this->mProfiler->getFunctionStats();
@@ -819,18 +822,18 @@ class Parser {
htmlspecialchars( $item['name'] ) );
}
- $this->mOutput->setLimitReportData( 'limitreport-timingprofile', $profileReport );
+ $parserOutput->setLimitReportData( 'limitreport-timingprofile', $profileReport );
// Add other cache related metadata
if ( $this->svcOptions->get( MainConfigNames::ShowHostnames ) ) {
- $this->mOutput->setLimitReportData( 'cachereport-origin', wfHostname() );
- }
- $this->mOutput->setLimitReportData( 'cachereport-timestamp',
- $this->mOutput->getCacheTime() );
- $this->mOutput->setLimitReportData( 'cachereport-ttl',
- $this->mOutput->getCacheExpiry() );
- $this->mOutput->setLimitReportData( 'cachereport-transientcontent',
- $this->mOutput->hasReducedExpiry() );
+ $parserOutput->setLimitReportData( 'cachereport-origin', wfHostname() );
+ }
+ $parserOutput->setLimitReportData( 'cachereport-timestamp',
+ $parserOutput->getCacheTime() );
+ $parserOutput->setLimitReportData( 'cachereport-ttl',
+ $parserOutput->getCacheExpiry() );
+ $parserOutput->setLimitReportData( 'cachereport-transientcontent',
+ $parserOutput->hasReducedExpiry() );
}
/**
diff --git a/includes/parser/Parsoid/Config/DataAccess.php b/includes/parser/Parsoid/Config/DataAccess.php
index 75a336a00673..ef61ed855f74 100644
--- a/includes/parser/Parsoid/Config/DataAccess.php
+++ b/includes/parser/Parsoid/Config/DataAccess.php
@@ -33,6 +33,8 @@ use MediaWiki\MainConfigNames;
use MediaWiki\Page\File\BadFileLookup;
use MediaWiki\Parser\Parser;
use MediaWiki\Parser\ParserFactory;
+use MediaWiki\Parser\ParserOptions;
+use MediaWiki\Parser\ParserOutput;
use MediaWiki\Parser\PPFrame;
use MediaWiki\Title\Title;
use RepoGroup;
@@ -346,6 +348,17 @@ class DataAccess extends IDataAccess {
return $this->parser;
}
+ /** @internal */
+ public function makeLimitReport(
+ IPageConfig $pageConfig,
+ ParserOptions $parserOptions,
+ ParserOutput $parserOutput
+ ) {
+ $parser = $this->parser ??
+ $this->prepareParser( $pageConfig, Parser::OT_HTML );
+ $parser->makeLimitReport( $parserOptions, $parserOutput );
+ }
+
/** @inheritDoc */
public function parseWikitext(
IPageConfig $pageConfig,
diff --git a/includes/parser/Parsoid/ParsoidParser.php b/includes/parser/Parsoid/ParsoidParser.php
index 9d679fce74b0..cec3538f4f46 100644
--- a/includes/parser/Parsoid/ParsoidParser.php
+++ b/includes/parser/Parsoid/ParsoidParser.php
@@ -9,9 +9,9 @@ use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageReference;
-use MediaWiki\Parser\ParserFactory;
use MediaWiki\Parser\ParserOptions;
use MediaWiki\Parser\ParserOutput;
+use MediaWiki\Parser\Parsoid\Config\DataAccess;
use MediaWiki\Parser\Parsoid\Config\PageConfigFactory;
use MediaWiki\Revision\MutableRevisionRecord;
use MediaWiki\Revision\RevisionRecord;
@@ -41,24 +41,23 @@ class ParsoidParser /* eventually this will extend \Parser */ {
private Parsoid $parsoid;
private PageConfigFactory $pageConfigFactory;
private LanguageConverterFactory $languageConverterFactory;
- private ParserFactory $legacyParserFactory;
+ private DataAccess $dataAccess;
/**
* @param Parsoid $parsoid
* @param PageConfigFactory $pageConfigFactory
* @param LanguageConverterFactory $languageConverterFactory
- * @param ParserFactory $legacyParserFactory
*/
public function __construct(
Parsoid $parsoid,
PageConfigFactory $pageConfigFactory,
LanguageConverterFactory $languageConverterFactory,
- ParserFactory $legacyParserFactory
+ DataAccess $dataAccess
) {
$this->parsoid = $parsoid;
$this->pageConfigFactory = $pageConfigFactory;
$this->languageConverterFactory = $languageConverterFactory;
- $this->legacyParserFactory = $legacyParserFactory;
+ $this->dataAccess = $dataAccess;
}
/**
@@ -184,7 +183,12 @@ class ParsoidParser /* eventually this will extend \Parser */ {
$parserOutput->setFromParserOptions( $options );
$parserOutput->recordTimeProfile();
- $this->makeLimitReport( $options, $parserOutput );
+ $limitReporting = MediaWikiServices::getInstance()->getMainConfig()->get(
+ MainConfigNames::EnableParserLimitReporting
+ );
+ if ( $limitReporting ) {
+ $this->dataAccess->makeLimitReport( $pageConfig, $options, $parserOutput );
+ }
// T371713: Collect statistics on parsing time -vs- presence of
// $previousOutput
@@ -321,38 +325,4 @@ class ParsoidParser /* eventually this will extend \Parser */ {
return $this->genParserOutput( $pageConfig, $options, null );
}
-
- /**
- * Set the limit report data in the current ParserOutput.
- * This is ported from Parser::makeLimitReport() and should eventually
- * use the method from the superclass directly.
- */
- protected function makeLimitReport(
- ParserOptions $parserOptions, ParserOutput $parserOutput
- ) {
- $maxIncludeSize = $parserOptions->getMaxIncludeSize();
-
- $cpuTime = $parserOutput->getTimeProfile( 'cpu' );
- if ( $cpuTime !== null ) {
- $parserOutput->setLimitReportData( 'limitreport-cputime',
- sprintf( "%.3f", $cpuTime )
- );
- }
-
- $wallTime = $parserOutput->getTimeProfile( 'wall' );
- $parserOutput->setLimitReportData( 'limitreport-walltime',
- sprintf( "%.3f", $wallTime )
- );
-
- $parserOutput->setLimitReportData( 'limitreport-timingprofile', [ 'not yet supported' ] );
-
- // Add other cache related metadata
- $parserOutput->setLimitReportData( 'cachereport-timestamp',
- $parserOutput->getCacheTime() );
- $parserOutput->setLimitReportData( 'cachereport-ttl',
- $parserOutput->getCacheExpiry() );
- $parserOutput->setLimitReportData( 'cachereport-transientcontent',
- $parserOutput->hasReducedExpiry() );
- }
-
}
diff --git a/includes/parser/Parsoid/ParsoidParserFactory.php b/includes/parser/Parsoid/ParsoidParserFactory.php
index e62f1a7c2a8c..76c3e415b64b 100644
--- a/includes/parser/Parsoid/ParsoidParserFactory.php
+++ b/includes/parser/Parsoid/ParsoidParserFactory.php
@@ -4,8 +4,8 @@ namespace MediaWiki\Parser\Parsoid;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Parser\ParserFactory;
+use MediaWiki\Parser\Parsoid\Config\DataAccess;
use MediaWiki\Parser\Parsoid\Config\PageConfigFactory;
-use Wikimedia\Parsoid\Config\DataAccess;
use Wikimedia\Parsoid\Config\SiteConfig;
use Wikimedia\Parsoid\Parsoid;
@@ -61,7 +61,7 @@ class ParsoidParserFactory /* eventually this may extend \ParserFactory */ {
new Parsoid( $this->siteConfig, $this->dataAccess ),
$this->pageConfigFactory,
$this->languageConverterFactory,
- $this->legacyParserFactory
+ $this->dataAccess
);
}
}
diff --git a/includes/specialpage/ContributionsSpecialPage.php b/includes/specialpage/ContributionsSpecialPage.php
index c82f4e2cea8a..e25184f23bf6 100644
--- a/includes/specialpage/ContributionsSpecialPage.php
+++ b/includes/specialpage/ContributionsSpecialPage.php
@@ -757,7 +757,7 @@ class ContributionsSpecialPage extends IncludableSpecialPage {
$target = $this->opts['target'] ?? '';
$fields['target'] = $this->getTargetField( $target );
- $ns = $this->opts['namespace'] ?? null;
+ $ns = $this->opts['namespace'] ?? 'all';
$fields['namespace'] = [
'type' => 'namespaceselect',
'label' => $this->msg( 'namespace' )->text(),
diff --git a/languages/i18n/ang.json b/languages/i18n/ang.json
index 2dfa2158c5d4..22179db205e7 100644
--- a/languages/i18n/ang.json
+++ b/languages/i18n/ang.json
@@ -132,7 +132,7 @@
"skin-view-foreign": "Sihþ on $1",
"edit": "Adiht",
"skin-view-edit": "Adiht",
- "edit-local": "Adiht þa stowlican gemearcunge",
+ "edit-local": "Adihtan þa stowlican gemearcunge",
"create": "Scippan",
"skin-view-create": "Scippan",
"create-local": "Besete stowlice gemearcunge",
@@ -213,7 +213,7 @@
"viewsourceold": "Seoh frumtraht",
"editlink": "adiht",
"viewsourcelink": "Seoh frumtraht",
- "editsectionhint": "Adiht dæl: $1",
+ "editsectionhint": "Adihtan dæle: $1",
"toc": "Innung",
"showtoc": "yw",
"hidetoc": "hyd",
@@ -334,7 +334,7 @@
"mycustomjsonprotected": "Þu næfð gelæfan ðe ðu adiht þisne CSS-tramet.",
"mycustomjsprotected": "Þu nafast leafe to adihtenne þisne JavaScript tramet.",
"myprivateinfoprotected": "Þu nafast leafe to adihtenne þine agnan towritennesse.",
- "mypreferencesprotected": "Þu nafast leafe to adihtenne þina foreberunga.",
+ "mypreferencesprotected": "Þu næfst þafung to adihtenne þine settunge.",
"ns-specialprotected": "Man ne mæg adihtan syndrige trametas.",
"titleprotected": "Þis titul hæfþ gebeon gemundod fram gescæfte be [[User:$1|$1]].\nSeo racu gegiefen is <em>$2</em>.",
"filereadonlyerror": "We ne cunnon wrixlan \"$1\" ða ymele forðæm ðe \"$2\" hiere cofa is in ræding wyrdnesse.\n\nÐære bysne aþegnend se locode hine geaf þeos trahtnung: \"$3\".",
@@ -342,7 +342,7 @@
"invalidtitle-knownnamespace": "Ungenge titul þe hæfþ þone namstede \"S=$2\" and þæt gewrit \"$3\"",
"invalidtitle-unknownnamespace": "Ungenge titul þe hæfþ þæt uncuðe namstederim $1 and þæt gewrit \"$2\"",
"exception-nologin": "Þu eart ingan",
- "exception-nologin-text": "Leof, inlogian þe þu mægst geferan þisne tramet oððe fremman þisne dæd.",
+ "exception-nologin-text": "Leof, inga to geseonne þisne tramet oþþe gedonne þas dæde.",
"exception-nologin-text-for-temp-user": "Leof, sceapp racu þe þu mægst geferan þisne tramet oððe fremman þisne dæd.",
"virus-badscanner": "Yfel gesetedness: Uncuð wyrmsecend: <em>$1</em>",
"virus-scanfailed": "asmeagung trucode (run $1)",
@@ -367,18 +367,18 @@
"createacct-yourpasswordagain-ph": "Writ leafnessword eft",
"userlogin-remembermypassword": "Ætfeolh minre inmeldunge",
"userlogin-signwithsecure": "Nytt fæst hlenc",
- "cannotlogin-title": "Ðu ne mægst inlogian",
- "cannotlogin-text": "Inlogung nis meahtelic.",
- "cannotloginnow-title": "Ðu ne mægst nu inlogian",
- "cannotloginnow-text": "Inlogung nis meahtelic ðan ðu brycst $1.",
+ "cannotlogin-title": "Ðu ne mægst ingan",
+ "cannotlogin-text": "Ingang nis mihtelic.",
+ "cannotloginnow-title": "Ðu ne meaht ingan nu",
+ "cannotloginnow-text": "Ingang nis mihtelic ða ðu brycst $1.",
"cannotcreateaccount-title": "We nagon sceappan wisbec",
"cannotcreateaccount-text": "Geriht racu gesceap ne mæg man don on þissum wici.",
"yourdomainname": "Þin geweald:",
"password-change-forbidden": "Þu ne meaht awendan leafnessword on þissum wiki.",
- "login": "Inga",
- "nav-login-createaccount": "Foh to þinre wisbec / Scypp wisboc",
- "logout": "Blinn þinre wisbec",
- "userlogout": "Blinn þinre wisbec",
+ "login": "Ingan",
+ "nav-login-createaccount": "Ingan to wisbec / Scieppan wisboc",
+ "logout": "Forlætan",
+ "userlogout": "Forlætan",
"notloggedin": "Þu ne brycst wisbec",
"userlogin-noaccount": "Næfst þu wisboc?",
"userlogin-joinproject": "Weorþ gegylda {{SITENAME}}",
@@ -456,7 +456,7 @@
"whitelistedittext": "Þu scealt $1 to adihtenne trametas",
"nosuchsectiontitle": "Ne mæg dæl findan",
"loginreqtitle": "Wisbec nytt is behefe",
- "loginreqlink": "fon to wisbec",
+ "loginreqlink": "ingan",
"loginreqpagetext": "Þu scealt $1 to seonne oðre trametas.",
"accmailtitle": "Leafnessword wæs gesended.",
"accmailtext": "Hlytlice forþboren leafnessword to [[User talk:$1|$1]] wæs to $2 gesended. Man mæg þæt andwendan on þam [[Special:ChangePassword|leafnessworda andwendinge]] tramete mid þy man fehþ to his wisbec.",
@@ -572,7 +572,7 @@
"email": "Spearcærend",
"userrights-user-editname": "Writ brucendnaman:",
"editusergroup": "Hlad brucenda heapas",
- "userrights-editusergroup": "Adiht {{GENDER:$1|brucenda|brucestrena}} heapas",
+ "userrights-editusergroup": "Adihtan {{GENDER:$1|brucenda|brucestrena}} heapas",
"saveusergroups": "Horda {{GENDER:$1|brucend}}heapas",
"userrights-groupsmember": "Gesiþ locaþ to:",
"userrights-reason": "Racu:",
@@ -593,7 +593,7 @@
"newuserlogpage": "Brucenda scyppunge tidgewrit",
"rightslog": "Brucenda riht tidgewrit",
"skin-action-addsection": "Besettan mearcunge",
- "action-edit": "adiht þisne tramet",
+ "action-edit": "adihtan þisne tramet",
"action-createaccount": "scypp þas brucendwisboc",
"action-move": "Wegan",
"action-delete": "Forleos",
@@ -759,7 +759,7 @@
"allpages-hide-redirects": "Hyd edlædunga",
"categories": "Floccas",
"categoriespagetext": "{{PLURAL:$1|Þes flocc bið||Þas floccas beoð}} on þam wiki, and sind þe gebrocene þe na.\nSeoh eac [[Special:WantedCategories|gewilnode floccas]].",
- "sp-deletedcontributions-contribs": "forðunga",
+ "sp-deletedcontributions-contribs": "þine adihtunge",
"linksearch": "Socn utanweardra hlencena",
"linksearch-ok": "Sec",
"listusers-noresult": "Nan brucend wæs gefunden.",
@@ -785,7 +785,7 @@
"watch": "Behealdan",
"watchthispage": "Beheald þisne tramet",
"unwatch": "unsettan behealdunge",
- "unwatchthispage": "Ablinn behealdunge",
+ "unwatchthispage": "Unsettan behealdunge",
"watchlist-details": "{{PLURAL:$1|Þær is $1 tramet|Þær sind $1 trameta}} on þinum behealdunggetæle (eac motungum).",
"wlnote": "Niðer {{PLURAL:$1|is seo niwoste andwendung|sind þa niwostan '''$1''' andwendunga}} in {{PLURAL:$2|þære niwostan tide|þæm niwostum '''$2''' tida}}, fram $4 þæs $3.",
"watchlist-options": "Behealdungtæles setnessa",
@@ -846,8 +846,8 @@
"namespace_association": "Gesibbe namstedas",
"blanknamespace": "(Heafod)",
"tool-link-contributions": "{{GENDER:$1|Brucendes}} forðunga",
- "contributions-title": "$1 brucendes forðunga",
- "mycontris": "Forðunga",
+ "contributions-title": "$1 brucendes adihtunge",
+ "mycontris": "Þine adihtunge",
"anoncontribs": "þine adihtunge",
"nocontribs": "Ne fand nænga swilca andwendunga",
"uctop": "nu",
@@ -857,7 +857,7 @@
"sp-contributions-uploads": "forþhladennessa",
"sp-contributions-logs": "tidgewritu",
"sp-contributions-talk": "motung",
- "sp-contributions-search": "Sec forðunga",
+ "sp-contributions-search": "Secan adihtunge",
"sp-contributions-username": "IP hamsteall oþþe brucendnama:",
"sp-contributions-toponly": "Ane yw adihtunga þa sind þa niwostan edniwunga",
"sp-contributions-newonly": "Ana yw adihtunga þa sind trametgescapennessa",
@@ -891,7 +891,7 @@
"blocklink": "forbeod",
"unblocklink": "gelyf eft",
"change-blocklink": "Andwend forbod",
- "contribslink": "forðunga",
+ "contribslink": "adihtunge",
"block-log-flags-nocreate": "forbead to scyppenne wisboc",
"newtitle": "Niewe nama:",
"move-watch": "Beheald frumtramet and endetramet",
@@ -924,14 +924,14 @@
"importlogpage": "Inbringunge tidgewrit",
"tooltip-pt-userpage": "{{GENDER:|Þin brucendtramet}}",
"tooltip-pt-mytalk": "{{GENDER:|Þin}} motung",
- "tooltip-pt-preferences": "{{GENDER:|Þina}} foreberunga",
+ "tooltip-pt-preferences": "{{GENDER:|Þine}} settunge",
"tooltip-pt-watchlist": "Getæl trameta þa þe þu behealdest hwæder hie andwenden",
- "tooltip-pt-mycontris": "Getæl {{GENDER:|þinra}} forðunga",
+ "tooltip-pt-mycontris": "Getæl {{GENDER:|þinra}} adihtunga",
"tooltip-pt-login": "Ic bidde þe þæt þu fo to wisbec; ac þeah þæt nis nidfull",
- "tooltip-pt-logout": "Blinn þinre wisbec",
+ "tooltip-pt-logout": "Forlætan",
"tooltip-pt-createaccount": "Man bideð þe þæt þu scyppe wisboc and fo to þære; ac þeah þæt nis nidfull",
"tooltip-ca-talk": "Motung ymbe þone innunge tramet",
- "tooltip-ca-edit": "Adiht þisne tramet.",
+ "tooltip-ca-edit": "Adihtan þisne tramet",
"tooltip-ca-addsection": "Beginn niwne dæl",
"tooltip-ca-viewsource": "Þes tramet is geborgen.\nÞu most his fruman seon.",
"tooltip-ca-history": "Ærran fadunga þisses trametes",
@@ -956,7 +956,7 @@
"tooltip-t-recentchangeslinked": "Niwa andwendunga in trametum to þam þes tramet cnytt",
"tooltip-feed-rss": "RSS stream þisses trametes",
"tooltip-feed-atom": "Atom stream þisses trametes",
- "tooltip-t-contributions": "Getæl forðunga {{GENDER:$1|þisses brucendes|þisse brucestran}}",
+ "tooltip-t-contributions": "Getæl adihtunga {{GENDER:$1|þisses brucendes|þisse brucestran}}",
"tooltip-t-emailuser": "Send spearcærnd {{GENDER:$1|þissum brucende|þisse brucicgan}}",
"tooltip-t-upload": "Hlad ymelan forþ",
"tooltip-t-specialpages": "Getæl eallra syndrigra trameta",
@@ -1040,15 +1040,15 @@
"table_pager_empty": "Nænga gefundennessa",
"autosumm-blank": "Blæhte þone tramet",
"autosumm-new": "Gesceop tramet þe hafaþ '$1'",
- "watchlistedit-normal-title": "Adiht behealdungtæl",
+ "watchlistedit-normal-title": "Adihtan behealdungtæl",
"watchlistedit-normal-legend": "Fornim naman fram behealdungtæle",
"watchlistedit-normal-submit": "Fornim titulas",
"watchlistedit-raw-titles": "Titulas",
"watchlistedit-raw-done": "Þin behealdungtæl wæs edniwod.",
"watchlisttools-clear": "Ahwit þæt behealdunggetæl",
"watchlisttools-view": "Seoh getenga andwendunga",
- "watchlisttools-edit": "Seoh and adiht behealdungtæl",
- "watchlisttools-raw": "Adiht hreaw behealdungtæl",
+ "watchlisttools-edit": "Locian and adihtan behealdungtæl",
+ "watchlisttools-raw": "Adihtan hreaw behealdungtæl",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|motung]])",
"version": "Fadung",
"version-specialpages": "Syndrige trametas",
@@ -1093,7 +1093,7 @@
"log-action-filter-delete-delete_redir2": "Oferwrit edlædunge",
"skin-view-create-local": "Besete stowlice gemearcunge",
"nstab-mainpage": "Heafodtramet",
- "skin-view-edit-local": "Adiht þa stowlican gemearcunge",
+ "skin-view-edit-local": "Adihtan stowlican gemearcunge",
"skin-action-protect": "Beorg",
"skin-action-undelete": "Scieppan tramet eft",
"skin-action-delete": "Forleos",
diff --git a/languages/i18n/az.json b/languages/i18n/az.json
index 8f389bbdef41..0ff9c86cfc0f 100644
--- a/languages/i18n/az.json
+++ b/languages/i18n/az.json
@@ -2523,7 +2523,7 @@
"ipbcreateaccount": "Hesab yaratma",
"ipbemailban": "E-poçt göndərmək",
"ipbenableautoblock": "Bu hesabın istifadə etdiyi son IP ünvanını və redaktə etməyə çalışdığı sonrakı IP ünvanlarını $1 müddətinə blokla",
- "ipbsubmit": "Blokla",
+ "ipbsubmit": "Blok əlavə et",
"ipbother": "Başqa vaxt",
"ipboptions": "2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 həftə:1 week,2 həftə:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 il:1 year,müddətsiz:infinite",
"ipbhidename": "İstifadəçi adını redaktələrdə və siyahılarda gizlət",
diff --git a/languages/i18n/btm.json b/languages/i18n/btm.json
index b2b4ec47d803..15ffa943771f 100644
--- a/languages/i18n/btm.json
+++ b/languages/i18n/btm.json
@@ -951,11 +951,27 @@
"right-movefile": "Mamindahkon borkas",
"right-upload": "Unggah borkas-borkas",
"right-reupload": "manimpoi borkas on dohot na mandung adong",
+ "right-upload_by_url": "Pamasukkon borkas sian n alamat URL",
"right-purge": "Mangapus parsinggahan ni sada alaman",
"right-autoconfirmed": "Inda ipangaruhi ni rate limit na marbasis IP",
+ "right-bot": "Iporlu on ima sada proses na otomatis",
+ "right-apihighlimits": "Mamake batasan na lobi ginjang bagasan nai kueri API",
"right-delete": "Apus alaman-alaman",
+ "right-delete-redirect": "manimpoi pangalihan ni revisi na tunggal",
"right-bigdelete": "Apus alaman-alaman na dohot alpak riwayat",
+ "right-deletelogentry": "apus sangape batalkon apus entri masuk tartontu on",
+ "right-deleterevision": "apus sangape batalkon hapus revisian ni alaman tartontu on",
+ "right-deletedhistory": "Mangaligi entri-entri na i revisi baru i apus, tai inda pake teks na marhubungan",
+ "right-deletedtext": "ligi ma teks na mandung i apus sangape parubahan na antar revisi na mandung i apus on",
"right-browsearchive": "Jalaki alaman-alaman na ihapus",
+ "right-undelete": "Paulang alaman na mandung iapus",
+ "right-suppressrevision": "ligi, onjabkon, sangape patidaon revisian ni alaman tartontu sian on pangguna sanga ise pe",
+ "right-viewsuppressed": "mangaligi revisian na ionjabkon sian on sude pamake",
+ "right-suppressionlog": "Lingi ma masuk na i onjabkon sian on alak",
+ "right-block": "blokir ma sangape buka blokir pamake on sian on pature on",
+ "right-blockemail": "blokir sangape buka blokiran ni pamake sian on mangirim surel",
+ "right-hideuser": "blokir sangape buka blokir golar pamake, na ionjabkon sangape inda tarida tu halak nagok",
+ "right-ipblock-exempt": "inda mampadulion pamblokiran ni IP, pamblokiran otomatis on, narentanan on ona pamblokiran",
"right-unblockself": "Paluaon blokir sendiri",
"right-protect": "Uba pangaturan panjagoan dot pature panjagoan alaman na tarsaungi runtun",
"right-editprotected": "Pature alaman-alaman tarsaungi sabagai \"{{int:protect-level-sysop}}\"",
@@ -971,6 +987,7 @@
"right-editmyusercss": "Pature borkas CSS mu",
"right-editmyuserjson": "Pature borkas JSON mu",
"right-editmyuserjs": "Pature borkas JavaScript mu",
+ "right-editmyuserjsredirect": "patureon borkas JavaScript hopuna sendiri na marupaon pangalihan",
"right-viewmywatchlist": "Ligi ma daftar na i pantau mi",
"right-importupload": "Impor alaman tingon borkas maiunggah",
"right-siteadmin": "Kunci dot mambuka kunci basisdata.",
diff --git a/languages/i18n/codex/sr-ec.json b/languages/i18n/codex/sr-ec.json
index 59fd7ac2af37..9ba76842ed03 100644
--- a/languages/i18n/codex/sr-ec.json
+++ b/languages/i18n/codex/sr-ec.json
@@ -5,6 +5,8 @@
"Milicevic01"
]
},
+ "cdx-chip-input-chip-added": "Чип $1 додат.",
+ "cdx-chip-input-chip-removed": "Чип $1 уклоњен.",
"cdx-input-chip-aria-description": "Притисните Enter да уредите или Delete да уклоните.",
"cdx-dialog-close-button-label": "Затвори",
"cdx-label-optional-flag": "(необавезно)",
diff --git a/languages/i18n/cop.json b/languages/i18n/cop.json
index 77f5985c848a..3ffa78149b6b 100644
--- a/languages/i18n/cop.json
+++ b/languages/i18n/cop.json
@@ -99,7 +99,7 @@
"delete": "Ⲥⲱⲗϫ",
"newpage": "Ⲡϩⲟ ⲙ̀ⲃⲉⲣⲓ",
"talkpagelinktext": "ⲫⲙⲁ ⲛ̀ⲥⲁϫⲓ",
- "specialpage": "Ⲡⲓϩⲟ ⲛ̀ⲉⲓⲇⲓⲕⲟⲛ",
+ "specialpage": "Ⲡϩⲟ ⲫⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀",
"personaltools": "ⲛⲓⲥⲉⲑⲃⲁⲓⲟⲩ ⲛ̀ϩⲱⲕ",
"talk": "Ⲧϩⲟⲙⲓⲗⲓⲁ̀",
"views": "Ϩⲁⲛϫⲟⲩϣⲧ",
@@ -144,7 +144,7 @@
"nstab-main": "Ⲡϩⲟ",
"nstab-user": "{{GENDER:$1|Ⲡⲓϩⲟ ⲛ̀ⲣⲉϥⲉⲣⲭⲣⲁⲥⲑⲉ}}",
"nstab-media": "Ⲡϩⲟ ⲙ̀ⲙⲉⲥⲟⲧⲏⲥ",
- "nstab-special": "Ⲡⲓϩⲟ ⲛ̀ⲓⲇⲓⲟⲛ",
+ "nstab-special": "Ⲡϩⲟ ⲫⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀",
"nstab-project": "Ⲡϩⲟ ⲛ̀ⲉ̀ⲡⲓⲭⲉⲓⲣⲏⲙⲁ",
"nstab-image": "Ⲡⲕⲟⲓϩⲓ",
"nstab-mediawiki": "Ⲡⲟⲩⲱ",
@@ -152,8 +152,8 @@
"nstab-help": "Ⲡϩⲟ ⲙ̀ⲃⲟⲏ̀ⲑⲟⲥ",
"nstab-category": "Ⲡⲅⲉⲛⲟⲥ",
"mainpage-nstab": "Ⲡϣⲉⲣⲡϩⲟ",
- "nosuchspecialpage": "Ⲙ̀ⲙⲟⲛ ⲡⲁⲓϩⲟ ⲛ̀ⲓ̀ⲇⲓⲟⲛ ⲫⲁⲓ",
- "nospecialpagetext": "<strong>Ⲁⲧⲉⲧⲉⲛⲕⲱⲣϣ ⲛ̀ⲟⲩϩⲟ ⲛ̀ⲓⲇⲓⲟⲛ ⲛ̀ⲁ̀ⲕⲁⲓⲣⲱⲥ.</strong>\n\nⲞⲩⲟⲛϣϫⲟⲙ ⲉ̀ϫⲉⲙ ⲟⲩⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲧⲉϩⲁⲛϩⲟ ⲛ̀ⲓ̀ⲇⲓⲟⲛ ⲛ̀ⲁ̀ⲕⲁⲓⲣⲱⲥ ϧⲉⲛ[[Special:SpecialPages|{{int:specialpages}}]].",
+ "nosuchspecialpage": "Ⲙ̀ⲙⲟⲛⲡⲁⲓϩⲟ ⲫⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀ ⲫⲁⲓ",
+ "nospecialpagetext": "<strong>Ⲁⲧⲉⲧⲉⲛⲕⲱⲣϣ ⲙ̀ⲡϩⲟ ⲫⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀ ⲛ̀ⲁ̀ⲕⲁⲓⲣⲱⲥ.</strong>\n\nⲞⲩⲟⲛϣϫⲟⲙ ⲉ̀ϫⲉⲙ ⲟⲩⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲧⲉⲛⲓϩⲟ ⲛⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀ ⲛ̀ⲁ̀ⲕⲁⲓⲣⲱⲥ ϧⲉⲛ[[Special:SpecialPages|{{int:specialpages}}]].",
"badtitle": "Ⲫⲣⲁⲛ ⲉⲧϩⲱⲟⲩ",
"badtitletext": "Ⲛⲉⲫⲣⲁⲛ ⲛ̀ϩⲟ ⲉⲑⲧⲉⲧⲉⲛⲕⲱⲣϣ ⲁϥⲟⲓ ⲛ̀ⲁⲕⲁⲓⲣⲱⲥ ⲓⲉ ⲉϥϣⲟⲩⲓⲧ ⲓⲉ ⲟⲩⲣⲁⲛ ⲟⲩⲧⲉⲁⲥⲡⲓ ϣⲁⲛⲟⲩⲧⲉⲟⲩⲓⲕⲓ ⲉⲧⲁⲩⲉⲣⲗⲱⲟⲩ ϧⲉⲛⲁⲧⲥⲟϩⲓ.\nⲞⲩⲟⲛϣϫⲟⲙ ⲙ̀ⲙⲟϥ ⲉ̀ϣⲱⲡ ⲟⲩⲁⲓ ⲓⲉ ⲟⲩⲙⲏϣ ⲛ̀ⲕⲁⲡ ⲉⲧⲟⲩϣⲉⲣⲭⲣⲁⲥⲑⲉ ⲙ̀ⲙⲟϥ ⲁⲛ ϧⲉⲛϩⲁⲛⲣⲁⲛ.",
"viewsource": "Nⲁⲩ ⲉ̀ⲩⲡⲏⲅⲏ",
@@ -349,6 +349,8 @@
"recentchangeslinked-summary": "Ⲛⲟⲩϫ ⲉ̀ϧⲟⲩⲛ ⲛ̀ⲟⲩⲣⲁⲛ ⲛ̀ϩⲟ ⲉ̀ⲓⲱⲣϩ ⲛ̀ϩⲁⲛϣⲓⲃϯ ϩⲓⲛⲓϩⲟ ⲉⲧⲁⲩⲉⲣⲗⲱⲟⲩ ⲉ̀ⲡⲁⲓϩⲟ ⲓⲉ ⲉ̀ⲃⲟⲗ ϧⲉⲛⲙ̀ⲙⲟϥ. (Ⲉ̀ⲓⲱⲣϩ ⲛ̀ϩⲁⲛⲙⲉⲗⲟⲥ ⲛ̀ⲟⲩⲅⲉⲛⲟⲥ ⲛⲟⲩϫ ⲉ̀ϧⲟⲩⲛ ⲙ̀{{ns:category}}:ⲡⲓⲣⲁⲛ ⲛ̀ⲟⲩⲅⲉⲛⲟⲥ). Ϩⲁⲛϣⲓⲃϯ ϩⲓϩⲁⲛϩⲟ ϩⲓⲧⲉⲛⲡⲉⲧⲉⲛ[[Special:Watchlist|ⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲣⲱⲓⲥ]] ⲛⲉ ϧⲉⲛ<strong>ⲡⲥϧⲁⲓ ⲉϥϫⲟⲣ</strong>.",
"recentchangeslinked-page": "Ⲫⲣⲁⲛ ⲛ̀ϩⲟ",
"recentchangeslinked-to": "Ⲟⲩⲱⲛϩ ⲉ̀ⲃⲟⲗ ⲛ̀ϩⲁⲛϣⲓⲃϯ ⲉ̀ⲛⲓϩⲟ ⲉⲧⲁⲩⲉⲣⲗⲱⲟⲩ ⲉ̀ⲡⲁⲓϩⲟ ⲙⲁⲗⲗⲟⲛ",
+ "recentchanges-page-added-to-category": "Ⲁⲩⲧⲟⲩϩⲟ ⲛ̀[[:$1]] ⲉ̀ϧⲟⲩⲛ ⲉ̀ⲡⲅⲉⲛⲟⲥ",
+ "recentchanges-page-removed-from-category": "Ⲁⲩⲗⲱϫⲓ ⲉ̀[[:$1]] ⲉ̀ⲃⲟⲗ ϧⲉⲛⲡⲅⲉⲛⲟⲥ",
"upload": "Ⲱⲧⲡ ⲛ̀ⲟⲩⲕⲟⲓϩⲓ",
"uploadlogpage": "ⲟⲡⲧ ⲟⲩϣⲁⲗϩⲙⲱⲓⲧ",
"filedesc": "Ⲧⲡⲁⲣⲁⲫⲣⲁⲥⲓⲥ",
@@ -516,12 +518,12 @@
"tooltip-t-recentchangeslinked": "ⲛⲓϣⲓⲃϯ ⲙ̀ⲃⲉⲣⲓ ϧⲉⲛ ⲛⲓϩⲟ ⲉⲧⲟⲩⲉⲣⲗⲱⲟⲩ ⲉⲃⲟⲗϩⲓⲧⲉⲛ ⲡⲁⲓϩⲟ",
"tooltip-t-contributions": "ⲟⲩⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲛⲉⲛϩⲱϯ ⲛ̀ⲧⲉ {{GENDER:$1|ⲡⲁⲓⲣⲉϥⲉⲣⲭⲣⲁⲥⲑⲉ|ⲧⲁⲓⲣⲉϥⲉⲣⲭⲣⲁⲥⲑⲉ}}",
"tooltip-t-upload": "ⲟⲡⲧ ϩⲁⲛⲥϧⲓ ⲉⲡϣⲱⲓ",
- "tooltip-t-specialpages": "ⲡⲓⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲛⲓⲥⲉⲗⲓⲥ ⲛ̀ⲉⲓⲇⲓⲕⲟⲛ ⲛ̀ⲛⲓⲃⲉⲛ",
+ "tooltip-t-specialpages": "Ⲟⲩⲥϧⲓ ⲛ̀ϫⲓϫ ⲛ̀ⲛⲓϩⲟ ⲛⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀ ⲛⲓⲃⲉⲛ",
"tooltip-t-print": "ⲡⲓϧⲉⲣⲉⲃ ⲛ̀ϫⲓⲛⲧⲱⲃ ⲙ̀ⲡⲁⲓϩⲟ",
"tooltip-t-permalink": "ⲟⲩⲗⲱⲟⲩ ⲙ̀ⲙⲟⲩⲛ ⲉⲡⲁⲓⲥⲟϩⲓ ⲛ̀ϯⲥⲉⲗⲓⲥ",
"tooltip-ca-nstab-main": "ⲟⲩⲱⲛϩ ⲡⲓϩⲟ ⲙ̀ⲙⲟϩ",
"tooltip-ca-nstab-user": "ⲟⲩⲱⲛϩ ⲡⲓϩⲟ ⲛ̀ⲣⲉϥⲉⲣⲭⲣⲁⲥⲑⲉ",
- "tooltip-ca-nstab-special": "ⲑⲁⲓ ⲧⲉ ⲟⲩϩⲟ ⲛ̀ⲉⲓⲇⲓⲕⲟⲛ ⲟⲩⲟϩ ⲙ̀ⲙⲟⲛ ϣ̀ϫⲟⲙ ⲙ̀ⲙⲱⲧⲉⲛ ⲉϣⲉⲃⲧⲥ",
+ "tooltip-ca-nstab-special": "Ⲫⲁⲓ ⲡⲉ ⲡⲓϩⲟ ⲫⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀ ⲟⲩⲟϩ ⲙ̀ⲙⲟⲛϣϫⲟⲙ ⲙ̀ⲙⲱⲧⲉⲛ ⲉ̀ϣⲉⲃⲧϥ",
"tooltip-ca-nstab-image": "ⲟⲩⲱⲛϩ ⲡⲓϩⲟ ⲛ̀ⲥϦⲓ",
"tooltip-ca-nstab-template": "ⲡⲓϩⲟ ⲛ̀ⲧⲉ ⲡⲓⲕⲁⲗⲟⲡⲟⲇⲓ",
"tooltip-ca-nstab-category": "ⲟⲩⲱⲛϩ ⲡⲓϩⲟ ⲛ̀ⲕⲁⲧⲏⲅⲟⲣⲓⲁ",
@@ -572,7 +574,7 @@
"redirect-submit": "Ⲙⲁϣⲉ ⲛⲁⲕ",
"redirect-revision": "ⲟⲩⲥⲟϩⲓ ⲛ̀ϩⲟ",
"fileduplicatesearch-submit": "Ⲡⲓⲕⲱϯ",
- "specialpages": "Ⲛⲓϩⲟ ⲛ̀ⲓⲇⲓⲟⲛ",
+ "specialpages": "Ⲛⲓϩⲟ ⲛⲁ ϯⲟⲓⲕⲟⲛⲟⲙⲓⲁ̀",
"tag-filter": "ⲡⲉⲧⲧⲟⲩⲃⲟ ⲙ̀[[Special:Tags|ⲙⲏⲓⲛⲓ]]:",
"tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ⲟⲩⲙⲏⲓⲛⲓ|ϩⲁⲛⲙⲏⲓⲛⲓ}}]]: $2",
"tags-active-yes": "Ⲟⲩⲏⲓ",
diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json
index 910b3682154e..d503e36d1b3f 100644
--- a/languages/i18n/cs.json
+++ b/languages/i18n/cs.json
@@ -347,11 +347,12 @@
"title-invalid-empty": "Požadovaný název stránky je prázdný nebo obsahuje pouze prefix jmenného prostoru.",
"title-invalid-utf8": "Požadovaný název stránky obsahuje neplatnou sekvenci UTF-8.",
"title-invalid-interwiki": "Požadovaný název stránky obsahuje interwiki odkaz, který nelze v názvech používat.",
- "title-invalid-talk-namespace": "Požadovaný název stránky odkazuje na diskusní stránku, která nemůže existovat.",
+ "title-invalid-talk-namespace": "Požadovaný název stránky označuje nesprávně odkázanou diskusi ke stránce v jiném jmenném prostoru. Diskusní stránky ke stránkám mimo hlavní jmenný prostor se musí uvádět jako „Diskuse k projektu:Foo“, nikoli „Diskuse:Projekt:Foo“.",
+ "title-invalid-talk-interwiki": "Požadovaný název stránky označuje nesprávně odkázanou diskusi ke stránce na jiné wiki. Diskusní stránky ke stránkám na jiných wiki se musí uvádět s interwiki prefixem na začátku, jako „w:Diskuse:Foo“, nikoli „Diskuse:w:Foo“.",
"title-invalid-characters": "Požadovaný název stránky obsahuje neplatné znaky: „$1“.",
"title-invalid-relative": "Název obsahuje relativní cestu. Relativní názvy stránek (./, ../) jsou neplatné, protože často budou nedostupné, když je zpracuje prohlížeč uživatele.",
"title-invalid-magic-tilde": "Požadovaný název stránky obsahuje neplatnou magickou posloupnost vlnovek (<nowiki>~~~</nowiki>).",
- "title-invalid-too-long": "Požadovaný název stránky je příliš dlouhý. V kódování UTF-8 nesmí být delší než $1 {{PLURAL:$1|bajt|bajty|bajtů}}.",
+ "title-invalid-too-long": "Požadovaný název stránky je příliš dlouhý. Nesmí být delší než $1 {{PLURAL:$1|bajt|bajty|bajtů}} v kódování UTF-8. Vámi zadaný název má $2 {{PLURAL:$2|bajt|bajty|bajtů}}.",
"title-invalid-leading-colon": "Požadovaný název stránky na začátku obsahuje neplatnou dvojtečku.",
"perfcached": "Následující data jsou z cache a nemusí být plně aktuální. Cache může obsahovat maximálně {{PLURAL:$1|jeden výsledek|$1 výsledky|$1 výsledků}}.",
"perfcachedts": "Následující data jsou z cache, která byla naposledy aktualizována $1. Cache může obsahovat maximálně {{PLURAL:$4|jeden výsledek|$4 výsledky|$4 výsledků}}.",
@@ -665,6 +666,7 @@
"autocreate-preview-warning": "<em>Nejste přihlášen(a). Jakmile provedete editaci, bude pro vás založen dočasný účet. [[{{MediaWiki:tempuser-helppage}}|Více informací]].</em>",
"missingsummary": "<strong>Připomenutí:</strong> Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na „$1“, bude vaše editace zveřejněna bez shrnutí.",
"selfredirect": "<strong>Upozornění:</strong> Pokoušíte se tuto stránku přesměrovat na sebe samu.\nMožná jste zadali chybný cíl přesměrování, nebo editujete špatnou stránku.\nPokud ještě jednou kliknete na „$1“, bude i přesto přesměrování vytvořeno.",
+ "edit-constraint-brokenredirect": "<strong>Upozornění:</strong> Přesměrováváte tuto stránku na stránku, která neexistuje.\nMožná jste pro přesměrování zadali špatný cíl.\nPokud ještě jednou kliknete na „$1“, bude přesměrování vytvořeno i tak.",
"missingcommenttext": "Prosím, zadejte komentář.",
"missingcommentheader": "<strong>Připomenutí:</strong> Nezadali jste předmět pro tento komentář.\nPokud ještě jednou kliknete na „$1“, bude vaše editace zveřejněna bez něj.",
"summary-preview": "Náhled shrnutí:",
@@ -1047,6 +1049,7 @@
"searchall": "vše",
"showingresultsinrange": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Výsledek <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1–$2</strong> z <strong>$3</strong>}}",
+ "search-showingresults-approximate": "{{PLURAL:$4|Výsledek <strong>$1</strong> z nejméně <strong>$3</strong>|Výsledky <strong>$1–$2</strong> z nejméně <strong>$3</strong>}}",
"search-nonefound": "Na váš dotaz nebyly nalezeny žádné výsledky.",
"search-nonefound-thiswiki": "Na dotaz nebyly na tomto webu nalezeny žádné výsledky.",
"powersearch-legend": "Rozšířené vyhledávání",
@@ -2528,26 +2531,27 @@
"unblock": "Odblokovat uživatele",
"changeblockip": "Změnit blokování",
"blockip": "Zablokovat {{GENDER:$1|uživatele|uživatelku}}",
- "blockiptext": "Tento formulář slouží k zablokování editací z konkrétní IP adresy nebo uživatelského jména.\nToto by mělo být používáno jen v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].\nUdejte přesný důvod níže (například ocitujte, které stránky byly poškozeny).\nIP rozsahy můžete blokovat pomocí syntaxe [https://cs.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; největší dovolený rozsah je /$1 pro IPv4 a /$2 pro IPv6.",
+ "blockiptext": "Blokování slouží k bránění vandalismu a jiných způsobů narušování ([[{{MediaWiki:Policy-url}}|více informací]]). Rozsahy IP adres můžete blokovat pomocí syntaxe [https://cs.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]. Největší dovolený rozsah je /$1 pro IPv4 a /$2 pro IPv6.",
+ "block-multiblocks-new-feature": "Toto je nová funkce, pomocí které můžete zadat několik zablokování jednoho účtu",
"ipaddressorusername": "IP adresa, uživatelské jméno nebo ID blokování:",
"ipbreason": "Důvod:",
"ipbreason-dropdown": "*Časté důvody blokování\n** Vkládání klamných informací\n** Odstraňování obsahu stránek\n** Vkládání reklamních externích odkazů\n** Vkládání nesmyslů\n** Zastrašování nebo vyhrožování\n** Zneužívání více účtů\n** Nevhodné uživatelské jméno",
"ipb-hardblock": "Použít blokování na uživatele přihlášené z této IP adresy",
"ipbcreateaccount": "Vytváření účtů",
"ipbemailban": "Posílání e-mailů",
- "ipbenableautoblock": "Automaticky blokovat poslední IP adresu použitou tímto uživatelem a všechny další IP adresy, ze kterých se pokusí editovat, po dobu $1",
+ "ipbenableautoblock": "Blokovat poslední IP adresu použitou tímto účtem a všechny další IP adresy, ze kterých se pokusí editovat, po dobu $1",
"ipbsubmit": "Zablokovat",
"ipbother": "Jiný čas vypršení:",
"ipboptions": "2 hodiny:2 hours,1 den:1 day,3 dny:3 days,1 týden:1 week,2 týdny:2 weeks,1 měsíc:1 month,3 měsíce:3 months,6 měsíců:6 months,1 rok:1 year,do odvolání:infinite",
"ipbhidename": "Skrýt uživatelské jméno u editací a v seznamech",
- "ipbwatchuser": "Sledovat uživatelskou a diskusní stranu tohoto uživatele",
+ "ipbwatchuser": "Sledovat uživatelskou a diskusní stranu cílového uživatele",
"ipb-disableusertalk": "Editace vlastní uživatelské diskuse",
"ipb-change-block": "Znovu zablokovat uživatele s tímto nastavením",
"ipb-confirm": "Potvrdit zablokování",
"ipb-sitewide": "Na celém projektu",
"ipb-partial": "Částečný",
- "ipb-sitewide-help": "Blokuje editaci všech stránek a jmenných prostorů. Také blokuje standardní akce ([https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Blocking_users#What_it_means_to_be_blocked nápověda])",
- "ipb-partial-help": "Blokuje konkrétní stránky a jmenné prostory. Neblokuje standardní akce ([https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Blocking_users#What_it_means_to_be_blocked vizte nápovědu]). Pomocí zaškrtávacích políček můžete zablokovat vybrané konkrétní akce na všech stránkách a jmenných prostorech.",
+ "ipb-sitewide-help": "Blokuje editaci všech stránek, jmenných prostorů a standardních akcí ([https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Blocking_users#What_it_means_to_be_blocked nápověda])",
+ "ipb-partial-help": "Blokuje editaci konkrétních stránek, jmenných prostorů a vybrané konkrétní akce.",
"ipb-action-create": "Vytváření nových stránek a nahrávání nových souborů",
"ipb-action-move": "Přesunování stránek a souborů",
"ipb-action-upload": "Načítání souborů (včetně přepisování souborů)",
@@ -2568,8 +2572,9 @@
"ipb-blocklist-contribs": "Příspěvky {{GENDER:$1|uživatele|uživatelky}} $1",
"ipb-blocklist-duration-left": "zbývá $1",
"block-actions": "Typ blokování",
+ "block-change-visibility": "Změnit viditelnost",
"block-details": "Podrobnosti zablokování",
- "block-details-description": "Které akce chcete zablokovat?",
+ "block-details-description": "Pomocí těchto možností můžete cíli zablokovat další akce nad rámec editování.",
"block-expiry": "Čas vypršení:",
"block-expiry-preset": "Přednastavená doba trvání",
"block-expiry-preset-placeholder": "Vyberte dobu trvání",
@@ -2583,14 +2588,17 @@
"block-expiry-datetime": "Konkrétní datum a čas",
"block-options": "Další nastavení:",
"block-reason": "Důvod:",
+ "block-reason-help": "Uveďte například konkrétní stránky, které byly poškozeny",
"block-reason-other": "Dodatečný nebo jiný důvod",
+ "block-confirm-yes": "Ano",
+ "block-confirm-no": "Ne",
"block-success": "„[[Special:Contributions/$1|$1]]“ je zablokován. Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].",
"block-user-active-blocks": "Aktivní blokování",
"block-user-previous-blocks": "Kniha blokování",
"block-user-no-previous-blocks": "Nebyly nalezeny žádné předchozí blokování",
"block-item-remove": "Odebrat",
- "block-target": "Uživatelské jméno, IP adresa nebo rozsah:",
- "block-target-placeholder": "UživatelskéJméno, 1.1.1.42 nebo 1.1.1.42/16",
+ "block-target": "Cíl",
+ "block-target-placeholder": "Uživatelské jméno, IP adresa nebo rozsah",
"block-pages-placeholder": "Přidat další stránky…",
"block-namespaces-placeholder": "Přidat další jmenné prostory…",
"unblockip": "Odblokovat uživatele",
@@ -4153,7 +4161,7 @@
"table-of-contents-hide-button-aria-label": "Skrýt obsah",
"interwiki": "Zobrazit a upravovat interwiki",
"interwiki-title-norights": "Zobrazit mezijazykové odkazy",
- "interwiki_intro": "Toto je přehled tabulky interwiki odkazů, která definuje prefixy používané k jednoduchému odkazování na další wiki a jiné externí stránky. Doporučené použití je popsáno v [//www.mediawiki.org/wiki/Extension:Interwiki příručce na MediaWiki.org].",
+ "interwiki_intro": "Toto je přehled tabulky interwiki odkazů, která definuje prefixy používané k jednoduchému odkazování na další wiki a jiné externí stránky. Doporučené použití je popsáno v [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Interwiki příručce na MediaWiki.org].",
"interwiki-legend-label": "Legenda",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix:",
diff --git a/languages/i18n/de.json b/languages/i18n/de.json
index 4e6f18a3ba3f..7780ea7c8a85 100644
--- a/languages/i18n/de.json
+++ b/languages/i18n/de.json
@@ -2670,6 +2670,7 @@
"block-pages-placeholder": "Weitere Seiten hinzufügen …",
"block-namespaces-placeholder": "Weitere Namensräume hinzufügen …",
"block-update": "Sperre aktualisieren",
+ "block-invalid-id": "Ungültige Sperr-ID",
"unblockip": "Benutzer freigeben",
"unblockiptext": "Mit diesem Formular kannst du eine IP-Adresse oder einen Benutzer freigeben.",
"ipusubmit": "Freigeben",
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 26447abca2da..847613b52b15 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -2714,6 +2714,7 @@
"block-pages-placeholder": "Add more pages...",
"block-namespaces-placeholder": "Add more namespaces...",
"block-update": "Update block",
+ "block-invalid-id": "Invalid block ID",
"unblockip": "Unblock user",
"unblockiptext": "Use the form below to restore write access to a previously blocked IP address or username.",
"ipusubmit": "Remove this block",
diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json
index 729e3c840b30..5f41f20efb4f 100644
--- a/languages/i18n/fi.json
+++ b/languages/i18n/fi.json
@@ -1708,7 +1708,7 @@
"upload-form-label-infoform-description-tooltip": "Kuvaa lyhyesti kaikkea, mikä on teoksessa huomionarvoista.\nJos kyseessä on valokuva, mainitse kuvatut pääasiat, tapahtuma tai paikka.",
"upload-form-label-usage-title": "Käyttö",
"upload-form-label-usage-filename": "Tiedostonimi",
- "upload-form-label-own-work": "Tämä on oma työni",
+ "upload-form-label-own-work": "Tämä on itseni luoma teos",
"upload-form-label-infoform-categories": "Luokat",
"upload-form-label-infoform-date": "Päivämäärä",
"upload-form-label-own-work-message-generic-local": "Vakuutan, että tallennan tämän tiedoston noudattaen {{GRAMMAR:inessive|{{SITENAME}}}} voimassa olevia käyttöehtoja sekä lisenssejä koskevia käytäntöjä.",
@@ -3874,7 +3874,7 @@
"mw-widgets-dateinput-placeholder-day": "VVVV-KK-PP",
"mw-widgets-dateinput-placeholder-month": "VVVV-KK",
"mw-widgets-mediasearch-input-placeholder": "Etsi mediaa",
- "mw-widgets-mediasearch-recent-uploads": "{{GENDER:$1|Omat}} tuoreet tallennukset",
+ "mw-widgets-mediasearch-recent-uploads": "Tuoreet {{GENDER:$1|tallennuksesi}}",
"mw-widgets-mediasearch-noresults": "Tuloksia ei löytynyt.",
"mw-widgets-mediasearch-results-aria-label": "Mediahaun tulokset",
"mw-widgets-table-row-delete": "Poista rivi",
diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json
index 8869ecad9794..503ec310876b 100644
--- a/languages/i18n/ja.json
+++ b/languages/i18n/ja.json
@@ -3972,8 +3972,8 @@
"mediastatistics-summary": "アップロードされたファイルの種類に関する統計です。これはファイルの最新バージョンのみを含みます。以前のまたは削除されたバージョンについては除外されています。",
"mediastatistics-nfiles": "$1 ($2%)",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 バイト}} ($2; $3%)",
- "mediastatistics-bytespertype": "このセクションの合計ファイルサイズ{{PLURAL:$4|$4 ファイル}}($5%):{{PLURAL:$1|$1B}}($2;$3%)",
- "mediastatistics-allbytes": "すべての合計ファイルサイズ {{PLURAL:$3|$3 ファイル}}: {{PLURAL:$1|$1B}} ($2).",
+ "mediastatistics-bytespertype": "この節の全 {{PLURAL:$4|$4 ファイル}} ($5%) の総ファイルサイズは {{PLURAL:$1|$1 バイト}} ($2、$3%) です。",
+ "mediastatistics-allbytes": "全 {{PLURAL:$3|$3 ファイル}}の総ファイルサイズは {{PLURAL:$1|$1 バイト}} ($2) です。",
"mediastatistics-table-mimetype": "MIMEタイプ",
"mediastatistics-table-extensions": "取りうる拡張子",
"mediastatistics-table-count": "ファイル数",
diff --git a/languages/i18n/krc.json b/languages/i18n/krc.json
index 807374387a51..baaf65b6ff8c 100644
--- a/languages/i18n/krc.json
+++ b/languages/i18n/krc.json
@@ -4251,5 +4251,9 @@
"interwiki_intro": "Бу, тюрлю-тюрлю викилеге эмда башха тыш сайтлагъа къызыу байланыр ючюн хайырландырылгъан префикс къысха джибериулени танытхан интервики таблицагъа тамал къарамды. Хайырланыугъа теджелген ючюн [https://www.mediawiki.org/wiki/Extension:Interwiki/tr MediaWiki.org-да мануалгъа] къарагъыз.",
"interwiki-legend-label": "Хапарлау",
"interwiki_prefix": "Префикс",
- "interwiki-prefix-label": "Префикс:"
+ "interwiki-prefix-label": "Префикс:",
+ "interwiki_prefix_intro": "<code>[<nowiki />[префикс:<em>бетни аты</em>]]</code> викитекстни синтаксисинде хайырландырыллыкъ интервики префикс.",
+ "interwiki_url_intro": "URL шаблон. $1 орун сакълаучу, <code>[<nowiki />[префикс:<em>бетни аты</em>]]</code>ндагъы <em>бетни аты</em> бла ауушдуруллукъду.",
+ "interwiki_local": "Алгъа",
+ "interwiki-local-label": "Алгъа"
}
diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json
index 8415eab7d929..7ce1a8a66863 100644
--- a/languages/i18n/ms.json
+++ b/languages/i18n/ms.json
@@ -317,11 +317,12 @@
"title-invalid-empty": "Tajuk laman yang diminta kosong atau hanya mengandungi awalan ruang nama.",
"title-invalid-utf8": "Tajuk laman yang diminta mengandungi jujukan UTF-8 yang tidak sah.",
"title-invalid-interwiki": "Tajuk mengandungi pautan antarawiki yang tidak boleh digunakan dalam tajuk.",
- "title-invalid-talk-namespace": "Tajuk laman yang diminta merujuk kepada laman perbincangan yang tidak boleh wujud.",
+ "title-invalid-talk-namespace": "Tajuk laman yang diminta merujuk kepada sebuah laman perbincangan yang salah dinyatakan dalam ruang nama lain. Laman perbincangan bagi laman bukan ruang utama mestilah ditulis sebagai \"Perbincangan projek:Foo\", bukan \"Perbincangan:Projek:Foo\".",
+ "title-invalid-talk-interwiki": "Tajuk laman yang diminta merujuk kepada sebuah laman perbincangan yang salah dinyatakan bagi tajuk pada wiki yang lain. Laman perbincangan bagi tajuk pada wiki yang lain mestilah ditulis dengan awalan interwiki terlebih dahulu, seperti \"ms:Perbincangan:Foo\", bukan \"Perbincangan:mw:Foo\".",
"title-invalid-characters": "Tajuk laman yang diminta mengandungi aksara tak sah: \"$1\".",
"title-invalid-relative": "Tajuk mempunyai laluan relatif. Tajuk laman relatif (./, ../) tidak sah kerana sering tidak tercapai jika dikendalikan oleh pelayar web pengguna.",
"title-invalid-magic-tilde": "Tajuk laman yang diminta mengandungi jujukan tilde magik yang tidak sah (<nowiki>~~~</nowiki>).",
- "title-invalid-too-long": "Tajuk laman yang diminta terlalu panjang. Ia mestilah dikodkan dengan UTF-8 dan tidak melebihi $1 bait.",
+ "title-invalid-too-long": "The requested page title is too long. It must be no longer than $1 {{PLURAL:$1|byte|bytes}} in UTF-8 encoding. The title you entered is $2 {{PLURAL:$2|byte|bytes}}.\n\nTajuk laman yang diminta terlalu panjang. Ia mestilah tidak melebihi $1 bait dalam pengekodan UTF-8. Tajuk yang anda masukkan ialah $2 bait.",
"title-invalid-leading-colon": "Tajuk laman yang diminta bermula dengan tanda titik bertindih yang tidak sah.",
"perfcached": "Data yang berikut disimpan dalam cache dan mungkin tidak terkemas kini. Semaksimum {{PLURAL:$1|satu hasil|$1 hasil}} terdapat dalam cache.",
"perfcachedts": "Data yang berikut disimpan dalam cache dan kali terakhir dikemaskinikan pada $1. Semaksimum {{PLURAL:$4|satu hasil|$4 hasil}} terdapat dalam cache.",
@@ -600,7 +601,7 @@
"edit-recovery-special-recovered-on": "daripada $1",
"edit-recovery-special-recovered-on-tooltip": "Tarikh dan masa kali terakhir data pemulihan anda disimpan",
"edit-recovery-loaded-title": "Pulihkan perubahan?",
- "edit-recovery-loaded-message": "Perubahan anda yang belum disimpan telah dipulihkan secara automatik.",
+ "edit-recovery-loaded-message": "Anda mempunyai perubahan yang belum disimpan yang boleh dipulihkan secara automatik.",
"edit-recovery-loaded-message-different-rev": "<em>Ambil perhatian bahawa halaman mungkin telah berubah sejak anda mula menyunting.</em>",
"edit-recovery-loaded-message-different-rev-publish": "<em>Sila semak perubahan anda sebelum diterbitkan.</em>",
"edit-recovery-loaded-message-different-rev-save": "<em>Sila semak perubahan anda sebelum menyimpan.</em>",
diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json
index 5cd35eaa1500..f8cc18147976 100644
--- a/languages/i18n/pa.json
+++ b/languages/i18n/pa.json
@@ -653,7 +653,7 @@
"nosuchsectiontitle": "ਭਾਗ ਲੱਭ ਨਹੀਂ ਰਿਹਾ",
"nosuchsectiontext": "ਤੁਸੀਂ ਨਾ-ਮੌਜੂਦ ਭਾਗ ਨੂੰ ਸੋਧਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ।\nਸ਼ਾਇਦ ਤੁਹਾਡੇ ਸਫ਼ੇ ਨੂੰ ਵੇਖਣ ਦੇ ਦੌਰਾਨ ਇਹ ਮਿਟਾਇਆ ਜਾਂ ਇਸਦਾ ਸਿਰਲੇਖ ਬਦਲਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।",
"loginreqtitle": "ਦਾਖ਼ਲੇ ਦੀ ਲੋੜ ਹੈ",
- "loginreqlink": "ਦਾਖ਼ਲ",
+ "loginreqlink": "ਦਾਖ਼ਲ ਹੋਵੋ",
"loginreqpagetext": "ਹੋਰ ਸਫ਼ੇ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।",
"accmailtitle": "ਪਾਰਸ਼ਬਦ ਭੇਜਿਆ।",
"accmailtext": "[[User talk:$1|$1]] ਲਈ ਰੈਂਡਮ ਤੌਰ ’ਤੇ ਬਣਿਆ ਪਾਰਸ਼ਬਦ $2 ਨੂੰ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।\nਇਸ ਨੂੰ ਦਾਖ਼ਲ ਹੋਣ ਤੋਂ ਬਾਅਦ <em>[[Special:ChangePassword|ਪਾਰਸ਼ਬਦ ਬਦਲੋ]]</em> ਸਫ਼ੇ ’ਤੇ ਜਾ ਕੇ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
@@ -944,7 +944,7 @@
"search-thumbnail-alt": "$1 ਲਈ ਥੰਬਨੇਲ",
"searchrelated": "ਸਬੰਧਤ",
"searchall": "ਸਾਰੇ",
- "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ਵਿੱਚੋਂ <strong>$1</strong> ਨਤੀਜੇ| <strong>$3</strong> ਵਿੱਚੋਂ <strong>$1 - $2</strong> ਨਤੀਜੇ}}",
+ "search-showingresults": "{{PLURAL:$4|1=<strong>$3</strong> ਵਿੱਚੋਂ <strong>$1</strong> ਨਤੀਜੇ| <strong>$3</strong> ਵਿੱਚੋਂ <strong>$1 - $2</strong> ਨਤੀਜੇ}}",
"search-nonefound": "ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।",
"powersearch-legend": "ਤਕਨੀਕੀ ਖੋਜ",
"powersearch-ns": "ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:",
@@ -1820,7 +1820,7 @@
"linkshere": "ਹੇਠਾਂ ਦਿੱਤੇ ਸਫ਼ੇ <strong>'''$2'''</strong> ਨਾਲ ਜੋੜਦੇ ਹਨ:",
"nolinkshere": "ਕੋਈ ਵੀ ਸਫ਼ਾ '''$2''' ਨਾਲ ਨਹੀਂ ਜੋੜਦਾ।",
"isredirect": "ਸਫ਼ੇ ਨੂੰ ਮੋੜੋ",
- "istemplate": "ਟਾਕਰਾ ਕਰੋ",
+ "istemplate": "ਸਮਾਵੇਸ਼-ਰਾਹੀਂ",
"isimage": "ਫ਼ਾਈਲ ਕੜੀਆਂ",
"whatlinkshere-prev": "{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}",
"whatlinkshere-next": "{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}",
@@ -2498,7 +2498,12 @@
"log-action-filter-all": "ਸਾਰੇ",
"log-action-filter-block-block": "ਪਾਬੰਦੀ",
"log-action-filter-block-unblock": "ਪਾਬੰਦੀ ਹਟਾਈ",
+ "log-action-filter-delete-delete": "ਸਫ਼ਾ ਮਿਟਾਉਣਾ",
"log-action-filter-newusers-byemail": "ਈਮੇਲ ਰਾਹੀਂ ਭੇਜੇ ਪਾਰਸ਼ਬਦ ਨਾਲ ਬਣਾਇਆ",
+ "log-action-filter-patrol-patrol": "ਹੱਥੀਂ ਗਸ਼ਤ",
+ "log-action-filter-protect-protect": "ਸੁਰੱਖਿਆ",
+ "log-action-filter-protect-modify": "ਸੁਰੱਖਿਆ ਤਬਦੀਲੀ",
+ "log-action-filter-rights-rights": "ਦਸਤੀ ਤਬਦੀਲੀ",
"authmanager-password-help": "ਪ੍ਰਮਾਣਿਕਤਾ ਲਈ ਪਾਰਸ਼ਬਦ।",
"authmanager-retype-help": "ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਦੁਬਾਰਾ ਪਾਰਸ਼ਬਦ.",
"authmanager-email-label": "ਈਮੇਲ",
@@ -2512,8 +2517,12 @@
"authform-wrongtoken": "ਗਲਤ ਟੋਕਨ",
"specialpage-securitylevel-not-allowed-title": "ਇਜਾਜ਼ਤ ਨਹੀਂ",
"cannotauth-not-allowed-title": "ਪ੍ਰਵਾਨਗੀ ਨਹੀਂ ਮਿਲੀ",
+ "credentialsform-provider": "ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਦੀ ਕਿਸਮ:",
"credentialsform-account": "ਖਾਤੇ ਦਾ ਨਾਂ:",
"specialmute-submit": "ਤਸਦੀਕ ਕਰੋ",
+ "revid": "ਦੁਹਰਾਅ $1",
+ "pageid": "ਸਫ਼ਾ ਸ਼ਿਨਾਖਤ $1",
+ "gotointerwiki-invalid": "ਦਿੱਤਾ ਸਿਰਲੇਖ ਗਲਤ ਹੈ।",
"pagedata-bad-title": "ਗਲਤ ਸਿਰਲੇਖ: $1।",
"passwordpolicies": "ਪਾਰਸ਼ਬਦ ਨੀਤੀਆਂ",
"passwordpolicies-group": "ਸਮੂਹ",
@@ -2547,7 +2556,7 @@
"blockedtext-expiration-time": "ਪਾਬੰਦੀ ਦੀ ਮਿਆਦ ਪੁੱਗਣੀ: $1",
"blockedtext-expiration-longest-block": "ਸਭ ਤੋਂ ਲੰਬੇ ਰੋਕ ਦੀ ਮਿਆਦ ਪੁੱਗਣੀ: $1",
"blockedtext-intended-blockee": "ਜਿਸਨੂੰ ਬਲਾਕ ਕਰਨਾ ਹੈ: $1",
- "blockedtext-contact-blocker-admin": "ਤੁਸੀਂ ਬਲਾਕ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ [[{{MediaWiki:Grouppage-sysop}}|ਪ੍ਰਬੰਧਕ]] ਨਾਲ ਸੰਪਰਕ ਕਰ ਸਕਦੇ ਹੋ।",
+ "blockedtext-contact-blocker-admin": "ਤੁਸੀਂ ਪਾਬੰਦੀ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ [[{{MediaWiki:Grouppage-sysop}}|ਪ੍ਰਬੰਧਕ]] ਨਾਲ ਗੱਲਬਾਤ ਕਰ ਸਕਦੇ ਹੋ।",
"blockedtext-block-ip": "ਤੁਹਾਡਾ ਮੌਜੂਦਾ IP ਪਤਾ $1 ਹੈ।",
"blockedtext-include-details-queries": "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਕਿਸੇ ਵੀ ਸਵਾਲ ਵਿੱਚ ਉਪਰੋਕਤ ਸਾਰੇ ਵੇਰਵੇ ਸ਼ਾਮਲ ਕਰੋ।",
"renameuser": "ਵਰਤੋਂਕਾਰ ਦਾ ਨਾਂ ਬਦਲੋ",
@@ -2587,21 +2596,38 @@
"interwiki-prefix-label": "ਅਗੇਤਰ:",
"interwiki_local": "ਅਗਾਂਹ",
"interwiki-local-label": "ਅੱਗੇ",
+ "interwiki_trans": "ਸਮਾਵੇਸ਼ ਕਰੋ",
+ "interwiki-trans-label": "ਸਮਾਵੇਸ਼ ਕਰੋ",
"interwiki_1": "ਹਾਂ",
"interwiki_0": "ਨਹੀਂ",
+ "interwiki_error": "ਗਲਤੀ: ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਖਾਲੀ ਹੈ, ਜਾਂ ਕੁਝ ਹੋਰ ਗਲਤ ਹੋ ਗਿਆ ਹੈ।",
"interwiki_edit": "ਸੋਧੋ",
"interwiki_reasonfield": "ਕਾਰਨ:",
+ "interwiki_deleting": "ਤੁਸੀਂ ਅਗੇਤਰ \"$1\" ਨੂੰ ਮਿਟਾ ਰਹੇ ਹੋ।",
+ "interwiki_deleted": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਸੀ।",
+ "interwiki_delfailed": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਤੋਂ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।",
"interwiki-logtext": "ਚਿੱਠਾ ਵੇਖੋ",
"interwiki_addtext": "ਕੋਈ ਅੰਤਰ-ਵਿਕੀ ਜਾਂ ਭਾਸ਼ਾਈ ਅਗੇਤਰ ਜੋੜੋ",
"interwiki-addtext-local": "ਕੋਈ ਸਥਾਨੀ ਅੰਤਰਵਿਕੀ ਜਾਂ ਭਾਸ਼ਾਈ ਅਗੇਤਰ ਜੋੜੋ",
"interwiki-addtext-nolang": "ਇੱਕ ਅੰਤਰ-ਵਿਕੀ ਅਗੇਤਰ ਜੋੜੋ",
"interwiki-addtext-local-nolang": "ਇੱਕ ਸਥਾਨਕ ਅੰਤਰ-ਵਿਕੀ ਅਗੇਤਰ ਜੋੜੋ",
"interwiki_addbutton": "ਜੋੜੋ",
+ "interwiki_added": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ ਸੀ।",
+ "interwiki_addfailed": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਵਿੱਚ ਜੋਡ਼ਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। \nਸ਼ਾਇਦ ਇਹ ਪਹਿਲਾਂ ਹੀ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਵਿੱਚ ਮੌਜੂਦ ਹੈ।",
"interwiki_edittext": "ਇੱਕ ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ ਸੰਪਾਦਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
+ "interwiki_editintro": "ਤੁਸੀਂ ਇੱਕ ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ ਨੂੰ ਸੋਧ ਕਰ ਰਹੇ ਹੋ। \nਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਮੌਜੂਦਾ ਕੜੀਆਂ ਨੂੰ ਤੋਡ਼ ਸਕਦਾ ਹੈ।",
+ "interwiki_edited": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਵਿੱਚ ਸੋਧਿਆ ਗਿਆ ਸੀ।",
+ "interwiki_editerror": "ਅਗੇਤਰ \"$1\" ਨੂੰ ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਵਿੱਚ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। \nਸ਼ਾਇਦ ਇਹ ਮੌਜੂਦ ਨਹੀ ਏ।",
+ "interwiki-submit-empty": "ਅਗੇਤਰ ਅਤੇ URL ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦੇ।",
+ "log-name-interwiki": "ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ ਦੇ ਚਿੱਠੇ",
+ "log-description-interwiki": "ਇਹ [[Special:Interwiki|ਅੰਤਰਵਿਕੀ ਸਾਰਣੀ]] ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਦਾ ਚਿੱਠਾ ਹੈ।",
"right-interwiki": "ਅੰਤਰ-ਵਿਕੀ ਡਾਟਾ ਸੋਧੋ",
"action-interwiki": "ਇਸ ਅੰਤਰਵਿਕੀ ਇੰਦਰਾਜ ਨੂੰ ਬਦਲੋ",
"interwiki-global-links": "ਵਿਸ਼ਵਵਿਆਪੀ ਅੰਤਰ-ਵਿਕੀ ਅਗੇਤਰ",
+ "interwiki-global-description": "ਇਹ ਅਗੇਤਰ ਇੱਕ ਵਿਸ਼ਵਪੱਧਰੀ ਸੰਰਚਨਾ ਤੋਂ ਵਿਰਾਸਤ ਵਿੱਚ ਮਿਲੇ ਹਨ, ਅਤੇ ਸਿਰਫ ਸਰੋਤ ਵਿਕੀ ਉੱਤੇ ਸੋਧੇ ਜਾ ਸਕਦੇ ਹਨ।",
"interwiki-local-links": "ਸਥਾਨੀ ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ",
"interwiki-links": "ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ",
- "interwiki-language-links": "ਅੰਤਰਭਾਸ਼ਾਈ ਅਗੇਤਰ"
+ "interwiki-language-links": "ਅੰਤਰਭਾਸ਼ਾਈ ਅਗੇਤਰ",
+ "interwiki-language-description": "ਇਹ ਅਗੇਤਰ ਪਰਿਭਾਸ਼ਿਤ ਭਾਸ਼ਾ ਦੇ ਕੋਡਾਂ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਹਨ, ਅਤੇ ਕਿਸੇ ਸਫ਼ੇ 'ਤੇ ਜੋੜਨ 'ਤੇ \"{{int:otherlanguages}}\" ਸੂਚੀ ਬਣਾਉਣ ਲਈ ਵਰਤੇ ਜਾਣਗੇ।",
+ "interwiki-global-language-links": "ਵਿਸ਼ਵ ਪੱਧਰੀ ਅੰਤਰ-ਭਾਸ਼ਾਈ ਅਗੇਤਰ"
}
diff --git a/languages/i18n/preferences/ang.json b/languages/i18n/preferences/ang.json
index 0c011398634b..4dcdd8b63e2a 100644
--- a/languages/i18n/preferences/ang.json
+++ b/languages/i18n/preferences/ang.json
@@ -3,12 +3,13 @@
"authors": [
"Gott wisst",
"Heahwrita",
- "Hogweard"
+ "Hogweard",
+ "Rocioun"
]
},
- "preferences": "Foreberunga",
+ "preferences": "Þine settunge",
"saveprefs": "Horda",
- "savedprefs": "Þīna foreberunga wurdon gehordod.",
+ "savedprefs": "Þine settunge wurdon gehordod.",
"username": "{{GENDER:$1|Brucendnama}}:",
"yourrealname": "Þin soða nama:",
"yourpassword": "Leafnessword:",
@@ -48,7 +49,7 @@
"tog-showrollbackconfirmation": "Yw aseðendlicu gemanung þan þu aþyst on awæltendum hlence",
"tog-forcesafemode": "Æfre gecyþ [[mw:Manual:Safemode|hæghalcynn]]",
"tog-editsectiononrightclick": "Þafa dæla adihtunge þurh swiðran healfe mys swengas on dæla titulum",
- "tog-editondblclick": "Adiht trametas mid twifealdum mys swenge",
+ "tog-editondblclick": "Adihtan trametas mid twifealdum mys swenge",
"editfont-style": "Adihtunge mearce stæfcynd:",
"editfont-monospace": "Anes gemetes gebræded stæfcynd",
"editfont-sansserif": "Tægelleas stæfcynd",
diff --git a/languages/i18n/preferences/cs.json b/languages/i18n/preferences/cs.json
index 3557dfc7c4c0..aca1ad45932f 100644
--- a/languages/i18n/preferences/cs.json
+++ b/languages/i18n/preferences/cs.json
@@ -91,7 +91,7 @@
"prefs-help-email": "Uvedení e-mailu není povinné, ale umožní zaslání nového hesla v případě, že své heslo zapomenete.",
"prefs-help-email-required": "Je vyžadována e-mailová adresa.",
"prefs-help-email-others": "Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelské stránky kontaktovat.\nVaše adresa v takovém případě není prozrazena.",
- "tog-requireemail": "Při obnově hesla vyžadovat zadání jak e-mailu, tak i uživatelského jména.",
+ "tog-requireemail": "Při obnově hesla vyžadovat zadání jak e-mailu, tak i uživatelského jména",
"prefs-help-requireemail": "Toto zvyšuje soukromí a pomáhá předcházet nevyžádaným e-mailům.",
"noemailprefs": "Pro zprovoznění následujících možností musíte zadat svou e-mailovou adresu.",
"emailnotauthenticated": "Vaše e-mailová adresa dosud nebyla ověřena.\nU následujících funkcí nebudou zasílány žádné e-maily.",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 41eac5b83d4c..6ac16b344bfd 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -370,7 +370,7 @@
"searcharticle": "Button description in the search menu displayed on every page. The \"Search\" button is {{msg-mw|Searchbutton}}.\n{{Identical|Go}}\nNote however that some wikis (e.g. French Wikipedia) have chosen to translate this search submission button differently as ''Read'', rather than ''Go'':\n{{Identical|Read}}",
"skin-view-history": "Tab label in the Vector skin. See for example {{canonicalurl:Translating:MediaWiki|useskin=vector}}\n{{Identical|View history}}",
"history": "{{Identical|Page history}}",
- "history_short": "Legacy message for history tab.\n\nSee {{msg-mw|view-history}}",
+ "history_short": "Legacy message for history tab.\n\nSee {{msg-mw|Skin-view-history}}",
"history_small": "Uncapitalized version of {{msg-mw|History short}}.\n\n{{Identical|History}}",
"updatedmarker": "Displayed in the page history (of a page you are [[Special:Watchlist|watching]]), when the page has been edited since the last time you visited it. This feature is used if [[mw:Manual:$wgShowUpdatedMarker|$wgShowUpdatedMarker]] is enabled.",
"printableversion": "Display name for link in wiki menu that leads to a printable version of a content page. Example: see one but last menu item on [[Main Page]].\n\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}\n{{Identical|Printable version}}",
@@ -2147,7 +2147,7 @@
"filepage-nofile-link": "This message appears when visiting a File page for which there's no file, if the user can upload files, and file uploads are enabled. (Otherwise, see {{msg-mw|Filepage-nofile}})\n\nParameters:\n* $1 - URL of upload page for this file\nFilepage-nofile and Filepage-nofile-link message deprecate {{msg-mw|Noimage}}",
"uploadnewversion-linktext": "Used on pages in the \"File\" namespace to update the file version.",
"shared-repo-from": "This message is shown on an image description page when a duplicate of the image exists on a shared repository such as Wikimedia Commons.\n\nExample: https://test.wikipedia.org/wiki/File:Wiki.png#filelinks\n\nParameters:\n* $1 - the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|Shared-repo-name-shared}}. The default value for $1 is {{msg-mw|Shared-repo}}.",
- "shared-repo": "This message can be used as parameter <code>$1</code> in the following messages:\n* {{msg-mw|view-foreign}}\n* {{msg-mw|shared-repo-from}}\n* {{msg-mw|sharedupload}}\n* {{msg-mw|sharedupload-desc-here}}\n* {{msg-mw|sharedupload-desc-there}}",
+ "shared-repo": "This message can be used as parameter <code>$1</code> in the following messages:\n* {{msg-mw|skin-view-foreign}}\n* {{msg-mw|shared-repo-from}}\n* {{msg-mw|sharedupload}}\n* {{msg-mw|sharedupload-desc-here}}\n* {{msg-mw|sharedupload-desc-there}}",
"shared-repo-name-wikimediacommons": "{{optional}}\n\nA specific version of {{msg-mw|shared-repo}}; see [[MediaWiki:Shared-repo/qqq]] for more information.\n\n{{Identical|Wikimedia Commons}}",
"filepage.css": "{{Optional}}",
"upload-disallowed-here": "This message appears on an image page in place of the normal reupload link if they cannot upload - e.g. if the image page is upload protected and they do not have the right privilege.",
@@ -2978,6 +2978,7 @@
"block-pages-placeholder": "Placeholder text for the input specifying the pages the user is blocked from editing on [[Special:Block]]",
"block-namespaces-placeholder": "Placeholder text for the input specifying the namespaces the user is blocked from editing on [[Special:Block]]",
"block-update": "Button label for the button with which to update a block on [[Special:Block]]",
+ "block-invalid-id": "Label for an error message shown when an invalid block ID is provided on [[Special:Block]]",
"unblockip": "Used as title and legend for the form in [[Special:Unblock]].",
"unblockiptext": "Used in the {{msg-mw|Unblockip}} form on [[Special:Unblock]].",
"ipusubmit": "Used as button text on [{{canonicalurl:Special:BlockList|action=unblock}} Special:BlockList?action=unblock]. To see the message:\n* Go to [[Special:BlockList]]\n* Click \"unblock\" for any block (but you can only see \"unblock\" if you have administrator rights)\n* It is now the button below the form",
@@ -3015,7 +3016,7 @@
"ipblocklist-submit": "Used as Submit button text in the form on [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Ipblocklist-submit}}\n{{Identical|Search}}",
"ipblocklist-localblock": "[[File:Special IPBlockList new.png|thumb|Example]]\nUsed on [[Special:BlockList]] as header when global blocks exists too.",
"ipblocklist-otherblocks": "[[File:Special IPBlockList new.png|thumb|Example]]\nUsed on [[Special:BlockList]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks.\n\nParameters:\n* $1 - number of blocks\nSee also:\n* {{msg-mw|Ipb-otherblocks-header}}",
- "infiniteblock": "Part of the log entry of user block in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n* {{msg-mw|Createaccountblock}}\n* {{msg-mw|Noautoblockblock}}\n* {{msg-mw|Emailblock}}\n* {{msg-mw|Blocklist-nousertalk}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Expiringblock}}\n{{Identical|Infinite}}",
+ "infiniteblock": "Part of the log entry of user block in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n* {{msg-mw|Createaccountblock}}\n* {{msg-mw|Noautoblockblock}}\n* {{msg-mw|Emailblock}}\n* {{msg-mw|Blocklist-nousertalk}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Globalblocking-expiringblock}}\n\n{{Identical|Infinite}}",
"anononlyblock": "Part of the log entry of user block in [[Special:BlockList]].\n\n\"anon.\" stands for \"anonymous\".\n\nSee also:\n* {{msg-mw|Block-log-flags-anononly}}\n{{Related|Blocklist}}\n{{Identical|Anon only}}",
"noautoblockblock": "Part of the log entry of user block in [[Special:BlockList]].\n{{Related|Blocklist}}\n{{Identical|Autoblock disabled}}",
"createaccountblock": "Part of the log entry of user block in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Block-log-flags-nocreate}}\n{{Related|Blocklist}}",
diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json
index 94acdece2991..3bd92781d778 100644
--- a/languages/i18n/ru.json
+++ b/languages/i18n/ru.json
@@ -850,7 +850,7 @@
"edit_form_incomplete": "'''Некоторые части формы редактирования не достигли сервера. Внимательно проверьте, что ваши правки не повреждены, и попробуйте ещё раз.'''",
"editing": "Редактирование: $1",
"edit-textarea-aria-label": "Редактор исходного вики-текста",
- "creating": "Создание страницы «$1»",
+ "creating": "Создание: $1",
"editingsection": "Редактирование: $1 (раздел)",
"editingcomment": "Редактирование: $1 (новый раздел)",
"editconflict": "Конфликт редактирования: $1",
@@ -1104,7 +1104,7 @@
"mergelog": "Журнал объединений",
"revertmerge": "Разделить",
"mergelogpagetext": "Ниже приведён список последних объединений историй страниц.",
- "history-title": "$1: история изменений",
+ "history-title": "$1 — история изменений",
"difference-title": "$1: различия между версиями",
"difference-title-multipage": "«$1» и «$2»: разница между страницами",
"difference-multipage": "(Различия между страницами)",
@@ -2418,7 +2418,7 @@
"excontent": "содержимое: «$1»",
"excontentauthor": "содержимое: «$1», единственным автором которого был [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]])",
"exbeforeblank": "содержимое до очистки: «$1»",
- "delete-confirm": "$1: удаление",
+ "delete-confirm": "Удалить «$1»",
"delete-legend": "Удаление",
"delete-talk-summary-prefix": "Удалено вместе со связанной страницей по причине: $1",
"historywarning": "<strong>Внимание:</strong> Вы собираетесь удалить страницу, у которой есть история правок, содержащая $1 {{PLURAL:$1|версию|версии|версий}}:",
@@ -2492,7 +2492,7 @@
"protectedarticle-comment": "Защитил{{GENDER:$2||а}} страницу [[$1]]",
"modifiedarticleprotection-comment": "Изменил{{GENDER:$2||а}} настройки защиты для «[[$1]]»",
"unprotectedarticle-comment": "Cнял{{GENDER:$2||а}} защиту с «[[$1]]»",
- "protect-title": "Изменение настроек защиты для «$1»",
+ "protect-title": "Изменить настройки защиты «$1»",
"protect-title-notallowed": "Просмотр настроек защиты «$1»",
"prot_1movedto2": "[[$1]] переименована в [[$2]]",
"protect-badnamespace-title": "Незащищаемое пространство имён",
@@ -2849,7 +2849,7 @@
"databaselocked": "База данных уже заблокирована.",
"databasenotlocked": "База данных не была заблокирована.",
"lockedbyandtime": "($1 $2 $3)",
- "move-page": "$1 — переименование",
+ "move-page": "Переименовать «$1»",
"move-page-legend": "Переименование страницы",
"movepagetext": "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое.\nВы можете автоматически обновить перенаправления, которые вели на старое название.\nЕсли вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница <strong>не будет</strong> переименована, если уже существует страница с названием, идентичным выбранному, кроме случаев, когда такая страница пуста или представляет собой перенаправление, и при этом не имеет истории правок.\nЭто означает, что сделав ошибочное переименование, вы можете переименовать страницу обратно в то название, которое у неё только что было, но не можете случайно затереть существующую страницу.\n\n<strong>Примечание:</strong>\nПереименование популярных страниц может привести к масштабным и неожиданным изменениям.\nПожалуйста, прежде чем продолжать, убедитесь, что понимаете все возможные последствия.",
"movepagetext-noredirectfixer": "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое название.\nПожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница <strong>не будет</strong> переименована, если страница с новым названием уже существует, кроме случаев, если она пуста или представляет собой перенаправление, и при этом не имеет истории правок.\nЭто означает, что сделав ошибочное переименование, вы сможете переименовать страницу обратно в то название, которое у неё только что было, но не сможете случайно затереть существующую страницу.\n\n<strong>Примечание:</strong>\nПереименование может привести к масштабным и неожиданным изменениям для популярных страниц.\nПожалуйста, прежде чем продолжить, убедитесь, что понимаете все возможные последствия.",
diff --git a/package-lock.json b/package-lock.json
index 9db7cff64f1b..a52c735a8b05 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -40,7 +40,7 @@
"karma-qunit": "4.2.0",
"pinia": "2.0.16",
"qunit": "2.20.0",
- "stylelint-config-wikimedia": "0.17.2",
+ "stylelint-config-wikimedia": "0.18.0",
"svgo": "3.2.0",
"vue": "3.4.27",
"wdio-mediawiki": "file:tests/selenium/wdio-mediawiki",
@@ -2016,9 +2016,9 @@
}
},
"node_modules/@csstools/css-parser-algorithms": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
- "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
"dev": true,
"funding": [
{
@@ -2030,17 +2030,18 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
},
"peerDependencies": {
- "@csstools/css-tokenizer": "^2.3.1"
+ "@csstools/css-tokenizer": "^3.0.3"
}
},
"node_modules/@csstools/css-tokenizer": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
- "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
"dev": true,
"funding": [
{
@@ -2052,14 +2053,15 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
}
},
"node_modules/@csstools/media-query-list-parser": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
- "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
+ "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
"dev": true,
"funding": [
{
@@ -2071,34 +2073,24 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.6.3",
- "@csstools/css-tokenizer": "^2.3.1"
+ "@csstools/css-parser-algorithms": "^3.0.1",
+ "@csstools/css-tokenizer": "^3.0.1"
}
},
- "node_modules/@csstools/selector-specificity": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
- "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
+ "node_modules/@dual-bundle/import-meta-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+ "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^6.0.13"
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/@es-joy/jsdoccomment": {
@@ -3573,40 +3565,42 @@
"dev": true
},
"node_modules/@stylistic/stylelint-config": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz",
- "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
+ "integrity": "sha512-8J4YAxggy2Nzkb8KJIOLbtMXTPZ5gpKVmyhiiuKEUgCl9XFND5lM0e/ZZBMGEYZ68h5qcsS/jgg1wh235erRAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@stylistic/stylelint-plugin": "^2.0.0"
+ "@stylistic/stylelint-plugin": "^3.0.0"
},
"engines": {
"node": "^18.12 || >=20.9"
},
"peerDependencies": {
- "stylelint": "^16.0.2"
+ "stylelint": "^16.8.0"
}
},
"node_modules/@stylistic/stylelint-plugin": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz",
- "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz",
+ "integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/media-query-list-parser": "^2.1.5",
+ "@csstools/css-parser-algorithms": "^3.0.1",
+ "@csstools/css-tokenizer": "^3.0.1",
+ "@csstools/media-query-list-parser": "^3.0.1",
"is-plain-object": "^5.0.0",
- "postcss-selector-parser": "^6.0.13",
+ "postcss-selector-parser": "^6.1.2",
"postcss-value-parser": "^4.2.0",
"style-search": "^0.1.0",
- "stylelint": "^16.0.2"
+ "stylelint": "^16.8.2"
},
"engines": {
"node": "^18.12 || >=20.9"
},
"peerDependencies": {
- "stylelint": "^16.0.2"
+ "stylelint": "^16.8.0"
}
},
"node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": {
@@ -3614,6 +3608,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3947,7 +3942,8 @@
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/mocha": {
"version": "10.0.6",
@@ -5199,6 +5195,7 @@
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
"integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -5235,6 +5232,7 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -5280,6 +5278,7 @@
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -5676,9 +5675,9 @@
"dev": true
},
"node_modules/browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "version": "4.24.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
+ "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
"dev": true,
"funding": [
{
@@ -5694,11 +5693,12 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -6713,6 +6713,7 @@
"resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
"integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^1.0.33"
@@ -6722,13 +6723,15 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/css-tokenize/node_modules/readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -6740,7 +6743,8 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/css-tree": {
"version": "2.3.1",
@@ -7222,20 +7226,20 @@
}
},
"node_modules/doiuse": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz",
- "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.5.tgz",
+ "integrity": "sha512-ljuf9ndGqKST0GlPAYyCg04hbQAeR1xIIWVDjQaDDkoTY/Y1Vb+8FNoy6NuVuJIEEKe/nKUH8NRWjG7JJxZ9Eg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001487",
+ "browserslist": "^4.24.0",
+ "caniuse-lite": "^1.0.30001669",
"css-tokenize": "^1.0.1",
- "duplexify": "^4.1.2",
- "ldjson-stream": "^1.2.1",
+ "duplexify": "^4.1.3",
"multimatch": "^5.0.0",
- "postcss": "^8.4.21",
+ "postcss": "^8.4.47",
"source-map": "^0.7.4",
- "yargs": "^17.7.1"
+ "yargs": "^17.7.2"
},
"bin": {
"doiuse": "bin/cli.js"
@@ -7353,6 +7357,7 @@
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
"integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.4.1",
"inherits": "^2.0.3",
@@ -7471,10 +7476,11 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.19",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.19.tgz",
- "integrity": "sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==",
- "dev": true
+ "version": "1.5.74",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz",
+ "integrity": "sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/emittery": {
"version": "0.13.1",
@@ -7952,10 +7958,11 @@
}
},
"node_modules/eslint-plugin-n/node_modules/globals": {
- "version": "15.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz",
- "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==",
+ "version": "15.14.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
+ "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -9680,6 +9687,7 @@
"url": "https://github.com/sponsors/fb55"
}
],
+ "license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
@@ -9835,10 +9843,11 @@
]
},
"node_modules/ignore": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
- "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
@@ -12227,10 +12236,11 @@
}
},
"node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -12588,10 +12598,11 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
- "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
- "dev": true
+ "version": "0.35.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
+ "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ky": {
"version": "0.30.0",
@@ -12632,25 +12643,6 @@
"util-deprecate": "~1.0.1"
}
},
- "node_modules/ldjson-stream": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz",
- "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==",
- "dev": true,
- "dependencies": {
- "split2": "^0.2.1",
- "through2": "^0.6.1"
- }
- },
- "node_modules/ldjson-stream/node_modules/split2": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
- "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==",
- "dev": true,
- "dependencies": {
- "through2": "~0.6.1"
- }
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -12881,7 +12873,8 @@
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.union": {
"version": "4.6.0",
@@ -13498,6 +13491,7 @@
"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
"integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/minimatch": "^3.0.3",
"array-differ": "^3.0.0",
@@ -13593,10 +13587,11 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
- "dev": true
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-watch": {
"version": "0.7.3",
@@ -14486,13 +14481,14 @@
}
},
"node_modules/postcss-html": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz",
- "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.7.0.tgz",
+ "integrity": "sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"htmlparser2": "^8.0.0",
- "js-tokens": "^8.0.0",
+ "js-tokens": "^9.0.0",
"postcss": "^8.4.0",
"postcss-safe-parser": "^6.0.0"
},
@@ -14501,16 +14497,18 @@
}
},
"node_modules/postcss-html/node_modules/js-tokens": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
- "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
- "dev": true
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/postcss-html/node_modules/postcss-safe-parser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
"integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
},
@@ -14567,10 +14565,11 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
- "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -15818,6 +15817,7 @@
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -15876,6 +15876,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
@@ -16004,7 +16005,8 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/streamroller": {
"version": "3.0.2",
@@ -16159,52 +16161,64 @@
"node_modules/style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
- "dev": true
+ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/stylelint": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz",
- "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==",
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz",
+ "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3",
- "@csstools/media-query-list-parser": "^2.1.7",
- "@csstools/selector-specificity": "^3.0.1",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "@csstools/media-query-list-parser": "^4.0.2",
+ "@csstools/selector-specificity": "^5.0.0",
+ "@dual-bundle/import-meta-resolve": "^4.1.0",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
- "css-functions-list": "^3.2.1",
- "css-tree": "^2.3.1",
- "debug": "^4.3.4",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.0.1",
+ "debug": "^4.3.7",
"fast-glob": "^3.3.2",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^8.0.0",
+ "file-entry-cache": "^9.1.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^5.3.0",
+ "ignore": "^6.0.2",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.29.0",
+ "known-css-properties": "^0.35.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^13.1.0",
- "micromatch": "^4.0.5",
+ "meow": "^13.2.0",
+ "micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.33",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^7.0.0",
- "postcss-selector-parser": "^6.0.15",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.49",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.0.0",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
- "strip-ansi": "^7.1.0",
- "supports-hyperlinks": "^3.0.0",
+ "supports-hyperlinks": "^3.1.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.1",
+ "table": "^6.9.0",
"write-file-atomic": "^5.0.1"
},
"bin": {
@@ -16212,50 +16226,59 @@
},
"engines": {
"node": ">=18.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/stylelint"
}
},
"node_modules/stylelint-config-recommended": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz",
- "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
+ "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^16.0.0"
+ "stylelint": "^16.1.0"
}
},
"node_modules/stylelint-config-wikimedia": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
- "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.18.0.tgz",
+ "integrity": "sha512-Lr45NIe7pG8i7BPcMc6EddO1pRK8/KNG8gp4o/oOG1Ez10hglJuJb/QT17BlzX8NPkhtP2KdY63NS2f/Wcj6Ww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@stylistic/stylelint-config": "1.0.1",
- "@stylistic/stylelint-plugin": "2.0.0",
+ "@stylistic/stylelint-config": "2.0.0",
+ "@stylistic/stylelint-plugin": "3.1.1",
"browserslist-config-wikimedia": "0.7.0",
- "postcss-html": "1.6.0",
+ "postcss-html": "1.7.0",
"postcss-less": "6.0.0",
- "stylelint": "16.2.0",
- "stylelint-config-recommended": "14.0.0",
- "stylelint-no-unsupported-browser-features": "8.0.1"
+ "stylelint": "16.12.0",
+ "stylelint-config-recommended": "14.0.1",
+ "stylelint-no-unsupported-browser-features": "8.0.2"
},
"peerDependencies": {
"postcss-less": "^6.0.0"
}
},
"node_modules/stylelint-no-unsupported-browser-features": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz",
- "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.2.tgz",
+ "integrity": "sha512-4PY2qJ3ZTEje9RgGfaQ82eJoPioXxs6hazeKpji/wzLNVzTX2wd4b0Ds3ewdLkH3ID+o63IInuTquU2MNJO3YQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "doiuse": "^6.0.2",
+ "doiuse": "^6.0.5",
"postcss": "^8.4.32"
},
"engines": {
@@ -16265,16 +16288,51 @@
"stylelint": "^16.0.2"
}
},
- "node_modules/stylelint/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz",
+ "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.0.0"
}
},
"node_modules/stylelint/node_modules/balanced-match": {
@@ -16283,29 +16341,55 @@
"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
"dev": true
},
+ "node_modules/stylelint/node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
"node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
+ "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flat-cache": "^4.0.0"
+ "flat-cache": "^5.0.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18"
}
},
"node_modules/stylelint/node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
+ "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flatted": "^3.2.9",
+ "flatted": "^3.3.1",
"keyv": "^4.5.4"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
+ }
+ },
+ "node_modules/stylelint/node_modules/ignore": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+ "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
}
},
"node_modules/stylelint/node_modules/is-plain-object": {
@@ -16317,6 +16401,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stylelint/node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/stylelint/node_modules/postcss-selector-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz",
+ "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/stylelint/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -16326,21 +16431,6 @@
"node": ">=8"
}
},
- "node_modules/stylelint/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
"node_modules/suffix": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz",
@@ -16479,10 +16569,11 @@
"dev": true
},
"node_modules/table": {
- "version": "6.8.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
- "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"ajv": "^8.0.1",
"lodash.truncate": "^4.4.2",
@@ -16499,6 +16590,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -16514,7 +16606,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/tapable": {
"version": "2.2.1",
@@ -16579,40 +16672,6 @@
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
- "node_modules/through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==",
- "dev": true,
- "dependencies": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- }
- },
- "node_modules/through2/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "node_modules/through2/node_modules/readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/through2/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
- },
"node_modules/tiny-glob": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
@@ -16996,9 +17055,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"dev": true,
"funding": [
{
@@ -17014,9 +17073,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -17562,15 +17622,6 @@
"integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true
},
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -19274,31 +19325,30 @@
"dev": true
},
"@csstools/css-parser-algorithms": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
- "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
"dev": true,
"requires": {}
},
"@csstools/css-tokenizer": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
- "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
"dev": true
},
"@csstools/media-query-list-parser": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
- "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
+ "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
"dev": true,
"requires": {}
},
- "@csstools/selector-specificity": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
- "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
- "dev": true,
- "requires": {}
+ "@dual-bundle/import-meta-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+ "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
+ "dev": true
},
"@es-joy/jsdoccomment": {
"version": "0.43.1",
@@ -20456,28 +20506,28 @@
"dev": true
},
"@stylistic/stylelint-config": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz",
- "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
+ "integrity": "sha512-8J4YAxggy2Nzkb8KJIOLbtMXTPZ5gpKVmyhiiuKEUgCl9XFND5lM0e/ZZBMGEYZ68h5qcsS/jgg1wh235erRAw==",
"dev": true,
"requires": {
- "@stylistic/stylelint-plugin": "^2.0.0"
+ "@stylistic/stylelint-plugin": "^3.0.0"
}
},
"@stylistic/stylelint-plugin": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz",
- "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz",
+ "integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==",
"dev": true,
"requires": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/media-query-list-parser": "^2.1.5",
+ "@csstools/css-parser-algorithms": "^3.0.1",
+ "@csstools/css-tokenizer": "^3.0.1",
+ "@csstools/media-query-list-parser": "^3.0.1",
"is-plain-object": "^5.0.0",
- "postcss-selector-parser": "^6.0.13",
+ "postcss-selector-parser": "^6.1.2",
"postcss-value-parser": "^4.2.0",
"style-search": "^0.1.0",
- "stylelint": "^16.0.2"
+ "stylelint": "^16.8.2"
},
"dependencies": {
"is-plain-object": {
@@ -22197,15 +22247,15 @@
"dev": true
},
"browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "version": "4.24.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
+ "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
"dev": true,
"requires": {
"caniuse-lite": "1.0.30001653",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
}
},
"browserslist-config-wikimedia": {
@@ -23343,20 +23393,19 @@
}
},
"doiuse": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz",
- "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.5.tgz",
+ "integrity": "sha512-ljuf9ndGqKST0GlPAYyCg04hbQAeR1xIIWVDjQaDDkoTY/Y1Vb+8FNoy6NuVuJIEEKe/nKUH8NRWjG7JJxZ9Eg==",
"dev": true,
"requires": {
- "browserslist": "^4.21.5",
+ "browserslist": "^4.24.0",
"caniuse-lite": "1.0.30001653",
"css-tokenize": "^1.0.1",
- "duplexify": "^4.1.2",
- "ldjson-stream": "^1.2.1",
+ "duplexify": "^4.1.3",
"multimatch": "^5.0.0",
- "postcss": "^8.4.21",
+ "postcss": "^8.4.47",
"source-map": "^0.7.4",
- "yargs": "^17.7.1"
+ "yargs": "^17.7.2"
}
},
"dom-serialize": {
@@ -23539,9 +23588,9 @@
}
},
"electron-to-chromium": {
- "version": "1.5.19",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.19.tgz",
- "integrity": "sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==",
+ "version": "1.5.74",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz",
+ "integrity": "sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==",
"dev": true
},
"emittery": {
@@ -23922,9 +23971,9 @@
}
},
"globals": {
- "version": "15.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz",
- "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==",
+ "version": "15.14.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
+ "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
"dev": true
},
"minimatch": {
@@ -25291,9 +25340,9 @@
"dev": true
},
"ignore": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
- "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true
},
"import-fresh": {
@@ -27165,9 +27214,9 @@
}
},
"jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true
},
"json-buffer": {
@@ -27458,9 +27507,9 @@
"dev": true
},
"known-css-properties": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
- "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
+ "version": "0.35.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
+ "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
"dev": true
},
"ky": {
@@ -27495,27 +27544,6 @@
}
}
},
- "ldjson-stream": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz",
- "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==",
- "dev": true,
- "requires": {
- "split2": "^0.2.1",
- "through2": "^0.6.1"
- },
- "dependencies": {
- "split2": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
- "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==",
- "dev": true,
- "requires": {
- "through2": "~0.6.1"
- }
- }
- }
- },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -28265,9 +28293,9 @@
"dev": true
},
"node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true
},
"node-watch": {
@@ -28927,21 +28955,21 @@
}
},
"postcss-html": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz",
- "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.7.0.tgz",
+ "integrity": "sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==",
"dev": true,
"requires": {
"htmlparser2": "^8.0.0",
- "js-tokens": "^8.0.0",
+ "js-tokens": "^9.0.0",
"postcss": "^8.4.0",
"postcss-safe-parser": "^6.0.0"
},
"dependencies": {
"js-tokens": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
- "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
"dev": true
},
"postcss-safe-parser": {
@@ -28974,9 +29002,9 @@
"requires": {}
},
"postcss-selector-parser": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
- "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dev": true,
"requires": {
"cssesc": "^3.0.0",
@@ -30199,60 +30227,68 @@
"style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
"dev": true
},
"stylelint": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz",
- "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==",
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz",
+ "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==",
"dev": true,
"requires": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3",
- "@csstools/media-query-list-parser": "^2.1.7",
- "@csstools/selector-specificity": "^3.0.1",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "@csstools/media-query-list-parser": "^4.0.2",
+ "@csstools/selector-specificity": "^5.0.0",
+ "@dual-bundle/import-meta-resolve": "^4.1.0",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
- "css-functions-list": "^3.2.1",
- "css-tree": "^2.3.1",
- "debug": "^4.3.4",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.0.1",
+ "debug": "^4.3.7",
"fast-glob": "^3.3.2",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^8.0.0",
+ "file-entry-cache": "^9.1.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^5.3.0",
+ "ignore": "^6.0.2",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.29.0",
+ "known-css-properties": "^0.35.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^13.1.0",
- "micromatch": "^4.0.5",
+ "meow": "^13.2.0",
+ "micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.33",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^7.0.0",
- "postcss-selector-parser": "^6.0.15",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.49",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.0.0",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
- "strip-ansi": "^7.1.0",
- "supports-hyperlinks": "^3.0.0",
+ "supports-hyperlinks": "^3.1.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.1",
+ "table": "^6.9.0",
"write-file-atomic": "^5.0.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true
+ "@csstools/media-query-list-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz",
+ "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==",
+ "dev": true,
+ "requires": {}
+ },
+ "@csstools/selector-specificity": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+ "dev": true,
+ "requires": {}
},
"balanced-match": {
"version": "2.0.0",
@@ -30260,78 +30296,101 @@
"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
"dev": true
},
+ "css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ }
+ },
"file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
+ "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
"dev": true,
"requires": {
- "flat-cache": "^4.0.0"
+ "flat-cache": "^5.0.0"
}
},
"flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
+ "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
"dev": true,
"requires": {
- "flatted": "^3.2.9",
+ "flatted": "^3.3.1",
"keyv": "^4.5.4"
}
},
+ "ignore": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+ "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+ "dev": true
+ },
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true
},
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
"dev": true
},
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "postcss-selector-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz",
+ "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==",
"dev": true,
"requires": {
- "ansi-regex": "^6.0.1"
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
}
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
}
}
},
"stylelint-config-recommended": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz",
- "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
+ "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
"dev": true,
"requires": {}
},
"stylelint-config-wikimedia": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
- "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.18.0.tgz",
+ "integrity": "sha512-Lr45NIe7pG8i7BPcMc6EddO1pRK8/KNG8gp4o/oOG1Ez10hglJuJb/QT17BlzX8NPkhtP2KdY63NS2f/Wcj6Ww==",
"dev": true,
"requires": {
- "@stylistic/stylelint-config": "1.0.1",
- "@stylistic/stylelint-plugin": "2.0.0",
+ "@stylistic/stylelint-config": "2.0.0",
+ "@stylistic/stylelint-plugin": "3.1.1",
"browserslist-config-wikimedia": "0.7.0",
- "postcss-html": "1.6.0",
+ "postcss-html": "1.7.0",
"postcss-less": "6.0.0",
- "stylelint": "16.2.0",
- "stylelint-config-recommended": "14.0.0",
- "stylelint-no-unsupported-browser-features": "8.0.1"
+ "stylelint": "16.12.0",
+ "stylelint-config-recommended": "14.0.1",
+ "stylelint-no-unsupported-browser-features": "8.0.2"
}
},
"stylelint-no-unsupported-browser-features": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz",
- "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.2.tgz",
+ "integrity": "sha512-4PY2qJ3ZTEje9RgGfaQ82eJoPioXxs6hazeKpji/wzLNVzTX2wd4b0Ds3ewdLkH3ID+o63IInuTquU2MNJO3YQ==",
"dev": true,
"requires": {
- "doiuse": "^6.0.2",
+ "doiuse": "^6.0.5",
"postcss": "^8.4.32"
}
},
@@ -30434,9 +30493,9 @@
"dev": true
},
"table": {
- "version": "6.8.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
- "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
"dev": true,
"requires": {
"ajv": "^8.0.1",
@@ -30520,42 +30579,6 @@
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
- "through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==",
- "dev": true,
- "requires": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
- }
- }
- },
"tiny-glob": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
@@ -30846,13 +30869,13 @@
"dev": true
},
"update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"dev": true,
"requires": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
}
},
"uri-js": {
@@ -31270,12 +31293,6 @@
"integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true
},
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 10fcad131757..eac85dfce347 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"karma-qunit": "4.2.0",
"pinia": "2.0.16",
"qunit": "2.20.0",
- "stylelint-config-wikimedia": "0.17.2",
+ "stylelint-config-wikimedia": "0.18.0",
"svgo": "3.2.0",
"vue": "3.4.27",
"wdio-mediawiki": "file:tests/selenium/wdio-mediawiki",
diff --git a/resources/Resources.php b/resources/Resources.php
index 6b68c7d8d713..91ceaab9c69f 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -2328,6 +2328,7 @@ return [
'block-expiry-preset',
'block-expiry-preset-placeholder',
'block-item-edit',
+ 'block-invalid-id',
'block-item-remove',
'block-log-flags-angry-autoblock',
'block-log-flags-anononly',
diff --git a/resources/src/mediawiki.htmlform.styles/styles.less b/resources/src/mediawiki.htmlform.styles/styles.less
index 89d6dfcc671e..0ee0a18076db 100644
--- a/resources/src/mediawiki.htmlform.styles/styles.less
+++ b/resources/src/mediawiki.htmlform.styles/styles.less
@@ -45,3 +45,9 @@ tr.mw-htmlform-vertical-label td.mw-label {
false, @background-position-base, initial
);
}
+
+// Hide conditionally-hidden fields only if we have JS enabled (which can show them again when needed)
+.client-js .mw-htmlform-hide-if-hidden {
+ // Override 'display' properties from any field
+ display: none !important; /* stylelint-disable-line declaration-no-important */
+}
diff --git a/resources/src/mediawiki.htmlform/cond-state.js b/resources/src/mediawiki.htmlform/cond-state.js
index e5d8c858b43c..9ea4a2fe4c0c 100644
--- a/resources/src/mediawiki.htmlform/cond-state.js
+++ b/resources/src/mediawiki.htmlform/cond-state.js
@@ -233,6 +233,12 @@ mw.hook( 'htmlform.enhance' ).add( ( $root ) => {
const shouldHide = spec.hide ? test.hide() : false;
const shouldDisable = shouldHide || ( spec.disable ? test.disable() : false );
if ( spec.hide ) {
+ // Remove server-side CSS class that hides the elements, and re-compute the state
+ if ( $elOrLayout instanceof $ ) {
+ $elOrLayout.removeClass( 'mw-htmlform-hide-if-hidden' );
+ } else {
+ $elOrLayout.$element.removeClass( 'mw-htmlform-hide-if-hidden' );
+ }
// The .toggle() method works mostly the same for jQuery objects and OO.ui.Widget
$elOrLayout.toggle( !shouldHide );
}
diff --git a/resources/src/mediawiki.special.block/SpecialBlock.vue b/resources/src/mediawiki.special.block/SpecialBlock.vue
index bb8283f3bff0..4e9479758ce7 100644
--- a/resources/src/mediawiki.special.block/SpecialBlock.vue
+++ b/resources/src/mediawiki.special.block/SpecialBlock.vue
@@ -1,6 +1,6 @@
<template>
<!-- @todo Remove after it's no longer new. -->
- <cdx-message v-if="blockEnableMultiblocks" allow-user-dismiss>
+ <cdx-message v-if="enableMultiblocks" allow-user-dismiss>
{{ $i18n( 'block-multiblocks-new-feature' ) }}
</cdx-message>
<cdx-field
@@ -34,7 +34,7 @@
v-model="store.targetUser"
></user-lookup>
- <div v-if="store.targetUser">
+ <div v-if="showBlockLogs">
<block-log
:key="`${submitCount}-active`"
:open="success"
@@ -55,7 +55,7 @@
:can-delete-log-entry="canDeleteLogEntry"
></block-log>
- <div v-if="formVisible" class="mw-block__block-form">
+ <div v-if="showBlockForm" class="mw-block__block-form">
<block-type-field></block-type-field>
<expiry-field></expiry-field>
<reason-field
@@ -123,20 +123,41 @@ module.exports = exports = defineComponent( {
},
setup() {
const store = useBlockStore();
- const blockEnableMultiblocks = mw.config.get( 'blockEnableMultiblocks' ) || false;
const blockShowSuppressLog = mw.config.get( 'blockShowSuppressLog' ) || false;
const canDeleteLogEntry = mw.config.get( 'canDeleteLogEntry' ) || false;
- const { formErrors, formSubmitted, formVisible, success } = storeToRefs( store );
+ const { formErrors, formSubmitted, formVisible, success, enableMultiblocks } = storeToRefs( store );
const messagesContainer = ref();
// Value to use for BlockLog component keys, so they reload after saving.
const submitCount = ref( 0 );
- // eslint-disable-next-line arrow-body-style
const submitButtonMessage = computed( () => {
- return mw.message( store.alreadyBlocked ? 'block-update' : 'ipbsubmit' ).text();
+ if ( ( !store.enableMultiblocks && store.alreadyBlocked ) ||
+ ( store.enableMultiblocks && store.blockId )
+ ) {
+ return mw.message( 'block-update' ).text();
+ }
+ return mw.message( 'ipbsubmit' ).text();
} );
const confirmationOpen = ref( false );
+ const blockId = computed( () => mw.util.getParamValue( 'id' ) );
+ const showBlockLogs = computed( () => store.targetUser || store.blockId );
+ const showBlockForm = computed( () => formVisible.value || blockId.value );
let initialLoad = true;
+ if ( blockId.value ) {
+ loadFromIdParam().then( ( data ) => {
+ if ( data && data.blocks.length ) {
+ // Load the block form content.
+ const block = data.blocks[ 0 ];
+ store.loadFromData( block, true );
+ formVisible.value = true;
+ scrollToForm();
+ } else {
+ // If the block ID is invalid, show an error message.
+ formErrors.value = [ mw.msg( 'block-invalid-id' ) ];
+ }
+ } );
+ }
+
/**
* Show the form for a new block.
*/
@@ -158,7 +179,7 @@ module.exports = exports = defineComponent( {
* @param {Object} blockData
*/
function onEditBlock( blockData ) {
- store.loadFromData( blockData );
+ store.loadFromData( blockData, false );
formVisible.value = true;
scrollToForm();
}
@@ -211,6 +232,23 @@ module.exports = exports = defineComponent( {
}
/**
+ * Load the block form content from the 'id' URL parameter.
+ *
+ * @return {Promise<Object>} A promise that resolves to the block query response.
+ */
+ function loadFromIdParam() {
+ const params = {
+ action: 'query',
+ list: 'blocks',
+ bkids: mw.util.getParamValue( 'id' ),
+ format: 'json',
+ bkprop: 'id|user|by|timestamp|expiry|reason|range|flags|restrictions'
+ };
+ const api = new mw.Api();
+ return api.get( params ).then( ( response ) => response.query );
+ }
+
+ /**
* Execute the block request, set the success state and form errors,
* and scroll to the messages container.
*/
@@ -240,15 +278,16 @@ module.exports = exports = defineComponent( {
success,
submitCount,
submitButtonMessage,
- blockEnableMultiblocks,
+ enableMultiblocks,
blockShowSuppressLog,
canDeleteLogEntry,
confirmationOpen,
- formVisible,
onCreateBlock,
onEditBlock,
onFormSubmission,
- doBlock
+ doBlock,
+ showBlockLogs,
+ showBlockForm
};
}
} );
diff --git a/resources/src/mediawiki.special.block/components/BlockLog.vue b/resources/src/mediawiki.special.block/components/BlockLog.vue
index 0ff4adda0e0d..854fba2f8bae 100644
--- a/resources/src/mediawiki.special.block/components/BlockLog.vue
+++ b/resources/src/mediawiki.special.block/components/BlockLog.vue
@@ -271,7 +271,7 @@ module.exports = exports = defineComponent( {
// * Multiblocks is disabled and the user is not already blocked
const shouldShowAddBlockButton = computed(
() => props.blockLogType === 'active' && (
- mw.config.get( 'blockEnableMultiblocks' ) || !alreadyBlocked.value
+ store.enableMultiblocks || !alreadyBlocked.value
)
);
diff --git a/resources/src/mediawiki.special.block/components/UserLookup.vue b/resources/src/mediawiki.special.block/components/UserLookup.vue
index 706be29d8abc..bed219e9cc3f 100644
--- a/resources/src/mediawiki.special.block/components/UserLookup.vue
+++ b/resources/src/mediawiki.special.block/components/UserLookup.vue
@@ -61,7 +61,7 @@ module.exports = exports = defineComponent( {
],
setup( props ) {
const store = useBlockStore();
- const { targetUser } = storeToRefs( useBlockStore() );
+ const { targetUser } = storeToRefs( store );
let htmlInput;
onMounted( () => {
@@ -88,6 +88,12 @@ module.exports = exports = defineComponent( {
const status = ref( 'default' );
const messages = ref( {} );
+ watch( targetUser, ( newValue ) => {
+ if ( newValue ) {
+ currentSearchTerm.value = newValue;
+ }
+ } );
+
/**
* Get search results.
*
diff --git a/resources/src/mediawiki.special.block/stores/block.js b/resources/src/mediawiki.special.block/stores/block.js
index c1c417cb35b0..c8d10f3eaaeb 100644
--- a/resources/src/mediawiki.special.block/stores/block.js
+++ b/resources/src/mediawiki.special.block/stores/block.js
@@ -12,6 +12,13 @@ module.exports = exports = defineStore( 'block', () => {
// TODO: Rid of the `mw.config.get( 'whatever' )` atrocity once we have Codex PHP (T377529)
/**
+ * Whether the multiblocks feature is enabled with $wgEnableMultiBlocks.
+ *
+ * @type {boolean}
+ */
+ const enableMultiblocks = mw.config.get( 'blockEnableMultiblocks' ) || false;
+
+ /**
* The target user to block. Beyond the initial value,
* this is set only by the UserLookup component.
*
@@ -248,8 +255,13 @@ module.exports = exports = defineStore( 'block', () => {
* Load block data from an action=blocks API response.
*
* @param {Object} blockData The block's item from the API.
+ * @param {boolean} [loadingFromParam=false] Whether the data is being loaded from URL parameters.
*/
- function loadFromData( blockData ) {
+ function loadFromData( blockData, loadingFromParam = false ) {
+ if ( loadingFromParam ) {
+ targetUser.value = blockData.user;
+ formVisible.value = true;
+ }
blockId.value = blockData.id;
type.value = blockData.partial ? 'partial' : 'sitewide';
pages.value = ( blockData.restrictions.pages || [] ).map( ( i ) => i.title );
@@ -314,12 +326,15 @@ module.exports = exports = defineStore( 'block', () => {
/**
* Clear form behavioural refs.
*
+ * @param {boolean} [loadingFromParam=false] Whether the data is being loaded from URL parameters.
* @internal
*/
- function resetFormInternal() {
+ function resetFormInternal( loadingFromParam = false ) {
formErrors.value = [];
formSubmitted.value = false;
- formVisible.value = false;
+ if ( !loadingFromParam ) {
+ formVisible.value = false;
+ }
success.value = false;
alreadyBlocked.value = false;
promises.value.clear();
@@ -342,10 +357,19 @@ module.exports = exports = defineStore( 'block', () => {
errorsuselocal: true
};
- if ( alreadyBlocked.value ) {
+ if ( !enableMultiblocks && alreadyBlocked.value ) {
params.reblock = 1;
}
+ if ( enableMultiblocks ) {
+ if ( blockId.value ) {
+ params.id = blockId.value;
+ delete params.user;
+ } else {
+ params.newblock = 1;
+ }
+ }
+
// Reason selected concatenated with 'Other' field
if ( reason.value === 'other' ) {
params.reason = reasonOther.value;
@@ -480,6 +504,7 @@ module.exports = exports = defineStore( 'block', () => {
}
return {
+ enableMultiblocks,
formDisabled,
formErrors,
formSubmitted,
diff --git a/resources/src/mediawiki.special.userlogin.common.styles/authentication-popup.less b/resources/src/mediawiki.special.userlogin.common.styles/authentication-popup.less
index 76d69a281560..c8f116b8485f 100644
--- a/resources/src/mediawiki.special.userlogin.common.styles/authentication-popup.less
+++ b/resources/src/mediawiki.special.userlogin.common.styles/authentication-popup.less
@@ -1,5 +1,3 @@
-/* Flexbox gap not supported by all browsers */
-/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
body.mw-authentication-popup {
font-family: sans-serif;
font-size: 0.875rem;
@@ -54,8 +52,6 @@ body.mw-authentication-popup {
}
}
- /* Flexbox gap not supported by all browsers */
- /* stylelint-disable-next-line plugin/no-unsupported-browser-features */
footer {
/* Flexbox gap not supported by all browsers */
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
diff --git a/resources/src/mediawiki.special/contribute.less b/resources/src/mediawiki.special/contribute.less
index b36abe477e97..93e77337138d 100644
--- a/resources/src/mediawiki.special/contribute.less
+++ b/resources/src/mediawiki.special/contribute.less
@@ -3,8 +3,6 @@
*/
@import 'mediawiki.skin.variables.less';
-/* Flexbox gap not supported by all browsers */
-/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
.mw-special-Contribute {
.mw-contribute-wrapper {
// Ensure this is user's specified font size.
diff --git a/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js b/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
index f67f90953a4d..a7ea820da19a 100644
--- a/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
+++ b/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
@@ -56,6 +56,7 @@
// See InputWidget#reusePreInfuseDOM about config.$input
if ( config.$input ) {
+ // Hide unused <input> from PHP after infusion is done
config.$input.addClass( 'oo-ui-element-hidden' );
}
@@ -191,6 +192,20 @@
/* Events */
+ /* Static Methods */
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.datetime.DateTimeInputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+ config = mw.widgets.datetime.DateTimeInputWidget.super.static.reusePreInfuseDOM( node, config );
+ if ( config.$input ) {
+ // Ignore the extra field from PendingTextInputWidget (T382344)
+ config.$input = config.$input.first();
+ }
+ return config;
+ };
+
/* Methods */
/**
diff --git a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
index 22ad716bcd2a..10e531616331 100644
--- a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
+++ b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
@@ -234,9 +234,9 @@
this.textInput.toggle( false );
this.calendar.toggle( false );
- // Hide unused <input> from PHP after infusion is done
// See InputWidget#reusePreInfuseDOM about config.$input
if ( config.$input ) {
+ // Hide unused <input> from PHP after infusion is done
config.$input.addClass( 'oo-ui-element-hidden' );
}
};
@@ -256,6 +256,20 @@
* @param {boolean} userSelected Whether the deactivation happened because the user selected a value
*/
+ /* Static Methods */
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.DateInputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+ config = mw.widgets.DateInputWidget.super.static.reusePreInfuseDOM( node, config );
+ if ( config.$input ) {
+ // Ignore the extra field from PendingTextInputWidget (T382344)
+ config.$input = config.$input.first();
+ }
+ return config;
+ };
+
/* Methods */
/**
diff --git a/tests/common/TestsAutoLoader.php b/tests/common/TestsAutoLoader.php
index e895966a8d40..5ab6db354a37 100644
--- a/tests/common/TestsAutoLoader.php
+++ b/tests/common/TestsAutoLoader.php
@@ -236,6 +236,7 @@ $wgAutoloadClasses += [
'MediaWiki\\Tests\\BrokenClass2' => "$testDir/phpunit/mocks/BrokenClass2.php",
'MediaWiki\\Tests\\BrokenClass3' => "$testDir/phpunit/mocks/BrokenClass3.php",
'MediaWiki\\Tests\\MockDatabase' => "$testDir/phpunit/mocks/MockDatabase.php",
+ 'MediaWiki\\Tests\\MockWikiMapTrait' => "$testDir/phpunit/mocks/MockWikiMapTrait.php",
'MediaWiki\\Tests\\Unit\\DummyServicesTrait' => "$testDir/phpunit/mocks/DummyServicesTrait.php",
'MediaWiki\\Tests\\Unit\\FakeQqxMessageLocalizer' => "$testDir/phpunit/mocks/FakeQqxMessageLocalizer.php",
'MediaWiki\\Tests\\Unit\\MockBlockTrait' => "$testDir/phpunit/mocks/MockBlockTrait.php",
diff --git a/tests/jest/mediawiki.special.block/SpecialBlock.test.js b/tests/jest/mediawiki.special.block/SpecialBlock.test.js
index fd2a47b57b23..23ddafb770da 100644
--- a/tests/jest/mediawiki.special.block/SpecialBlock.test.js
+++ b/tests/jest/mediawiki.special.block/SpecialBlock.test.js
@@ -144,4 +144,8 @@ describe( 'SpecialBlock', () => {
afterEach( () => {
wrapper.unmount();
} );
+
+ beforeEach( () => {
+ mw.util.getParamValue = jest.fn().mockReturnValue( null );
+ } );
} );
diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt
index cd3cfe4f4c04..171afb6eb69d 100644
--- a/tests/parser/parserTests.txt
+++ b/tests/parser/parserTests.txt
@@ -4563,8 +4563,6 @@ Templates with templated name
## Regression test; the output here isn't really that interesting.
## wt2html only, since the bare {{ will get escaped when serializing
## needs investigation!
-## In integrated mode, since the whole "{{...}}" is sent to core for
-## processing, we wrap the output (unexpanded text) in a Transclusion.
!! test
Templates with templated name and top level template args
!! options
@@ -4574,10 +4572,8 @@ parsoid=wt2html
!! html/php
<p>{{1{{2{{{3}}}|4=5}}}}
</p>
-!! html/parsoid+standalone
+!! html/parsoid
<p>{{1{{2<span about="#mwt5" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"3"},"params":{},"i":0}}]}'>{{{3}}}</span>|4=5}}}}</p>
-!! html/parsoid+integrated
-<p>{{1<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"2{{{3}}}","href":"./Template:2"},"params":{"4":{"wt":"5"}},"i":0}}]}'>{{2{{{3}}}|4=5}}</span>}}</p>
!! end
## Regression test (T372669) that is only exercised in integrated mode.
@@ -5160,12 +5156,22 @@ T236868: Un-closed <noinclude> caused bad SourceRange length
!! wikitext
{| <noinclude>
|- <noinclude>
-| A
-|-</noinclude>
+|A
+|- </noinclude>
|}
+!! html/php
+<table>
+
+<tbody><tr>
+<td>A
+</td></tr>
+</tbody></table>
!! html/parsoid
-<table about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"a":{"&lt;noinclude>\n|- &lt;noinclude>\n| A\n|-&lt;/noinclude>":null},"sa":{"&lt;noinclude>\n|- &lt;noinclude>\n| A\n|-&lt;/noinclude>":""}}' data-mw='{"attribs":[[{"txt":" A","html":"&lt;meta typeof=\"mw:Includes/NoInclude\" data-parsoid=&apos;{\"src\":\"&amp;lt;noinclude>\",\"dsr\":[3,14,null,null]}&apos;/>\n|- &lt;meta typeof=\"mw:Includes/NoInclude\" data-parsoid=&apos;{\"src\":\"&amp;lt;noinclude>\",\"dsr\":[18,29,null,null]}&apos;/>\n| A\n|-&lt;meta typeof=\"mw:Includes/NoInclude/End\" data-parsoid=&apos;{\"src\":\"&amp;lt;/noinclude>\",\"dsr\":[36,48,null,null]}&apos;/>"},{"html":""}]]}'>
-</table>
+<table about="#mwt1" typeof="mw:ExpandedAttrs" data-parsoid='{"a":{"&lt;noinclude>":null},"sa":{"&lt;noinclude>":""},"dsr":[0,51,14,2]}' data-mw='{"attribs":[[{"txt":"","html":"&lt;meta typeof=\"mw:Includes/NoInclude\" data-parsoid=&apos;{\"src\":\"&amp;lt;noinclude>\",\"dsr\":[3,14,null,null]}&apos;/>"},{"html":""}]]}'>
+<tbody data-parsoid='{"dsr":[15,49,0,0]}'><tr about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"startTagSrc":"|-","a":{"&lt;noinclude>":null},"sa":{"&lt;noinclude>":""},"dsr":[15,32,14,0]}' data-mw='{"attribs":[[{"txt":"","html":"&lt;meta typeof=\"mw:Includes/NoInclude\" data-parsoid=&apos;{\"src\":\"&amp;lt;noinclude>\",\"dsr\":[18,29,null,null]}&apos;/>"},{"html":""}]]}'>
+<td data-parsoid='{"dsr":[30,32,1,0]}'>A</td></tr>
+<tr class="mw-empty-elt" data-parsoid='{"startTagSrc":"|-","a":{"&lt;/noinclude>":null},"sa":{"&lt;/noinclude>":""},"dsr":[33,48,15,0]}'></tr>
+</tbody></table>
!! end
!!test
@@ -5388,7 +5394,7 @@ parsoid={
!!test
0. includeonly around the entire attribute
!! wikitext
-<span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
+<span <includeonly>id="v1"</includeonly><noinclude>id="v2" </noinclude>>bar</span>
!! html
<p><span id="v2">bar</span>
</p>
@@ -17170,3 +17176,66 @@ z
<p>z</p></i>
!! end
+
+!! test
+Include directive string gluing
+!! wikitext
+<noinclude>{{1x|</noinclude>testing<noinclude>}}</noinclude>
+!! html/php
+<p>testing
+</p>
+!! html/parsoid+integrated
+<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"&lt;/noinclude>testing&lt;noinclude>"}},"i":0}}]}'>testing</span></p><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/>
+!! html/parsoid+standalone
+<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><p data-parsoid='{}'><meta typeof="mw:Transclusion mw:Includes/NoInclude/End" about="#mwt1" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"&lt;/noinclude>testing&lt;noinclude>"}},"i":0}}]}'/><span about="#mwt1">testing</span><meta typeof="mw:Includes/NoInclude" about="#mwt1"/></p><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/>
+!! end
+
+!! test
+1. Include directive in template target
+!! wikitext
+{{1x<noinclude>|123</noinclude>}}
+!! html/php
+<p>123
+</p>
+!! html/parsoid+integrated
+<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;noinclude>","href":"./Template:1x"},"params":{"1":{"wt":"123&lt;/noinclude>"}},"i":0}}]}'>123</span></p>
+!! html/parsoid+standalone
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;noinclude>","href":"./Template:1x"},"params":{"1":{"wt":"123&lt;/noinclude>"}},"i":0}}]}'>123</span><meta typeof="mw:Includes/NoInclude/End" about="#mwt1"/></p>
+!! end
+
+!! test
+2. Include directive in template target
+!! wikitext
+{{1x<includeonly>|123</includeonly>|345}}
+!! html/php
+<p>345
+</p>
+!! html/parsoid+integrated
+<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;includeonly>|123&lt;/includeonly>","href":"./Template:1x"},"params":{"1":{"wt":"345"}},"i":0}}]}'>345</span></p>
+!! html/parsoid+standalone
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;includeonly>|123&lt;/includeonly>","href":"./Template:1x"},"params":{"1":{"wt":"345"}},"i":0}}]}'>345</span></p>
+!! end
+
+!! test
+3. Include directive in template target
+!! wikitext
+{{1x<onlyinclude>|123</onlyinclude>}}
+!! html/php
+<p>123
+</p>
+!! html/parsoid+integrated
+<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;onlyinclude>","href":"./Template:1x"},"params":{"1":{"wt":"123&lt;/onlyinclude>"}},"i":0}}]}'>123</span></p>
+!! html/parsoid+standalone
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x&lt;onlyinclude>","href":"./Template:1x"},"params":{"1":{"wt":"123&lt;/onlyinclude>"}},"i":0}}]}'>123</span><meta typeof="mw:Includes/OnlyInclude/End" about="#mwt1"/></p>
+!! end
+
+!! test
+4. Include directive in template target
+!! wikitext
+{{{{{1<noinclude>|1x</noinclude>}}}|123}}
+!! html/php
+<p>123
+</p>
+!! html/parsoid
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{{1&lt;noinclude>|1x&lt;/noinclude>}}}","href":"./Template:1x"},"params":{"1":{"wt":"123"}},"i":0}}]}'>123</span></p>
+!! end
diff --git a/tests/phpunit/includes/content/WikitextContentHandlerIntegrationTest.php b/tests/phpunit/includes/content/WikitextContentHandlerIntegrationTest.php
index 3bf9415ff49c..22f77c3bdec6 100644
--- a/tests/phpunit/includes/content/WikitextContentHandlerIntegrationTest.php
+++ b/tests/phpunit/includes/content/WikitextContentHandlerIntegrationTest.php
@@ -40,6 +40,11 @@ class WikitextContentHandlerIntegrationTest extends TextContentHandlerIntegratio
] + $defaults,
] )
);
+ // Limit reporting affects the options used
+ $this->overrideConfigValue(
+ MainConfigNames::EnableParserLimitReporting,
+ true
+ );
}
public static function provideGetParserOutput() {
@@ -52,15 +57,15 @@ class WikitextContentHandlerIntegrationTest extends TextContentHandlerIntegratio
'suppressSectionEditLinks',
'useParsoid',
'wrapclass',
+ 'expensiveParserFunctionLimit',
+ 'maxPPExpandDepth',
+ 'maxPPNodeCount',
];
$commonParsoidOptions = array_merge( $commonOptions, [
// Currently no options specific to parsoid parses
] );
$commonLegacyOptions = array_merge( $commonOptions, [
'disableTitleConversion',
- 'expensiveParserFunctionLimit',
- 'maxPPExpandDepth',
- 'maxPPNodeCount',
'suppressTOC',
'targetLanguage',
] );
diff --git a/tests/phpunit/integration/includes/Rest/Handler/Helper/HtmlOutputRendererHelperTest.php b/tests/phpunit/integration/includes/Rest/Handler/Helper/HtmlOutputRendererHelperTest.php
index 4e03f25d23a0..8852b2002882 100644
--- a/tests/phpunit/integration/includes/Rest/Handler/Helper/HtmlOutputRendererHelperTest.php
+++ b/tests/phpunit/integration/includes/Rest/Handler/Helper/HtmlOutputRendererHelperTest.php
@@ -799,8 +799,7 @@ class HtmlOutputRendererHelperTest extends MediaWikiIntegrationTestCase {
$mockParsoid,
$services->getParsoidPageConfigFactory(),
$services->getLanguageConverterFactory(),
- $services->getParserFactory(),
- $services->getGlobalIdGenerator()
+ $services->getParsoidDataAccess()
);
}
diff --git a/tests/phpunit/integration/includes/parser/Parsoid/ParsoidParserTest.php b/tests/phpunit/integration/includes/parser/Parsoid/ParsoidParserTest.php
index 7f4bb46a00db..dc79736218cc 100644
--- a/tests/phpunit/integration/includes/parser/Parsoid/ParsoidParserTest.php
+++ b/tests/phpunit/integration/includes/parser/Parsoid/ParsoidParserTest.php
@@ -2,6 +2,7 @@
namespace MediaWiki\Tests\Parser\Parsoid;
+use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Parser\ParserOptions;
use MediaWiki\Parser\Parsoid\ParsoidParser;
@@ -14,6 +15,15 @@ use MediaWikiIntegrationTestCase;
*/
class ParsoidParserTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+ // Limit reporting affects the options used
+ $this->overrideConfigValue(
+ MainConfigNames::EnableParserLimitReporting,
+ false
+ );
+ }
+
/** @dataProvider provideParsoidParserHtml */
public function testParsoidParserHtml( $args, $expected, $getTextOpts = [] ) {
$parsoidParser = $this->getServiceContainer()
@@ -38,7 +48,6 @@ class ParsoidParserTest extends MediaWikiIntegrationTestCase {
'disableContentConversion',
'interfaceMessage',
'isPreview',
- 'maxIncludeSize',
'suppressSectionEditLinks',
'wrapclass',
];
@@ -87,7 +96,6 @@ class ParsoidParserTest extends MediaWikiIntegrationTestCase {
'disableContentConversion',
'interfaceMessage',
'isPreview',
- 'maxIncludeSize',
'suppressSectionEditLinks',
'wrapclass',
];
diff --git a/tests/phpunit/mocks/MockWikiMapTrait.php b/tests/phpunit/mocks/MockWikiMapTrait.php
new file mode 100644
index 000000000000..6ad6ac4e84b5
--- /dev/null
+++ b/tests/phpunit/mocks/MockWikiMapTrait.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace MediaWiki\Tests;
+
+use MediaWiki\Site\HashSiteStore;
+use MediaWiki\Site\MediaWikiSite;
+use MediaWiki\WikiMap\WikiMap;
+
+/**
+ * Ensure WikiMap::getWiki returns a MediaWikiSite for the current wiki, for tests.
+ *
+ * @since 1.44
+ */
+trait MockWikiMapTrait {
+
+ /**
+ * Override the SiteLookup service to include the current site.
+ *
+ * @return void
+ */
+ private function mockWikiMap() {
+ $currentSite = new MediaWikiSite();
+ $currentSite->setGlobalId( WikiMap::getCurrentWikiId() );
+ $currentSite->setPath( MediaWikiSite::PATH_PAGE, 'https://example.com/wiki/$1' );
+ $this->setService( 'SiteLookup', new HashSiteStore( [ $currentSite ] ) );
+ }
+
+}
diff --git a/tests/phpunit/unit/includes/Rest/Handler/PageHandlerTestTrait.php b/tests/phpunit/unit/includes/Rest/Handler/PageHandlerTestTrait.php
index 910c7c065296..8e0ebfa4f865 100644
--- a/tests/phpunit/unit/includes/Rest/Handler/PageHandlerTestTrait.php
+++ b/tests/phpunit/unit/includes/Rest/Handler/PageHandlerTestTrait.php
@@ -77,8 +77,7 @@ trait PageHandlerTestTrait {
$mockParsoid,
$services->getParsoidPageConfigFactory(),
$services->getLanguageConverterFactory(),
- $services->getParserFactory(),
- $services->getGlobalIdGenerator()
+ $services->getParsoidDataAccess()
);
// Create a mock Parsoid factory that returns the ParsoidParser object
diff --git a/tests/phpunit/unit/includes/parser/Parsoid/ParsoidParserFactoryTest.php b/tests/phpunit/unit/includes/parser/Parsoid/ParsoidParserFactoryTest.php
index fc0fac0c6f76..8e6341ff74aa 100644
--- a/tests/phpunit/unit/includes/parser/Parsoid/ParsoidParserFactoryTest.php
+++ b/tests/phpunit/unit/includes/parser/Parsoid/ParsoidParserFactoryTest.php
@@ -23,13 +23,12 @@ namespace MediaWiki\Tests\Parser\Parsoid;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Parser\ParserFactory;
+use MediaWiki\Parser\Parsoid\Config\DataAccess;
use MediaWiki\Parser\Parsoid\Config\PageConfigFactory;
use MediaWiki\Parser\Parsoid\ParsoidParser;
use MediaWiki\Parser\Parsoid\ParsoidParserFactory;
use MediaWikiUnitTestCase;
-use Wikimedia\Parsoid\Config\DataAccess;
use Wikimedia\Parsoid\Config\SiteConfig;
-use Wikimedia\UUID\GlobalIdGenerator;
/**
* $group Parsoid
@@ -42,7 +41,6 @@ class ParsoidParserFactoryTest extends MediaWikiUnitTestCase {
protected PageConfigFactory $pageConfigFactory;
protected LanguageConverterFactory $languageConverterFactory;
protected ParserFactory $legacyParserFactory;
- protected GlobalIdGenerator $globalIdGenerator;
protected function setUp(): void {
parent::setUp();
@@ -51,7 +49,6 @@ class ParsoidParserFactoryTest extends MediaWikiUnitTestCase {
$this->pageConfigFactory = $this->createMock( PageConfigFactory::class );
$this->languageConverterFactory = $this->createMock( LanguageConverterFactory::class );
$this->legacyParserFactory = $this->createMock( ParserFactory::class );
- $this->globalIdGenerator = $this->createMock( GlobalIdGenerator::class );
}
public function testCreate() {
@@ -60,8 +57,7 @@ class ParsoidParserFactoryTest extends MediaWikiUnitTestCase {
$this->dataAccess,
$this->pageConfigFactory,
$this->languageConverterFactory,
- $this->legacyParserFactory,
- $this->globalIdGenerator
+ $this->legacyParserFactory
);
$this->assertInstanceOf( ParsoidParser::class, $factory->create() );
}