/**
* Created by Peter on 28.02.2016.
*/
'use strict';
/**
* This class implements listeners responding to mouse events.
* This logger is specialized for logging events on tests running
* on prototypes.
*
* @constructor
*/
SUXESS.MockupEventLogger = function () {
var TIMER = 30;
SUXESS.MockupEventLogger.OFFSET = $('.test-display-mockup-area').offset();
SUXESS.MockupEventLogger.SCROLL_OFFSET_Y = 0;
window.setInterval(function () {
SUXESS.MockupEventLogger.ENABLE_HANDLER = true;
}, TIMER);
window.addEventListener('scroll', this.scrollListener);
$('.test-display-mockup-area').on('scroll', this.windowScrollListener);
// Eyetracker
var event = {
type: 'mockupChange',
timestamp: Date.now()
};
console.log(event);
PubSub.publish( 'TEST_RUN_MOUSE_EVENT', event );
this.eyeTracker = new SUXESS.EyeTrackerLogger();
};
/**
* global variable used for aggregation of mosouemove events
* @type {boolean}
*/
SUXESS.MockupEventLogger.ENABLE_HANDLER = true;
SUXESS.MockupEventLogger.OFFSET = null;
/**
* Event listener for click events. Processing click event and publishing it
* to subsriber.
*
* @param {clickEvent} e
*/
SUXESS.MockupEventLogger.prototype.clickListener = function (e) {
var event = this.processEvent(e);
console.log(event);
PubSub.publish( 'TEST_RUN_MOUSE_EVENT', event );
};
/**
* Processing mousemove event and publishing it
* to subsriber.
*
* @param {mousemoveEvent} e
*/
SUXESS.MockupEventLogger.prototype.handleMouseMove = function (e) {
var event = this.processEvent(e);
//console.log(event);
PubSub.publish( 'TEST_RUN_MOUSE_EVENT', event );
};
/**
* Event listener for mousemove events.
*
* @param {mousemoveEvent} e
*/
SUXESS.MockupEventLogger.prototype.moveListener = function (e) {
if (SUXESS.MockupEventLogger.ENABLE_HANDLER) {
this.handleMouseMove(e);
SUXESS.MockupEventLogger.ENABLE_HANDLER = false;
}
};
/**
* Event listener for scroll events. Processing scroll event and publishing it
* to subsriber.
*
* @param {clickEvent} e
*/
SUXESS.MockupEventLogger.prototype.scrollListener = function (e) {
var event = SUXESS.MockupEventLogger.prototype.processEvent(e);
SUXESS.MockupEventLogger.SCROLL_OFFSET_Y = event.scrollY;
PubSub.publish( 'TEST_RUN_MOUSE_EVENT', event );
};
SUXESS.MockupEventLogger.prototype.windowScrollListener = function (e) {
//SUXESS.MockupEventLogger.SCROLL_OFFSET_X = event.pageX - SUXESS.MockupEventLogger.OFFSET.left
//console.log(e);
};
/**
* removes all added event listeners
*/
SUXESS.MockupEventLogger.prototype.destroy = function () {
window.removeEventListener('scroll', this.scrollListener);
$('body').off();
this.eyeTracker.destroy();
};
/**
* removes all unnecessary fields from event
*
* @param event
* @returns {JSON} newEvent
*/
SUXESS.MockupEventLogger.prototype.processEvent = function (event) {
var newEvent;
switch(event.type) {
case 'click':
newEvent = {
button: event.button,
buttons: event.buttons,
clientX: event.clientX,
clientY: event.clientY,
offsetX: Math.floor(event.pageX - SUXESS.MockupEventLogger.OFFSET.left),
offsetY: Math.floor(event.pageY - SUXESS.MockupEventLogger.OFFSET.top),
pageX: event.pageX,
pageY: event.pageY,
screenX: event.screenX,
screenY: event.screenY,
target: {
className: event.target.className,
id: event.target.id,
name: event.target.name,
title: event.target.title,
type: event.target.type,
value: event.target.value,
tagName: event.target.tagName,
targetHeight: event.target.clientHeight,
targetWidth: event.target.clientWidth
},
type: event.type,
timestamp: Date.now(),
windowHeight: $(window).height(),
windowWidth: $(window).width(),
documentHeight: $(document).height(),
documentWidth: $(document).width(),
screenHeight: screen.height,
screenWidth: screen.width
};
break;
case 'mousemove':
newEvent = {
clientX: event.clientX,
clientY: event.clientY,
offsetX: Math.floor(event.pageX - SUXESS.MockupEventLogger.OFFSET.left),
offsetY: Math.floor(event.pageY - SUXESS.MockupEventLogger.OFFSET.top),
pageX: event.pageX,
pageY: event.pageY,
screenX: event.screenX,
screenY: event.screenY,
type: event.type,
timestamp: Date.now(),
windowHeight: $(window).height(),
windowWidth: $(window).width(),
documentHeight: $(document).height(),
documentWidth: $(document).width(),
screenHeight: screen.height,
screenWidth: screen.width
};
break;
case 'scroll':
newEvent = {
scrollY: window.scrollY,
type: event.type,
timestamp: Date.now(),
windowHeight: $(window).height(),
windowWidth: $(window).width(),
documentHeight: $(document).height(),
documentWidth: $(document).width(),
screenHeight: screen.height,
screenWidth: screen.width
};
break;
default:
return event;
}
return newEvent;
};