Commit graph

734 commits

Author SHA1 Message Date
Timo Tijhof
98911418c2 CSSMin: Remove file-existance filter in getLocalFileReferences()
Follows-up 8f5cd11d82.

The old getLocalFileReferences() method is no longer used anywhere.
Remove it and rename getAllLocalFileReferences back to it.

Change-Id: I864258aad128ba9b54464c7bc854543f2937f977
2016-03-03 00:16:13 +00:00
Timo Tijhof
570cff1168 resourceloader: Don't cache CSSMin::remap() calls
The output of this function is not deterministic. This function
is what tranforms urls to include content hashes and also embeds
content as data URI. The calls to this function are expected to be
up to date and matching the version hash as constructed by the
current web request.

Previously, the content hash as constructed based on the collective
file hash of all references images was accurate but the generated
css associated with it could be stale.

Unless we abuse MemoizedCallable to take a separate cache buster
(with $localFileRefs?), it's best to remove this as it isn't
a deterministic function and shouldn't be memoized.

Bug: T128668
Change-Id: Icb87ddc585d7320ac48619446bb8b9cbe5f4780e
2016-03-03 00:10:14 +00:00
Bryan Davis
77e51f50e7 resourceloader: Remove $wgUser optimization that uses session
Remove optimization that avoids unstubbing $wgUser because $wgUser
is not a plain object for the current user name.

It's a stub with mFrom='session' until methods are called that need
the info, such as getName(), which then lazy loads the object based on
the session information.

We want to make load.php session-less.

Bug: T127233
Change-Id: Ica482e5d1892cb29456e6f2a91cd70017cf414c5
2016-02-23 19:45:26 +00:00
Timo Tijhof
792054a2a4 resourceloader: Add content hash to static debug urls
This way, they automatically bypass any stale client or server cache.

Remove an old wfExpandUrl() call that would interfere with
transformResourcePath()'s ability to recognise the path.

Expanding the url there wasn't needed anyway. Whether it's on a separate host
(eg. bits.wikimedia.org), or path-absolute, either way works as-is.

Bug: T90983
Change-Id: I64eb3291adcfc3733ef96690399c09c06e19b3aa
2016-02-20 22:40:44 +00:00
Kunal Mehta
b9668d6d80 build: Update mediawiki-codesniffer to 0.6.0, add "composer fix"
* Fix errors spotted by new release
* Introduce "composer fix", which uses phpcbf to automatically fix some
errors spotted by phpcs.
* Drop $PHPCS_ARGS variable that didn't work on Windows, and add -s flag
* Remove rules from phpcs.xml that are now in MW-CS ruleset.

Change-Id: I13e2155695918c918b67497ac65b85a03897095e
2016-02-17 02:54:42 -08:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
Bartosz Dziewoński
eeebe6db6e mw.ForeignStructuredUpload.BookletLayout: Remove A/B test code
We don't want it to accidentally end up in MediaWiki 1.27 release.
It can be restored again when needed.

This reverts commit d0e47d475c.

Bug: T120867
Change-Id: Ie1a90ad2d2ccdecf189313e18c3c5b24576363f4
2016-02-11 05:03:35 +00:00
Ricordisamoa
f9b4a217e9 resourceloader: Remove obsolete '$that = $this' closure pattern
Closures support $this as of PHP 5.4.

Change-Id: Ib00be459490569036604afff53bd99fe247737df
2016-02-10 18:17:47 +00:00
jenkins-bot
480ab87dbc Merge "resourceloader: Reduce module_deps write slams after deployments" 2016-02-09 22:50:26 +00:00
Timo Tijhof
419db58c8b Centralise url handling for urls to static resources
Keep in CSSMin as-is for back-compat and to ensure library remains
independent of MediaWiki.

Moved down a few lines as there is no need to compute the md5 hash when we're
returning a data URI. Previously md5_file was called twice during module builds
(once for the fallback url, and another time when producing the embedded data uri).

