avalon2
Version:
an elegant efficient express mvvm framework
453 lines (452 loc) • 12.9 kB
HTML
<html lang="en">
<head>
<title>Code coverage report for directives/css.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="../index.html">all files</a> / <a href="index.html">directives/</a> css.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">97.62% </span>
<span class="quiet">Statements</span>
<span class='fraction'>82/84</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">94.83% </span>
<span class="quiet">Branches</span>
<span class='fraction'>55/58</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>7/7</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">97.62% </span>
<span class="quiet">Lines</span>
<span class='fraction'>82/84</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">18×</span>
<span class="cline-any cline-yes">18×</span>
<span class="cline-any cline-yes">33×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">18×</span>
<span class="cline-any cline-yes">18×</span>
<span class="cline-any cline-yes">3×</span>
<span class="cline-any cline-yes">3×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">119×</span>
<span class="cline-any cline-yes">63×</span>
<span class="cline-any cline-yes">63×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">56×</span>
<span class="cline-any cline-yes">33×</span>
<span class="cline-any cline-yes">33×</span>
<span class="cline-any cline-yes">57×</span>
<span class="cline-any cline-yes">27×</span>
<span class="cline-any cline-yes">27×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">30×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">23×</span>
<span class="cline-any cline-yes">27×</span>
<span class="cline-any cline-yes">20×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">27×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">29×</span>
<span class="cline-any cline-yes">38×</span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">92×</span>
<span class="cline-any cline-yes">85×</span>
<span class="cline-any cline-yes">85×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">7×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">13×</span>
<span class="cline-any cline-yes">13×</span>
<span class="cline-any cline-yes">13×</span>
<span class="cline-any cline-yes">13×</span>
<span class="cline-any cline-yes">17×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">38×</span>
<span class="cline-any cline-yes">38×</span>
<span class="cline-any cline-yes">51×</span>
<span class="cline-any cline-yes">38×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">111×</span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">110×</span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">106×</span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">105×</span>
<span class="cline-any cline-yes">105×</span>
<span class="cline-any cline-yes">3×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">102×</span>
<span class="cline-any cline-yes">10×</span>
<span class="cline-any cline-yes">92×</span>
<span class="cline-any cline-yes">20×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">72×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">10×</span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">6×</span>
<span class="cline-any cline-yes">10×</span>
<span class="cline-any cline-yes">10×</span>
<span class="cline-any cline-yes">2×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">20×</span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">19×</span>
<span class="cline-any cline-yes">2×</span>
<span class="cline-any cline-yes">17×</span>
<span class="cline-any cline-yes">21×</span>
<span class="cline-any cline-yes">1×</span>
<span class="cline-any cline-yes">20×</span>
<span class="cline-any cline-yes">20×</span>
<span class="cline-any cline-yes">7×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">9×</span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { avalon, platform } from '../seed/core'
var arrayWarn = {}
var cssDir = avalon.directive('css', {
diff: function(newVal, oldVal) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (Object(newVal) === newVal) {
newVal = platform.toJson(newVal) //安全的遍历VBscript
if (Array.isArray(newVal)) { //转换成对象
var b = {}
newVal.forEach(function(el) {
el && avalon.shadowCopy(b, el)
})
newVal = b
if (!arrayWarn[this.type]) {
avalon.warn('ms-' + this.type + '指令的值不建议使用数组形式了!')
arrayWarn[this.type] = 1
}
}
var hasChange = false
var patch = {}
if (!oldVal) { //如果一开始为空
patch = newVal
hasChange = true
} else {
if (this.deep) {
var deep = typeof this.deep === 'number' ? <span class="branch-0 cbranch-no" title="branch not covered" >this.deep </span>: 6
for (let i in newVal) { //diff差异点
if (!deepEquals(newVal[i], oldVal[i], 4)) {
this.value = newVal
return true
}
patch[i] = newVal[i]
}
} else {
for (let i in newVal) { //diff差异点
if (newVal[i] !== oldVal[i]) {
hasChange = true
}
patch[i] = newVal[i]
}
}
for (let i in oldVal) {
if (!(i in patch)) {
hasChange = true
patch[i] = ''
}
}
}
if (hasChange) {
this.value = patch
return true
}
}
return false
},
update: function(vdom, value) {
var dom = vdom.dom
<span class="missing-if-branch" title="else path not taken" >E</span>if (dom && dom.nodeType === 1) {
var wrap = avalon(dom)
for (var name in value) {
wrap.css(name, value[name])
}
}
}
})
export var cssDiff = cssDir.diff
export function getEnumerableKeys(obj) {
const res = [];
for (let key in obj)
res.push(key)
return res
}
export function deepEquals(a, b, level) {
if (level === 0)
return a === b
if (a === null && b === null)
return true
if (a === undefined && b === undefined)
return true
const aIsArray = Array.isArray(a)
if (aIsArray !== Array.isArray(b)) {
return false
}
if (aIsArray) {
return equalArray(a, b, level)
} else if (typeof a === "object" && typeof b === "object") {
return equalObject(a, b, level)
}
return a === b
}
function equalArray(a, b, level) {
if (a.length !== b.length) {
return false
}
for (let i = a.length - 1; i >= 0; i--) {
try {
if (!deepEquals(a[i], b[i], level - 1)) {
return false
}
} catch (noThisPropError) {
<span class="cstat-no" title="statement not covered" > return false</span>
}
}
return true
}
function equalObject(a, b, level) {
if (a === null || b === null)
return false;
if (getEnumerableKeys(a).length !== getEnumerableKeys(b).length)
return false;
for (let prop in a) {
if (!(prop in b))
return false
try {
if (!deepEquals(a[prop], b[prop], level - 1)) {
return false
}
} catch (noThisPropError) {
<span class="cstat-no" title="statement not covered" > return false</span>
}
}
return true
}</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Dec 13 2016 18:10:11 GMT+0800 (CST)
</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../sorter.js"></script>
</body>
</html>