Commit graph

155 commits

Author SHA1 Message Date
Ed Sanders 31dc9b4e1c CommentController: Merge (mode, hideErrors, suppressNotifications) into options
Change-Id: Ib8b75fd44fcf560d30e2a6a6f79a9e833c0e5200
2024-10-07 13:39:10 +01:00
David Lynch bb418d6b60 Don't startPoll if there's not a subscribable heading, i.e. New Topic
Any save errors wouldn't be shown -- most visibly, this meant any new
topic requiring a captcha couldn't be submitted.

Follow-up to 890cec73b6

Bug: T374770
Change-Id: Iac62ba9ccf629185798957dafee774ad1de08396
2024-09-16 19:26:25 -05:00
Bartosz Dziewoński 890cec73b6 Pause polling for new replies while saving
Also fix stopPoll() not really stopping the polling if a request was
in progress while it was called.

Bug: T333576
Change-Id: Ie8f6f006c6fd23971e53586e6219992db23f48fc
2024-08-28 18:55:30 +02:00
Bartosz Dziewoński f76e47a3ef Keep sending CAPTCHA info if an unrelated save error happens
Bug: T371041
Change-Id: I72c73b0e323c794578edb14efcc9cc06e46a194b
2024-08-27 23:55:15 +02:00
Bartosz Dziewoński 4ff5bf253d Reattempt the save when something already created a temporary account
Bug: T368263
Change-Id: I2adcb83017daff578627aa02b04934be21eade44
2024-08-27 23:49:48 +02:00
David Lynch 4ec197a8cb CommentController: fix a call to a missing setSaveErrorMessage
Follow-up to 6a17f6121c, which refactored
this and missed altering this call.

