Commit graph

31 commits

Author SHA1 Message Date
Siddharth VP a7309d2b1f Namespace special page classes
Change-Id: I005f6674c9cc80c5c9e26ae84acfbceebb43734e
2023-10-30 21:13:41 +05:30
Siddharth VP 72cbb64069 Add support for content models in definitions
Adds a contentModels option to gadget definitions to restrict gadgets to
run in pages of the given content models only.

Use-cases include gadgets for tabular data[1] (for Tabular
.JsonConfig model), for editing map data[2] (for Map.JsonConfig model),
and for showing links in code pages[3] (restricted to javascript, css,
json, and scribunto models), as well as common gadgets like ProveIt[4]
which can be restricted to wikitext model.

[1]: https://commons.wikimedia.org/wiki/MediaWiki:Gadget-TabularImportExport.js
[2]: https://fr.wikipedia.org/wiki/MediaWiki:Gadget-KartoEditor.js
[3]: https://en.wiktionary.org/wiki/MediaWiki:Gadget-CodeLinks.js
[4]: https://commons.wikimedia.org/wiki/Help:Gadget-ProveIt

Bug: T204201
Bug: T63007
Change-Id: I7dcfc21d674ead8d710e7f77d13bf18bcad15079
2023-09-21 22:27:22 +05:30
brandonxlf ec69cea0e3 Add support for namespaces in definitions
Adds a "namespaces" option to the gadget definition, which takes a
list of namespace IDs. Enabled gadgets will only load when the
viewed page is in one of the required namespaces.

Bug: T204201
Bug: T63007
Change-Id: I7f797e35352b242ad78704074e98c6569a1adf91
2023-09-20 14:50:33 -07:00
gerritbot b9da596fe8 Replace some moved Title class uses, now MediaWiki\Title\Title
Bug: T321681
Change-Id: I9b9c59a564e81daf01bb99d48dc81c9357e94acc
2023-08-19 04:15:51 +00:00
Ed Sanders 9b6cfa97a0 SpecialGadgets: Remove incorrect comment and test for $requiredSkins being true
$requiredSkins is always an array

