Files
notifications-admin/app/assets/javascripts/updateContent.js

55 lines
1.2 KiB
JavaScript
Raw Normal View History

2016-06-11 12:02:47 +01:00
(function(Modules) {
"use strict";
2016-06-11 12:02:47 +01:00
var queues = {};
var dd = new diffDOM();
var timer;
var getRenderer = $component => response => function() {
var component = $component.get(0);
var updated = $(response[$component.data('key')]).get(0);
var diff = dd.diff(component, updated);
dd.apply(
component, diff
);
};
2016-06-11 12:02:47 +01:00
var getQueue = resource => (
queues[resource] = queues[resource] || []
);
var flushQueue = function(queue, response) {
while(queue.length) queue.shift()(response);
};
var clearQueue = queue => (queue.length = 0);
2016-06-11 12:02:47 +01:00
var poll = function(renderer, resource, queue, interval) {
if (queue.push(renderer) === 1) $.ajax(
resource
).done(
2016-06-11 12:02:47 +01:00
response => flushQueue(queue, response)
).fail(
() => clearQueue(queue)
2016-06-11 12:02:47 +01:00
);
timer = setTimeout(
2016-06-11 12:02:47 +01:00
() => poll(...arguments), interval
);
2016-06-11 12:02:47 +01:00
};
2016-06-11 12:02:47 +01:00
Modules.UpdateContent = function() {
2016-06-11 12:02:47 +01:00
this.start = component => poll(
getRenderer($(component)),
$(component).data('resource'),
getQueue($(component).data('resource')),
($(component).data('interval-seconds') || 1.5) * 1000
);
};
2016-06-11 12:02:47 +01:00
})(window.GOVUK.Modules);