aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2020-05-02 17:41:29 -0500
committerJesús <heckyel@hyperbola.info>2020-05-02 17:41:29 -0500
commitc9532aa9677a920d46dad57d1fa87c7c20778264 (patch)
tree03e9030299ba9b2ddc05a48aa551dd382e68b7c3
parent88e55b7e0c00b529e28c1e65b86ee99254a65dfb (diff)
downloadematrix-c9532aa9677a920d46dad57d1fa87c7c20778264.tar.lz
ematrix-c9532aa9677a920d46dad57d1fa87c7c20778264.tar.xz
ematrix-c9532aa9677a920d46dad57d1fa87c7c20778264.zip
Make utils.js a module
The main difference is that modules share their code within the same session.
-rw-r--r--Makefile6
-rw-r--r--background.html1
-rw-r--r--js/messaging.js6
-rw-r--r--js/storage.js9
-rw-r--r--lib/Tools.jsm118
5 files changed, 129 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index f53de80..ed2e82d 100644
--- a/Makefile
+++ b/Makefile
@@ -100,7 +100,7 @@ IMG := $(IMGICON) $(IMGOTHER)
LIB := lib/PublicSuffixList.jsm lib/Punycode.jsm lib/FrameModule.jsm \
lib/CallbackWrapper.jsm lib/HttpRequestHeaders.jsm \
lib/PendingRequests.jsm lib/CookieCache.jsm lib/UriTools.jsm \
- lib/LiquidDict.jsm lib/HostMap.jsm
+ lib/LiquidDict.jsm lib/HostMap.jsm lib/Tools.jsm
# The locale folder is split into parts because it's a long list
# and it's somewhat easier to read this way
@@ -145,8 +145,8 @@ JS2 := js/httpsb.js js/i18n.js js/logger.js js/logger-ui.js \
js/pagestats.js js/popup.js js/profiler.js js/raw-settings.js \
js/settings.js js/start.js js/storage.js
-JS3 := js/tab.js js/traffic.js js/udom.js js/user-rules.js \
- js/usersettings.js js/utils.js js/xal.js
+JS3 := js/tab.js js/traffic.js js/udom.js js/user-rules.js \
+ js/usersettings.js js/xal.js
JS4 := js/vapi-client.js js/vapi-common.js js/vapi-background.js \
js/vapi-tabs.js js/vapi-window.js js/vapi-core.js \
diff --git a/background.html b/background.html
index 350a2d8..399a33a 100644
--- a/background.html
+++ b/background.html
@@ -44,7 +44,6 @@
<script src="js/xal.js"></script>
<script src="js/usersettings.js"></script>
<script src="js/matrix.js"></script>
- <script src="js/utils.js"></script>
<script src="js/assets.js"></script>
<script src="js/httpsb.js"></script>
<script src="js/cookies.js"></script>
diff --git a/js/messaging.js b/js/messaging.js
index 03d6481..133d5ed 100644
--- a/js/messaging.js
+++ b/js/messaging.js
@@ -25,7 +25,7 @@
// Default handler
(function () {
- Cu.import('chrome://ematrix/content/lib/UriTools.jsm');
+ Cu.import('chrome://ematrix/content/lib/Tools.jsm');
let ηm = ηMatrix;
@@ -69,10 +69,10 @@
};
break;
case 'gotoExtensionURL':
- ηm.gotoExtensionURL(request);
+ Tools.gotoExtensionURL(request);
break;
case 'gotoURL':
- ηm.gotoURL(request);
+ Tools.gotoURL(request);
break;
case 'mustBlock':
response = ηm.mustBlock(request.scope,
diff --git a/js/storage.js b/js/storage.js
index 469ee7e..fd51235 100644
--- a/js/storage.js
+++ b/js/storage.js
@@ -26,6 +26,7 @@
'use strict';
Components.utils.import('chrome://ematrix/content/lib/PublicSuffixList.jsm');
+Components.utils.import('chrome://ematrix/content/lib/Tools.jsm');
/******************************************************************************/
@@ -113,7 +114,7 @@ Components.utils.import('chrome://ematrix/content/lib/PublicSuffixList.jsm');
ηMatrix.rawSettingsFromString = function(raw) {
var result = {},
- lineIter = new this.LineIterator(raw),
+ lineIter = new Tools.LineIterator(raw),
line, matches, name, value;
while ( lineIter.eot() === false ) {
line = lineIter.next().trim();
@@ -193,14 +194,14 @@ Components.utils.import('chrome://ematrix/content/lib/PublicSuffixList.jsm');
var out = new Set(),
reIgnore = /^[!#]/,
reValid = /^[a-z-]+:\/\/\S+/,
- lineIter = new this.LineIterator(raw),
+ lineIter = new Tools.LineIterator(raw),
location;
while ( lineIter.eot() === false ) {
location = lineIter.next().trim();
if ( reIgnore.test(location) || !reValid.test(location) ) { continue; }
out.add(location);
}
- return this.setToArray(out);
+ return Tools.setToArray(out);
};
/******************************************************************************/
@@ -487,7 +488,7 @@ Components.utils.import('chrome://ematrix/content/lib/PublicSuffixList.jsm');
title: assetKey
};
}
- externalHostsFiles = this.setToArray(importedSet).sort().join('\n');
+ externalHostsFiles = Tools.setToArray(importedSet).sort().join('\n');
}
if ( externalHostsFiles !== this.userSettings.externalHostsFiles ) {
diff --git a/lib/Tools.jsm b/lib/Tools.jsm
new file mode 100644
index 0000000..6db8cfd
--- /dev/null
+++ b/lib/Tools.jsm
@@ -0,0 +1,118 @@
+/*******************************************************************************
+
+ ηMatrix - a browser extension to black/white list requests.
+ Copyright (C) 2014-2019 Raymond Hill
+ Copyright (C) 2019-2020 Alessio Vanni
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://libregit.spks.xyz/heckyel/ematrix
+ uMatrix Home: https://github.com/gorhill/uMatrix
+*/
+
+'use strict';
+
+var EXPORTED_SYMBOLS = ['Tools'];
+
+var LineIterator = function (text, offset) {
+ this.text = text;
+ this.textLen = this.text.length;
+ this offset = offset || 0;
+};
+
+LineIterator.prototype = {
+ next: function () {
+ let end = this.text.indexOf('\n', this.offset);
+ if (end === -1) {
+ end = this.text.indexOf('\r', this.offset);
+ if (end === -1) {
+ end = this.textLen;
+ }
+ }
+
+ let line = this.text.slice(this.offset, end);
+ this.offset = end + 1;
+
+ return line;
+ },
+ rewind: function () {
+ if (this.offset <= 1) {
+ this.offset = 0;
+ }
+
+ let end = this.text.lastIndexOf('\n', this.offset - 2);
+ if (end === -1) {
+ this.offset = end + 1;
+ } else {
+ end = this.text.lastIndexOf('\r', this.offset - 2);
+ this.offset = end !== -1 ? end + 1 : 0;
+ }
+ },
+ eot: function () {
+ return this.offset >= this.textLen;
+ },
+};
+
+var setToArray;
+if (typeof Array.from === 'function') {
+ setToArray = Array.from;
+} else {
+ setToArray = function (set) {
+ let out = [];
+ let entries = set.values();
+
+ for (let entry=entries.next();
+ !entry||!entry.done; entry=entries.next()) {
+ out.push(entry.value);
+ }
+
+ return out;
+ };
+}
+
+var Tools = {
+ LineIterator: LineIterator,
+ setToArray: setToArray,
+
+ gotoURL: function (context) {
+ if (typeof context !== 'object') {
+ throw new TypeError(context);
+ }
+
+ context.api.tabs.open(context.details);
+ },
+ gotoExtensionURL: function (context) {
+ if (typeof context !== 'object') {
+ throw new TypeError(context);
+ }
+
+ let details = context.details;
+ let api = context.api;
+ let matrix = context.matrix;
+
+ if (details.url.startsWith('logger-ui.html')) {
+ if (details.shiftKey) {
+ let setting = matrix.userSettings.alwaysDetachLogger;
+ matrix.changeUserSettings('alwaysDetachLogger', !setting);
+ }
+ details.popup = matrix.userSettings.alwaysDetachLogger;
+ }
+
+ details.select = true;
+ api.tabs.open(details);
+ },
+ setFromArray: function (a) {
+ return new Set(a);
+ },
+};