Commit Graph

94 Commits

Author SHA1 Message Date
Jon Robson
76e7805881 Don't load mediawiki.ui.button on page load (attempt 2)
The stylesheet is needed on legacy Vector but not modern
Vector 2022 meaning Vector 2022 loads two sets of styles
for buttons.

This is a short term fix until UniversalLanguageSelector can
use Codex.

Bug: T340255
Change-Id: Ie34949e31e93dcfcabc07fa418dec06022159ca7
2023-07-17 21:28:23 +00:00
Jdlrobson
d7d63236fd Revert "Don't load mediawiki.ui.button on page load"
This reverts commit 693087b886.

Reason for revert: This was a bug in my code. Sorry about that.

Change-Id: Ia3bb8d2b38e179a570f94bfd1d989bb51fab41e4
2023-07-17 20:24:38 +00:00
Jon Robson
693087b886 Don't load mediawiki.ui.button on page load
The stylesheet is needed on legacy Vector but not modern
Vector 2022 meaning Vector 2022 loads two sets of styles
for buttons.

This is a short term fix until UniversalLanguageSelector can
use Codex.

Bug: T340255
Change-Id: Ib4e228908d2813898654886bc1ee76e90dc52f22
2023-07-17 05:37:17 +00:00
Niklas Laxström
2a044e1e0a Small cleanups and typo fixes
Change-Id: I4faeb4673fd5e903d2931d6071262a893d4009f5
2021-04-21 11:48:15 +00:00
libraryupgrader
e2ab4bb1c3 build: Updating dependencies
composer:
* mediawiki/minus-x: 1.1.0 → 1.1.1

npm:
* eslint-config-wikimedia: 0.17.0 → 0.19.0
  The following rules are failing and were disabled:
  * compat/compat

Additional changes:
* Added the "composer phan" command to conveniently run phan.
* eslint: Renamed `wikimedia/client` profile to `client-es5` (T277085).

Change-Id: Ib31cbcd8c615d2e6abf9ee30f0f4d7b7baa54e2e
2021-04-07 11:10:07 +00:00
Niklas Laxström
dd8842517e Change ULS content language selector positioning
New Vector introduced a new content language selector trigger. This
code was hardcoding a behavior that works for compact language links
but is not so appropriate for other uses in the skin, which are out
of our control.

This patch aims to be a minimal change to allow other kinds of
behavior without changing the amount of tech debt. This changes
the default ULS dialog behavior to match the requirements shown
in the task. Compact language links specific behavior is retained but
only enabled for the compact language links trigger. The behavior
is chosen depending on the value of isUsingStandaloneLanguageButton().

For future changes, I propose that mw-interlanguage-selector class will
not have any styles attached to it. Whoever creates the trigger would
be in charge of styling it. Ideally that code would also define the
positioning and other behavior, but it is less clear how that can be
abstracted in a nice and decoupled way.

Bug: T276248
Change-Id: I52da6c2f5a1f25d64f322a3c8f6105da3b244b66
2021-03-16 22:36:18 +00:00
Niklas Laxström
95b1137a57 ext.uls.interface: clarify code
Changes to comments, naming and code to increase clarity of the code
and explain better what it does and why. No change in behavior.

Change-Id: I998fcfd620c2ee737618c3ab8f41fb6dfdd2c99a
2021-03-16 22:36:16 +00:00
Niklas Laxström
2172c8c1b2 CompactLinks: Update performance summary
Change-Id: I310fea3dbdd8cd232a0204ffd17e3a02c6723c8a
2021-02-11 08:00:48 +00:00
Niklas Laxström
8b6d8f6898 Remove CompactInterlanguageList.prototype.getInterlanguageList
Unused since e3569d32a7

Change-Id: I2a0f74972b8f566d6462fa261231dbafe9a66665
2021-02-11 07:51:26 +00:00
Niklas Laxström
b385d58aca Remove CompactInterlanguageList.prototype.getCommonLanguages
Unused since fcfa36ac77.

Change-Id: Ifae139d989fb6cb21fc3e19006306ed597d058e6
2021-02-10 14:39:25 +01:00
jdlrobson
64aeedfb17 Modern Vector should be compatible with ULS
Without the following changes the language button shows the
wrong label and opens a dialog with zero languages.

