Commit graph

1440 commits

Author SHA1 Message Date
Sam Smith d14caf2f11 featureManager: Add Requirement interface
FeatureManager::registerRequirement established the interface for a
requirement: its name and whether it's met.

However, the Feature Manager also needs to handle scenarios where a
requirement needs additional context before it can be considered met.
That context may not be available when the application is booting, e.g.
checking if the user is logged in; or the logic is complicated enough
that it should be under test.

Changes:

- Add the Requirement interface and update FeatureManager to work with
  implementations of it

- Maintain B/C by constructing an instance of a the SimpleRequirement
  DTO

Bug: T244481
Change-Id: Id95d9e5d7125492968d0e15515224aadbc3075f8
2020-03-09 11:06:26 +00:00
Sam Smith 64bd4601b4 featureManager: Add typehints
I735fd640 bumped the required MediaWiki version to 1.31. That version
dropped support for PHP 5.x.

Wherever possible, update FeatureManager's methods to use PHP 7.0.x's
scalar and return type declarations.

Bug: T244481
Change-Id: Ib5636d0ec5ec7f0c93b5b3317a12635668b589e2
2020-03-09 11:05:21 +00:00
libraryupgrader e9d9949048 build: Updating acorn to 7.1.1
* https://npmjs.com/advisories/1488

Change-Id: I4a6240c578be9b490cb824e24dbc252be60d9c7b
2020-03-08 19:06:33 +00:00
AronDemian 6ebd95832d Re-crush SVG files with unified SVGO rules
Bug: T178867
Change-Id: Ia8b2db651d2c8fd5fd949dcd07e45beed82f33a4
2020-03-08 04:12:50 +00:00
AronDemian b9968d9d93 build: Add 'svgo', SVG minifier script and unify SVGO rules
Adds:
- npm run svgmin
- .svgo.yaml: unified SVGO rules from Wikimedia coding conventions

Bug: T247004
Change-Id: I7017ecfebb811fa8d626747a830ad000774bbf2f
2020-03-07 19:47:58 -08:00
Timo Tijhof 406012f863 docs: Improve VectorTemplate Mustache param docs
Separate value type from value groups, to clarify that e.g.
something coming from a hook does not mean it should not have "html-".

Change-Id: I52fdd6995241e1d64f23fd8154997de813f674f4
2020-03-06 22:53:04 +00:00
jenkins-bot ecfd7a2b28 Merge "featureManager: Set -> Requirement" 2020-03-06 21:45:20 +00:00
Sam Smith 3f95820467 featureManager: Set -> Requirement
As was noted in https://phabricator.wikimedia.org/T244481#5859513, the
term "set" doesn't seem natural. Piotr Miazga (polishdeveloper, pmiazga)
and Nicholas Ray (nray) suggested a number of good replacements,
including "requirement." Serendipitously, this term is already used in
FeatureManager's documentation.

Bug: T244481
Change-Id: I559c2d4149db69235cdd4bb880697deb1a145743
2020-03-06 17:23:46 +00:00
Translation updater bot 478f0b5b24 Localisation updates from https://translatewiki.net.
Change-Id: I0888ea0891fb103e6429923f638d1cbe3e6956ff
2020-03-06 07:55:41 +01:00
AronDemian 1b340724d4 Separate scripts npm test and npm run build, remove npm run doc from test
- npm doc: unchanged, but no longer called by 'test'
  * it is run on its own by 'mwext-node10-rundoc-docker' CI job.
  * successful build of the documentation is necessary for JenkinsBot to accept the patch
- npm test: runs only 'lint' as of now, future possibility: qunit tests too
  * run by CI job 'mwgate-node10-docker'
- npm build: runs 'test' and 'doc'
  * NOT run by CI jobs

Bug: T247004
Change-Id: I3e6e1ebb220ceb1a1591cb7087bbd071b1bacf8f
2020-03-05 23:43:39 +00:00
AronDemian 71ec758beb Add script 'npm run lint:fix' to fix trivial lint errors
Bug: T247004
Change-Id: Id40b82f64a5c29af4a8e2c7935623df6761d25b1
2020-03-05 22:26:06 +01:00
AronDemian 834f4f837f Port 'storybook' scripts to windows, merge 'jsdoc' into 'doc'
additional changes:
* the jsdoc npm command is removed intentionally to
avoid polluting package.json with too many jobs.

