Commit graph

1589 commits

Author SHA1 Message Date
WMDE-Fisch f056cca73a Use attr() to get revision position number
When we load new revsions in the background and extend the view,
we still want to keep track of the positioning. This is done with
the `data-pos` attribute. When shifting the numbers due to
re-loading the `data-pos` of each revision is updated to a new
value.

$.data() does not nessecarily load the value from the `data-`
attribute, but seems to have a different representation in parallel

In some situations the results of data() vs attr( 'data-' ) seem
to differ, leading to situations where the pointer moves to the
wrong postion when clicking.

Trusting the attribute call seems to be the most stable approach
here.

Change-Id: I3c877b5a5f21ca36b8857d29ec018b16ff588962
2024-02-22 15:12:10 +01:00
jenkins-bot 62e9fd443c Merge "Rewrite revision style assignment with jQuery.toggleClass" 2024-02-21 08:31:51 +00:00
thiemowmde e5866136dd Move safety checks closer to where they belong
This is split from I4431882 to make that easier to review. This just
moves existing code around. It should not make any difference.

Change-Id: Ic1a63bac4c30656533c2323a5a133aa483a26975
2024-02-20 09:11:21 +01:00
thiemowmde 9280f7f2e7 Rename many methods to be much more meaningful
This is split from I4431882 to make that much easier to review.

Additional changes:
* Remove plural "s" from setRevisionPreviewHighlight
* Add "All" to removeAllRevisionPreviewHighlights
* Merge two methods into a single enableRevisionPreviewHighlights

Change-Id: I7088b23a330a46fadfc4ae296cf1d61f0be435f8
2024-02-20 08:53:31 +01:00
thiemowmde 29c8a4830d Rewrite revision style assignment with jQuery.toggleClass
This does the same as before, just in one single loop instead of so
many different steps.

The way the loop counts is odd. Why are the numbers returned by
getOldestVisibleRevisionIndex and getNewestVisibleRevisionIndex
off by one? I tried to make this more visible in the code without
touching it.

Change-Id: I5b9bd360bf48e138a7ae9406eab716d41fabd122
2024-02-20 08:33:40 +01:00
jenkins-bot d41ff5d8cf Merge "Introduce a default for the pushState function argument" 2024-02-19 16:34:09 +00:00
jenkins-bot 9340c48600 Merge "Remove extra "div" from jQuery selectors" 2024-02-19 16:32:44 +00:00
jenkins-bot a85aa7e023 Merge "Consolidate duplicate code updating slider line CSS" 2024-02-19 16:29:54 +00:00
Translation updater bot 52edaee7f1 Localisation updates from https://translatewiki.net.
Change-Id: Ia6f3bc3f07ff277b152e777651feaf694fe14cff
2024-02-14 08:19:19 +01:00
libraryupgrader 8ca7a124a6 build: Updating dependencies
composer:
* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* grunt-banana-checker: 0.11.0 → 0.11.1
* debug: 2.6.9, 4.1.1, 4.3.1, 4.3.4 → 2.6.9, 4.3.1, 4.3.4
  * https://github.com/advisories/GHSA-gxpj-cx7g-858c
* semver: 5.7.1, 7.5.0, 7.5.4 → 5.7.2, 7.5.4, 7.6.0
  * https://github.com/advisories/GHSA-c2qf-rxjj-qqgw

Change-Id: Id7a3c5822da56407f2f0963cf91bf9440fbde7f7
2024-02-13 03:17:04 +00:00
thiemowmde ed538b815e Remove extra "div" from jQuery selectors
The extra "div.…" doesn't make the selectors more specific or
anything. The class name alone is unique. This makes the code
simpler, less brittle, and potentially even faster.

Change-Id: I38f61a793a3f5d441b9bf06f9159433cb7f002ad
2024-02-12 12:07:53 +01:00
thiemowmde 1d0c16b108 Consolidate duplicate code updating slider line CSS
This code is updating the position and length of the yellow/blue
horizontal lines in the middle of the slider, left/right to the
yellow/blue circles.

1. setSliderLineCSS is called two times. A lot of the code before
is identical. Move all code that is identical into setSliderLineCSS.

2. The two single-use methods are very short now. Nothing but a
single function call. Merge the two calls into a single method.

Notice that `-0.5 * this.revisionWidth` is the same as
`-this.revisionWidth / 2`. I was able to make one disappear by
slowly transforming the code. It still does the same as before.

Change-Id: I9f9593bf4655fc8fa681fa8190db44dc8d6fc232
2024-02-10 16:35:37 +01:00
thiemowmde 52fd2e0527 Introduce a default for the pushState function argument
Storing a new entry in the browser history is the normal, default
thing to do. The only exception is on initialization, when the slider
is initialized from the browser history.

I hope this makes the code a little easier to read.

Change-Id: I09a3e9b4417ec3d57e86dc947ac0748f30ef0dd5
2024-02-10 16:18:34 +01:00
jenkins-bot acd0632c1c Merge "Use existing data-pos attribute instead of pixel calculations" 2024-02-09 17:09:18 +00:00
thiemowmde f0742e7ba3 Use existing data-pos attribute instead of pixel calculations
This click handler is assigned to many different elements. Not all
of them can be used as a source for a data-pos="…" attribute. But a
lot can.

Again, this patch alone will not actually fix T352169. But it will
improve the situation a lot, according to my local tests. Many of
the clicks will start to work fine on RTL wikis because the
problematic pixel-based getRevisionPositionFromLeftOffset
calculations are not used any more.

Steps to reproduce: Go to a RTL page with a very long history, e.g.
https://he.wikipedia.org/wiki/Special:Diff/38031767?uselang=he
Click on one of the gray bars in the right half of the slider. This
will not work, i.e. the slider will not move to this position but
to a totally different one. This is the bug described in T352169.

I noticed that a browser zoom other than 100% can cause many more
problems that are unrelated to this patch. Please test with 100%.

Bug: T352169
Change-Id: Ife49557c891736bc94df6087658f76326791f61b
2024-02-09 16:27:05 +00:00
jenkins-bot ffc40f6954 Merge "Remove $dummy element after determineRtlScrollType call" 2024-02-09 16:03:50 +00:00
thiemowmde e505805adb Remove $dummy element after determineRtlScrollType call
This updates the code a little bit to be closer to the current
version of https://github.com/othree/jquery.rtl-scroll-type
without actually changing anything (for now).

I tried copy-pasting the current version to see if that helps with
T352169, but it doesn't make a difference.

The only actual change is that the dummy element is removed when
it's not needed any more.

Change-Id: Ibdd064e228fa9464a8652ce9a8a9ac388662f29d
2024-02-09 12:26:15 +01:00
thiemowmde 1b49469c96 Fix rounding error in revisionsPerWindow calculation
I have seen this getting fed with fractional numbers like
38.9994375. This apparently happens when specific browser zooms
are used, e.g. 110% in Google Chrome. There is a lot of code that
expects this to be an integer number and stops working entirely
when it isn't.

I'm also updating two related comparisons to not be so extremely
specific any more. This probably doesn't make a difference any more
with the fix above, but can't hurt.

This patch doesn't solve T352169, but is one more puzzle piece on
the way to solve it.

Bug: T352169
Change-Id: Ied0b9748beec941e901ca4ecba428c16967ca510
2024-02-09 12:19:31 +01:00
thiemowmde 7e152e9f7c Drop obsolete special case for Google Chrome before version 60
The version numbers mentioned in the comment are from the V8 engine.
The last Google Chrome version to use a 5.x version of the V8 engine
was Google Chrome version 59. That was 8 years ago. See T168299.

Our official support matrix asks for 3 years.
https://www.mediawiki.org/wiki/Compatibility#Browser_support_matrix

Notice how there is no version number in the code despite the comment
explaining that it shouldn't be used in later versions.

According to my local tests this is not a full fix for T352169, but
notably improves the situation. I can still see the bad behavior
described in T352169, but only in a narrow region on the right side
of the slider. Removing the obsolete browser detection is necessary
to unblock further investigation.

Making the dummy text a bit longer also makes an actual difference.
To keep this patch as minimal as possible all I do is to add a single
character.

