efront 4.24.0 → 4.24.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.
- package/#/345/233/275/351/231/205/345/214/226.yml +152 -107
- package/apps/pivot/api.yml +1 -0
- package/apps/pivot/cert/main.xht +1 -1
- package/apps/pivot/db/edit.xht +2 -2
- package/apps/pivot/home/welcome.html +45 -13
- package/apps/pivot/home/welcome.js +8 -2
- package/apps/pivot/home/welcome.less +16 -1
- package/apps/pivot/register.jsp +4 -0
- package/apps/pivot/task/invoke.html +1 -1
- package/apps/pivot/task/invoke.js +9 -1
- package/apps/pivot/task/invoke.less +3 -1
- package/coms/basic/parseURL.js +2 -2
- package/coms/basic/parseURL_test.js +2 -1
- package/coms/compile/translate.js +23 -0
- package/coms/explorer/context.js +11 -11
- package/coms/frame/dict.js +1 -1
- package/coms/frame/edit.html +3 -3
- package/coms/frame/list.js +2 -2
- package/coms/frame/route.js +0 -1
- package/coms/pivot/server-status.js +1 -0
- package/coms/reptile/cross.js +1 -0
- package/coms/zimoli/prompt.less +3 -1
- package/coms/zimoli/table.js +1 -1
- package/coms/zimoli/table.less +1 -2
- package/coms//350/214/250/350/217/260//347/274/226/350/276/221/346/241/206.xht +31 -12
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +29 -4
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/parseURL.js
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
// │ href │
|
|
18
18
|
// └────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
19
19
|
|
|
20
|
-
// -------///
|
|
21
|
-
var reg = /^([^\:\/\\\?#\[]+\:(?![^\:\/\\\?\#]*@|[\/\\][^\/\\]))?(?:\/\/|\\\\)?(?:(([^\:\/\\\?#]+)?(?:\:([^\/\\\?#]+))?)@)?(([^\/\\@\?\#\.]*?[^\/\\@\:\?\#\.\d][^\/\\@\:\?\#\.]*?|[^\/\\@\:\?\#\.]+(?:\:[
|
|
20
|
+
// -------/// ----------------1----------------------------------///////////////////2-----3--------//////// ------4----2/////5---------------------------------------------------6----------------------------------------------------------------------------------//////////////-7--5///8-------9----------//10--11---10/8/--12----////
|
|
21
|
+
var reg = /^([^\:\/\\\?#\[\.]+\:(?![^\:\/\\\?\#]*@|[\/\\][^\/\\]))?(?:\/\/|\\\\)?(?:(([^\:\/\\\?#]+)?(?:\:([^\/\\\?#]+))?)@)?(([^\/\\@\?\#\.]*?[^\/\\@\:\?\#\.\d][^\/\\@\:\?\#\.]*?|[^\/\\@\:\?\#\.]+(?:\:[^\@\/\\\?#]*[^\d\@\:\/\\\?#\.]+|(?:\.[^\/\\@\:\?\#\.]+)+))?(?:(?:\:|^)(\d+))?)(((?:\/|\\|^)[^\?#]*)?(\?([^#]*))?)(#[\s\S]*)?$/;
|
|
22
22
|
class URL {
|
|
23
23
|
resolve(url) {
|
|
24
24
|
var u = new URL;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var parseURL = require("./parseURL");
|
|
2
|
-
|
|
2
|
+
var console = efront$console;
|
|
3
3
|
var test = function (url, key, value) {
|
|
4
4
|
var parsed = parseURL(url);
|
|
5
5
|
if (parsed[key] !== value) console.log(parsed), console.fail(`url:${url}, key:${key}, expect:${value}, result:${parsed[key]}`);
|
|
@@ -50,6 +50,7 @@ test("http://[::]/", "host", "[::]")
|
|
|
50
50
|
test("http://[::%12]/", "host", "[::%12]")
|
|
51
51
|
test("http://[::]:80/", "hostname", "[::]")
|
|
52
52
|
test("[::]:80/", "hostname", "[::]")
|
|
53
|
+
test("[::ffff:127.0.0.1]:80/", "hostname", "[::ffff:127.0.0.1]")
|
|
53
54
|
test("[fd64:f52:f52:f52:f52:f52:f52:97]", "hostname", "[fd64:f52:f52:f52:f52:f52:f52:97]")
|
|
54
55
|
test("./cluster-opt.html", "pathname", "./cluster-opt.html")
|
|
55
56
|
test(":cluster-opt.html", "pathname", ":cluster-opt.html")
|
|
@@ -158,6 +158,29 @@ function translate([imap, supports], code) {
|
|
|
158
158
|
if (a in t) v = t[a];
|
|
159
159
|
else v = scanner2(`(${JSON.stringify(v)})`)[0];
|
|
160
160
|
}
|
|
161
|
+
else if (k === 'options') {
|
|
162
|
+
if (v instanceof Array) {
|
|
163
|
+
var a = scanner2(`[]`);
|
|
164
|
+
v.map(function (o) {
|
|
165
|
+
var name = o.name;
|
|
166
|
+
if (!name) return scanner2(`(${JSON.stringify(o)})`)[0];
|
|
167
|
+
delete o.name;
|
|
168
|
+
name = ctn('i18n' + getm(name, t.nodup, t.warn), t);
|
|
169
|
+
o = scanner2(`(${JSON.stringify(o)})`)[0];
|
|
170
|
+
splice(o[0], 0, 0,
|
|
171
|
+
{ type: PROPERTY, isprop: true, text: `"name"` },
|
|
172
|
+
{ type: STAMP, text: ":" }, ...name,
|
|
173
|
+
{ type: STAMP, text: "," });
|
|
174
|
+
setqueue(o);
|
|
175
|
+
return o;
|
|
176
|
+
}).forEach(function (o) {
|
|
177
|
+
a[0].push(...o, { type: STAMP, text: ',' });
|
|
178
|
+
});
|
|
179
|
+
a[0].pop();
|
|
180
|
+
setqueue(a);
|
|
181
|
+
v = a;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
161
184
|
else if (/^(name|holder|comment)$/.test(k)) v = ctn('i18n' + getm(v, t.nodup, t.warn), t);
|
|
162
185
|
else v = scanner2(`(${JSON.stringify(v)})`)[0];
|
|
163
186
|
o.push({
|
package/coms/explorer/context.js
CHANGED
|
@@ -60,7 +60,7 @@ var popupEdit = function ($scope, active) {
|
|
|
60
60
|
};
|
|
61
61
|
return extend([
|
|
62
62
|
{
|
|
63
|
-
name: i18n
|
|
63
|
+
name: i18n`返回` + `(O)`,
|
|
64
64
|
hotkey: "backspace",
|
|
65
65
|
when: never,
|
|
66
66
|
do() {
|
|
@@ -68,7 +68,7 @@ return extend([
|
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
|
-
name: i18n
|
|
71
|
+
name: i18n`打开` + `(O)`,
|
|
72
72
|
hotkey: "Enter",
|
|
73
73
|
when: never,
|
|
74
74
|
do(d) {
|
|
@@ -78,7 +78,7 @@ return extend([
|
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
|
-
name: i18n
|
|
81
|
+
name: i18n`剪切` + `(C)`,
|
|
82
82
|
hotkey: "Ctrl+X",
|
|
83
83
|
when: getStable,
|
|
84
84
|
do(d) {
|
|
@@ -88,7 +88,7 @@ return extend([
|
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
|
-
name: i18n
|
|
91
|
+
name: i18n`复制` + `(R)`,
|
|
92
92
|
hotkey: "Ctrl+C",
|
|
93
93
|
when: getStable,
|
|
94
94
|
do(d) {
|
|
@@ -98,7 +98,7 @@ return extend([
|
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
|
-
name: i18n
|
|
101
|
+
name: i18n`全选` + `(A)`,
|
|
102
102
|
hotkey: "Ctrl+A",
|
|
103
103
|
when: never,
|
|
104
104
|
do(d) {
|
|
@@ -108,11 +108,11 @@ return extend([
|
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
name: i18n
|
|
111
|
+
name: i18n`替换` + `(R)`,
|
|
112
112
|
when: never,
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
name: i18n
|
|
115
|
+
name: i18n`粘贴` + `(V)`,
|
|
116
116
|
hotkey: "Ctrl+V",
|
|
117
117
|
when(e) {
|
|
118
118
|
var copyed = getPageScope(e.target).copyed;
|
|
@@ -162,12 +162,12 @@ return extend([
|
|
|
162
162
|
}
|
|
163
163
|
},
|
|
164
164
|
{
|
|
165
|
-
name: i18n
|
|
165
|
+
name: i18n`新建文件夹` + `(D)`,
|
|
166
166
|
when: notGetActive,
|
|
167
167
|
do: popupAdd
|
|
168
168
|
},
|
|
169
169
|
{
|
|
170
|
-
name: i18n
|
|
170
|
+
name: i18n`添加文件` + `(F)`,
|
|
171
171
|
when: notGetActive,
|
|
172
172
|
async do(d) {
|
|
173
173
|
var $scope = getPageScope(d);
|
|
@@ -176,13 +176,13 @@ return extend([
|
|
|
176
176
|
},
|
|
177
177
|
{
|
|
178
178
|
hotkey: "F2",
|
|
179
|
-
name: i18n
|
|
179
|
+
name: i18n`重命名` + `(R)`,
|
|
180
180
|
when: getStable,
|
|
181
181
|
do: popupRen
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
get name() {
|
|
185
|
-
return this.confirm ? i18n
|
|
185
|
+
return this.confirm ? i18n`确认删除` + `(D)` : i18n`删除` + `(D)`;
|
|
186
186
|
},
|
|
187
187
|
hotkey: "Shift+Del",
|
|
188
188
|
confirm: false,
|
package/coms/frame/dict.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
function main(types, elem) {
|
|
2
2
|
var { field, data, readonly } = elem;
|
|
3
|
-
elem.innerHTML = `<span -text="text()"></span>` + (readonly ? "" :
|
|
3
|
+
elem.innerHTML = `<span -text="text()"></span>` + (readonly ? "" : `<a @click="edit()">${i18n`修改`}</a>`);
|
|
4
4
|
renderWithDefaults(elem.children, {
|
|
5
5
|
text() {
|
|
6
6
|
if (data[field.key]) return data[field.key].map(k => `${k.name} ${isEmpty(k.key) ? "" : `(${k.key})`}`).join(", ");
|
package/coms/frame/edit.html
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<div head>
|
|
2
|
-
<span v-text="origin?'
|
|
2
|
+
<span v-text="origin?'${i18n`修改`}':'${i18n`添加`}'"></span><span -text="title"></span>
|
|
3
3
|
</div>
|
|
4
4
|
<div body>
|
|
5
5
|
<field v-if="!f.hidden" -repeat="f in fields" ng-src="[f,data]"></field>
|
|
6
6
|
</div>
|
|
7
7
|
<scrollbar></scrollbar>
|
|
8
8
|
<div foot>
|
|
9
|
-
<btn @click="remove()" class="white"
|
|
10
|
-
<button type="submit"
|
|
9
|
+
<btn @click="remove()" class="white">${i18n`取消`}</btn>
|
|
10
|
+
<button type="submit">${i18n`保存`}</button>
|
|
11
11
|
</div>
|
package/coms/frame/list.js
CHANGED
|
@@ -27,7 +27,7 @@ function main(title, { fields, options: options0, load, remove, buttons }, edit_
|
|
|
27
27
|
page.innerHTML = template;
|
|
28
28
|
var options = [
|
|
29
29
|
{
|
|
30
|
-
name:
|
|
30
|
+
name: i18n`修改`,
|
|
31
31
|
async do(o) {
|
|
32
32
|
await edit(o);
|
|
33
33
|
},
|
|
@@ -35,7 +35,7 @@ function main(title, { fields, options: options0, load, remove, buttons }, edit_
|
|
|
35
35
|
{
|
|
36
36
|
type: "danger",
|
|
37
37
|
name(o) {
|
|
38
|
-
return this.confirm === o ?
|
|
38
|
+
return this.confirm === o ? i18n`确认删除` : i18n`删除`;
|
|
39
39
|
},
|
|
40
40
|
type(o) {
|
|
41
41
|
return this.confirm === o ? "dark" : "danger";
|
package/coms/frame/route.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
data.from("status");
|
package/coms/reptile/cross.js
CHANGED
|
@@ -44,6 +44,7 @@ var cross = cross_.bind(function (callback, onerror) {
|
|
|
44
44
|
data = Buffer.from(data);
|
|
45
45
|
this.headers["Content-Length"] = data.length;
|
|
46
46
|
}
|
|
47
|
+
if (/^\[/.test(hostname)) hostname = hostname.replace(/^\[(.*?)\]$/, "$1");
|
|
47
48
|
var options = {
|
|
48
49
|
method: this.method,
|
|
49
50
|
hostname,
|
package/coms/zimoli/prompt.less
CHANGED
|
@@ -15,6 +15,7 @@ tip {
|
|
|
15
15
|
>[body],
|
|
16
16
|
>.body {
|
|
17
17
|
height: 100%;
|
|
18
|
+
|
|
18
19
|
>[textarea] {
|
|
19
20
|
height: 100%;
|
|
20
21
|
}
|
|
@@ -23,11 +24,12 @@ tip {
|
|
|
23
24
|
margin: 0 -16px;
|
|
24
25
|
width: auto;
|
|
25
26
|
height: 100%;
|
|
26
|
-
>list{
|
|
27
|
+
>list {
|
|
27
28
|
min-height: auto;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
}
|
|
32
|
+
|
|
31
33
|
textarea,
|
|
32
34
|
[textarea] {
|
|
33
35
|
width: 100%;
|
package/coms/zimoli/table.js
CHANGED
package/coms/zimoli/table.less
CHANGED
|
@@ -36,12 +36,6 @@
|
|
|
36
36
|
display: inline-block;
|
|
37
37
|
vertical-align: top;
|
|
38
38
|
outline: none;
|
|
39
|
-
|
|
40
|
-
>n,
|
|
41
|
-
>d {
|
|
42
|
-
display: block;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
39
|
}
|
|
46
40
|
|
|
47
41
|
>[clist] {
|
|
@@ -90,6 +84,14 @@
|
|
|
90
84
|
outline: none;
|
|
91
85
|
border: none;
|
|
92
86
|
|
|
87
|
+
&:after {
|
|
88
|
+
content: "";
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
user-select: none;
|
|
91
|
+
display: inline-block;
|
|
92
|
+
width: 16px;
|
|
93
|
+
}
|
|
94
|
+
|
|
93
95
|
&:focus {
|
|
94
96
|
outline: 1px solid #fff3;
|
|
95
97
|
}
|
|
@@ -110,13 +112,19 @@
|
|
|
110
112
|
<list contenteditable="false" nlist# :src="(r,i) in coderows" -style="{height:codeHeight}">
|
|
111
113
|
<n current:="isCurrent(i)" -bind="i+1"></n>
|
|
112
114
|
</list>
|
|
113
|
-
<list clist# body contenteditable
|
|
115
|
+
<list clist# body contenteditable:="contenteditable" :src="(r,i) in coderows" -style="{height:codeHeight}">
|
|
114
116
|
<d -html="r"></d>
|
|
115
117
|
</list>
|
|
116
118
|
</编辑框>
|
|
117
119
|
<script>
|
|
118
120
|
var coder = this;
|
|
119
121
|
vbox(this);
|
|
122
|
+
var contenteditable = !this.readonly;
|
|
123
|
+
watch(coder, {
|
|
124
|
+
readonly(v) {
|
|
125
|
+
contenteditable = !v;
|
|
126
|
+
}
|
|
127
|
+
})
|
|
120
128
|
if (!('oninput' in document)) {
|
|
121
129
|
on('focus')(this, function () {
|
|
122
130
|
if (this.contentEditable) addClass(this, "noinput");
|
|
@@ -170,6 +178,7 @@
|
|
|
170
178
|
selection = getSelection();
|
|
171
179
|
render.refresh(nlist);
|
|
172
180
|
};
|
|
181
|
+
var spacing = false;
|
|
173
182
|
var getNodeAt = function (row, col) {
|
|
174
183
|
var d = clist.at(row);
|
|
175
184
|
if (!d) return [];
|
|
@@ -192,13 +201,13 @@
|
|
|
192
201
|
if (inc + tl > col) {
|
|
193
202
|
col -= inc;
|
|
194
203
|
inc = 0;
|
|
195
|
-
if (t.charAt(col - 1) === " ") {
|
|
204
|
+
if (!spacing && t.charAt(col - 1) === " ") {
|
|
196
205
|
col++;
|
|
197
206
|
}
|
|
198
207
|
break;
|
|
199
208
|
}
|
|
200
209
|
else if (inc + tl === col) {
|
|
201
|
-
if (t.charAt(col - inc - 1) === " ") col++;
|
|
210
|
+
if (!spacing && t.charAt(col - inc - 1) === " ") col++;
|
|
202
211
|
else break;
|
|
203
212
|
}
|
|
204
213
|
inc += tl;
|
|
@@ -246,10 +255,12 @@
|
|
|
246
255
|
var anchorChar = null, inText = false;
|
|
247
256
|
var followChar = null, beforeText = false;
|
|
248
257
|
var fixpace = function (event) {
|
|
258
|
+
spacing = true;
|
|
249
259
|
event.preventDefault();
|
|
250
260
|
insertText(' ', false);
|
|
251
261
|
markAnchorOffset();
|
|
252
262
|
unmarkAnchorOffset();
|
|
263
|
+
spacing = false;
|
|
253
264
|
};
|
|
254
265
|
var updatechar = function (event) {
|
|
255
266
|
if (event.defaultPrevented) return;
|
|
@@ -413,7 +424,7 @@
|
|
|
413
424
|
var patchAfter = '';
|
|
414
425
|
switch (inputType) {
|
|
415
426
|
case "insertText":
|
|
416
|
-
if (data === ' ') return;
|
|
427
|
+
if (data === ' ') return false;
|
|
417
428
|
if (anchorChar in pairsmap) {
|
|
418
429
|
if (followChar === pairsmap[anchorChar] && data === followChar) {
|
|
419
430
|
document.execCommand('forwardDelete');
|
|
@@ -429,6 +440,7 @@
|
|
|
429
440
|
patchAfter = pairsmap[data];
|
|
430
441
|
}
|
|
431
442
|
}
|
|
443
|
+
spacing = false;
|
|
432
444
|
break;
|
|
433
445
|
case "insertParagraph":
|
|
434
446
|
var i = getFocusRow();
|
|
@@ -444,11 +456,14 @@
|
|
|
444
456
|
}
|
|
445
457
|
if (patchAfter) {
|
|
446
458
|
insertText(patchAfter, true);
|
|
459
|
+
markAnchorOffset();
|
|
447
460
|
}
|
|
448
461
|
return patchAfter;
|
|
449
462
|
};
|
|
450
463
|
var document_selection = document.getSelection();
|
|
464
|
+
var isInput = false;
|
|
451
465
|
var insertText = function (text, isPatch) {
|
|
466
|
+
isInput = true;
|
|
452
467
|
markAnchorOffset();
|
|
453
468
|
var [an, ai, fn, fi] = selection;
|
|
454
469
|
var [n, i] = getNodeAt(fn, fi);
|
|
@@ -474,7 +489,7 @@
|
|
|
474
489
|
[an, ai] = getNodeAt(an, ai);
|
|
475
490
|
document_selection.setBaseAndExtent(an, ai, n, i + d);
|
|
476
491
|
}
|
|
477
|
-
|
|
492
|
+
markAnchorOffset();
|
|
478
493
|
}
|
|
479
494
|
var removeEndBR = function (d) {
|
|
480
495
|
var e = d.lastChild;
|
|
@@ -512,8 +527,11 @@
|
|
|
512
527
|
};
|
|
513
528
|
on("input")(coder, function (event) {
|
|
514
529
|
if (event.isComposing) return;
|
|
530
|
+
isInput = true;
|
|
515
531
|
var id = ++coderid;
|
|
516
|
-
|
|
532
|
+
spacing = true;
|
|
533
|
+
var patch = updatecode(event);
|
|
534
|
+
if (patch == null) {
|
|
517
535
|
if (id !== coderid) return;
|
|
518
536
|
// codetext = getCodeText();
|
|
519
537
|
updateCodeHtml();
|
|
@@ -540,6 +558,7 @@
|
|
|
540
558
|
keytab(1);
|
|
541
559
|
});
|
|
542
560
|
bind('selectionchange', document)(coder, function () {
|
|
561
|
+
if (isInput) return isInput = false;
|
|
543
562
|
markAnchorOffset();
|
|
544
563
|
});
|
|
545
564
|
var updo = function () {
|
|
@@ -604,6 +604,10 @@
|
|
|
604
604
|
addTranslate(f.name);
|
|
605
605
|
addTranslate(f.holder);
|
|
606
606
|
addTranslate(f.comment);
|
|
607
|
+
var options = f.options;
|
|
608
|
+
if (options instanceof Array) options.forEach(o => {
|
|
609
|
+
addTranslate(o.name);
|
|
610
|
+
})
|
|
607
611
|
});
|
|
608
612
|
}
|
|
609
613
|
}
|
|
@@ -611,26 +615,47 @@
|
|
|
611
615
|
msg.setText(i18n`提取完成`);
|
|
612
616
|
var result = [];
|
|
613
617
|
var preMap = Object.create(null);
|
|
618
|
+
var againstid = 0;
|
|
614
619
|
for (var e of pretrans) {
|
|
615
620
|
var data = await readText(e);
|
|
616
621
|
data = parseYML(data);
|
|
617
622
|
loop: for (var d of data) {
|
|
618
623
|
for (var k in d) {
|
|
619
|
-
|
|
624
|
+
var s = d[k];
|
|
625
|
+
if (typeof s === 'string') d[k] = s.replace(/^\s*([\s\S]*?)([:\:]?\s*)$/, '$1');
|
|
620
626
|
}
|
|
621
627
|
var liang = 0, fanyi = {};
|
|
622
628
|
for (var { lang: k, id } of supports) {
|
|
623
629
|
if (!d[k]) continue;
|
|
624
|
-
|
|
625
|
-
|
|
630
|
+
var pd = preMap[d[k]];
|
|
631
|
+
if (pd && pd !== d) {
|
|
632
|
+
if (shallowEqual(pd, d)) continue loop;
|
|
633
|
+
if (!pd.against) {
|
|
634
|
+
pd.against = ++againstid;
|
|
635
|
+
}
|
|
636
|
+
d.against = pd.against;
|
|
637
|
+
console.log(i18n`发现不同的翻译`, k, pd, d);
|
|
626
638
|
}
|
|
627
639
|
preMap[d[k]] = d;
|
|
628
640
|
liang++;
|
|
629
641
|
fanyi[id] = d[k];
|
|
630
642
|
}
|
|
631
|
-
|
|
643
|
+
d = { text: d[supports[0].lang], fanyi, liang, d };
|
|
644
|
+
result.push(d);
|
|
632
645
|
}
|
|
633
646
|
}
|
|
647
|
+
var againsts = [];
|
|
648
|
+
result = result.filter(a => {
|
|
649
|
+
var ag = a.d.against;
|
|
650
|
+
delete a.d;
|
|
651
|
+
if (!ag) return true;
|
|
652
|
+
var aga = againsts[ag];
|
|
653
|
+
if (!aga) aga = againsts[ag] = [];
|
|
654
|
+
aga.push(a);
|
|
655
|
+
});
|
|
656
|
+
againsts.forEach(a => {
|
|
657
|
+
result.unshift.apply(result, a);
|
|
658
|
+
});
|
|
634
659
|
var untrans = [];
|
|
635
660
|
Object.keys(textMap).map(k => {
|
|
636
661
|
var texts = textMap[k];
|