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

73 lines
1.7 KiB
JavaScript
Raw Normal View History

2019-09-02 14:24:02 +01:00
(function(global) {
2016-03-02 17:36:20 +00:00
"use strict";
2016-06-11 12:02:47 +01:00
var queues = {};
2019-09-02 14:24:02 +01:00
var dd = new global.diffDOM();
2020-04-16 13:21:24 +01:00
var defaultInterval = 2000;
var interval = 0;
var calculateBackoff = responseTime => parseInt(Math.max(
(250 * Math.sqrt(responseTime)) - 1000,
1000
));
2016-04-27 09:28:42 +01:00
var getRenderer = $component => response => dd.apply(
$component.get(0),
dd.diff($component.get(0), $(response[$component.data('key')]).get(0))
);
2016-03-02 17:36:20 +00:00
2016-06-11 12:02:47 +01:00
var getQueue = resource => (
queues[resource] = queues[resource] || []
);
2016-03-02 17:36:20 +00:00
2016-06-11 12:02:47 +01:00
var flushQueue = function(queue, response) {
while(queue.length) queue.shift()(response);
2016-03-02 17:36:20 +00:00
};
2016-06-12 08:40:56 +01:00
var clearQueue = queue => (queue.length = 0);
var poll = function(renderer, resource, queue, form) {
let startTime = Date.now();
2016-06-11 12:02:47 +01:00
if (document.visibilityState !== "hidden" && queue.push(renderer) === 1) $.ajax(
resource,
{
'method': form ? 'post' : 'get',
'data': form ? $('#' + form).serialize() : {}
}
2016-06-12 08:40:56 +01:00
).done(
response => {
flushQueue(queue, response);
if (response.stop === 1) {
poll = function(){};
}
interval = calculateBackoff(Date.now() - startTime);
}
2016-06-12 08:40:56 +01:00
).fail(
() => poll = function(){}
2016-06-11 12:02:47 +01:00
);
setTimeout(
2019-04-17 12:40:49 +01:00
() => poll.apply(window, arguments), interval
2016-06-11 12:02:47 +01:00
);
};
2016-03-02 17:36:20 +00:00
2019-09-02 14:24:02 +01:00
global.GOVUK.Modules.UpdateContent = function() {
2016-03-02 17:36:20 +00:00
2020-04-16 13:21:24 +01:00
this.start = component => setTimeout(
() => poll(
getRenderer($(component)),
$(component).data('resource'),
getQueue($(component).data('resource')),
$(component).data('form')
),
defaultInterval
2016-06-11 12:02:47 +01:00
);
2016-03-02 17:36:20 +00:00
};
global.GOVUK.Modules.UpdateContent.calculateBackoff = calculateBackoff;
2019-09-02 14:24:02 +01:00
})(window);