Commit graph

210 commits

Author SHA1 Message Date
Ed Sanders c8d24ebd17 build: Replace jscs/jshint with eslint
Change-Id: Iee1d1b20ed31e636bfb8fc8cf9b18ff328bf608c
2016-11-23 15:25:59 -08:00
jenkins-bot 84ad297d8e Merge "(re)Add JavaScript hooks to Notifications" 2016-10-14 22:36:37 +00:00
Moriel Schottlender e9264022a7 (re)Add JavaScript hooks to Notifications
Added the following Javascript hooks:
* ext.echo.notifications.beforeRender: Firing before a group of
  notification widgets are rendered, whether in the popup, in
  the special page, or in a cross-wiki bundle (which requires
  async loading)
* ext.echo.badge.countChange: Fired when the badge count changes
  with the notification type, count and the label count for
  display purposes.
* ext.echo.popup.onInitialize: Fired when the popup is opened and
  after notifications were fetched, with the context of the popup
  notification type.
* ext.echo.special.onInitialize: Fired when the special page is
  ready and notifications were fetched. Note that it will be fired
  whenever the special page is updated with notifications list,
  as well, like when changing filter, remote wiki or pagination.

The hooks were also documented in hooks.txt

Bug: T146296
Change-Id: Ie3dc97f97e8d1f90b67f62fcdc65dd29cb379aad
2016-10-14 17:25:25 -05:00
Kavitha Muthu cc2189f009 Remove notifications bottom controls
Bug: T140964
Change-Id: I5c1a07161ab75de0537c002785da89ebeadc508a
2016-10-13 14:16:46 -07:00
Roan Kattouw 4e5d2a8aa6 Use colors for pressed/selected options in the Special:Notifications sidebar
Unfortunately there's no generic support for using colors for icons in
OOUI yet, so we have to copy what OutlineOptionWidget does and
override setPressed()/setSelected() to add/clear the progressive flag.
Also reintroducing colors for text which are aligned with icons on
the different states and use transitions.

Change-Id: I07cf4011d28c1db4eefb451367e29c271b5efaeb
2016-10-04 17:21:26 -07:00
jenkins-bot 717b53dbe4 Merge "Make notifications top toolbar controls sticky" 2016-10-04 22:37:27 +00:00
Kavitha Muthu eed48aa7fe Make notifications top toolbar controls sticky
Bug: T140964
Change-Id: I483c91344918f602da3280b9f8ad7e966bf55596
2016-10-04 22:27:49 +00:00
Touhid Arastu 50384e2f30 i18n: Native digits on CrossWikiNotificationItemWidget
Change-Id: I982319c81405917461297e96e47030953d5070d4
2016-10-04 13:49:57 +03:30
jenkins-bot f40f1aa36c Merge "Convert 'seenTime' to a global property" 2016-09-20 23:22:26 +00:00
Moriel Schottlender 1575e2bb7a Convert 'seenTime' to a global property
This transforms seenTime concept to a global property for all wikis
and sources, and updates the global seen time on opening the popup.

Bug: T134855
Change-Id: I67bcc4b346237317c7a9204dd43cd0e9ee02792f
2016-09-19 14:37:31 -07:00
Moriel Schottlender 58c53af1d1 Remove primary link from the bundle of page linked notification
Also, make sure that the bundle follows the same behavior as the
xwiki bundle, where if it does not have a primary link, the 'click'
event triggers the 'expand' action.

Bug: T145902
Change-Id: I456bf76a7bd531ffcad5462708f37cd54d8af99d
2016-09-19 14:16:43 -07:00
Catrope bba984c002 Revert "Make seen/unseen badge more consistent across wikis"
Has bugs, and will likely cause deployment problems.
This'll need to be reverted in wmf.19 at least
until we fix it up.

This reverts commit 00e0b9f45d.

Change-Id: Ia9d220ebcb607f96dee6bc856755305ed8501fcc
2016-09-13 14:21:32 -07:00
jenkins-bot 4063a26c0e Merge "Allow for count cap display in Special:Notifications sidebar" 2016-09-13 17:26:36 +00:00
jenkins-bot 1159a14b1f Merge "Generalize getCappedNotificationCount and move to counter" 2016-09-13 16:07:18 +00:00
Moriel Schottlender fcc2e1ddfc Allow for count cap display in Special:Notifications sidebar
Some of the counts are capped (wiki counts) and some are not (page
counts) - so we are adding a config option ('isCapped') to the
widget to make sure that capped numbers appear with the proper
i18n message ('99+' in English) and non-capped numbers appear
as-is.