* Don't apply heading change to modern Vector
* Look for the element .mw-portlet-lang as well as #p-lang

Bug: T273232
Bug: T273928
Change-Id: Ic201b1983a17cc37fd1ff7c507aab656ea25f370
2021-02-09 18:07:11 +00:00
jdlrobson
ab6decae11 Allow skins to register their own button and disable compact
Example usage:
Iabd4688c6081b4de391b9655b92a16f3a414e018

We will skip loading the compact link if we don't need
to compact the languages.

Note special handling is known for Timeless which stops
propagation of events. This will be fixed in Timeless at a
later date.

Bug: T264824
Change-Id: I0518ecdf402ebf5eb6bad2c430f6462322c0d8e1
2020-11-18 17:06:40 +00:00
Amir Aharoni
077a3ac844 Make a more specific CSS selector in getLangsWithBadges
This should avoid problems with elements that are not real
interlanguage links, which may be added by other code,
for example user scripts.

Bug: T267887
Change-Id: I3f9c618b417363f667a31e9dad335c1aec15b055
2020-11-17 10:25:43 +02:00
jdlrobson
e3569d32a7 Separate compacting of language list from launching of dialog
This refactor will allow us to separate these two functions so that
the modernized version of Vector can avoid loading the compact
language list.

Changes:
* `options` is now optional to the CompactInterlanguageList constructor
The max value is already defined in
CompactInterlanguageList.prototype.init
* this.interlanguageList is now initialized inside the constructor
Previously calling CompactInterlanguageList.prototype.createSelector
or getCompactList before calling init would throw an exception.
This will be important in I0518ecdf402ebf5eb6bad2c430f6462322c0d8e1 when
the responsibilities of wiring up the button and compacting the languages
is separated.

Bug: T264824
Change-Id: I9606df30a050d0cdaf7add2deff849cd5b895bab
2020-11-05 08:44:06 +00:00
Ed Sanders
e128c51356 build: Update eslint-config-wikimedia to 0.16.2
Change-Id: Iea4b73bdceb66e113b7f9c9244ae6b37a3ce205f
2020-07-09 16:40:05 +01:00
Ed Sanders
c080452013 build: Update eslint-config-wikimedia to 0.11.0
Change-Id: Ic59891fab5f8e35420bddbed34072841883fa543
2019-03-13 23:41:14 +00:00
petarpetkovic
4dc988f6b9 Replace $.each usage in ext.uls.compactlinks with native JS
Change-Id: Icda997b910162b2c220e35ff360a70ade992b71b
2018-12-14 17:44:05 +01:00
Ed Sanders
7bf345669a build: Update linters
eslint-config-wikimedia      0.8.1  →   0.9.0
 stylelint-config-wikimedia   0.4.3  →   0.5.0

Change-Id: I0f55e743c2f38bb8910931c3989a6516e0527703
2018-12-10 14:24:24 +00:00
Niklas Laxström
dd390d2ec0 Do not precompute href or autonym in #getInterlanguageList
Only store reference to the element, where they can easily be read
when needed.

Also removed one unnecessary use of `self` as an alias.

Change-Id: I39fa897002037a6d6478a3fb1f40ac60833e392e
2018-10-11 13:07:25 +00:00
Niklas Laxström
5ed2ff7d8f Update some outdated comments
Change-Id: I73c7b0549d7335019a1919229afa2e45a92ffacd
2018-10-10 16:14:05 +00:00
Timo Tijhof
fcfa36ac77 compactlinks: Optimise performance of list creation logic
Add potential items directly to a single array with two indexOf
checks.

Previously, potential items were first put in a new temporary array,
then that array was filtered with indexOf checks into another temporary
array, and then the result of that combined with the previous results
into another temporary filtered array, and then the previous results
array replaced with the new one. This eliminates 2*2N filter+concat
calls an their overhead from calling functions, creating arrays,
copying arrays and the memory for those arrays. (Where N is the number
of language-list strategies). It also reduces the total number of
indexOf calls.

