Project

General

Profile

« Previous | Next » 

Revision 261548ff

Added by koszko about 2 years ago

emply an sh-based build system; make some changes to blocking

View differences:

background/settings_query.js
5 5
 * Redistribution terms are gathered in the `copyright' file.
6 6
 */
7 7

  
8
"use strict";
9

  
10
(() => {
11
    const make_once = window.make_once;
12
    const get_storage = window.get_storage;
8
/*
9
 * IMPORTS_START
10
 * IMPORT make_once
11
 * IMPORT get_storage
12
 * IMPORT TYPE_PREFIX
13
 * IMPORTS_END
14
 */
13 15

  
14
    var storage;
16
var storage;
15 17

  
16
    var exports = {};
18
var exports = {};
17 19

  
18
    async function init(fun)
19
    {
20
	storage = await get_storage();
20
async function init(fun)
21
{
22
    storage = await get_storage();
21 23

  
22
	return fun;
23
    }
24
    return fun;
25
}
24 26

  
25
    // TODO: also support urls with specified ports as well as `data:' urls
26
    function query(url, multiple)
27
    {
28
	let proto_re = "[a-zA-Z]*:\/\/";
29
	let domain_re = "[^/?#]+";
30
	let segments_re = "/[^?#]*";
31
	let query_re = "\\?[^#]*";
27
// TODO: also support urls with specified ports
28
function query(url, multiple)
29
{
30
    let proto_re = "[a-zA-Z]*:\/\/";
31
    let domain_re = "[^/?#]+";
32
    let segments_re = "/[^?#]*";
33
    let query_re = "\\?[^#]*";
32 34

  
33
	let url_regex = new RegExp(`\
35
    let url_regex = new RegExp(`\
34 36
^\
35 37
(${proto_re})\
36 38
(${domain_re})\
......
39 41
#?.*\$\
40 42
`);
41 43

  
42
	let regex_match = url_regex.exec(url);
43
	if (regex_match === null) {
44
	    console.log("bad url format", url);
45
	    return multiple ? [] : [undefined, undefined];
46
	}
44
    let regex_match = url_regex.exec(url);
45
    if (regex_match === null) {
46
	console.log("bad url format", url);
47
	return multiple ? [] : [undefined, undefined];
48
    }
49

  
50
    let [_, proto, domain, segments, query] = regex_match;
51

  
52
    domain = domain.split(".");
53
    let segments_trailing_dash =
54
	segments && segments[segments.length - 1] === "/";
55
    segments = (segments || "").split("/").filter(s => s !== "");
56
    segments.unshift("");
57

  
58
    let matched = [];
59

  
60
    for (let d_slice = 0; d_slice < domain.length; d_slice++) {
61
	let domain_part = domain.slice(d_slice).join(".");
62
	let domain_wildcards = [];
63
	if (d_slice === 0)
64
	    domain_wildcards.push("");
65
	if (d_slice === 1)
66
	    domain_wildcards.push("*.");
67
	if (d_slice > 0)
68
	    domain_wildcards.push("**.");
69
	domain_wildcards.push("***.");
70

  
71
	for (let domain_wildcard of domain_wildcards) {
72
	    let domain_pattern = domain_wildcard + domain_part;
73

  
74
	    for (let s_slice = segments.length; s_slice > 0; s_slice--) {
75
		let segments_part = segments.slice(0, s_slice).join("/");
76
		let segments_wildcards = [];
77
		if (s_slice === segments.length) {
78
		    if (segments_trailing_dash)
79
			segments_wildcards.push("/");
80
		    segments_wildcards.push("");
81
		}
82
		if (s_slice === segments.length - 1) {
83
		    if (segments[s_slice] !== "*")
84
			segments_wildcards.push("/*");
85
		}
86
		if (s_slice < segments.length &&
87
		    (segments[s_slice] !== "**" ||
88
		     s_slice < segments.length - 1))
89
		    segments_wildcards.push("/**");
90
		if (segments[s_slice] !== "***" ||
91
		    s_slice < segments.length)
92
		    segments_wildcards.push("/***");
93

  
94
		for (let segments_wildcard of segments_wildcards) {
95
		    let segments_pattern =
96
			segments_part + segments_wildcard;
47 97

  
48
	let [_, proto, domain, segments, query] = regex_match;
49

  
50
	domain = domain.split(".");
51
	let segments_trailing_dash =
52
	    segments && segments[segments.length - 1] === "/";
53
	segments = (segments || "").split("/").filter(s => s !== "");
54
	segments.unshift("");
55

  
56
	let matched = [];
57

  
58
	for (let d_slice = 0; d_slice < domain.length; d_slice++) {
59
	    let domain_part = domain.slice(d_slice).join(".");
60
	    let domain_wildcards = [];
61
	    if (d_slice === 0)
62
		domain_wildcards.push("");
63
	    if (d_slice === 1)
64
		domain_wildcards.push("*.");
65
	    if (d_slice > 0)
66
		domain_wildcards.push("**.");
67
	    domain_wildcards.push("***.");
68

  
69
	    for (let domain_wildcard of domain_wildcards) {
70
		let domain_pattern = domain_wildcard + domain_part;
71

  
72
		for (let s_slice = segments.length; s_slice > 0; s_slice--) {
73
		    let segments_part = segments.slice(0, s_slice).join("/");
74
		    let segments_wildcards = [];
75
		    if (s_slice === segments.length) {
76
			if (segments_trailing_dash)
77
			    segments_wildcards.push("/");
78
			segments_wildcards.push("");
79
		    }
80
		    if (s_slice === segments.length - 1) {
81
			if (segments[s_slice] !== "*")
82
			    segments_wildcards.push("/*");
83
		    }
84
		    if (s_slice < segments.length &&
85
			(segments[s_slice] !== "**" ||
86
			 s_slice < segments.length - 1))
87
			segments_wildcards.push("/**");
88
		    if (segments[s_slice] !== "***" ||
89
			s_slice < segments.length)
90
			segments_wildcards.push("/***");
91

  
92
		    for (let segments_wildcard of segments_wildcards) {
93
			let segments_pattern =
94
			    segments_part + segments_wildcard;
95

  
96
			let pattern = proto + domain_pattern + segments_pattern;
97
			console.log("trying", pattern);
98
			let settings = storage.get(TYPE_PREFIX.PAGE, pattern);
99

  
100
			if (settings === undefined)
101
			    continue;
102

  
103
			if (!multiple)
104
			    return [pattern, settings];
105

  
106
			matched.push([pattern, settings]);
107
		    }
98
		    let pattern = proto + domain_pattern + segments_pattern;
99
		    console.log("trying", pattern);
100
		    let settings = storage.get(TYPE_PREFIX.PAGE, pattern);
101

  
102
		    if (settings === undefined)
103
			continue;
104

  
105
		    if (!multiple)
106
			return [pattern, settings];
107

  
108
		    matched.push([pattern, settings]);
108 109
		}
109 110
	    }
110 111
	}
111

  
112
	return multiple ?  matched : [undefined, undefined];
113 112
    }
114 113

  
115
    function query_best(url)
116
    {
117
	return query(url, false);
118
    }
114
    return multiple ?  matched : [undefined, undefined];
115
}
119 116

  
120
    function query_all(url)
121
    {
122
	return query(url, true);
123
    }
117
function query_best(url)
118
{
119
    return query(url, false);
120
}
121

  
122
function query_all(url)
123
{
124
    return query(url, true);
125
}
124 126

  
125
    window.get_query_best = make_once(() => init(query_best));
126
    window.get_query_all = make_once(() => init(query_all));
127
})();
127
const get_query_best = make_once(() => init(query_best));
128
const get_query_all = make_once(() => init(query_all));
129

  
130
/*
131
 * EXPORTS_START
132
 * EXPORT get_query_best
133
 * EXPORT get_query_all
134
 * EXPORTS_END
135
 */

Also available in: Unified diff