Bug: T373288
Change-Id: Ic9b7b32a2fef209b4e873e2b28881a2792805051
2024-08-26 09:15:21 -05:00
Ed Sanders d8f564fe71 Show confirmation prompt if trying to submit a new topic without a title
Bug: T334163
Change-Id: Ib961632636d5b7134219cddde1638c6962209001
2024-08-06 09:44:27 -05:00
Ed Sanders 6a17f6121c Move reply widget controlling logic to CommentController
Some of what happens when you click reply happens in
CommentController (in #save) and some error handling
happens in ReplyWidget (in #onReplyClick).

Move most of the logic to CommenController.

Change-Id: Ib6208c0b8d2ddbbcf08adfcca7875ab8b026f598
2024-08-06 09:44:27 -05:00
Ed Sanders ea5639b20b ESLint: Enforce prefer-const
Change-Id: I5985d1b532988bb3b71ff1aa24eae57ac2e1b9c5
2024-05-24 16:50:13 +01:00
Ed Sanders dda9227947 ESLint: Manually fix remaining no-var violations
Change-Id: I4474bd0205e7a1ed8e60147e52675e3e0b93ccd9
2024-05-24 16:50:11 +01:00
Ed Sanders ca5157156a ESLint: Autofix no-var rule
Leave rule off for now as manual fixes are required.

Also temporarily disable prefer-const rule as that
will also require some manual fixes.

Change-Id: I8c3478f26f51287acb943bd38c9c1020c06b9f39
2024-05-24 16:49:36 +01:00
jenkins-bot 28a529b31d Merge "CommentController: Delay polling on error" 2024-04-30 20:03:09 +00:00
Bartosz Dziewoński 1bfd97580e CommentController: Delay polling on error
Use exponential backoff.

Bug: T362814
Change-Id: I436a700de3b89abbfa1f991bcf6dc7aa52008cbd
2024-04-26 04:56:34 +02:00
Bartosz Dziewoński d4c5aebd8f Prefer short arrow functions
When an arrow function body contains just a single `return` statement,
the braces can be omitted.

(Changes are mostly made by `grunt eslint --fix`, with only some line
breaks added by hand.)

Change-Id: I37f259f87085c8d20ed09cfa58a8456dd36cdc38
2024-04-20 00:08:51 +02:00
Ed Sanders a74c00ba8c Prefer arrow functions for callbacks
This allows us to remove our `this` bindings.

Change-Id: Ie8c8c38d36af8a033b5181870c39f8981a57b939
2024-04-19 12:34:23 +01:00
Ed Sanders 5957ac55df Pass through dtenable from main request query string
Instead of passing dtenable=1 unconditionally for API requests.

Bug: T360863
Change-Id: I42c651558d95a88eaf6006b6509caa4e41df8464
2024-03-25 18:26:53 +00:00
Ed Sanders 4f217f4dab controller: Use replyWidgetPromise when opening new topic tool
This prevents an exception being thrown if you open the
new topic tool when a reply widget is still loading.

Change-Id: I17da48ddf91394d05cc82613ce5517f1e176750b
2024-01-05 16:20:30 +00:00
Ed Sanders b6ebb5db56 CommentController/ReplyWidget: Document events
Also rename CommentController#teardown to onReplyWidgetTeardown,
and NewTopicController#clear(Storage) to onReplyWidgetClear(Storage).

Change-Id: Ib1dd50ca69aac6f1836674d1a6aefa2402844c57
2024-01-05 16:20:30 +00:00
Ed Sanders 811dce7bf7 CommentController#showAndFocus: Use replyWidgetPromise
We shouldn't assume callers of this method have waited
for the replyWidget to be built.

Bug: T354292
Change-Id: Ic66b4f04b8786b07f520e329adda37efcf498dad
2024-01-05 15:26:19 +00:00
Ed Sanders 185396a8e5 Merge ReplyWidget[Plain/Visual] modules
Only a fraction of a percentage of users are still using
ReplyWidgetPlain, and keeping these modules separate:
* Adds to code complexity
* Adds to ResourceLoader module bloat
* Causes bugs when we use VE dependencies in the
  core ReplyWidget class

The disadvantage is that ReplyWidgetPlain will now be
loading all of the VE dependencies, but this will make
switching to visual mode faster.

Bug: T348834
Change-Id: Ifb0cfd43fdab761c3321ad01fa9fefca26473f86
2023-10-13 11:58:12 +01:00
Bartosz Dziewoński c0f5a95504 Fix showing temp user popup after page reload
Bug: T344879
Change-Id: I1bb86468c27d4fbbd55ebcdc81ec841fbfeeb952
2023-08-24 16:09:25 +00:00
Bartosz Dziewoński 90f8fe5ec1 Reload page or redirect when saving an edit creates a temp account
Depends-On: I6cdc014fb39d35ce1f091b53dc3a9c4a3c95f9e9
Depends-On: I01e13ce1ebab462eeb0ba3847d4205a88965a127
Bug: T338002
Change-Id: I768e4fa2030d781bbc65428371bda17a87bd6a42
2023-07-10 22:55:58 +00:00
jenkins-bot 6de3603990 Merge "ApiDiscussionToolsEdit: Allow not returning the new revision content" 2023-06-22 21:31:32 +00:00
jenkins-bot 7c0f099529 Merge "Redo wrapper for localStorage integration" 2023-06-19 15:54:16 +00:00
Bartosz Dziewoński f7d98d7690 Redo wrapper for localStorage integration
I think the issues in T329299 are caused by partially autosaved
comments. We store data in multiple localStorage keys, and if some of
them are stored but others are not (due to exceeding storage quota),
our code can't handle the inconsistent state.

We already have a wrapper around localStorage that tries to cover up
these issues. Change it so that all values specific to an instance of
a reply tool are stored under one localStorage key. This ensures that
all updates consistently succeed or fail, with no partially stored
state.

One of the reasons we haven't done this is because this requires the
whole data to be serialized to JSON every time, but our experience
with VE change 4355d697aa shows that this is fast enough.

Extra changes:
* Remove storagePrefix, now redundant
* Remove use of createConflictableStorage, now redundant
* Prefix the key with 'mw' as advised by mw.storage documentation
* Use ES6 syntax for the new code (just for fun)
* Use consistent expiry (T339042)

Bug: T329299
Change-Id: I347115f7187fd7d6afd9c6f368441e262154233b
2023-06-19 16:45:08 +02:00
Ed Sanders 306ae10e0c Remove broken code
The wrong 'this' was being used. I don't think this additional
call is required because we have already disabled the section earlier.

Change-Id: I7c9005463223a3de94de5924bf5d5da22e7ca67c
2023-06-14 18:55:45 +01:00
Bartosz Dziewoński 6bf6105d2a ApiDiscussionToolsEdit: Allow not returning the new revision content
Sometimes we call this API and then reload the page (or navigate to
another URL), without using the page content it returns. Save some
work and some data transfer and don't generate it in those cases.

Depends-On: Ic5fac61f3ef9b2dfce6ff757f1d414a9f41f217d
Change-Id: If1aea90488e3f22cc31ac1f360139ae65acf000a
2023-06-12 20:28:45 +00:00
David Lynch ab23c23d48 Delay the load of VE modules until we're sure they're needed
Bug: T336020
Change-Id: I492d7b17a1ee3563f531fd565647ffd1307bddd4
2023-06-09 14:53:44 -05:00
Bartosz Dziewoński dcecf76ff1 Centralize EditAttemptStep logging code in WikimediaEvents
PHP logging code is not moved.

* Use the new mw.track() handlers from WikimediaEvents
* Ensure that 'integration' and 'editor_interface' are set on init
  events, since they're not hard-coded in the handler any more
* Remove the setting of 'editingStatsId' tracking parameter,
  now happens in WikimediaEvents (by way of VE ArticleTargetSaver)
* Remove code connecting ve.track to mw.track, now happens in VE

This must be merged together with WikimediaEvents change
Iace4d53a972396ca5b8713000570cc47c9986034 (but we can't use
Depends-On, because CI requires code here to be removed first).

Bug: T332438
Change-Id: I0ef0a96aafdf89a4ebe32131a85b18c25744bb2c
2023-03-18 13:26:10 +00:00
jenkins-bot e87d68f8c0 Merge "Revert "Remove dtenable API hack"" 2023-03-15 16:25:22 +00:00
Ed Sanders 1453c1023d Disable section toggling on mobile when replying
Bug: T320753
Depends-On: I5e199d404b622fae014f1f9489f65464dab8295b
Change-Id: Ib6c92dc96484282fcc0773991b1a0a80fe97e962
2023-03-06 15:01:42 +00:00
Bartosz Dziewoński ffb8e164cb Revert "Remove dtenable API hack"
This reverts commit a1217913ae.

Unfortunately still needed. The reply links can be disabled by just
CSS, but to enable them, we also need to generate the HTML markup,
which isn't done unconditionally. An issue with links disappearing
was reported here:
https://en.wikipedia.org/wiki/Wikipedia_talk:Talk_pages_project#c-Pelagic-20230226035400-PPelberg_(WMF)-20230223000100

Change-Id: I905d3267191193362c278d23145912f4aa0ce139
2023-02-26 22:11:59 +00:00
jenkins-bot b30256d01b Merge "Fix summary when topic title is changed after restoring from autosave" 2023-02-02 17:56:41 +00:00
Ed Sanders a1217913ae Remove dtenable API hack
This hack isn't necessary any more as reply links are always
added and enabled/disabled by CSS.

Change-Id: Ifecdd4299396f6cab7b192cde18d3001b9553f61
2023-02-02 17:20:37 +00:00
Ed Sanders 34a120d53a Look for Vector 2022 sticky header class in new location
This class was moved from <body> to <html> in Id5afe2c60.

Change-Id: Iad64abb02839c376d2f8955a0889f9ff0658a98c
2023-01-31 15:51:12 +00:00
Bartosz Dziewoński 1fb67ef63d Fix summary when topic title is changed after restoring from autosave
Previously, we would restore the title and the summary generated from
it, but we wouldn't restore `prevTitleText`, so we would lose track of
the fact that it was automatically generated, and stop updating it
because of that.

Instead of adding it to the stored data, let's instead stop storing
automatically generated summaries, and tweak the code to support
generating them when restoring.

Bug: T315730
Change-Id: I96420bc0a3e34373190d2c2c0db2e2175ad3156d
2023-01-24 14:28:17 +01:00
Bartosz Dziewoński 7dc35aa3ad CommentController: Fix 'discussiontoolscompare' polling not stopping
The .always() callback can be called after .teardown(), and would
previously restart the polling.

Bug: T313096
Change-Id: I6e4c0f7d47e13bd4a259282a508afcdf0c1bd949
2022-12-01 21:12:37 +00:00
jenkins-bot 99c772d4ee Merge "Add mw.track call when comment setup fails" 2022-09-27 22:32:08 +00:00
Ed Sanders f6df39c11a Always scroll "Loading..." text into view
If the widget has just been opened, it should already be in view,
but when we are recovering from auto-save it might not be.

Scrolling it into view lets the user know sooner that a draft is
about to be recovered.

Change-Id: I2b8232edc20e71b04a3f106107c0c7bc6333f66a
2022-09-25 13:28:14 +01:00
Ed Sanders 688cdc24ae Move "Return to comment" below sticky header when present
Also ensure that when we click the button, we scroll the widget fully
into view below the sticky header.

Bug: T318474
Change-Id: I394f02912cd6ab2773552a7364691ef89a17369c
2022-09-25 13:28:12 +01:00
David Lynch 968250bb02 Add mw.track call when comment setup fails
Bug: T310390
Change-Id: I6df98032469931276ea096a008fdf8f63893dff5
2022-09-14 01:23:07 -05:00
Ed Sanders 434e11df87 Enable new comment notifications on mobile
Since writing this feature we added the ability to update
the page dynamically on mobile, so this shoud just work now.

Bug: T301929
Change-Id: Iceb5d8c90a892807745ba7133b7dd389293d3327
2022-07-31 00:07:14 +01:00
Ed Sanders 2a31eed846 CommentController: Scroll before focusing in showAndFocus
This removes the need for a setTimeout before scrolling.

Change-Id: I1c47d5635f66ed523b492c384464e2e6accabf01
2022-07-07 13:43:16 +01:00
Ed Sanders 487be9e202 Show error message as soon as we detect the parent comment has been deleted
Bug: T300504
Change-Id: I654422f7931f50503e51500508aea728adf327a1
2022-03-04 00:40:29 +00:00
Ed Sanders d619308098 Don't show auto-save notifications when dynamically updating the page
Bug: T302327
Depends-On: If94e603458a385ba6eb15c4e29144f72e3ad12ca
Change-Id: I28f965137b986d00ac7a020ca93d8dc5195f5d4f
2022-03-04 00:40:29 +00:00
Ed Sanders da49448f43 Poll for new comments in the section you are replying in
Bug: T300504
Change-Id: I3a887ab2f5260bb4893a3d680103c9d8ec767f45
2022-03-04 00:40:29 +00:00
Bartosz Dziewoński 8e44b43df0 Split off ThreadItemSet from CommentParser
Goal:
-----
Finishing the work from Iadb7757debe000025e52770ca51ebcf24ca8ee66
by changing CommentParser::parse() to return a data object, instead of
the whole parser.

Changes:
--------
ThreadItemSet.php:
ThreadItemSet.js:
* New data class to access the results of parsing a discussion. Most
  methods and properties are moved from CommentParser with no changes.

CommentParser.php:
Parser.js:
* parse() returns a new ThreadItemSet.
* Remove methods moved to ThreadItemSet.
* Placeholder headings are generated slightly differently, as we process
  things in a different order.
* Grouping threads and computing IDs/names is no longer lazy. We always
  needed IDs/names anyway.
* computeId() explicitly uses a ThreadItemSet to check the existing IDs
  when de-duplicating.

controller.js:
* Move the code for turning some nodes annotated by CommentFormatter
  into a ThreadItemSet (previously a Parser) from controller#init to
  ThreadItemSet.static.newFromAnnotatedNodes, and rewrite it to handle
  assigning parents/replies and recalculating legacy IDs more nicely.
* mw.dt.pageThreads is now a ThreadItemSet.

Change-Id: I49bfe019aa460651447fd383f73eafa9d7180a92
2022-02-21 16:22:32 +00:00
jenkins-bot e8e9ba5f98 Merge "Fix some typos in comments" 2022-02-08 20:00:11 +00:00
Bartosz Dziewoński 5945a4a0eb Fix some typos in comments
Change-Id: I699d9d105b8706cef0800ccc086cde687de54078
2022-02-04 20:36:28 +01:00
Ed Sanders e2f3c2f264 ReplyWidget: Introduce a 'refresh' teardown mode that preserves auto-save
Change-Id: Ibb04f7c2813b9d3cf2bb2434a414c86eb0a7f644
2022-02-02 18:38:22 +00:00