Below is a comparison of time spent in createCompactList() during
page load process, compared to master without this and the previous
commit. Measured on localhost with Vector, EventLogging, Interwiki,
and ULS installed; on a page that is a copy of en.wikipedia.org/Messier_87
and its 51 interlanguage links. This page was a featured article
last week. Its count of links seems average compared to other
featured and/or most-viewed articles last week (the other ones
I checked had 23, 43, 52, and 76 langlinks respectively).

|--------------|----------|--------|
|              | Before   | After  |
|--------------|----------|--------|
| Chrome 69    | 77.5ms   | 41.4ms |
| MacBook Pro  | 57.7ms   | 44.4ms |
| CPU 1/6th    | 63.8ms   | 45.3ms |
|--------------|----------|--------|
| Firefox 61   | 12ms     | 10ms   |
|              | 10ms     | 9ms    |
|              | 11ms     | 8ms    |
|--------------|----------|--------|
| Safari 11    | 3.5ms    | 2.7ms  |
|              | 3.3ms    | 2.6ms  |
|              | 3.4ms    | 2.8ms  |
|--------------|----------|--------|

Bug: T127328
Change-Id: I56052e7c01c6a667500773e12c755a7a5f5d9cd0
2018-09-24 17:19:45 +00:00
Timo Tijhof
effcd80471 compactlinks: Optimise performance of DOM logic
The createCompactList() function runs synchronously during the
module execution burst. Due to it visually changing the page, I
won't defer it with rIC for the time being, although that should
be considered for the future. For this commit, I'm trying to make
it fit the budget of <50ms because ULS is currently usually taking
80ms-180ms on desktop (MacBook/Chrome CPU/4), and that's during
batch execution with other modules as well, thus freezing the
UI thread for much longer than that.

constructor:
* Remove needless clone of jQuery object.
  Use $foo instead of $( $foo ).
* Remove creation of 'interlanguageList' and 'compactList' objects
  that are immediately removed and re-created by init().

init/getInterlanguageList:
* Use the HTMLElement.lang and HTMLAnchorElement.href properties
  directly instead of the DOM getAttribute().
  This means stores a full url instead of a relative url, which
  should help avoid other bugs in the future.
* Remove needless jQuery() constructor and jQuery.text() call.
  Use Node.textContent directly instead.
* Use HTMLElement#querySelectorAll instead of jQuery#find().

init/getCompactList/../filterByLangsInText:
* Avoid jQuery() constructor and jQuery.attr(),
  use the HTMLElement.lang property directly.
* Avoid jQuery() selector, call querySelectorAll directly.

init/getCompactList/../getCommonLanguages/../getFrequentLanguageList:
* Avoid temporary array copies from concat() and function overhead
  with forEach() and filter().
  Instead, keep only a single array, and iterate it once.

init/getCompactList/../filterByBadges (~10m -> ~0.5ms):
* Use one query via $(), instead of two queries $()+find().
* Use $.map() directly instead of map()+fakejQueryObject+toArray().
* Use querySelector(One) for the child instead of $()+find().
* Use HTMLElement.lang property directly.

init/hideOriginal (~5m -> ~0.8ms):
* Use querySelectorAll() directly instead of jQuery find().
* Set HTMLElement.style directly instead of jQuery() css().

init/render/addTrigger:
* Use createElement() and direct properties instead of $(), addClass(),
  prop() and text().
* The mw.msg() calls use text() and jqueryMsg#parser which is
  expensive.
  Use plain() for 'ext-uls-compact-link-info', which doesn't need parsing.
  Keep text() for the other message, and document why.

init/listen:
* Use async Deferred#then() instead of sometimes-sync Deferred#done().

Bug: T127328
Change-Id: I424c34fb82c8e95407f7b934e6d42019becbf909
2018-09-13 11:11:42 +00:00
Fomafix
971e4c742d Simplify by using native JavaScript instead of jQuery
Still use $.each for iterating over an Object because there is no
adequate function in ES5.

Change-Id: Idbec13c471e75a9cd5d67204d54bededdbd5582b
2018-09-07 22:35:13 +00:00
Timo Tijhof
4e067715dc Remove redundant closure aliases
'mw' are '$' are globals, always have been, and aren't going
anywhere. They're every bit as real as their longer versions.
If anything, the longer ones are less "real" or 'stable" because
they're not used internally by RL and easier to accidentally
replace or override. For anecdotes and history, see 91f950d6b0.

Change-Id: I526fb8c961d9477992d88f2780a0ff4cbdc51923
2018-09-07 19:23:17 +00:00
Amire80
635cada69b Revert "Simplify by using native JavaScript instead of jQuery"
This reverts commit 0fbdbc2c41.

Bug: T203750
Change-Id: I1bca27b2087f6fc1bfad153f17f4650c52786a7f
2018-09-07 08:57:16 +00:00
Fomafix
0fbdbc2c41 Simplify by using native JavaScript instead of jQuery
Change-Id: I2ca5fbb21ac473f482579a944e5ab68c9374191c
2018-09-04 00:32:12 +00:00
Fomafix
72fb42cdba Remove support for MediaWiki 1.29 and earlier
extension.json already requires "MediaWiki": ">= 1.30.0".

Change-Id: Ic460e6364967cd7b0367e66f613077c424bd8f19
2018-08-31 21:41:42 +00:00
petarpetkovic
5a1da4dbaa Remove jQuery.inArray usages
Replace jQuery.inArray with JS native Array.prototype.indexOf

Change-Id: I0031f0385e440a34846334d158425182542a9ac9
2018-08-24 20:18:53 +00:00
petarpetkovic
54a3313e1a Remove jQuery.grep usages
Replace jQuery.grep with native JS Array.prototype.filter method.

Change-Id: Idbf88a516061ff46211f72e8b93e11f5fa838e88
2018-08-24 20:43:33 +02:00
petarpetkovic
9c0c918bab Replace jQuery.proxy() with Function.prototype.bind()
Also, one immediate invocation of jQuery.proxy() is replaced by
Function.prototype.call()

Change-Id: Ibbdbe6413793c113d4de1c67cfcb7d95676565b2
2018-06-18 06:56:09 +00:00
Fomafix
162cc56f02 Reorder functions to avoid forward references
Remove /* eslint-disable no-use-before-define */.

Change-Id: I001b50050d8c492aed99a3620b6fc03ffb29e135
2018-06-11 23:44:47 +00:00
Amire80
04a8eeb62c Switch the current tab to the new language only if it was not Ctrl/Command/Shift-Click
Bug: T189582
Change-Id: Ib497be874b3d559a8f1715d09160378f0c43881e
2018-03-26 15:40:56 +00:00
Amire80
d6630a4780 Log the context of the ULS in which no search results were found
Relies on updates to EventLogging schema. Diff:
https://meta.wikimedia.org/w/index.php?title=Schema%3AUniversalLanguageSelector&type=revision&diff=17799034&oldid=7327441

Bug: T179402
Change-Id: I2ff9ce9b40df16ed3c5e6970fb3b691af08cedec
2018-03-08 16:03:33 +02:00
Niklas Laxström
9a6e8a2bc9 Fix custom no results again
Since we added .i18n() call to upstream, it started overwriting
our text from the default data-i18n. Change data-i18n instead.

Bug: T188860
Change-Id: Ib7e9fb9590ace9c2a4ce2e2afb5a740ae4346be6
2018-03-05 14:17:12 +01:00
Kunal Mehta
67d470a9e7 Use SPDX 3.0 license identifier
SPDX released version 3 of their license list (<https://spdx.org/licenses/>),
which changed the FSF licenses to explicitly end in -only or -or-later
instead of relying on an easy to miss + symbol.

Bug: T183858
Change-Id: Id75a37eab27282ca7797fa3e6ceb92750c59477f
2018-03-03 19:27:21 +00:00
Santhosh Thottingal
28c455feaf Custom no-results message for compact links search
Bug: T182539
Change-Id: I0e3bb7104015a5244290058dc0ac5b3c17b1ea20
2018-02-08 10:38:06 +05:30
Amire80
cc1dd9fe8c Show the same tooltips on compact language links
The tooltips include the title of the target article
and the name of the language in the user's language.

Bug: T160976
Change-Id: If3dd416e4a6f13b7b1366d30a1a3807a505346cb
2017-10-11 10:01:47 +03:00
Isarra
86c636fd0a Fix directionality of ULS CLL and languageselect callouts
when appearing on right side of screen

Languageselect was mostly fixed in 354378, but I forgot the
settings ones, so the triangle just disappears when
switching dialogs currently. This follows up on that and
properly fixes it.

Sidebar callouts now appear toward content regardless of
where they're appearing from, or the language
directionality. Triangles are now consistently alligned to
the top of the callout (same position in languageselect and
compact language links) to avoid issues with it appearing
over a scrollbar.

Sideways callout triangles (carets) are consolidated into a
single rendering approach and mixin across compact language
links and toolbox language selector.

Bug: T161586
Change-Id: I7717e26525ac527ede486796f49083ed40ee7d4f
2017-08-10 23:48:34 -04:00
Amire80
757d28b114 Show languages from the Babel box on the user page
Bug: T135371
Change-Id: Ieeaf446326be93a779df3e6bd7a8dca899950a6c
2017-05-30 17:25:23 +03:00
Amire80
dcd53534f6 Comment spelling correction
Change-Id: I247644c71f981d7d57304468cab31b4e3057bb81
2017-03-11 16:24:35 +02:00
Fomafix
47cfd9c1ae Replace $( document ).ready(...) by $(...)
In jQuery 3 $(document).ready(...) is deprecated.
https://jquery.com/upgrade-guide/3.0/#deprecated-document-ready-handlers-other-than-jquery-function

Change-Id: I1a9f578d8cf8fa2d9dd38a1b2d3a0b3c32914b74
2017-01-06 14:10:55 +01:00
Ed Sanders
811944c49a build: Replace jscs+jshint with eslint
Change-Id: I7f114267fbb4efd62a9162758445cff4fb3c0973
2016-11-09 15:57:38 +00:00
Amire80
4bd38a0fcf Query only for <a> elements that are interlanguage links targets
Depends on the core change in 1.28, which adds the
interlanguage-link-target class to the <a> elements:
I06c80945af785477be52096022c8493e7f82c298

Includes backwards compatibility code so that ULS compact links
would be usable on core versions that don't have this change.

Bug: T135378
Change-Id: I2909ce31e19087358d194e0e108e1ba038e7273e
Depends-On: I06c80945af785477be52096022c8493e7f82c298
2016-11-01 12:59:35 +00:00
Amire80
908161f0c1 Add hooks fired when finished processing compact language links
Bug: T145755
Change-Id: I921191c2cd32d55161b32bad2b2e0d98228cf230
2016-09-27 13:34:02 +00:00
Niklas Laxström
2144019c50 ext.uls.compactlinks: consistently normalize language codes
Create a function for this purpose and use it everywhere where
language code is read from an attribute.

Bug: T143867
Change-Id: I01b6f04dd9185a9f4ab565e96ca5a6a34e4ea14a
2016-08-25 08:22:17 +00:00
Amire80
0d1d9a4b6d Apply toLowerCase when reading featured articles
Consistently with getInterlanguageList(). Without this 'nds-NL'
will be handled incorrectly when the article in it is featured.

Bug: T143527
Change-Id: Ie7fe5a270cb3030899b6034512351d5d66d7be06
2016-08-21 22:47:27 +03:00
eranroz
abaddfaccd Earlier evaluation of compactlinks
* Prospectively load ext.uls.init
* Prospectively check if readyState is interactive
Bug: T136463
Change-Id: Ib36ef6a2b9955189acfbe06bd6b498a66014cf06
2016-08-19 11:10:27 +00:00
Amire80
43f62e601c Add languages in which there is a featured article
Bug: T70071
Change-Id: I5ed2f1ece5b11b96ec6416bc1c6c2266ac6b4388
2016-08-04 19:42:46 +03:00
jenkins-bot
9c1decf616 Merge "CompactLinks: support sortPrepend from WikiBaseClient" 2016-08-02 05:14:55 +00:00
jenkins-bot
b8c79727d8 Merge "Show languages that appear in the page's text" 2016-08-01 06:31:24 +00:00