Commit graph

23 commits

Author SHA1 Message Date
Alexander Vorwerk
9b09bf3112 Use updated ObjectFactory namespace
Depends-On: I99c5e5664d2401c36a9890f148eba7c25e6e8324
Depends-On: I48ab818b2965da14af15ef370aa83ad9455badd9
Depends-On: I018371e4b77911e56152ca7b2df734afc73f58a5
Change-Id: I04ebdb52102f6191d49a9cc70b1f98308299e72f
2022-03-09 23:04:51 +00:00
Timo Tijhof
cd7ef12c4c skins: Fix non-replacing skippable state bug in SkinFactory
As found via the test added with I3609cc71de48d3f5, which fails
without this change, and is enabled now in this patch.

Change-Id: Ie536644084b8a8b5386eb013cfd54621cfabc52d
2022-03-01 20:00:42 +00:00
Timo Tijhof
0cc93dfc24 skins: Increase SkinFactory test coverage, improve various class docs
* Skin constructor docs were unreadable on doc.wm.o and in other
  places and IDEs that display docs due to lack of formatting (line
  are just whitespace in Markdown, same as HTML).

* Make some of the method briefs (first line separated by new line)
  more useful, especially where this brief was missing and thus
  rendered unhelpful text like "Returns array of:" with no more.

* Misc grammar and typo fixes, consistent phrasing, and other minor
  points from code conventions. Changed a few "fetch" to "get" in
  trivial methods.

* Found a bug in SkinFactory::register() regarding skipskin handling,
  will fix in follow-up.

* Found a bug in Skin::buildSidebar() regarding insufficient cache
  fragmentation. Will fix in a follow-up.

Change-Id: I3609cc71de48d3f5c8404ea834d42c0cec5cba59
2022-02-28 14:15:09 +00:00
jdlrobson
576006858d SkinFactory: Allow skins to be registered as "skippable"
The existing method of hardcoding ApiOutput and Fallback is not
great, and there is a use case inside Vector as we split
Vector skin into two as well as inside ContentTranslation.

This adds to the existing wgSkipSkins configuration by allowing
skins to register themselves as skippable without a LocalSettings
change.

Bug: T291193
Change-Id: I9caa8deb5b58fa1ef1eb548db497ef095cbbd154
2021-10-04 23:32:59 +01:00
jenkins-bot
e532630b11 Merge "mediawiki.util: Update addPortletLink to support 'text-wrapper' option" 2021-09-23 22:47:39 +00:00
bwang
d4d7635979 mediawiki.util: Update addPortletLink to support 'text-wrapper' option
- Add Skin::getOptions and Skin::getPortletLinkOptions, which are used
  to provide skin options to mw.util.
- Add SkinFactory::getSkinOptions, which is used by
  Skin::getPortletLinkOptions.

Depends-On: Ib23360e3439abc828404c1de8e0906915ee7d8b6
Bug: T289163
Change-Id: I801e7d583cb0b0c7da51f4da503268be736bb60c
2021-09-23 19:03:36 +01:00
Ammarpad
1cf4eab3ab ApiParse: Support hidden skins
Since $wgSkipSkins is meant to only 'remove skin from preferences',
it should not affect parsing with them.

So these skins need to be allowed here.

To achive this, this patch adds getInstalledSkins() method to SkinFactory
to provide the complete. The method supersedes getSkinNames() which does
the same thing but with ambiguous name.

Description of getAllowedSkins() has been corrected as it was slightly incorrect.

Bug: T237856
Change-Id: I0889b823d27f1a2830cc0205f5a21ed4de744e08
2021-09-20 09:29:24 +01:00
Thiemo Kreuz
6805f39a30 Remove unused default values from class properties
In all these cases the property is unconditionally set in
the constructor. The extra initialisation is effectively
dead code and an extra source of errors and confusion.

Change-Id: Icae13390d5ca5c14e2754f3be4eb956dd7f54ac4
2021-05-12 13:44:28 +02:00
Ammar Abdulhamid
5dafaf9028 Remove usages of Skin::getAllowedSkins.
* Move the method to SkinFactory and replaces usages.
* Inject $wgSkipSkins into the SkinFactory