Bug: T352169
Change-Id: I56f3c1969ce4f164f4319e5038d0f97527e6b1c0
2024-02-07 17:29:19 +01:00
Translation updater bot 30cca9dac8 Localisation updates from https://translatewiki.net.
Change-Id: I51f3dd05b8691510b7e0cba1e3d617baa70157bc
2024-02-07 08:27:31 +01:00
WMDE-Fisch 95540a313c Merge tooltip browser tests
No need to build up two test here with refreshing the page.

Change-Id: I9bc5b44e2b92704b896edaaa03affac216b9dbce
2024-02-02 16:53:02 +01:00
WMDE-Fisch 502e207e7c Remove obsolete lint rule exception
Now triggers a warning, that the exception is not needed.

Change-Id: I3e7fd4dba7e17fc9f7e0969148db322fedd34c1c
2024-02-02 14:01:57 +01:00
jenkins-bot 4e3d7944d2 Merge "Merge large chunk of code duplication in SliderArrowView" 2024-02-02 11:03:49 +00:00
jenkins-bot 7f5b0d9cf4 Merge "Merge a small piece of code duplication in SliderView" 2024-02-02 09:13:50 +00:00
thiemowmde d006c26f65 Merge a small piece of code duplication in SliderView
The method is only called from two places, and both do very similar
things before the call. This duplication can be merged.

One notable difference is that .scrollLeft() was possibly called
twice before. The first call was pointless anyway. The argument for
.scrollLeft() is absolute, not relative.

This code cleanup is motivated by T352169, but doesn't solve it.

Bug: T352169
Change-Id: I75e9ffc77ef6331f14e074921c78c28233e60840
2024-02-01 23:40:58 +00:00
thiemowmde ed2c0a8b73 Merge large chunk of code duplication in SliderArrowView
This was almost the exact same code, with very few differences (e.g.
different CSS classes, and different icons).

Another change in the same file is the removal of an extra
`!== undefined` check. This is impossible. I can't tell why this was
there. Maybe an artifact from when this was developed?

This code cleanup is motivated by T352169, but doesn't solve it.

Bug: T352169
Change-Id: I3bb7ce00f9b754f9ba58310100b855c8ee3fca4a
2024-02-01 23:40:51 +00:00
jenkins-bot 27aa61e0a3 Merge "Make use of the /i feature instead of .toLowerCase()" 2024-02-01 23:26:13 +00:00
thiemowmde 99c0064e34 Make use of the /i feature instead of .toLowerCase()
Depends-On: I8a101781bb47612deabb0f2a06a398ac13e860e6
Change-Id: Id738c409cca89c1783290578f42c92e2c8b0cac3
2024-01-31 19:34:59 +00:00
Translation updater bot defc20e88a Localisation updates from https://translatewiki.net.
Change-Id: I2efdebc90ac63b3b0402329d97a347f1ed543028
2024-01-28 16:07:57 +01:00
Translation updater bot e7aab0bd7c Localisation updates from https://translatewiki.net.
Change-Id: I2337d96d4e89c52146c1f971325626172994ed73
2024-01-18 09:27:08 +01:00
Volker E df7d5b95ac build: Update 'svgo' to latest v3.2.0 and re-minify SVGs
The latest update of 'svgo' dependency includes three optimizations on
converting path commands, which
- improves closing paths and how we determine if to use absolute or
  relative commands.
- round arc or convert to lines based on the geometric sagitta
- convert cubic Bézier curves to quadratic Bézier curves where possible
Also unifiying npm command to qua standard notation `minify:svg`.

Bug: T354875
Change-Id: I38ccbfa62ee7afcfb10eee7853b33648863f54ad
2024-01-16 00:17:03 +01:00
jenkins-bot 8f79cb6ad9 Merge "Various tiny clean-ups" 2024-01-12 09:48:13 +00:00
Translation updater bot 0befc9d8f9 Localisation updates from https://translatewiki.net.
Change-Id: Ie9eab77a2e0bfb792994daeb937a0fe3f74084b7
2024-01-12 09:01:00 +01:00
Translation updater bot ab5ef78bb5 Localisation updates from https://translatewiki.net.
Change-Id: Ia3d368b59ac07f8da1a4de4ece997870a6181ae4
2024-01-10 08:33:22 +01:00
Umherirrender 748c7d9b89 tests: Use namespaced classes
Change-Id: I5f578ee6a91720921512bb8321ee7a95dd3d3aa4
2024-01-05 21:23:18 +01:00
Translation updater bot 8ede0f2514 Localisation updates from https://translatewiki.net.
Change-Id: I9862f592155bfd675568428c9765bd3186fb2d8b
2024-01-02 10:17:17 +01:00
jenkins-bot b395d66270 Merge "Add fail-safe to SliderView.revisionsClickHandler" 2023-12-07 10:53:04 +00:00
jenkins-bot 7a5e15527e Merge "Inline trivial single-use method in the Revision class" 2023-12-07 10:52:32 +00:00
jenkins-bot f74da84e6c Merge "Drop another chunk of code duplication from SliderView" 2023-12-06 17:38:02 +00:00
Fomafix aadedc996f Use MediaWiki\ResourceLoader\ImageModule instead of ResourceLoaderImageModule
The class name ResourceLoaderImageModule is deprecated since 1.39.

Change-Id: I1ef11649f10f4114372685ca20177227f06b1237
2023-12-01 13:27:37 +00:00
jenkins-bot 442f905c5f Merge "Update StaticUserOptionsLookup's FQN" 2023-11-30 15:05:39 +00:00
gerritbot 419865a72b Update StaticUserOptionsLookup's FQN
User-options related classes are being moved to
the MediaWiki\User\Options namespace in MediaWiki Core;
reflect that change here.

Bug: T352284
Depends-On: I42653491c19dde5de99e0661770e2c81df5d7e84
Change-Id: I5b9f4c7ea90f492f75b9055b801ec0853da22687
2023-11-29 17:55:18 +00:00
gerritbot 639d3fa19c Update UserOptionsLookup's FQN
User-options related classes are being moved to the MediaWiki\User\Options namespace in MediaWiki Core; reflect that change here.

Bug: T352284
Depends-On: I9822eb1553870b876d0b8a927e4e86c27d83bd52
Change-Id: I4daca7542a428455aa72cc372521e894716e3c40
2023-11-29 12:39:57 +00:00
thiemowmde 33b9ee0e14 Drop another chunk of code duplication from SliderView
Change-Id: I9c258454b2ed34208950efa113fed32ce4d0e0be
2023-11-29 13:15:08 +01:00
thiemowmde fdf34e4dfb Various tiny clean-ups
Notable:
* Arrays shouldn't be initialized like this. Instances will actually
  share the same array object. Luckily this was dead code anyway
  because it's re-done in the constructor.
* $timeOffset is already guaranteed to be an int.

Change-Id: Ib0a2b0f39ee368fcef4756281099d519d470eb44
2023-11-29 12:58:51 +01:00
thiemowmde eda9022d51 Inline trivial single-use method in the Revision class
This utility method doesn't really belong here. This does at least
reduce the surface area. Now it's only a single method instead of
two.

Change-Id: I21fbb4e4922f2cc3bc3e23c457b5ceeb216f3ab4
2023-11-29 12:55:18 +01:00
thiemowmde c634608057 Add fail-safe to SliderView.revisionsClickHandler
Turns out we can run into this failure situation even if everything
goes according to plan. It is possible to click just one pixel outside
of the valid range, e.g. on the very right corner right next to the
last bar. This is supposed to not do anything anyway, and correctly
doesn't do anything from the user's perspective. But it shows up as a
failure in the JavaScript console.

Bug: T352169
Change-Id: I12c9cce90970be36667ba1b721afd38a13a063c9
2023-11-29 12:50:34 +01:00
WMDE-Fisch 6482107b14 build: Update linter libs
* "eslint-config-wikimedia": "0.26.0"
* "grunt-eslint": "24.3.0"
* "grunt-stylelint": "0.19.0"
* "stylelint-config-wikimedia": "0.16.1"

Including auto fixes.

Change-Id: I24374dad734fca734f9c5e25cfa5b5380ad24c46
2023-11-24 10:14:15 +01:00
Translation updater bot f06840c303 Localisation updates from https://translatewiki.net.
Change-Id: I433cfe32a46c3da2ad0d090b6c8f0da07d069a41
2023-11-23 11:57:22 +01:00
Translation updater bot 857ca7ce40 Localisation updates from https://translatewiki.net.
Change-Id: I759bc66d9f493e596f887a715edcecf10b180f91
2023-11-22 08:20:38 +01:00