efront 3.9.16 → 3.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pivot/api.yml +1 -0
- package/apps/pivot/home/welcome.html +6 -1
- package/apps/pivot/home/welcome.js +2 -0
- package/coms/basic/FormData.js +14 -0
- package/coms/basic/_cross.js +329 -0
- package/coms/basic/cookie.js +1 -0
- package/coms/basic/parseURL_test.js +2 -1
- package/coms/{zimoli → basic}/removeFromList.js +0 -0
- package/coms/{zimoli → basic}/repeat.js +0 -0
- package/coms/compile/common.js +3 -0
- package/coms/compile/scanner2.js +3 -0
- package/coms/reptile/cross.js +109 -0
- package/coms/reptile/{fs.js → fs2.js} +0 -0
- package/coms/reptile/m3u8Download.js +1 -1
- package/coms/zimoli/color.js +4 -2
- package/coms/zimoli/cross.js +35 -301
- package/coms/zimoli/data.js +8 -5
- package/coms/zimoli/jsonp.js +3 -0
- package/coms/zimoli/selectList.js +3 -3
- package/coms/zimoli/selectList.less +13 -1
- package/coms/zimoli/view.less +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/reptile/main.js +0 -3
- package/coms/zimoli/FormData.js +0 -13
package/apps/pivot/api.yml
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var FormData = this.FormData;
|
|
2
|
+
if (!FormData) {
|
|
3
|
+
FormData = function FormData() {
|
|
4
|
+
this.form = {};
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
FormData.prototype.append = function (key, value) {
|
|
8
|
+
this.form[key] = value;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
FormData.prototype.toString = function () {
|
|
12
|
+
return serialize(this.form);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
var { getCookies, addCookie } = cookie;
|
|
2
|
+
var { File } = this;
|
|
3
|
+
function isFile(a) {
|
|
4
|
+
if (File) {
|
|
5
|
+
return a instanceof File;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
var base = null, location_href = null;
|
|
9
|
+
// ///// 1 ////////// 2 /////// 3 //// 4 //
|
|
10
|
+
var domainReg = /^(?:(https?)\:)?\/\/(.*?)(?:\/(.*?))?([\?#].*)?$/i;
|
|
11
|
+
var setHost = function (host) {
|
|
12
|
+
base = host;
|
|
13
|
+
};
|
|
14
|
+
var HeadersKeys = ["Content-Type"];
|
|
15
|
+
var cors_hosts = [];
|
|
16
|
+
function getDomainPath(url) {
|
|
17
|
+
return url.replace(domainReg, "$2/$3");
|
|
18
|
+
}
|
|
19
|
+
function getRequestProtocol(url) {
|
|
20
|
+
if (/^https:/i.test(url)) {
|
|
21
|
+
return "https:";
|
|
22
|
+
}
|
|
23
|
+
return "http:";
|
|
24
|
+
}
|
|
25
|
+
function isChildPath(relative, path) {
|
|
26
|
+
return relative.replace(/^(.*\/)[^\/]*$/, path);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var getCrossUrl = function (domain, headers) {
|
|
30
|
+
if (notCross(domain)) return domain;
|
|
31
|
+
var originDomain = getDomainPath(domain);
|
|
32
|
+
var _cookies = getCookies(originDomain);
|
|
33
|
+
var _headers = {};
|
|
34
|
+
if (_cookies) {
|
|
35
|
+
_headers.Cookie = _cookies;
|
|
36
|
+
}
|
|
37
|
+
extend(_headers, headers);
|
|
38
|
+
_headers = serialize(_headers);
|
|
39
|
+
if (_headers) _headers = "," + _headers;
|
|
40
|
+
return domain
|
|
41
|
+
.replace(/^(s?)(\/\/)/i, "http$1:$2")
|
|
42
|
+
.replace(domainReg, base + `*${/^(https\:|s\/\/)/i.test(domain) ? "*" : ""}$2${_headers}/$3$4`);
|
|
43
|
+
};
|
|
44
|
+
function noop() { }
|
|
45
|
+
function toResponse() {
|
|
46
|
+
if (this.responseType === 'json') return JSON.stringify(this.response);
|
|
47
|
+
return this.response;
|
|
48
|
+
}
|
|
49
|
+
function _cross(jsonp, digest = noop, method, url, headers) {
|
|
50
|
+
var originDomain = getDomainPath(url);
|
|
51
|
+
if (!originDomain) throw new Error("路径格式错误!");
|
|
52
|
+
var _cookies = getCookies(originDomain);
|
|
53
|
+
var _headers = {};
|
|
54
|
+
if (_cookies) {
|
|
55
|
+
_headers.Cookie = _cookies;
|
|
56
|
+
}
|
|
57
|
+
extend(_headers, headers);
|
|
58
|
+
if (/^[mc]/i.test(method)) {
|
|
59
|
+
_headers["User-Agent"] = /^m/i.test(method)
|
|
60
|
+
? "Efront/1.9 (iPhone) Safari/602.1"
|
|
61
|
+
: "Efront/1.9 (Windows) Chrome/77.0.3865.90";
|
|
62
|
+
method = method.slice(1);
|
|
63
|
+
}
|
|
64
|
+
var loaded, errored;
|
|
65
|
+
var onload = function (data) {
|
|
66
|
+
removeFromList(requests, xhr);
|
|
67
|
+
if (xhr.decoder) {
|
|
68
|
+
data = xhr.decoder(data);
|
|
69
|
+
}
|
|
70
|
+
loaded = data;
|
|
71
|
+
flush();
|
|
72
|
+
digest();
|
|
73
|
+
};
|
|
74
|
+
var onerror1 = function (e) {
|
|
75
|
+
removeFromList(requests, xhr);
|
|
76
|
+
errored = e || "未知错误!";
|
|
77
|
+
flush();
|
|
78
|
+
digest();
|
|
79
|
+
};
|
|
80
|
+
var onerror = async function (e) {
|
|
81
|
+
if (e.type === 'error') {
|
|
82
|
+
e = { response: "无法访问服务器", toString: toResponse };
|
|
83
|
+
}
|
|
84
|
+
for (var r of reforms) {
|
|
85
|
+
var r = await reform(r, { method, url, status: xhr.status, headers: _headers }, fire, onerror1, e);
|
|
86
|
+
if (r === false) return;
|
|
87
|
+
}
|
|
88
|
+
onerror1(e);
|
|
89
|
+
};
|
|
90
|
+
var flush = function () {
|
|
91
|
+
var then = xhr.then;
|
|
92
|
+
delete xhr.then;
|
|
93
|
+
if (loaded) onloads.splice(0, onloads.length).map(e => e instanceof Function && e(xhr));
|
|
94
|
+
if (errored) onerrors.splice(0, onerrors.length).map(e => e instanceof Function && e(errored));
|
|
95
|
+
xhr.then = then;
|
|
96
|
+
};
|
|
97
|
+
if (/^jsonp/i.test(method)) {
|
|
98
|
+
var cb = method.split('\-')[1] || 'callback';
|
|
99
|
+
setTimeout(function () {
|
|
100
|
+
if (!isEmpty(jsondata) && isEmpty(datas)) {
|
|
101
|
+
datas = serialize(jsondata);
|
|
102
|
+
}
|
|
103
|
+
if (datas) {
|
|
104
|
+
xhr.src += (/\?/.test(xhr.src) ? "&" : "?") + datas;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
var xhr = jsonp(url, {
|
|
108
|
+
[cb](a) {
|
|
109
|
+
onload({ status: 200, response: JSON.stringify(a), toString: toResponse });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
xhr.onerror = onerror;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
var nocross = notCross(url);
|
|
116
|
+
var callback = function () {
|
|
117
|
+
var exposeHeaders = xhr.getResponseHeader("access-control-expose-headers");
|
|
118
|
+
var exposeMap = {};
|
|
119
|
+
if (exposeHeaders) exposeHeaders.split(",").forEach(h => exposeMap[h.toLowerCase()] = true);
|
|
120
|
+
if (xhr.getResponseHeader) {
|
|
121
|
+
var exposekey = nocross ? "set-cookie" : "efront-cookie";
|
|
122
|
+
if (exposeMap[exposekey]) {
|
|
123
|
+
var cookie = xhr.getResponseHeader(exposekey);
|
|
124
|
+
addCookie(cookie, originDomain);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
switch (xhr.status) {
|
|
128
|
+
case 0:
|
|
129
|
+
if (!xhr.response) {
|
|
130
|
+
onerror({ status: 0, response: "无法访问服务器", toString: toResponse });
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 200:
|
|
134
|
+
case 201:
|
|
135
|
+
case 304:
|
|
136
|
+
onload(xhr);
|
|
137
|
+
break;
|
|
138
|
+
case 307:
|
|
139
|
+
case 302:
|
|
140
|
+
case 301:
|
|
141
|
+
if (xhr.isRedirected > 2) break;
|
|
142
|
+
var exposekey = nocross ? "location" : "efront-location";
|
|
143
|
+
var location = exposeMap[exposekey] && xhr.getResponseHeader(exposekey);
|
|
144
|
+
if (!domainReg.test(location)) {
|
|
145
|
+
if (/^\//.test(location)) {
|
|
146
|
+
location = originDomain.replace(/\/.*$/, location);
|
|
147
|
+
} else {
|
|
148
|
+
location = originDomain.replace(/[^\/+]$/, location);
|
|
149
|
+
}
|
|
150
|
+
location = getRequestProtocol(url) + "//" + location;
|
|
151
|
+
}
|
|
152
|
+
var crs = _cross("get", location, _headers);
|
|
153
|
+
crs.isRedirected = (xhr.isRedirected || 0) + 1;
|
|
154
|
+
crs.done(onload, false);
|
|
155
|
+
crs.error(onerror, false);
|
|
156
|
+
break;
|
|
157
|
+
default:
|
|
158
|
+
onerror(xhr);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
var cross = this;
|
|
162
|
+
var xhr = cross(callback, onerror);
|
|
163
|
+
var send = xhr.send;
|
|
164
|
+
xhr.toString = toResponse;
|
|
165
|
+
xhr.json = xhr.data = xhr.send = function (data, value) {
|
|
166
|
+
if (!jsondata && !(isEmpty(data) && isEmpty(value))) jsondata = data instanceof Array ? [] : {};
|
|
167
|
+
if (FormData && data instanceof FormData) {
|
|
168
|
+
datas = data;
|
|
169
|
+
} else if (isObject(data) && !isFile(data)) {
|
|
170
|
+
extend(jsondata, data);
|
|
171
|
+
} else if (!isEmpty(value)) {
|
|
172
|
+
extend(jsondata, { [data]: value });
|
|
173
|
+
} else if (isString(data) && value !== false && /^\s*\{|\=/.test(data)) {
|
|
174
|
+
var data = /^\s*\{/.test(data) ? JSON.parse(data) : parseKV(data, "&", "=");
|
|
175
|
+
extend(jsondata, data);
|
|
176
|
+
} else {
|
|
177
|
+
datas = data;
|
|
178
|
+
}
|
|
179
|
+
return xhr;
|
|
180
|
+
};
|
|
181
|
+
xhr.form = function (data) {
|
|
182
|
+
xhr.data(data);
|
|
183
|
+
if (FormData) {
|
|
184
|
+
datas = new FormData;
|
|
185
|
+
for (var k in jsondata) {
|
|
186
|
+
datas.append(k, jsondata[k]);
|
|
187
|
+
}
|
|
188
|
+
} else {
|
|
189
|
+
realHeaders["Content-Type"] = "application/x-www-form-urlencoded";
|
|
190
|
+
datas = serialize(jsondata, "&", "=");
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
var fire = function () {
|
|
195
|
+
var isform = /^f/i.test(method);
|
|
196
|
+
if (isform) {
|
|
197
|
+
if (method === 'form') method = 'post';
|
|
198
|
+
else method = method.slice(1);
|
|
199
|
+
}
|
|
200
|
+
if (/^jsonp/i.test(method)) method = "get";
|
|
201
|
+
if (!isEmpty(jsondata) && isEmpty(datas)) {
|
|
202
|
+
if (/^(get|head|trace)$/i.test(method)) {
|
|
203
|
+
url = url.replace(/#[\s\S]*/, '');
|
|
204
|
+
datas = serialize(jsondata);
|
|
205
|
+
if (datas) {
|
|
206
|
+
url += (/\?/.test(url) ? "&" : "?") + datas;
|
|
207
|
+
datas = "";
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
} else if (isform) {
|
|
211
|
+
xhr.form(jsondata);
|
|
212
|
+
} else {
|
|
213
|
+
datas = JSON.stringify(jsondata);
|
|
214
|
+
if (datas === "{}" || datas === "[]") {
|
|
215
|
+
datas = '';
|
|
216
|
+
} else {
|
|
217
|
+
realHeaders["Content-Type"] = "application/json;charset=UTF-8";
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (nocross) {
|
|
222
|
+
extend(realHeaders, _headers);
|
|
223
|
+
xhr.open(method, url);
|
|
224
|
+
} else {
|
|
225
|
+
xhr.open(method, getCrossUrl(url, _headers));
|
|
226
|
+
}
|
|
227
|
+
Object.keys(realHeaders).forEach(key => setRequestHeader.call(xhr, key, realHeaders[key]));
|
|
228
|
+
if (!isEmpty(datas)) send.call(xhr, datas);
|
|
229
|
+
else send.call(xhr);
|
|
230
|
+
digest();
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
setTimeout(fire, 0);
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
var setRequestHeader = xhr.setRequestHeader;
|
|
237
|
+
var realHeaders = Object.create(null);
|
|
238
|
+
xhr.setRequestHeader = function (key, value) {
|
|
239
|
+
realHeaders[key] = value;
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
var onloads = [], onerrors = [];
|
|
243
|
+
xhr.done = xhr.success = function (on, asqueue = true) {
|
|
244
|
+
if (!asqueue) onloads.splice(0, onloads.length);
|
|
245
|
+
onloads.push(on);
|
|
246
|
+
flush();
|
|
247
|
+
return xhr;
|
|
248
|
+
};
|
|
249
|
+
var datas = "";
|
|
250
|
+
var jsondata = null;
|
|
251
|
+
xhr.fail = xhr.error = function (on, asqueue = true) {
|
|
252
|
+
if (!asqueue) {
|
|
253
|
+
onerrors.splice(0, onerrors.length);
|
|
254
|
+
}
|
|
255
|
+
onerrors.push(on);
|
|
256
|
+
flush();
|
|
257
|
+
return xhr;
|
|
258
|
+
};
|
|
259
|
+
xhr.then = function (ok, oh) {
|
|
260
|
+
onloads.push(ok);
|
|
261
|
+
onerrors.push(oh);
|
|
262
|
+
flush();
|
|
263
|
+
};
|
|
264
|
+
var abort = xhr.abort;
|
|
265
|
+
xhr.abort = function () {
|
|
266
|
+
removeFromList(requests, this);
|
|
267
|
+
if (isFunction(abort)) abort.call(this);
|
|
268
|
+
};
|
|
269
|
+
requests.push(xhr);
|
|
270
|
+
return xhr;
|
|
271
|
+
}
|
|
272
|
+
function addDirect(a) {
|
|
273
|
+
if (cors_hosts.indexOf(a) >= 0) return;
|
|
274
|
+
if (typeof a === 'string' || a instanceof RegExp) cors_hosts.push(a);
|
|
275
|
+
}
|
|
276
|
+
function notCross(domain) {
|
|
277
|
+
if (!base || location_href && location_href === domain.slice(0, location_href.length) || !/^https?\:\/\/|^s?\/\//.test(domain)) return true;
|
|
278
|
+
for (var cx = 0, dx = cors_hosts.length; cx < dx; cx++) {
|
|
279
|
+
var host = cors_hosts[cx];
|
|
280
|
+
if (host instanceof RegExp) {
|
|
281
|
+
if (host.test(domain)) return true;
|
|
282
|
+
} else {
|
|
283
|
+
host = host.replace(domainReg, '$2/$3');
|
|
284
|
+
if (domain.replace(domainReg, '$2/$3').slice(0, host.length) === host) return true;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
var requests = [];
|
|
291
|
+
var reforms = [];
|
|
292
|
+
function reform(r, info, fire, cancel, e) {
|
|
293
|
+
var fired = false;
|
|
294
|
+
return r(info, function () {
|
|
295
|
+
if (fired) return;
|
|
296
|
+
fired = true;
|
|
297
|
+
fire();
|
|
298
|
+
}, function () {
|
|
299
|
+
if (fired) return;
|
|
300
|
+
fired = true;
|
|
301
|
+
cancel(e);
|
|
302
|
+
})
|
|
303
|
+
}
|
|
304
|
+
function addReform(r) {
|
|
305
|
+
if (isFunction(r)) reforms.push(r);
|
|
306
|
+
}
|
|
307
|
+
var bind = _cross.bind;
|
|
308
|
+
_cross.bind = function () {
|
|
309
|
+
var _cross = bind.apply(this, arguments);
|
|
310
|
+
extend(_cross, {
|
|
311
|
+
requests,
|
|
312
|
+
abortAll() {
|
|
313
|
+
var rs = requests.splice(0, requests.length);
|
|
314
|
+
for (var r of rs) r.abort();
|
|
315
|
+
},
|
|
316
|
+
setHost,
|
|
317
|
+
addReform,
|
|
318
|
+
getCookies,
|
|
319
|
+
addCookie,
|
|
320
|
+
addDirect,
|
|
321
|
+
getCrossUrl
|
|
322
|
+
});
|
|
323
|
+
return _cross;
|
|
324
|
+
}
|
|
325
|
+
_cross.setHost = setHost;
|
|
326
|
+
_cross.setLocation = function (host) {
|
|
327
|
+
location_href = host;
|
|
328
|
+
if (!base) base = /^https?\:/i.test(location_href) ? '/' : "http://efront.cc/";
|
|
329
|
+
};
|
package/coms/basic/cookie.js
CHANGED
|
@@ -24,6 +24,7 @@ var parseCookieFromText = function (cookie) {
|
|
|
24
24
|
|
|
25
25
|
function addCookie(cookie_text, originDomain = "") {
|
|
26
26
|
if (!cookie_text) return;
|
|
27
|
+
if (cookie_text instanceof Array) cookie_text = cookie_text.join(",");
|
|
27
28
|
var cookies = cookie_text.replace(/(^|;|,)\s*(expires)=(\w*),([^=]*)(;|$)/ig, "$1$2=$3.$4$5")
|
|
28
29
|
.split(/,\s*/).map(parseCookieFromText);
|
|
29
30
|
for (var cookie of cookies) {
|
|
@@ -42,4 +42,5 @@ test(":cluster-opt.html", "pathname", ":cluster-opt.html")
|
|
|
42
42
|
test("d:/cluster-opt.html", "pathname", "d:/cluster-opt.html")
|
|
43
43
|
test("d:\\cluster-opt.html", "pathname", "d:\\cluster-opt.html")
|
|
44
44
|
test("ftp:\\\\cluster-opt.html", "host", "cluster-opt.html")
|
|
45
|
-
test("\\\\cluster-opt.html", "host", "cluster-opt.html")
|
|
45
|
+
test("\\\\cluster-opt.html", "host", "cluster-opt.html")
|
|
46
|
+
test("https://a:b@測試?abc#foo", "host", "測試")
|
|
File without changes
|
|
File without changes
|
package/coms/compile/common.js
CHANGED
package/coms/compile/scanner2.js
CHANGED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
return _cross.bind(function (callback, onerror) {
|
|
2
|
+
var response, responseObject, responseType = "", error;
|
|
3
|
+
var xhr = {
|
|
4
|
+
status: 0,
|
|
5
|
+
readyState: 0,
|
|
6
|
+
method: null,
|
|
7
|
+
url: null,
|
|
8
|
+
http: null,
|
|
9
|
+
headers: {},
|
|
10
|
+
responseHeaders: {},
|
|
11
|
+
get response() {
|
|
12
|
+
if (responseType === "" || responseType === "text") {
|
|
13
|
+
if (this.readyState !== 4) return '';
|
|
14
|
+
return String(response);
|
|
15
|
+
}
|
|
16
|
+
else if (error) return null;
|
|
17
|
+
if (responseObject !== null) return responseObject;
|
|
18
|
+
switch (responseType) {
|
|
19
|
+
case "arraybuffer":
|
|
20
|
+
return response.buffer;
|
|
21
|
+
case "json":
|
|
22
|
+
if (!response) return null;
|
|
23
|
+
responseObject = JSON.parse(String(response));
|
|
24
|
+
return responseObject;
|
|
25
|
+
}
|
|
26
|
+
return responseObject;
|
|
27
|
+
|
|
28
|
+
},
|
|
29
|
+
set response(v) {
|
|
30
|
+
response = v;
|
|
31
|
+
},
|
|
32
|
+
getResponseHeader(key) {
|
|
33
|
+
key = String(key).toLowerCase();
|
|
34
|
+
if (this.responseHeaders[key]) return this.responseHeaders[key];
|
|
35
|
+
if (key === "access-control-expose-headers") {
|
|
36
|
+
return 'set-cookie,location';
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
},
|
|
40
|
+
send(data) {
|
|
41
|
+
var { hostname, port, path, auth } = parseURL(this.url);
|
|
42
|
+
if (data instanceof FormData) data = String(data);
|
|
43
|
+
if (data) {
|
|
44
|
+
data = Buffer.from(data);
|
|
45
|
+
this.headers["Content-Length"] = data.length;
|
|
46
|
+
}
|
|
47
|
+
var req = http.request({
|
|
48
|
+
method: this.method,
|
|
49
|
+
hostname,
|
|
50
|
+
port,
|
|
51
|
+
path,
|
|
52
|
+
auth,
|
|
53
|
+
headers: this.headers,
|
|
54
|
+
}, function (res) {
|
|
55
|
+
var data = [];
|
|
56
|
+
xhr.status = res.statusCode;
|
|
57
|
+
xhr.responseHeaders = res.headers;
|
|
58
|
+
res.on("data", function (chunk) {
|
|
59
|
+
xhr.readyState = 4;
|
|
60
|
+
data.push(chunk);
|
|
61
|
+
});
|
|
62
|
+
res.on("end", function () {
|
|
63
|
+
response = Buffer.concat(data);
|
|
64
|
+
xhr.readyState = 4;
|
|
65
|
+
callback();
|
|
66
|
+
});
|
|
67
|
+
res.on("error", function (e) {
|
|
68
|
+
xhr.readyState = 4;
|
|
69
|
+
error = e;
|
|
70
|
+
onerror(e);
|
|
71
|
+
});
|
|
72
|
+
this.readyState = 2;
|
|
73
|
+
});
|
|
74
|
+
this.readyState = 1;
|
|
75
|
+
if (data) req.end(data);
|
|
76
|
+
else req.end();
|
|
77
|
+
},
|
|
78
|
+
open(method, url) {
|
|
79
|
+
this.method = method;
|
|
80
|
+
this.url = url;
|
|
81
|
+
this.status = 0;
|
|
82
|
+
this.readyState = 0;
|
|
83
|
+
response = null;
|
|
84
|
+
responseObject = null;
|
|
85
|
+
error = null;
|
|
86
|
+
var http;
|
|
87
|
+
if (/^https?\:/i.test(url)) {
|
|
88
|
+
http = require("http");
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
http = require("https");
|
|
92
|
+
}
|
|
93
|
+
this.http = http;
|
|
94
|
+
},
|
|
95
|
+
get responseType() {
|
|
96
|
+
return responseType;
|
|
97
|
+
},
|
|
98
|
+
set responseType(v) {
|
|
99
|
+
if (v === "document") return;
|
|
100
|
+
if (this.status !== 0) throw new Error("状态错误");
|
|
101
|
+
responseType = v;
|
|
102
|
+
},
|
|
103
|
+
setRequestHeader(key, value) {
|
|
104
|
+
this.headers[key] = value;
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
};
|
|
108
|
+
return xhr;
|
|
109
|
+
}, null, undefined);
|
|
File without changes
|
|
@@ -23,7 +23,7 @@ function main(m3u8, dst) {
|
|
|
23
23
|
console.info(file);
|
|
24
24
|
var fileurl = URL.resolve(m3u8, file);
|
|
25
25
|
return fetch(fileurl).then(function (buff) {
|
|
26
|
-
return
|
|
26
|
+
return fs2(path.join(dst, index(cx, list.length) + '.' + file)).writeSync(buff);
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
});
|
package/coms/zimoli/color.js
CHANGED
|
@@ -254,13 +254,15 @@ function stringify(color) {
|
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
function doWith(manager, color, args) {
|
|
257
|
-
var
|
|
257
|
+
var isparsed = color instanceof Array,
|
|
258
|
+
c = isparsed ? color : parse(color);
|
|
258
259
|
if (!c) {
|
|
259
260
|
console.warn(`颜色数据不正确:${color}`);
|
|
260
261
|
return color;
|
|
261
262
|
}
|
|
262
263
|
c = manager(c, args);
|
|
263
|
-
|
|
264
|
+
if (!isparsed) c = stringify(c);
|
|
265
|
+
return c;
|
|
264
266
|
}
|
|
265
267
|
|
|
266
268
|
function normal([r, g, b]) {
|