Bug: T144707
Change-Id: I7332e7f5108621d0bd403edefe4feacca44b1f88
2016-09-12 16:35:38 -07:00
Moriel Schottlender dbd2f4ccf7 Generalize getCappedNotificationCount and move to counter
This follows the generalization we made in the back-end and allows
us to always use the same method to get capped notification count
in the display.

Bug: T144707
Change-Id: I4d7f406b05a195972dca0d2088bde2ff739d313d
2016-09-12 15:32:52 -07:00
Moriel Schottlender 5e8377b2f6 Make sure to use mw.language.convertNumber on displayed counts
In the special page, the counts should always display with
mw.language.convertNumber.

Change-Id: I9acafff9a35f2d3a1eb83ad003e57491905cb233
2016-09-12 22:02:13 +00:00
Moriel Schottlender 42832ad04a Use echo-badge-count message for cross-wiki counts in Special:Notifications
These numbers are already "capped" for display as 99+ after they pass
100, so we should use this message for proper display.

Individual page number counts are not capped (they are accurate) so
they can remain the same.

Bug: T144707
Change-Id: Iecb877c11e2f372d58f4fc926119dbf3b316e825
2016-09-09 13:11:34 -07:00
Moriel Schottlender 00e0b9f45d Make seen/unseen badge more consistent across wikis
- Add a 'hasUnseen' data to the xwiki bundle so the badge can
  consider its value when changing its color even without the
  bundle being opened.
- Check and store seenTimes from all sources that the xwiki
  has in a new JS object that the SeenTimeModel can store

Bug: T134855
Change-Id: Ifdcee88b4378cdc7acb4ae5c0cbc60b76339757e
2016-09-08 12:40:15 -07:00
Moriel Schottlender ed453c1026 Hide separator when bundled item is expanded
Bug: T142260
Change-Id: I5ea12d426c29a4b82bdfa5453d14841800b7a108
2016-09-07 16:44:03 -07:00
jenkins-bot 32e8a8c845 Merge "Add confirmation popup widget" 2016-09-02 23:28:09 +00:00
Moriel Schottlender 4047f2f2c1 Hide xwiki widget separator when widget is expanded
Bug: T142260
Change-Id: I24fbd6bd2eba3c7b2d16cb1e46130cfd4a981fb3
2016-09-01 14:30:49 -07:00
Moriel Schottlender f449c68780 Add confirmation popup widget
Mainly used for mobile actions, and should be appended to the
overlay - this widget assumes it should appear and then fade out
with some confirmation message.

Also moved 'doubleCheck' icon to the ooui definitions, including
an inverted icon that is necessary for this widget.

Bug: T141404
Change-Id: I67a44962eaee6b7bd8cac26dcb5277177fa5d224
2016-08-31 14:47:59 -07:00
Moriel Schottlender 4eab01b3b4 Display a message when API fail due to session end
Bug: T144231
Change-Id: I3ced44de097ba5b17d9edb91d4e3c527a5f18f03
2016-08-29 12:56:56 -07:00
Matthew Flaschen 299b66f937 Dynamic actions: Reuse label/description for those fields
This is necessary to preserve backwards compatibility for the API, and
this also fixes the no-JS special page.

Also, fix additional warnings.

Change-Id: Id603b4ab22c69097d5559a756bec72a6ba785661
2016-08-25 22:00:25 -04:00
jenkins-bot 4e99a5095f Merge "Add dynamic secondary actions to notification items" 2016-08-23 17:43:08 +00:00
Moriel Schottlender 480ce92bd8 Add dynamic secondary actions to notification items
Allow extensions to add dynamic actions that perform some
API request and display a confirmation message.

Bug: T132975
Change-Id: Ib16d57c3f1a11a9749564c6e2112bf1ca32c55e8
2016-08-22 16:04:48 -07:00
jenkins-bot 8f7edc6901 Merge "Revert "Dim the title of current wiki if it has 0 notifications"" 2016-08-17 23:01:15 +00:00
Catrope 0e52416fcb Revert "Dim the title of current wiki if it has 0 notifications"
We decided we didn't want this behavior after all.

This reverts commit eadaac1c84.

Bug: T139646
Change-Id: Ib71f8000a59e66968c0fa161e3ab59b9ebdb3b1a
2016-08-17 22:51:28 +00:00
Moriel Schottlender 879ff56756 Log the mark entire cross-wiki bundle as read action
Bug: T127955
Change-Id: Iddff3592915c1f7d71622c1137abc725985fb3c2
2016-08-15 17:18:27 -07:00
Moriel Schottlender 951f146b54 Emit sortChange only for read/unread actions
Do not emit sortChange for toggleSeen, because every sortChange
creates a fake widget with a flipped 'read' state. There is no
reason to emit the sortChange event in toggleSeen anyways so it
is safer when only emitted in togglRead.

