UNPKG

avalon2

Version:

an elegant efficient express mvvm framework

453 lines (452 loc) 12.9 kB
<!doctype 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">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-yes">30×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></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">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">111×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">110×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">106×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">105×</span> <span class="cline-any cline-yes">105×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-yes">72×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">19×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-yes">21×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</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 &amp;&amp; avalon.shadowCopy(b, el) }) newVal = b if (!arrayWarn[this.type]) { avalon.warn('ms-' + this.type + '指令的值不建议使用数组形式了!') arrayWarn[this.type] = 1 } } &nbsp; 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] } } &nbsp; 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) { &nbsp; var dom = vdom.dom <span class="missing-if-branch" title="else path not taken" >E</span>if (dom &amp;&amp; dom.nodeType === 1) { var wrap = avalon(dom) for (var name in value) { wrap.css(name, value[name]) } } } }) &nbsp; export var cssDiff = cssDir.diff &nbsp; export function getEnumerableKeys(obj) { const res = []; for (let key in obj) res.push(key) return res } &nbsp; export function deepEquals(a, b, level) { if (level === 0) return a === b if (a === null &amp;&amp; b === null) return true if (a === undefined &amp;&amp; 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" &amp;&amp; typeof b === "object") { return equalObject(a, b, level) } return a === b } &nbsp; function equalArray(a, b, level) { if (a.length !== b.length) { return false } for (let i = a.length - 1; i &gt;= 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 } &nbsp; 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>