Change-Id: I91bade025a9581c33b99f986e9497299483b8b59
2023-07-24 13:36:59 +01:00
Ed Sanders f5466fca49 Use strict equality
Change-Id: Iccb15b405a6959238ba4f924ca4ec907e29a9ebf
2023-07-01 14:27:10 +01:00
Siddharth VP 7793a9475f Add support for ES6 gadgets, but with validation disabled
Gadgets can mark themselves as ES6-only by specifying the requiresES6
boolean attribute. Syntax validation is disabled for them (as the
validator doesn't support ES6 yet), and they are loaded together in a
separate request.

The minifier doesn't reject syntax errors, and thus these would
be passed through to web clients. Hence, communities using this feature
are encouraged to use ESLint or another linter to make sure only
valid ES <= 6 code is being used.

Because of the above, this feature is only made available for
non-default gadgets.

Bug: T75714
Change-Id: Ib98ac0700471554d5721d7ab858d4660e1e0e980
2022-10-20 22:03:18 +00:00
Fomafix dda2f5a129 Remove default values for the constructor of SpecialPage
Change-Id: Ibdc2d3906f3020798cd885d6fba7e5149d1b5cdf
2022-08-08 15:44:05 +00:00
Reedy 67b8bf23d0 SpecialGadgets: Don't call explode() on null
Bug: T311557
Change-Id: I05455a309bee4a4f59dc5351484dfffc682a329a
2022-06-29 00:51:24 +00:00
Func 3c23c202e5 SpecialGadgets: Avoid setting internal fields of HTMLForm
HTMLForm would handle title itself, don't need to set it manually here.

Depends-On: Iaec81a2fb49162f2fc764f143f88e887572a3a0b
Change-Id: I4a9788e853463e51570ba7c04a8bd40f1ed95cfa
2022-03-27 13:33:38 +08:00
tacsipacsi 9f14584713 Replace span.errorbox with div.mw-message-box-error
The errorbox class will soon stop working. It and its successor
mw-message-box-error were designed to work with block elements, which
meant that its inline usage caused overlaps and partially unreadable
text above/below it. To fix this, and to be able to use the
Html::errorBox function, I switched to use block elements (<div>s).
Please note that *this causes visual changes* (see screenshots on
Phabricator), and while I tried to test it locally, I might have missed
edge cases, so do tell me if it breaks something.

Bug: T304602
Change-Id: If68b934723722f976668d08a910984f89538a4f2
2022-03-24 15:35:19 +01:00
Reedy 01f6a6c34e Namespace extension
Bug: T278278
Change-Id: I49b57e68079c998419e235b1727eea8c121c234b
2022-03-05 17:03:35 +00:00
Ammarpad 5d3a547c8b Restrict ?withgadget query parameter to opt-in gadgets.
?withgadget query parameters allows for ad-hoc loading of gadgets
(after passing all other basic checks). This was recently added in
I5b30d4e.

In T29766#7611796 Gergo raised concerns about how this can be
potentially abused.

This patch aims to restrict the feature by giving gadgets latitude
to either use it or not depending on the nature of the gadget.

The patch does so by adding `supportsUrlLoad` option that gadgets
(maybe those deemed safe) can use it to opt-in to the parameter.
By default gadgets don't support it, so it can be enabled for each
on a case-by-case basis.

Bug: T29766
Change-Id: Ie64174085e650579d76cc862774a4fe1b3d08396
2022-01-24 00:31:19 +00:00
Gergő Tisza 6b74e170c0
Add edit link to gadget definition in Special:Gadgets
When using the Gadget definition: namespace, link to the definition
pages from Special:Gadgets. Also change the wording of the links
to edit the names of the gadgets, to disambiguate them.

Change-Id: I327a4cfa9846edec60e1aaafc674cd66f4e0beae
2021-12-31 20:42:37 -08:00
Siddharth VP 7ead5dab61 Allow specifying page actions in definitions
Allow specifying page actions ('view', 'edit', 'history', etc) in
gadget definitions. If specified, the gadget is run only on the given
page action(s).

This is especially useful for default gadgets like RefToolbar[1] and
TextReactions[2] that only need to be loaded while editing.

[1]: https://en.wikipedia.org/wiki/WP:RefToolbar
[2]: https://en.wikipedia.org/wiki/WP:Text_reactions

Bug: T204201
Bug: T63007
Change-Id: Idde71b3f1f6c36cd21539a2312be8f12217a9acc
2022-01-01 00:41:08 +05:30
Siddharth VP 1f7b9d90df Support JSON files in gadgets
The parsed content of JSON files in the gadget is made available from the
gadget's JS files via require(). That is, MediaWiki:Gadget-data.json (or
Gadget:data.json) is available as `require('./data.json')`. This is
supported for both MediaWikiGadgetsDefinitionRepo and
GadgetDefinitionNamespaceRepo. The JSON parsing is done server-side.

JSON can only be used in "package" gadgets - in which the JS files can
also be invoked via require().

Also added a test for GadgetResourceLoaderModule.

Bug: T198758
Depends-On: Ib4556d09c4d393269e32771aab00f59a5f630e1b
Depends-On: Id4589a597ccfc4266b3e63d10f75b146aa7a287a
Change-Id: I21acb46cdd244a39b5cc6963aa763f0113bd1e38
2021-12-27 17:33:21 +00:00
zoranzoki21 a66f0f7baa Fix MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate
In ApiQueryGadgetCategories.php for function getList() I've added inline comment for ignoring this rule, because is unclear why it throws this error.

