summaryrefslogtreecommitdiff
path: root/js/codeq/core.js
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@araneo.org>2015-10-05 10:11:26 +0200
committerTimotej Lazar <timotej.lazar@araneo.org>2015-10-05 10:11:26 +0200
commit194f3449751b90c1f8d7ec3625ab26594bc808c6 (patch)
treeae45810c5448ea45d9b7cf3c6c7c63a03d1de16e /js/codeq/core.js
parent5877ffd8aaffdf3e416dbb36e766736b866e5963 (diff)
Move makeActivityHandler to core.js
There were three identical copies for {prolog,python,robot}.js.
Diffstat (limited to 'js/codeq/core.js')
-rw-r--r--js/codeq/core.js47
1 files changed, 47 insertions, 0 deletions
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 () {