summaryrefslogtreecommitdiffstats
path: root/content/modules/tools.js
diff options
context:
space:
mode:
Diffstat (limited to 'content/modules/tools.js')
-rw-r--r--content/modules/tools.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/content/modules/tools.js b/content/modules/tools.js
new file mode 100644
index 0000000..fe406b9
--- /dev/null
+++ b/content/modules/tools.js
@@ -0,0 +1,80 @@
+/*
+ * This file is part of TbSync.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+ "use strict";
+
+var tools = {
+
+ load: async function () {
+ },
+
+ unload: async function () {
+ },
+
+ // async sleep function using Promise to postpone actions to keep UI responsive
+ sleep : function (_delay, useRequestIdleCallback = false) {
+ let useIdleCallback = false;
+ let delay = 5;//_delay;
+ if (TbSync.window.requestIdleCallback && useRequestIdleCallback) {
+ useIdleCallback = true;
+ delay= 2;
+ }
+ let timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
+
+ return new Promise(function(resolve, reject) {
+ let event = {
+ notify: function(timer) {
+ if (useIdleCallback) {
+ TbSync.window.requestIdleCallback(resolve);
+ } else {
+ resolve();
+ }
+ }
+ }
+ timer.initWithCallback(event, delay, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
+ });
+ },
+
+ // this is derived from: http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/
+ // javascript strings are utf16, btoa needs utf8 , so we need to encode
+ toUTF8: function (str) {
+ var utf8 = "";
+ for (var i=0; i < str.length; i++) {
+ var charcode = str.charCodeAt(i);
+ if (charcode < 0x80) utf8 += String.fromCharCode(charcode);
+ else if (charcode < 0x800) {
+ utf8 += String.fromCharCode(0xc0 | (charcode >> 6),
+ 0x80 | (charcode & 0x3f));
+ }
+ else if (charcode < 0xd800 || charcode >= 0xe000) {
+ utf8 += String.fromCharCode(0xe0 | (charcode >> 12),
+ 0x80 | ((charcode>>6) & 0x3f),
+ 0x80 | (charcode & 0x3f));
+ }
+
+ // surrogate pair
+ else {
+ i++;
+ // UTF-16 encodes 0x10000-0x10FFFF by
+ // subtracting 0x10000 and splitting the
+ // 20 bits of 0x0-0xFFFFF into two halves
+ charcode = 0x10000 + (((charcode & 0x3ff)<<10)
+ | (str.charCodeAt(i) & 0x3ff))
+ utf8 += String.fromCharCode(0xf0 | (charcode >>18),
+ 0x80 | ((charcode>>12) & 0x3f),
+ 0x80 | ((charcode>>6) & 0x3f),
+ 0x80 | (charcode & 0x3f));
+ }
+ }
+ return utf8;
+ },
+
+ b64encode: function (str) {
+ return btoa(this.toUTF8(str));
+ }
+}