Change-Id: Ie49de1c4b7a40a835ea1b3f8bcdbb779ba919860
2020-03-05 17:48:01 +00:00
Nicholas Ray e8a403e342 Rename Storybook Files to Reflect Their Respective Component
* Following up on the work from
Idf90ee2a0f1c1d08a31cf50099c0bebc7b67e619, this commit renames the
storybook files/storybook names to their respective component name.

e.g. personalNavigation.stories.js => PersonalMenu.stories.js

Bug: T243281
Change-Id: I68054663c5a597f90a826b6f75bf399382dca609
2020-03-03 18:32:55 +00:00
Nicholas Ray 9823538683 Isolate Vector Styles to their Respective Component
This will help with the encapsulation/reusability of each component.

* Stylesheets were renamed to reflect their respective component name
(e.g. search.less became SearchBox.less)

* Styles were isolated to each component:

* navigation.less now only contains classes that are relevant to
Navigation.mustache.
  * personalNavigation.less, search.less, and tabs.less
    imports were removed and made first-class styles.
  * several selectors were moved into common.less
  * #p-logo was moved into sidebar

* tabs.less was renamed to VectorTabs.less and styles specific to
VectorMenu.less were put into VectorMenu.less

* Storybook was updated to reflect changes

Bug: T243281
Change-Id: Idf90ee2a0f1c1d08a31cf50099c0bebc7b67e619
2020-03-03 18:20:19 +00:00
jdlrobson cdd5ebd74d Use template partials rather than HTML strings
CHANGES to  index.mustache:
Changes can be understood by looking at the diff of
the file stories/skin.stories.js

The additional changes in stories folder export the data passed to
those templates. A new file is used as exporting any variable in a
file suffixed stories.js will be assumed to be a story entry.

The changes to index.mustache are as follows:
* html-footer is replaced with data-footer and Footer
component is rendered via template partial
* html-navigation is replaced with data-navigation and
Navigation component is rendered via template partial

CHANGES to Navigation.mustache:
Changes are best explained by looking at the diff to
stories/navigation.stories.js
and navigation.stories.data.js
* html-personal-menu is replaced with data-personal-menu

Bug: T245456
Change-Id: Ie96e92447a932b8a7f3844df277a1d31a2af423c
2020-03-03 09:28:52 -08:00
Translation updater bot d6f9d0c1ff Localisation updates from https://translatewiki.net.
Change-Id: I8fbe972c796aac6ddda091764bcd146ab62eb2c6
2020-03-03 07:57:51 +01:00
Translation updater bot 3683a52f91 Localisation updates from https://translatewiki.net.
Change-Id: Ib604ee279875b1f518e7dc53902006bd0667f05e
2020-03-02 08:39:02 +01:00
jdlrobson 0ba99a1e97 Make sure Vector skin preferences always follows skin
Sections can be nested. Using rendering/skin as the parent
means that Vector's skin preference will always come straight
after the skin preference and before Popups.

A change in core is needed to update the selector for the element which
shows/hides the subsection as well as provide a generic message key to
replace the one inside this repository.

Note: If the "Vector" specific heading is needed, we can achieve this
with a little more work but that is a conversation for another time.

Depends-On: Idd06bcfe7935e16732a6a95c1253dbf95c8aca2e
Bug: T246162
Change-Id: I4be9764ddca186e5bfd493678afd62d446072e8f
2020-02-29 00:35:50 +00:00
polishdeveloper 48988c8ab0 Instead of accessing $data property use set/get/html methods
For better encapsulation and future possibility to create Skin API
we have to stop accesing properties and start using getters/setters
instead. Once we start doing that we should be able to provide a
clear interface for our templating system.

Bug: T246161
Change-Id: Ib3539b1e3bc12341c79913af3c95acad8619cff4
2020-02-28 22:06:00 +01:00
Translation updater bot 611c4ae035 Localisation updates from https://translatewiki.net.
Change-Id: I29b92bc0a9af7559e9d366bd5cba179ab12712da
2020-02-28 07:57:34 +01:00
jenkins-bot 5b1d77fb9d Merge "Replace Grunt tasks with npm scripts in package.json" 2020-02-27 17:48:52 +00:00
Jan Drewniak 98b70067c9 Replace Grunt tasks with npm scripts in package.json
Adds the following npm scripts:
- npm run lint
- npm run lint:js
- npm run lint:styles
- npm run lint:i18n

Bug: T242781
Change-Id: I0c2cfce73a02029b9d0c4d329309aff477cb02d4
2020-02-27 16:32:12 +01:00
Translation updater bot 2b5c6563c8 Localisation updates from https://translatewiki.net.
Change-Id: Idc32101f93d2554652f01c58f8327dc04fd7a6d0
2020-02-27 08:12:32 +01:00
jenkins-bot 0588f817b9 Merge "Add 'jsdoc-wmf-theme' to jsdoc" 2020-02-26 23:14:08 +00:00
jdlrobson 698752e38a [Dev] processTemplate used in one place
Moving all the templateParser calls to one function
so its easier to see how the template is composed.

The diff of changes to the stories folder highlight
the internal changes which are:

* html-portals replaced with html-sidebar in main template
* new Sidebar template added which outputs to html-sidebar
* Mention of "MainMenu" replaced with better understood "Sidebar"

This is precursory work to adopt templatePartials

Change-Id: I6b2196e39087f818e774d04b2d1b9ab8cb8816a1
2020-02-26 12:28:40 -08:00
Stephen Niedzielski de76ab59c1 [Special:Preferences] [PHP] Add skin version user preference and configs
Add a Vector-specific user preference to Special:Preferences for
toggling skin version, either Legacy Vector or the latest Vector.

The presentation of the new preference section and the default values
for anonymous, new, and existing accounts are configurable via
$wgVectorShowSkinPreferences, $wgVectorDefaultSkinVersion (to be used by
the feature manager in T244481),
$wgVectorDefaultSkinVersionForExistingAccounts, and
$wgVectorDefaultSkinVersionForNewAccounts. These configurations default
to the fullest experience so that third-party configuration is minimal.
See skin.json for details. The configurations are each tested in
VectorHooksTest.php.

When presentation is enabled, the new preference appears as a checkbox;
enabled is Legacy mode and disable is latest. There are a number of
unfortunate details:

- Showing and hiding a checkbox is supported by OOUI. Showing and hiding
  a whole section (Vector skin preferences, in this case) is not so this
  additional client JavaScript functionality is added in Core (see
  Iaf68b238a8ac7a4fb22b9ef5d6c5a3394ee2e377).
- Stylization as a checkbox is wanted. However, the implied storage type
  for OOUI checkboxes is a boolean. This is not wanted in the event that
  another skin version is added (e.g., '3' or 'alpha'). As a workaround,
  the preference is converted from a boolean to a version string ('1' or
  '2') on save in Hooks::onPreferencesFormPreSave() and from a version
  string to a checkbox enable / disable string ('1' or '0') in
  onGetPreferences(). There a number of test cases to help cover these
  concerning details.

Documentation for overriding the skin version as a URL query parameter
is provided in anticipation of T244481.

Bug: T242381
Bug: T245793
Depends-On: Iaf68b238a8ac7a4fb22b9ef5d6c5a3394ee2e377
Depends-On: Ifc2863fca9cd9efd11ac30c780420e8d89e8cb22
Change-Id: I177dad88fc982170641059b6a4f53fbb38eefad6
2020-02-26 12:56:10 -07:00
polishdeveloper 4819772ac5 Bump required MediaWiki version
1. As MediaWiki documentation says, in order to use AutoloadNamespaces,
   we require at MediaWiki 1.31. See
   https://www.mediawiki.org/wiki/Manual:Extension.json/Schema#AutoloadNamespaces

2. The most recent obsolete version of MW is v1.30. Bump the required
   version to the most recent LTS version, v1.31

Bug: T244481
Change-Id: I735fd64085601376bf1917b2df5a7dbeeb55108f
2020-02-26 16:58:14 +00:00
jenkins-bot 6b0958c56b Merge "features: Add minimalist feature manager" 2020-02-26 16:06:32 +00:00
Sam Smith 9177c22365 features: Add minimalist feature manager
With complex additions to Vector's codebase like the Desktop Improvement
Program upcoming, it's important that we have a shared, intuitive
language to talk about features and their requirements. Centralising
the registration of features and creating an API satisfies does exactly
this.

This change introduces a greatly-reduced version of Piotr Miazga's
(polishdeveloper, pmiazga) original proposed API and associated
scaffolding classes for feature management in Vector, which itself was
based upon his work in MobileFrontend/MinervaNeue. This is done to
establish a foundation upon which we can build the more sophisticated
parts of Piotr's proposal in a piecemeal basis, thereby minimising risk.

Distinct from Piotr's proposed API is the ability to register sets and
features that are always enabled or disabled.

Additionally:

- A Vector.FeatureManager service is registered but not used

- A list of proposed immediate next steps is included

Bug: T244481
Change-Id: Ie53c41d479eaf15559d5bb00f269774760360bde
2020-02-26 11:49:29 +00:00
Translation updater bot 029ebd1cba Localisation updates from https://translatewiki.net.
Change-Id: I591eda4685ffbb18881b999a0c1ef09bfcdfbfbe
2020-02-26 07:59:09 +01:00
Translation updater bot 2dbb1c1721 Localisation updates from https://translatewiki.net.
Change-Id: I7412b9e9ceac048fff33fa5644708eb7f5707fdf
2020-02-25 08:25:50 +01:00
Sam Smith 19fd1a03dc docs: Generate documentation with Doxygen
doc.wikimedia.org is a helpful resource when iterating on a codebase.
Now that the Desktop Improvements Project is underway, Vector will be
iterated on heavily. Like MobileFrontend, generate documentation with
Doxygen so that it can be published on doc.wikimedia.org.

Note well that:

- The CALL_GRAPH and CALLER_GRAPH statements have been removed as they
  were being set to the default value (NO)

- DOT_FONTSIZE was increased from 10 to 12

Bug: T242779
Change-Id: I7cc2eae2cf950293eee0028873bc6f1c89443977
2020-02-24 16:49:38 +00:00
Translation updater bot a6790169a9 Localisation updates from https://translatewiki.net.
Change-Id: I33f52c4d3fd6ac6023dc4eb1794a0873ffa4d9c7
2020-02-24 08:33:17 +01:00
Translation updater bot 37874d4484 Localisation updates from https://translatewiki.net.
Change-Id: I234921da6b7f95a2983330fd7766ba0457067af8
2020-02-21 09:18:41 +01:00
Translation updater bot e19f6da3e0 Localisation updates from https://translatewiki.net.
Change-Id: Ief8b9f4e7a9271bbe9a754e8e95738a932cf5cbb
2020-02-20 09:05:57 +01:00
jenkins-bot c4dc88114c Merge "Unify user messages for Vector.js and Vector.css" 2020-02-19 22:56:07 +00:00
Volker E 5a4a589916 Unify user messages for Vector.js and Vector.css
Those messages have been untouched since introduction, but should be
unified. They are put on top of corresponding pages like
https://en.m.wikipedia.org/wiki/MediaWiki:Vector.js

Change-Id: Ib40a38dba553bf10070fedf368ba8ea581d2b4b9
2020-02-19 14:10:42 -08:00
Volker E bedb0ea8f4 Remove Webkit search cancel button for cross-browser consistency
Use same code as in MinervaNeue. For unknown reason, Chrome
decides in 2020 to suddenly show search cancel button.

Change-Id: I5c813a2ea68929c05f5d061d46c027934853dbf8
2020-02-18 22:30:19 -08:00
James D. Forrester 1cbb7ee653 Follow-up 2dbe4d7: Stop documenting wgVectorPrintLogo, never read
Change-Id: Ia968e72e1672e9afb4a11ddbfc89ef7e891dc0d3
2020-02-18 13:22:35 -08:00
jdlrobson 2d914d04ea Remove renderNavigation function for readability
The renderNavigation function provides an unnecessary level of
abstraction which I'd argue hurts readability of these functions.
Let's remove it.

Change-Id: Iad1c4db606404fecf4d5ae98981df9f05d3f661e
2020-02-17 22:20:18 +00:00
Nicholas Ray 7b7c948bf6 Add 'jsdoc-wmf-theme' to jsdoc
This adds the wmf theme styles to our jsdoc as can be seen on
https://doc.wikimedia.org/Parsoid/master/.

There is a caveat with this though. jsdoc-wmf-theme adds warnings for
unlinked symbols (e.g. 'return {jQuery}') [1] which causes the jsdoc doc
generation to fail since it is set to fail on warnings (we have it
configured with `pedantic: true`).

If we add the jsdoc-wmf-theme, we will need to be stricter about our
symbol usage which could be a good thing or just be tedious and
annoying.

What do you think?

[1] https://github.com/cscott/jsdoc-wmf-theme/blob/master/publish.js#L29

Bug: T239258
Change-Id: Icade62a278d7e685cbda28a8ca26a1b703e64f19
2020-02-14 10:43:46 -07:00
Nicholas Ray a79bb8dff4 build: Replace JSDuck with JSDoc
* jsdoc.json was copied from Minerva. The markdown plugin from that
config was removed since there no usages of that in Vector.

* Added latest jsdoc dependency to package.json

* Copied 'jsdoc' task from Minerva into Vector. Revised storybook output
so that multiple docs (storybook + jsdoc) could be in /docs

* Made collapsibleTabs.js JSDoc compliant (This was really the only
thing using jsduck syntax)

* Modified Gruntfile stylelinter to ignore docs folder

Bug: T239258
Change-Id: Id07d591ffe7bf0ac021109051e89b91ffdcf4c78
2020-02-14 10:29:00 -07:00
Translation updater bot 1609747972 Localisation updates from https://translatewiki.net.
Change-Id: Ie13d077807d8e7a1a8f9ae52b4908a8249275609
2020-02-11 07:56:02 +01:00
Translation updater bot 0662f28024 Localisation updates from https://translatewiki.net.
Change-Id: Ice0d0138a11cd2ad058f49be4d3492080d206440
2020-02-10 07:57:44 +01:00
Translation updater bot 70eb612824 Localisation updates from https://translatewiki.net.
Change-Id: I2f01a3384e2ab9d1812d582702f63c41f94682b2
2020-02-07 08:48:36 +01:00
jenkins-bot fc3ac16b54 Merge "Add Coding Conventions Section to Vector README" 2020-02-06 21:32:13 +00:00
Nicholas Ray 356c976bb3 Add Coding Conventions Section to Vector README
Although the convention of where to put conventions remains somewhat
contentious, the team's desired conventions for Desktop Improvments have
so far been, for the most part, general and could be useful for any
project our team owns (e.g. MobileFrontend, Minerva, etc).

Therefore, I added/made revisions to the
https://www.mediawiki.org/wiki/Reading/Web/Coding_conventions wiki page
as this seems the be the single source of truth of our team specific
conventions that span across repos.

This commit just links to these changes which follows the same pattern
as Minerva and MobileFrontend.

Additional Changes:

* Added installation section similar to Minerva Skin

Bug: T239269
Change-Id: I41c71fba1228086f1830d8bb0808227b62ebf5cd
2020-02-05 15:26:15 -07:00
jdlrobson 2dbe4d7af1 Drop usage of mediawiki.skinning.interface module in favor of SkinModule
Thanks to the dependent change, the print logo is now provided
in core so we can remove the custom Vector ResourceLoader module

ResourceLoaderLessModule is replaced with a ResourceLoaderSkinModule
and gains the features capability replacing the need for
'mediawiki.skinning.interface' making use of the changes added in
6845912bcf1.

Note that for cached HTML both 'mediawiki.skinning.interface'
and skins.vector.styles will be loaded. We can avoid this
by renaming skins.vector.styles if necessary (but I'm not
sure if we'd want to do that)

Bug: T232140
Depends-On: I00899c16c0325f36b671baf17e88c2b5187b3526
Change-Id: I569e0d800e147eabc7852567acd140108613f074
2020-02-05 10:02:47 +08:00
Translation updater bot 1f53b4c99b Localisation updates from https://translatewiki.net.
Change-Id: I7e0c298c35b405dfe4331a6e6a3046f706f20563
2020-02-04 08:10:46 +01:00
Stephen Niedzielski 9f492ad5c9 [fix] [jsduck] Update config JavaScript path
Bug: T242674
Change-Id: Ic9a2395ae67065bb7efee431edf16ebaa41b231b
2020-02-03 09:43:56 -07:00