summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/vue_realtime_listener/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/vue_realtime_listener/index.js')
-rw-r--r--app/assets/javascripts/vue_realtime_listener/index.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/app/assets/javascripts/vue_realtime_listener/index.js b/app/assets/javascripts/vue_realtime_listener/index.js
new file mode 100644
index 00000000000..30f6680a673
--- /dev/null
+++ b/app/assets/javascripts/vue_realtime_listener/index.js
@@ -0,0 +1,29 @@
+/* eslint-disable no-param-reassign */
+
+((gl) => {
+ gl.VueRealtimeListener = (removeIntervals, startIntervals) => {
+ const removeAll = () => {
+ removeIntervals();
+ window.removeEventListener('beforeunload', removeIntervals);
+ window.removeEventListener('focus', startIntervals);
+ window.removeEventListener('blur', removeIntervals);
+ document.removeEventListener('beforeunload', removeAll);
+ };
+
+ window.addEventListener('beforeunload', removeIntervals);
+ window.addEventListener('focus', startIntervals);
+ window.addEventListener('blur', removeIntervals);
+ document.addEventListener('beforeunload', removeAll);
+
+ // add removeAll methods to stack
+ const stack = gl.VueRealtimeListener.reset;
+ gl.VueRealtimeListener.reset = () => {
+ gl.VueRealtimeListener.reset = stack;
+ removeAll();
+ stack();
+ };
+ };
+
+ // remove all event listeners and intervals
+ gl.VueRealtimeListener.reset = () => undefined; // noop
+})(window.gl || (window.gl = {}));