From 194f3449751b90c1f8d7ec3625ab26594bc808c6 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 5 Oct 2015 10:11:26 +0200 Subject: Move makeActivityHandler to core.js There were three identical copies for {prolog,python,robot}.js. --- js/codeq/core.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'js/codeq/core.js') diff --git a/js/codeq/core.js b/js/codeq/core.js index 03c5539..72b4532 100644 --- a/js/codeq/core.js +++ b/js/codeq/core.js @@ -336,6 +336,51 @@ } }; + var makeActivityHandler = function (editor, problem_id) { + var lastActivityMillis = Date.now(), + deltaActivityMillis = function deltaActivityMillisFunc () { + var now = Date.now(), + dt = now - lastActivityMillis; + lastActivityMillis = now; + return dt; + }, + queue = [], + ts = null, + timer = function () { + var promise; + ts = null; + if (queue.length === 0) return Q(true); + promise = codeq.comms.sendActivity(queue, editor.getDoc().getValue(), problem_id); + queue.length = 0; + return promise; + }, + flush = function () { + clearTimeout(ts); + return timer(); + }; + + return { + 'queueTrace': function (trace) { + trace['dt'] = deltaActivityMillis(); + queue.push(trace); + if (ts === null) ts = setTimeout(timer, 10000); // flush every 10 seconds + return this; + }, + 'flush': flush, + 'addAndPurge': function (trace) { + var accumulatedTrace = queue; + queue = []; + trace['dt'] = deltaActivityMillis(); + accumulatedTrace.push(trace); + if (ts !== null) { + clearTimeout(ts); + ts = null; + } + return accumulatedTrace; + } + }; + }; + window.codeq = { 'jsonize': jsonize, @@ -389,6 +434,8 @@ return n; }, + 'makeActivityHandler': makeActivityHandler, + 'wait': function (promise) { jqDisabled.css(waitCssEnter); return promise.fin(function () { -- cgit v1.2.1