summaryrefslogtreecommitdiff
path: root/data/extensions/html5-video-everywhere@lejenome.me/data/common.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/html5-video-everywhere@lejenome.me/data/common.js')
-rw-r--r--data/extensions/html5-video-everywhere@lejenome.me/data/common.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/data/extensions/html5-video-everywhere@lejenome.me/data/common.js b/data/extensions/html5-video-everywhere@lejenome.me/data/common.js
new file mode 100644
index 0000000..4686831
--- /dev/null
+++ b/data/extensions/html5-video-everywhere@lejenome.me/data/common.js
@@ -0,0 +1,109 @@
+/* global OPTIONS:true, onPrefChange:true, LANGS:true */
+/* global createNode:true, asyncGet:true, onReady:true, logify:true */
+/* global preLoad:true, autoPlay:true, HANDLE_VOL_PREF_CHANGE:true */
+/* global rmChildren:true, Qlt:true, Cdc:true, chgPref:true, isLoop:true */
+/* global setClipboard:true */
+// the following jshint global rule is only because jshint support for ES6 arrow
+// functions is limited
+/* global wrapper:true, args:true, auto:true, lp:true */
+"use strict";
+
+//This Addons Preferences
+var OPTIONS, init;
+// push your prefernces change listner function to this table, yah the old way
+const onPrefChange = [];
+const Cdc = ["webm", "mp4"];
+const Qlt = ["higher", "high", "medium", "low"];
+const LANGS = ["af", "ar", "bn", "de", "en", "es", "fi", "fr", "hi", "id", "is", "it", "ja", "ko", "pt", "ru", "tu", "zh"];
+// set it to false if the module uses custom listener
+var HANDLE_VOL_PREF_CHANGE = true;
+self.port.on("preferences", function(prefs) {
+ OPTIONS = prefs;
+ if (init)
+ init();
+ onPrefChange.forEach(f => f());
+});
+
+self.port.on("prefChanged", function(pref) {
+ OPTIONS[pref.name] = pref.value;
+ if (pref.name === "volume" && HANDLE_VOL_PREF_CHANGE === true)
+ Array.forEach(document.getElementsByTagName("video"), el => {
+ el.volume = OPTIONS.volume / 100;
+ });
+ onPrefChange.forEach(f => f(pref.name));
+});
+const chgPref = (name, val) => {
+ self.port.emit("prefChang", {
+ name: name,
+ val: val
+ });
+};
+const setClipboard = (text) =>
+ self.port.emit("setClipboard", text);
+const createNode = (type, prprt, style, data) => {
+ //logify("createNode", type, prprt);
+ var node = document.createElement(type);
+ if (prprt)
+ Object.keys(prprt).forEach(p => node[p] = prprt[p]);
+ if (style)
+ Object.keys(style).forEach(s => node.style[s] = style[s]);
+ if (data)
+ Object.keys(data).forEach(d => node.dataset[d] = data[d]);
+ return node;
+};
+
+const asyncGet = (url, headers, mimetype) => {
+ logify("asyncGet", url);
+ return new Promise(function(resolve, reject) {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url, true);
+ if (headers)
+ Object.keys(headers).forEach(h => xhr.setRequestHeader(h, headers[h]));
+ if (mimetype && xhr.overrideMimeType)
+ xhr.overrideMimeType(mimetype);
+ xhr.onload = function() {
+ if (this.status !== 200) {
+ reject(this.status);
+ logify("Error on asyncGet", url, headers, this.status);
+ return;
+ }
+ resolve(this.responseText);
+ };
+ xhr.onerror = function() {
+ reject();
+ };
+ xhr.send();
+ });
+};
+
+const logify = (...args) => {
+ args = args.map(s => JSON.stringify(s, null, 2));
+ args.unshift("[DRIVER]");
+ dump(args.join(" ") + "\n");
+};
+
+const onReady = f => {
+ if (document.readyState !== "loading") {
+ if (OPTIONS)
+ f();
+ else
+ init = f;
+ } else {
+ document.addEventListener("DOMContentLoaded", () => {
+ if (OPTIONS)
+ f();
+ else
+ init = f;
+ });
+ }
+};
+const autoPlay = (auto = false) => ((OPTIONS.autoplay === 1 || auto === true) &&
+ OPTIONS.autoplay !== 0);
+const preLoad = (auto = false) => ((OPTIONS.preload === 1 || auto === true) &&
+ OPTIONS.preload !== 0) ? "auto" : "metadata";
+const isLoop = (lp = false) => ((OPTIONS.loop === 1 || lp) && OPTIONS.loop !== 0);
+
+const rmChildren = (prnt) => {
+ while (prnt && prnt.firstChild)
+ prnt.removeChild(prnt.firstChild);
+}; \ No newline at end of file