Applied to logo in SkinModule as example. To be applied elsewhere as needed.
Without it, fallback is current behaviour (no cache invalidation).

Bug: T99096
Change-Id: I7f38bfc1bea5c241bc4f8ec4f4b640fd65f2c04f
2016-02-02 23:26:16 +00:00
Aaron Schulz
1d15085bb3 resourceloader: Reduce module_deps write slams after deployments
Bug: T124649
Change-Id: I8d45e538f7d3d098a89950e5777e0984c90d7e51
2016-02-02 11:37:37 -08:00
Bartosz Dziewoński
6c50ba80c3 ResourceLoaderImage: Use DomDocument::loadXml rather than DomDocument::load
Some users are reporting that DomDocument::load can't read the files
on their setups, while they can be read with file_get_contents. So use
that and pass the string to DomDocument::loadXml. The advantage of
DomDocument::load is supposed to be in handling large files, and the
icons here are supposed to be small.

Bug: T107198
Change-Id: I8e4dc4642f9d0c5f01ec5e4061e83bf09d0a4900
2016-01-31 22:26:37 +00:00
Aaron Schulz
1a27995553 Cleanup setFileDependencies() docs
Change-Id: If7973bbfd2aaede1b2f5cc0df3f416bc9b8c77c6
2016-01-27 12:37:44 -08:00
Timo Tijhof
0c8101570c resourceloader: Simplify and clean up RLQ wrap
startup.js:
* Don't assign to "window.RLQ" and read from "RLQ". Use the same
  identifier in both places instead of relying on global scope.
* Create the global window.RLQ only once. The temporary [] fallback
  doesn't need to be exposed globally, so use a local variable for
  the loop that processes the pre-existing queue built up while
  the startup module was loading.

OutputPage:
* Simplify the RLQ wrap to be more idiomatic and less repetitive.
  Matches the pattern used in Google and Facebook open-source projects.

Change-Id: I9176377bc05432e51add841696a356428feec8ce
2016-01-27 02:03:00 +00:00
jdlrobson
4d0a36f333 resourceloader: Change getLessCompiler() to not be static
Cache Less variables in the instance instead of statically.

This allows tests to populate their own less variabless via ResourceLoaderLESSVars.

Make getLessCompiler() and getLessVars() regular public methods and
update callers.

Change-Id: I95506b8bb20a4b2b3f82014a7b0fcee5f28973e6
2016-01-14 18:44:32 -08:00
umherirrender
54c1e18eec Remove various double empty newlines
The double empty newline is not needed between functions, variable or at
end of file

Change-Id: Ib866a95084c4601ac150a2b402cfa184ebc18afa
2015-12-27 18:55:12 +00:00
Timo Tijhof
eddbcab08a UserCSSPrefsModule: Remove redundant inline text-decoration:none css rules
By default user option 'underline' is '2' which means no skin override.

Once a upon a time, none of the popular MediaWiki skins specified whether links should have
underlines, and most browsers default to having an underline on links (when not hovering).

As such, there was an exception added for languages where underlines cause text to be unreadable.

Nowadays however all modern skins explicitly specify the intended design for links.
Neither the default skin (Vector) nor other popular skins I checked have underlines by default.
As such, this rule is redundant.

If a skin comes along that does specify underlines by default, then these rules should be placed
in that skins' stylesheet. Not in the HTML of all pages.

Incidentally, this was the last code branch in ResourceLoaderUserCSSPrefsModule that is true by
default. Which means from now on this <style> tag is automatically omitted from the HTML for
logged-out users and users that haven't changed the 'underline' or 'editfont' preference.

Implement the missing isKnownEmpty() method so that OutputPage does the automatic omission.

To test the new text-decoration rule in mediawiki.skinning:
* Change user preference language to "ar" and observe anchor links in the interface
  not having underlines on-hover.
* Change $wgLanguageCode to "ar" and observe anchor links in the content not having
  underlines on-hover.

History:
* 2011 (043f98a3; r101445) Move overrides from shared.css to ResourceLoaderUserOptionsModule
                           Also remove "!important" from underline css
