Commit graph

49 commits

Author SHA1 Message Date
Leszek Manicki e243ca2746 Do not load RevisionSlider initially, add a button to show/hide it
Instead of loading RevisionSlider only add a little button
to expand RevisionSlider on top of the diff page.

This makes RevisionSlider only steal a bit of space over the
diff, and only inserts quite a big slider to users that want
to have it visible for the particular diff.

API calls are only made once RevisionSlider has been expanded.

This is re-submit of b0f229d75f
that was reverted in I26427faaa00b38c2aa1377a66224c9062dcca302.

Bug: T141871
Change-Id: I879de5774b2cce7b908e73cbbe869fd48d6afa23
2016-08-10 16:26:54 +02:00
WMDE-Fisch c5690ba763 Revert "Do not load RevisionSlider initially, add button to load it"
This reverts commit b0f229d75f.

Change-Id: I26427faaa00b38c2aa1377a66224c9062dcca302
2016-08-09 16:34:53 +00:00
Leszek Manicki b0f229d75f Do not load RevisionSlider initially, add button to load it
Instead of loading RevisionSlider only add a little button
to expand RevisionSlider on top of the diff page.

This makes RevisionSlider only steal a bit of space over the
diff, and only inserts quite a big slider to users that want
to have it visible for the particular diff.

API calls are only made once RevisionSlider has been expanded.

Bug: T141871
Change-Id: Ib312f6225b85b9ebdf4ac5d16e254a57d5cf6411
2016-08-09 14:54:59 +02:00
Leszek Manicki 796a971118 Make backward/forward arrows OO.ui.ButtonWidgets
Bug: T142206
Change-Id: I25c98e32c74235a2b70ac1d02c221f1898ba9958
2016-08-08 16:17:35 +00:00
Leszek Manicki 77095bfa65 Use OOjs Popup Widgets instead of tipsy
Bug: T141983
Change-Id: I4b4ea427f82b15625537d859623461eceb1eb52b
2016-08-08 18:11:23 +02:00
addshore f2d12c6728 Add browser test for history after dragging pointer
Change-Id: Icfc28009b4b2168bdde328055906238e0108713c
2016-08-01 12:25:46 +01:00
Leszek Manicki dc838bc87d Fetch more revisions as the user moves back and forward
This changes the previous behaviour of fetching always up to
500 most recent revisions.

Now the extensions fetches N revisions including the newer
revision selected to diff as the most recent revision.
N is number of revisions that would fit in the current
window when rendered as bars.
When user is close to either "end" of the slider, extensions
fetches another batch of up to N older or newer revisions,
as long as user does not reach the oldest or the newest
revision of the page.

Among others, this removes the limitations of the previous
approach: showing only 500 revisions, and failing to show
anything when any of selected revisions was older than
500 recent revisions.

This change also simplifies usage of Api class.

Bug: T135005
Change-Id: Ib3f4a6ac57ff17008f9d8784c4716bd294443096
2016-07-28 12:58:35 +02:00
Leszek Manicki c7190cf97d Add support for GENDER to the username label in the tooltip
After fetching a batch of revision data, user names are extracted
and another API query is made to get gender preferences for users.

This change also moves a code responsible for MediaWiki API calls
to its own class.

Bug: T136367
Change-Id: Id11fe14e9ca37829141ae92b13b51f10f992eb96
2016-07-26 11:50:59 +02:00
Leszek Manicki 8d91433b61 Open links in the "tutorial" in the new window
In particular, link to a Meta page on the related community wish
should open in the new window/tab.

Bug: T140875
Change-Id: Ib0d7bf679c9ac8a3ee2fdf2289fc53cfdfdaa671
2016-07-20 12:28:20 +02:00
addshore bad7298b8f Browser tests for history feature
Bug: T133278
Change-Id: I5ba8d7766e91d733504f488d1f277850e8fab945
2016-07-05 17:35:37 +01:00
addshore 590742edd8 Pointers browser tests
Bug: T133278
Change-Id: Id94681550aa3e2f02137e6b432dfe06d2b80b9b7
2016-07-05 13:47:31 +01:00
WMDE-Fisch 4f4f500854 Simplify conditions
Change-Id: I7e1a46c865c070f5c804833b9f0b05c5208ff163
2016-07-05 13:23:16 +02:00
addshore 1e65ec602f Tooltip browser tests
Bug: T133278
Change-Id: I7ee7143ab3fcd9c2fe41604c370d9c4e2e7a9d20
2016-07-05 11:57:36 +01:00
jenkins-bot 7d00324b5c Merge "Timeline browser tests" 2016-07-05 09:59:07 +00:00
addshore 50fdb7b1c9 Timeline browser tests
This adds tests for navigating the timeline using the back
and forward buttons.
It also makes sure that the buttons are disabled / enabled
at the correct times.

Bug: T133278
Change-Id: I9834dd3d3bf107557b15fdd105a946902d53b8f2
2016-07-05 11:44:23 +02:00
Leszek Manicki 8e2365502b Make RevisionList expect list of Revision object
Despite its documentation the "constructor" of RevisionList tends
to expect array of revision data in a format returned by API instead
of array of Revision objects.
Due to different name of ID fields in Revision object and in API array,
if "real" Revision object is passed to RevisionList, its ID is lost.

This changes RevisionList so that it only accepts an array of Revision
objects. This provides better abstraction.

This is basically a revert of I147270f28381038d05f8bcfd2317e8c269b2e458
which aimed at the same problem but suggested solution doesn't seem right.

Change-Id: Ic45cdd3e7b707a8c6a19eecf0a84d4c11696cd1f
2016-07-05 00:01:46 +02:00
addshore 1671a07d7d Allow browser tests to add more revisions easily
This allows an arbitrary number of revisions to be created
on a page very easily.
The page created will have a name relating to RevisionSlider
suffixed by a random float.

The base logic for this is taken from:
Ic165f108517c534a4b1c12883621b3624c7b0336

This patch also removes the @vagrant tags as RevisonSlider
is not yet in vragrant.
Please see T139296 for the ticket to add it.

Bug: T133278
Change-Id: I8a25db411bee2fa44555a23d1a840907a185c998
2016-07-04 14:58:14 +01:00
addshore 6101897460 Add browser tests for tutorial / help dialog
Testing the visibility / presence of things around
the dialog appears to be hard and the DOM for the dialog
remains unchanged when shown / hidden as far as I can see.

These tests test that the dialog is only shown once per
user.
And that the sequence of the dialog works in regards to the correct
buttons being present at the correct times.

Bug: T133278
Change-Id: Ia86cb69573da3e888c2897b8b50f1d2e5c61d8d4
2016-07-04 13:39:19 +00:00
jenkins-bot 488f8ec8a8 Merge "Make QUnit tests language-setting-proof" 2016-07-04 13:29:13 +00:00
WMDE-Fisch 471ee2eb47 Remove empty test file
Change-Id: Ica247e802cb9f2abfb1de97b87a6100af4376aef
2016-07-04 14:02:01 +02:00
WMDE-Fisch a27925152a Make QUnit tests language-setting-proof
There seems to be no good way to enforce language on the QUnit tests. It works
for the number formatting by setting the user language on the fly but for everything
else it fails. I simplified some tests and skip some tests or asserts when the language
is not 'en'.

I also added a helper to have conditions for skipping tests. This should be part of
QUnit IMO.

Still I dont know if this is something we should care about at all or just assume, that
devs will know what they do when they try to run tests.

Change-Id: I624ccf3984434e06200abffe7ccdd25b396251af
2016-07-04 11:59:49 +00:00
Ed Sanders a5f36af0f3 Prefix all classes and IDs with mw-revslider
Bug: T139105
Change-Id: Ia92396ec4f8acea39398173c81842d66257dc519
2016-07-01 11:27:23 +01:00
Ed Sanders cdd4a6bd83 Fix linting path for test files and make a pass
Change-Id: Iee023c901d6e87c6d23ce78a57c16c73d90e3efb
2016-07-01 11:26:18 +01:00
Jakob f2f24b1b11 Merge "Add more QUnit tests for public methods" 2016-06-30 15:08:15 +00:00
WMDE-Fisch f7ae734b99 Add more QUnit tests for public methods
Added tests for DiffPage, HelpDialog and RevisionListView.
Slightly refactored RevisionListView to improve testability.

Bug:T137964
Change-Id: I07dc8059d5a90bdd6623fd7748d36ba212763e15
2016-06-30 17:01:10 +02:00
addshore d7caa6c1f3 Start browser tests (Initial test for beta feature switch)
This adds 1 simple browser test to make sure that the placeholder
for the revision slider loads when the beta feature is enabled and
does not load when it is disabled

More tests will follow.

