mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups
synced 2024-09-25 11:17:24 +00:00
Implement the new schema for when the popups are enabled
Bug: T88167 Change-Id: I38c9e474e0ec7da45af8338a458430e5d7427463
This commit is contained in:
parent
d49cfb9b65
commit
2971d90831
|
@ -42,7 +42,7 @@ class PopupsHooks {
|
|||
* @param array $schemas
|
||||
*/
|
||||
public static function onEventLoggingRegisterSchemas( array &$schemas ) {
|
||||
$schemas['Popups'] = 7536956;
|
||||
$schemas['Popups'] = 11625443;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -7,43 +7,21 @@
|
|||
var logger = {};
|
||||
|
||||
/**
|
||||
* Unix timestamp of when the popup was rendered
|
||||
* @property time
|
||||
*/
|
||||
logger.time = undefined;
|
||||
|
||||
/**
|
||||
* How long was the popup open in milliseconds
|
||||
* @property {Number} duration
|
||||
*/
|
||||
logger.duration = undefined;
|
||||
|
||||
/**
|
||||
* Was the popup clicked, middle clicked or dismissed
|
||||
* @property {String} action
|
||||
*/
|
||||
logger.action = undefined;
|
||||
|
||||
/**
|
||||
* Logs different actions such as meta and shift click on the popup
|
||||
* Is bound to the `click` event
|
||||
* Get action based on click event
|
||||
*
|
||||
* @method logClick
|
||||
* @method getAction
|
||||
* @param {Object} event
|
||||
*/
|
||||
logger.logClick = function ( event ) {
|
||||
logger.getAction = function ( event ) {
|
||||
if ( event.which === 2 ) { // middle click
|
||||
logger.action = 'opened in new tab';
|
||||
return 'opened in new tab';
|
||||
} else if ( event.which === 1 ) {
|
||||
if ( event.ctrlKey || event.metaKey ) {
|
||||
logger.action = 'opened in new tab';
|
||||
return 'opened in new tab';
|
||||
} else if ( event.shiftKey ) {
|
||||
logger.action = 'opened in new window';
|
||||
return 'opened in new window';
|
||||
} else {
|
||||
logger.action = 'opened in same tab';
|
||||
logger.duration = mw.now() - logger.time;
|
||||
logger.log( mw.popups.render.currentLink.attr( 'href' ) );
|
||||
event.preventDefault();
|
||||
return 'opened in same tab';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -51,67 +29,23 @@
|
|||
/**
|
||||
* Logs the popup event as defined in the following schema-
|
||||
* https://meta.wikimedia.org/wiki/Schema:Popups
|
||||
* If `href` is passed it redirects to that location after the event is logged.
|
||||
*
|
||||
* @method log
|
||||
* @param {String} href
|
||||
* @return {Boolean} logged Whether or not the event was logged
|
||||
* @param {Object} event
|
||||
* @return {jQuery.Promise}
|
||||
*/
|
||||
logger.log = function ( href ) {
|
||||
logger.log = function ( event ) {
|
||||
if ( mw.eventLog === undefined ) {
|
||||
return false;
|
||||
return $.Deferred().resolve();
|
||||
}
|
||||
|
||||
var
|
||||
deferred = $.Deferred(),
|
||||
event = {
|
||||
'duration': Math.round( logger.duration ),
|
||||
'action': logger.action
|
||||
};
|
||||
// Get duration from time
|
||||
event.duration = Math.floor( mw.now() - event.time );
|
||||
delete event.time;
|
||||
|
||||
if ( logger.sessionId !== null ) {
|
||||
event.sessionId = logger.sessionId;
|
||||
}
|
||||
|
||||
if ( href ) {
|
||||
deferred.always( function () {
|
||||
location.href = href;
|
||||
} );
|
||||
}
|
||||
|
||||
mw.eventLog.logEvent( 'Popups', event ).then( deferred.resolve, deferred.reject );
|
||||
|
||||
// reset
|
||||
logger.time = undefined;
|
||||
logger.duration = undefined;
|
||||
logger.action = undefined;
|
||||
|
||||
return true;
|
||||
return mw.eventLog.logEvent( 'Popups', event );
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates a unique sessionId or pulls an existing one from localStorage
|
||||
*
|
||||
* @method getSessionsId
|
||||
* @return {String} sessionId
|
||||
*/
|
||||
logger.getSessionId = function () {
|
||||
var sessionId = null;
|
||||
try {
|
||||
sessionId = localStorage.getItem( 'popupsSessionId' );
|
||||
if ( sessionId === null ) {
|
||||
sessionId = mw.user.generateRandomSessionId();
|
||||
localStorage.setItem( 'popupsSessionId', sessionId );
|
||||
}
|
||||
} catch ( e ) {}
|
||||
return sessionId;
|
||||
};
|
||||
|
||||
/**
|
||||
* @property sessionId
|
||||
*/
|
||||
logger.sessionId = logger.getSessionId();
|
||||
|
||||
mw.popups.logger = logger;
|
||||
|
||||
} ) ( jQuery, mediaWiki );
|
||||
|
|
|
@ -133,6 +133,7 @@
|
|||
$div = $( '<div>' ).append( $thumbnail, $contentbox, $timestamp );
|
||||
|
||||
mw.popups.render.cache[ href ].settings = {
|
||||
'title': page.title,
|
||||
'tall': ( tall === undefined ) ? false : tall,
|
||||
'thumbnail': ( thumbnail === undefined ) ? false : thumbnail
|
||||
};
|
||||
|
|
|
@ -153,9 +153,16 @@
|
|||
cache.process( link );
|
||||
|
||||
// Event logging
|
||||
mw.popups.logger.time = mw.now();
|
||||
mw.popups.logger.action = 'dismissed';
|
||||
mw.popups.$popup.find( 'a.mwe-popups-extract, a.mwe-popups-discreet' ).click( mw.popups.logger.logClick );
|
||||
if ( mw.popups.logger ) {
|
||||
mw.popups.render.logEvent = {
|
||||
pageTitleHover: cache.settings.title,
|
||||
pageTitleSource: mw.config.get( 'wgTitle' ),
|
||||
popupEnabled: mw.popups.enabled,
|
||||
time: mw.now(),
|
||||
action: 'dismissed'
|
||||
};
|
||||
mw.popups.$popup.find( 'a.mwe-popups-extract, a.mwe-popups-discreet' ).click( mw.popups.render.clickHandler );
|
||||
}
|
||||
|
||||
link
|
||||
.off( 'mouseleave blur', mw.popups.render.leaveInactive )
|
||||
|
@ -164,6 +171,22 @@
|
|||
$( document ).on( 'keydown', mw.popups.render.closeOnEsc );
|
||||
};
|
||||
|
||||
/**
|
||||
* Click handler for the hovercard
|
||||
*
|
||||
* @method clickHandler
|
||||
* @param {Object} event
|
||||
*/
|
||||
mw.popups.render.clickHandler = function ( event ) {
|
||||
mw.popups.render.logEvent.action = mw.popups.logger.getAction( event );
|
||||
if ( mw.popups.render.logEvent.action === 'opened in same tab' ) {
|
||||
event.preventDefault();
|
||||
mw.popups.logger.log( mw.popups.render.logEvent ).then( function () {
|
||||
window.location.href = mw.popups.render.currentLink.attr( 'href' );
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes the hover class from the link and unbinds events
|
||||
* Hides the popup, clears timers and sets it and the resets the renderer
|
||||
|
@ -175,8 +198,10 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
mw.popups.logger.duration = mw.now() - mw.popups.logger.time;
|
||||
mw.popups.logger.log();
|
||||
// Event logging
|
||||
if ( mw.popups.logger ) {
|
||||
mw.popups.logger.log( mw.popups.render.logEvent );
|
||||
}
|
||||
|
||||
$( mw.popups.render.currentLink ).off( 'mouseleave blur', mw.popups.render.leaveActive );
|
||||
|
||||
|
|
Loading…
Reference in a new issue