summaryrefslogtreecommitdiff
path: root/js/codeq/core.js
diff options
context:
space:
mode:
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 () {