Change-Id: I74c4a6c75f48b8f7a237396666db3b37993c300d
2020-10-12 15:26:23 +00:00
zoranzoki21 bc5b58d736 Fix MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected
Change-Id: I26209fd4fd44917733e2b34e34dea31ec0d95341
2020-10-12 11:10:15 +02:00
Ammar Abdulhamid 146545919d Remove usage of Skin::getSkinNames()
Bug: T257993
Change-Id: Icc945ce1e3287a3b25152702818e5b2a90232677
2020-08-26 07:54:17 +01:00
DannyS712 bbdc32d8d6 Add help links to special pages
Bug: T228071
Change-Id: I1bfa452ed21db5f6edc8971390b407e57e7e015d
2019-07-18 01:35:23 +00:00
Thiemo Kreuz 62f3d828b8 Update some generic/unspecific PHPDoc type hints
Change-Id: I30ad46cc9d503b4403dd2e0ab263d0db2039a8e3
2019-06-04 17:33:17 +02:00
Max Semenik 963f3c1525 Don't use deprecated Sanitizer::escapeId()
Change-Id: Ia92e685d33e377669b034b02819e183efe77e4f2
2019-02-22 12:26:17 -08:00
Timo Tijhof 848775d925 SpecialGadgets: Restore line breaks between actions and uses
Follows-up f3da602. I accidentally removed the first of the
line breaks.

Bug: T204616
Change-Id: I53b43acb5c0d43443b2f62bd335fc013d2e23539
2018-09-26 03:46:10 +01:00
Timo Tijhof f3da602058 SpecialGadgets: Omit blank space due to <br> between <ul> and <p>
Due to some of the portions of the gadget list items being optional
it's not consistent whether or not they should be separated by
a line break.

When two pieces of text follow each other, there should be a line
break in-between.

When a piece of text is output afte a list, however, there is no
need for a line break as anything after a list would already
become its own line. Printing one anyway causes a blank space
to show up, which visually causes it to appear related to the
next gadget.

Fix by setting a boolean after each portion to indicate whether
or not it should be followed by a line break.

Also improve the code a bit with comments and use Html instead
of Xml.

Bug: T204616
Change-Id: If65e170746898999dd8f5351004eeaf49b340ab2
2018-09-17 23:33:35 +01:00
Timo Tijhof e369419bdd SpecialGadgets: List right names instead of descriptions
The lengthy and localised descriptions make it hard to scan and
identify the actual rights themselves. They are meant as descriptions
to explain what a right is, not to identify the right itself.

It should probably be more similar to the list of checkboxes
on Special:UserRights. For now, kept the descriptions as tooltips,
but could also remove them entirely.

Change-Id: I29f68ffd5a8d002b65384f3762fb9e5631c13def
2018-09-17 23:17:44 +01:00
Fomafix b6e7bcf015 Use ContentLanguage service instead of global $wgContLang
This change raises MediaWiki version requirement to 1.32.

Change-Id: Ieffed829bf5a8e1f138fd5f63518e415cebb1287
Depends-On: I193f5b9a95430b0a05573c361715e053e5411e32
2018-08-05 00:52:53 +02:00
Fomafix 98ac345756 Use $lang->equals() to compare Language objects
Change-Id: Iae691c2b1e4f34bb0f509a109333277ade900659
2018-07-30 20:01:18 +02:00
Jayprakash12345 54d1eb0d77 Convert Special:Gadgets/export/$par to use OOUI
Bug: T191822
Change-Id: Ia59918a1a7f10d56a5c32050591a537d90c6de7c
2018-04-09 23:20:17 +05:30
Kunal Mehta bb81950e9f Use SPDX license identifiers for @license
Change-Id: I7eaf1d7bd11642f40a59505c1586fb393bf35283
2018-04-07 08:42:12 +00:00
Kunal Mehta e99e181303 Add phan configuration
Depends-On: I09a0c0a786b687997e61344847f8af08b20cebf2
Change-Id: I9500232fb524e884d6cb15f2bdda10835df35ad4
2018-02-26 12:57:40 -08:00
Kunal Mehta 677d4e932c Move classes into includes/
Change-Id: I10bc5234ad2ebeed2514aafc3dbe2a0afa983bd8
2018-02-25 11:19:23 +00:00
Renamed from SpecialGadgets.php (Browse further)