* 2011 (33293c9b; r96261) Apply "!important" to underline user option css
* 2011 (81446abc; r91432; T31712) Move overrides from MessageXX.php to skins/common/shared.css
* 2006 (43b2fb56; r15823) Move overrides from LanguageXX.php to MessageX.php
* 2004 (f9f3e915) Add override to LanguageAr.php

Bug: T105313
Change-Id: I94dda30fb80b30e9c12a74a8b09065da55681929
2015-12-22 15:00:40 -08:00
jenkins-bot
d047153bc2 Merge "mw.ForeignStructuredUpload.BookletLayout: A/B test of 4 different interfaces" 2015-12-15 15:14:17 +00:00
Bartosz Dziewoński
d0e47d475c mw.ForeignStructuredUpload.BookletLayout: A/B test of 4 different interfaces
It turns out that people click the checkbox affirming that they are
they author of the file and that they release it under CC BY-SA even
when neither of those is true. So we're trying some interfaces that
require a modicum of thought rather than just a click on "I agree".

  Option 1: The form we have right now, with a single checkbox.

  Option 2: Four checkboxes, each with a label explaining one facet of
    the requirements (own work; no pictures of copyrighted work;
    educational/useful; irrevocably released as CC BY-SA).

  Option 3: Some Yes/No questions structured so that 'Yes' is not
    always the right answer to continue uploading.

  Option 4: Longer introduction before a single checkbox (as in option
    1), with examples of good and unacceptable content.

As only logged in users are able to upload files, we're able to bucket
them into four groups by user ID number. When the user completes a
file upload, the bucket number is saved server-side in a change tag by
the companion patch I90cb12c505b2581f36113ec6b4f7bf732f0971b7 (we could
match the user IDs cross-wiki by username, but that sounds painful).

For testing and debugging, add '?uploadbucket=N' to the URL to force
given interface option to appear. Any completed upload won't count
towards the bucket.

Note that for expediency, the tested options all assume uploads to
'shared' repository (that is, Wikimedia Commons). The winner's
messages will be tweaked to work with 'local' and other targets too.

This patch DOES NOT ENABLE THE TEST yet, it just implements the options.
Enabling it on specific wikis can be done via config:
* $wgForeignUploadTestEnabled = true/false (defaults to 'false')
  Whether the test is running.
* $wgForeignUploadTestDefault = 1/2/3/4 (defaults to '1')
  Interface to use when the test is not running (and for anons).

Bug: T120867
Bug: T121021
Change-Id: I557056b867c6a55ef2c9af321eb48893312632a3
2015-12-15 00:23:14 +00:00
Roan Kattouw
2a428a1755 Follow-up 23cfe1bba: harmonize image embedding CSS
23cfe1bba changed ResourceLoaderImageModule::getCssDeclarations(),
but contrary to the documentation did not synchronize it with
mediawiki.mixins.less. This commit does that.

