summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Echo/modules/base/ext.echo.base.js')
-rw-r--r--Echo/modules/base/ext.echo.base.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/Echo/modules/base/ext.echo.base.js b/Echo/modules/base/ext.echo.base.js
new file mode 100644
index 00000000..da3a90fb
--- /dev/null
+++ b/Echo/modules/base/ext.echo.base.js
@@ -0,0 +1,84 @@
+( function ( mw, $ ) {
+ 'use strict';
+
+ mw.echo = {
+
+ clickThroughEnabled: mw.config.get( 'wgEchoConfig' ).eventlogging.EchoInteraction.enabled,
+
+ /**
+ * Set up event logging for individual notification
+ * @param {jQuery} notification JQuery representing a single notification
+ * @param {string} context 'flyout'/'archive'
+ * @param {boolean} [mobile] True if interaction was on a mobile device
+ */
+ setupNotificationLogging: function ( notification, context, mobile ) {
+ var eventId = +notification.attr( 'data-notification-event' ),
+ eventType = notification.attr( 'data-notification-type' );
+
+ // Check if Schema:EchoInteraction is enabled
+ if ( !mw.echo.clickThroughEnabled ) {
+ return;
+ }
+ // Log the impression
+ mw.echo.logInteraction( 'notification-impression', context, eventId, eventType, mobile );
+ // Set up logging for clickthrough
+ notification.find( 'a' ).click( function () {
+ mw.echo.logInteraction( 'notification-link-click', context, eventId, eventType, mobile );
+ } );
+ },
+
+ /**
+ * Log all Echo interaction related events
+ * @param {string} action The interaction
+ * @param {string} [context] 'flyout'/'archive' or undefined for the badge
+ * @param {int} [eventId] Notification event id
+ * @param {string} [eventType] notification type
+ * @param {boolean} [mobile] True if interaction was on a mobile device
+ */
+ logInteraction: function ( action, context, eventId, eventType, mobile ) {
+ // Check if Schema:EchoInteraction is enabled
+ if ( !mw.echo.clickThroughEnabled ) {
+ return;
+ }
+
+ var myEvt = {
+ action: action
+ };
+
+ // All the fields below are optional
+ if ( context ) {
+ myEvt.context = context;
+ }
+ if ( eventId ) {
+ myEvt.eventId = eventId;
+ }
+ if ( eventType ) {
+ myEvt.notificationType = eventType;
+ }
+ if ( mobile ) {
+ myEvt.mobile = mobile;
+ }
+ mw.loader.using( 'ext.eventLogging', function() {
+ mw.eventLog.logEvent( 'EchoInteraction', myEvt );
+ } );
+ },
+ /**
+ * @method
+ * @return jQuery element corresponding to the badge reflecting the notification count
+ */
+ getBadge: function() {
+ return $( '.mw-echo-notifications-badge' );
+ }
+
+ };
+
+ if ( mw.echo.clickThroughEnabled ) {
+ mw.loader.using( 'ext.eventLogging', function() {
+ mw.eventLog.setDefaults( 'EchoInteraction', {
+ version: mw.config.get( 'wgEchoConfig' ).version,
+ userId: +mw.config.get( 'wgUserId' ),
+ editCount: +mw.config.get( 'wgUserEditCount' )
+ } );
+ } );
+ }
+} )( mediaWiki, jQuery );