Version of vector used on wiki.jon-e.net
Go to file
Sam Smith 84226b41b6 featureManager: Add DynamicConfigRequirement requirement
We expect the vast majority of requirements and features to be defined
in services as possible. However, there are some "complex" requirements
that require additional application/HTTP request state. Unfortunately,
service wiring is done before some of that state is available.

I65702426 attempted to work around this by requiring clients of the
Feature Manager to pass that additional state on every interaction with
the system. Those complex requirements would then select the parts of
the state that they required when it was required. However
implementations of \IContextSource are God objects and their use should
be limited.

Whilst reviewing I65702426, Stephen Niedzielski mentioned that the
application state being available is a requirement. This remarkably
simple solution:

- Keeps the Requirement interface and FeatureManager API free of God
  objects;

- Is true to the nature of the Feature Manager - it makes clear and
  centralizes the various checks for application state being available
  across the codebase; and

- Inject a Requirement implementations' dependencies at construction
  time

It just so happens that the $wgFullyInitialised variable flags whether
the application state is available...

Changes:

- Add the the FeatureManager\Requirements\DynamicConfigRequirement class
  and tests. The DynamicConfigRequirement lazily evaluates a single
  configuration value whenever ::isMet is invoked

- Register an DynamicConfigRequirement instance, configured to evaluate
  $wgFullyInitialised while constructing the Vector.FeatureManager
  service

Bug: T244481
Change-Id: I7a2cdc2dfdf20d78e4548f07cf53994563b234b3
2020-03-18 10:10:42 +00:00
.phan Upgrade to newer phan 2019-03-20 19:37:59 -07:00
.storybook Add storybook to Vector 2020-01-31 16:59:15 +08:00
dev-scripts Add storybook to Vector 2020-01-31 16:59:15 +08:00
i18n Localisation updates from https://translatewiki.net. 2020-03-12 08:20:11 +01:00
includes featureManager: Add DynamicConfigRequirement requirement 2020-03-18 10:10:42 +00:00
resources Merge "[dev] Consolidate ResourceLoader LESS style files" 2020-03-11 11:51:02 +00:00
screenshots Add skin screenshot for the installer 2017-08-11 15:37:34 -04:00
skinStyles hygiene: Make LESS imports non-ambigious 2019-10-25 20:54:49 +00:00
stories Separate first portal in sidebar from rest 2020-03-11 23:34:11 +00:00
tests/phpunit featureManager: Add DynamicConfigRequirement requirement 2020-03-18 10:10:42 +00:00
.eslintignore Replace Grunt tasks with npm scripts in package.json 2020-02-27 16:32:12 +01:00
.eslintrc.json build: Update linters 2019-10-31 21:43:20 +00:00
.gitignore Add storybook to Vector 2020-01-31 16:59:15 +08:00
.gitreview Use track=1 instead of defaultbranch=master in .gitreview 2016-10-24 17:30:32 -07:00
.phpcs.xml Add method scope visibility 2018-11-01 21:01:32 +01:00
.stylelintignore Replace Grunt tasks with npm scripts in package.json 2020-02-27 16:32:12 +01:00
.stylelintrc.json build: Bump devDependencies to latest 2018-02-26 10:29:23 -08:00
.svgo.yml build: Add 'svgo', SVG minifier script and unify SVGO rules 2020-03-07 19:47:58 -08:00
CODE_OF_CONDUCT.md build: Updating mediawiki/mediawiki-codesniffer to 22.0.0 2018-09-04 01:45:34 +00:00
COPYING Use the plain-text GPL and fix 'license-name' to match SPDX conventions 2015-01-29 17:04:29 +01:00
Doxyfile docs: Generate documentation with Doxygen 2020-02-24 16:49:38 +00:00
README.md [Special:Preferences] [PHP] Add skin version user preference and configs 2020-02-26 12:56:10 -07:00
composer.json build: Updating composer dependencies 2020-01-30 20:11:34 +00:00
hooks.txt Remove 'SkinVectorStyleModules' hook 2018-01-26 10:33:47 -08:00
jsdoc.json Add 'jsdoc-wmf-theme' to jsdoc 2020-02-14 10:43:46 -07:00
package-lock.json [dev] Run `npm t` on Git pre-commit hook 2020-03-11 07:49:48 -06:00
package.json [dev] Run `npm t` on Git pre-commit hook 2020-03-11 07:49:48 -06:00
skin.json [dev] Consolidate ResourceLoader LESS style files 2020-03-10 15:29:15 -06:00
variables.less hygiene: Make LESS imports non-ambigious 2019-10-25 20:54:49 +00:00

README.md

Vector Skin

Installation

See https://www.mediawiki.org/wiki/Skin:Vector.

Configuration options

See skin.json.

Development

Coding conventions

We strive for compliance with MediaWiki conventions:

https://www.mediawiki.org/wiki/Manual:Coding_conventions

Additions and deviations from those conventions that are more tailored to this project are noted at:

https://www.mediawiki.org/wiki/Reading/Web/Coding_conventions

URL query parameters

  • useskinversion: Like useskin but for overriding the Vector skin version user preference and configuration.

Skin preferences

Vector defines skin-specific user preferences. These are exposed on Special:Preferences when the VectorShowSkinPreferences configuration is enabled. The user's preference state for skin preferences is used for skin previews and any other operation unless specified otherwise.

Version

Vector defines a "version" preference to enable users who prefer the December 2019 version of Vector to continue to do so without any visible changes. This version is called "Legacy Vector." The related preference defaults are configurable via the configurations prefixed with VectorDefaultSkinVersion. Version preference and configuration may be overridden by the useskinversion URL query parameter.