Bug: T133278
Change-Id: I5be9014b6c5ac03128c034fd866141e89fd7a0ed
2016-06-30 14:46:37 +01:00
addshore d5809a08c2 Move qunit tests to a directory
Change-Id: I5aa8d951e8fb77321748af341a1a17277aad9820
2016-06-27 12:24:47 +01:00
Moriel Schottlender 7b75c1ebf2 Use momentjs to display internationalized timestamps
MediaWiki uses the momentJS module to display standard timestamps;
this means you can avoid calculating the user offset, but also, it
means that all timestamps are internationalized and translated, and
use the standard view that MW uses in its interfaces.

We can store the user's offset in a RevisionSlider variable so we can
refer to it in timestamp construction, as well as manipulate it in
tests without touching any global user options that may affect other
tests.

Bug: T136825
Change-Id: I67d9859b8f33ab8a217128822e246e7ab67f6511
2016-06-03 13:20:35 +00:00
jenkins-bot 04df38c25f Merge "Use parsed comment instead of custom parsing" 2016-06-02 15:46:02 +00:00
Brian Wolff 39d8d9229a Make files not executable
I know it doesn't matter, but it was kind of bothering me.

Change-Id: Iae9f8b17a3fb5ced362dc2da95e67e20db8af5a5
2016-06-02 13:48:09 +00:00
WMDE-Fisch f8446590cb Use parsed comment instead of custom parsing
Bug: T135740
Change-Id: I49757b5bcf2c47f459538bd4383325882a15336f
2016-06-02 13:47:41 +00:00
Leszek Manicki a2774984c4 Make JavaScript code and CSS follow the style guide.
Changes include:
 - not passing in HTML attributes when creating tag elements,
 - creating HTML elements instead of appending hand-crafted HTML,
 - single append() calls instead of multiple consecutie appends,
 - not using raw HTML messages when not needed,
 - prefixing all CSS classes and IDs with "mw-" to avoid potential
   name conflicts.

Change-Id: I164538bbaf44d46a4c66659f56e07ec7225d7fa9
2016-05-31 14:57:14 +02:00
Leszek Manicki 0251b952cb Improve SliderView rendering tests
Current rendering test passes but not really because test results meet
expectations but rather by accident.
Test revisions lacked ids, and current way of rendering revision made
all revision bars have id equal to "undefined" string. That made test
pass, although it is not what is expected (we expect three revisions
in tests but not that three revisions have the same id, and each of them
gets a pointer assigned to - the might look interesting in the browser,
though). Also the test will fail as soon as the way of rendering
revisions is switched to standard use of jquery's attr() instead of
handcrafting the HTML in the RevisionListView class.

This patch adds missing IDs to test Revisions where needed, and also
set config vars that are required to render Slider properly.
This also adds tests for cases where the exception is thrown.

This also makes RevisionList initialization consistent. RevisionList
expect to receive an array of revision data in a format that API
returns. Tests provided arrays of Revision objects instead. That
also works with a difference that API-like format uses "revid" as a field
containing revision ID, while Revision objects use a field named "id".
The way RevisionList was used in tests actually lead to have each
revision initialized twice, and on the second initialization it lost
its ID (due to field name difference). This changes test to provide
a API-like array instead of arrays of Revision objects to RevisionList.

Change-Id: I147270f28381038d05f8bcfd2317e8c269b2e458
2016-05-31 14:56:08 +02:00
Jakob Warkotsch f5d9347d93 Make pointer offset depend on whether pointer is the upper pointer.
Bug: T135837
Change-Id: I0ccc34751765f1f98dd29426d4efb3f3419f3932
2016-05-26 12:30:12 +02:00
Jakob Warkotsch 90ef5dbb23 Fix bug that caused the most recent revision to never be visible.
Bug: T135739
Change-Id: I00e30a585b3a38da7e405f200356163b20358df9
2016-05-26 10:56:25 +02:00
Leszek Manicki a434e9503d Fix Pointer and PointerView tests
Initialization tests for both classes were checking
if the rendered view or the view related to the pointer
contained an element with particular CSS class.
The structure of the view has apparently changed as it
no longer contains an element with a particular class
but the view's DIV itself get the CSS class.
Assertion in tests has been wrong and did not catch the
change (in particular, apparently jQuery's find returned
an empty object which does not evaluate to false in qunit assertion).

This changes initialization tests to check the CSS class of the view element.
It also reflects the removal of left/right pointer distinction made in
I9d56314ea4cf46402df56e0a038bfb965521896.

This also rename both test modules as they had misleading names.

