efront 3.26.16 → 3.27.1

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.
@@ -77,7 +77,7 @@ function tohuff(buff, result = [], type_limit) {
77
77
  b.sort(function (m, n) {
78
78
  return a[n] - a[m];
79
79
  });
80
- var size = getIndexFromOrderedArray(b, 1, (m, n) => a[m] >= n);
80
+ var size = getIndexFromOrderedArray(b, 1, (m, n) => a[m] >= n, false);
81
81
  if (a[b[size]] > 0) size++;
82
82
  if (size + 1 > b.length) console.log(a.slice(420), buff.filter(a => a > 512), b.slice(420))
83
83
 
@@ -285,7 +285,7 @@ function pack2(buff) {
285
285
  range_compress,
286
286
  other_compress << 5 | el.length,
287
287
  ],
288
- el, e]));
288
+ el, e]));
289
289
  }
290
290
  result = concatTypedArray(result);
291
291
  return pack0(buff, result);
@@ -19,7 +19,7 @@ var defaultIsLE = (sample, search) => isArray(sample) && isArray(search) ? array
19
19
  * @param {Array} orderArray
20
20
  * @param {string|number} searchItem
21
21
  */
22
- module.exports = function (orderArray, searchItem, isLE = typeof searchItem === "function" ? searchItem : defaultIsLE) {
22
+ module.exports = function (orderArray, searchItem, isLE = typeof searchItem === "function" ? searchItem : defaultIsLE, findEqual = true) {
23
23
  for (var cx = 0, dx = orderArray.length, ci = cx + dx >>> 1; cx < dx; ci = cx + dx >>> 1) {
24
24
  var orderItem = orderArray[ci];
25
25
  if (isLE(orderItem, searchItem)) {
@@ -28,8 +28,8 @@ module.exports = function (orderArray, searchItem, isLE = typeof searchItem ===
28
28
  dx = ci;
29
29
  }
30
30
  }
31
- var index = dx - 1;
32
- if (index < orderArray.length) {
31
+ if (findEqual && dx <= orderArray.length) {
32
+ var index = dx - 1;
33
33
  while (index >= 0 && isLE(searchItem, orderArray[index])) {
34
34
  if (orderArray[index] === searchItem) return index;
35
35
  index--;
@@ -1,5 +1,5 @@
1
1
  function isArrayLike(a) {
2
- if (a === null || typeof a !== 'object' || isNode(a)) return false;
2
+ if (a === null || a === window || typeof a !== 'object' || isNode(a)) return false;
3
3
  if (isFinite(a.length)) {
4
4
  if (a.length > 0) {
5
5
  return a.length - 1 in a;
@@ -0,0 +1,3 @@
1
+ function isSame(o1, o2) {
2
+ return o1 === o2 || isNumber(o1) && isNumber(o2) && isNaN(o1) && isNaN(o2);
3
+ }
@@ -299,7 +299,7 @@ var loadModule = function (name, then, prebuilds = {}) {
299
299
  if (error) {
300
300
  if (!errored[error]) errored[error] = [];
301
301
  errored[error].push(key);
302
- _errored.push(error);
302
+ if (_errored.indexOf(error) < 0) _errored.push(error);
303
303
  }
304
304
  if (loadingCount === args.length) {
305
305
  if (_errored.length) loadedModules[key].error = _errored;
@@ -84,41 +84,64 @@ var power = function (source, search) {
84
84
  return [0, source];
85
85
  };
86
86
 
87
-
88
87
  var power2 = function (src1, src2) {
88
+ var c = compare(src1, src2);
89
+ var p = c.pop();
90
+ if (!p) return [src1, src2, 0];
91
+ src1 = src1.slice(0, 0);
92
+ src2 = src2.slice(0, 0);
93
+ for (var a of c) {
94
+ if (a.different) src1 = src1.concat(a[0]), src2 = src2.concat(a[1]);
95
+ else src1 = src1.concat(MARK_PRE1, a, MARK_AFT1), src2 = src2.concat(MARK_PRE2, a, MARK_AFT2);
96
+ }
97
+ return [src1, src2, p];
98
+ };
89
99
 
90
- if (!src2 || !src1) {
91
- return [src1, src2, 0];
100
+ var different = function (src1, src2) {
101
+ var res = [src1, src2];
102
+ res.different = true;
103
+ return res;
104
+ };
105
+
106
+ var compare = function (src1, src2, min = 0) {
107
+ if (!src2 || !src1 || !src1.slice || !src2.slice) {
108
+ if (isSame(src1, src2)) return [src1, 1];
109
+ return [different(src1, src2), 0];
92
110
  }
93
111
  var matchers = couple(src1, src2);
94
112
  var [match_text, match_start1, match_start2] = matchers;
95
- if (match_text.length > 0) {
113
+ if (match_text.length > min) {
96
114
  var src1_pre = src1.slice(0, match_start1);
97
115
  var src1_aft = src1.slice(match_start1 + match_text.length);
98
116
  var src2_pre = src2.slice(0, match_start2);
99
117
  var src2_aft = src2.slice(match_start2 + match_text.length);
100
118
  var pp = 0, ap = 0;
101
119
  var p = match_text.length;
120
+ var pre, aft;
102
121
  if (src1_pre.length) p += .1 / src1_pre.length - .2;
103
122
  if (src1_aft.length) p += .1 / src1_aft.length - .1;
104
- if (src1_pre.length > 0 && src2_pre.length > 0) {
105
- [src1_pre, src2_pre, pp] = power2(src1_pre, src2_pre);
123
+ if (src1_pre.length > 0 || src2_pre.length > 0) {
124
+ pre = compare(src1_pre, src2_pre);
125
+ pp = pre.pop();
106
126
  }
107
- if (src1_aft.length > 0 && src2_aft.length > 0) {
108
- [src1_aft, src2_aft, ap] = power2(src1_aft, src2_aft);
127
+ else {
128
+ pre = [];
109
129
  }
110
- p += (pp + ap) * .01;
111
- return [
112
- src1_pre.concat(MARK_PRE1, match_text, MARK_AFT1, src1_aft),
113
- src2_pre.concat(MARK_PRE2, match_text, MARK_AFT2, src2_aft),
114
- p
115
- ];
130
+ if (src1_aft.length > 0 || src2_aft.length > 0) {
131
+ aft = compare(src1_aft, src2_aft);
132
+ ap = aft.pop();
133
+ }
134
+ else {
135
+ aft = [];
136
+ }
137
+ p += (pp + ap) / src1.length / src2.length * .01;
138
+ pre.push(match_text);
139
+ return pre.concat(aft, p);
116
140
  }
117
- return [src1, src2, 0];
141
+ return [different(src1, src2), 0];
118
142
 
119
143
  };
120
144
 
121
-
122
145
  var setTag1 = function (pre, aft) {
123
146
  if (arguments.length === 1) {
124
147
  if (pre instanceof Array) {
@@ -153,5 +176,10 @@ mark.setTag1 = setTag1;
153
176
  mark.setTag2 = setTag2;
154
177
  mark.power = power;
155
178
  mark.power2 = power2;
179
+ mark.compare = function (a, b) {
180
+ var c = compare(a, b);
181
+ c.power = c.pop();
182
+ return c;
183
+ };
156
184
  mark.pair = pair;
157
185
  mark.couple = couple;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var colored = Object.create(null);
3
+ var lazy = require("../basic/lazy");
4
+ var colors = require("./colors");
5
+ var lastLogLength = 0;
6
+ var getColor = function (c) {
7
+ switch (c) {
8
+ case "red":
9
+ case "error":
10
+ case "danger":
11
+ return colors.FgRed;
12
+ case "info":
13
+ case "tip":
14
+ case "blue":
15
+ return colors.FgBlue;
16
+ case "green":
17
+ return colors.FgGreen;
18
+ default:
19
+ if (c in colors) return colors[c];
20
+ c = c[0].toUpperCase() + c.slice(1).toLowerCase();
21
+ if (c in colors) return colors[c];
22
+ var k = "Fg" + c;
23
+ if (k in colors) {
24
+ return colors[k];
25
+ }
26
+ c = c.slice(0, 2) + c[2].toUpperCase() + c.slice(3);
27
+ if (c in colors) return colors[c];
28
+ }
29
+ return '';
30
+ };
31
+ var write = function (hasNewLine, str) {
32
+ str = String(str).replace(/<([a-z][\w]*)[^\>]*\>([\s\S]*?)<\/\1\>/ig, function (_, c, s) {
33
+ var color = getColor(c);
34
+ if (color) return color + s + colors.Reset;
35
+ return s;
36
+ });
37
+ process.stdout.cork();
38
+ var hasNextLine = /[\r\n\u2028\u2029]/.test(str);
39
+ if (process.stdout.isTTY) {
40
+ if (lastLogLength) {
41
+ var width = process.stdout.columns;
42
+ var dx = lastLogLength % width;
43
+ var dy = (lastLogLength - 1) / width | 0;
44
+ process.stdout.moveCursor(-dx, -dy);
45
+ process.stdout.clearScreenDown();
46
+ }
47
+ }
48
+ else {
49
+ if (!hasNewLine && !hasNextLine) str = '';
50
+ }
51
+ hasNewLine && !hasNextLine ? process.stdout.write(str + "\r\n") : process.stdout.write("\r" + str);
52
+ if (hasNextLine) hasNewLine = true;
53
+ if (hasNewLine) {
54
+ lastLogLength = 0;
55
+ } else {
56
+ str = str.replace(/\x1b\[\d+m/g, '').replace(/\b/g, '');
57
+ lastLogLength = str.length + str.replace(/[\x20-\xff]/g, "").length;
58
+ }
59
+ process.stdout.uncork();
60
+ };
61
+ [
62
+ "pass:[ ✔ ]:FgGreen:",
63
+ "fail:[ ✘ ]:FgRed2:",
64
+ "test:[ ∞ ]:FgYellow:",
65
+ "info:提示:FgCyan:",
66
+ "warn:注意:FgYellow:",
67
+ "error:错误:FgRed2:"
68
+ ].forEach(function (config) {
69
+ var [log, info = log.toUpperCase(), fg, bg] = config.split(":");
70
+ var fgColor = colors[fg] || "",
71
+ bgColor = colors[bg] || "",
72
+ reset = colors.Reset;
73
+ var hasNewLine = /^(warn|error|pass|fail)$/.test(log);
74
+ var logger = function (...args) {
75
+ var label = fgColor + bgColor + info + reset;
76
+ var time_stamp = '';
77
+ var str = [time_stamp, label, ...args].join(" ");
78
+ if (queue.length > 1 && !queue[queue.length - 2] && !/[\r\n\u2028\u2029]/.test(queue[queue.length - 1])) {
79
+ queue.pop();
80
+ queue.pop();
81
+ }
82
+ write1(hasNewLine, str);
83
+ };
84
+ colored[log] = logger;
85
+ });
86
+ var queue = [];
87
+ var flush = function () {
88
+ while (queue.length) write(queue.shift(), queue.shift());
89
+ };
90
+ // var write0 = lazy(flush, -60);
91
+ var write1 = function (hasNewLine, str) {
92
+ writeid++;
93
+ // queue.push(hasNewLine, str);
94
+ write(hasNewLine, str);
95
+ };
96
+ colored.flush = flush;
97
+ colored.type = function (...args) {
98
+ write1(false, args.join(' '));
99
+ };
100
+ var _log = console.log;
101
+ colored.log = function () {
102
+ flush();
103
+ _log.apply(console, arguments);
104
+ };
105
+ colored.begin = function (c) {
106
+ return write1(false, getColor(c));
107
+ };
108
+ var writeid = 0;
109
+ var drop = lazy(function (dropid) {
110
+ if (dropid === writeid) write1(false, "");
111
+ }, 160);
112
+ colored.drop = function () {
113
+ drop(++writeid);
114
+ };
115
+ colored.end = function () {
116
+ return write1(false, colors.Reset);
117
+ };
118
+ colored.clear = function (tag) {
119
+ write1(false, '');
120
+ if (tag) write1(true, tag);
121
+ };
122
+ module.exports = colored;
@@ -0,0 +1,54 @@
1
+ var colors = module.exports = {
2
+ Reset: "\x1b[0m",
3
+ Bright: "\x1b[1m",
4
+ Dim: "\x1b[2m",
5
+ Underscore: "\x1b[4m",
6
+ Blink: "\x1b[5m",
7
+ Reverse: "\x1b[7m",
8
+ Hidden: "\x1b[8m",
9
+ FgBlack: "\x1b[30m",
10
+ FgRed: "\x1b[31m",
11
+ FgGreen: "\x1b[32m",
12
+ FgYellow: "\x1b[33m",
13
+ FgBlue: "\x1b[34m",
14
+ FgMagenta: "\x1b[35m",
15
+ FgCyan: "\x1b[36m",
16
+ FgWhite: "\x1b[37m",
17
+ BgBlack: "\x1b[40m",
18
+ BgRed: "\x1b[41m",
19
+ BgGreen: "\x1b[42m",
20
+ BgYellow: "\x1b[43m",
21
+ BgBlue: "\x1b[44m",
22
+ BgMagenta: "\x1b[45m",
23
+ BgCyan: "\x1b[46m",
24
+ BgWhite: "\x1b[47m",
25
+ FgGray: "\x1b[90m",
26
+ FgRed2: "\x1b[91m",
27
+ FgGreen2: "\x1b[92m",
28
+ FgYellow2: "\x1b[93m",
29
+ FgBlue2: "\x1b[94m",
30
+ FgPurple: "\x1b[95m",
31
+ FgCyan2: "\x1b[96m",
32
+ FgWhite2: "\x1b[97m",
33
+ // test: "\x1b[97m",
34
+ BgGray: "\x1b[100m",
35
+ BgRed2: "\x1b[102m",
36
+ BgGreen2: "\x1b[102m",
37
+ BgYellow2: "\x1b[103m",
38
+ BgBlue2: "\x1b[104m",
39
+ BgMagenta2: "\x1b[105m",
40
+ BgCyan2: "\x1b[106m",
41
+ BgWhite2: "\x1b[107m",
42
+ };
43
+ class Color {
44
+ constructor(name, value) {
45
+ this.name = name;
46
+ this.value = value;
47
+ }
48
+ toString() {
49
+ return this.value;
50
+ }
51
+ }
52
+ for (var k in colors) {
53
+ colors[k] = new Color(k, colors[k]);
54
+ }
@@ -4,7 +4,8 @@
4
4
  */
5
5
  var emitEvent = function (item, event) {
6
6
  if (event.defaultPrevented) return;
7
- if (!getTargetIn(this, event.target) && !getTargetIn(event.target, this)) return;
7
+ var target = this.target || this;
8
+ if (!getTargetIn(target, event.target) && !getTargetIn(event.target, target)) return;
8
9
  event.preventDefault(true);
9
10
  if (item.disabled) return;
10
11
  active(this, item, "global", this.$src ? createItemTarget.call(this, item) : this);
@@ -31,7 +32,7 @@ function bindGlobalkey(elem, keymap, item) {
31
32
  if (!keymap) return;
32
33
  var keyoff = [];
33
34
  for (let k in keymap) {
34
- keyoff.push(bindonly(elem, k, item));
35
+ keyoff.push(bindonly(elem, k, keymap[k]));
35
36
  }
36
37
  elem.$keyoff = keyoff;
37
38
  }
@@ -1,6 +1,4 @@
1
- var singleEqual = function (o1, o2) {
2
- return o1 === o2 || isNumber(o1) && isNumber(o2) && isNaN(o1) && isNaN(o2);
3
- };
1
+ var singleEqual = isSame;
4
2
  var deepEqualMarkLabel = "__zimo1i_deep_equal_mark_label";
5
3
  var restcompare = [];
6
4
  var ALLOW_CACHE_LENGTH = Math.min(SAFE_CIRCLE_DEPTH, 1024) * Math.min(SAFE_CIRCLE_DEPTH, 1024);
@@ -25,12 +25,16 @@ var getGenerator = function (container, tagName = 'item') {
25
25
  container.$generatorScopes = scopes;
26
26
  if (container.$generator) return container.$generator;
27
27
  var template = document.createElement(container.tagName);
28
- var templates = [].concat.apply([], container.childNodes).filter(a => {
28
+ var templates = [];
29
+ for (let a of container.childNodes) {
29
30
  if (a.hasAttribute('insert')) {
30
- return false;
31
+ if (!templates.length) a.$isbefore = true;
32
+ else a.$isafter = true;
31
33
  }
32
- return true;
33
- });
34
+ else {
35
+ templates.push(a);
36
+ }
37
+ }
34
38
  if (templates.length < container.childNodes.length && templates.length >= 1) {
35
39
  var c = document.createComment('lattice');
36
40
  c.index = null;
@@ -145,6 +145,10 @@ function ylist(container, generator, $Y) {
145
145
  var ratio = itemIndex - index || 0;
146
146
  var childrenMap = getChildrenMap();
147
147
  var offsetBottom = 0, ratioTop = 0, offset = index, last_item = getFirstElement(0) || null, last_index = last_item && last_item.index || offset;
148
+ if (!last_item) {
149
+ last_item = list.lastChild;
150
+ while (last_item && last_item.$isafter) last_item = last_item.previousSibling;
151
+ }
148
152
  if (last_item) last_item = getNodeTarget(last_item);
149
153
  var count = 0, delta = 1, bottom_item, offsett = offset, offsetb = offset, top_item;
150
154
  var indexed_item;
@@ -206,7 +206,7 @@ function main(elem, mode) {
206
206
  }
207
207
  if (!elem.hasAttribute('mode')) elem.setAttribute('mode', mode);
208
208
  if (!elem.hasAttribute(mode)) elem.setAttribute(mode, '');
209
-
209
+ elem.target = document.body;
210
210
  return elem;
211
211
 
212
212
  }
@@ -0,0 +1,38 @@
1
+ // 以前我骂防疫人员,在别人亲切的喊他们白衣天使的时候,我冷冷地说他们是白面无常。
2
+ // 后来我骂共产党,因为听到退疫的大白说的故事,无辜的打工人是怎么被它们圈禁至死的,他说的活灵活现,我不得不信。
3
+ // 想想自己被锁在楼里的岁月,我们合租的9个人,平均每星期收到一棵白菜两根萝卜,后来连白菜萝卜也要别人拿着个人信息去交换,就像为了活下去就不得不跪舔高高在上的它们.....刚正不阿的人被逼到跳楼也属正常。
4
+ // 政府只顾着大肆宣扬自己的功绩,对枉死之人置若罔闻。是怪大白没有上报?还是抢来的府权本就带贼的属性?
5
+ // 如果没有共产党,也许是另一翻罪恶的景象,但是为恶之人,天未诛之,还要我去赞颂它吗?
6
+
7
+ function findAllSpace(start = 0, end = start + 256) {
8
+ // #<--
9
+ var canvas = document.createElement("canvas");
10
+ canvas.height = 32;
11
+ canvas.width = 32;
12
+ css(canvas, 'right:0;bottom:80px;position:absolute;background-color:#fff;');
13
+ document.body.appendChild(canvas);
14
+ var context = canvas.getContext("2d", { willReadFrequently: true });
15
+ context.font = "16px";
16
+ context.textBaseline = "top";
17
+ var res = [], total = 0;
18
+ for (var cx = start, dx = end; cx < dx; cx++) {
19
+ context.clearRect(0, 0, canvas.width, canvas.height);
20
+ // 判断字符串是否由空格组成
21
+ var s = String.fromCodePoint(cx);
22
+ context.fillText(s, canvas.width >> 2, canvas.height >> 2);
23
+ context.strokeText(s, canvas.width >> 2, canvas.height >> 2);
24
+ var imgdata = context.getImageData(0, 0, canvas.width, canvas.height).data;
25
+ if (imgdata.findIndex(a => a !== 0) >= 0) continue;
26
+ res[cx] = s;
27
+ total++;
28
+ }
29
+ context.clearRect(0, 0, 14, 14);
30
+ context.fillText(String.fromCodePoint(65), 0, 7);
31
+ res.total = total;
32
+ // -->
33
+ return res;
34
+ }
35
+ var startTime = performance.now();
36
+ var spaces = findAllSpace(0, 0x7fff);
37
+ console.log(performance.now() - startTime);
38
+ console.log(spaces);
@@ -93,7 +93,7 @@ var init = function () {
93
93
  var isType = function (target, type) {
94
94
  // 记得小时候,不论是苍蝇还是蚊子,飞起来都是有声音的。最近看到的一种像蚊子一样小的飞虫,喜欢像苍蝇一样趴在食物上,飞起来却听不到声音。
95
95
  // 是我的听力下降了?还是外界太过嘈杂?还是飞虫拍打翅膀的频率超出了我的听觉范围?还是飞行可以不产生声音?
96
- return target.hasAttribute(type) || hasClass(type);
96
+ return target.hasAttribute(type) || hasClass(target, type);
97
97
  }
98
98
  var resize2 = function () {
99
99
  var head, body, foot;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.26.16",
3
+ "version": "3.27.1",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {