efront 3.13.1 → 3.13.2

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.
@@ -11,3 +11,4 @@
11
11
  version: options ::version
12
12
  uptime: options ::uptime
13
13
  count: options ::count
14
+ bootlog: options ::similar
@@ -0,0 +1,2 @@
1
+ <table -src="[fields,items]">
2
+ </talbe>
@@ -0,0 +1,24 @@
1
+ var fields = refilm`
2
+ 地址/ip
3
+ 端口/port
4
+ 版本/version
5
+ 进程/pid
6
+ 时间/time date
7
+ `;
8
+ function main() {
9
+ var page = div();
10
+ page.innerHTML = template;
11
+ var items = data.from("bootlog", item => {
12
+ item.forEach(a => {
13
+ var [v, p] = a.ppid.split("/");
14
+ a.version = v;
15
+ a.pid = p;
16
+ })
17
+ return item;
18
+ });
19
+ renderWithDefaults(page, {
20
+ items,
21
+ fields
22
+ });
23
+ return page;
24
+ }
@@ -0,0 +1,3 @@
1
+ & {
2
+ height: 100%;
3
+ }
@@ -1 +1,5 @@
1
- <table -src="[fields,items]"></talbe>
1
+ <div class="searchbox">
2
+ <input @input="filter" -model="searchText" />
3
+ </div>
4
+ <table -src="[fields,items]">
5
+ </talbe>
@@ -1,14 +1,21 @@
1
1
  var fields = refilm`
2
- 路径/path
2
+ 路径/path html
3
3
  访问量/count
4
4
  `;
5
5
  function main() {
6
6
  var page = div();
7
7
  page.innerHTML = template;
8
+ var items = data.from("count", a => {
9
+ return Object.keys(a).map(b => ({ path: b, count: a[b] }));
10
+ });
8
11
  renderWithDefaults(page, {
9
- items: data.from("count", a => {
10
- return Object.keys(a).map(b => ({ path: b, count: a[b] }));
11
- }),
12
+ items,
13
+ searchText: "",
14
+ filter() {
15
+ var text = this.searchText;
16
+ if (!text) return this.items = items;
17
+ this.items = search(text, items, 'path');
18
+ },
12
19
  fields
13
20
  });
14
21
  return page;
@@ -3,6 +3,14 @@
3
3
 
4
4
  }
5
5
 
6
+ .searchbox {
7
+ position: absolute;
8
+ top: 0;
9
+ right: 0;
10
+ z-index: 2;
11
+ padding: 8px 16px;
6
12
 
7
- tbody {
8
- }
13
+ >input {
14
+ background: #eee;
15
+ }
16
+ }
@@ -8,6 +8,10 @@ WEB:
8
8
  密钥管理: /token/list
9
9
  任务建立: /task/list
10
10
  定期执行: /tick/list
11
- # 用户列表: /user/list
11
+ 用户:
12
+ 账号列表: /user/list
13
+ 标签管理: /user/tag/list
12
14
  服务器日志:
13
- 访问计数: /log/count
15
+ 访问计数: /log/count
16
+ 启动记录: /log/boot
17
+ # 并发记忆: /log/lock
@@ -0,0 +1 @@
1
+ pedit.bind(null, "用户信息", "user");
@@ -0,0 +1,4 @@
1
+ plist.bind(null, '用户管理', "user", refilm`
2
+ *用户ID/key 100
3
+ 用户名/name input/300
4
+ `, "/user/edit");
@@ -0,0 +1 @@
1
+ pedit.bind(null, "标签", "tag");
@@ -0,0 +1,3 @@
1
+ plist.bind(null, '标签', "tag", refilm`
2
+ *标签/key 100
3
+ `, "/user/tag/edit");
@@ -3,7 +3,7 @@ function createSeek(express) {
3
3
  express.forEach(function (search) {
4
4
  if (dist) {
5
5
  if (/[\=]/.test(dist)) dist = `(${dist})`;
6
- dist = `${dist}!==void 0&&${dist}!==null?${dist}${search}:''`
6
+ dist = `typeof ${dist}!=='undefined'&&${dist}!==null?${dist}${search}:''`
7
7
  } else {
8
8
  dist = search;
9
9
  }
@@ -75,6 +75,7 @@
75
75
  if (/,/.test(name)) {
76
76
 
77
77
  }
78
+ item.closed = true;
78
79
  return item;
79
80
  });
80
81
  return items;
@@ -114,6 +115,7 @@
114
115
  actived = mmap[opened.active] || actived;
115
116
  if (actived) {
116
117
  if (actived_value === historys.length) {
118
+ setActive(actived, true);
117
119
  result.active = actived;
118
120
  };
119
121
  }
@@ -123,6 +125,7 @@
123
125
  var setActive = function (p, active) {
124
126
  while (p) {
125
127
  p.active = active;
128
+ if (active) p.closed = false;
126
129
  p = p.parent;
127
130
  }
128
131
  };
@@ -2,7 +2,7 @@
2
2
  function main(title, type, fields, edit_ref, options) {
3
3
  return frame$list(title, {
4
4
  load() {
5
- return data.from("list", { type }, a => JSAM.parse(encode62.timedecode(a)));
5
+ return data.from("list", { type }, a => JSAM.parse(encode62.timedecode(a || '')));
6
6
  },
7
7
  remove(o) {
8
8
  return data.from("edit", { type, key: encode62.timeencode(o.key), value: encode62.timeencode("") }).loading_promise;
@@ -1,11 +1,16 @@
1
- <div class="head">
2
- <span ng-bind=field.name></span>
3
- <span class="required" ng-if="field.required">*</span>
4
- </div>
5
- <div class="body">
1
+ <template v-if='field?.key'>
2
+ <div class="head">
3
+ <span ng-bind=field.name></span>
4
+ <span class="required" ng-if="field.required">*</span>
5
+ </div>
6
+ <div class="body">
7
+ <model _data=data _field=field></model>
8
+ <span class="error" ng-bind="error"></span>
9
+ </div>
10
+ <div class="foot" ng-if="field.msg">
11
+ <span ng-bind=field.msg></span>
12
+ </div>
13
+ </template>
14
+ <template v-else>
6
15
  <model _data=data _field=field></model>
7
- <span class="error" ng-bind="error"></span>
8
- </div>
9
- <div class="foot" ng-if="field.msg">
10
- <span ng-bind=field.msg></span>
11
- </div>
16
+ </template>
@@ -48,6 +48,12 @@ var constructors = {
48
48
  }
49
49
  return e;
50
50
  },
51
+ success(e) {
52
+ success(e);
53
+ e.innerHTML = `<span ng-html="field.comment"></span>`;
54
+ render(e.children, e.$scope, e.$parentScopes);
55
+ return e;
56
+ },
51
57
  switch: swap,
52
58
  row: textarea,
53
59
  password,
@@ -149,16 +155,30 @@ var readonly_types = {
149
155
  var f = data[field.key];
150
156
  return size(f);
151
157
  },
158
+ html(a, data) {
159
+ var t = document.createElement("span");
160
+ t.innerHTML = seek(data, a.field.key);
161
+ return t;
162
+ },
152
163
  swap(e, data) {
153
164
  var { field } = e;
154
165
  var v = data[field.key];
155
166
  if (field.options) {
156
- var o = field.options[v];
167
+ if (!field.optionsMap) field.optionsMap = createOptionsMap(field.options);
168
+ var o = field.optionsMap[v];
157
169
  if (o) return o.name;
158
170
  }
171
+ if (isEmpty(v)) v = '';
159
172
  return v;
160
173
  },
161
174
  };
175
+ var createOptionsMap = function (options) {
176
+ var map = Object.create(null);
177
+ for (var o of options) {
178
+ map[o.key] = o;
179
+ }
180
+ return map;
181
+ }
162
182
  readonly_types.select = readonly_types.swap;
163
183
  function main(elem) {
164
184
  var build = function () {
@@ -25,8 +25,10 @@ function prompt(msg = "请输入", check) {
25
25
  });
26
26
  })
27
27
  on("mousedown")(c, e => e.target !== ipt && e.preventDefault() | ipt.focus());
28
- on("keydown.enter")(c, function () {
28
+ on("keydown.enter")(c, function (event) {
29
+ if (event.defaultPrevented) return;
29
30
  if (check && check(ipt.value) === false) return;
31
+ event.preventDefault();
30
32
  oked = true;
31
33
  remove(c);
32
34
  fire();
@@ -1,6 +1,15 @@
1
1
  var hasOwnProperty = {}.hasOwnProperty;
2
2
  var renderElements = Object.create(null);
3
3
  var presets = Object.create(null);
4
+ presets.template = function (t) {
5
+ var node = document.createElement("div");
6
+ var comment = document.createComment('template');
7
+ node.innerHTML = t.innerHTML;
8
+ comment.with = [].slice.call(node.childNodes, 0);
9
+ renderElement(comment.with, t.$scope, t.$parentScopes);
10
+ remove(node.childNodes);
11
+ return comment;
12
+ };
4
13
  window.renderElements = renderElements;
5
14
  var renderidOffset = 10;
6
15
  var renderidClosed = 0;
@@ -70,7 +79,6 @@ var initialComment = function (renders, type, expression) {
70
79
  onremove(comment, removeRenderElement);
71
80
  appendChild.after(this, comment);
72
81
  if (!/if/i.test(type)) remove(this);
73
- this.with = comment;
74
82
  rebuild(comment);
75
83
  return comment;
76
84
  };
@@ -214,17 +222,12 @@ var createIf = function (search, id = 0) {
214
222
  var element = elements[cx];
215
223
  if (cx === shouldMount) {
216
224
  appendChild.before(this, element);
217
- element.with = this;
218
225
  if (element.renderid < 0) {
219
226
  element.renderid = id;
220
- var w = element.with;
221
- delete element.with;
222
- element = render(element);
223
- element.with = w;
227
+ elements[cx] = render(element);
224
228
  }
225
229
  }
226
230
  else {
227
- delete element.with;
228
231
  remove(element);
229
232
  }
230
233
  }
@@ -672,7 +675,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
672
675
  }
673
676
  }
674
677
  }
675
- if (element.children.length) renderElement(element.children, scope, parentScopes);
678
+ if (element.children && element.children.length) renderElement(element.children, scope, parentScopes);
676
679
  if (!isFirstRender) return element;
677
680
  for (var k in binds) {
678
681
  if (directives.hasOwnProperty(k)) {
@@ -34,6 +34,7 @@ extend(renderDefaults, {
34
34
  pic: img,
35
35
  image,
36
36
  back,
37
+ success,
37
38
  switch: swap,
38
39
  swap,
39
40
  password,
@@ -1,10 +1,11 @@
1
- function search(seartext, options) {
1
+ function search(seartext, options, path = "name") {
2
2
  if (options instanceof Array) {
3
3
  var hasFullmatch = false;
4
4
  var a = options.map(o => {
5
- if (o.name === seartext) hasFullmatch = true;
6
- var [power, m] = mark.power(o.name, seartext);
7
- return { power, name: m, value: o.value };
5
+ var name = seek(o, path);
6
+ if (name === seartext) hasFullmatch = true;
7
+ var [power, m] = mark.power(name, seartext);
8
+ return { power, [path]: m, value: o.value, item: o };
8
9
  }).filter(a => a.power > 0);
9
10
  a.sort(function (a, b) {
10
11
  return b.power - a.power;
@@ -24,6 +24,10 @@ var _remove = function () {
24
24
  var preventDefault = function (event) {
25
25
  event.preventDefault();
26
26
  };
27
+ var preventDefault1 = function (event) {
28
+ if (saved_list) return;
29
+ event.preventDefault();
30
+ }
27
31
  var lastTimeClick = 0;
28
32
  var removeByBlur = function () {
29
33
  if (!getTargetIn(this, document.activeElement)) _remove();
@@ -71,8 +75,8 @@ function select(target, list, removeOnSelect, direction) {
71
75
  target.innerHTML = `<option selected value="${this.value}">${this.name || this.value}</option>`
72
76
  }
73
77
  target.value = this.value;
74
- dispatch(target, "change");
75
78
  }
79
+ dispatch(target, "change");
76
80
  }
77
81
  };
78
82
  var onlistclick = function (event) {
@@ -96,8 +100,8 @@ function select(target, list, removeOnSelect, direction) {
96
100
  }
97
101
  on("keydown.up")(target, preventDefault);
98
102
  on("keydown.down")(target, preventDefault);
99
- on("keydown.enter")(target, preventDefault);
100
- on("keydown.space")(target, preventDefault);
103
+ on("keydown.enter")(target, preventDefault1);
104
+ on("keydown.space")(target, preventDefault1);
101
105
  var pop = function () {
102
106
  if (saved_list !== list) mousedown.call(this);
103
107
  };
@@ -60,7 +60,7 @@ function main() {
60
60
  function createItem(option) {
61
61
  var key = option.key || option.value;
62
62
  if (key in itemMap) return itemMap[key];
63
- var item = itemMap[option.value] = document.createElement('div');
63
+ var item = itemMap[key] = document.createElement('div');
64
64
  item.setAttribute("item", '');
65
65
  item.innerHTML = option.innerHTML || option.name;
66
66
  item.name = option.name || option.innerHTML;
@@ -78,12 +78,12 @@ function main() {
78
78
  iconed = icon;
79
79
  if (multiple) {
80
80
  item.setAttribute("selected", "");
81
- page.value.push(option.value);
81
+ page.value.push(key);
82
82
  }
83
83
  else {
84
84
  item.setAttribute("selected", "");
85
85
  page.activeNode = item;
86
- page.value = option.value
86
+ page.value = key
87
87
  }
88
88
  }
89
89
  if (option.disabled) {
@@ -142,10 +142,9 @@ function main() {
142
142
  if (a in itemMap) return false;
143
143
  cast(page.target, "add-option", a);
144
144
  children.push({ name: a, key: a });
145
- page.insertBefore(createItem({
146
- name: a,
147
- value: a,
148
- }), adder);
145
+ remove(page.children);
146
+ page.go(children.length - 1);
147
+ appendChild(page, adder);
149
148
  break;
150
149
  case this.children[1]:
151
150
  var options = [].slice.call(children, 0, children.length);
@@ -216,6 +215,7 @@ function main() {
216
215
  moveFocus(0);
217
216
  })
218
217
  var enter = function (e) {
218
+ if (e.defaultPrevented) return;
219
219
  e.preventDefault();
220
220
  var e = page.getIndexedElement(focus);
221
221
  if (e) e.click();
@@ -14,7 +14,7 @@ function main(options) {
14
14
  },
15
15
  del(o) {
16
16
  for (var cx = 0, dx = options.length; cx < dx; cx++) {
17
- if (options[cx].value === o.value) {
17
+ if (options[cx] === o || options[cx] === o.item) {
18
18
  var i = cx;
19
19
  break;
20
20
  }
@@ -0,0 +1,4 @@
1
+ function success(e) {
2
+ if (!e) e = document.createElement('success');
3
+ return e;
4
+ }
@@ -0,0 +1,13 @@
1
+ & {
2
+ background: #2942;
3
+ color: #294;
4
+ font-size: 24px;
5
+ line-height: 2;
6
+ text-align: center;
7
+ display: block;
8
+ font-family: "仿宋", sans-serif;
9
+
10
+ &:before {
11
+ content: " ✓ ";
12
+ }
13
+ }
@@ -127,4 +127,8 @@ body>& {
127
127
  padding: 0 20px;
128
128
  margin-left: 10px;
129
129
  }
130
+
131
+ a.button {
132
+ padding: 0;
133
+ }
130
134
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.13.1",
3
+ "version": "3.13.2",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {