efront 4.5.8 → 4.5.13

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.
@@ -13,8 +13,8 @@
13
13
  [body] {
14
14
  border-top: 42px solid transparent;
15
15
  padding-top: 40px;
16
+ overflow: auto;
16
17
  padding-bottom: 0 !important;
17
- border-bottom: 46px solid transparent;
18
18
  }
19
19
 
20
20
 
@@ -53,6 +53,11 @@
53
53
  color: #29c;
54
54
  }
55
55
 
56
+ h2[head] {
57
+ font-size: 18px;
58
+ padding: 6px 14px;
59
+ }
60
+
56
61
  h2 b {
57
62
  font-size: 14px;
58
63
  display: inline-block;
@@ -62,21 +67,21 @@
62
67
  }
63
68
 
64
69
  [codearea] {
65
- width: 100%;
66
70
  height: 100%;
67
71
  }
68
72
 
69
73
  [codearea]>code {
70
74
  overflow: auto;
71
- width: 100%;
72
- height: 100%;
73
- padding: 10px 20px 60px 20px;
75
+ display: block;
76
+ height: auto;
77
+ min-height: 100%;
78
+ padding: 10px 20px 40px 20px;
74
79
  white-space: nowrap;
75
80
  outline: none;
76
81
  }
77
82
 
78
83
  markdown {
79
- margin: -6px -20px 0 -10px;
84
+ margin: 20px auto;
80
85
  }
81
86
 
82
87
  [foot]>button {
@@ -85,52 +90,55 @@
85
90
 
86
91
  .result {
87
92
  position: absolute;
88
- bottom: 0;
93
+ bottom: 40px;
89
94
  right: 0;
90
95
  left: 0;
91
- padding: 10px 20px;
92
96
  border-top: 1px solid #333;
93
97
  background: #fff;
94
98
  display: block;
95
99
  z-index: 1;
96
100
  }
97
101
  </style>
98
- <xmenu -src="(t,i) in tags" @active="saveTagIndex(i)"></xmenu>
99
- <h2 head>
100
- <span -bind="name"></span>
101
- <b -if="doc?.less" l>${i18n`有样式表`}</b>
102
- <b -if="doc?.mark" w>${i18n`有文档`}</b>
103
- <b -if="doc?.test" t>${i18n`有测试代码`}</b>
104
- </h2>
105
- <div body -if="tags[0].actived">
106
- <container -if="doc?.url" .src="doc.url">
107
- </container>
108
- <p4 envs>
109
- <span -if="envs?.length">
110
- ${i18n`环境依赖项:`}&nbsp; <m -repeat="c in envs" -bind="c"> </m>
111
- </span>
112
- <span -else> ${i18n`无环境依赖项`} </span>
113
- </p4>
114
- <p4 imported>
115
- <span -if="required?.length">
116
- ${i18n`导入项:`}&nbsp;<m -repeat="c in required" -bind="c"></m>
117
- </span>
118
- <span -else>
119
- ${i18n`无导入项`}
120
- </span>
121
- </p4>
122
- </div>
123
- <div body -elseif="tags[1].actived">
124
- <div codearea #coder onkeyup="!event.isComposing&&updatecode()" onkeydown.tab="keytab(event)"></div>
125
- <resultpad .result #coderesult></resultpad>
126
- </div>
127
- <div foot -if="tags[1].actived">
128
- <a -if="doc?.test" @click="clearpad()">${i18n`清理`}</a>
129
- <a -if="doc?.test" @click="loadcode()">${i18n`载入测试代码`}</a>
130
- <btn @click="execute()">${i18n`运行`}</btn>
131
- </div>
102
+ <form onclick="event.preventDefault()">
103
+ <xmenu -src="(t,i) in tags" @active="saveTagIndex(i)"></xmenu>
104
+ <h2 head>
105
+ <span -bind="name"></span>
106
+ <b -if="doc?.less" l>${i18n`有样式表`}</b>
107
+ <b -if="doc?.mark" w>${i18n`有文档`}</b>
108
+ <b -if="doc?.test" t>${i18n`有测试代码`}</b>
109
+ </h2>
110
+ <div body -if="tags[0].actived">
111
+ <container -if="doc?.url" .src="doc.url">
112
+ </container>
113
+ <p4 envs>
114
+ <span -if="envs?.length">
115
+ ${i18n`环境依赖项:`}&nbsp; <m -repeat="c in envs" -bind="c"> </m>
116
+ </span>
117
+ <span -else> ${i18n`无环境依赖项`} </span>
118
+ </p4>
119
+ <p4 imported>
120
+ <span -if="required?.length">
121
+ ${i18n`导入项:`}&nbsp;<m -repeat="c in required" -bind="c"></m>
122
+ </span>
123
+ <span -else>
124
+ ${i18n`无导入项`}
125
+ </span>
126
+ </p4>
127
+ </div>
128
+ <div body onkeyup="!event.isComposing&&updatecode()" onkeydown.tab="keytab(event)" #coder codearea
129
+ -elseif="tags[1].actived">
130
+ </div>
131
+ <resultpad -if="tags[1].actived" .result #coderesult></resultpad>
132
+ <div foot -if="tags[1].actived">
133
+ <a -if="doc?.test" @click="clearpad()">${i18n`清理`}</a>
134
+ <a -if="doc?.test" @click="loadcode()">${i18n`载入测试代码`}</a>
135
+ <btn @click="execute()">${i18n`运行`}</btn>
136
+ </div>
137
+ </form>
132
138
  <script>
139
+ var required, doc, envs;
133
140
  var commaps = Object.create(null);
141
+ var form = view;
134
142
  var initCommap = function (live) {
135
143
  var commap = commaps[live];
136
144
  if (!commap) {
@@ -164,14 +172,14 @@
164
172
  });
165
173
  var 分析 = lazy(async function (com, props) {
166
174
  if (props.mark) props.url = '/mark/coms/' + com.replace(/\.js$/i, '.md');
167
- scope.doc = props;
168
- scope.name = com;
175
+ doc = props;
176
+ name = com;
169
177
  var xhr = await cross("get", "./components:" + com);
170
178
  var code = compile$scanner2(xhr.response);
171
179
  code.fix();
172
- var envs = code.envs;
180
+ envs = code.envs;
173
181
  if (props.less) envs.cless = true;
174
- var required = [];
182
+ required = [];
175
183
  if (envs.require) code.used.require.forEach(r => {
176
184
  var next = r.next;
177
185
  if (!next) return;
@@ -181,27 +189,27 @@
181
189
  var req = code.program.createString([first]);
182
190
  required.push(req);
183
191
  });
184
- scope.required = required;
185
- scope.envs = Object.keys(envs);
192
+ envs = Object.keys(envs);
186
193
  render.refresh();
187
194
  if (tags[1].actived) loadcode();
188
195
  });
189
196
  var loadcode = async function () {
190
- var modName = scope.name.replace(/\.js$/, '_test');
191
- if (scope.doc.test) {
197
+ jschanged = false;
198
+ var modName = name.replace(/\.js$/, '_test');
199
+ if (doc.test) {
192
200
  var xhr = await cross('get', "./components:" + modName + '.js');
193
- var codetext = xhr.responseText;
194
- var code = compile$scanner2(codetext);
201
+ jstext = xhr.responseText;
202
+ var code = compile$scanner2(jstext);
195
203
  var envs = code.envs;
196
204
  var vars = code.vars;
197
205
  var commName = modName.replace(/^[\s\S]*\//, '');
198
206
  var lessName = commName + ".less", lessData;
199
207
  var cssWrap = `css-` + +new Date;
200
- if (scope.doc.test.indexOf(lessName) >= 0) {
208
+ if (doc.test.indexOf(lessName) >= 0) {
201
209
  lessData = await cross("get", "./components:" + modName + ".less");
202
210
  lessData = compile$素馨(lessData.responseText, "." + cssWrap);
203
211
  if (code.isExpressQueue()) {
204
- codetext = `return cless(${codetext},\`${lessData}\`,"${cssWrap}")`;
212
+ jstext = `return cless(${jstext},\`${lessData}\`,"${cssWrap}")`;
205
213
  }
206
214
  else {
207
215
  var entryName;
@@ -209,36 +217,36 @@
209
217
  else if (vars.Main) entryName = 'Main';
210
218
  else if (vars.MAIN) entryName = "MAIN";
211
219
  else if (vars[commName]) entryName = commName;
212
- if (entryName) codetext += `\r\nreturn cless(${entryName},\`${lessData}\`,"${cssWrap}")`;
220
+ if (entryName) jstext += `\r\nreturn cless(${entryName},\`${lessData}\`,"${cssWrap}")`;
213
221
  }
214
222
  }
215
223
  else {
216
- if (code.isExpressQueue()) codetext = "return " + codetext.trim();
217
- else if (vars.main) codetext += '\r\nreturn main';
218
- else if (vars.Main) codetext += '\r\nreturn Main';
219
- else if (vars.MAIN) codetext += "\r\nreturn MAIN";
220
- else if (vars[modName]) codetext += "\r\nreturn " + modName;
224
+ if (code.isExpressQueue()) jstext = "return " + jstext.trim();
225
+ else if (vars.main) jstext += '\r\nreturn main';
226
+ else if (vars.Main) jstext += '\r\nreturn Main';
227
+ else if (vars.MAIN) jstext += "\r\nreturn MAIN";
228
+ else if (vars[modName]) jstext += "\r\nreturn " + modName;
221
229
  }
222
230
  var templateName = commName;
223
231
  if (envs.template) templateName = 'template';
224
232
  if (envs[templateName]) {
225
233
  delete envs[templateName];
226
234
  var template = await cross("get", './components:' + modName + ".html");
227
- codetext = `var ${templateName}={toString(){return \`${template.responseText.replace(/>\s+</g, '><')}\`}};\r\n` + codetext;
235
+ jstext = `var ${templateName}={toString(){return \`${template.responseText.replace(/>\s+</g, '><')}\`}};\r\n` + jstext;
228
236
  }
229
- initcode(codetext);
237
+ initcode(jstext);
230
238
  }
231
239
  else {
232
240
  initcode('');
233
241
  }
234
- scope.codetext = scope.coder.innerText;
242
+ jstext = coder.innerText;
235
243
  execute();
236
244
  };
237
245
  var blink = "\u0080";
238
246
  var markAnchorOffset = function () {
239
247
  var { anchorNode, anchorOffset } = document.getSelection();
240
- if (!anchorNode || !scope.coder) return;
241
- var [c] = scope.coder.children;
248
+ if (!anchorNode || !coder) return;
249
+ var [c] = coder.children;
242
250
  if (anchorNode.nodeType === 1) {
243
251
  var node = document.createTextNode(blink);
244
252
  anchorNode.insertBefore(node, anchorNode.childNodes[anchorOffset])
@@ -248,7 +256,7 @@
248
256
  }
249
257
  };
250
258
  var unmarkAnchorOffset = function () {
251
- var [c] = scope.coder.children;
259
+ var [c] = coder.children;
252
260
  var node = c.firstChild;
253
261
  while (node) {
254
262
  if (node.nodeType === 1) {
@@ -273,7 +281,7 @@
273
281
  }
274
282
  var getAnchorOffset = function () {
275
283
  var { anchorNode, anchorOffset } = document.getSelection();
276
- var [c] = scope.coder.children;
284
+ var [c] = coder.children;
277
285
  if (anchorNode === c || !anchorNode) return -anchorOffset;
278
286
  var sibling = anchorNode.previousSibling ? anchorNode.previousSibling : anchorNode.parentNode.previousSibling;
279
287
  while (sibling && sibling !== c) {
@@ -290,7 +298,7 @@
290
298
  return anchorOffset;
291
299
  };
292
300
  var setAnchorOffset = function (anchorOffset) {
293
- var [c] = scope.coder.children;
301
+ var [c] = coder.children;
294
302
  if (anchorOffset < 0) {
295
303
  anchorOffset = -anchorOffset;
296
304
  if (anchorOffset > c.childNodes.length) anchorOffset = c.childNodes.length;
@@ -330,48 +338,51 @@
330
338
  try {
331
339
  var colored = codetext("js", innerText, blink);
332
340
  } catch { return; }
333
- var innerHTML = scope.coder.innerHTML.replace(/\s*contenteditable\=[^\s\>]+/i, '');
341
+ var innerHTML = coder.innerHTML.replace(/\s*contenteditable\=[^\s\>]+/i, '');
334
342
  if (innerHTML === colored) return;
335
- var [c0] = scope.coder.children;
343
+ var [c0] = coder.children;
336
344
  var contentLength = c0 ? innerText.length : 0;
337
345
  var scrollTop = c0 ? c0.scrollTop : 0;
338
346
  var scrollLeft = c0 ? c0.scrollLeft : 0;
339
- scope.coder.innerHTML = colored;
340
- var [c] = scope.coder.children;
347
+ coder.innerHTML = colored;
348
+ var [c] = coder.children;
341
349
  c.scrollTop = scrollTop;
342
350
  c.scrollLeft = scrollLeft;
343
351
  c.contentEditable = true;
344
352
  };
345
353
  var updatecode = lazy(function () {
354
+ var trimreg = /[\s\u00a0\u2002\u0080]+([\}\{\;\[\]\(\)\,\>\<\+\-\*\&\^\/%!~:?])*/g;
355
+ var innerText = coder.innerText;
356
+ if (jstext.replace(trimreg, trimspace).trim() === innerText.replace(trimreg, trimspace).trim()) return;
346
357
  markAnchorOffset();
347
- var innerText = scope.coder.innerText;
358
+ var innerText = coder.innerText;
348
359
  var trimspace = (_, a) => a ? "" : " ";
349
- var trimreg = /[\s\u00a0\u2002\u0080]+([\}\{\;\[\]\(\)\,\>\<\+\-\*\&\^\/%!~:?])*/g;
350
360
  unmarkAnchorOffset();
351
- if (scope.codetext.replace(trimreg, trimspace).trim() === innerText.replace(trimreg, trimspace).trim()) return;
352
361
  initcode(innerText);
353
362
  unmarkAnchorOffset();
354
- scope.codetext = scope.coder.innerText;
363
+ jstext = coder.innerText;
364
+ jschanged = true;
355
365
  });
366
+ var jschanged = false;
356
367
  var execute = async function () {
357
368
  try {
358
- var live = /^([\s\S]+)\//.exec(scope.name);
369
+ var live = /^([\s\S]+)\//.exec(name);
359
370
  if (live) live = live[1];
360
371
  var commap = initCommap(live);
361
- remove(scope.coderesult.childNodes);
362
- var codetext = scope.codetext.replace(/[\u2002\u00a0]/g, ' ');
363
- data.patchInstance("docscode", { codetext: codetext })
364
- var code = compile$scanner2(codetext);
372
+ remove(coderesult.childNodes);
373
+ jstext = jstext.replace(/[\u2002\u00a0]/g, ' ');
374
+ data.patchInstance("docscode", { codetext: jstext })
375
+ var code = compile$scanner2(jstext);
365
376
  var envs = code.envs;
366
377
  var argNames = Object.keys(envs);
367
378
  var args = await Promise.all(argNames.map(a => init(a + "*" + live, null, { ["init*" + live]: init, ["put*" + live]: put, ["zimoli*" + live]: zimoli, ["appendChild*" + live]: appendChild, ["remove*" + live]: remove, ["render*" + live]: render })));
368
- var func = createFunction("", codetext, argNames, code.async, code.yield);
379
+ var func = createFunction("", jstext, argNames, code.async, code.yield);
369
380
  var res = func.apply(window, args);
370
381
  if (isFunction(res)) {
371
382
  res = res.call(res);
372
383
  }
373
384
  if (isElement(res) || isArray(res)) {
374
- appendChild(scope.coderesult, res);
385
+ appendChild(coderesult, res);
375
386
  }
376
387
  } catch (e) {
377
388
  alert(String(e), 'error');
@@ -384,35 +395,22 @@
384
395
  ];
385
396
  tags[data.getInstance("docscode").tagIndex | 0].actived = true;
386
397
  var actived = tags.map(t => t.actived);
398
+ // page.innerHTML = template;
399
+ var btn = button;
400
+ var a = button;
401
+ var jstext = '';
387
402
  var xmenu = menu;
388
- var page = view();
389
- on("submit")(page, e => e.preventDefault());
390
- page.innerHTML = template;
391
- var scope = {
392
- btn: button,
393
- container,
394
- view,
395
- tags,
396
- a: button,
397
- codetext: "",
398
- xmenu: menu,
399
- loadcode,
400
- clearpad() {
401
- remove(this.coderesult.childNodes);
402
- },
403
- execute,
404
- updatecode,
405
- saveTagIndex(i) {
406
- data.setInstance("docscode", { tagIndex: i });
407
- if (i === 1 && !scope.codetext) requestAnimationFrame(loadcode);
408
- },
409
- keytab(event) {
410
- event.preventDefault();
411
- }
403
+ var clearpad = function () {
404
+ remove(this.coderesult.childNodes);
412
405
  };
413
- render(page, scope);
414
- function main(name) {
415
- 分析(name, this.data);
416
- return page;
417
- }
406
+ var keytab = function (event) {
407
+ event.preventDefault();
408
+ };
409
+
410
+ var saveTagIndex = function (i) {
411
+ data.setInstance("docscode", { tagIndex: i });
412
+ if (i === 1 && !jschanged) requestAnimationFrame(loadcode);
413
+ };
414
+ var [name] = arguments;
415
+ 分析(name, state.data);
418
416
  </script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.5.8",
3
+ "version": "4.5.13",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {