Commit graph

202 commits

Author SHA1 Message Date
Kunal Mehta 31c770741a Don't depend upon ext.echo.logger in ext.echo.init
The logger code for clicktracking is only needed after something has
been clicked, so we don't need it in init.

* Move EventLogging initialization into Logger.js
* Add ext.eventLogging dependency server-side if needed

Change-Id: I46ff3c62b05c24dd2bb18a1574df17f9d2823125
2015-09-16 12:52:07 -07:00
Kunal Mehta c726c1ecab Measure how likely users open flyout if they have unseen notifications
If users are likely to open the flyout whenever they have unseen
notifications, we should preload some more resources to make those
intial openings faster instead of lazy-loading everything.

On the server-side, we will increment the MediaWiki.echo.unseen metric
whenever we serve a page when the user has unseen notifications. Then on
the client we will increment MediaWiki.echo.unseen.click if they opened
the flyout while having unseen notifications.
By comparing the two graphs, we can determine how likely users are to
click on the flyout whenever they have unread notifications, and how
useful preloading extra resources will be.

Change-Id: I14e9aa7f03d6ef275042b8a2c4cb0e5b5a64c0d7
2015-09-16 10:18:17 -07:00
jenkins-bot 1d9481f43c Merge "Only load ext.echo.ui if the user clicks the echo badge" 2015-09-16 17:14:51 +00:00
Kunal Mehta 9e75474b5f Split out .mw-echo-alert styles back into a separate module
Change-Id: Ia946eb3b7cd917f84b7ab57a280f55a3eadfcebf
2015-09-16 17:02:22 +00:00
Moriel Schottlender c5905962ab Only load ext.echo.ui if the user clicks the echo badge
There is no need to load the entire of Echo's ui module (especially
since that includes ooui widgets and their styles) on every page load.
There's only need to load the entire module if and when a user clicks
the Echo notification badge.

Also, make the echo.dm model accept an external fetchNotifications
promise so we can send the API request alongside loading the echo UI
and "feed" it into the DM for processing.

CSS adjusted to make the "jump" between the nojs and the js buttons
seem less jumpy.

Bug: T112401
Change-Id: I516e655ffd198511d694489a0702c5c713a5fd68
2015-09-15 17:11:46 -07:00
jenkins-bot 6c298f9145 Merge "Don't show orange alert if you are viewing your user talk page" 2015-09-15 23:01:26 +00:00
Kunal Mehta e4d8002d74 Don't show orange alert if you are viewing your user talk page
We cannot count on the user_newtalk flag being cleared since that
happens in a deferred update.

Bug: T107655
Change-Id: Ie954ed7c5a4e784c3feb86288943a56cfb9c23c0
2015-09-15 08:50:48 -07:00
Roan Kattouw f2ed7a6a53 Don't load unused Echo JS/CSS on mobile
MobileFrontend has its own implementation of the notifications
flyout, so don't load any of Echo's code. We do still need
ext.echo.nojs on Special:Notifications though.

Bug: T112571
Change-Id: If4d84810070ccd48a8007a3ff80733a7db30fdb3
2015-09-14 23:12:59 +02:00
Roan Kattouw 5b1fc2b818 Hack around OOUI's icon pack being too large by creating our own
Bug: T112401
Change-Id: Id2a527dc1f4846985beb2cc4d5562a27d5636d55
2015-09-14 22:21:45 +02:00
Roan Kattouw b046a1062d Don't load oojs-ui.styles on every page
We don't really need it to render the no-JS version
of the notification badges (the only rule we were missing
was background-repeat: no-repeat;) and it significantly
increased the amount of render-blocking CSS.

This means we do need to call setupOOUI() ourselves
in order for our get_class( OOUI\Theme::singleton() ) hack
to keep working.

Bug: T112401
Change-Id: I148f8ac19dfe62cc84abe03e1a2ff00683d515c1
2015-09-14 12:38:44 +02:00
Kunal Mehta 957c2b0c98 Only use inverted icons for skins using the MediaWiki OOUI theme
Otherwise it causes flashes due to colors changing in skins that don't
use it, like MonoBook

Bug: T111821
Change-Id: I03acdbcbfa3912b439a18187d52944931e94506a
2015-09-10 10:22:37 -07:00
Moriel Schottlender 73e3ed3717 Add a tooltip to the notification badges
Since the nojs "base" version uses the automatic title creation
of the personal tools, the message keys were adjusted accordingly,
and the old unified message was removed.

Bug: T108190
Change-Id: I1f242f530aa68562aa4dc885156586c22c4df618
2015-09-08 14:03:34 -07:00
Moriel Schottlender e650df6644 Separate 'seen time' for alerts and messages
Bug: T111285
Change-Id: I277f94ae705d3323ac8612111d7fd704b36793cb
2015-09-03 13:14:15 -07:00
jenkins-bot e6e507a9ee Merge "Use db-replicated objectcache for storing last seen time" 2015-09-02 22:50:43 +00:00
jenkins-bot da6544e275 Merge "Split alerts and messages in Echo" 2015-09-02 22:50:40 +00:00
Kunal Mehta 35c4a37918 Use db-replicated objectcache for storing last seen time
So we're not abusing user preferences for the last seen time.
EchoSeenTime is a small wrapper around ObjectCache that handles the
fallback to user preferences during the transition.

All JavaScript code now needs to use mw.config.get('wgEchoSeenTime').

Bug: T95839
Change-Id: Ia45ba5e30eb4564250539d04d5886d2598ebd49a
2015-09-02 22:42:35 +00:00
Moriel Schottlender 1ac72cc01a Split alerts and messages in Echo
Split the notifications into 'alert' and 'message' badget with two
different flyouts. Also clean up styling and module behavior.

** Depends on ooui change Id4bbe14ba0bf6c for footers in popups.
** Depends on ooui change Ie93e4d6ed5637c for fixing a bug in
   inverted icons.

** MobileFrontend must also be updated to support the new modules
   in this patch  I168f485d6e54cb4067

In this change:
* Split notifcations into alert and messages and display those in
  two different badges.
* Create two separate flyout/popups for each category with their
  notifications.
* Create a view-model to control notification state and emit events
  for both the popup and the badge to intercept and react to.
* Clean up module load and distribution:
  * Create an ext.echo.ui module for javascript-ui support and ooui
    widgets.
  * Create an ext.echo.nojs module that unifies all base classes that
    are needed for both nojs and js support, that the js version
    builds upon.
  * Create a separate ext.echo.logger module as a singleton that can
    be called to perform all logging.
* Clean up style uses
  * Move the special page LESS file into nojs module so all styles
    load properly even in nojs mode.
  * Transfer some of the styling from JS to LESS for consistency.
  * Make the 'read more' button load already with the styles it
    needs to look like a button, since its behavior is similar in
    nojs and js vesions, but before its classes were applied only
    by the js, making it inconsistent and also making its appearance
    'jump' from a link to a button.
* Delete and clean up all old and unused files.
* Moved 'Help.png' icon from modules/overlay to modules/icons for
  later use.

Bug: T108190
Change-Id: I55f440ed9f64c46817f620328a6bb522d44c9ca9
2015-09-02 15:36:37 -07:00
Aaron Schulz 854aae01c8 Defer clearTalkNotification() updates as they often happen on GET requests
Bug: T92357
Change-Id: I3c5aca7748675a62c3f4a48ac53f14002eda95ac
2015-08-26 16:31:58 -07:00
Kunal Mehta 064c1f1514 Load only the EchoInteraction schema client-side
The other schemas are not used client-side, just server-side.

Bug: T105220
Change-Id: I5e5e7b01998cee38693c9f5e22da6e86a5e13e96
2015-07-08 13:17:35 -07:00
Kunal Mehta 4d8b977ff9 Get rid of disabled 'echo-notify-show-link' preference
This preference has been disabled since bug 47562, and doesn't make
sense to keep around given that the flyout is the main interaction most
users have with Echo.

Change-Id: I7e8ddf96dbde9a95ac01a0cc83bad396151d01bd
2015-07-07 17:10:49 -07:00
Alex Monk 6b5a76939b chmod 644 a few files
Bug: T104721
Change-Id: Iee1ef18d3227807110d4e25f0c48f17907adf8ad
2015-07-03 19:31:15 +01:00
Kunal Mehta 23f877fe76 Remove unused 'echo-error-preference' and 'echo-error-token' messages
They stopped being used in 08fc83b6de.

Change-Id: I439d15e6c894b7358ee8add0d9c882eb791909c4
2015-06-24 09:41:20 -07:00
Kunal Mehta 1298f2bb74 Don't hook into ourselves: EchoGetNotificationTypes (part 2)
Change-Id: I51600bbb26594323831d22bc35d34587ff146d47
2015-06-15 17:43:54 -07:00
Kunal Mehta df452abbb6 Don't hook into ourselves: EchoCreateNotificationComplete (part 1)
Change-Id: I5f0f3929a3b0396c98e0f3e74b69ddcee744a0e8
2015-06-15 17:41:10 -07:00
jenkins-bot e6ffb55eaf Merge "Use "elseif", not "else if" in PHP" 2015-06-02 01:01:54 +00:00
Kunal Mehta 4d52bc2534 Use "elseif", not "else if" in PHP
Change-Id: I3a84f1c3ec9d4522f5f7f461a680561c8aeda29e
2015-06-01 17:59:05 -07:00
Kunal Mehta 70761a124c Cleanup LoadExtensionSchemaUpdates hook
* Use standard "on{hook}" naming pattern
* Skip hook if using an external database server ($wgEchoCluster)
* Don't return true, it's not necessary anymore

Change-Id: I488e4636f9499c468b870966614b0762c2ade8ea
2015-06-02 00:55:54 +00:00
Kunal Mehta c2258dd7ce Kill $wgEchoCohortInterval
The Echo cohort study was finished in July 2013 and hasn't been used
since. The code was also checking in reverse order, for example it
checked registration before checking whether the survey was still
active.

EchoHooks::isEchoDisabled() was removed, and all callers were checked to
make sure they were also checking for anonymity.
EchoNotificationController::doNotification() will throw an exception if
the user is anonymous, since it shouldn't be possible to get an
anonymous user into that code path.

Bug: T101047
Change-Id: Iada2f6d2066c0f6bba5cc58aeb03d687632ac5a4
2015-06-01 17:53:29 -07:00
Kunal Mehta 94dd86f255 Simplify registration of EventLogging modules
Let EventLogging register the schema modules by using the
EventLoggingRegisterSchemas hook.

Don't modify $wgResourceModules at run time because that's a hack.
Instead register the module in the ResourceLoaderRegisterModules hook
itself.

Change-Id: I9457546c1ec38cf6896fe6f9f445fe1191afe72a
2015-06-01 11:58:37 -07:00
Kunal Mehta 1d4bf45d88 s/wfRunHooks/Hooks::run/
Change-Id: If26de025b0510027c8f1ba514a797c343a575d78
2015-06-01 11:36:35 -07:00
Aaron Schulz 02f618d620 Use DeferredUpdates::addCallableUpdate for generateEventsForRevision
* This diff part of this logic is fairly slow

Change-Id: Id9af5c18f852ba7f1c0d2b53257fe11cb87fc510
2015-05-18 12:59:36 -07:00
Matthias Mullie d150625ce1 Until seentime is recorded, we should treat notifications as unseen
Since we didn't use to save seen time, it is unreliable at first.
I decided to just show them as read then, since we couldn't know
if they had or hadn't been read.
However, it would make more sense to keep them unread until we first
save the time a notifiation is seen: it is in line with the current
behavior (where the badge just stays red, always)

Also fixed a problem where I meant to .get a value but had .set
instead. It wasn't noticable because that function is currently
only called when things have just been seen, so even though it
was wrong, it produced a good result.

Bug: T94634
Change-Id: I7ee447249527feb3914c76cfffd673bbda062b75
2015-05-06 10:53:45 +02:00
Matthias Mullie da07893647 Display red badge based on time of notifications vs last time panel was opened
I tried to stick as close to the existing code as possible.

Special:Notifications is slightly different from the overlay,
however. I made it add .mw-echo-unread class for consistency,
but that JS doesn't record seen time (it only loads older
entries), not does the CSS fadeout apply there (it marks
everything as read as soon as it's displayed, so different
behavior from overlay)

PS: I'm not sure about browser compat for the fadeout. But
even if some obscure browsers don't support this, meh. It's
not an "important" feature that can't be missed.

Bug: T94634
Change-Id: Ibb201823fb52ef8a3d5eaa39b0b724ede8d271d1
2015-05-01 11:39:45 -07:00
Tony Thomas 89b88ce61f Unreachable code in Echo hooks
Removed function EchoHooks::getDefaultNotifiedUsers