Also, make sure the controller always updates the correct seenTime
from the API when fetching local notifications. This was done for
the special page method but was overlooked for the fetching of local
notifications. For the most part, it shouldn't be affecting too much
because the SeenTimeModel is initialized with wgEchoSeenTime (which
is local) but updating the controller with the API response is the
safe thing to do, and will also cover cases where a tab was open,
notifications were seen in a different tab, and now the popup was
reopened in a "stale" tab again.

Bug: T143067
Change-Id: Ie261e32db28926d04fe14f7badd9d287ddc52749
2016-08-15 16:53:09 -07:00
jenkins-bot ccab1d8351 Merge "Log 'mark all read' button click actions" 2016-08-11 20:58:31 +00:00
jenkins-bot 65d4368860 Merge "Round timestamps to the day when displaying date titles in Special:Notifications" 2016-08-06 04:49:21 +00:00
Moriel Schottlender b02a6e8b26 Log 'mark all read' button click actions
The actions logged:

* Popup: Mark all notifications in the popup as read
  - Event ID is omitted
  - Context 'flyout'
* Special page: Mark all notifications in current wiki
  as read
  - Event ID is omitted
  - Context 'archive'

Bug: T127955
Change-Id: Id7c091f9e0cf0dd3745d33e335ab44706581d7f3
2016-08-05 13:33:47 -07:00
Moriel Schottlender 8d3b4fad2c Round timestamps to the day when displaying date titles in Special:Notifications
Bug: T141915
Change-Id: I5fcb78ac2fa168aa8bba90c467544fe3a6914ec3
2016-08-04 12:58:06 -07:00
jenkins-bot 2d390bad2e Merge "Add a footer notice inviting users to visit the Special:Notifications page" 2016-08-03 19:51:08 +00:00
jenkins-bot dedca66c8a Merge "Implement subject+talk and null+user page grouping" 2016-08-02 22:01:27 +00:00
Moriel Schottlender 75f6c11524 Add a footer notice inviting users to visit the Special:Notifications page
Bug: T141414
Change-Id: I6d9f9db62ecb85e70f72a9eb5a09e8ea1c8eebc2
2016-08-02 13:59:04 -07:00
Roan Kattouw 4e64643eb7 Implement subject+talk and null+user page grouping
Make it optional through the unpgrouppages parameter, so that
generic usage of the unreadnotificationpages API is still possible.

In the front-end, store which display title maps to what set of titles,
and pass in the full set rather than just the display title when
filtering by a page.

Bug: T137502
Change-Id: I443ca00ff5e5d36fd6910101226358942e6aa8ee
2016-08-02 13:48:48 -07:00
jenkins-bot 3be9a2e212 Merge "Update and fetch seenTime per source" 2016-08-02 19:57:12 +00:00
Moriel Schottlender 9e206ef8f5 Reduce number of prioritized actions in mobile
For mobile view, only display 1 prioritized action in the items,
and for general desktop view, stick to the default 2.

Bug: T141788
Change-Id: Ibf386ee598553ecfb717f07f02688034bbc338c8
2016-08-01 16:31:18 -07:00
jenkins-bot 9db03278b8 Merge "Fix fade-in/out animation in sorting" 2016-08-01 22:08:30 +00:00
Moriel Schottlender f4a955efe9 Fix fade-in/out animation in sorting
The fade in/out animation is asynchronous. This means that if we are
sorting multiple items one after the other, by the time the item faded
out, it will be reinserted back into the wrong position, breaking the
sorting.

This also broke the promise of OO.SortedEmitterList whereby all its items
are always in order.

The way to fix this was to force a better synchronization with the item
order while we hide and show the item in its new place. To do that,
a new widget is created as a fake clone of the old one, in the original
position of the old one. The original item is then reinserted (while hidden)
to the proper location -- preserving order. The fake clone is then faded
out, and the real item is then faded in.

For this to work properly, the cloned item had to preserve some of the
original item's information, like timestamp, foreigness and id. However,
since both the real item and the fake new clone have the same details,
the clone fakes its ID by adding a fraction to it - promising that the
fallback in case of equal timestamps (which happens on the real and
cloned items) will still resolve with some decision about the placement
of the items rather than (falsely but understandably) decide they are
both the same.

Since this whole animation is somewhat of a hack, the list now has a
configuration parameter to turn the animation on.

The animation is on in the popups, but off in the special page.

Bug: T141419
Change-Id: Ic7c35e5ddefc51bf7fde497eab36414b4dddcd9e
2016-08-01 13:49:10 -07:00
jenkins-bot 5f04fc334c Merge "Redo the notification badges" 2016-07-29 22:53:34 +00:00
Moriel Schottlender 1553a1a520 Remove 'mark as unread' from dotdotdot menu in items
Bug: T140517
Change-Id: Ie6c0f003239d4a683a1651df9470074668faa4eb
2016-07-28 15:47:42 -07:00
Moriel Schottlender 51331f318a Update and fetch seenTime per source
Also update the seenTime of the remote wikis when opening the
cross-wiki bundle.

Bug: T134855
Change-Id: I10510fc612f7d5349f8b579ede70be647a119470
2016-07-27 17:39:45 -07:00
Moriel Schottlender 9ab351352f Redo the notification badges
Bug: T115845
Bug: T140900
Depends-On: Ic666540d70de52f
Change-Id: I34e2736490319989a3a251a43fbe8080ab960b00
2016-07-27 11:51:05 -07:00
Matthew Flaschen c0a464e425 BREAKING CHANGE: More ISO 8601 for seen time
* Add ISO 8601 date format to notification output

  This is actually supposed to be the only output date format used,
  per https://www.mediawiki.org/wiki/API:Data_formats#Timestamps , but
  I'm not doing anything to deprecate the others right now.

* Change wgEchoSeenTime to use ISO 8601.  mwgrep and extension grep do
  not show any usages.  However, since it is a breaking change, to
  minimize disruption, I'm also using this opportunity to change
  'message' to 'notice'.

* Remove wgEchoInitialNotifCount.  I was going to also change 'message'
  to 'notice' here too, but then I saw it was totally unused.
  (It was read in Echo to populate a JS variable, but then it was
  unused.)

* Make sure the Special:Notifications page aggregation by days is
  done by local days, even though the timestamp per item is still
  UTC. This is to make sure the days are displayed correctly in
  the local timezone.

* Change all reverse sorting callbacks to handle comparisons of
  ISO 8601.

Bug: T141413
Change-Id: I20271345c7d350dc3e7f467288e5cdc98e6250cc
2016-07-27 02:42:08 +00:00
Moriel Schottlender 1dd3af10bb Adjust mobile view for the new settings cog menu
Now that we have the cog menu, it should be placed correctly in
mobile and the "preferences" link should be hidden.

Since MobileFrontend doesn't have the personal toolbar, and we
can't cheat by using jQuery and grabbing the url of preferences,
we have to get SpecialNotifications.php to output the urls
to a wg variable and reading it from there.

Bug: T115528
Change-Id: I6a69823d6f75c376c04e9a21d79916321e417178
2016-07-25 19:30:44 +00:00
Moriel Schottlender d739b89d77 Add a down indicator to the cog menu
As pointed out by Roan, this is the consistent way ooui elements
are displayed when they have a drop-down menu.

Change-Id: I36ecdd4cf6374dff34be15b24959548887788130
2016-07-22 15:06:28 -07:00
Moriel Schottlender 35a5384900 Change 'pt-notification-message' to 'pt-notification-notice'
And change all CSS and JS dependent calls/tags based on the new
tooltip message and ID of the personal tool <li> item.

Change-Id: I136fabe5710f90da10eb8d4afe92acdb77571eec
2016-07-21 11:19:17 -07:00
jenkins-bot e1b2823703 Merge "Add a mark-all-read button and a settings menu to Special:Notifications" 2016-07-21 14:04:39 +00:00
Moriel Schottlender 545d4e67ae Add a mark-all-read button and a settings menu to Special:Notifications
Add a global-wiki 'mark all as read' to the Special:Notifications page.
The 'mark all as read' will makr all notifications in the given
wiki. The context of the wiki changes when filters are chosen,
and so the message of the button changes as well.

Bug: T115528
Change-Id: Ibd9dcdf7072d6cbc1a268c18e558e6d0df28f929
2016-07-20 17:25:38 -07:00
jenkins-bot 1c7d93ba00 Merge "i18n: Native digits on PageNotificationsOptionWidget and PaginationWidget" 2016-07-19 21:53:38 +00:00
jenkins-bot 47de8691eb Merge "Show placeholder widget when there are no notifications" 2016-07-19 20:25:46 +00:00
Stephane Bisson c21c5cc821 Show placeholder widget when there are no notifications
When there are only foreign notifications, marking them all
as read empties the flyout completely. With this change,
we now show the placeholder widget with the 'no notifications'
message instead.

Bug: T132202
Change-Id: I7ee38b160ca03c08711670a3296ba4ab45a5eb6c
2016-07-19 20:14:39 +00:00
jenkins-bot 8b0dbd2031 Merge "Relate read-state filter and mark read/unread action" 2016-07-19 15:22:48 +00:00
jenkins-bot 060bc4e8b5 Merge "Fix truncation of notification headers" 2016-07-19 00:28:11 +00:00
jenkins-bot 184874473d Merge "Add tooltips to page filters" 2016-07-19 00:07:03 +00:00
Roan Kattouw d36c0ab123 Fix truncation of notification headers
We need a fixed-width CSS table with a number of fixed-width
cells and one cell that takes up the remaining width, with
text truncation. This is a pain to do with CSS tables,
but this trick I found on StackOverflow[1] works well:
wrap the contents of the cell in a div that's position: relative;,
containing another div that's position: absolute; width: 100%;

[1] http://stackoverflow.com/questions/7569436/css-constrain-a-table-with-long-cell-contents-to-page-width

Bug: T140349
Change-Id: I507f915f06185c767d7a5c8edbff6c341e07b6e2
2016-07-18 17:06:48 -07:00
Moriel Schottlender 5aaf6d26d8 Relate read-state filter and mark read/unread action
When we are viewing a certain read state filter ('read' or 'unread')
the visibility of items should correspond to that state even when
the user marks a specific item as read/unread. That means that the
system should remove these items from view when the action is taken.

In this commit:
* The controller makes the judgment of whether to remove items when
  read/unread action is taken, based on whether a filter is set.
* We clean up the terminology of discard - no more 'remove' - to
  make sure we have consistency in the code.
* Related: The 'discard' event is now scoped within the hierarchy;
  meaning, lists emit 'discard' when an item is removed, grouplist
  emits 'discard' when a group is removed, and the manager emits
  'discard' when an entire notification model is removed. This
  means we can actually have proper hierarchy and organization with
  a single event, and not worry about clashing between the intentional
  'discard' action and the event 'remove' that is also used while
  resorting happens.
* The model manager emits a discard event when a model is removed
  so that the general list can listen to the manager and remove an
  entire batch of items if needed.
* The pagination model now updates the count for the current page
  rather than some vague notion of the last page. This is also
  updated when the controller removes items, so we can get an
  accurate count in the page for the number of notifications that
  are displayed.

Bug: T136891
Change-Id: I247c618042ef256fadf09922f7b83bd1ad361f64
2016-07-18 13:23:57 -07:00
jenkins-bot d27cab59d6 Merge "Add a SeenTimeModel to handle seenTime in sources" 2016-07-18 13:01:35 +00:00
jenkins-bot 9352ce9756 Merge "Dim the title of current wiki if it has 0 notifications" 2016-07-15 19:09:43 +00:00
Moriel Schottlender eadaac1c84 Dim the title of current wiki if it has 0 notifications
Bug: T139646
Change-Id: I827cb43d5badd0a13666226691450a73ddcc85ea
2016-07-15 11:42:47 -07:00
Moriel Schottlender 3a710790d5 Add a SeenTimeModel to handle seenTime in sources
This organizes the operation of seenTime so we can store and
follow up on it based on different sources, as well as update
it correctly remotely when needed.

Change-Id: I629ecfc84999be998b45c9c7adb00ea7e3e51742
2016-07-15 11:25:38 -07:00
Moriel Schottlender 7660732bb7 Fade in/out elements that are moved in the notifications list
Bug: T126214
Change-Id: Iad5df1f56bfbd12cb6f42dd6e73860bdcc27cd68
2016-07-15 18:04:49 +00:00
Ed Sanders f000a82c1d Fix messages/notices documentation
Bug: T139682
Change-Id: I453b7377c13ca172774e103c1f097423bf68e9b2
2016-07-14 13:45:23 +01:00
Moriel Schottlender ac5c9c17f8 Prevent click propogation when clicking 'mark as read' button
Bug: T139339
Change-Id: I3a19a0d01b036fe3c0379e3a5bc0c3f0e5f9473e
2016-07-13 11:30:55 -07:00
Stephane Bisson 35e782c3d8 Add tooltips to page filters
Bug: T139644
Change-Id: I6ae0d0e8c6c7dd79b9ab00db1d601f670764d3a4
2016-07-13 09:51:51 -04:00
Ebrahim Byagowi 4eba4c1dd0 i18n: Native digits on PageNotificationsOptionWidget and PaginationWidget
Similar to Icdd52ea0267ffbaa0e103070655735eff8423ca1

