diff --git a/.eslintrc.json b/.eslintrc.json index b865568..f59fc50 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,12 +1,12 @@ { - "root": true, - "extends": [ - "wikimedia/client-es6", - "wikimedia/jquery", - "wikimedia/mediawiki" - ], - "rules": { - "compat/compat": "off", - "vue/no-v-html": "off" - } -} \ No newline at end of file + "root": true, + "extends": [ + "wikimedia/client-es6", + "wikimedia/jquery", + "wikimedia/mediawiki" + ], + "rules": { + "compat/compat": "off", + "vue/no-v-html": "off" + } +} diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml new file mode 100644 index 0000000..2733f8c --- /dev/null +++ b/.github/workflows/php.yml @@ -0,0 +1,24 @@ +name: PHP build +on: + [ pull_request, push ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + php: [ 7.4, 8.0, 8.1, 8.2 ] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + + - name: Install dependencies + run: composer install --prefer-dist --no-interaction --ansi + + - name: Running phpcs + run: composer run-script cs diff --git a/.stylelintrc.json b/.stylelintrc.json index 62cd686..f65e0e9 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,8 +1,8 @@ { - "extends": "stylelint-config-wikimedia", - "rules": { - "selector-max-id": null, - "no-descending-specificity": null, - "indentation": 2 - } -} \ No newline at end of file + "extends": "stylelint-config-wikimedia", + "rules": { + "selector-max-id": null, + "no-descending-specificity": null, + "indentation": 2 + } +} diff --git a/AUTHORS.txt b/AUTHORS.txt index 016290d..b0e7aba 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,6 +1,8 @@ -The Lakeus skin is written by Lakejason0, Light beacon, Dianliang233, Winston Sung and other contributors to the skin. See https://github.com/lakejason0/mediawiki-skins-Lakeus/graphs/contributors for the list of all contributors. +The Lakeus skin is written by Lakejason0, Light beacon, Dianliang233, Winston Sung and other contributors to the skin. +See https://github.com/lakejason0/mediawiki-skins-Lakeus/graphs/contributors for the list of all contributors. -Translations are done by Lakejason0 (`zh-hans`, `zh-hant`, `zh-hk`), Winston Sung (`zh-hant`), Olvcpr423 (`yue`) and other translators on Translatewiki.net. See https://translatewiki.net/wiki/Special:MessageGroupStats?group=mwgithub-lakeus&suppressempty=1&x=D for the message group statistics of the skin. +Translations are done by Lakejason0 (`zh-hans`, `zh-hant`, `zh-hk`), Winston Sung (`zh-hant`), Olvcpr423 (`yue`) and other translators on translatewiki.net. +See https://translatewiki.net/wiki/Special:MessageGroupStats?group=mwgithub-lakeus&suppressempty=1&x=D for the message group statistics of the skin. Special thanks to Timeless, Vector, Minerva, FandomMobile and FandomDesktop for inspiration of some features of this skin! @@ -23,4 +25,4 @@ Fandom skins: This project uses Material icons; These icons are under their license (Apache License 2.0) as well. -This project uses OOUI icons; These icons are under their license (MIT) as well. \ No newline at end of file +This project uses OOUI icons; These icons are under their license (MIT) as well. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..e072467 --- /dev/null +++ b/composer.json @@ -0,0 +1,46 @@ +{ + "name": "mediawiki/lakeus-skin", + "description": "A MediaWiki skin made by Lakejason0 and other contributors.", + "keywords": [ + "mediawiki" + ], + "license": "GPL-3.0-or-later", + "authors": [ + { + "name": "Lakejason0" + }, + { + "name": "Light beacon" + }, + { + "name": "Dianliang233" + }, + { + "name": "Winston Sung" + } + ], + "require": { + "php": ">=7.4", + "mustangostang/spyc": "0.6.3" + }, + "require-dev": { + "phpunit/phpunit": "9.6.13", + "mediawiki/mediawiki-codesniffer": "42.0.0" + }, + "support": { + "issues": "https://github.com/lakejason0/mediawiki-skins-Lakeus/issues" + }, + "autoload": { + "psr-4": { + "MediaWiki\\Skins\\Lakeus\\": "includes/" + } + }, + "scripts": { + "fix": "phpcbf", + "cs": "phpcs -sp", + "test": [ + "@composer validate --no-interaction", + "@cs" + ] + } +} diff --git a/i18n/zh-hans.json b/i18n/zh-hans.json index 4417362..adf07ae 100644 --- a/i18n/zh-hans.json +++ b/i18n/zh-hans.json @@ -45,7 +45,7 @@ "lakeus-theme-designer-basic-derived": "基本派生", "lakeus-theme-designer-color-secondary--derived": "次要色派生", "lakeus-theme-designer-border-color-secondary--derived": "次要色边框颜色派生", - "lakeus-theme-designer-global": "全局", + "lakeus-theme-designer-global": "全域", "lakeus-theme-designer-background-color-base": "HTML背景颜色", "lakeus-theme-designer-color-link": "链接颜色", "lakeus-theme-designer-color-link--visited": "访问过的链接颜色", diff --git a/includes/Hooks.php b/includes/Hooks.php index c2553b8..55bfba6 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -1,39 +1,38 @@ 'check', - 'label-message' => 'lakeus-preferences-enable-theme-designer', // a system message - 'help-message' => 'lakeus-preferences-enable-theme-designer-desc', - 'section' => 'rendering/skin/skin-prefs', - 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], - ]; +class Hooks { + /** + * @see https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Hooks/GetPreferences + * @param User $user + * @param array &$preferences + */ + public static function onGetPreferences( $user, &$preferences ) { + // A checkbox + $preferences['lakeus-enable-theme-designer'] = [ + 'type' => 'check', + // a system message + 'label-message' => 'lakeus-preferences-enable-theme-designer', + 'help-message' => 'lakeus-preferences-enable-theme-designer-desc', + 'section' => 'rendering/skin/skin-prefs', + 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], + ]; - $preferences['lakeus-sticky-toc-donot-auto-collapse'] = [ - 'type' => 'check', - 'label-message' => 'lakeus-preferences-sticky-toc-donot-auto-collapse', - 'help-message' => 'lakeus-preferences-sticky-toc-donot-auto-collapse-desc', - 'section' => 'rendering/skin/skin-prefs', - 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], - ]; + $preferences['lakeus-sticky-toc-donot-auto-collapse'] = [ + 'type' => 'check', + 'label-message' => 'lakeus-preferences-sticky-toc-donot-auto-collapse', + 'help-message' => 'lakeus-preferences-sticky-toc-donot-auto-collapse-desc', + 'section' => 'rendering/skin/skin-prefs', + 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], + ]; - $preferences['lakeus-smooth-scroll-behavior'] = [ - 'type' => 'check', - 'label-message' => 'lakeus-preferences-smooth-scroll-behavior', - 'help-message' => 'lakeus-preferences-smooth-scroll-behavior-desc', - 'section' => 'rendering/skin/skin-prefs', - 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], - ]; - } + $preferences['lakeus-smooth-scroll-behavior'] = [ + 'type' => 'check', + 'label-message' => 'lakeus-preferences-smooth-scroll-behavior', + 'help-message' => 'lakeus-preferences-smooth-scroll-behavior-desc', + 'section' => 'rendering/skin/skin-prefs', + 'hide-if' => [ '!==', 'wpskin', 'lakeus' ], + ]; + } } diff --git a/includes/SkinLakeus.php b/includes/SkinLakeus.php index 0c2b3d7..bc0b07b 100644 --- a/includes/SkinLakeus.php +++ b/includes/SkinLakeus.php @@ -1,48 +1,69 @@ templateParser = new TemplateParser( $this->options['templateDirectory'], $localServerObjectCache ); - } - - /** - * Extends the getTemplateData function to add a template key 'html-myskin-hello-world' - * which can be rendered in skin.mustache using {{{html-myskin-hello-world}}} - */ - public function getTemplateData() { - $data = parent::getTemplateData(); - $config = $this->getConfig(); // this is a Config object - - $data["html-articlecount"] = SiteStats::articles(); - // trying to overwrite - $data["msg-lakeus-articlecount"] = $this->msg( 'lakeus-articlecount' )->numParams( SiteStats::articles() )->parse(); - $wgLakeusShowRepositoryLink = $config->get( 'LakeusShowRepositoryLink' ); - if ($wgLakeusShowRepositoryLink) { - $data["html-repository-link"] = '' . $this->msg( 'lakeus-footermessage' )->plain() . ''; - $data["is-repository-link-shown"] = true; - } - $data["is-notice-with-border"] = $config->get( 'LakeusSiteNoticeHasBorder' ); - $data["is-portlet-animated"] = $config->get( 'LakeusShouldAnimatePortlets' ); - $data["is-sticky-toc-shown"] = $config->get( 'LakeusShowStickyTOC' ); - - $pageToolsKey = array_search('p-tb' , array_column( $data["data-portlets-sidebar"]["array-portlets-rest"], 'id' ) ); - $data["data-portlets"]["data-page-tools"] = $data["data-portlets-sidebar"]["array-portlets-rest"][$pageToolsKey]; - unset($data["data-portlets-sidebar"]["array-portlets-rest"][$pageToolsKey]); - $data["data-portlets-sidebar"]["array-portlets-rest"] = array_values($data["data-portlets-sidebar"]["array-portlets-rest"]); - - if ( empty($data["data-toc"]["array-sections"]) ) { - unset($data["data-toc"]); - } - - return $data; - } -} \ No newline at end of file + public const TEMPLATE_DIR = __DIR__ . '/templates'; + + /** + * @param BagOStuff $localServerObjectCache + * @param array $options + */ + public function __construct( BagOStuff $localServerObjectCache, array $options ) { + $options['templateDirectory'] = self::TEMPLATE_DIR; + parent::__construct( $options ); + + $this->templateParser = new TemplateParser( $this->options['templateDirectory'], $localServerObjectCache ); + } + + /** + * Extends the getTemplateData function to add a template key 'html-myskin-hello-world' + * which can be rendered in skin.mustache using {{{html-myskin-hello-world}}} + * + * @return array + */ + public function getTemplateData(): array { + $data = parent::getTemplateData(); + // this is a Config object + $config = $this->getConfig(); + + $data["html-articlecount"] = SiteStats::articles(); + // trying to overwrite + $data["msg-lakeus-articlecount"] = $this->msg( 'lakeus-articlecount' ) + ->numParams( SiteStats::articles() )->parse(); + $showRepositoryLink = $config->get( 'LakeusShowRepositoryLink' ); + if ( $showRepositoryLink ) { + $data["html-repository-link"] = '' . + $this->msg( 'lakeus-footermessage' )->plain() . ''; + $data["is-repository-link-shown"] = true; + } + $data["is-notice-with-border"] = $config->get( 'LakeusSiteNoticeHasBorder' ); + $data["is-portlet-animated"] = $config->get( 'LakeusShouldAnimatePortlets' ); + $data["is-sticky-toc-shown"] = $config->get( 'LakeusShowStickyTOC' ); + + $pageToolsKey = array_search( + 'p-tb', + array_column( $data["data-portlets-sidebar"]["array-portlets-rest"], 'id' ) + ); + $data["data-portlets"]["data-page-tools"] = + $data["data-portlets-sidebar"]["array-portlets-rest"][$pageToolsKey]; + unset( $data["data-portlets-sidebar"]["array-portlets-rest"][$pageToolsKey] ); + $data["data-portlets-sidebar"]["array-portlets-rest"] = array_values( + $data["data-portlets-sidebar"]["array-portlets-rest"] + ); + + if ( empty( $data["data-toc"]["array-sections"] ) ) { + unset( $data["data-toc"] ); + } + + return $data; + } +} diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000..172b21b --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,7 @@ + + + + . + + + diff --git a/phpcs_standalone.xml b/phpcs_standalone.xml new file mode 100644 index 0000000..55a914e --- /dev/null +++ b/phpcs_standalone.xml @@ -0,0 +1,201 @@ + + + + + + + + A coding standard for MediaWiki. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ^(\.git|coverage|node_modules|vendor)/* + + + + . + + + diff --git a/screenshots/1920x968.png b/screenshots/1920x968.png new file mode 100644 index 0000000..bd9f3b8 Binary files /dev/null and b/screenshots/1920x968.png differ diff --git a/skin.json b/skin.json index f62ca5d..b8d391c 100644 --- a/skin.json +++ b/skin.json @@ -1,282 +1,279 @@ { - "name": "Lakeus", - "version": "1.1.16", - "namemsg": "skinname-lakeus", - "descriptionmsg": "lakeus-skin-desc", - "url": "https://github.com/lakejason0/mediawiki-skins-Lakeus", - "author": [ - "[https://github.com/lakejason0 Lakejason0]", - "Light beacon", - "Dianliang233", - "Winston Sung", - "..." - ], - "type": "skin", - "requires": { - "MediaWiki": ">= 1.36.0" - }, - "license-name": "GPL-3.0-or-later", - "manifest_version": 2, - "ValidSkinNames": { - "lakeus": { - "class": "SkinLakeus", - "services": [ - "LocalServerObjectCache" - ], - "args": [ - { - "name": "lakeus", - "messages": [ - "sitetitle", - "search", - "otherlanguages", - "tagline", - "toc", - "lakeus-openmainmenu", - "lakeus-jumptocontent", - "lakeus-articlecount", - "lakeus-preferences-enable-theme-designer", - "lakeus-preferences-enable-theme-designer-desc", - "lakeus-preferences-sticky-toc-donot-auto-collapse", - "lakeus-preferences-sticky-toc-donot-auto-collapse-desc" - ], - "styles": [ - "mediawiki.hlist", - "skins.lakeus.styles" - ], - "scripts": [ - "skins.lakeus", - "skins.lakeus.designer" - ], - "responsive": true - } - ] - } - }, - "MessagesDirs": { - "Lakeus": [ - "i18n" - ] - }, - "ResourceFileModulePaths": { - "localBasePath": "", - "remoteSkinPath": "Lakeus" - }, - "ResourceModules": { - "skins.lakeus.styles": { - "class": "ResourceLoaderSkinModule", - "features": { - "normalize": true, - "elements": true, - "content-tables": true, - "content-links": true, - "content-media": true, - "interface-category": true, - "interface-message-box": true, - "i18n-ordered-lists": true, - "i18n-all-lists-margins": true, - "i18n-headings": true, - "toc": true - }, - "targets": [ - "desktop", - "mobile" - ], - "styles": { - "0": "resources/skin.less", - "resources/print.less": { - "media": "print" - } - } - }, - "skins.lakeus": { - "targets": [ - "desktop", - "mobile" - ], - "styles": "resources/skin.js.less", - "packageFiles": [ - "resources/skin.js" - ] - }, - "skins.lakeus.designer": { - "es6": true, - "targets": [ - "desktop", - "mobile" - ], - "messages": [ - "lakeus-theme-designer", - "lakeus-theme-designer-system-messages-loaded", - "lakeus-theme-designer-all-loaded", - "lakeus-theme-designer-auto-calculate", - "lakeus-theme-designer-do-not-generate", - "lakeus-theme-designer-copy-theme", - "lakeus-theme-designer-paste-theme", - "lakeus-theme-designer-test-theme", - "lakeus-theme-designer-clear-theme", - "lakeus-theme-designer-reset-theme", - "lakeus-theme-designer-invert-auto-calculate-selection", - "lakeus-theme-designer-unselect-do-not-generate-selection", - "lakeus-theme-designer-copied", - "lakeus-theme-designer-copy-failed", - "lakeus-theme-designer-reload", - "lakeus-theme-designer-color-picker-fallback", - "lakeus-theme-designer-alpha-channel", - "lakeus-theme-designer-basic", - "lakeus-theme-designer-color-primary", - "lakeus-theme-designer-color-secondary", - "lakeus-theme-designer-color-neutral", - "lakeus-theme-designer-color-warning", - "lakeus-theme-designer-color-error", - "lakeus-theme-designer-color-success", - "lakeus-theme-designer-basic-derived", - "lakeus-theme-designer-color-secondary--derived", - "lakeus-theme-designer-border-color-secondary--derived", - "lakeus-theme-designer-global", - "lakeus-theme-designer-background-color-base", - "lakeus-theme-designer-color-link", - "lakeus-theme-designer-color-link--visited", - "lakeus-theme-designer-color-link--active", - "lakeus-theme-designer-color-link-new", - "lakeus-theme-designer-color-link-new--visited", - "lakeus-theme-designer-color-link-new--active", - "lakeus-theme-designer-color-footer-link", - "lakeus-theme-designer-color-footer-link--visited", - "lakeus-theme-designer-color-footer-link--active", - "lakeus-theme-designer-color-link-external", - "lakeus-theme-designer-color-link-external--visited", - "lakeus-theme-designer-color-link-external--active", - "lakeus-theme-designer-elevation", - "lakeus-theme-designer-font-family", - "lakeus-theme-designer-font-family-serif", - "lakeus-theme-designer-font-family-action-bar", - "lakeus-theme-designer-page-header", - "lakeus-theme-designer-color-header", - "lakeus-theme-designer-header-elevation", - "lakeus-theme-designer-icon-filter-header", - "lakeus-theme-designer-background-color-search-suggestions", - "lakeus-theme-designer-border-color-search-suggestions", - "lakeus-theme-designer-color-search-suggestions-text", - "lakeus-theme-designer-background-color-search-suggestions-current", - "lakeus-theme-designer-color-search-suggestions-text-current", - "lakeus-theme-designer-background-color-search-input", - "lakeus-theme-designer-border-color-search-bar", - "lakeus-theme-designer-toggle-list", - "lakeus-theme-designer-background-color-toggle-list", - "lakeus-theme-designer-background-color-toggle-list-card", - "lakeus-theme-designer-logo-text-color-toggle-list", - "lakeus-theme-designer-background-color-toggle-list-item-hover", - "lakeus-theme-designer-background-color-toggle-list-item-focus", - "lakeus-theme-designer-border-color-toggle-list", - "lakeus-theme-designer-subheader-color-toggle-list", - "lakeus-theme-designer-mask-background", - "lakeus-theme-designer-body", - "lakeus-theme-designer-background-color-content", - "lakeus-theme-designer-background-color-body", - "lakeus-theme-designer-border-color-content", - "lakeus-theme-designer-color-accent-header-tab", - "lakeus-theme-designer-border-color-header-tab", - "lakeus-theme-designer-color-tagline", - "lakeus-theme-designer-font-family-headings", - "lakeus-theme-designer-background-color-edit-options", - "lakeus-theme-designer-border-color-edit-options", - "lakeus-theme-designer-background-color-toc", - "lakeus-theme-designer-border-color-toc", - "lakeus-theme-designer-color-toc-number", - "lakeus-theme-designer-border-color-interface-message-box-neutral", - "lakeus-theme-designer-background-color-interface-message-box-neutral", - "lakeus-theme-designer-text-color-interface-message-box-neutral", - "lakeus-theme-designer-border-color-interface-message-box-warning", - "lakeus-theme-designer-background-color-interface-message-box-warning", - "lakeus-theme-designer-text-color-interface-message-box-warning", - "lakeus-theme-designer-border-color-interface-message-box-error", - "lakeus-theme-designer-background-color-interface-message-box-error", - "lakeus-theme-designer-text-color-interface-message-box-error", - "lakeus-theme-designer-border-color-interface-message-box-success", - "lakeus-theme-designer-background-color-interface-message-box-success", - "lakeus-theme-designer-text-color-interface-message-box-success", - "lakeus-theme-designer-border-color-user-message", - "lakeus-theme-designer-background-color-user-message", - "lakeus-theme-designer-text-color-user-message", - "lakeus-theme-designer-background-color-wikitable", - "lakeus-theme-designer-border-color-wikitable", - "lakeus-theme-designer-background-color-wikitable-table-head", - "lakeus-theme-designer-text-color-wikitable", - "lakeus-theme-designer-portlet", - "lakeus-theme-designer-background-color-portlet-body", - "lakeus-theme-designer-text-color-portlet-item", - "lakeus-theme-designer-background-color-portlet-item-hover", - "lakeus-theme-designer-text-color-portlet-item-hover", - "lakeus-theme-designer-background-color-portlet-item-focus", - "lakeus-theme-designer-text-color-portlet-item-focus", - "lakeus-theme-designer-border-color-portlet-body", - "lakeus-theme-designer-footer", - "lakeus-theme-designer-background-color-footer", - "lakeus-theme-designer-text-color-footer", - "lakeus-theme-designer-text-color-toggle-list-item", - "lakeus-theme-designer-text-color-toggle-list-item-hover", - "lakeus-theme-designer-text-color-toggle-list-item-focus", - "lakeus-theme-designer-text-color-content", - "lakeus-theme-designer-text-color-header", - "lakeus-theme-designer-text-color-body", - "lakeus-theme-designer-color-accent-header-tab-selected", - "lakeus-theme-designer-color-accent-header-tab-new", - "lakeus-theme-designer-sticky-toc", - "lakeus-theme-designer-background-color-toc-button", - "lakeus-theme-designer-icon-filter-toc-button", - "lakeus-theme-designer-text-color-sticky-toc-number", - "lakeus-theme-designer-danger-zone" - ], - "packageFiles": [ - "resources/themeDesigner.js" - ], - "dependencies": [ - "mediawiki.api", - "mediawiki.jqueryMsg", - "user.options" - ] - } - }, - "ResourceModuleSkinStyles": { - "lakeus": { - "+oojs-ui-core.styles": "resources/ooui.less", - "+ext.NoTitle": "skinStyles/extensions/NoTitle/ext.NoTitle.css", - "+ext.uls.pt": "skinStyles/extensions/UniversalLanguageSelector/ext.uls.pt.less", - "+ext.visualEditor.desktopArticleTarget.init": "skinStyles/extensions/VisualEditor/ext.visualEditor.desktopArticleTarget.init.less", - "+ext.echo.styles.badge": "skinStyles/extensions/Echo/ext.echo.styles.badge.less" - } - }, - "AutoloadClasses": { - "SkinLakeus": "includes/SkinLakeus.php" - }, - "AutoloadNamespaces": { - "Lakeus\\": "includes/" - }, - "Hooks": { - "GetPreferences": "Lakeus\\Hooks::onGetPreferences" - }, - "DefaultUserOptions": { - "lakeus-enable-theme-designer": 0, - "lakeus-sticky-toc-donot-auto-collapse": 0, - "lakeus-smooth-scroll-behavior": 1 - }, - "config": { - "LakeusShowRepositoryLink": { - "value": true, - "description": "Whether to show the link to the repository or not." - }, - "LakeusSiteNoticeHasBorder": { - "value": false, - "description": "Whether to add a border to site notice. Useful for plain text notices." - }, - "LakeusShouldAnimatePortlets": { - "value": false, - "description": "Whether to animate portlets. May cause visual artifacts when enabled due to z-index issues." - }, - "LakeusShowStickyTOC": { - "value": false, - "description": "Whether to show sticky TOC." - } - } + "name": "Lakeus", + "version": "1.1.17", + "namemsg": "skinname-lakeus", + "descriptionmsg": "lakeus-skin-desc", + "url": "https://github.com/lakejason0/mediawiki-skins-Lakeus", + "author": [ + "[https://github.com/lakejason0 Lakejason0]", + "Light beacon", + "Dianliang233", + "Winston Sung", + "..." + ], + "type": "skin", + "requires": { + "MediaWiki": ">= 1.36.0" + }, + "license-name": "GPL-3.0-or-later", + "manifest_version": 2, + "ValidSkinNames": { + "lakeus": { + "class": "MediaWiki\\Skins\\Lakeus\\SkinLakeus", + "services": [ + "LocalServerObjectCache" + ], + "args": [ + { + "name": "lakeus", + "messages": [ + "sitetitle", + "search", + "otherlanguages", + "tagline", + "toc", + "lakeus-openmainmenu", + "lakeus-jumptocontent", + "lakeus-articlecount", + "lakeus-preferences-enable-theme-designer", + "lakeus-preferences-enable-theme-designer-desc", + "lakeus-preferences-sticky-toc-donot-auto-collapse", + "lakeus-preferences-sticky-toc-donot-auto-collapse-desc" + ], + "styles": [ + "mediawiki.hlist", + "skins.lakeus.styles" + ], + "scripts": [ + "skins.lakeus", + "skins.lakeus.designer" + ], + "responsive": true + } + ] + } + }, + "MessagesDirs": { + "Lakeus": [ + "i18n" + ] + }, + "ResourceFileModulePaths": { + "localBasePath": "", + "remoteSkinPath": "Lakeus" + }, + "ResourceModules": { + "skins.lakeus.styles": { + "class": "ResourceLoaderSkinModule", + "features": { + "normalize": true, + "elements": true, + "content-tables": true, + "content-links": true, + "content-media": true, + "interface-category": true, + "interface-message-box": true, + "i18n-ordered-lists": true, + "i18n-all-lists-margins": true, + "i18n-headings": true, + "toc": true + }, + "targets": [ + "desktop", + "mobile" + ], + "styles": { + "0": "resources/skin.less", + "resources/print.less": { + "media": "print" + } + } + }, + "skins.lakeus": { + "targets": [ + "desktop", + "mobile" + ], + "styles": "resources/skin.js.less", + "packageFiles": [ + "resources/skin.js" + ] + }, + "skins.lakeus.designer": { + "es6": true, + "targets": [ + "desktop", + "mobile" + ], + "messages": [ + "lakeus-theme-designer", + "lakeus-theme-designer-system-messages-loaded", + "lakeus-theme-designer-all-loaded", + "lakeus-theme-designer-auto-calculate", + "lakeus-theme-designer-do-not-generate", + "lakeus-theme-designer-copy-theme", + "lakeus-theme-designer-paste-theme", + "lakeus-theme-designer-test-theme", + "lakeus-theme-designer-clear-theme", + "lakeus-theme-designer-reset-theme", + "lakeus-theme-designer-invert-auto-calculate-selection", + "lakeus-theme-designer-unselect-do-not-generate-selection", + "lakeus-theme-designer-copied", + "lakeus-theme-designer-copy-failed", + "lakeus-theme-designer-reload", + "lakeus-theme-designer-color-picker-fallback", + "lakeus-theme-designer-alpha-channel", + "lakeus-theme-designer-basic", + "lakeus-theme-designer-color-primary", + "lakeus-theme-designer-color-secondary", + "lakeus-theme-designer-color-neutral", + "lakeus-theme-designer-color-warning", + "lakeus-theme-designer-color-error", + "lakeus-theme-designer-color-success", + "lakeus-theme-designer-basic-derived", + "lakeus-theme-designer-color-secondary--derived", + "lakeus-theme-designer-border-color-secondary--derived", + "lakeus-theme-designer-global", + "lakeus-theme-designer-background-color-base", + "lakeus-theme-designer-color-link", + "lakeus-theme-designer-color-link--visited", + "lakeus-theme-designer-color-link--active", + "lakeus-theme-designer-color-link-new", + "lakeus-theme-designer-color-link-new--visited", + "lakeus-theme-designer-color-link-new--active", + "lakeus-theme-designer-color-footer-link", + "lakeus-theme-designer-color-footer-link--visited", + "lakeus-theme-designer-color-footer-link--active", + "lakeus-theme-designer-color-link-external", + "lakeus-theme-designer-color-link-external--visited", + "lakeus-theme-designer-color-link-external--active", + "lakeus-theme-designer-elevation", + "lakeus-theme-designer-font-family", + "lakeus-theme-designer-font-family-serif", + "lakeus-theme-designer-font-family-action-bar", + "lakeus-theme-designer-page-header", + "lakeus-theme-designer-color-header", + "lakeus-theme-designer-header-elevation", + "lakeus-theme-designer-icon-filter-header", + "lakeus-theme-designer-background-color-search-suggestions", + "lakeus-theme-designer-border-color-search-suggestions", + "lakeus-theme-designer-color-search-suggestions-text", + "lakeus-theme-designer-background-color-search-suggestions-current", + "lakeus-theme-designer-color-search-suggestions-text-current", + "lakeus-theme-designer-background-color-search-input", + "lakeus-theme-designer-border-color-search-bar", + "lakeus-theme-designer-toggle-list", + "lakeus-theme-designer-background-color-toggle-list", + "lakeus-theme-designer-background-color-toggle-list-card", + "lakeus-theme-designer-logo-text-color-toggle-list", + "lakeus-theme-designer-background-color-toggle-list-item-hover", + "lakeus-theme-designer-background-color-toggle-list-item-focus", + "lakeus-theme-designer-border-color-toggle-list", + "lakeus-theme-designer-subheader-color-toggle-list", + "lakeus-theme-designer-mask-background", + "lakeus-theme-designer-body", + "lakeus-theme-designer-background-color-content", + "lakeus-theme-designer-background-color-body", + "lakeus-theme-designer-border-color-content", + "lakeus-theme-designer-color-accent-header-tab", + "lakeus-theme-designer-border-color-header-tab", + "lakeus-theme-designer-color-tagline", + "lakeus-theme-designer-font-family-headings", + "lakeus-theme-designer-background-color-edit-options", + "lakeus-theme-designer-border-color-edit-options", + "lakeus-theme-designer-background-color-toc", + "lakeus-theme-designer-border-color-toc", + "lakeus-theme-designer-color-toc-number", + "lakeus-theme-designer-border-color-interface-message-box-neutral", + "lakeus-theme-designer-background-color-interface-message-box-neutral", + "lakeus-theme-designer-text-color-interface-message-box-neutral", + "lakeus-theme-designer-border-color-interface-message-box-warning", + "lakeus-theme-designer-background-color-interface-message-box-warning", + "lakeus-theme-designer-text-color-interface-message-box-warning", + "lakeus-theme-designer-border-color-interface-message-box-error", + "lakeus-theme-designer-background-color-interface-message-box-error", + "lakeus-theme-designer-text-color-interface-message-box-error", + "lakeus-theme-designer-border-color-interface-message-box-success", + "lakeus-theme-designer-background-color-interface-message-box-success", + "lakeus-theme-designer-text-color-interface-message-box-success", + "lakeus-theme-designer-border-color-user-message", + "lakeus-theme-designer-background-color-user-message", + "lakeus-theme-designer-text-color-user-message", + "lakeus-theme-designer-background-color-wikitable", + "lakeus-theme-designer-border-color-wikitable", + "lakeus-theme-designer-background-color-wikitable-table-head", + "lakeus-theme-designer-text-color-wikitable", + "lakeus-theme-designer-portlet", + "lakeus-theme-designer-background-color-portlet-body", + "lakeus-theme-designer-text-color-portlet-item", + "lakeus-theme-designer-background-color-portlet-item-hover", + "lakeus-theme-designer-text-color-portlet-item-hover", + "lakeus-theme-designer-background-color-portlet-item-focus", + "lakeus-theme-designer-text-color-portlet-item-focus", + "lakeus-theme-designer-border-color-portlet-body", + "lakeus-theme-designer-footer", + "lakeus-theme-designer-background-color-footer", + "lakeus-theme-designer-text-color-footer", + "lakeus-theme-designer-text-color-toggle-list-item", + "lakeus-theme-designer-text-color-toggle-list-item-hover", + "lakeus-theme-designer-text-color-toggle-list-item-focus", + "lakeus-theme-designer-text-color-content", + "lakeus-theme-designer-text-color-header", + "lakeus-theme-designer-text-color-body", + "lakeus-theme-designer-color-accent-header-tab-selected", + "lakeus-theme-designer-color-accent-header-tab-new", + "lakeus-theme-designer-sticky-toc", + "lakeus-theme-designer-background-color-toc-button", + "lakeus-theme-designer-icon-filter-toc-button", + "lakeus-theme-designer-text-color-sticky-toc-number", + "lakeus-theme-designer-danger-zone" + ], + "packageFiles": [ + "resources/themeDesigner.js" + ], + "dependencies": [ + "mediawiki.api", + "mediawiki.jqueryMsg", + "user.options" + ] + } + }, + "ResourceModuleSkinStyles": { + "lakeus": { + "+oojs-ui-core.styles": "resources/ooui.less", + "+ext.NoTitle": "skinStyles/extensions/NoTitle/ext.NoTitle.css", + "+ext.uls.pt": "skinStyles/extensions/UniversalLanguageSelector/ext.uls.pt.less", + "+ext.visualEditor.desktopArticleTarget.init": "skinStyles/extensions/VisualEditor/ext.visualEditor.desktopArticleTarget.init.less", + "+ext.echo.styles.badge": "skinStyles/extensions/Echo/ext.echo.styles.badge.less" + } + }, + "AutoloadNamespaces": { + "MediaWiki\\Skins\\Lakeus\\": "includes/" + }, + "Hooks": { + "GetPreferences": "MediaWiki\\Skins\\Lakeus\\Hooks::onGetPreferences" + }, + "DefaultUserOptions": { + "lakeus-enable-theme-designer": 0, + "lakeus-sticky-toc-donot-auto-collapse": 0, + "lakeus-smooth-scroll-behavior": 1 + }, + "config": { + "LakeusShowRepositoryLink": { + "value": true, + "description": "Whether to show the link to the repository or not." + }, + "LakeusSiteNoticeHasBorder": { + "value": false, + "description": "Whether to add a border to site notice. Useful for plain text notices." + }, + "LakeusShouldAnimatePortlets": { + "value": false, + "description": "Whether to animate portlets. May cause visual artifacts when enabled due to z-index issues." + }, + "LakeusShowStickyTOC": { + "value": false, + "description": "Whether to show sticky TOC." + } + } }