From 8a62cabb0e3e55efc1f95643677f6facba904f54 Mon Sep 17 00:00:00 2001
From: Denis Peters <denis.peters@udo.edu>
Date: Thu, 22 Mar 2018 12:45:31 +0100
Subject: [PATCH] clean up javascript files (a little); uncomment filter for
 blacklist/whitelist;

---
 js/Clock.js                  | 418 -----------------------------------
 js/worker/AJAX.js            | 138 ------------
 js/worker/AbstractWorker.js  |  75 -------
 js/worker/DepartureWorker.js | 164 --------------
 js/worker/Worker.js          |  60 -----
 js/worker/WorkerDeparture.js | 138 ------------
 js/worker/check.js           |  64 ------
 panels/departure/script.js   |   2 +-
 8 files changed, 1 insertion(+), 1058 deletions(-)
 delete mode 100644 js/Clock.js
 delete mode 100644 js/worker/AJAX.js
 delete mode 100644 js/worker/AbstractWorker.js
 delete mode 100644 js/worker/DepartureWorker.js
 delete mode 100644 js/worker/Worker.js
 delete mode 100644 js/worker/WorkerDeparture.js
 delete mode 100644 js/worker/check.js

diff --git a/js/Clock.js b/js/Clock.js
deleted file mode 100644
index 39ebb12..0000000
--- a/js/Clock.js
+++ /dev/null
@@ -1,418 +0,0 @@
-function Clock(panel, config) {
-	this.canvas = panel[0].querySelector("canvas");
-	this.pane = this.canvas.getContext("2d");
-	this.bgCanvas = document.createElement("canvas");
-	this.bgPane = this.bgCanvas.getContext("2d");
-
-	this.monthNames		= ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];
-	this.dayNames		= ["so","mo","di","mi","do","fr","sa"];
-
-	this.data = {
-		panel: {
-			widht: 0,
-			height: 0
-		},
-		bounds: {
-			outer: {
-				x: 0,
-				y: 0,
-				widht: 0,
-				height: 0
-			},
-			inner: {
-				x: 0,
-				y: 0,
-				widht: 0,
-				height: 0
-			}
-		},
-		colors: {
-			background: "#000",
-			foreground: "#fff",
-			shaddow: "#333"
-		},
-		fonts: {
-			fat: "time-fat",
-			medium: "time-medium"
-		},
-		aClock: {
-			bgImage: "background.svg",
-			radius: 0,
-			center: {
-				x: 0,
-				y: 0
-			},
-			bounds: {
-				outer: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				},
-				inner: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				}
-			}
-		},
-		dClock: {
-			fonts: {
-				fat: "",
-				big: "",
-				small: ""
-			},
-			bounds: {
-				outer: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				},
-				inner: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				}
-			},
-			positions: {
-				hour : {
-					x: 0,
-					y: 0,
-				},
-				pulse : {
-					x: 0,
-					y: 0,
-				},
-				minute : {
-					x: 0,
-					y: 0,
-				},
-				second : {
-					x: 0,
-					y: 0,
-				}
-			}
-		},
-		dDate: {
-			font: "",
-			bounds: {
-				outer: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				},
-				inner: {
-					x: 0,
-					y: 0,
-					widht: 0,
-					height: 0
-				}
-			},
-			position: {
-				x: 0,
-				y: 0
-			}
-		}
-	};
-	
-    this.resize = function(width, height) {
-        this.data.panel.width = width;
-        this.data.panel.height = height;
-        // canvas
-        this.canvas.width = this.data.panel.width;
-        this.canvas.height = this.data.panel.height;
-        this.pane = this.canvas.getContext("2d");
-        // bgCanvas
-        this.bgCanvas.width = this.data.panel.width;
-        this.bgCanvas.height = this.data.panel.height;
-        this.bgPane = this.bgCanvas.getContext("2d");
-
-        // outer bounds
-        this.data.bounds.outer.x = 10;
-        this.data.bounds.outer.y = 10;
-        this.data.bounds.outer.width = width - 20;
-        this.data.bounds.outer.height = height - 20;
-        var ratio = this.data.bounds.outer.width / this.data.bounds.outer.height;
-
-        if (ratio > 1.5) {
-            // widget
-            if (this.data.bounds.outer.height * 3 < this.data.bounds.outer.width) {
-                this.data.bounds.inner.height = this.data.bounds.outer.height;
-                this.data.bounds.inner.width = this.data.bounds.outer.height * 3;
-            } else {
-                this.data.bounds.inner.height = this.data.bounds.outer.width / 3;
-                this.data.bounds.inner.width = this.data.bounds.outer.width;
-            }
-            this.data.bounds.inner.x = this.data.bounds.outer.x + (this.data.bounds.outer.width - this.data.bounds.inner.width) / 2;
-            this.data.bounds.inner.y = this.data.bounds.outer.y + (this.data.bounds.outer.height - this.data.bounds.inner.height) / 2;
-            // dClock
-            this.data.dClock.bounds.outer.x = this.data.bounds.inner.x + this.data.bounds.inner.width * 0.4;
-            this.data.dClock.bounds.outer.y = this.data.bounds.inner.y;
-            this.data.dClock.bounds.outer.width = this.data.bounds.inner.width * 0.6;
-            this.data.dClock.bounds.outer.height = this.data.bounds.inner.height * 0.6;
-            // dDate
-            this.data.dDate.bounds.outer.x = this.data.bounds.inner.x + this.data.bounds.inner.width * 0.4;
-            this.data.dDate.bounds.outer.y = this.data.bounds.inner.y + this.data.bounds.inner.height * 0.6;
-            this.data.dDate.bounds.outer.width = this.data.bounds.inner.width * 0.6;
-            this.data.dDate.bounds.outer.height = this.data.bounds.inner.height * 0.4;
-            // aClock
-            this.data.aClock.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.aClock.bounds.outer.y = this.data.bounds.inner.y;
-            this.data.aClock.bounds.outer.width = this.data.bounds.inner.width * 0.4;
-            this.data.aClock.bounds.outer.height = this.data.bounds.inner.height;
-        } else if (ratio < 1) {
-            // widget
-            if (this.data.bounds.outer.height * 0.7 < this.data.bounds.outer.width) {
-                this.data.bounds.inner.height = this.data.bounds.outer.height;
-                this.data.bounds.inner.width = this.data.bounds.outer.height * 0.7;
-            } else {
-                this.data.bounds.inner.height = this.data.bounds.outer.width / 0.7;
-                this.data.bounds.inner.width = this.data.bounds.outer.width;
-            }
-            this.data.bounds.inner.x = this.data.bounds.outer.x + (this.data.bounds.outer.width - this.data.bounds.inner.width) / 2;
-            this.data.bounds.inner.y = this.data.bounds.outer.y + (this.data.bounds.outer.height - this.data.bounds.inner.height) / 2;
-            // dClock
-            this.data.dClock.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.dClock.bounds.outer.y = this.data.bounds.inner.y + this.data.bounds.inner.height * 0.7;
-            this.data.dClock.bounds.outer.width = this.data.bounds.inner.width;
-            this.data.dClock.bounds.outer.height = this.data.bounds.inner.height * 0.2;
-            // dDate
-            this.data.dDate.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.dDate.bounds.outer.y = this.data.bounds.inner.y + this.data.bounds.inner.height * 0.9;
-            this.data.dDate.bounds.outer.width = this.data.bounds.inner.width;
-            this.data.dDate.bounds.outer.height = this.data.bounds.inner.height * 0.1;
-            // aClock
-            this.data.aClock.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.aClock.bounds.outer.y = this.data.bounds.inner.y;
-            this.data.aClock.bounds.outer.width = this.data.bounds.inner.width;
-            this.data.aClock.bounds.outer.height = this.data.bounds.inner.height * 0.7;
-        } else {
-            // widget
-            if (this.data.bounds.outer.height * 2 < this.data.bounds.outer.width) {
-                this.data.bounds.inner.height = this.data.bounds.outer.height;
-                this.data.bounds.inner.width = this.data.bounds.outer.height * 2;
-            } else {
-                this.data.bounds.inner.height = this.data.bounds.outer.width / 2;
-                this.data.bounds.inner.width = this.data.bounds.outer.width;
-            }
-            this.data.bounds.inner.x = this.data.bounds.outer.x + (this.data.bounds.outer.width - this.data.bounds.inner.width) / 2;
-            this.data.bounds.inner.y = this.data.bounds.outer.y + (this.data.bounds.outer.height - this.data.bounds.inner.height) / 2;
-            // dClock
-            this.data.dClock.bounds.outer.x = this.data.bounds.inner.x + this.data.bounds.inner.width / 3;
-            this.data.dClock.bounds.outer.y = this.data.bounds.inner.y;
-            this.data.dClock.bounds.outer.width = this.data.bounds.inner.width - this.data.bounds.inner.width / 3;
-            this.data.dClock.bounds.outer.height = this.data.bounds.inner.height - this.data.bounds.inner.height / 3;
-            // dDate
-            this.data.dDate.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.dDate.bounds.outer.y = this.data.bounds.inner.y + this.data.bounds.inner.height / 3 * 2;
-            this.data.dDate.bounds.outer.width = this.data.bounds.inner.width;
-            this.data.dDate.bounds.outer.height = this.data.bounds.inner.height / 3;
-            // aClock
-            this.data.aClock.bounds.outer.x = this.data.bounds.inner.x;
-            this.data.aClock.bounds.outer.y = this.data.bounds.inner.y;
-            this.data.aClock.bounds.outer.width = this.data.bounds.inner.width / 3;
-            this.data.aClock.bounds.outer.height = this.data.bounds.inner.height -  + this.data.bounds.inner.height / 3;
-        }
-        resizeDClock();
-        resizeDDate();
-        resizeAClock();
-        renderBG();
-	}
-
-	this.render = function() {
-		var
-			date = new Date(),
-			n = date.getMilliseconds(),
-			h = date.getHours(),
-			i = date.getMinutes(),
-			s = date.getSeconds(),
-			t = date.getDay(),
-			d = date.getDate(),
-			m = date.getMonth(),
-			y = date.getFullYear();
-		if (d.toString().length < 2)
-			d = "0" + d;
-		if (h.toString().length < 2)
-			h = "0" + h;
-		if (i.toString().length < 2)
-			i = "0" + i;
-		if (s.toString().length < 2)
-			s = "0" + s;
-        // background
-        this.pane.fillStyle = this.data.colors.background;
-		this.pane.fillRect(0, 0, this.data.panel.width, this.data.panel.height);
-        this.pane.drawImage(this.bgCanvas, 0, 0);
-        // foreground dClock
-        this.pane.fillStyle = this.data.colors.foreground;
-        this.pane.font = this.data.dClock.fonts.fat;
-        if (n < 500) this.pane.fillText(":", this.data.dClock.positions.pulse.x, this.data.dClock.positions.pulse.y);
-        this.pane.font = this.data.dClock.fonts.big;
-        this.pane.fillText(h, this.data.dClock.positions.hour.x, this.data.dClock.positions.hour.y);
-        this.pane.fillText(i, this.data.dClock.positions.minute.x, this.data.dClock.positions.minute.y);
-        this.pane.font = this.data.dClock.fonts.small;
-        this.pane.fillText(s, this.data.dClock.positions.second.x, this.data.dClock.positions.second.y);
-        // foreground dDate
-        this.pane.font = this.data.dDate.font;
-        this.pane.fillText(this.dayNames[t] + " " + d + " " + this.monthNames[m] + " " + y, this.data.dDate.position.x, this.data.dDate.position.y);
-        // foreground aClock
-        this.pane.strokeStyle = this.data.colors.foreground;
-        //hour
-        var hour = ((h % 12) * Math.PI / 6) + (i * Math.PI / (6 * 60)) + (s * Math.PI / (360 * 60));
-        renderHand(hour, this.data.aClock.radius * 0.5, this.data.aClock.radius * 0.07);
-        //minute
-        var minute = (i * Math.PI / 30) + (s * Math.PI / (30 * 60));
-        renderHand(minute, this.data.aClock.radius * 0.8, this.data.aClock.radius * 0.07);
-        // second
-        var second = (s * Math.PI / 30);
-        renderHand(second, this.data.aClock.radius * 0.9, this.data.aClock.radius * 0.02);
-        // debug
-        //renderDebug();
-	}
-	
-    var renderHand = function(pos, length, width) {
-        this.pane.beginPath();
-        this.pane.lineWidth = width;
-        this.pane.lineCap = "round";
-		this.pane.translate(this.data.aClock.center.x, this.data.aClock.center.y);
-        this.pane.moveTo(0, 0);
-        this.pane.rotate(pos);
-        this.pane.lineTo(0, -length);
-        this.pane.stroke();
-        this.pane.rotate(-pos);
-		this.pane.translate(-this.data.aClock.center.x, -this.data.aClock.center.y);
-        this.pane.lineWidth = 1;
-    }.bind(this);
-
-    var renderBG = function() {
-        // background dClock
-        this.bgPane.fillStyle = this.data.colors.shaddow;
-        this.bgPane.font = this.data.dClock.fonts.fat;
-        this.bgPane.fillText(":", this.data.dClock.positions.pulse.x, this.data.dClock.positions.pulse.y);
-        this.bgPane.font = this.data.dClock.fonts.big;
-        this.bgPane.fillText("88", this.data.dClock.positions.hour.x, this.data.dClock.positions.hour.y);
-        this.bgPane.fillText("88", this.data.dClock.positions.minute.x, this.data.dClock.positions.minute.y);
-        this.bgPane.font = this.data.dClock.fonts.small;
-        this.bgPane.fillText("88", this.data.dClock.positions.second.x, this.data.dClock.positions.second.y);
-        // background dDate
-        this.bgPane.font = this.data.dDate.font;
-        this.bgPane.fillText("00 00 000 0000", this.data.dDate.position.x, this.data.dDate.position.y);
-        this.bgPane.fillText("** ** *** ****", this.data.dDate.position.x, this.data.dDate.position.y);
-
-        if (typeof this.data.aClock.bgImage == "string") {
-            var img = new Image();
-            img.onload = function(e) {
-                this.data.aClock.bgImage = e.target;
-		        this.bgPane.drawImage(
-                    this.data.aClock.bgImage,
-                    this.data.aClock.bounds.inner.x,
-                    this.data.aClock.bounds.inner.y,
-                    this.data.aClock.bounds.inner.width,
-                    this.data.aClock.bounds.inner.height
-                );
-            }.bind(this);
-            img.src = "panels/clock/"+this.data.aClock.bgImage;
-        } else {
-            this.bgPane.drawImage(
-                this.data.aClock.bgImage,
-                this.data.aClock.bounds.inner.x,
-                this.data.aClock.bounds.inner.y,
-                this.data.aClock.bounds.inner.width,
-                this.data.aClock.bounds.inner.height
-            );
-        }
-    }.bind(this);
-
-    var resizeDClock = function() {
-        var aspect = 6 / 16;
-        var ratio = this.data.dClock.bounds.outer.width * aspect;
-        if (ratio > this.data.dClock.bounds.outer.height) {
-            this.data.dClock.bounds.inner.width	= this.data.dClock.bounds.outer.height / aspect;
-            this.data.dClock.bounds.inner.height	= this.data.dClock.bounds.outer.height;
-        } else if (ratio < this.data.dClock.bounds.outer.height) {
-            this.data.dClock.bounds.inner.width	= this.data.dClock.bounds.outer.width;
-            this.data.dClock.bounds.inner.height	= this.data.dClock.bounds.outer.width * aspect;
-        } else {
-            this.data.dClock.bounds.inner.width	= this.data.dClock.bounds.outer.width;
-            this.data.dClock.bounds.inner.height	= this.data.dClock.bounds.outer.height;
-        }
-        this.data.dClock.bounds.inner.x = this.data.dClock.bounds.outer.x + (this.data.dClock.bounds.outer.width - this.data.dClock.bounds.inner.width) / 2;
-        this.data.dClock.bounds.inner.y = this.data.dClock.bounds.outer.y + (this.data.dClock.bounds.outer.height - this.data.dClock.bounds.inner.height) / 2;
-        this.data.dClock.positions.pulse.x = this.data.dClock.bounds.inner.x + this.data.dClock.bounds.inner.width * 0.315;
-        this.data.dClock.positions.pulse.y = this.data.dClock.bounds.inner.y + this.data.dClock.bounds.inner.height * 0.72;
-        this.data.dClock.positions.hour.x = this.data.dClock.bounds.inner.x + this.data.dClock.bounds.inner.width * 0.02;
-        this.data.dClock.positions.hour.y = this.data.dClock.bounds.inner.y + this.data.dClock.bounds.inner.height * 0.88;
-        this.data.dClock.positions.minute.x = this.data.dClock.bounds.inner.x + this.data.dClock.bounds.inner.width * 0.43;
-        this.data.dClock.positions.minute.y = this.data.dClock.bounds.inner.y + this.data.dClock.bounds.inner.height * 0.88;
-        this.data.dClock.positions.second.x = this.data.dClock.bounds.inner.x + this.data.dClock.bounds.inner.width * 0.79;
-        this.data.dClock.positions.second.y = this.data.dClock.bounds.inner.y + this.data.dClock.bounds.inner.height * 0.85;
-        var
-            bigFontSize = this.data.dClock.bounds.inner.height * 1.3,
-            smlFontSize = this.data.dClock.bounds.inner.height * 0.7;
-        this.data.dClock.fonts.fat   = bigFontSize + "px " + this.data.fonts.fat;
-        this.data.dClock.fonts.big   = bigFontSize + "px " + this.data.fonts.medium;
-        this.data.dClock.fonts.small = smlFontSize + "px " + this.data.fonts.medium;
-    }.bind(this);
-
-    var resizeDDate = function() {
-        var aspect = 2.3 / 16;
-        var ratio = this.data.dDate.bounds.outer.width * aspect;
-        if (ratio > this.data.dDate.bounds.outer.height) {
-            this.data.dDate.bounds.inner.width	= this.data.dDate.bounds.outer.height / aspect;
-            this.data.dDate.bounds.inner.height	= this.data.dDate.bounds.outer.height;
-        } else if (ratio < this.data.dDate.bounds.outer.height) {
-            this.data.dDate.bounds.inner.width	= this.data.dDate.bounds.outer.width;
-            this.data.dDate.bounds.inner.height	= this.data.dDate.bounds.outer.width * aspect;
-        } else {
-            this.data.dDate.bounds.inner.width	= this.data.dDate.bounds.outer.width;
-            this.data.dDate.bounds.inner.height	= this.data.dDate.bounds.outer.height;
-        }
-        this.data.dDate.bounds.inner.x = this.data.dDate.bounds.outer.x + (this.data.dDate.bounds.outer.width - this.data.dDate.bounds.inner.width) / 2;
-        this.data.dDate.bounds.inner.y = this.data.dDate.bounds.outer.y + (this.data.dDate.bounds.outer.height - this.data.dDate.bounds.inner.height) / 2;
-        this.data.dDate.position.x = this.data.dDate.bounds.inner.x + this.data.dDate.bounds.inner.width * 0.02;
-        this.data.dDate.position.y = this.data.dDate.bounds.inner.y + this.data.dDate.bounds.inner.height * 0.88;
-        var fontSize = this.data.dDate.bounds.inner.height * 1.3;
-        this.data.dDate.font = fontSize + "px " + this.data.fonts.medium;
-    }.bind(this);
-
-    var resizeAClock = function() {
-        if (this.data.aClock.bounds.outer.width > this.data.aClock.bounds.outer.height) {
-            this.data.aClock.bounds.inner.width  = this.data.aClock.bounds.outer.height;
-            this.data.aClock.bounds.inner.height = this.data.aClock.bounds.outer.height;
-        } else if (this.data.aClock.bounds.outer.width < this.data.aClock.bounds.outer.height) {
-            this.data.aClock.bounds.inner.width  = this.data.aClock.bounds.outer.width;
-            this.data.aClock.bounds.inner.height = this.data.aClock.bounds.outer.width;
-        } else {
-            this.data.aClock.bounds.inner.width  = this.data.aClock.bounds.outer.width;
-            this.data.aClock.bounds.inner.height = this.data.aClock.bounds.outer.height;
-        }
-        this.data.aClock.bounds.inner.x = this.data.aClock.bounds.outer.x + (this.data.aClock.bounds.outer.width - this.data.aClock.bounds.inner.width) / 2;
-        this.data.aClock.bounds.inner.y = this.data.aClock.bounds.outer.y + (this.data.aClock.bounds.outer.height - this.data.aClock.bounds.inner.height) / 2;
-        this.data.aClock.center.x = this.data.aClock.bounds.inner.x + this.data.aClock.bounds.inner.width / 2;
-        this.data.aClock.center.y = this.data.aClock.bounds.inner.y + this.data.aClock.bounds.inner.height / 2;
-        this.data.aClock.radius = this.data.aClock.bounds.inner.height * 0.45;
-    }.bind(this);
-
-    var renderDebug = function() {
-        // panel bounds
-        this.pane.strokeStyle = "#ff0";
-        this.pane.strokeRect(this.data.bounds.inner.x, this.data.bounds.inner.y, this.data.bounds.inner.width, this.data.bounds.inner.height);
-        this.pane.strokeStyle = "#0ff";
-        this.pane.strokeRect(this.data.bounds.outer.x, this.data.bounds.outer.y, this.data.bounds.outer.width, this.data.bounds.outer.height);
-        // inner bounds
-        this.pane.strokeStyle = "#0f0";
-        this.pane.strokeRect(this.data.dClock.bounds.inner.x, this.data.dClock.bounds.inner.y, this.data.dClock.bounds.inner.width, this.data.dClock.bounds.inner.height);
-        this.pane.strokeRect(this.data.dDate.bounds.inner.x, this.data.dDate.bounds.inner.y, this.data.dDate.bounds.inner.width, this.data.dDate.bounds.inner.height);
-        this.pane.strokeRect(this.data.aClock.bounds.inner.x, this.data.aClock.bounds.inner.y, this.data.aClock.bounds.inner.width, this.data.aClock.bounds.inner.height);
-        // outer bounds
-        this.pane.strokeStyle = "#f0f";
-        this.pane.strokeRect(this.data.dClock.bounds.outer.x, this.data.dClock.bounds.outer.y, this.data.dClock.bounds.outer.width, this.data.dClock.bounds.outer.height);
-        this.pane.strokeRect(this.data.dDate.bounds.outer.x, this.data.dDate.bounds.outer.y, this.data.dDate.bounds.outer.width, this.data.dDate.bounds.outer.height);
-        this.pane.strokeRect(this.data.aClock.bounds.outer.x, this.data.aClock.bounds.outer.y, this.data.aClock.bounds.outer.width, this.data.aClock.bounds.outer.height);
-        this.pane.strokeStyle = "";
-    }.bind(this);
-	
-}
\ No newline at end of file
diff --git a/js/worker/AJAX.js b/js/worker/AJAX.js
deleted file mode 100644
index 80c62b4..0000000
--- a/js/worker/AJAX.js
+++ /dev/null
@@ -1,138 +0,0 @@
-AJAX = new (function AJAX() {
-		
-	function newXHR() {
-		return !!self.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
-	}
-
-    function serialize(obj, prefix) {
-        var str = [];
-        for (var p in obj) {
-          if (obj.hasOwnProperty(p)) {
-            var k = prefix ? prefix + "[" + p + "]" : p,
-                  v = obj[p];
-              str.push(typeof v == "object" ? serialize(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v));
-          }
-        }
-        return str.join("&");
-    }
-	
-	function decodeResponse(type, response) {
-		try {			
-			switch (type) {
-				case "application/json":
-					return JSON.parse(response);
-				default:
-					return response;
-			}
-		} catch(e) {
-			
-		}
-		return response;
-	}
-	
-	function doReject(strict, result){
-		return !!strict ? Promise.reject(result) : Promise.resolve(result);
-	}
-
-    function doRequest(url, method, params, strict) {
-        return new Promise(function(resolve, reject) {
-			try {
-				if (typeof url != 'string') {
-					return doReject(strict, {
-						success: false,
-						response: 'url parameter must be string',
-						status: 0
-					}).then(resolve, reject);
-				}
-				if (typeof method != 'string') {
-					return doReject(strict, {
-						success: false,
-						response: 'method parameter must be string',
-						status: 0
-					}).then(resolve, reject);
-				}
-				method = method.toUpperCase();
-				var xhr = newXHR();
-				xhr.onload = function(e) {
-					if (e.target.status == 200) {
-						var response = decodeResponse(e.target.getResponseHeader("Content-Type"), e.target.response);
-						resolve({
-							success: true,
-							response: response,
-							status: e.target.status
-						});	
-					} else {
-						var statusText = e.target.statusText;
-						if (!statusText.length) statusText = "unexpected error";
-						doReject(strict, {
-							success: false,
-							response: statusText, 
-							status: e.target.status
-						}).then(resolve, reject);
-					}
-				}
-				xhr.onerror = function(e) {
-					var statusText = e.target.statusText;
-					if (!statusText.length) statusText = "unexpected error";
-					doReject(strict, {
-						success: false,
-						response: statusText,
-						status: e.target.status
-					}).then(resolve, reject);
-				}
-				xhr.onabort = function(e) {
-					doReject(strict, {
-						success: false,
-						response: 'download aborted',
-						status: 0
-					}).then(resolve, reject);
-				}
-				params = typeof params == 'object' ? serialize(params) : '';
-				if (method === 'GET') {
-					if (!!params.length) params = "?" + params;
-					xhr.open(method, url+params);
-					xhr.send();
-				} else {
-					xhr.open(method, url);
-					xhr.send(!!params.length ? params : undefined);
-				}
-			} catch(e) {
-					doReject(strict, {
-						success: false,
-						response: e.message,
-						status: 0
-					}).then(resolve, reject);
-			}
-        });
-    }
-	
-	this.request = function(requests, strict) {
-		if (typeof strict != 'boolean') strict = true;
-		try {
-			if (typeof requests == 'string') {
-				return doRequest(requests, 'GET', [], strict);
-			} else {
-				if (typeof requests == 'object') {
-					if (Array.isArray(requests)) {
-						var proms = [];
-						for (var i = 0; i < requests.length; ++i)
-							proms.push(this.request(requests[i], strict));
-						return Promise.all(proms);
-					} else {
-						return doRequest(requests.url, requests.method, requests.params, strict);
-					}
-				}
-				throw new Error('wrong type (string/array/dict expected, '+(typeof requests)+' detected)');
-			}
-		} catch(e) {
-			return doReject(strict, {
-				success: false,
-				response: e.message,
-				status: 0
-			});
-		}
-	}
-
-	return Object.freeze(this);
-	
-});
\ No newline at end of file
diff --git a/js/worker/AbstractWorker.js b/js/worker/AbstractWorker.js
deleted file mode 100644
index 32db1f5..0000000
--- a/js/worker/AbstractWorker.js
+++ /dev/null
@@ -1,75 +0,0 @@
-class AbstractWorker {
-	
-	constructor() {
-		this.config = {};
-		
-		var
-			ival = 1000,
-			timer,
-			cmds = [],
-			execRun = false;
-		
-		var update = function() {
-			if (!!timer) self.clearTimeout(timer);
-			this.tick(function(result) {
-				self.postMessage(result);
-			});
-			if (ival > 0) timer = self.setTimeout(update, ival);
-		}.bind(this);
-	
-		var exec = function() {
-			if (!!cmds.length) {
-				execRun = true;
-				var cmd = cmds.shift();
-				if (typeof this[cmd.cmd] == "function") {
-					this[cmd.cmd].apply(this,cmd.params);
-				} else {
-					exec();
-				}
-			} else {
-				execRun = false;
-			}
-		}.bind(this);
-	
-		this.start = function() {
-			update();
-			exec();
-		}
-		
-		this.stop = function() {
-			if (!!timer) self.clearTimeout(timer);
-			exec();
-		}
-		
-		this.loadConfig = function(name) {
-			AJAX.request("../../panels/departure/config/"+name+".json").then(function(data) {
-				this.config = this.processConfig(data.response);
-				exec();
-			}.bind(this),function() {
-				exec();
-			});
-		}
-	
-		self.onmessage = function(e) {
-			cmds.push(e.data);
-			if (!execRun) exec();
-		}.bind(this);
-		
-		this.setSpeed = function(val) {
-			if (isNaN(val = parseInt(val))) {
-				val = 0;
-			}
-			ival = val;
-		}
-		
-	}
-	
-	tick(callback) {
-		callback({});
-	}
-	
-	processConfig(config) {
-		return config;
-	}
-		
-}
\ No newline at end of file
diff --git a/js/worker/DepartureWorker.js b/js/worker/DepartureWorker.js
deleted file mode 100644
index 26e31dc..0000000
--- a/js/worker/DepartureWorker.js
+++ /dev/null
@@ -1,164 +0,0 @@
-importScripts('AJAX.js');
-importScripts('check.js');
-importScripts('AbstractWorker.js');
-
-class DepartureWorker extends AbstractWorker {
-	
-	constructor() {
-		super();
-		this.setSpeed(360000);
-	}
-	
-	processConfig(config) {
-		if (isObject(config) && isArrayNotEmpty(config['stops'])) {
-			config['stops_converted'] = [];
-			for (var i = 0; i < config['stops'].length; ++i) {
-				config['stops_converted'].push({url:'https://vrrf.finalrewind.org/'+config['stops'][i].split(':').join('/')+'.json',method:'GET',params:{frontend:'json'}});
-			}	
-		}
-		return config;
-	}
-	
-	tick(callback) {
-		var config = this.config;
-		if (isObject(config) && isArrayNotEmpty(config['stops_converted'])) {
-			AJAX.request(config['stops_converted']).then(function(results) {
-				if (results.length == 0) return;
-				var
-					reftime = new Date(),
-					result = {
-						vrrf_version: {
-							actual: '0.0.0.0',
-							expected: '0.0.0.0'
-						},
-						errors: {},
-						info: {},
-						lines: {},
-						raw: {}
-					},
-					rawLines = {};
-				reftime = calcDateValue(reftime.getFullYear(), reftime.getMonth()+1, reftime.getDate(), reftime.getHours(), reftime.getMinutes());
-				for (var i = 0; i < results.length; ++i) {
-					if (!results[i].success) continue;
-					var data = results[i].response;
-					if (!isObject(data)) data = JSON.parse(data);
-					var stopName = config['stops'][i].split('/').join(' - ');
-					result['vrrf_version']['actual'] = data['version'];
-					result['vrrf_version']['expected'] = '0.0.0.0';
-					result['errors'][stopName] = data['error'];
-					result['info'][stopName] = '';
-					result['raw'][stopName] = data['raw'];
-					for (var j = 0; j < data['raw'].length; ++j) {
-						var entry = data['raw'][j];
-						// filter
-						//if (isObjectNotEmpty(config['filter']) && !passFilter(config['filter'], entry)) continue;
-						// interprete
-						var
-							schedDate = entry['sched_date'].split('.'),
-							schedTime = entry['sched_time'].split(':'),
-							deptime = calcDateValue(schedDate[2], schedDate[1], schedDate[0], schedTime[0], schedTime[1]);
-						var delay = parseInt(entry['delay']);
-						if (isNaN(delay)) delay = 0;
-						if (((deptime + delay) - reftime) > 0) {
-							var ident = /*entry['lineref']['operator']+'|'+entry['lineref']['type']+'|'+*/entry['line']+'|'+entry['lineref']['identifier']+'|'+entry['key'];
-							if (!isObjectNotEmpty(result['lines'][ident])) {
-								result['lines'][ident] = {
-									timeValue: deptime,
-									line: entry['line'],
-									destination: entry['destination'],
-									type: entry['type'],
-									stops: [{
-										timeValue: deptime,
-										time: entry['sched_time'],
-										delay: entry['delay'],
-										cancel: entry['is_cancelled'],
-										name: stopName,
-										info: entry['info']
-									}]
-								};
-							} else {
-								result['lines'][ident]['stops'].push({
-										timeValue: deptime,
-										time: entry['sched_time'],
-										delay: entry['delay'],
-										cancel: entry['is_cancelled'],
-										name: stopName,
-										info: entry['info']
-									});
-							}
-						}
-					}
-				}
-				result['lines'] = sortData(Object.values(result['lines']));
-				if (isNumber(config.max)) {
-					result['lines'] = result['lines'].slice(0, config.max);
-				}
-				callback(result);
-			});	
-		}
-	}
-	
-}
-
-function passFilter(filter, entry) {
-	if (isObjectNotEmpty(filter['bl'])) {
-		if (isArrayNotEmpty(filter['bl']['line'])
-		&&  arrayContains(filter['bl']['line'], entry['line'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['type'])
-		&&  arrayContains(filter['bl']['type'], entry['type'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['platform'])
-		&&  arrayContains(filter['bl']['platform'], entry['platform'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['destination'])
-		&&  arrayContains(filter['bl']['destination'], entry['destination'])) {
-			return false;
-		}
-	}
-	if (isObjectNotEmpty(filter['wl'])) {
-		if (isArrayNotEmpty(filter['wl']['line'])
-		&&  !arrayContains(filter['wl']['line'], entry['line'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['type'])
-		&&  !arrayContains(filter['wl']['type'], entry['type'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['platform'])
-		&&  !arrayContains(filter['wl']['platform'], entry['platform'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['destination'])
-		&&  !arrayContains(filter['wl']['destination'], entry['destination'])) {
-				return false;
-		}
-	}
-	return true;
-}
-
-function sortData(data) {
-	for (var i = 0; i < data.length; ++i) {
-		data[i]['stops'] = data[i]['stops'].sort(sortFn);
-		data[i]['timeValue'] = data[i]['stops'][0]['timeValue'];
-	}
-	return data.sort(sortFn);
-}
-
-function sortFn(a,b) {
-	return a['timeValue'] - b['timeValue'];
-}
-
-function calcDateValue(year, month, day, hour, minute) {
-	year = parseInt(year) * 12 * 31 * 24 * 60;
-	month = parseInt(month) * 31 * 24 * 60;
-	day = parseInt(day) * 24 * 60;
-	hour = parseInt(hour) * 60;
-	minute = parseInt(minute);
-	return year+month+day+hour+minute;
-}
-
-new DepartureWorker;
diff --git a/js/worker/Worker.js b/js/worker/Worker.js
deleted file mode 100644
index 2512e11..0000000
--- a/js/worker/Worker.js
+++ /dev/null
@@ -1,60 +0,0 @@
-self.interval = self.interval || 1000;
-self.tick = self.tick || function() {};
-self.config = self.config || {};
-
-(new function() {
-	var
-		me = this,
-		timer,
-		cmds = [],
-		execRun = false;
-	
-	function update() {
-		if (!!timer) self.clearTimeout(timer);
-		self.tick(function(result) {
-			self.postMessage(result);
-		});
-		timer = self.setTimeout(update, self.interval);
-	}
-	
-	function exec() {
-		if (!!cmds.length) {
-			execRun = true;
-			var cmd = cmds.shift();
-			me[cmd.cmd].apply(this,cmd.params);
-		} else {
-			execRun = false;
-		}
-	}
-	
-	this.start = function() {
-		update();
-		exec();
-	}
-	
-	this.stop = function() {
-		if (!!timer) self.clearTimeout(timer);
-		exec();
-	}
-	
-	this.loadConfig = function(name) {
-		AJAX.request("../../panels/departure/config/"+name+".json").then(function(data) {
-			config = data.response;
-			if (isObject(config) && isArrayNotEmpty(config['stops'])) {
-				config['stops_converted'] = [];
-				for (var i = 0; i < config['stops'].length; ++i) {
-					config['stops_converted'].push({url:'http://vrrf.finalrewind.org/'+config['stops'][i].split(':').join('/')+'.json',method:'GET',params:{frontend:'json'}});
-				}	
-			}
-			exec();
-		},function() {
-			exec();
-		});
-	}
-	
-	self.onmessage = function(e) {
-		cmds.push(e.data);
-		if (!execRun) exec();
-	}.bind(this);
-	
-}());
\ No newline at end of file
diff --git a/js/worker/WorkerDeparture.js b/js/worker/WorkerDeparture.js
deleted file mode 100644
index d58c7a0..0000000
--- a/js/worker/WorkerDeparture.js
+++ /dev/null
@@ -1,138 +0,0 @@
-importScripts('AJAX.js');
-importScripts('check.js');
-
-self.interval = 360000;
-
-self.tick = function(callback) {
-	var config = self.config;
-	if (isObject(config) && isArrayNotEmpty(config['stops_converted'])) {
-		AJAX.request(config['stops_converted']).then(function(results) {
-			if (results.length == 0) return;
-			var
-				result = {
-					vrrf_version: {
-						actual: '0.0.0.0',
-						expected: '0.0.0.0'
-					},
-					errors: {},
-					info: {},
-					lines: {},
-					raw: {}
-				},
-				rawLines = {};
-			for (var i = 0; i < results.length; ++i) {
-				if (!results[i].success) continue;
-				var data = JSON.parse(results[i].response);
-				var stopName = config['stops'][i].split(':').join(' - ');
-				result['vrrf_version']['actual'] = data['version'];
-				result['vrrf_version']['expected'] = '0.0.0.0';
-				result['errors'][stopName] = data['error'];
-				result['info'][stopName] = '';
-				result['raw'][stopName] = data['raw'];
-				for (var j = 0; j < data['raw'].length; ++j) {
-					var entry = data['raw'][j];
-					// filter
-					if (isObjectNotEmpty(config['filter']) && !passFilter(config['filter'], entry)) continue;
-					// interprete
-					var
-						reftime = new Date(),
-						schedDate = entry['sched_date'].split('.'),
-						schedTime = entry['sched_time'].split(':'),
-						deptime = calcDateValue(schedDate[0], schedTime[0], schedTime[1]);
-					reftime = calcDateValue(reftime.getDate(), reftime.getHours(), reftime.getMinutes());
-					if (deptime + parseInt(entry['delay']) - reftime) {
-						var ident = entry['lineref']['operator']+'|'+entry['lineref']['type']+'|'+entry['line']+'|'+entry['lineref']['identifier']+'|'+entry['key'];
-						if (!isObjectNotEmpty(result['lines'][ident])) {
-							result['lines'][ident] = {
-								timeValue: deptime,
-								line: entry['line'],
-								destination: entry['destination'],
-								type: entry['type'],
-								stops: [{
-									timeValue: deptime,
-									time: entry['sched_time'],
-									delay: entry['delay'],
-									cancel: entry['is_cancelled'],
-									name: stopName,
-									info: entry['info']
-								}]
-							};
-						} else {
-							result['lines'][ident]['stops'].push({
-									timeValue: deptime,
-									time: entry['sched_time'],
-									delay: entry['delay'],
-									cancel: entry['is_cancelled'],
-									name: stopName,
-									info: entry['info']
-								});
-						}
-					}
-				}
-			}
-			result['lines'] = sortData(Object.values(result['lines']));
-			if (isNumber(config.max)) {
-				result['lines'] = result['lines'].slice(0, config.max);
-			}
-			callback(result);
-		});	
-	}
-}
-
-function passFilter(filter, entry) {
-	if (isObjectNotEmpty(filter['bl'])) {
-		if (isArrayNotEmpty(filter['bl']['line'])
-		&&  arrayContains(filter['bl']['line'], entry['line'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['type'])
-		&&  arrayContains(filter['bl']['type'], entry['type'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['platform'])
-		&&  arrayContains(filter['bl']['platform'], entry['platform'])) {
-			return false;
-		}
-		if (isArrayNotEmpty(filter['bl']['destination'])
-		&&  arrayContains(filter['bl']['destination'], entry['destination'])) {
-			return false;
-		}
-	}
-	if (isObjectNotEmpty(filter['wl'])) {
-		if (isArrayNotEmpty(filter['wl']['line'])
-		&&  !arrayContains(filter['wl']['line'], entry['line'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['type'])
-		&&  !arrayContains(filter['wl']['type'], entry['type'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['platform'])
-		&&  !arrayContains(filter['wl']['platform'], entry['platform'])) {
-				return false;
-		}
-		if (isArrayNotEmpty(filter['wl']['destination'])
-		&&  !arrayContains(filter['wl']['destination'], entry['destination'])) {
-				return false;
-		}
-	}
-	return true;
-}
-
-function sortData(data) {
-	for (var i = 0; i < data.length; ++i) {
-		data[i]['stops'] = data[i]['stops'].sort(sortFn);
-		data[i]['timeValue'] = data[i]['stops'][0]['timeValue'];
-	}
-	return data.sort(sortFn);
-}
-
-function sortFn(a,b) {
-	return a['timeValue'] > b['timeValue'];
-}
-
-function calcDateValue(day, hour, minute) {
-	return parseInt(day) * 24 * 60 + parseInt(hour) * 60 + parseInt(minute);
-}
-
-importScripts('Worker.js');
\ No newline at end of file
diff --git a/js/worker/check.js b/js/worker/check.js
deleted file mode 100644
index cce4070..0000000
--- a/js/worker/check.js
+++ /dev/null
@@ -1,64 +0,0 @@
-function isEmpty(value) {
-	switch (typeof value) {
-		case 'undefined':
-			return true;
-			break;
-		case 'object':
-			if (Array.isArray(value)) return value.length <= 0;
-			return value === null || Object.getOwnPropertyNames(value).length <= 0;
-			break;
-		case 'string':
-			return value == "";
-			break;
-		case 'number':
-			return isNaN(value);
-			break;
-		default:
-			return false;
-			break;
-	}
-}
-
-function isFunction(value) {
-	return typeof(value) == 'function';
-}
-
-function isObject(value) {
-	return typeof(value) == 'object' && !Array.isArray(value);
-}
-
-function isObjectNotEmpty(value) {
-	return typeof(value) == 'object' && !Array.isArray(value) && Object.getOwnPropertyNames(value).length > 0;
-}
-
-function isArray(value) {
-	return Array.isArray(value);
-}
-
-function isArrayNotEmpty(value) {
-	return Array.isArray(value) && value.length > 0;
-}
-
-function isString(value) {
-	return typeof(value) == 'string';
-}
-
-function isStringNotEmpty(value) {
-	return typeof(value) == 'string' && value != "";
-}
-
-function isNumber(value) {
-	return typeof(value) == 'number';
-}
-
-function isInteger(value) {
-	return Number.isSafeInteger(value);
-}
-
-function isBoolean(value) {
-	return typeof(value) == 'boolean';
-}
-
-function arrayContains(array, value) {
-	return isArray(array) && !!(array.indexOf(value)+1);
-}
\ No newline at end of file
diff --git a/panels/departure/script.js b/panels/departure/script.js
index 166f8ea..7bfd53c 100755
--- a/panels/departure/script.js
+++ b/panels/departure/script.js
@@ -60,7 +60,7 @@ this.loaded = function(panel, config) {
 	$(window).resize(r);
 	
 	//var worker = new Worker('js/worker/WorkerDeparture.js');
-	var worker = new Worker('js/worker/DepartureWorker.js');
+	var worker = new Worker('/panels/departure/worker.js');
 	
 	worker.addEventListener('message', function(e) {
 		var data = e.data;
-- 
GitLab