Change-Id: I8667fc8b7027d2c9c8b42155a7b79ef18500dc2b
2016-07-09 07:52:23 +00:00
jenkins-bot 152bd3e622 Merge "Store local source as 'local' rather than dbName" 2016-07-08 14:27:51 +00:00
jenkins-bot 28aca00dce Merge "Properly aggregate the itemUpdate event" 2016-07-08 14:16:20 +00:00
Moriel Schottlender 4b137b3208 Followup Ib7f4dc4ea: Bring back message tooltip with 'notice' text
The message for tooltip-pt-notifications-message was removed to comply
with the new naming. The problem is that in the back end, sections are
still defined as 'message' vs 'alerts' and the sections in the user
toolbar are defined with those terms. In no-JS mode (which is before
the user clicks any of the badges) this tooltip is created automatically
by MediaWiki based on class names.

It's easier to return the message key with different text for translation
and wait for the bigger tech debt to correct all instances of 'message'
to 'notice' (including in the API, which would require a much more
massive work)

Bug: T139520
Change-Id: I6368b63e38f64aa065f2580df812de1c63a93716
2016-07-07 17:09:18 -07:00
Moriel Schottlender 7879f0c9f8 Change 'messages' to 'notices' throughout the interface
Bug: T139520
Change-Id: Ib7f4dc4ea1ff4c5d1fccdc5fdf0c66b049162cb2
2016-07-07 15:57:49 -07:00
Moriel Schottlender fcd2f41151 Store local source as 'local' rather than dbName
When we fetch the pages per wiki, the API returns an object that
defines the local wiki we are in as its dbName; this then gets
stored into the model as the source, which forces us to check against
the dbName whenever we want to perform an operation so we can tell
the API layer to fetch and perform the actions locally, rather than
use a foreign API.

The term 'local' makes no sense for naming the model (and upcoming
tech debt work will fix this) but it makes sense in the context of
the API layer -- and hence, the source name should follow suit.

This fix makes sure that the local wiki objects always have their
sources defined to be 'local', and thus making us use the test for
dbName in very specific points (when we get the data) rather than
throughout the codebase, randonly.

This is also the first step to allow proper updating of things like
seenTime accross wikis, especially in cases where we view a remote
wiki as if it is local (in the Special:Notifications page)

Change-Id: I94633a1cd074580cbc5029d7c75d179e908e5c52
2016-07-07 12:20:39 -07:00
Moriel Schottlender 5c81ac8d3b Properly aggregate the itemUpdate event
Instead of 'cheating' and externally aggregating the itemUpdate event
we should just let the relevant (non-xwiki) models aggregate this
centrally and properly, and include it as an offered event.

Change-Id: Ibe528fe971e1be8309a97275b1a1be8979306ff5
2016-07-07 19:08:47 +00:00
Stephane Bisson cead7142c7 Fix mark xwiki as read
Marking local or xwiki notifications as read
are different operations that require different
information. Call different functions on the
controller.

Bug: T139114
Change-Id: I824ca668c31ab41d101c632442c91d3a8a1e5c5a
2016-07-04 10:00:59 -04:00
Moriel Schottlender ce354678b4 Limit 2 secondary actions outside the menu
If there are more than 2 prioritized actions, put those actions
in the dotdotdot menu.

Also, correct the name of a variable from "isInsideMenu" to what
it actually represents, which is, in fact, "isOutsideMenu"

Bug: T126617
Bug: T125949
Change-Id: I95fcae8f822e51d9353599c09f1550797e4ad673
2016-06-30 11:59:37 -07:00
Stephane Bisson f8a8d392d6 Expandable bundle
Support bundles being expandable
to show their sub-notifications.

Bug: T114356
Change-Id: I1507cae360f45cc87f2d60e966b4d047abfa202d
2016-06-28 15:37:54 -04:00
Moriel Schottlender e15c258d7b Remove initiallyUnseen before marking item read/unread
If we are marking the item as read/unread, we don't want the change
in class to trigger the unseen animation. When that happens, first
remove the 'initiallyUnseen' class (that triggers the animation)
and only then mark the item as read or unread.

