diff options
author | Jesús <heckyel@hyperbola.info> | 2020-05-02 17:41:29 -0500 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2020-05-02 17:41:29 -0500 |
commit | c9532aa9677a920d46dad57d1fa87c7c20778264 (patch) | |
tree | 03e9030299ba9b2ddc05a48aa551dd382e68b7c3 | |
parent | 88e55b7e0c00b529e28c1e65b86ee99254a65dfb (diff) | |
download | ematrix-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-- | Makefile | 6 | ||||
-rw-r--r-- | background.html | 1 | ||||
-rw-r--r-- | js/messaging.js | 6 | ||||
-rw-r--r-- | js/storage.js | 9 | ||||
-rw-r--r-- | lib/Tools.jsm | 118 |
5 files changed, 129 insertions, 11 deletions
@@ -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); + }, +}; |