| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
							- 
 - /**
 -  * SET_INTERVAL constant is used to set interval and it is set in
 -  * the id property of the request.data property. timeMs property must
 -  * also be set. request.data example:
 -  *
 -  * {
 -  *      id: SET_INTERVAL,
 -  *      timeMs: 33
 -  * }
 -  */
 - export const SET_INTERVAL = 1;
 - 
 - /**
 -  * CLEAR_INTERVAL constant is used to clear the interval and it is set in
 -  * the id property of the request.data property.
 -  *
 -  * {
 -  *      id: CLEAR_INTERVAL
 -  * }
 -  */
 - export const CLEAR_INTERVAL = 2;
 - 
 - /**
 -  * INTERVAL_TIMEOUT constant is used as response and it is set in the id property.
 -  *
 -  * {
 -  *      id: INTERVAL_TIMEOUT
 -  * }
 -  */
 - export const INTERVAL_TIMEOUT = 3;
 - 
 - /**
 -  * The following code is needed as string to create a URL from a Blob.
 -  * The URL is then passed to a WebWorker. Reason for this is to enable
 -  * use of setInterval that is not throttled when tab is inactive.
 -  */
 - const code = `
 -     var timer;
 - 
 -     onmessage = function(request) {
 -         switch (request.data.id) {
 -         case ${SET_INTERVAL}: {
 -             timer = setInterval(() => {
 -                 postMessage({ id: ${INTERVAL_TIMEOUT} });
 -             }, request.data.timeMs);
 -             break;
 -         }
 -         case ${CLEAR_INTERVAL}: {
 -             if (timer) {
 -                 clearInterval(timer);
 -             }
 -             break;
 -         }
 -         }
 -     };
 - `;
 - 
 - export const timerWorkerScript = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));
 
 
  |