From 2f827857dc15448b608223e0864477cefeff93b4 Mon Sep 17 00:00:00 2001 From: alistair3149 Date: Tue, 19 Nov 2024 16:04:26 -0500 Subject: [PATCH] feat: drop Codex tabs It has never worked correctly and it is difficult to maintain both MW compatability across versions and Codex --- README.md | 1 - extension.json | 23 -- includes/Tabber.php | 75 +---- includes/TabberParsoid.php | 1 - modules/ext.tabberNeue.codex/.eslintrc.json | 9 - modules/ext.tabberNeue.codex/App.vue | 57 ---- modules/ext.tabberNeue.codex/TabContent.vue | 76 ----- .../ext.tabberNeue.codex.js | 58 ---- .../ext.tabberNeue.codex.less | 14 - package-lock.json | 281 +----------------- package.json | 1 - 11 files changed, 20 insertions(+), 576 deletions(-) delete mode 100644 modules/ext.tabberNeue.codex/.eslintrc.json delete mode 100644 modules/ext.tabberNeue.codex/App.vue delete mode 100644 modules/ext.tabberNeue.codex/TabContent.vue delete mode 100644 modules/ext.tabberNeue.codex/ext.tabberNeue.codex.js delete mode 100644 modules/ext.tabberNeue.codex/ext.tabberNeue.codex.less diff --git a/README.md b/README.md index ff1da59..6b9ee5b 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,6 @@ Name | Description | Values | Default `$wgTabberNeueEnableAnimation` | Enable or disable smooth scroll animation |`true` - enable; `false` - disable | `true` `$wgTabberNeueParseTabName` | Parse tab name as wikitext. This can have a performance impact and cause unexpected behaviors. |`true` - enable; `false` - disable | `false` `$wgTabberNeueUpdateLocationOnTabChange` | If enabled, when a tab is selected, the URL displayed on the browser changes. Opening this URL makes that tab initially selected |`true` - enable; `false` - disable | `true` -`$wgTabberNeueUseCodex` | Use Codex to render Tabber. It is experimental and many features might not work as expected |`true` - enable; `false` - disable | `false` `$wgTabberNeueUseLegacyTabIds` | If enabled, tabpanel IDs will not be prepended with "tabber-tabpanel-". This provides better compatibility with the old Tabber extension, but will cause issues if there are headings with the same name as an existing tab |`true` - enable; `false` - disable | `false` #### Tracking category diff --git a/extension.json b/extension.json index c94770d..404faa6 100644 --- a/extension.json +++ b/extension.json @@ -67,24 +67,6 @@ "mobile" ] }, - "ext.tabberNeue.codex": { - "packageFiles": [ - "ext.tabberNeue.codex/ext.tabberNeue.codex.js", - "ext.tabberNeue.codex/App.vue", - "ext.tabberNeue.codex/TabContent.vue" - ], - "styles": [ - "ext.tabberNeue.codex/ext.tabberNeue.codex.less" - ], - "dependencies": [ - "@wikimedia/codex", - "mediawiki.util" - ], - "targets": [ - "desktop", - "mobile" - ] - }, "ext.tabberNeue.visualEditor": { "scripts": [ "ve-tabberNeue/ve.ce.MWTabberNode.js", @@ -146,11 +128,6 @@ "description": "Parse tab name as wikitext. This can have a performance impact and cause unexpected behaviors.", "public": true }, - "TabberNeueUseCodex": { - "value": false, - "description": "Use Codex to render Tabber. It is experimental and many features might not work as expected.", - "public": true - }, "TabberNeueEnableAnimation": { "value": true, "description": "Enable or disable smooth scroll animation", diff --git a/includes/Tabber.php b/includes/Tabber.php index 7605122..7eabbf0 100644 --- a/includes/Tabber.php +++ b/includes/Tabber.php @@ -31,9 +31,6 @@ class Tabber { /** @var bool */ private static $parseTabName = false; - /** @var bool */ - private static $useCodex = false; - /** @var bool */ private static $useLegacyId = false; @@ -56,7 +53,6 @@ class Tabber { $parserOutput = $parser->getOutput(); self::$parseTabName = $config->get( 'TabberNeueParseTabName' ); - self::$useCodex = $config->get( 'TabberNeueUseCodex' ); self::$useLegacyId = $config->get( 'TabberNeueUseLegacyTabIds' ); $count = count( $parserOutput->getExtensionData( 'tabber-count' ) ?? [] ); @@ -65,12 +61,8 @@ class Tabber { $parserOutput->appendExtensionData( 'tabber-count', ++$count ); - if ( self::$useCodex === true ) { - $parser->getOutput()->addModules( [ 'ext.tabberNeue.codex' ] ); - } else { - $parser->getOutput()->addModuleStyles( [ 'ext.tabberNeue.init.styles' ] ); - $parser->getOutput()->addModules( [ 'ext.tabberNeue' ] ); - } + $parserOutput->addModuleStyles( [ 'ext.tabberNeue.init.styles' ] ); + $parserOutput->addModules( [ 'ext.tabberNeue' ] ); $parser->addTrackingCategory( 'tabberneue-tabber-category' ); return $html; @@ -93,10 +85,6 @@ class Tabber { 'array-tabs' => [] ]; - // For Codex use only - // TODO: Maybe we should redo the whole Codex implementation - $tabpanels = ''; - foreach ( $arr as $tab ) { $tabData = self::getTabData( $tab, $count, $parser, $frame ); if ( $tabData === [] ) { @@ -109,19 +97,6 @@ class Tabber { 'tabId' => "tabber-tab-{$tabData['id']}", 'tabpanelId' => self::$useLegacyId ? $tabData['id'] : "tabber-tabpanel-{$tabData['id']}" ]; - - if ( self::$useCodex && self::$isNested ) { - $tabpanels .= self::getCodexNestedTabJSON( $tabData ); - continue; - } - } - - if ( self::$useCodex && self::$isNested ) { - $tabpanels = rtrim( implode( '},', explode( '}', $tabpanels ) ), ',' ); - $tabpanels = strip_tags( html_entity_decode( $tab ) ); - $tabpanels = str_replace( ',,', ',', $tabpanels ); - $tabpanels = str_replace( ',]', ']', $tabpanels ); - return sprintf( '[%s]', $tabpanels ); } $templateParser = new TemplateParser( __DIR__ . '/templates' ); @@ -142,7 +117,7 @@ class Tabber { return ''; } - if ( !self::$parseTabName || self::$useCodex ) { + if ( !self::$parseTabName ) { // Only plain text is needed // Use language converter to get variant title and also escape html $label = $parser->getTargetLanguageConverter()->convertHtml( $label ); @@ -169,26 +144,14 @@ class Tabber { return ''; } - if ( !self::$useCodex ) { - // Insert a new line for these characters in wikitext (#151) - // Seems like there is no way to get rid of the mw-empty-elt paragraphs sadly - $wikitextCharacters = [ '*', '#', ';', ':', '[' ]; - $needsNewLine = in_array( substr( $content, 0, 1 ), $wikitextCharacters ); - if ( $needsNewLine ) { - $content = "\n$content\n"; - } - return $parser->recursiveTagParse( $content, $frame ); + // Insert a new line for these characters in wikitext (#151) + // Seems like there is no way to get rid of the mw-empty-elt paragraphs sadly + $wikitextCharacters = [ '*', '#', ';', ':', '[' ]; + $needsNewLine = in_array( substr( $content, 0, 1 ), $wikitextCharacters ); + if ( $needsNewLine ) { + $content = "\n$content\n"; } - - // The outermost tabber that must be parsed fully in codex for correct json - if ( strpos( $content, '{{#tag:tabber' ) === false ) { - return $parser->recursiveTagParseFully( $content, $frame ); - } - - self::$isNested = true; - $content = $parser->recursiveTagParse( $content, $frame ); - self::$isNested = false; - return $content; + return $parser->recursiveTagParse( $content, $frame ); } /** @@ -240,22 +203,4 @@ class Tabber { $data['id'] = $id; return $data; } - - /** - * Get JSON representation of a nested tab for Codex - * - * @param array $tabData Tab data - * - * @return string HTML - * @throws JsonException - */ - private static function getCodexNestedTabJSON( array $tabData ): string { - // A nested tabber which should return json in codex - return json_encode( [ - 'label' => $tabData['label'], - 'content' => $tabData['content'] - ], - JSON_THROW_ON_ERROR - ); - } } diff --git a/includes/TabberParsoid.php b/includes/TabberParsoid.php index fd5920b..23ce963 100644 --- a/includes/TabberParsoid.php +++ b/includes/TabberParsoid.php @@ -35,7 +35,6 @@ class TabberParsoid extends ExtensionTagHandler implements ExtensionModule { /** @inheritDoc */ public function sourceToDom( ParsoidExtensionAPI $extApi, string $src, array $extArgs ) { $html = self::render( $extApi, $src ); - $extApi->getMetadata()->addModules( [ 'ext.tabberNeue.codex' ] ); return $extApi->htmlToDom( $html ); } diff --git a/modules/ext.tabberNeue.codex/.eslintrc.json b/modules/ext.tabberNeue.codex/.eslintrc.json deleted file mode 100644 index c0b7b1b..0000000 --- a/modules/ext.tabberNeue.codex/.eslintrc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": [ - "no-jquery" - ], - "extends": [ - "plugin:no-jquery/all", - "wikimedia/vue3-es6" - ] -} diff --git a/modules/ext.tabberNeue.codex/App.vue b/modules/ext.tabberNeue.codex/App.vue deleted file mode 100644 index c68f552..0000000 --- a/modules/ext.tabberNeue.codex/App.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/modules/ext.tabberNeue.codex/TabContent.vue b/modules/ext.tabberNeue.codex/TabContent.vue deleted file mode 100644 index 88732d7..0000000 --- a/modules/ext.tabberNeue.codex/TabContent.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.js b/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.js deleted file mode 100644 index 9f3951b..0000000 --- a/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.js +++ /dev/null @@ -1,58 +0,0 @@ -const - Vue = require( 'vue' ), - App = require( './App.vue' ); - -/** - * @param {Element} tabber - * @return {void} - */ -function initApp( tabber ) { - const tabs = tabber.querySelectorAll( ':scope > .tabber__section > .tabber__panel' ); - - const tabberData = { - tabsData: [], - currentTab: '' - }; - - tabs.forEach( ( tab ) => { - const label = tab.getAttribute( 'data-mw-tabber-title' ); - - tabberData.tabsData.push( { - name: mw.util.escapeIdForAttribute( label ), - label: label, - content: tab.innerHTML - } ); - } ); - - tabberData.currentTab = tabberData.tabsData[ 0 ].name; - - // @ts-ignore MediaWiki-specific function - Vue.createMwApp( - App, Object.assign( { - tabberData: tabberData - } ) - ) - .mount( tabber ); -} - -/** - * @return {void} - */ -function main() { - const tabbers = document.querySelectorAll( '.tabber:not( .tabber--live )' ); - tabbers.forEach( initApp ); -} - -mw.hook( 'wikipage.content' ).add( () => { - main(); -} ); - -/* - * Add hooks for Tabber when Visual Editor is used. -*/ -mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init', () => { - // After saving edits - mw.hook( 'postEdit.afterRemoval' ).add( () => { - main(); - } ); -} ); diff --git a/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.less b/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.less deleted file mode 100644 index af90bc1..0000000 --- a/modules/ext.tabberNeue.codex/ext.tabberNeue.codex.less +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Override default MW styles - * * .mw-content-ltr ul - * * li -*/ -/* stylelint-disable selector-class-pattern */ -.tabber .cdx-tabs__list, -.tabber .cdx-tabs__list__item { - margin: 0; -} - -.tabber .cdx-tabs__list__item { - margin: 0; -} diff --git a/package-lock.json b/package-lock.json index d53f917..63efec8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "mediawiki-extensions-TabberNeue", + "name": "TabberNeue", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "TabberNeue", "devDependencies": { - "@wikimedia/codex": "^1.16.0", "@wikimedia/types-wikimedia": "0.4.4", "eslint-config-wikimedia": "0.28.2", "eslint-plugin-no-jquery": "3.0.2", @@ -124,19 +124,6 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", - "dev": true, - "peer": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "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", @@ -296,68 +283,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", - "dev": true, - "dependencies": { - "@floating-ui/utils": "^0.2.0" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", - "dev": true, - "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", - "dev": true - }, - "node_modules/@floating-ui/vue": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.0.6.tgz", - "integrity": "sha512-EdrOljjkpkkqZnrpqUcPoz9NvHxuTjUtSInh6GMv3+Mcy+giY2cE2pHh9rpacRcZ2eMSCxel9jWkWXTjLmY55w==", - "dev": true, - "dependencies": { - "@floating-ui/dom": "^1.6.1", - "@floating-ui/utils": "^0.2.1", - "vue-demi": ">=0.13.0" - } - }, - "node_modules/@floating-ui/vue/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -391,13 +316,6 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "peer": true - }, "node_modules/@mdn/browser-compat-data": { "version": "5.5.29", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.29.tgz", @@ -637,131 +555,6 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@vue/compiler-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", - "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.27", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", - "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/compiler-core": "3.4.27", - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", - "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.27", - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", - "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.4.27", - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", - "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", - "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/reactivity": "3.4.27", - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", - "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/runtime-core": "3.4.27", - "@vue/shared": "3.4.27", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", - "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27" - }, - "peerDependencies": { - "vue": "3.4.27" - } - }, - "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", - "dev": true, - "peer": true - }, - "node_modules/@wikimedia/codex": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-1.16.0.tgz", - "integrity": "sha512-dhic5AMcVcuDsNHv/HKKyOJG059BbyucfuWJutEWNhbmAsk/eixE2Jazvp9sOel+4H5sMjP4kppjKzGt66JdbA==", - "dev": true, - "dependencies": { - "@floating-ui/vue": "1.0.6", - "@wikimedia/codex-icons": "1.16.0" - }, - "engines": { - "node": ">=18", - "npm": ">=7.21.0" - }, - "peerDependencies": { - "vue": "3.4.27" - } - }, "node_modules/@wikimedia/codex-design-tokens": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@wikimedia/codex-design-tokens/-/codex-design-tokens-1.3.5.tgz", @@ -772,16 +565,6 @@ "npm": ">=7.21.0" } }, - "node_modules/@wikimedia/codex-icons": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-1.16.0.tgz", - "integrity": "sha512-iMEJaETNwkFMG2VE0UNrS9Pv7JTrY184xLAd4FDPpy3icxPrVw/iDJ4tGTr1HrMVhC2JKApdLDRHyHtkMdZxNg==", - "dev": true, - "engines": { - "node": ">=18", - "npm": ">=7.21.0" - } - }, "node_modules/@wikimedia/types-wikimedia": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@wikimedia/types-wikimedia/-/types-wikimedia-0.4.4.tgz", @@ -1174,10 +957,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1231,13 +1015,6 @@ "node": ">=4" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "peer": true - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2066,13 +1843,6 @@ "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "peer": true - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2767,16 +2537,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -2815,10 +2575,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4251,28 +4012,6 @@ "spdx-license-ids": "^3.0.0" } }, - "node_modules/vue": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", - "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", - "dev": true, - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-sfc": "3.4.27", - "@vue/runtime-dom": "3.4.27", - "@vue/server-renderer": "3.4.27", - "@vue/shared": "3.4.27" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/vue-eslint-parser": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", diff --git a/package.json b/package.json index 7ee4d3a..0970878 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "lint:i18n": "banana-checker --requireLowerCase=0 i18n/" }, "devDependencies": { - "@wikimedia/codex": "^1.16.0", "@wikimedia/types-wikimedia": "0.4.4", "eslint-config-wikimedia": "0.28.2", "eslint-plugin-no-jquery": "3.0.2",