Source: suxess/loggers/mockupEventLogger.js

/**
 * 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;

};