-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathif.compact.js
58 lines (55 loc) · 2.01 KB
/
if.compact.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var update = require('./_update')
//ms-imporant ms-controller ms-for ms-widget ms-effect ms-if ...
avalon.directive('if', {
priority: 6,
diff: function (copy, src, name, copys, sources, index) {
var cur = !!copy[name]
src[name] = cur
update(src, this.update)
},
update: function (dom, vdom, parent) {
var show = vdom['ms-if']
if (vdom.dynamic['ms-if']) {
vdom.dynamic['ms-if'] = vdom.nodeName
}
if (show) {
if (vdom.nodeName === '#comment') {
vdom.nodeName = vdom.dynamic['ms-if']
delete vdom.nodeValue
var comment = vdom.comment
if (!comment) {
return
}
parent = comment.parentNode
if (parent)
parent.replaceChild(dom, comment)
delete vdom.comment
avalon.applyEffect(dom, vdom, {
hook: 'onEnterDone'
})
}
} else {
//要移除元素节点,在对应位置上插入注释节点
if (!vdom.comment) {
vdom.comment = document.createComment('if')
}
vdom.nodeName = '#comment'
vdom.nodeValue = 'if'
avalon.applyEffect(dom, vdom, {
hook: 'onLeaveDone',
cb: function () {
//去掉注释节点临时添加的ms-effect
//https://github.com/RubyLouvre/avalon/issues/1577
//这里必须设置nodeValue为ms-if,否则会在节点对齐算法中出现乱删节点的BUG
if (!parent || parent.nodeType === 11) {
parent = dom.parentNode
if (!parent || parent.nodeType === 11) {
return
}
}
parent.replaceChild(vdom.comment, dom)
}
})
}
}
})