efront 3.10.7 → 3.11.0
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/coms/frame/route.js +0 -1
- package/coms/zimoli/active.js +5 -1
- package/coms/zimoli/button.js +1 -2
- package/coms/zimoli/menu.js +6 -4
- package/coms/zimoli/menu.less +11 -4
- package/coms/zimoli/menuItem.html +2 -2
- package/coms/zimoli/menuItem.js +7 -3
- package/coms/zimoli/menuList.html +2 -2
- package/coms/zimoli/menuList.js +100 -26
- package/coms/zimoli/render.js +39 -13
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/frame/route.js
CHANGED
package/coms/zimoli/active.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
// 激活 自定义的 active 事件
|
|
2
|
-
function active(target, value, item) {
|
|
2
|
+
function active(target, value, item, targetElement) {
|
|
3
3
|
var activeEvent = createEvent("active");
|
|
4
4
|
activeEvent.item = item;
|
|
5
5
|
activeEvent.value = value;
|
|
6
|
+
if (targetElement) {
|
|
7
|
+
if (Object.defineProperty) Object.defineProperty(activeEvent, 'currentTarget', { value: targetElement });
|
|
8
|
+
else activeEvent.currentTarget = targetElement;
|
|
9
|
+
}
|
|
6
10
|
activeEvent = dispatch(target, activeEvent);
|
|
7
11
|
return activeEvent && !activeEvent.defaultPrevented;
|
|
8
12
|
}
|
package/coms/zimoli/button.js
CHANGED
|
@@ -13,10 +13,9 @@ on("keydown")(window, function (event) {
|
|
|
13
13
|
if (event.altKey) {
|
|
14
14
|
var key = String.fromCharCode(which);
|
|
15
15
|
var element = keyMap[key];
|
|
16
|
-
|
|
17
16
|
if (element) {
|
|
18
17
|
if (isMounted(element)) {
|
|
19
|
-
|
|
18
|
+
event.preventDefault();
|
|
20
19
|
element.click();
|
|
21
20
|
} else {
|
|
22
21
|
delete keyMap[key];
|
package/coms/zimoli/menu.js
CHANGED
|
@@ -148,20 +148,22 @@ function main(elem, mode) {
|
|
|
148
148
|
case "x":
|
|
149
149
|
case "horizonal":
|
|
150
150
|
var direction = 'x';
|
|
151
|
+
mode = "horizonal";
|
|
151
152
|
case "v":
|
|
152
153
|
case "y":
|
|
153
154
|
case "vertical":
|
|
154
|
-
var emit = function (item) {
|
|
155
|
-
active(elem, item, item.value);
|
|
155
|
+
var emit = function (item, target) {
|
|
156
|
+
active(elem, item, item.value, target);
|
|
156
157
|
};
|
|
157
158
|
if ("$src" in elem) {
|
|
158
159
|
getGenerator(elem);
|
|
159
160
|
care(elem, function (src) {
|
|
160
161
|
menuList(elem, getTreeFromData(src), emit, direction);
|
|
161
162
|
});
|
|
162
|
-
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
163
165
|
var nodes = getArrayNodes(elem);
|
|
164
|
-
elem = menuList(elem, nodes, emit);
|
|
166
|
+
elem = menuList(elem, nodes, emit, direction);
|
|
165
167
|
}
|
|
166
168
|
break;
|
|
167
169
|
default:
|
package/coms/zimoli/menu.less
CHANGED
|
@@ -94,10 +94,17 @@ body:active & {
|
|
|
94
94
|
text-overflow: hidden;
|
|
95
95
|
height: 40px;
|
|
96
96
|
position: relative;
|
|
97
|
-
border: 1px solid #18333c;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
border-bottom: 1px solid #18333c;
|
|
98
|
+
padding: 0;
|
|
99
|
+
|
|
100
|
+
menu-item {
|
|
101
|
+
display: inline-block;
|
|
102
|
+
|
|
103
|
+
&.has-children:after {
|
|
104
|
+
padding-top: 3px;
|
|
105
|
+
content: "﹀";
|
|
106
|
+
}
|
|
107
|
+
}
|
|
101
108
|
|
|
102
109
|
>div {
|
|
103
110
|
vertical-align: top;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<i ng-class="
|
|
2
|
-
<span ng-
|
|
1
|
+
<i ng-class="icon" ng-if='useIcon||hasIcon'></i>
|
|
2
|
+
<span ng-html="name"></span>
|
|
3
3
|
<s></s>
|
package/coms/zimoli/menuItem.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
function main(elem, scope, hasIcon) {
|
|
2
2
|
var item = elem || document.createElement('menu-item');
|
|
3
3
|
item.innerHTML = menuItem;
|
|
4
|
-
if (isObject(scope) && scope !==
|
|
5
|
-
render(item, { menu: scope, useIcon: hasIcon, hasIcon })
|
|
4
|
+
if (isObject(scope) && scope !== item.$scope) {
|
|
6
5
|
}
|
|
7
6
|
else {
|
|
8
|
-
|
|
7
|
+
var scope = item.$scope;
|
|
9
8
|
}
|
|
9
|
+
if (scope.menu) scope = scope.menu;
|
|
10
|
+
var name = scope.name;
|
|
11
|
+
var icon = scope.icon;
|
|
12
|
+
if (hasIcon === undefined) hasIcon = !!icon;
|
|
13
|
+
render(item.children, { useIcon: hasIcon, hasIcon, name, icon });
|
|
10
14
|
return item;
|
|
11
15
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<menu-item ng-repeat="menu in menus" ng-if="!menu.hidden" ng-click="open(menu,
|
|
2
|
-
ng-mouseleave="clearTimeout(popTimer)" ng-mouseenter="popTimer=popMenu(menu,
|
|
1
|
+
<menu-item ng-repeat="menu in menus" ng-if="!menu.hidden" ng-click="open(menu,this)"
|
|
2
|
+
ng-mouseleave="clearTimeout(popTimer)" ng-mouseenter="popTimer=popMenu(menu,this)"
|
|
3
3
|
ng-class="{'has-children':menu.children&&menu.children.length,'warn':menu.type==='danger'||menu.type==='warn'||menu.type==='red'}">
|
|
4
4
|
</menu-item>
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -8,38 +8,52 @@ var release = function () {
|
|
|
8
8
|
var clear = function () {
|
|
9
9
|
clearTimeout(releaseTimer);
|
|
10
10
|
};
|
|
11
|
+
var unfocus = function () {
|
|
12
|
+
remove(mounted_menus);
|
|
13
|
+
this.ispop = false;
|
|
14
|
+
};
|
|
11
15
|
function main(page, items, active, direction = 'y') {
|
|
12
16
|
if (!isNode(page)) {
|
|
13
17
|
var page = div();
|
|
14
18
|
}
|
|
15
19
|
var main = this;
|
|
16
|
-
|
|
20
|
+
if (direction !== 'x') page.ispop = true;
|
|
21
|
+
function popMenu(item, target) {
|
|
17
22
|
if (page.active) {
|
|
18
23
|
clear();
|
|
19
24
|
remove(page.active);
|
|
20
25
|
}
|
|
21
26
|
if (!item.children || !item.children.length) return;
|
|
22
27
|
var clone = template.cloneNode();
|
|
28
|
+
clone.$parentScopes = page.$parentScopes;
|
|
29
|
+
clone.$src = src;
|
|
23
30
|
clone.innerHTML = template.innerHTML;
|
|
24
31
|
var menu = main(clone, item.children, active);
|
|
25
32
|
mounted_menus.push(menu);
|
|
26
|
-
|
|
27
33
|
page.active = menu;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
menu.root = page.root || page;
|
|
35
|
+
popup(menu, target);
|
|
36
|
+
if (page.ispop === true) {
|
|
37
|
+
var offleave0 = on("mouseleave")(target, release);
|
|
38
|
+
var offleave1 = on("mouseleave")(menu, release);
|
|
39
|
+
var offenter0 = on("mouseenter")(target, clear);
|
|
40
|
+
var offenter1 = on("mouseenter")(menu, clear);
|
|
41
|
+
} else {
|
|
42
|
+
page.ispop = 1;
|
|
43
|
+
page.tabIndex = 0;
|
|
44
|
+
page.focus();
|
|
45
|
+
}
|
|
46
|
+
on("mousedown")(menu, e => e.preventDefault());
|
|
33
47
|
once("remove")(menu, function () {
|
|
34
|
-
removeFromList(mounted_menus,
|
|
35
|
-
offleave0();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
offenter1();
|
|
48
|
+
removeFromList(mounted_menus, this);
|
|
49
|
+
if (offleave0) offleave0();
|
|
50
|
+
if (offleave1) offleave1();
|
|
51
|
+
if (offenter0) offenter0();
|
|
52
|
+
if (offenter1) offenter1();
|
|
39
53
|
});
|
|
40
54
|
}
|
|
41
|
-
|
|
42
|
-
var template = page.tempalte ||
|
|
55
|
+
if (!page.ispop) on("blur")(page, unfocus);
|
|
56
|
+
var template = page.tempalte || document.createElement("ylist");
|
|
43
57
|
if (!page.tempalte) {
|
|
44
58
|
template.className = '';
|
|
45
59
|
template.removeAttribute('mode');
|
|
@@ -47,7 +61,6 @@ function main(page, items, active, direction = 'y') {
|
|
|
47
61
|
page.tempalte = template;
|
|
48
62
|
}
|
|
49
63
|
if (!page.children.length || page.menutype === 1) {
|
|
50
|
-
page.innerHTML = menuList;
|
|
51
64
|
page.menutype = 1;
|
|
52
65
|
var hasIcon = function () {
|
|
53
66
|
var menus = items;
|
|
@@ -58,26 +71,78 @@ function main(page, items, active, direction = 'y') {
|
|
|
58
71
|
}
|
|
59
72
|
return false;
|
|
60
73
|
};
|
|
61
|
-
|
|
62
|
-
"menu-item": function () {
|
|
74
|
+
var $scope = {
|
|
75
|
+
"menu-item": function (e, s) {
|
|
63
76
|
return button(
|
|
64
|
-
menuItem
|
|
77
|
+
menuItem(e, s)
|
|
65
78
|
);
|
|
66
79
|
},
|
|
67
80
|
menus: items,
|
|
68
81
|
hasIcon: hasIcon(),
|
|
69
|
-
open(menu,
|
|
70
|
-
active(menu,
|
|
82
|
+
open(menu, elem) {
|
|
83
|
+
var pop = active(menu, elem);
|
|
84
|
+
if (pop === false) return;
|
|
85
|
+
var root = page.root || page;
|
|
86
|
+
if (root.ispop === 1) root.ispop = false;
|
|
87
|
+
if (!mounted_menus.length) {
|
|
88
|
+
popMenu.apply(this, arguments);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
unfocus.call(page);
|
|
92
|
+
}
|
|
71
93
|
},
|
|
72
94
|
popTimer: 0,
|
|
73
95
|
popMenu() {
|
|
96
|
+
if (!page.ispop) return;
|
|
74
97
|
var args = arguments;
|
|
75
98
|
return setTimeout(function () {
|
|
76
99
|
popMenu.apply(null, args);
|
|
77
100
|
}, 60);
|
|
78
101
|
},
|
|
79
|
-
}
|
|
80
|
-
|
|
102
|
+
};
|
|
103
|
+
if (page.$src) {
|
|
104
|
+
var src = page.$src;
|
|
105
|
+
var parentScopes = page.$parentScopes;
|
|
106
|
+
var itemName = src.itemName;
|
|
107
|
+
var className = `{'has-children':${itemName}.children&&${itemName}.children.length,'warn':${itemName}.type==='danger'||${itemName}.type==='warn'||${itemName}.type==='red'}`;
|
|
108
|
+
var notHidden = `!${itemName}.hidden`;
|
|
109
|
+
list(page, function (index) {
|
|
110
|
+
var item = items[index];
|
|
111
|
+
if (!item) return;
|
|
112
|
+
var a = menuItem(null, item, $scope.hasIcon);
|
|
113
|
+
var scope = {};
|
|
114
|
+
if (item instanceof Item) item = item.value;
|
|
115
|
+
if (src.itemName) scope[src.itemName] = item;
|
|
116
|
+
else scope.$item = item;
|
|
117
|
+
if (src.keyName) scope[src.keyName] = index;
|
|
118
|
+
else scope.$key = index;
|
|
119
|
+
if (src.indexName) scope[src.indexName] = index;
|
|
120
|
+
else scope.$index = index;
|
|
121
|
+
if (src.srcName) scope[src.srcName] = items;
|
|
122
|
+
if (src.itemName) a.setAttribute("e-if", notHidden);
|
|
123
|
+
on("mouseleave")(a, function () {
|
|
124
|
+
clearTimeout($scope.popTimer);
|
|
125
|
+
});
|
|
126
|
+
on("mouseenter")(a, function () {
|
|
127
|
+
$scope.popTimer = $scope.popMenu(item, this);
|
|
128
|
+
});
|
|
129
|
+
on("click")(a, function () {
|
|
130
|
+
$scope.open(items[index], this);
|
|
131
|
+
});
|
|
132
|
+
a.setAttribute("e-class", className);
|
|
133
|
+
a = button(a);
|
|
134
|
+
render(a, scope, parentScopes);
|
|
135
|
+
return a;
|
|
136
|
+
});
|
|
137
|
+
on("append")(page, function () {
|
|
138
|
+
this.go(0);
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
page.innerHTML = menuList;
|
|
143
|
+
render(page, $scope);
|
|
144
|
+
vbox(page);
|
|
145
|
+
}
|
|
81
146
|
page.renders.unshift(function () {
|
|
82
147
|
this.$scope.hasIcon = hasIcon();
|
|
83
148
|
});
|
|
@@ -86,11 +151,20 @@ function main(page, items, active, direction = 'y') {
|
|
|
86
151
|
list(page, function (index) {
|
|
87
152
|
var elem = generator(index);
|
|
88
153
|
if (!elem) return;
|
|
89
|
-
on("mouseenter")(elem, function (
|
|
90
|
-
popMenu(this.src[index],
|
|
154
|
+
on("mouseenter")(elem, function () {
|
|
155
|
+
if (page.ispop) popMenu(this.src[index], this);
|
|
91
156
|
});
|
|
92
|
-
on("click")(elem, function (
|
|
93
|
-
active(this.src[index],
|
|
157
|
+
on("click")(elem, function () {
|
|
158
|
+
var pop = active(this.src[index], this);
|
|
159
|
+
if (pop === false) return;
|
|
160
|
+
var root = page.root || page;
|
|
161
|
+
if (root.ispop === 1) root.ispop = false;
|
|
162
|
+
if (!mounted_menus.length) {
|
|
163
|
+
popMenu(this.src[index], this);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
unfocus.call(page);
|
|
167
|
+
}
|
|
94
168
|
});
|
|
95
169
|
return elem;
|
|
96
170
|
}, direction);
|
package/coms/zimoli/render.js
CHANGED
|
@@ -527,25 +527,51 @@ var binders = {
|
|
|
527
527
|
});
|
|
528
528
|
}
|
|
529
529
|
};
|
|
530
|
-
var
|
|
531
|
-
|
|
530
|
+
var createEmiter = function (on) {
|
|
531
|
+
return function (key, search) {
|
|
532
|
+
if (this.$src) {
|
|
533
|
+
var parsedSrc = this.$src;
|
|
534
|
+
var scopes = this.$parentScopes;
|
|
535
|
+
search = search.slice();
|
|
536
|
+
search[0] += `with(this.$parentScopes[${scopes.length}])`;
|
|
537
|
+
this.$parentScopes = scopes.concat(this.$scope);
|
|
538
|
+
}
|
|
532
539
|
var getter = createGetter(search, false);
|
|
533
540
|
on(key)(this, function (e) {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
541
|
+
if (parsedSrc) {
|
|
542
|
+
var target = e.currentTarget || e.target;
|
|
543
|
+
var scopes = target && target.$parentScopes;
|
|
544
|
+
if (scopes) {
|
|
545
|
+
var scope = null;
|
|
546
|
+
for (var cx = scopes.length - 1; cx >= 0; cx--) {
|
|
547
|
+
var s = scopes[cx];
|
|
548
|
+
if (s === this.$scope) {
|
|
549
|
+
scope = scopes[cx + 1];
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (!scope && target.$scope !== this.$scope) scope = target.$scope;
|
|
555
|
+
}
|
|
556
|
+
var res;
|
|
557
|
+
if (scope) {
|
|
558
|
+
var temp = this.$scope;
|
|
559
|
+
this.$scope = scope;
|
|
560
|
+
res = getter.call(this, e);
|
|
561
|
+
this.$scope = temp;
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
res = getter.call(this, e);
|
|
565
|
+
}
|
|
544
566
|
if (res && isFunction(res.then)) res.then(digest, digest);
|
|
545
567
|
digest();
|
|
546
568
|
return res;
|
|
547
569
|
});
|
|
548
|
-
}
|
|
570
|
+
};
|
|
571
|
+
};
|
|
572
|
+
var emiters = {
|
|
573
|
+
on: createEmiter(on),
|
|
574
|
+
once: createEmiter(once),
|
|
549
575
|
};
|
|
550
576
|
emiters.v = emiters.ng = emiters.on;
|
|
551
577
|
|