aboutsummaryrefslogtreecommitdiff
path: root/background/settings_query.js
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2021-06-30 12:28:05 +0200
committerWojtek Kosior <koszko@koszko.org>2021-06-30 12:28:05 +0200
commit261548ff184926567a623e90df7954aeef842d59 (patch)
tree9b5697a77c758eaae969a8fba8b4edea5ecf59d4 /background/settings_query.js
parent83a8d263f6efddf4f742bf7a687d10bfd1907ef8 (diff)
downloadbrowser-extension-261548ff184926567a623e90df7954aeef842d59.tar.gz
browser-extension-261548ff184926567a623e90df7954aeef842d59.zip
emply an sh-based build system; make some changes to blocking
Diffstat (limited to 'background/settings_query.js')
-rw-r--r--background/settings_query.js204
1 files changed, 106 insertions, 98 deletions
diff --git a/background/settings_query.js b/background/settings_query.js
index 43538d5..ce01b80 100644
--- a/background/settings_query.js
+++ b/background/settings_query.js
@@ -5,32 +5,34 @@
* Redistribution terms are gathered in the `copyright' file.
*/
-"use strict";
-
-(() => {
- const make_once = window.make_once;
- const get_storage = window.get_storage;
+/*
+ * IMPORTS_START
+ * IMPORT make_once
+ * IMPORT get_storage
+ * IMPORT TYPE_PREFIX
+ * IMPORTS_END
+ */
- var storage;
+var storage;
- var exports = {};
+var exports = {};
- async function init(fun)
- {
- storage = await get_storage();
+async function init(fun)
+{
+ storage = await get_storage();
- return fun;
- }
+ return fun;
+}
- // TODO: also support urls with specified ports as well as `data:' urls
- function query(url, multiple)
- {
- let proto_re = "[a-zA-Z]*:\/\/";
- let domain_re = "[^/?#]+";
- let segments_re = "/[^?#]*";
- let query_re = "\\?[^#]*";
+// TODO: also support urls with specified ports
+function query(url, multiple)
+{
+ let proto_re = "[a-zA-Z]*:\/\/";
+ let domain_re = "[^/?#]+";
+ let segments_re = "/[^?#]*";
+ let query_re = "\\?[^#]*";
- let url_regex = new RegExp(`\
+ let url_regex = new RegExp(`\
^\
(${proto_re})\
(${domain_re})\
@@ -39,89 +41,95 @@
#?.*\$\
`);
- let regex_match = url_regex.exec(url);
- if (regex_match === null) {
- console.log("bad url format", url);
- return multiple ? [] : [undefined, undefined];
- }
+ let regex_match = url_regex.exec(url);
+ if (regex_match === null) {
+ console.log("bad url format", url);
+ return multiple ? [] : [undefined, undefined];
+ }
+
+ let [_, proto, domain, segments, query] = regex_match;
+
+ domain = domain.split(".");
+ let segments_trailing_dash =
+ segments && segments[segments.length - 1] === "/";
+ segments = (segments || "").split("/").filter(s => s !== "");
+ segments.unshift("");
+
+ let matched = [];
+
+ for (let d_slice = 0; d_slice < domain.length; d_slice++) {
+ let domain_part = domain.slice(d_slice).join(".");
+ let domain_wildcards = [];
+ if (d_slice === 0)
+ domain_wildcards.push("");
+ if (d_slice === 1)
+ domain_wildcards.push("*.");
+ if (d_slice > 0)
+ domain_wildcards.push("**.");
+ domain_wildcards.push("***.");
+
+ for (let domain_wildcard of domain_wildcards) {
+ let domain_pattern = domain_wildcard + domain_part;
+
+ for (let s_slice = segments.length; s_slice > 0; s_slice--) {
+ let segments_part = segments.slice(0, s_slice).join("/");
+ let segments_wildcards = [];
+ if (s_slice === segments.length) {
+ if (segments_trailing_dash)
+ segments_wildcards.push("/");
+ segments_wildcards.push("");
+ }
+ if (s_slice === segments.length - 1) {
+ if (segments[s_slice] !== "*")
+ segments_wildcards.push("/*");
+ }
+ if (s_slice < segments.length &&
+ (segments[s_slice] !== "**" ||
+ s_slice < segments.length - 1))
+ segments_wildcards.push("/**");
+ if (segments[s_slice] !== "***" ||
+ s_slice < segments.length)
+ segments_wildcards.push("/***");
+
+ for (let segments_wildcard of segments_wildcards) {
+ let segments_pattern =
+ segments_part + segments_wildcard;
- let [_, proto, domain, segments, query] = regex_match;
-
- domain = domain.split(".");
- let segments_trailing_dash =
- segments && segments[segments.length - 1] === "/";
- segments = (segments || "").split("/").filter(s => s !== "");
- segments.unshift("");
-
- let matched = [];
-
- for (let d_slice = 0; d_slice < domain.length; d_slice++) {
- let domain_part = domain.slice(d_slice).join(".");
- let domain_wildcards = [];
- if (d_slice === 0)
- domain_wildcards.push("");
- if (d_slice === 1)
- domain_wildcards.push("*.");
- if (d_slice > 0)
- domain_wildcards.push("**.");
- domain_wildcards.push("***.");
-
- for (let domain_wildcard of domain_wildcards) {
- let domain_pattern = domain_wildcard + domain_part;
-
- for (let s_slice = segments.length; s_slice > 0; s_slice--) {
- let segments_part = segments.slice(0, s_slice).join("/");
- let segments_wildcards = [];
- if (s_slice === segments.length) {
- if (segments_trailing_dash)
- segments_wildcards.push("/");
- segments_wildcards.push("");
- }
- if (s_slice === segments.length - 1) {
- if (segments[s_slice] !== "*")
- segments_wildcards.push("/*");
- }
- if (s_slice < segments.length &&
- (segments[s_slice] !== "**" ||
- s_slice < segments.length - 1))
- segments_wildcards.push("/**");
- if (segments[s_slice] !== "***" ||
- s_slice < segments.length)
- segments_wildcards.push("/***");
-
- for (let segments_wildcard of segments_wildcards) {
- let segments_pattern =
- segments_part + segments_wildcard;
-
- let pattern = proto + domain_pattern + segments_pattern;
- console.log("trying", pattern);
- let settings = storage.get(TYPE_PREFIX.PAGE, pattern);
-
- if (settings === undefined)
- continue;
-
- if (!multiple)
- return [pattern, settings];
-
- matched.push([pattern, settings]);
- }
+ let pattern = proto + domain_pattern + segments_pattern;
+ console.log("trying", pattern);
+ let settings = storage.get(TYPE_PREFIX.PAGE, pattern);
+
+ if (settings === undefined)
+ continue;
+
+ if (!multiple)
+ return [pattern, settings];
+
+ matched.push([pattern, settings]);
}
}
}
-
- return multiple ? matched : [undefined, undefined];
}
- function query_best(url)
- {
- return query(url, false);
- }
+ return multiple ? matched : [undefined, undefined];
+}
- function query_all(url)
- {
- return query(url, true);
- }
+function query_best(url)
+{
+ return query(url, false);
+}
+
+function query_all(url)
+{
+ return query(url, true);
+}
- window.get_query_best = make_once(() => init(query_best));
- window.get_query_all = make_once(() => init(query_all));
-})();
+const get_query_best = make_once(() => init(query_best));
+const get_query_all = make_once(() => init(query_all));
+
+/*
+ * EXPORTS_START
+ * EXPORT get_query_best
+ * EXPORT get_query_all
+ * EXPORTS_END
+ */