Bug: T138522
Change-Id: I05e02518feb1fc166297594053a084718dcb7194
2016-06-28 11:25:39 -07:00
jenkins-bot 1cca7453b3 Merge "Add a PromisePrioritizer and use it for notifications fetching" 2016-06-27 17:42:41 +00:00
jenkins-bot 711e2f84c2 Merge "CrossWikiUnreadFilterWidget: Remove unused this.localSource" 2016-06-27 13:28:06 +00:00
Roan Kattouw 8bb8594940 Follow-up 6c4bf99da8: Fix incorrect comment
Change-Id: I14df92823d8e3c19b94cc225f00d45315e8300c5
2016-06-24 01:14:47 +02:00
Moriel Schottlender a1ec29d06a Add a PromisePrioritizer and use it for notifications fetching
This will allow us to let the user click filters quickly, effectively
changing the promises sent to the API, but let the API only resolve
with the latest requested promise.

Bug: T136895
Change-Id: I698a2b8eced6d8ee997efef353697d27d92cfb2f
2016-06-23 14:12:00 -07:00
jenkins-bot c90176a2cb Merge "ApiUnreadNotificationPages: Output pages as an array rather than an object" 2016-06-23 19:35:37 +00:00
Roan Kattouw eae458801f CrossWikiUnreadFilterWidget: Remove unused this.localSource
This also means PageFilterWidget can stop worrying about being
given a nonexistent source.

Change-Id: Id999a117c66d0600a4386713c98501cc5ed4236a
2016-06-23 17:44:08 +02:00
Roan Kattouw 6c4bf99da8 ApiUnreadNotificationPages: Output pages as an array rather than an object
Make the frontend code based on page titles rather than page IDs.

Change-Id: I79c6a0e3a7178acdb14039a0c5208e90a7341044
2016-06-23 17:00:51 +02:00
Stephane Bisson c93800e17c Support for PlaceholderWidget with no link
Bug: T137490
Change-Id: Ia861b5aa3f100124418956a0e09603a9ba29215a
2016-06-22 12:54:13 -04:00
jenkins-bot 45d8fdf24f Merge "Add a cross-wiki sidebar to the Special:Notifications page" 2016-06-21 21:57:48 +00:00
Moriel Schottlender 820d2b0fa7 Add a cross-wiki sidebar to the Special:Notifications page
Add a sidebar with cross-wiki sources and pages of unread notifications.
The filter allows the user to fetch notifications from a foreign source
and specific pages if those exist.

Bug: T129366
Change-Id: I57d827a47f80274d75364c2099a9624049a26834
2016-06-21 14:49:42 -07:00
jenkins-bot b846c11910 Merge "Change mark as read buttons to circles" 2016-06-21 19:06:00 +00:00
Moriel Schottlender f84808b83a Change mark as read buttons to circles
Allow for mark read and mark unread through the side button, and
change its style according to spec in the ticket.

Bug: T126214
Change-Id: I78a93c0545bbe2d7c11a0c62557cd2e97e9d3866
2016-06-21 11:54:00 -07:00
Roan Kattouw 92d1d600ae SubGroupListWidget: use timestamp from model, not from listWidget
This ensures that the fallback timestamp is used if the list is
still empty. Not doing this causes the wikis in the cross-wiki bundle
to appear in the wrong order. Also, it makes more sense to use the
model as the source of truth regardless.

Bug: T138115
Change-Id: Icbfdc7e7c7f67179e50f0f692aef1a54568265e6
2016-06-21 13:41:45 +00:00
Roan Kattouw 2872b5eae2 Remove automatic mark-as-read-when-seen
Bug: T132525
Change-Id: I095704252eaf2f8fe71950a4cfcd42a6fce431ff
2016-06-17 17:09:25 +01:00
Moriel Schottlender 3101bfc537 Separate model's symbolic name and model's source
This should have been done from the beginning; the model manager
pulls models by their symbolic names. So far, we've used the source
for that, but that assumes that two modules always have different
sources, and that is absolutely not necessarily the case.

For example, internal local bundles will each be a model, but have
the same ('local') source. They should still be differentiated in
the manager by their names, but the source should state clearly that
it is local.

For this, the models now have "getName" method and the name is
created separately from their source. Items also preserve a
reference to their parent's symbolic name so they can provide
that for items that require the controller to manipulate a specific
model.

Change-Id: I8c39d5d28383d11fb330addce21e07d5c424da6f
2016-06-09 16:20:57 -07:00
Moriel Schottlender df18946387 Listen to 'mark as read' secondary link in xwiki bundles
We weren't even listening to the choose event from that menu in
xwiki bundles.

