ld31-space-diggers/node_modules/browser-sync/node_modules/browser-sync-client/lib/ghostmode.clicks.js
Ruben Müller 760c1838ed Add game
2014-12-07 20:57:49 +01:00

65 lines
1.5 KiB
JavaScript

"use strict";
/**
* This is the plugin for syncing clicks between browsers
* @type {string}
*/
var EVENT_NAME = "click";
var OPT_PATH = "ghostMode.clicks";
exports.canEmitEvents = true;
/**
* @param {BrowserSync} bs
* @param eventManager
*/
exports.init = function (bs, eventManager) {
eventManager.addEvent(document.body, EVENT_NAME, exports.browserEvent(bs));
bs.socket.on(EVENT_NAME, exports.socketEvent(bs, eventManager));
};
/**
* Uses event delegation to determine the clicked element
* @param {BrowserSync} bs
* @returns {Function}
*/
exports.browserEvent = function (bs) {
return function (event) {
if (exports.canEmitEvents) {
var elem = event.target || event.srcElement;
if (elem.type === "checkbox" || elem.type === "radio") {
bs.utils.forceChange(elem);
return;
}
bs.socket.emit(EVENT_NAME, bs.utils.getElementData(elem));
} else {
exports.canEmitEvents = true;
}
};
};
/**
* @param {BrowserSync} bs
* @param {manager} eventManager
* @returns {Function}
*/
exports.socketEvent = function (bs, eventManager) {
return function (data) {
if (bs.canSync(data, OPT_PATH)) {
var elem = bs.utils.getSingleElement(data.tagName, data.index);
if (elem) {
exports.canEmitEvents = false;
eventManager.triggerClick(elem);
}
}
};
};