Change-Id: I5a2d219c3daea87705776f76744a8e7753e01fac
2015-04-20 21:51:23 +05:30
Erik Bernhardson 70639162f3 Allow multiple target pages per event
Bug: T85064
Change-Id: I338f3d73efb98a3bb66ef64fdeeb66e752a453c2
2015-03-31 07:56:52 +00:00
Erik Bernhardson 80ddd5549b Read revision from master when determining notifications to send
Bug: T93333
Change-Id: Ie41184f522f32835d278f69bc785ec71fddecc03
2015-03-21 02:57:06 +00:00
Timo Tijhof d833b09532 Update mock wgEchoConfig to also run on Special:JavaScript/qunit/plain
Follows-up 8d12ef9.

Tests were failing because wgEchoConfig was undefined and ext.base.js
accesses wgEchoConfig.eventlogging.

This mock should not be needed. Modules should be loadable at any
time and react to the current environment. If they should not do
anything, the client should be able to determine that. Perhaps
an isAnon() or some property wgEchoConfig to indicate this.

It only being loaded from beforePageDisplay() when logged-in is a
load optimisation, not business logic. wgEchoConfig should always
be there, or the code should handle the case of it not being there.

Change-Id: Ide90adf20e583921c9f3bd5cd37057995aa3d2c3
2015-03-21 02:47:47 +00:00
Ori Livneh ef502ed0ef Test if 'EventLogging' class exists, rather than deprecated function
efLogServerSideEvent() is deprecated and will be removed soon.

Change-Id: I79969b443e59a36a6d92ad33b3df98fb21f7f3b6
2015-01-07 10:27:52 -08:00
Kunal Mehta c2c3aba65f Capitalize class name properly
Change-Id: I980062dee776a2653ab74d392731af01b81889bc
2014-10-24 12:16:37 -07:00
Kunal Mehta fae2556494 Add UserMerge support
Depends on Id1726673 in UserMerge to allow specifying
a custom database object to use.

Bug: 67766
Change-Id: Iceb4b8d2fd53c50ed00a4aab9bc374f4bb716466
2014-10-17 10:08:59 -07:00
jenkins-bot f09f11d679 Merge "There is no welcome notification" 2014-09-02 07:34:24 +00:00
bsitu 2d38a4c8a8 There is no welcome notification
Bug: 70139
Change-Id: Ice565a23073dac0c39d61801cad34c9c9419b2dc
2014-08-28 14:29:45 -07:00
bsitu db218b9e1f Set UnitTestsList hook run against files inside tests/phpunit
All php unit tests are inside this directory

Change-Id: Ib5ac7c31bf08e68dbc5f66b9fb06e150569e7104
2014-08-22 17:39:00 -07:00
bsitu cac4050990 Mark notification as read upon visiting a page
Change-Id: I84493fbf742acd90645d484d42f049796a5e48ee
2014-08-14 14:10:55 -07:00
jenkins-bot f001382328 Merge "Add TargetPage model and mapper to notifications" 2014-08-14 20:18:44 +00:00
Bsitu 483e7e80d5 Revert "Revert "Merge remote-tracking branch 'gerrit/master' into two_tabs""
This reverts commit b9574748a4.

Change-Id: I8a8334db446dd6a2d5363a1f6ab12369b813b026
2014-08-14 18:46:26 +00:00
EBernhardson b9574748a4 Revert "Merge remote-tracking branch 'gerrit/master' into two_tabs"
This was supposed to merge master into the two_tabs branch, but it was accidently done against master instead

This reverts commit 06ee936e92.

Change-Id: I98da735b7d5c103399a2478286d1420243df6ba4
2014-08-14 18:27:19 +00:00
bsitu 029668423d Add TargetPage model and mapper to notifications
This will be used for marking a notificaiton as read when
a user visits a target page. The new table should keep the
volume as low as possible for fast data loopup. records
should be removed from the table once it's marked as read.

Change-Id: I605cbc79adfc12d22bd889c5bb513d05c479fe6e
2014-08-13 00:48:07 +00:00
bsitu 180a67c4a7 Hygiene: Add sub-directories to phpunit test
Change-Id: Ie5bb127f1ba36bd799f87535b14cd3712ad08a3c
2014-08-12 22:54:45 +00:00
Florianschmidtwelzow ffd082b738 Remove qunit tests from mobile
ext.echo.overlay isn't loaded in mobile, so don't load the test in
mobile.

Bug: 69316
Change-Id: Iddd68aca84c69bed10a2afe4aea8463890485e26
2014-08-09 02:06:46 +02:00