Bug: T257993
Change-Id: I9869cf34c5e87cbad963f48db0649b3b7a252a4a
2020-08-05 02:48:29 +01:00
jdlrobson
26d5f78f84 skins: Port SkinFallback and SkinApiOutput to a generic SkinMustache class
The new SkinMustache class is based on the emerging class in Vector.
Having this in core, will allow Vector to make use of this class
immediately and provide a minimal generic mechanism going forward
for rendering skins using Mustache. For now, I've fleshed out the minimum
possible data in getTemplateData which are based on existing functions in
Vector.

The Skin class now takes a generic options parameter which allows
registration of a skin using the SkinMustache class with a templateDirectory
option pointing to the associated template. A `styles` option can be passed
to define stylesheets that should be associated with the skin.

The SkinApi and SkinFallback classes are reduced significantly.

There are no known uses of SkinApiTemplate and it is thus removed.

SkinFallbackTemplate is removed and its functions copied across to
SkinFallback

End user changes:
* The fallback skin no longer prints the confusing warning message if the default
  skin is setup incorrectly. Previously viewing the fallback skin with useskin
  indicated that wgDefaultSkin was not set correctly which was misleading and confusing.
* Factory functions now receive skin options as a second parameter and the service as a
  first - this is due to how ObjectFactory handles the extraArgs key for 'factory' key
  - placing it at the beginning.

Bug: T254048
Change-Id: Ibbabd1d0f26efebf8f8ff068966685dc2191c527
2020-06-15 10:51:31 -07:00
Timo Tijhof
5d8f62bdd3 ExtensionRegistry: Remove exporting and caching of wgExtensionCredits
This data is the same as the 'credits' data that is already compiled,
cached and made available via ExtensionRegistry.

Similar to various other configuration variables previously, the
$wgExtensionCredits variable is now also required to only be used
for providing input to the system (e.g. from LocalSettings.php,
or from legacy extension PHP entry points). It is no longer
supported to use this variable to reliably read out a full view
of all extension credits (specifically those registered via
extension.json).

Doing so had the downside of adding processing cost to every
web request, as well as taking one the single largest portion
of the ExtensionRegistry APCu cache key, which in PHP7+ incurs
a linear cost for every string value, string key, of every
(sub)array in this huge structure; and does to on every request
just in case something reads from $wgExtensionCredits.

The new method to access this information reliably is owned
by SpecialVersion for now (could be moved elsewhere). This
also makes the merging logic more testable and incurs it on-demand
rather than upfront.

Details:

* Move 'type' internally from NOT_ATTRIBS to CREDIT_ATTRIBS.
  These two arrays behave identically for most purposes (they are
  both used to mean "don't export this as a global attribute").

  By placing it in CREDIT_ATTRIBS it becomes complete and makes
  it easy to refer to in docs. Previously, extractCredits()
  read the 'type' key outside the loop for CREDIT_ATTRIBS.

* Remove redundant code in ApiBase.php, that is now more obviously
  redundant. Looks like a left-over or merge conflict mistake
  from when ExtensionRegistry was first introduced.

Bug: T187154
Change-Id: I6d66c58fbe57c530f9a43cae504b0d6aa4ffcd0d
2020-05-28 18:46:41 +00:00
mainframe98
2619b261bb Support the creation of Skins with services injected
The old way of providing a callable to SkinFactory::register is
still supported. Those callables expected the skin name as their
first argument. Coincidentally, so does the constructor of Skin.
Some skins might not define any constructor parameters at all,
which is acceptable to PHP, as it will just discard the argument.

The registration using $wgValidSkinNames has not been changed,
and skins that want to define services to be injected will still
need to manually register their skin to the skin factory.

CodeSearch did not indicate any extensions or skins manually
constructing a SkinFactory in tests, but for posterity, the old
way of creating a SkinFactory for testing can be replaced with
  new SkinFactory( new ObjectFactory(
  	$this->createMock( ContainerInterface::class )
  ) );

Note that the constructor for SkinFactory for internal use only,
in accordance with the Stable interface policy.
You should use MediaWikiServices::getInstance()->getSkinFactory
instead.

Bug: T244466
Change-Id: I8ba9d869bddd9b6124e47697b789d752c0620b02
2020-03-16 23:25:42 +00:00
James D. Forrester
d5cf7a4961 SkinFactory: Drop getDefaultInstance(), deprecated in 1.27
Change-Id: I40313382c77a1521b80b70a55778db5da1a8a866
2019-06-24 14:12:33 -07:00
Kunal Mehta
d061c27f45 Hard-deprecate SkinFactory::getDefaultInstance()
Was soft-deprecated in 1.27.

Change-Id: I5f4afefc6c439c7e8d173a844c76ccd693f9bbf1
2019-06-03 21:03:02 +00:00
addshore
fe87b6575a Add getSkinFactory to MediaWikiServices
Change-Id: Ife79aca542e0e85405976de7be7acebfa3359569
2016-04-27 11:18:56 +01:00
Bartosz Dziewoński
667522795b Fix trivial PHPCS violations in */skins/* directories
Due to T127238, files in various */skins/* directories are not checked
by PHPCS. Temporarily removed the exclude rule from phpcs.xml and ran:

  composer fix includes/skins/* tests/phpunit/includes/skins/* tests/phpunit/skins/*

Change-Id: I9240c1cee825920b6634903282be6252cce55686
2016-03-02 21:02:15 +01:00
Bartosz Dziewoński
5b11fa4146 Completely remove skin autodiscovery
Also update documentation.

Bug: 65748
Change-Id: I393896281e901de2000c09c0abd16ee2a0f41e2f
2014-09-19 19:12:56 -07:00
umherirrender
63dc5abc9a Fixed spacing
- Added space after reserved words: function, foreach, if
- Combined 'else if' into elseif
- Added braces to one-line statements
- Added spaces after comma, before parentheses

Change-Id: Ie5bbf680d6fbe0f0872dab2700c16b1394906a72
2014-08-27 18:31:50 +02:00
umherirrender
cd80906d4a Change @return to start with type
MediaWiki default is "@return type Description", so set a type after
return and start the description with a capital letter. Also use the
more common spelling of boolean.

See http://phpdoc.org/docs/latest/references/phpdoc/tags/return.html for
more about @return

Change-Id: I4e5198822fe92836f9cef9918a9fc1a1a1e0a043
2014-08-20 20:35:41 +02:00
Daniel Friesen
9f75d9c63c Fix documentation.
It's true that right now the internal skin name doesn't have to be all-lowercase,
however not doing so leads to side effects such as the changing of case of i18n message keys,
if the documentation makes programmers aware that something other than all-lowercase can
be used, they should also be aware of the side effects of doing so.

Change-Id: Ib1ed192b1ba83ae864313c34b450a1151485750b
2014-08-13 12:36:28 -07:00
Bartosz Dziewoński
0300b5af49 SkinFactory: Improve documentation and comments
* Document parameters to register()
* Document what the "human-readable name" does
* Document the distinction between autodiscovery and $wgValidSkinNames
  skins

Change-Id: Iee5bd18b3e68f3e48ccd28e386109e60fee31085
2014-08-13 13:55:55 +02:00
Kunal Mehta
1154e1848f SkinFactory: register skins in Setup.php
This un-makes $wgValidSkinNames a legacy thing, and is
more backwards-compatible friendly.

Change-Id: I5c442f3c9e4ee7a4a3980fd02138ee756ef9fa7a
2014-08-13 13:43:09 +02:00
Kunal Mehta
eb37e9d1ff Introduce SkinFactory
Modeled similar to ConfigFactory, this lets skins
register themselves via a callback, allowing for
proper dependency injection.

Loading via $wgValidSkinNames is still supported,
but considered "legacy", not deprecated though.

Skin::newFromKey is now deprecated (and had only
one caller in an extension, which I'll update
afterwards).

Change-Id: I1960483f87c2ef55c994545239b728fa376f17f4
2014-08-09 21:40:54 +01:00