cryptpad/www/common/sframe-common-cursor.js

77 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

2018-12-06 10:54:34 +00:00
define([
'/common/common-util.js',
], function (Util) {
2018-12-06 10:54:34 +00:00
var module = {};
module.create = function (Common, onLocal) {
2018-12-06 10:54:34 +00:00
var exp = {};
var metadataMgr = Common.getMetadataMgr();
var privateData = metadataMgr.getPrivateData();
var share = Util.find(privateData, ['settings', 'general', 'cursor', 'share']);
var show = Util.find(privateData, ['settings', 'general', 'cursor', 'show']);
2018-12-06 10:54:34 +00:00
var messageHandlers = [];
exp.onCursorUpdate = function (handler) {
messageHandlers.push(handler);
};
var onMessage = function (data) {
if (show === false) { return; }
2018-12-06 10:54:34 +00:00
messageHandlers.forEach(function (h) {
try {
h(data);
} catch (e) {
console.error(e);
}
});
};
var onDegraded = function (data) {
if (data.degraded) {
// Enter degraded mode
onMessage({
reset: true
});
metadataMgr.setDegraded(true);
return void metadataMgr.refresh();
}
2018-12-06 10:54:34 +00:00
setTimeout(function () {
metadataMgr.setDegraded(false);
metadataMgr.refresh();
setTimeout(onLocal);
});
};
var onEvent = function (obj) {
2018-12-06 10:54:34 +00:00
var cmd = obj.ev;
var data = obj.data;
if (cmd === 'DEGRADED') {
onDegraded(data);
return;
}
2018-12-06 10:54:34 +00:00
if (cmd === 'MESSAGE') {
onMessage(data);
return;
}
};
var module = Common.makeUniversal('cursor', {
onEvent: onEvent
2018-12-06 10:54:34 +00:00
});
var execCommand = module.execCommand;
exp.updateCursor = function (obj) {
if (share === false) { return; }
execCommand('UPDATE', obj, function (err) {
if (err) { console.error(err); }
});
};
2018-12-06 10:54:34 +00:00
return exp;
};
return module;
});