Change-Id: I5956022af332c9915e983a020732edbe1dd75aef
2016-05-17 13:48:40 +02:00
addshore ec80c4fa6f Get rid of left and right pointers.
As the pointers can switch side the idea
of having a left and right one will just lead
to confusion, so lets kill that idea now! :D

Change-Id: I9d56314ea4cf46402df56e0a038bfb9655218960
2016-05-13 11:23:11 +00:00
addshore 44904e8687 Avoid changing the URL during SliderView test
This was super annoying as if you went to refresh
the test page to run the tests again it would take
you to some broken diff page instead...

Change-Id: I43ca8edd005aa3ef72b74a5d812cbe39bccaf332
2016-05-13 11:23:00 +00:00
addshore fc74a35709 Use correct time offset based on server and user settings
If the user has a time offset that will be used.

If the user uses the default then the offset is
still retrieved from mw.user.options.values.timecorrection

If the user is anon then mw.config.values.extRevisionSliderTimeOffset
is used which is added as a JS var by the Hook

Bug: T135109
Change-Id: Iab56bbeb6a1dd2ea08b73983341485623ff63ef1
2016-05-13 11:02:20 +00:00
addshore 8ba5d9acea Add size & minor flag to tooltip
Bug: T135118
Change-Id: I2bc90a2f8a03693df092a4785cfe2fdfcc85730a
2016-05-13 11:57:31 +01:00
Jakob Warkotsch 139368093e Adds the missing first revision to the slider.
The first revision was previously not included because revision size was
calculated by subtracting the size in bytes of a revision from the size
of the previous revision which lead to a problem with the first
revision. The first revision's relative size is now equal to its actual
size.

Bug: T135003
Change-Id: I71441ed33673b06407be0fc566c96c3955dddbf9
2016-05-12 15:25:37 +00:00
addshore cfac82978c Fix commented out tests
Change-Id: I283228cc03dcc64107720f9092a2f41483f74853
2016-05-10 18:14:10 +01:00
Jakob Warkotsch 980f2ca917 Create Slider module.
* threw out most of the things from init.js
* turned Slider + View into respective modules
* pointers should remember position (except on page load) and correctly
  slide back to their position/to the side

Some things still need testing and refactoring.

Addshore: - CS fixes and comment out current failing tests

Bug: T134395
Change-Id: I78a7095e1d9902314163b1443448f47ef0484d4e
2016-05-10 17:38:46 +01:00
Jakob Warkotsch 54720944a0 Create Pointer module.
This creates a module for the draggable pointers for the RevisionSlider
mainly to encapsulate both the pointers' state and their HTML code.

Some animation methods such as slideToSide and slideToPosition
that are still flying around in init.js weren't added to the
module since I thought they should be part of the not yet existing
Slider module.

Change-Id: I1292bfb0bbd68f8d2de04b3b5e5f3133ec6363b8
2016-05-06 12:37:01 +00:00
WMDE-Fisch 308d24c8c5 Added jscs checks for tests
Change-Id: Ice2d37f40105d082fd10ebc7a83bd1ef02919eb4
2016-05-03 12:07:47 +02:00
WMDE-Fisch a0f22fd88b Refactored getSection into Revision class and added tests
Change-Id: I6c6fa5194482c25aa3f2285aebfee11cd713285d
2016-05-02 15:21:40 +02:00
Jakob Warkotsch 8c6676f939 Create module for Revision type.
This pulls out some of the code around revisions into a decoupled and
tested module.

Change-Id: Ib2a4f96f0e0b9a96ec85d300d97cd52dcaffe89e
2016-04-28 12:38:24 +02:00
addshore 800d93c9ce Remove empty php test file
Change-Id: Ib119672ba450de22bd6cd58ffc8f58b99054c258
2016-04-20 08:40:40 +01:00
Jakob Warkotsch 23b5b2f112 Initial commit.
This turns the prototype code of the Revision Slider into a MediaWiki
extension.
With this extension enabled the slider should appear on diff pages
already but it won't actually show diffs when adjusting the slider
pointers.

Things that changed so far in the prototype JS code:
- pulled out the rainbow function and made it use Math.floor instead of
 the ~~ binary operator
- pulled out the API request that fetches the revisions into its own
 module
- cleaned up and documented some parts of the code

The code is still very much WIP and JSCS still has a couple of
complaints.

Bug: T132576
Change-Id: I2e22365f3b93a76d5b8d3997242b5fed996c6d78
2016-04-19 16:35:37 +02:00