This commit brings the -o-linear-gradient rule back (this time with
a comment that explains why it's there), and removes the
-webkit-linear-gradient rules from mediawiki.mixins.less
and CSS code that copypasted it.

Change-Id: Ia7e9738d90919248748e6968192bf02e420cddd0
2015-12-14 16:00:49 -08:00
jenkins-bot
1d489846c1 Merge "Fix various mistakes in PHPDoc comments" 2015-12-09 18:13:19 +00:00
Thiemo Mättig
53c5a52970 Fix various mistakes in PHPDoc comments
Change-Id: I434207f61e0663f2d2c9a076296c2e0d04a3fafb
2015-12-09 18:20:41 +01:00
Timo Tijhof
5d5b269e0e resourceloader: Migrate from msg_resource table to object cache
MessageBlobStore class:
* Make logger aware.
* Log an error if json encoding fails.
* Stop using the DB table. WANObjectCache supports everything we need:
  - Batch retrieval.
  - Invalidate keys with wildcard selects or cascading check keys.
* Update tests slightly since the actual update now happens on-demand as
  part of get() instead of within updateMessage().

ResourceLoader class:
* Remove all interaction with the msg_resource table. Remove db table later.
* Refactor code to use a hash of the blob instead of a timestamp.
  Timestamps are unreliable and roll over too frequently for message blob store
  because there is no authoritative source. The timestamps were inferred based on
  when a change is observed. Message overrides from the local wiki have an
  explicit update event when the page is edited. All other messages, such as
  from MediaWiki core and extensions using LocalisationCache, have a single
  timestamp for all messages which rolls over every time the cache is rebuilt.
  A hash is deterministic, and won't cause needless invalidation (T102578).
* Remove redundant pre-fetching in makeModuleResponse().
  This is already done by preloadModuleInfo() in respond().
* Don't bother storing and retreiving empty "{}" objects.
  Instead, detect whether a module's message list is empty at runtime.

ResourceLoaderModule class:
* Make logger aware.
* Log if a module's message blob was not preloaded.

cleanupRemovedModules:
* Now that blobs have a TTL, there's no need to prune old entries.

Bug: T113092
Bug: T92357
Change-Id: Id8c26f41a82597e34013f95294cdc3971a4f52ae
2015-12-08 14:02:38 +00:00
Timo Tijhof
45bb13d5a0 resourceloader: Log warning if module produces an invalid version hash
* Add logger to ResourceLoaderContext for convenient use within modules.
* Group related members within ResourceLoaderContext.

Change-Id: Ifbc3de1b6e0838386735f1573df328d9b331ac37
2015-12-07 16:12:03 +00:00
jenkins-bot
926369bc6f Merge "resourceloader: Remove redundant back-compat in mw.loader.addSource()" 2015-11-24 18:47:48 +00:00
Timo Tijhof
13d9c4582f resourceloader: Remove redundant back-compat in mw.loader.addSource()
Follows-up e103ba265b.

This method doesn't need to be backward-compatible as this is already
normalised server-side.

When upgrading from before MediaWiki 1.24 the startup response will
change to the new format and also inline a request to the newer
version of mediawiki.js.

Also update method documentation to be up to date and remove
spurious return statements that aren't used.

Change-Id: I03d1b5666fcddedaa46ecf878ee7636042a5e3be
2015-11-20 01:19:45 +00:00
Timo Tijhof
298cf413db mediawiki.api: Use action=query&meta=tokens instead of action=tokens
Follows-up aacdb664a1, which was reverted.

API action=query&meta=tokens has different token types than the old
action=tokens values. Use a map to maintain support in the JavaScript API for
old token types that now fold into the generic 'csrf'.

Aside from core token types, those added by extensions are no longer
actively used from the old token API.

Bug: T72059
Change-Id: Iec3a9f0f51d64d90c81a147cc18097dcf679c7c9
2015-11-18 17:58:21 +00:00
Timo Tijhof
8c00d37f47 resourceloader: Include 'raw' in ResourceLoaderContext hash
This parameter was introduced last year as a way to extract
bare scripts from modules without any 'mw.loader.state()' suffix.

When ResourceFileCache is used ($wgUseFileCache) this causes
cache pollution as it didn't include getRaw() in the hash.

Change-Id: I7b9f9b6a5756777462395b911abafb62468cbefa
2015-11-17 21:48:03 +00:00
Timo Tijhof
764122c000 resourceloader: Reformat code around member grouping in ResourceLoaderContext
* No effective change. Only code reformatting.
* Logically group related members.
* Break up items one per line in getHash().

Change-Id: I8ccbe9d071a5c39f5c3d36d0d990574fb0ed8d72
2015-11-17 21:47:24 +00:00
Timo Tijhof
b632900f4d resourceloader: Omit getDirection() ResourceLoaderContext hash
The direction is derived from the language code, which is included
already. The method was added for convenience to consuming code,
but including it in the cache key seems pointless.

Main rationale here is runtime performance. getDirection() incurs
Language::factory() and Language::getDir() which require loading
of LCStore files.

Change-Id: I397a1c483203ec2c4903046c9494cae1c9480f8c
2015-11-17 21:38:33 +00:00
Timo Tijhof
f1c3e9d791 resourceloader: Use 'phpunit' instead of 'test' as default target in PHPUnit tests
Follows-up e9b9e4df7a, which started using target=test as reserved for
Special:JavaScriptTest. However that conflicted with this.

Without this change, the unit tests fail if the MediaWiki install has
$wgEnableJavaScriptTest enabled.

Change-Id: I471017e7aedb74dddb4dc18ee4e89c1706ff09b5
2015-11-17 03:59:02 +00:00
Ed Sanders
23cfe1bba6 Remove vendor prefix support for SVG embedding
Also remove the -o- prefix which uses 'fallback', as without
that rule it will use 'fallback' anyway.

Bug: T118815
Change-Id: I6a6e3b24b1cda55dfa9675743c39d21e792275c7
2015-11-17 02:40:05 +00:00
Timo Tijhof
70f8a31afe resourceloader: Remove use of msg_resource_links table
This table is not needed because module names and their messages
array are available to the runtime environment at very little cost.

The only purpose it was serving is reverse lookup from message
key to module name (e.g. when MessageCache receives update that
need to propagate to MessageBlobStore). However that is better
achieved by simply looping through modules in PHP. The overhead
of a database is not worth this minor convenience.

MessageBlobStore
* insertMessageBlob: Doesn't need to update msg_resource_links.
* updateModule: Doesn't need to update msg_resource_links.
* getUpdatesForMessage: Reimplement with list from memory
  instead of msg_resource_links.

The database table will be removed in If009e2620e59002e1.

Bug: T113092
Change-Id: Ia9131f570001f00c9800b260ac4b3469d54d2784
2015-11-09 19:16:38 +00:00
Aaron Schulz
4b6304e5c3 resourceloader: Use WAN cache for validateScriptFile cache
This keeps core callers more consistent.

Change-Id: I5e06a963a5e10204445a01c00109b46a6971bcfe
2015-11-04 01:09:11 +00:00
jenkins-bot
5ea952ab62 Merge "resourceloader: Sanitize lang with isValidBuiltInCode(), not isValidCode()" 2015-11-03 10:42:16 +00:00
jenkins-bot
5f15ac0058 Merge "Replace newAccelerator() with getLocalServerInstance()" 2015-11-02 22:04:21 +00:00
Aaron Schulz
17c91ad610 Replace newAccelerator() with getLocalServerInstance()
The name is clearer and more consistent, with simpler arguments.

Change-Id: I7205a99ce033e8b086a52cd02c8a721e99c84b1e
2015-11-02 21:39:08 +00:00
Ori Livneh
8a0cd2b043 Revert "Add MediaWiki-Timestamp header to ResourceLoader requests"
I have not had the time and wherewithal to write the follow-up code that
actually uses this value. So just remove it for now.
This reverts commit 3d5aca4a40.

Change-Id: Ice9b65f39802b55b3d4ddf801c06d1be3227fd5b
2015-11-02 13:36:18 -08:00
umherirrender
96473ea6e4 phpcs: Fix some "Assignment expression not allowed"
Found by new version of mediawiki/codesniffer
https://integration.wikimedia.org/ci/job/mediawiki-core-phpcs/1939/consoleFull

Change-Id: I673f71fd0dfc8d6ba1ce6c3d5da21787ff95cb32
2015-11-01 21:07:00 +01:00
Timo Tijhof
3b829b4385 resourceloader: Sanitize lang with isValidBuiltInCode(), not isValidCode()
Follows-up r96280 (368dbc5f5b), and r82927 (1e67922842).

Language::isValidCode() (used by index.php) allows a very wide range of values,
which inflates the msg_resource cache quite a bit (T102058). This is a first
step toward locking it down.

This change affects both handling of incoming load.php requests, and the
formatting of request urls by OutputPage. As such, OutputPage will no longer
forward invalid uselang values that are valid for index.php to load.php.

Change-Id: I27857ce5949bc616c7179f5f47b24aa2f6765f5f
2015-10-29 00:55:43 +00:00
Timo Tijhof
afcfc3290c resourceloader: Consistently refer to the framework as ResourceLoader
Change-Id: Ia59e4eac9662723e80d62f7cfcb9e4292e3ee4de
2015-10-28 03:24:40 +00:00
Timo Tijhof
a0809dfa5a resourceloader: Remove 'loaderScripts' option from FileModule
Not used in any of our public repositories.

Bug: T65240
Change-Id: I1e9f741c3ef0f922129ecd10039228b58565bf62
2015-10-28 02:53:16 +00:00
jenkins-bot
4aea21196e Merge "Follow-up to Ie3499d" 2015-10-27 09:47:21 +00:00
Ori Livneh
d3e3bcfd6d Follow-up to Ie3499d
My first pass at what became Ie3499d9f2 was to keep the exception for duplicate
registrations with conflicting parameters but downgrade to a warning if the
registration attempts are identically parametrized. I then removed the
exception entirely, but left the if-block, which does not make much sense, as
it means we pass over silently module registrations that set different
parameters, and throw a warning only when they are the same.

Change-Id: I13da33faf2f058ac75ef4b1615c4fafc18f14505
2015-10-27 00:44:47 -07:00
Timo Tijhof
9435cd81b0 resoureloader: Consolidate styles-only queue at the top
This effectively reverts d6b4d3c537 and declines T97420.
This was previously attempted in b7c0e537eb.

Drop support for position "bottom" for addModuleStyles().
This feature was only recently introduced with the intent
to optimise page load performance, but had an adverse effect.

It increases chances of FOUC due to late discovery of these styles.
It also caused minor problems for some gadgets and extensions
that did not or were unable to set these flags. Some mobile
code was introduced around the same time as this feature and
was never given position=top.

Stylesheets that don't affect initial render or are only needed
on interaction should be loaded via addModules() instead; which
is handled by the asynchronous loader in JavaScript.

Change-Id: Ib9821b7b87cfc8a59062bb6ca358974fdb01ced1
2015-10-27 03:39:34 +00:00
Ori Livneh
b1ea0612f8 resourceloader: Deduplicate module registration conflicts
If an attempt is made to register a ResourceLoader module which has already
been registered, instead of bailing with an error, issue a warning instead, and
allow the lattermost set of module parameters to stick.

Because modules are registered from extensions, and because modules are often
migrated from one extension to another as extensions are refactored, and
because the developers of different extensions are not always aware of each
other's work, throwing an error runs a high risk of causing an outage.

Bug: T116628
Change-Id: Ie3499d9f2ff3bf071f1c2b0176e19440ff55211c
2015-10-26 18:48:05 +00:00
Ori Livneh
32705d44cf resourceloader: Wrap another CSSMin::remap call in MemoizedCallable::call
Follows-up da3443bfa2.

Change-Id: Iabfe65b918ef5f8eb589bedd7a1e72b3ad9d2952
2015-10-20 21:05:37 +00:00
Ori Livneh
e2547a73c9 Update ResourceLoader for Ib7fc2f939b
Use BagOStuff::makeKey() and BagOStuff::makeGlobalKey() instead of
wfMemcKey() and wfGlobalCacheKey().

Change-Id: Id4e58c0e616b74de220faf13ba7c9ea606fef8c1
2015-10-19 17:28:09 -07:00
umherirrender
6f680f5dc6 Fix array index spacing in ResourceLoaderEditToolbarModule
Code style is not using spaces in array index

Follows Ic3eab71691e502bfe19bdf4eb6f82cc679a7782f

Change-Id: I0e20787c41d2edbc2899308647092ed6831d2489
2015-10-14 11:55:43 +02:00
jenkins-bot
0e1c391d97 Merge "Change 1.26 to 1.27, mostly in doc comments" 2015-10-10 17:01:23 +00:00