Bug: T136878
Change-Id: Ib15bb6888dadd154b97e5820972cdcdf8bd89d2e
2016-06-03 12:37:18 -07:00
Moriel Schottlender cf99479468 Display a message if there are no notifications in Special:Notifications
The zero results can either be because there are no notifications
at all for this user in the local wiki, or because there are no
results for the specific filter. Both messages are used for either
case.

Also, clean up the display of push/pop pending for the inbox widget
and hide the label in case the message count is 0 or 1 notifications
as it is unhelpful and irrelevant in these cases.

Bug: T136586
Bug: T136574
Bug: T129363
Change-Id: I1465f772bb9f5247df645d6612f951e5fd7d38cf
2016-05-31 23:13:48 +00:00
Moriel Schottlender 6e21a620ef Clean up the pagination in Special:Notifications
Add a pagination widget with events and separate the logic for
organization. Let the widget listen to events from the pagination
model so it always keeps itself updated.

Change-Id: Id1df112cbb0d90195217e88fbee97a59170b99c5
2016-05-31 16:12:09 -07:00
Moriel Schottlender 070656731d Adjust styling for Special:Notification items
The items should resemble the popup items, but the styles clashed
with the popup's cross-wiki notification item, so the image size
was smaller and the border was incomplete.

Bug: T136572
Change-Id: I3c3f825d469ccee1e711da21f627eeb9491e9480
2016-05-31 11:30:35 -07:00
Moriel Schottlender cc3e40b408 Make the notifications list the pending element
Change the pending element to be the notifications list rather than
the whole inbox widget in the Special:Notifications page.

Bug: T136581
Change-Id: I82b073c9cd628f30c13305510d6604e3ef636c2a
2016-05-30 17:24:12 -07:00
Roan Kattouw d6c340f591 Display error message on API failure or empty result
Show an API failure message if the request failed.
Also take this opportunity to show a message in case
there are no notifications at all.

Bug: T136467
Change-Id: If5761ec3d3df10a8774561bed06a4ade54458c4b
2016-05-30 15:01:33 -07:00
jenkins-bot a0aead0416 Merge "Fix JS error when API request fails" 2016-05-30 08:59:50 +00:00
Roan Kattouw ab1bcbefd4 Fix JS error when API request fails
We don't show an error message in this case, just an
empty popup, so that should be fixed regardless.

Bug: T136467
Change-Id: I06ddd5306bd8d7edeb8c75bdae7abd7215285e3d
2016-05-29 21:18:59 +00:00
Moriel Schottlender e5e19dd0f1 Filter notifications by read state in Special:Notifications
Change-Id: I7b47e76ae48eaf4732d99616baa3b4b1ee4ddff5
2016-05-27 13:47:41 -07:00
Moriel Schottlender 9262614ded Initial version of Special:Notifications Javascript page
Bug: T129176
Change-Id: I2f55358c16f78e234ec19154b944a4edebfbe639
2016-05-27 13:42:25 -07:00
jenkins-bot b894c3407a Merge "Add style to the NotificationsWrapper" 2016-05-26 22:58:40 +00:00
Stephane Bisson 194b75cfed Remove technical error from echo-api-failure
Bug: T129764
Change-Id: Ia8779ff90b71c1c8b4df5b28fd61bfb891533b06
2016-05-26 13:43:14 -07:00
Moriel Schottlender c649c29e7d Generalize the SubGroupListWidget
Allow for the widget to have a mark-as-read button to its individual
groups, as well as change the event listening from 'remove' to 'discard'

The problem with 'remove' event is that it is triggered when an item
is either intentionally removed from the list *and* when an item is
changing its position in the list (move event includes 'remove' and
then 'add' event)

If we listen to 'remove' events we will get both cases, which is
unhelpful. Instead, a new event - 'discard' - was introduced so
we are certain it is used with the clear intention of removing the
item completely.

Change-Id: Ia08720bf4c547fa41edf62331eeb1a45ff4965b7
2016-05-26 18:44:16 +00:00
Moriel Schottlender 299adfe6b1 Add style to the NotificationsWrapper
We have to make sure that any notifications wrapper has the css
term overflow-y: auto; so that the popup menus behave properly.

Change-Id: I14a1a9f1c3610ef27fe04aa4b1e7197c08d1dfd4
2016-05-19 13:43:51 -07:00
Moriel Schottlender 8e76bc4126 Refactoring Echo's front end for MVC
Changing the way Echo's front-end architecture works to work with
model-view-controller methodology.

Change-Id: I97862402c41bc04dd41cd08d79f19ff677340249
2016-05-18 12:28:45 -07:00