@youngbeen/angle-ctrl
Advanced tools
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <coverage generated="1562831148919" clover="3.2.0"> | ||
| <project timestamp="1562831148919" name="All files"> | ||
| <metrics statements="39" coveredstatements="39" conditionals="41" coveredconditionals="37" methods="10" coveredmethods="10" elements="90" coveredelements="86" complexity="0" loc="39" ncloc="39" packages="2" files="2" classes="2"/> | ||
| <package name="logCtrl"> | ||
| <metrics statements="16" coveredstatements="16" conditionals="12" coveredconditionals="11" methods="2" coveredmethods="2"/> | ||
| <file name="LogCtrl.ts" path="/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/logCtrl/LogCtrl.ts"> | ||
| <metrics statements="16" coveredstatements="16" conditionals="12" coveredconditionals="11" methods="2" coveredmethods="2"/> | ||
| <line num="24" count="1" type="stmt"/> | ||
| <line num="25" count="1" type="stmt"/> | ||
| <line num="26" count="1" type="stmt"/> | ||
| <line num="27" count="1" type="stmt"/> | ||
| <line num="32" count="3" type="cond" truecount="4" falsecount="0"/> | ||
| <line num="33" count="2" type="stmt"/> | ||
| <line num="34" count="2" type="stmt"/> | ||
| <line num="35" count="2" type="stmt"/> | ||
| <line num="36" count="2" type="stmt"/> | ||
| <line num="45" count="2" type="stmt"/> | ||
| <line num="47" count="2" type="stmt"/> | ||
| <line num="52" count="1" type="stmt"/> | ||
| <line num="61" count="2" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="62" count="1" type="stmt"/> | ||
| <line num="64" count="1" type="cond" truecount="1" falsecount="1"/> | ||
| <line num="65" count="1" type="stmt"/> | ||
| </file> | ||
| </package> | ||
| <package name="timeCtrl"> | ||
| <metrics statements="23" coveredstatements="23" conditionals="29" coveredconditionals="26" methods="8" coveredmethods="8"/> | ||
| <file name="TimeCtrl.ts" path="/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/timeCtrl/TimeCtrl.ts"> | ||
| <metrics statements="23" coveredstatements="23" conditionals="29" coveredconditionals="26" methods="8" coveredmethods="8"/> | ||
| <line num="16" count="3" type="cond" truecount="1" falsecount="1"/> | ||
| <line num="17" count="3" type="cond" truecount="1" falsecount="1"/> | ||
| <line num="18" count="3" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="21" count="3" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="25" count="3" type="stmt"/> | ||
| <line num="26" count="93" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="28" count="90" type="stmt"/> | ||
| <line num="29" count="90" type="stmt"/> | ||
| <line num="32" count="3" type="stmt"/> | ||
| <line num="33" count="3" type="stmt"/> | ||
| <line num="40" count="4" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="42" count="1" type="stmt"/> | ||
| <line num="43" count="1" type="stmt"/> | ||
| <line num="45" count="3" type="stmt"/> | ||
| <line num="46" count="3" type="cond" truecount="1" falsecount="1"/> | ||
| <line num="47" count="3" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="50" count="3" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="54" count="3" type="stmt"/> | ||
| <line num="55" count="76" type="cond" truecount="2" falsecount="0"/> | ||
| <line num="57" count="73" type="stmt"/> | ||
| <line num="58" count="73" type="stmt"/> | ||
| <line num="61" count="3" type="stmt"/> | ||
| <line num="62" count="3" type="stmt"/> | ||
| </file> | ||
| </package> | ||
| </project> | ||
| </coverage> |
| {"/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/logCtrl/LogCtrl.ts": {"path":"/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/logCtrl/LogCtrl.ts","statementMap":{"0":{"start":{"line":24,"column":27},"end":{"line":24,"column":29}},"1":{"start":{"line":25,"column":27},"end":{"line":25,"column":60}},"2":{"start":{"line":26,"column":29},"end":{"line":26,"column":39}},"3":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}},"4":{"start":{"line":32,"column":4},"end":{"line":56,"column":5}},"5":{"start":{"line":33,"column":40},"end":{"line":33,"column":50}},"6":{"start":{"line":34,"column":6},"end":{"line":34,"column":25}},"7":{"start":{"line":35,"column":6},"end":{"line":35,"column":37}},"8":{"start":{"line":36,"column":16},"end":{"line":44,"column":7}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":27}},"10":{"start":{"line":47,"column":6},"end":{"line":50,"column":7}},"11":{"start":{"line":52,"column":6},"end":{"line":55,"column":7}},"12":{"start":{"line":61,"column":4},"end":{"line":75,"column":5}},"13":{"start":{"line":62,"column":26},"end":{"line":62,"column":52}},"14":{"start":{"line":64,"column":6},"end":{"line":69,"column":7}},"15":{"start":{"line":65,"column":8},"end":{"line":68,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":31,"column":2},"end":{"line":31,"column":3}},"loc":{"start":{"line":31,"column":133},"end":{"line":57,"column":3}},"line":31},"1":{"name":"(anonymous_1)","decl":{"start":{"line":60,"column":2},"end":{"line":60,"column":3}},"loc":{"start":{"line":60,"column":19},"end":{"line":76,"column":3}},"line":60}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":38},"end":{"line":31,"column":55}},"type":"default-arg","locations":[{"start":{"line":31,"column":53},"end":{"line":31,"column":55}}],"line":31},"1":{"loc":{"start":{"line":31,"column":57},"end":{"line":31,"column":78}},"type":"default-arg","locations":[{"start":{"line":31,"column":76},"end":{"line":31,"column":78}}],"line":31},"2":{"loc":{"start":{"line":31,"column":80},"end":{"line":31,"column":101}},"type":"default-arg","locations":[{"start":{"line":31,"column":99},"end":{"line":31,"column":101}}],"line":31},"3":{"loc":{"start":{"line":31,"column":103},"end":{"line":31,"column":119}},"type":"default-arg","locations":[{"start":{"line":31,"column":117},"end":{"line":31,"column":119}}],"line":31},"4":{"loc":{"start":{"line":32,"column":4},"end":{"line":56,"column":5}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":56,"column":5}},{"start":{"line":32,"column":4},"end":{"line":56,"column":5}}],"line":32},"5":{"loc":{"start":{"line":32,"column":8},"end":{"line":32,"column":19}},"type":"binary-expr","locations":[{"start":{"line":32,"column":8},"end":{"line":32,"column":11}},{"start":{"line":32,"column":15},"end":{"line":32,"column":19}}],"line":32},"6":{"loc":{"start":{"line":61,"column":4},"end":{"line":75,"column":5}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":75,"column":5}},{"start":{"line":61,"column":4},"end":{"line":75,"column":5}}],"line":61},"7":{"loc":{"start":{"line":64,"column":6},"end":{"line":69,"column":7}},"type":"if","locations":[{"start":{"line":64,"column":6},"end":{"line":69,"column":7}},{"start":{"line":64,"column":6},"end":{"line":69,"column":7}}],"line":64}},"s":{"0":1,"1":1,"2":1,"3":1,"4":3,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":1,"12":2,"13":1,"14":1,"15":1},"f":{"0":3,"1":2},"b":{"0":[1],"1":[1],"2":[1],"3":[2],"4":[2,1],"5":[3,2],"6":[1,1],"7":[1,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ef628e31908f4e50302416f623e371f379c3988d"} | ||
| ,"/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/timeCtrl/TimeCtrl.ts": {"path":"/Users/yangxinghua/Documents/Work/angle-common/angle-ctrl/src/timeCtrl/TimeCtrl.ts","statementMap":{"0":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":33}},"2":{"start":{"line":18,"column":33},"end":{"line":20,"column":5}},"3":{"start":{"line":21,"column":32},"end":{"line":23,"column":5}},"4":{"start":{"line":25,"column":18},"end":{"line":35,"column":12}},"5":{"start":{"line":26,"column":6},"end":{"line":34,"column":7}},"6":{"start":{"line":28,"column":8},"end":{"line":28,"column":42}},"7":{"start":{"line":29,"column":8},"end":{"line":29,"column":15}},"8":{"start":{"line":32,"column":8},"end":{"line":32,"column":41}},"9":{"start":{"line":33,"column":8},"end":{"line":33,"column":25}},"10":{"start":{"line":40,"column":4},"end":{"line":44,"column":5}},"11":{"start":{"line":42,"column":6},"end":{"line":42,"column":87}},"12":{"start":{"line":43,"column":6},"end":{"line":43,"column":12}},"13":{"start":{"line":45,"column":22},"end":{"line":45,"column":27}},"14":{"start":{"line":46,"column":4},"end":{"line":46,"column":33}},"15":{"start":{"line":47,"column":33},"end":{"line":49,"column":5}},"16":{"start":{"line":50,"column":32},"end":{"line":52,"column":5}},"17":{"start":{"line":54,"column":18},"end":{"line":64,"column":12}},"18":{"start":{"line":55,"column":6},"end":{"line":63,"column":7}},"19":{"start":{"line":57,"column":8},"end":{"line":57,"column":36}},"20":{"start":{"line":58,"column":8},"end":{"line":58,"column":13}},"21":{"start":{"line":61,"column":8},"end":{"line":61,"column":35}},"22":{"start":{"line":62,"column":8},"end":{"line":62,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":137},"end":{"line":36,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":41},"end":{"line":18,"column":42}},"loc":{"start":{"line":18,"column":59},"end":{"line":20,"column":5}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":39},"end":{"line":21,"column":40}},"loc":{"start":{"line":21,"column":57},"end":{"line":23,"column":5}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":25,"column":30},"end":{"line":25,"column":31}},"loc":{"start":{"line":25,"column":48},"end":{"line":35,"column":5}},"line":25},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":2},"end":{"line":39,"column":3}},"loc":{"start":{"line":39,"column":161},"end":{"line":65,"column":3}},"line":39},"5":{"name":"(anonymous_5)","decl":{"start":{"line":47,"column":41},"end":{"line":47,"column":42}},"loc":{"start":{"line":47,"column":59},"end":{"line":49,"column":5}},"line":47},"6":{"name":"(anonymous_6)","decl":{"start":{"line":50,"column":39},"end":{"line":50,"column":40}},"loc":{"start":{"line":50,"column":57},"end":{"line":52,"column":5}},"line":50},"7":{"name":"(anonymous_7)","decl":{"start":{"line":54,"column":30},"end":{"line":54,"column":31}},"loc":{"start":{"line":54,"column":48},"end":{"line":64,"column":5}},"line":54}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":15},"end":{"line":15,"column":25}},"type":"default-arg","locations":[{"start":{"line":15,"column":23},"end":{"line":15,"column":25}}],"line":15},"1":{"loc":{"start":{"line":15,"column":27},"end":{"line":15,"column":38}},"type":"default-arg","locations":[{"start":{"line":15,"column":34},"end":{"line":15,"column":38}}],"line":15},"2":{"loc":{"start":{"line":15,"column":40},"end":{"line":15,"column":51}},"type":"default-arg","locations":[{"start":{"line":15,"column":47},"end":{"line":15,"column":51}}],"line":15},"3":{"loc":{"start":{"line":15,"column":53},"end":{"line":15,"column":63}},"type":"default-arg","locations":[{"start":{"line":15,"column":59},"end":{"line":15,"column":63}}],"line":15},"4":{"loc":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"type":"cond-expr","locations":[{"start":{"line":16,"column":16},"end":{"line":16,"column":21}},{"start":{"line":16,"column":24},"end":{"line":16,"column":34}}],"line":16},"5":{"loc":{"start":{"line":17,"column":4},"end":{"line":17,"column":33}},"type":"cond-expr","locations":[{"start":{"line":17,"column":15},"end":{"line":17,"column":19}},{"start":{"line":17,"column":22},"end":{"line":17,"column":33}}],"line":17},"6":{"loc":{"start":{"line":18,"column":33},"end":{"line":20,"column":5}},"type":"binary-expr","locations":[{"start":{"line":18,"column":33},"end":{"line":18,"column":37}},{"start":{"line":18,"column":41},"end":{"line":20,"column":5}}],"line":18},"7":{"loc":{"start":{"line":21,"column":32},"end":{"line":23,"column":5}},"type":"binary-expr","locations":[{"start":{"line":21,"column":32},"end":{"line":21,"column":35}},{"start":{"line":21,"column":39},"end":{"line":23,"column":5}}],"line":21},"8":{"loc":{"start":{"line":26,"column":6},"end":{"line":34,"column":7}},"type":"if","locations":[{"start":{"line":26,"column":6},"end":{"line":34,"column":7}},{"start":{"line":26,"column":6},"end":{"line":34,"column":7}}],"line":26},"9":{"loc":{"start":{"line":39,"column":13},"end":{"line":39,"column":22}},"type":"default-arg","locations":[{"start":{"line":39,"column":21},"end":{"line":39,"column":22}}],"line":39},"10":{"loc":{"start":{"line":39,"column":24},"end":{"line":39,"column":34}},"type":"default-arg","locations":[{"start":{"line":39,"column":32},"end":{"line":39,"column":34}}],"line":39},"11":{"loc":{"start":{"line":39,"column":36},"end":{"line":39,"column":47}},"type":"default-arg","locations":[{"start":{"line":39,"column":43},"end":{"line":39,"column":47}}],"line":39},"12":{"loc":{"start":{"line":39,"column":49},"end":{"line":39,"column":60}},"type":"default-arg","locations":[{"start":{"line":39,"column":56},"end":{"line":39,"column":60}}],"line":39},"13":{"loc":{"start":{"line":39,"column":62},"end":{"line":39,"column":72}},"type":"default-arg","locations":[{"start":{"line":39,"column":68},"end":{"line":39,"column":72}}],"line":39},"14":{"loc":{"start":{"line":40,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":44,"column":5}},{"start":{"line":40,"column":4},"end":{"line":44,"column":5}}],"line":40},"15":{"loc":{"start":{"line":46,"column":4},"end":{"line":46,"column":33}},"type":"cond-expr","locations":[{"start":{"line":46,"column":15},"end":{"line":46,"column":19}},{"start":{"line":46,"column":22},"end":{"line":46,"column":33}}],"line":46},"16":{"loc":{"start":{"line":47,"column":33},"end":{"line":49,"column":5}},"type":"binary-expr","locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":37}},{"start":{"line":47,"column":41},"end":{"line":49,"column":5}}],"line":47},"17":{"loc":{"start":{"line":50,"column":32},"end":{"line":52,"column":5}},"type":"binary-expr","locations":[{"start":{"line":50,"column":32},"end":{"line":50,"column":35}},{"start":{"line":50,"column":39},"end":{"line":52,"column":5}}],"line":50},"18":{"loc":{"start":{"line":55,"column":6},"end":{"line":63,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":63,"column":7}},{"start":{"line":55,"column":6},"end":{"line":63,"column":7}}],"line":55}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":93,"6":90,"7":90,"8":3,"9":3,"10":4,"11":1,"12":1,"13":3,"14":3,"15":3,"16":3,"17":3,"18":76,"19":73,"20":73,"21":3,"22":3},"f":{"0":3,"1":60,"2":1,"3":93,"4":4,"5":60,"6":1,"7":76},"b":{"0":[1],"1":[2],"2":[1],"3":[1],"4":[3,0],"5":[3,0],"6":[3,1],"7":[3,1],"8":[90,3],"9":[1],"10":[1],"11":[3],"12":[1],"13":[1],"14":[1,3],"15":[3,0],"16":[3,1],"17":[3,1],"18":[73,3]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"0ed382106904adc6d9b914cf0e39aae671605da4"} | ||
| } |
| body, html { | ||
| margin:0; padding: 0; | ||
| height: 100%; | ||
| } | ||
| body { | ||
| font-family: Helvetica Neue, Helvetica, Arial; | ||
| font-size: 14px; | ||
| color:#333; | ||
| } | ||
| .small { font-size: 12px; } | ||
| *, *:after, *:before { | ||
| -webkit-box-sizing:border-box; | ||
| -moz-box-sizing:border-box; | ||
| box-sizing:border-box; | ||
| } | ||
| h1 { font-size: 20px; margin: 0;} | ||
| h2 { font-size: 14px; } | ||
| pre { | ||
| font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; | ||
| margin: 0; | ||
| padding: 0; | ||
| -moz-tab-size: 2; | ||
| -o-tab-size: 2; | ||
| tab-size: 2; | ||
| } | ||
| a { color:#0074D9; text-decoration:none; } | ||
| a:hover { text-decoration:underline; } | ||
| .strong { font-weight: bold; } | ||
| .space-top1 { padding: 10px 0 0 0; } | ||
| .pad2y { padding: 20px 0; } | ||
| .pad1y { padding: 10px 0; } | ||
| .pad2x { padding: 0 20px; } | ||
| .pad2 { padding: 20px; } | ||
| .pad1 { padding: 10px; } | ||
| .space-left2 { padding-left:55px; } | ||
| .space-right2 { padding-right:20px; } | ||
| .center { text-align:center; } | ||
| .clearfix { display:block; } | ||
| .clearfix:after { | ||
| content:''; | ||
| display:block; | ||
| height:0; | ||
| clear:both; | ||
| visibility:hidden; | ||
| } | ||
| .fl { float: left; } | ||
| @media only screen and (max-width:640px) { | ||
| .col3 { width:100%; max-width:100%; } | ||
| .hide-mobile { display:none!important; } | ||
| } | ||
| .quiet { | ||
| color: #7f7f7f; | ||
| color: rgba(0,0,0,0.5); | ||
| } | ||
| .quiet a { opacity: 0.7; } | ||
| .fraction { | ||
| font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; | ||
| font-size: 10px; | ||
| color: #555; | ||
| background: #E8E8E8; | ||
| padding: 4px 5px; | ||
| border-radius: 3px; | ||
| vertical-align: middle; | ||
| } | ||
| div.path a:link, div.path a:visited { color: #333; } | ||
| table.coverage { | ||
| border-collapse: collapse; | ||
| margin: 10px 0 0 0; | ||
| padding: 0; | ||
| } | ||
| table.coverage td { | ||
| margin: 0; | ||
| padding: 0; | ||
| vertical-align: top; | ||
| } | ||
| table.coverage td.line-count { | ||
| text-align: right; | ||
| padding: 0 5px 0 20px; | ||
| } | ||
| table.coverage td.line-coverage { | ||
| text-align: right; | ||
| padding-right: 10px; | ||
| min-width:20px; | ||
| } | ||
| table.coverage td span.cline-any { | ||
| display: inline-block; | ||
| padding: 0 5px; | ||
| width: 100%; | ||
| } | ||
| .missing-if-branch { | ||
| display: inline-block; | ||
| margin-right: 5px; | ||
| border-radius: 3px; | ||
| position: relative; | ||
| padding: 0 4px; | ||
| background: #333; | ||
| color: yellow; | ||
| } | ||
| .skip-if-branch { | ||
| display: none; | ||
| margin-right: 10px; | ||
| position: relative; | ||
| padding: 0 4px; | ||
| background: #ccc; | ||
| color: white; | ||
| } | ||
| .missing-if-branch .typ, .skip-if-branch .typ { | ||
| color: inherit !important; | ||
| } | ||
| .coverage-summary { | ||
| border-collapse: collapse; | ||
| width: 100%; | ||
| } | ||
| .coverage-summary tr { border-bottom: 1px solid #bbb; } | ||
| .keyline-all { border: 1px solid #ddd; } | ||
| .coverage-summary td, .coverage-summary th { padding: 10px; } | ||
| .coverage-summary tbody { border: 1px solid #bbb; } | ||
| .coverage-summary td { border-right: 1px solid #bbb; } | ||
| .coverage-summary td:last-child { border-right: none; } | ||
| .coverage-summary th { | ||
| text-align: left; | ||
| font-weight: normal; | ||
| white-space: nowrap; | ||
| } | ||
| .coverage-summary th.file { border-right: none !important; } | ||
| .coverage-summary th.pct { } | ||
| .coverage-summary th.pic, | ||
| .coverage-summary th.abs, | ||
| .coverage-summary td.pct, | ||
| .coverage-summary td.abs { text-align: right; } | ||
| .coverage-summary td.file { white-space: nowrap; } | ||
| .coverage-summary td.pic { min-width: 120px !important; } | ||
| .coverage-summary tfoot td { } | ||
| .coverage-summary .sorter { | ||
| height: 10px; | ||
| width: 7px; | ||
| display: inline-block; | ||
| margin-left: 0.5em; | ||
| background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; | ||
| } | ||
| .coverage-summary .sorted .sorter { | ||
| background-position: 0 -20px; | ||
| } | ||
| .coverage-summary .sorted-desc .sorter { | ||
| background-position: 0 -10px; | ||
| } | ||
| .status-line { height: 10px; } | ||
| /* yellow */ | ||
| .cbranch-no { background: yellow !important; color: #111; } | ||
| /* dark red */ | ||
| .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } | ||
| .low .chart { border:1px solid #C21F39 } | ||
| .highlighted, | ||
| .highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ | ||
| background: #C21F39 !important; | ||
| } | ||
| /* medium red */ | ||
| .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } | ||
| /* light red */ | ||
| .low, .cline-no { background:#FCE1E5 } | ||
| /* light green */ | ||
| .high, .cline-yes { background:rgb(230,245,208) } | ||
| /* medium green */ | ||
| .cstat-yes { background:rgb(161,215,106) } | ||
| /* dark green */ | ||
| .status-line.high, .high .cover-fill { background:rgb(77,146,33) } | ||
| .high .chart { border:1px solid rgb(77,146,33) } | ||
| /* dark yellow (gold) */ | ||
| .status-line.medium, .medium .cover-fill { background: #f9cd0b; } | ||
| .medium .chart { border:1px solid #f9cd0b; } | ||
| /* light yellow */ | ||
| .medium { background: #fff4c2; } | ||
| .cstat-skip { background: #ddd; color: #111; } | ||
| .fstat-skip { background: #ddd; color: #111 !important; } | ||
| .cbranch-skip { background: #ddd !important; color: #111; } | ||
| span.cline-neutral { background: #eaeaea; } | ||
| .coverage-summary td.empty { | ||
| opacity: .5; | ||
| padding-top: 4px; | ||
| padding-bottom: 4px; | ||
| line-height: 1; | ||
| color: #888; | ||
| } | ||
| .cover-fill, .cover-empty { | ||
| display:inline-block; | ||
| height: 12px; | ||
| } | ||
| .chart { | ||
| line-height: 0; | ||
| } | ||
| .cover-empty { | ||
| background: white; | ||
| } | ||
| .cover-full { | ||
| border-right: none !important; | ||
| } | ||
| pre.prettyprint { | ||
| border: none !important; | ||
| padding: 0 !important; | ||
| margin: 0 !important; | ||
| } | ||
| .com { color: #999 !important; } | ||
| .ignore-none { color: #999; font-weight: normal; } | ||
| .wrapper { | ||
| min-height: 100%; | ||
| height: auto !important; | ||
| height: 100%; | ||
| margin: 0 auto -48px; | ||
| } | ||
| .footer, .push { | ||
| height: 48px; | ||
| } |
| /* eslint-disable */ | ||
| var jumpToCode = (function init() { | ||
| // Classes of code we would like to highlight in the file view | ||
| var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; | ||
| // Elements to highlight in the file listing view | ||
| var fileListingElements = ['td.pct.low']; | ||
| // We don't want to select elements that are direct descendants of another match | ||
| var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` | ||
| // Selecter that finds elements on the page to which we can jump | ||
| var selector = | ||
| fileListingElements.join(', ') + | ||
| ', ' + | ||
| notSelector + | ||
| missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` | ||
| // The NodeList of matching elements | ||
| var missingCoverageElements = document.querySelectorAll(selector); | ||
| var currentIndex; | ||
| function toggleClass(index) { | ||
| missingCoverageElements | ||
| .item(currentIndex) | ||
| .classList.remove('highlighted'); | ||
| missingCoverageElements.item(index).classList.add('highlighted'); | ||
| } | ||
| function makeCurrent(index) { | ||
| toggleClass(index); | ||
| currentIndex = index; | ||
| missingCoverageElements.item(index).scrollIntoView({ | ||
| behavior: 'smooth', | ||
| block: 'center', | ||
| inline: 'center' | ||
| }); | ||
| } | ||
| function goToPrevious() { | ||
| var nextIndex = 0; | ||
| if (typeof currentIndex !== 'number' || currentIndex === 0) { | ||
| nextIndex = missingCoverageElements.length - 1; | ||
| } else if (missingCoverageElements.length > 1) { | ||
| nextIndex = currentIndex - 1; | ||
| } | ||
| makeCurrent(nextIndex); | ||
| } | ||
| function goToNext() { | ||
| var nextIndex = 0; | ||
| if ( | ||
| typeof currentIndex === 'number' && | ||
| currentIndex < missingCoverageElements.length - 1 | ||
| ) { | ||
| nextIndex = currentIndex + 1; | ||
| } | ||
| makeCurrent(nextIndex); | ||
| } | ||
| return function jump(event) { | ||
| switch (event.which) { | ||
| case 78: // n | ||
| case 74: // j | ||
| goToNext(); | ||
| break; | ||
| case 66: // b | ||
| case 75: // k | ||
| case 80: // p | ||
| goToPrevious(); | ||
| break; | ||
| } | ||
| }; | ||
| })(); | ||
| window.addEventListener('keydown', jumpToCode); |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for All files</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> | ||
| All files | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>39/39</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">90.24% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>37/41</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>10/10</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>39/39</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <div class="pad1"> | ||
| <table class="coverage-summary"> | ||
| <thead> | ||
| <tr> | ||
| <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> | ||
| <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> | ||
| <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> | ||
| <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> | ||
| <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> | ||
| <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> | ||
| <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| </tr> | ||
| </thead> | ||
| <tbody><tr> | ||
| <td class="file high" data-value="logCtrl"><a href="logCtrl/index.html">logCtrl</a></td> | ||
| <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="16" class="abs high">16/16</td> | ||
| <td data-value="91.67" class="pct high">91.67%</td> | ||
| <td data-value="12" class="abs high">11/12</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="2" class="abs high">2/2</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="16" class="abs high">16/16</td> | ||
| </tr> | ||
| <tr> | ||
| <td class="file high" data-value="timeCtrl"><a href="timeCtrl/index.html">timeCtrl</a></td> | ||
| <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="23" class="abs high">23/23</td> | ||
| <td data-value="89.66" class="pct high">89.66%</td> | ||
| <td data-value="29" class="abs high">26/29</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="8" class="abs high">8/8</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="23" class="abs high">23/23</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> | ||
| </div><div class='push'></div><!-- for sticky footer --> | ||
| </div><!-- /wrapper --> | ||
| <div class='footer quiet pad2 space-top1 center small'> | ||
| Code coverage | ||
| generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 15:45:48 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="sorter.js"></script> | ||
| <script src="block-navigation.js"></script> | ||
| </body> | ||
| </html> |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for logCtrl</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> logCtrl | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>16/16</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">91.67% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>11/12</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>2/2</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>16/16</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <div class="pad1"> | ||
| <table class="coverage-summary"> | ||
| <thead> | ||
| <tr> | ||
| <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> | ||
| <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> | ||
| <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> | ||
| <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> | ||
| <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> | ||
| <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> | ||
| <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| </tr> | ||
| </thead> | ||
| <tbody><tr> | ||
| <td class="file high" data-value="LogCtrl.ts"><a href="LogCtrl.ts.html">LogCtrl.ts</a></td> | ||
| <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="16" class="abs high">16/16</td> | ||
| <td data-value="91.67" class="pct high">91.67%</td> | ||
| <td data-value="12" class="abs high">11/12</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="2" class="abs high">2/2</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="16" class="abs high">16/16</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> | ||
| </div><div class='push'></div><!-- for sticky footer --> | ||
| </div><!-- /wrapper --> | ||
| <div class='footer quiet pad2 space-top1 center small'> | ||
| Code coverage | ||
| generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 15:45:48 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="../prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="../sorter.js"></script> | ||
| <script src="../block-navigation.js"></script> | ||
| </body> | ||
| </html> |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for logCtrl/LogCtrl.ts</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">logCtrl</a> LogCtrl.ts | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>16/16</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">91.67% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>11/12</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>2/2</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>16/16</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <pre><table class="coverage"> | ||
| <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> | ||
| <a name='L2'></a><a href='#L2'>2</a> | ||
| <a name='L3'></a><a href='#L3'>3</a> | ||
| <a name='L4'></a><a href='#L4'>4</a> | ||
| <a name='L5'></a><a href='#L5'>5</a> | ||
| <a name='L6'></a><a href='#L6'>6</a> | ||
| <a name='L7'></a><a href='#L7'>7</a> | ||
| <a name='L8'></a><a href='#L8'>8</a> | ||
| <a name='L9'></a><a href='#L9'>9</a> | ||
| <a name='L10'></a><a href='#L10'>10</a> | ||
| <a name='L11'></a><a href='#L11'>11</a> | ||
| <a name='L12'></a><a href='#L12'>12</a> | ||
| <a name='L13'></a><a href='#L13'>13</a> | ||
| <a name='L14'></a><a href='#L14'>14</a> | ||
| <a name='L15'></a><a href='#L15'>15</a> | ||
| <a name='L16'></a><a href='#L16'>16</a> | ||
| <a name='L17'></a><a href='#L17'>17</a> | ||
| <a name='L18'></a><a href='#L18'>18</a> | ||
| <a name='L19'></a><a href='#L19'>19</a> | ||
| <a name='L20'></a><a href='#L20'>20</a> | ||
| <a name='L21'></a><a href='#L21'>21</a> | ||
| <a name='L22'></a><a href='#L22'>22</a> | ||
| <a name='L23'></a><a href='#L23'>23</a> | ||
| <a name='L24'></a><a href='#L24'>24</a> | ||
| <a name='L25'></a><a href='#L25'>25</a> | ||
| <a name='L26'></a><a href='#L26'>26</a> | ||
| <a name='L27'></a><a href='#L27'>27</a> | ||
| <a name='L28'></a><a href='#L28'>28</a> | ||
| <a name='L29'></a><a href='#L29'>29</a> | ||
| <a name='L30'></a><a href='#L30'>30</a> | ||
| <a name='L31'></a><a href='#L31'>31</a> | ||
| <a name='L32'></a><a href='#L32'>32</a> | ||
| <a name='L33'></a><a href='#L33'>33</a> | ||
| <a name='L34'></a><a href='#L34'>34</a> | ||
| <a name='L35'></a><a href='#L35'>35</a> | ||
| <a name='L36'></a><a href='#L36'>36</a> | ||
| <a name='L37'></a><a href='#L37'>37</a> | ||
| <a name='L38'></a><a href='#L38'>38</a> | ||
| <a name='L39'></a><a href='#L39'>39</a> | ||
| <a name='L40'></a><a href='#L40'>40</a> | ||
| <a name='L41'></a><a href='#L41'>41</a> | ||
| <a name='L42'></a><a href='#L42'>42</a> | ||
| <a name='L43'></a><a href='#L43'>43</a> | ||
| <a name='L44'></a><a href='#L44'>44</a> | ||
| <a name='L45'></a><a href='#L45'>45</a> | ||
| <a name='L46'></a><a href='#L46'>46</a> | ||
| <a name='L47'></a><a href='#L47'>47</a> | ||
| <a name='L48'></a><a href='#L48'>48</a> | ||
| <a name='L49'></a><a href='#L49'>49</a> | ||
| <a name='L50'></a><a href='#L50'>50</a> | ||
| <a name='L51'></a><a href='#L51'>51</a> | ||
| <a name='L52'></a><a href='#L52'>52</a> | ||
| <a name='L53'></a><a href='#L53'>53</a> | ||
| <a name='L54'></a><a href='#L54'>54</a> | ||
| <a name='L55'></a><a href='#L55'>55</a> | ||
| <a name='L56'></a><a href='#L56'>56</a> | ||
| <a name='L57'></a><a href='#L57'>57</a> | ||
| <a name='L58'></a><a href='#L58'>58</a> | ||
| <a name='L59'></a><a href='#L59'>59</a> | ||
| <a name='L60'></a><a href='#L60'>60</a> | ||
| <a name='L61'></a><a href='#L61'>61</a> | ||
| <a name='L62'></a><a href='#L62'>62</a> | ||
| <a name='L63'></a><a href='#L63'>63</a> | ||
| <a name='L64'></a><a href='#L64'>64</a> | ||
| <a name='L65'></a><a href='#L65'>65</a> | ||
| <a name='L66'></a><a href='#L66'>66</a> | ||
| <a name='L67'></a><a href='#L67'>67</a> | ||
| <a name='L68'></a><a href='#L68'>68</a> | ||
| <a name='L69'></a><a href='#L69'>69</a> | ||
| <a name='L70'></a><a href='#L70'>70</a> | ||
| <a name='L71'></a><a href='#L71'>71</a> | ||
| <a name='L72'></a><a href='#L72'>72</a> | ||
| <a name='L73'></a><a href='#L73'>73</a> | ||
| <a name='L74'></a><a href='#L74'>74</a> | ||
| <a name='L75'></a><a href='#L75'>75</a> | ||
| <a name='L76'></a><a href='#L76'>76</a> | ||
| <a name='L77'></a><a href='#L77'>77</a></td><td class="line-coverage quiet"><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-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-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-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-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</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">3x</span> | ||
| <span class="cline-any cline-yes">2x</span> | ||
| <span class="cline-any cline-yes">2x</span> | ||
| <span class="cline-any cline-yes">2x</span> | ||
| <span class="cline-any cline-yes">2x</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-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">2x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">2x</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">1x</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-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">2x</span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</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-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-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">// this controller is about to provide functions for log controll | ||
| | ||
| import { dateUtil } from '@youngbeen/angle-util' | ||
| import '@youngbeen/ums-tracking' | ||
| | ||
| // 定义type | ||
| | ||
| // 定义shape | ||
| interface LogInfo { | ||
| msg: string | ||
| type: string | ||
| clientTime: string | number | Date | ||
| line: string | ||
| compName: string | ||
| funcName: string | ||
| attach: any, | ||
| [propName: string]: any | ||
| } | ||
| export interface LogRespond { | ||
| log: LogInfo, | ||
| logsLength: number | ||
| } | ||
| | ||
| let logs: Array<LogInfo> = [] // 日志信息 | ||
| const tagRandoms: number = Math.floor(Math.random() * 10e13) // 用于标识某访问的唯一标识符组成部分的随机数 | ||
| let tagTime: Date | number = new Date() | ||
| tagTime = tagTime.getTime() // 用于标识某访问的唯一标识符组成部分的时间戳 | ||
| | ||
| export default { | ||
| // 保存日志到历史记录 -- 信息内容,信息类型,[ 行数,所在组件名,所在函数名,附加信息 ] | ||
| saveLog (msg: string, type: string, line: string = '', compName: string = '', funcName: string = '', attach: any = ''): LogRespond { | ||
| if (msg && type) { | ||
| let now: Date | number | string = new Date() | ||
| now = now.getTime() | ||
| now = dateUtil.getDateTime(now) | ||
| let log = { | ||
| msg, | ||
| type, | ||
| clientTime: now, | ||
| compName, | ||
| funcName, | ||
| line, | ||
| attach | ||
| } | ||
| logs = [...logs, log] | ||
| | ||
| return { | ||
| log, | ||
| logsLength: logs.length | ||
| } | ||
| } else { | ||
| return { | ||
| log: null, | ||
| logsLength: logs.length | ||
| } | ||
| } | ||
| }, | ||
| | ||
| // 发送日志到日志系统 -- | ||
| sendLog (): void { | ||
| if (logs.length) { | ||
| const tag: string = `${tagTime}-${tagRandoms}` // 组成该次访问的唯一标识符,用于日志筛选匹配对应使用 | ||
| // 使用tracking方法发送日志 | ||
| <span class="missing-if-branch" title="else path not taken" >E</span>if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog') | ||
| } | ||
| // 使用图片发送日志 | ||
| // let url = `https://someurl?type=UMS_FELOG&content=LOGSTART>>${encodeURIComponent(JSON.stringify(content))}<<LOGEND` | ||
| // let oImage = new Image() | ||
| // oImage.src = url | ||
| // oImage = null | ||
| } | ||
| } | ||
| }</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="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 15:45:48 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="../prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="../sorter.js"></script> | ||
| <script src="../block-navigation.js"></script> | ||
| </body> | ||
| </html> |
| .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} |
| /* eslint-disable */ | ||
| window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); |
Sorry, the diff of this file is not supported yet
| /* eslint-disable */ | ||
| var addSorting = (function() { | ||
| 'use strict'; | ||
| var cols, | ||
| currentSort = { | ||
| index: 0, | ||
| desc: false | ||
| }; | ||
| // returns the summary table element | ||
| function getTable() { | ||
| return document.querySelector('.coverage-summary'); | ||
| } | ||
| // returns the thead element of the summary table | ||
| function getTableHeader() { | ||
| return getTable().querySelector('thead tr'); | ||
| } | ||
| // returns the tbody element of the summary table | ||
| function getTableBody() { | ||
| return getTable().querySelector('tbody'); | ||
| } | ||
| // returns the th element for nth column | ||
| function getNthColumn(n) { | ||
| return getTableHeader().querySelectorAll('th')[n]; | ||
| } | ||
| // loads all columns | ||
| function loadColumns() { | ||
| var colNodes = getTableHeader().querySelectorAll('th'), | ||
| colNode, | ||
| cols = [], | ||
| col, | ||
| i; | ||
| for (i = 0; i < colNodes.length; i += 1) { | ||
| colNode = colNodes[i]; | ||
| col = { | ||
| key: colNode.getAttribute('data-col'), | ||
| sortable: !colNode.getAttribute('data-nosort'), | ||
| type: colNode.getAttribute('data-type') || 'string' | ||
| }; | ||
| cols.push(col); | ||
| if (col.sortable) { | ||
| col.defaultDescSort = col.type === 'number'; | ||
| colNode.innerHTML = | ||
| colNode.innerHTML + '<span class="sorter"></span>'; | ||
| } | ||
| } | ||
| return cols; | ||
| } | ||
| // attaches a data attribute to every tr element with an object | ||
| // of data values keyed by column name | ||
| function loadRowData(tableRow) { | ||
| var tableCols = tableRow.querySelectorAll('td'), | ||
| colNode, | ||
| col, | ||
| data = {}, | ||
| i, | ||
| val; | ||
| for (i = 0; i < tableCols.length; i += 1) { | ||
| colNode = tableCols[i]; | ||
| col = cols[i]; | ||
| val = colNode.getAttribute('data-value'); | ||
| if (col.type === 'number') { | ||
| val = Number(val); | ||
| } | ||
| data[col.key] = val; | ||
| } | ||
| return data; | ||
| } | ||
| // loads all row data | ||
| function loadData() { | ||
| var rows = getTableBody().querySelectorAll('tr'), | ||
| i; | ||
| for (i = 0; i < rows.length; i += 1) { | ||
| rows[i].data = loadRowData(rows[i]); | ||
| } | ||
| } | ||
| // sorts the table using the data for the ith column | ||
| function sortByIndex(index, desc) { | ||
| var key = cols[index].key, | ||
| sorter = function(a, b) { | ||
| a = a.data[key]; | ||
| b = b.data[key]; | ||
| return a < b ? -1 : a > b ? 1 : 0; | ||
| }, | ||
| finalSorter = sorter, | ||
| tableBody = document.querySelector('.coverage-summary tbody'), | ||
| rowNodes = tableBody.querySelectorAll('tr'), | ||
| rows = [], | ||
| i; | ||
| if (desc) { | ||
| finalSorter = function(a, b) { | ||
| return -1 * sorter(a, b); | ||
| }; | ||
| } | ||
| for (i = 0; i < rowNodes.length; i += 1) { | ||
| rows.push(rowNodes[i]); | ||
| tableBody.removeChild(rowNodes[i]); | ||
| } | ||
| rows.sort(finalSorter); | ||
| for (i = 0; i < rows.length; i += 1) { | ||
| tableBody.appendChild(rows[i]); | ||
| } | ||
| } | ||
| // removes sort indicators for current column being sorted | ||
| function removeSortIndicators() { | ||
| var col = getNthColumn(currentSort.index), | ||
| cls = col.className; | ||
| cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); | ||
| col.className = cls; | ||
| } | ||
| // adds sort indicators for current column being sorted | ||
| function addSortIndicators() { | ||
| getNthColumn(currentSort.index).className += currentSort.desc | ||
| ? ' sorted-desc' | ||
| : ' sorted'; | ||
| } | ||
| // adds event listeners for all sorter widgets | ||
| function enableUI() { | ||
| var i, | ||
| el, | ||
| ithSorter = function ithSorter(i) { | ||
| var col = cols[i]; | ||
| return function() { | ||
| var desc = col.defaultDescSort; | ||
| if (currentSort.index === i) { | ||
| desc = !currentSort.desc; | ||
| } | ||
| sortByIndex(i, desc); | ||
| removeSortIndicators(); | ||
| currentSort.index = i; | ||
| currentSort.desc = desc; | ||
| addSortIndicators(); | ||
| }; | ||
| }; | ||
| for (i = 0; i < cols.length; i += 1) { | ||
| if (cols[i].sortable) { | ||
| // add the click event handler on the th so users | ||
| // dont have to click on those tiny arrows | ||
| el = getNthColumn(i).querySelector('.sorter').parentElement; | ||
| if (el.addEventListener) { | ||
| el.addEventListener('click', ithSorter(i)); | ||
| } else { | ||
| el.attachEvent('onclick', ithSorter(i)); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| // adds sorting functionality to the UI | ||
| return function() { | ||
| if (!getTable()) { | ||
| return; | ||
| } | ||
| cols = loadColumns(); | ||
| loadData(); | ||
| addSortIndicators(); | ||
| enableUI(); | ||
| }; | ||
| })(); | ||
| window.addEventListener('load', addSorting); |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for TimeCtrl.ts</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> TimeCtrl.ts | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">89.66% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>26/29</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>8/8</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <pre><table class="coverage"> | ||
| <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> | ||
| <a name='L2'></a><a href='#L2'>2</a> | ||
| <a name='L3'></a><a href='#L3'>3</a> | ||
| <a name='L4'></a><a href='#L4'>4</a> | ||
| <a name='L5'></a><a href='#L5'>5</a> | ||
| <a name='L6'></a><a href='#L6'>6</a> | ||
| <a name='L7'></a><a href='#L7'>7</a> | ||
| <a name='L8'></a><a href='#L8'>8</a> | ||
| <a name='L9'></a><a href='#L9'>9</a> | ||
| <a name='L10'></a><a href='#L10'>10</a> | ||
| <a name='L11'></a><a href='#L11'>11</a> | ||
| <a name='L12'></a><a href='#L12'>12</a> | ||
| <a name='L13'></a><a href='#L13'>13</a> | ||
| <a name='L14'></a><a href='#L14'>14</a> | ||
| <a name='L15'></a><a href='#L15'>15</a> | ||
| <a name='L16'></a><a href='#L16'>16</a> | ||
| <a name='L17'></a><a href='#L17'>17</a> | ||
| <a name='L18'></a><a href='#L18'>18</a> | ||
| <a name='L19'></a><a href='#L19'>19</a> | ||
| <a name='L20'></a><a href='#L20'>20</a> | ||
| <a name='L21'></a><a href='#L21'>21</a> | ||
| <a name='L22'></a><a href='#L22'>22</a> | ||
| <a name='L23'></a><a href='#L23'>23</a> | ||
| <a name='L24'></a><a href='#L24'>24</a> | ||
| <a name='L25'></a><a href='#L25'>25</a> | ||
| <a name='L26'></a><a href='#L26'>26</a> | ||
| <a name='L27'></a><a href='#L27'>27</a> | ||
| <a name='L28'></a><a href='#L28'>28</a> | ||
| <a name='L29'></a><a href='#L29'>29</a> | ||
| <a name='L30'></a><a href='#L30'>30</a> | ||
| <a name='L31'></a><a href='#L31'>31</a> | ||
| <a name='L32'></a><a href='#L32'>32</a> | ||
| <a name='L33'></a><a href='#L33'>33</a> | ||
| <a name='L34'></a><a href='#L34'>34</a> | ||
| <a name='L35'></a><a href='#L35'>35</a> | ||
| <a name='L36'></a><a href='#L36'>36</a> | ||
| <a name='L37'></a><a href='#L37'>37</a> | ||
| <a name='L38'></a><a href='#L38'>38</a> | ||
| <a name='L39'></a><a href='#L39'>39</a> | ||
| <a name='L40'></a><a href='#L40'>40</a> | ||
| <a name='L41'></a><a href='#L41'>41</a> | ||
| <a name='L42'></a><a href='#L42'>42</a> | ||
| <a name='L43'></a><a href='#L43'>43</a> | ||
| <a name='L44'></a><a href='#L44'>44</a> | ||
| <a name='L45'></a><a href='#L45'>45</a> | ||
| <a name='L46'></a><a href='#L46'>46</a> | ||
| <a name='L47'></a><a href='#L47'>47</a> | ||
| <a name='L48'></a><a href='#L48'>48</a> | ||
| <a name='L49'></a><a href='#L49'>49</a> | ||
| <a name='L50'></a><a href='#L50'>50</a> | ||
| <a name='L51'></a><a href='#L51'>51</a> | ||
| <a name='L52'></a><a href='#L52'>52</a> | ||
| <a name='L53'></a><a href='#L53'>53</a> | ||
| <a name='L54'></a><a href='#L54'>54</a> | ||
| <a name='L55'></a><a href='#L55'>55</a> | ||
| <a name='L56'></a><a href='#L56'>56</a> | ||
| <a name='L57'></a><a href='#L57'>57</a> | ||
| <a name='L58'></a><a href='#L58'>58</a> | ||
| <a name='L59'></a><a href='#L59'>59</a> | ||
| <a name='L60'></a><a href='#L60'>60</a> | ||
| <a name='L61'></a><a href='#L61'>61</a> | ||
| <a name='L62'></a><a href='#L62'>62</a> | ||
| <a name='L63'></a><a href='#L63'>63</a> | ||
| <a name='L64'></a><a href='#L64'>64</a> | ||
| <a name='L65'></a><a href='#L65'>65</a> | ||
| <a name='L66'></a><a href='#L66'>66</a> | ||
| <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><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-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-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">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</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">3x</span> | ||
| <span class="cline-any cline-yes">93x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">90x</span> | ||
| <span class="cline-any cline-yes">90x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</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-neutral"> </span> | ||
| <span class="cline-any cline-yes">4x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</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">3x</span> | ||
| <span class="cline-any cline-yes">76x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">73x</span> | ||
| <span class="cline-any cline-yes">73x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</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></td><td class="text"><pre class="prettyprint lang-js">// this controller is about to provide functions for time controll | ||
| | ||
| // 定义shape | ||
| export interface CallbackData { | ||
| leftCount?: number | ||
| count?: number | ||
| [propName: string]: any | ||
| } | ||
| | ||
| // 定义type | ||
| type Callback = (data: CallbackData) => any | ||
| | ||
| export default { | ||
| // auto counting down -- { [total], [step], [tick], [end] } | ||
| countDown ({ total = 60, step = 1000, tick = null, end = null }: { total: number, step: number, tick: Callback, end: Callback }): void { | ||
| total > 0 ? total : <span class="branch-1 cbranch-no" title="branch not covered" >total = 60</span> | ||
| step > 0 ? step : <span class="branch-1 cbranch-no" title="branch not covered" >step = 1000</span> | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.leftCount) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| | ||
| let tc: any = setInterval(function (): void { | ||
| if (total > 0) { | ||
| // time still left | ||
| tickCallback({ leftCount: total }) | ||
| total-- | ||
| } else { | ||
| // counts end | ||
| endCallback({ leftCount: total }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| }, | ||
| | ||
| // auto counting up -- { [start], [total], [step], [tick], [end] } | ||
| countUp ({ start = 0, total = 60, step = 1000, tick = null, end = null }: { start: number, total: number, step: number, tick: Callback, end: Callback }): void { | ||
| if (start > total) { | ||
| // invalid start , total setting | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)') | ||
| return | ||
| } | ||
| let now: number = start | ||
| step > 0 ? step : <span class="branch-1 cbranch-no" title="branch not covered" >step = 1000</span> | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.count) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| | ||
| let tc: any = setInterval(function (): void { | ||
| if (now < total) { | ||
| // count continue | ||
| tickCallback({ count: now }) | ||
| now++ | ||
| } else { | ||
| // counts end | ||
| endCallback({ count: now }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| } | ||
| } | ||
| </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="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 14:54:34 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="sorter.js"></script> | ||
| <script src="block-navigation.js"></script> | ||
| </body> | ||
| </html> |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for timeCtrl</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> timeCtrl | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">89.66% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>26/29</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>8/8</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <div class="pad1"> | ||
| <table class="coverage-summary"> | ||
| <thead> | ||
| <tr> | ||
| <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> | ||
| <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> | ||
| <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> | ||
| <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> | ||
| <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> | ||
| <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> | ||
| <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> | ||
| </tr> | ||
| </thead> | ||
| <tbody><tr> | ||
| <td class="file high" data-value="TimeCtrl.ts"><a href="TimeCtrl.ts.html">TimeCtrl.ts</a></td> | ||
| <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="23" class="abs high">23/23</td> | ||
| <td data-value="89.66" class="pct high">89.66%</td> | ||
| <td data-value="29" class="abs high">26/29</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="8" class="abs high">8/8</td> | ||
| <td data-value="100" class="pct high">100%</td> | ||
| <td data-value="23" class="abs high">23/23</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> | ||
| </div><div class='push'></div><!-- for sticky footer --> | ||
| </div><!-- /wrapper --> | ||
| <div class='footer quiet pad2 space-top1 center small'> | ||
| Code coverage | ||
| generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 15:45:48 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="../prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="../sorter.js"></script> | ||
| <script src="../block-navigation.js"></script> | ||
| </body> | ||
| </html> |
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <title>Code coverage report for timeCtrl/TimeCtrl.ts</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">timeCtrl</a> TimeCtrl.ts | ||
| </h1> | ||
| <div class='clearfix'> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Statements</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">89.66% </span> | ||
| <span class="quiet">Branches</span> | ||
| <span class='fraction'>26/29</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Functions</span> | ||
| <span class='fraction'>8/8</span> | ||
| </div> | ||
| <div class='fl pad1y space-right2'> | ||
| <span class="strong">100% </span> | ||
| <span class="quiet">Lines</span> | ||
| <span class='fraction'>23/23</span> | ||
| </div> | ||
| </div> | ||
| <p class="quiet"> | ||
| Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. | ||
| </p> | ||
| </div> | ||
| <div class='status-line high'></div> | ||
| <pre><table class="coverage"> | ||
| <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> | ||
| <a name='L2'></a><a href='#L2'>2</a> | ||
| <a name='L3'></a><a href='#L3'>3</a> | ||
| <a name='L4'></a><a href='#L4'>4</a> | ||
| <a name='L5'></a><a href='#L5'>5</a> | ||
| <a name='L6'></a><a href='#L6'>6</a> | ||
| <a name='L7'></a><a href='#L7'>7</a> | ||
| <a name='L8'></a><a href='#L8'>8</a> | ||
| <a name='L9'></a><a href='#L9'>9</a> | ||
| <a name='L10'></a><a href='#L10'>10</a> | ||
| <a name='L11'></a><a href='#L11'>11</a> | ||
| <a name='L12'></a><a href='#L12'>12</a> | ||
| <a name='L13'></a><a href='#L13'>13</a> | ||
| <a name='L14'></a><a href='#L14'>14</a> | ||
| <a name='L15'></a><a href='#L15'>15</a> | ||
| <a name='L16'></a><a href='#L16'>16</a> | ||
| <a name='L17'></a><a href='#L17'>17</a> | ||
| <a name='L18'></a><a href='#L18'>18</a> | ||
| <a name='L19'></a><a href='#L19'>19</a> | ||
| <a name='L20'></a><a href='#L20'>20</a> | ||
| <a name='L21'></a><a href='#L21'>21</a> | ||
| <a name='L22'></a><a href='#L22'>22</a> | ||
| <a name='L23'></a><a href='#L23'>23</a> | ||
| <a name='L24'></a><a href='#L24'>24</a> | ||
| <a name='L25'></a><a href='#L25'>25</a> | ||
| <a name='L26'></a><a href='#L26'>26</a> | ||
| <a name='L27'></a><a href='#L27'>27</a> | ||
| <a name='L28'></a><a href='#L28'>28</a> | ||
| <a name='L29'></a><a href='#L29'>29</a> | ||
| <a name='L30'></a><a href='#L30'>30</a> | ||
| <a name='L31'></a><a href='#L31'>31</a> | ||
| <a name='L32'></a><a href='#L32'>32</a> | ||
| <a name='L33'></a><a href='#L33'>33</a> | ||
| <a name='L34'></a><a href='#L34'>34</a> | ||
| <a name='L35'></a><a href='#L35'>35</a> | ||
| <a name='L36'></a><a href='#L36'>36</a> | ||
| <a name='L37'></a><a href='#L37'>37</a> | ||
| <a name='L38'></a><a href='#L38'>38</a> | ||
| <a name='L39'></a><a href='#L39'>39</a> | ||
| <a name='L40'></a><a href='#L40'>40</a> | ||
| <a name='L41'></a><a href='#L41'>41</a> | ||
| <a name='L42'></a><a href='#L42'>42</a> | ||
| <a name='L43'></a><a href='#L43'>43</a> | ||
| <a name='L44'></a><a href='#L44'>44</a> | ||
| <a name='L45'></a><a href='#L45'>45</a> | ||
| <a name='L46'></a><a href='#L46'>46</a> | ||
| <a name='L47'></a><a href='#L47'>47</a> | ||
| <a name='L48'></a><a href='#L48'>48</a> | ||
| <a name='L49'></a><a href='#L49'>49</a> | ||
| <a name='L50'></a><a href='#L50'>50</a> | ||
| <a name='L51'></a><a href='#L51'>51</a> | ||
| <a name='L52'></a><a href='#L52'>52</a> | ||
| <a name='L53'></a><a href='#L53'>53</a> | ||
| <a name='L54'></a><a href='#L54'>54</a> | ||
| <a name='L55'></a><a href='#L55'>55</a> | ||
| <a name='L56'></a><a href='#L56'>56</a> | ||
| <a name='L57'></a><a href='#L57'>57</a> | ||
| <a name='L58'></a><a href='#L58'>58</a> | ||
| <a name='L59'></a><a href='#L59'>59</a> | ||
| <a name='L60'></a><a href='#L60'>60</a> | ||
| <a name='L61'></a><a href='#L61'>61</a> | ||
| <a name='L62'></a><a href='#L62'>62</a> | ||
| <a name='L63'></a><a href='#L63'>63</a> | ||
| <a name='L64'></a><a href='#L64'>64</a> | ||
| <a name='L65'></a><a href='#L65'>65</a> | ||
| <a name='L66'></a><a href='#L66'>66</a> | ||
| <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><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-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-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">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</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">3x</span> | ||
| <span class="cline-any cline-yes">93x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">90x</span> | ||
| <span class="cline-any cline-yes">90x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</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-neutral"> </span> | ||
| <span class="cline-any cline-yes">4x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-yes">1x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</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">3x</span> | ||
| <span class="cline-any cline-yes">76x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">73x</span> | ||
| <span class="cline-any cline-yes">73x</span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-neutral"> </span> | ||
| <span class="cline-any cline-yes">3x</span> | ||
| <span class="cline-any cline-yes">3x</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></td><td class="text"><pre class="prettyprint lang-js">// this controller is about to provide functions for time controll | ||
| | ||
| // 定义shape | ||
| export interface CallbackData { | ||
| leftCount?: number | ||
| count?: number | ||
| [propName: string]: any | ||
| } | ||
| | ||
| // 定义type | ||
| type Callback = (data: CallbackData) => any | ||
| | ||
| export default { | ||
| // auto counting down -- { [total], [step], [tick], [end] } | ||
| countDown ({ total = 60, step = 1000, tick = null, end = null }: { total: number, step: number, tick: Callback, end: Callback }): void { | ||
| total > 0 ? total : <span class="branch-1 cbranch-no" title="branch not covered" >total = 60</span> | ||
| step > 0 ? step : <span class="branch-1 cbranch-no" title="branch not covered" >step = 1000</span> | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.leftCount) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| | ||
| let tc: any = setInterval(function (): void { | ||
| if (total > 0) { | ||
| // time still left | ||
| tickCallback({ leftCount: total }) | ||
| total-- | ||
| } else { | ||
| // counts end | ||
| endCallback({ leftCount: total }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| }, | ||
| | ||
| // auto counting up -- { [start], [total], [step], [tick], [end] } | ||
| countUp ({ start = 0, total = 60, step = 1000, tick = null, end = null }: { start: number, total: number, step: number, tick: Callback, end: Callback }): void { | ||
| if (start > total) { | ||
| // invalid start , total setting | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)') | ||
| return | ||
| } | ||
| let now: number = start | ||
| step > 0 ? step : <span class="branch-1 cbranch-no" title="branch not covered" >step = 1000</span> | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.count) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| | ||
| let tc: any = setInterval(function (): void { | ||
| if (now < total) { | ||
| // count continue | ||
| tickCallback({ count: now }) | ||
| now++ | ||
| } else { | ||
| // counts end | ||
| endCallback({ count: now }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| } | ||
| } | ||
| </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="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Jul 11 2019 15:45:48 GMT+0800 (GMT+08:00) | ||
| </div> | ||
| </div> | ||
| <script src="../prettify.js"></script> | ||
| <script> | ||
| window.onload = function () { | ||
| if (typeof prettyPrint === 'function') { | ||
| prettyPrint(); | ||
| } | ||
| }; | ||
| </script> | ||
| <script src="../sorter.js"></script> | ||
| <script src="../block-navigation.js"></script> | ||
| </body> | ||
| </html> |
Sorry, the diff of this file is not supported yet
| "use strict"; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports["default"] = void 0; | ||
| var _LogCtrl = _interopRequireDefault(require("../logCtrl/LogCtrl")); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
| var debug = 0; | ||
| var cheatCounts = 0; | ||
| var tcCheatDebug = null; | ||
| window.addEventListener('error', function (e) { | ||
| var lineno = e.lineno && e.lineno.toString() || ''; | ||
| var stack = e.error && e.error.stack || ''; | ||
| _LogCtrl["default"].saveLog(e.message || '', 'error', lineno, '', '', stack); | ||
| _LogCtrl["default"].sendLog(); | ||
| }, true); | ||
| var _default = { | ||
| log: function log() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments.length > 1 ? arguments[1] : undefined; | ||
| var isSave = false; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true; | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += "[line:".concat(line, "]"); | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += "[comp:".concat(compName, "]"); | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += "[func:".concat(funcName, "]"); | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.log(msg); | ||
| if (isSave) { | ||
| _LogCtrl["default"].saveLog(info, 'info', line, compName, funcName, attach); | ||
| } | ||
| if (debug > 1) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| warn: function warn() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments.length > 1 ? arguments[1] : undefined; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += "[line:".concat(line, "]"); | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += "[comp:".concat(compName, "]"); | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += "[func:".concat(funcName, "]"); | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl["default"].saveLog(info, 'warn', line, compName, funcName, attach); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| error: function error() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments.length > 1 ? arguments[1] : undefined; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += "[line:".concat(line, "]"); | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += "[comp:".concat(compName, "]"); | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += "[func:".concat(funcName, "]"); | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl["default"].saveLog(info, 'error', line, compName, funcName, attach); | ||
| _LogCtrl["default"].sendLog(); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| debugOn: function debugOn() { | ||
| var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; | ||
| debug = mode; | ||
| window.localStorage.debug = debug; | ||
| window.alert("debug\u6A21\u5F0F\u8C03\u6574\u4E3A".concat(mode === 2 ? '严格模式' : '开启')); | ||
| }, | ||
| debugOff: function debugOff() { | ||
| debug = 0; | ||
| window.localStorage.debug = debug; | ||
| window.alert("debug\u6A21\u5F0F\u8C03\u6574\u4E3A\u5173\u95ED"); | ||
| }, | ||
| cheatDebugClick: function cheatDebugClick(count) { | ||
| var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000; | ||
| var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; | ||
| cheatCounts++; | ||
| if (cheatCounts >= count) { | ||
| if (debug) { | ||
| debug = 0; | ||
| } else { | ||
| debug = mode; | ||
| } | ||
| window.localStorage.debug = debug; | ||
| window.alert("debug\u6A21\u5F0F\u8C03\u6574\u4E3A".concat(debug ? '开启' : '关闭')); | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| cheatCounts = 0; | ||
| } else { | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| tcCheatDebug = setTimeout(function () { | ||
| cheatCounts = 0; | ||
| clearTimeout(tcCheatDebug); | ||
| }, interval); | ||
| } | ||
| } | ||
| }; | ||
| exports["default"] = _default; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports["default"] = void 0; | ||
| var _angleUtil = require("@youngbeen/angle-util"); | ||
| require("@youngbeen/ums-tracking"); | ||
| function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } | ||
| function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } | ||
| function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
| function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } | ||
| var logs = []; | ||
| var tagRandoms = Math.floor(Math.random() * 10e13); | ||
| var tagTime = new Date(); | ||
| tagTime = tagTime.getTime(); | ||
| var _default = { | ||
| saveLog: function saveLog(msg, type) { | ||
| var line = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; | ||
| var compName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; | ||
| var funcName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; | ||
| var attach = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; | ||
| if (msg && type) { | ||
| var now = new Date(); | ||
| now = now.getTime(); | ||
| now = _angleUtil.dateUtil.getDateTime(now); | ||
| var log = { | ||
| msg: msg, | ||
| type: type, | ||
| clientTime: now, | ||
| compName: compName, | ||
| funcName: funcName, | ||
| line: line, | ||
| attach: attach | ||
| }; | ||
| logs = [].concat(_toConsumableArray(logs), [log]); | ||
| return { | ||
| log: log, | ||
| logsLength: logs.length | ||
| }; | ||
| } else { | ||
| return { | ||
| log: null, | ||
| logsLength: logs.length | ||
| }; | ||
| } | ||
| }, | ||
| sendLog: function sendLog() { | ||
| if (logs.length) { | ||
| var tag = "".concat(tagTime, "-").concat(tagRandoms); | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag: tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog'); | ||
| } | ||
| } | ||
| } | ||
| }; | ||
| exports["default"] = _default; |
| "use strict"; | ||
| var _LogCtrl = _interopRequireDefault(require("./LogCtrl.ts")); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
| // expect.extend({ | ||
| // arrayToHaveLength(array, length) { | ||
| // return { | ||
| // pass: array.length === length, | ||
| // message: () => '' | ||
| // } | ||
| // } | ||
| // }) | ||
| describe('saveLog(msg, type, line, compName, funcName, attach), sendLog()', function () { | ||
| test('save and send correct', function () { | ||
| var mockFn = window.tracking = jest.fn(); | ||
| _LogCtrl["default"].sendLog(); | ||
| expect(mockFn.mock.calls.length).toBe(0); | ||
| var data = _LogCtrl["default"].saveLog('test message 1', 'info', 21, 'CompSuper', 'sum', ''); | ||
| expect(data.logsLength).toBe(1); | ||
| expect(data.log).toEqual({ | ||
| msg: 'test message 1', | ||
| type: 'info', | ||
| clientTime: expect.anything(), | ||
| compName: 'CompSuper', | ||
| funcName: 'sum', | ||
| line: 21, | ||
| attach: '' | ||
| }); | ||
| data = _LogCtrl["default"].saveLog(); | ||
| expect(data.logsLength).toBe(1); | ||
| expect(data.log).toBeNull(); | ||
| data = _LogCtrl["default"].saveLog('test message 3', 'error', 24, 'CompSuper', 'sum'); | ||
| expect(data.logsLength).toBe(2); | ||
| expect(data.log).toEqual({ | ||
| msg: 'test message 3', | ||
| type: 'error', | ||
| clientTime: expect.anything(), | ||
| compName: 'CompSuper', | ||
| funcName: 'sum', | ||
| line: 24, | ||
| attach: '' | ||
| }); | ||
| _LogCtrl["default"].sendLog(); | ||
| expect(mockFn.mock.calls.length).toBe(1); | ||
| }); | ||
| }); |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports["default"] = void 0; | ||
| var _default = { | ||
| countDown: function countDown(_ref) { | ||
| var _ref$total = _ref.total, | ||
| total = _ref$total === void 0 ? 60 : _ref$total, | ||
| _ref$step = _ref.step, | ||
| step = _ref$step === void 0 ? 1000 : _ref$step, | ||
| _ref$tick = _ref.tick, | ||
| tick = _ref$tick === void 0 ? null : _ref$tick, | ||
| _ref$end = _ref.end, | ||
| end = _ref$end === void 0 ? null : _ref$end; | ||
| total > 0 ? total : total = 60; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (total > 0) { | ||
| tickCallback({ | ||
| leftCount: total | ||
| }); | ||
| total--; | ||
| } else { | ||
| endCallback({ | ||
| leftCount: total | ||
| }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| }, | ||
| countUp: function countUp(_ref2) { | ||
| var _ref2$start = _ref2.start, | ||
| start = _ref2$start === void 0 ? 0 : _ref2$start, | ||
| _ref2$total = _ref2.total, | ||
| total = _ref2$total === void 0 ? 60 : _ref2$total, | ||
| _ref2$step = _ref2.step, | ||
| step = _ref2$step === void 0 ? 1000 : _ref2$step, | ||
| _ref2$tick = _ref2.tick, | ||
| tick = _ref2$tick === void 0 ? null : _ref2$tick, | ||
| _ref2$end = _ref2.end, | ||
| end = _ref2$end === void 0 ? null : _ref2$end; | ||
| if (start > total) { | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)'); | ||
| return; | ||
| } | ||
| var now = start; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (now < total) { | ||
| tickCallback({ | ||
| count: now | ||
| }); | ||
| now++; | ||
| } else { | ||
| endCallback({ | ||
| count: now | ||
| }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| } | ||
| }; | ||
| exports["default"] = _default; |
| "use strict"; | ||
| var _TimeCtrl = _interopRequireDefault(require("./TimeCtrl.ts")); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
| // expect.extend({ | ||
| // arrayToHaveLength(array, length) { | ||
| // return { | ||
| // pass: array.length === length, | ||
| // message: () => '' | ||
| // } | ||
| // } | ||
| // }) | ||
| jest.useFakeTimers(); | ||
| describe('countDown({total, step, tick, end})', function () { | ||
| test('default params correct', function () { | ||
| _TimeCtrl["default"].countDown({}); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| }); | ||
| test('with specific total correct', function () { | ||
| var mockTickCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| var mockEndCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| _TimeCtrl["default"].countDown({ | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| jest.runAllTimers(); | ||
| expect(mockTickCallback.mock.calls.length).toBe(10); | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 10 | ||
| }); | ||
| expect(mockTickCallback.mock.results[9].value).toEqual({ | ||
| leftCount: 1 | ||
| }); | ||
| expect(mockEndCallback.mock.calls.length).toBe(1); | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 0 | ||
| }); | ||
| jest.clearAllTimers(); | ||
| }); | ||
| test('with specific step correct', function () { | ||
| var mockTickCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| var mockEndCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| _TimeCtrl["default"].countDown({ | ||
| total: 20, | ||
| step: 2000, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| jest.runAllTimers(); | ||
| expect(mockTickCallback.mock.calls.length).toBe(20); | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 20 | ||
| }); | ||
| expect(mockTickCallback.mock.results[19].value).toEqual({ | ||
| leftCount: 1 | ||
| }); | ||
| expect(mockEndCallback.mock.calls.length).toBe(1); | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 0 | ||
| }); | ||
| jest.clearAllTimers(); | ||
| }); | ||
| }); | ||
| describe('countUp({start, total, step, tick, end})', function () { | ||
| test('default params correct', function () { | ||
| _TimeCtrl["default"].countUp({}); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| }); | ||
| test('with specific start, total correct', function () { | ||
| var mockTickCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| var mockEndCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| _TimeCtrl["default"].countUp({ | ||
| start: 5, | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| jest.runAllTimers(); | ||
| expect(mockTickCallback.mock.calls.length).toBe(5); | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ | ||
| count: 5 | ||
| }); | ||
| expect(mockTickCallback.mock.results[4].value).toEqual({ | ||
| count: 9 | ||
| }); | ||
| expect(mockEndCallback.mock.calls.length).toBe(1); | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| count: 10 | ||
| }); | ||
| jest.clearAllTimers(); | ||
| }); | ||
| test('with specific step correct', function () { | ||
| var mockTickCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| var mockEndCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| _TimeCtrl["default"].countUp({ | ||
| start: 12, | ||
| total: 20, | ||
| step: 2000, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| jest.runAllTimers(); | ||
| expect(mockTickCallback.mock.calls.length).toBe(8); | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ | ||
| count: 12 | ||
| }); | ||
| expect(mockTickCallback.mock.results[7].value).toEqual({ | ||
| count: 19 | ||
| }); | ||
| expect(mockEndCallback.mock.calls.length).toBe(1); | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| count: 20 | ||
| }); | ||
| jest.clearAllTimers(); | ||
| }); | ||
| test('with invalid params correct', function () { | ||
| var mockTickCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| var mockEndCallback = jest.fn(function (data) { | ||
| return data; | ||
| }); | ||
| _TimeCtrl["default"].countUp({ | ||
| start: 12, | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }); | ||
| expect(setInterval).toHaveBeenCalled(); | ||
| jest.runAllTimers(); | ||
| expect(mockTickCallback.mock.calls.length).toBe(0); | ||
| jest.clearAllTimers(); | ||
| }); | ||
| }); |
| module.exports = { | ||
| collectCoverage: true, | ||
| // collectCoverageFrom: [ | ||
| // "**/*.{js,jsx,ts}", | ||
| // "!**/node_modules/**", | ||
| // "!**/vendor/**" | ||
| // ], | ||
| // notify: true, | ||
| verbose: true | ||
| } |
| export interface LogParams { | ||
| isSave?: boolean; | ||
| line?: string | number; | ||
| compName?: string; | ||
| funcName?: string; | ||
| attach?: any; | ||
| [propName: string]: any; | ||
| } | ||
| declare type DebugType = 0 | 1 | 2; | ||
| declare const _default: { | ||
| log(info?: string, params?: LogParams): void; | ||
| warn(info?: string, params?: LogParams): void; | ||
| error(info?: string, params?: LogParams): void; | ||
| debugOn(mode?: DebugType): void; | ||
| debugOff(): void; | ||
| cheatDebugClick(count: number, interval?: number, mode?: DebugType): void; | ||
| }; | ||
| export default _default; |
| import logCtrl from '../logCtrl/LogCtrl'; | ||
| let debug = 0; | ||
| let cheatCounts = 0; | ||
| let tcCheatDebug = null; | ||
| window.addEventListener('error', (e) => { | ||
| let lineno = e.lineno && e.lineno.toString() || ''; | ||
| let stack = e.error && e.error.stack || ''; | ||
| logCtrl.saveLog(e.message || '', 'error', lineno, '', '', stack); | ||
| logCtrl.sendLog(); | ||
| }, true); | ||
| export default { | ||
| log(info = '', params) { | ||
| let isSave = false; | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true; | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.log(msg); | ||
| if (isSave) { | ||
| logCtrl.saveLog(info, 'info', line, compName, funcName, attach); | ||
| } | ||
| if (debug > 1) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| warn(info = '', params) { | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| logCtrl.saveLog(info, 'warn', line, compName, funcName, attach); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| error(info = '', params) { | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| logCtrl.saveLog(info, 'error', line, compName, funcName, attach); | ||
| logCtrl.sendLog(); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| debugOn(mode = 1) { | ||
| debug = mode; | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为${mode === 2 ? '严格模式' : '开启'}`); | ||
| }, | ||
| debugOff() { | ||
| debug = 0; | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为关闭`); | ||
| }, | ||
| cheatDebugClick(count, interval = 1000, mode = 1) { | ||
| cheatCounts++; | ||
| if (cheatCounts >= count) { | ||
| if (debug) { | ||
| debug = 0; | ||
| } | ||
| else { | ||
| debug = mode; | ||
| } | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为${debug ? '开启' : '关闭'}`); | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| cheatCounts = 0; | ||
| } | ||
| else { | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| tcCheatDebug = setTimeout(() => { | ||
| cheatCounts = 0; | ||
| clearTimeout(tcCheatDebug); | ||
| }, interval); | ||
| } | ||
| } | ||
| }; |
| // this controller is about to provide functions for debugging controll | ||
| import logCtrl from '../logCtrl/LogCtrl' | ||
| let debug: DebugType = 0 // debug模式 | ||
| let cheatCounts: number = 0 // cheat debug点击的累计次数 | ||
| let tcCheatDebug: any = null // cheat debug time ctrl | ||
| // 定义shape | ||
| export interface LogParams { | ||
| isSave?: boolean // 是否记录到log中 | ||
| line?: string | number // 行数 | ||
| compName?: string // 所在组件名 | ||
| funcName?: string // 所在函数名 | ||
| attach?: any // 附加信息 | ||
| [propName: string]: any | ||
| } | ||
| // 定义type | ||
| type DebugType = 0 | 1 | 2 // 0 - 关闭debug,1 - 初级debug(仅alert警告和错误), 2 - 严格debug(alert所有信息) | ||
| // 侦听error | ||
| window.addEventListener('error', (e: any): void => { | ||
| let lineno: string = e.lineno && e.lineno.toString() || '' | ||
| let stack: any = e.error && e.error.stack || '' | ||
| logCtrl.saveLog(e.message || '', 'error', lineno, '', '', stack) | ||
| logCtrl.sendLog() | ||
| }, true) | ||
| export default { | ||
| // system log -- 信息,[ 是否记录到log中,所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: log方法默认不会记录到日志中 | ||
| log (info: string = '', params?: LogParams): void { | ||
| let isSave: boolean = false | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.log(msg) | ||
| if (isSave) { | ||
| logCtrl.saveLog(info, 'info', line, compName, funcName, attach) | ||
| } | ||
| if (debug > 1) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // system warn -- 信息,[ 所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: warn方法只自动记录日志,不主动发送到后台 | ||
| warn (info: string = '', params?: LogParams): void { | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.warn(msg) | ||
| logCtrl.saveLog(info, 'warn', line, compName, funcName, attach) | ||
| if (debug) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // system error -- 信息,[ 所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: error方法会自动记录,并自动发送到后台 | ||
| error (info: string = '', params?: LogParams): void { | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.warn(msg) | ||
| logCtrl.saveLog(info, 'error', line, compName, funcName, attach) | ||
| // 发生错误,立即发送信息到日志系统 | ||
| logCtrl.sendLog() | ||
| if (debug) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // // freeze background scroll | ||
| // freezeBgScroll() { | ||
| // System.isFreezeBgScroll = true | ||
| // // to be robust, we should add no-scroll in html and body tag as well | ||
| // $('html').addClass('no-scroll') | ||
| // $('body').addClass('no-scroll') | ||
| // }, | ||
| // // resume background scroll | ||
| // resumeBgScroll() { | ||
| // System.isFreezeBgScroll = false | ||
| // $('html').removeClass('no-scroll') | ||
| // $('body').removeClass('no-scroll') | ||
| // }, | ||
| // open debug mode -- [mode = 1 | 2] | ||
| debugOn (mode: DebugType = 1): void { | ||
| debug = mode | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为${mode === 2 ? '严格模式' : '开启'}`) | ||
| }, | ||
| debugOff (): void { | ||
| debug = 0 | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为关闭`) | ||
| }, | ||
| // open debugging mode cheat -- trigger click counts, [interval], [mode] | ||
| cheatDebugClick (count: number, interval: number = 1000, mode: DebugType = 1): void { | ||
| cheatCounts++ | ||
| if (cheatCounts >= count) { | ||
| // 切换 cheat debug | ||
| if (debug) { | ||
| debug = 0 | ||
| } else { | ||
| debug = mode | ||
| } | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为${debug ? '开启': '关闭'}`) | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug) | ||
| } | ||
| cheatCounts = 0 | ||
| } else { | ||
| // if (System.cheatCounts >= 2) window.alert(111) | ||
| // 还未达到cheat debug条件 | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug) | ||
| } | ||
| tcCheatDebug = setTimeout(() => { | ||
| // 规定时间内没有重复操作,清除所有参数 | ||
| cheatCounts = 0 | ||
| clearTimeout(tcCheatDebug) | ||
| }, interval) | ||
| } | ||
| } | ||
| // // open debugging mode cheat by maze clicking -- click index | ||
| // cheatMazeDebug(index) { | ||
| // // 设定maze cheat需要判定的个数 | ||
| // console.log('进入maze check') | ||
| // const mazeCount = 3 | ||
| // System.cheatMazeMap.push(index) | ||
| // let flag = true | ||
| // for (let i = 0; i < System.cheatMazeMap.length; i++) { | ||
| // if (System.cheatMazeMap[i] !== (i + 1)) { | ||
| // flag = false | ||
| // break | ||
| // } | ||
| // } | ||
| // if (!flag) { | ||
| // // 存在非法的maze code | ||
| // console.log('非法 maze code') | ||
| // System.cheatMazeMap = [] | ||
| // } else { | ||
| // // 全部是合法的code | ||
| // if (System.cheatMazeMap.length === mazeCount) { | ||
| // // 输入的maze code已经达到标准 | ||
| // System.cheatMazeMap = [] | ||
| // System.debug = !System.debug | ||
| // localStorage.debug = System.debug | ||
| // window.alert('debug模式调整为' + System.debug) | ||
| // } else { | ||
| // // 输入的maze code还不到标准 | ||
| // // do nothing | ||
| // console.log('maze code 正确,继续加油') | ||
| // } | ||
| // } | ||
| // } | ||
| } |
| import '@youngbeen/ums-tracking'; | ||
| interface LogInfo { | ||
| msg: string; | ||
| type: string; | ||
| clientTime: string | number | Date; | ||
| line: string; | ||
| compName: string; | ||
| funcName: string; | ||
| attach: any; | ||
| [propName: string]: any; | ||
| } | ||
| export interface LogRespond { | ||
| log: LogInfo; | ||
| logsLength: number; | ||
| } | ||
| declare const _default: { | ||
| saveLog(msg: string, type: string, line?: string, compName?: string, funcName?: string, attach?: any): LogRespond; | ||
| sendLog(): void; | ||
| }; | ||
| export default _default; |
| import { dateUtil } from '@youngbeen/angle-util'; | ||
| import '@youngbeen/ums-tracking'; | ||
| let logs = []; | ||
| const tagRandoms = Math.floor(Math.random() * 10e13); | ||
| let tagTime = new Date(); | ||
| tagTime = tagTime.getTime(); | ||
| export default { | ||
| saveLog(msg, type, line = '', compName = '', funcName = '', attach = '') { | ||
| if (msg && type) { | ||
| let now = new Date(); | ||
| now = now.getTime(); | ||
| now = dateUtil.getDateTime(now); | ||
| let log = { | ||
| msg, | ||
| type, | ||
| clientTime: now, | ||
| compName, | ||
| funcName, | ||
| line, | ||
| attach | ||
| }; | ||
| logs = [...logs, log]; | ||
| return { | ||
| log, | ||
| logsLength: logs.length | ||
| }; | ||
| } | ||
| else { | ||
| return { | ||
| log: null, | ||
| logsLength: logs.length | ||
| }; | ||
| } | ||
| }, | ||
| sendLog() { | ||
| if (logs.length) { | ||
| const tag = `${tagTime}-${tagRandoms}`; | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog'); | ||
| } | ||
| } | ||
| } | ||
| }; |
| import logCtrl from './LogCtrl.ts' | ||
| // expect.extend({ | ||
| // arrayToHaveLength(array, length) { | ||
| // return { | ||
| // pass: array.length === length, | ||
| // message: () => '' | ||
| // } | ||
| // } | ||
| // }) | ||
| describe('saveLog(msg, type, line, compName, funcName, attach), sendLog()', () => { | ||
| test('save and send correct', () => { | ||
| const mockFn = window.tracking = jest.fn() | ||
| logCtrl.sendLog() | ||
| expect(mockFn.mock.calls.length).toBe(0) | ||
| let data = logCtrl.saveLog('test message 1', 'info', 21, 'CompSuper', 'sum', '') | ||
| expect(data.logsLength).toBe(1) | ||
| expect(data.log).toEqual({ | ||
| msg: 'test message 1', | ||
| type: 'info', | ||
| clientTime: expect.anything(), | ||
| compName: 'CompSuper', | ||
| funcName: 'sum', | ||
| line: 21, | ||
| attach: '' | ||
| }) | ||
| data = logCtrl.saveLog() | ||
| expect(data.logsLength).toBe(1) | ||
| expect(data.log).toBeNull() | ||
| data = logCtrl.saveLog('test message 3', 'error', 24, 'CompSuper', 'sum') | ||
| expect(data.logsLength).toBe(2) | ||
| expect(data.log).toEqual({ | ||
| msg: 'test message 3', | ||
| type: 'error', | ||
| clientTime: expect.anything(), | ||
| compName: 'CompSuper', | ||
| funcName: 'sum', | ||
| line: 24, | ||
| attach: '' | ||
| }) | ||
| logCtrl.sendLog() | ||
| expect(mockFn.mock.calls.length).toBe(1) | ||
| }) | ||
| }) |
| // this controller is about to provide functions for log controll | ||
| import { dateUtil } from '@youngbeen/angle-util' | ||
| import '@youngbeen/ums-tracking' | ||
| // 定义type | ||
| // 定义shape | ||
| interface LogInfo { | ||
| msg: string | ||
| type: string | ||
| clientTime: string | number | Date | ||
| line: string | ||
| compName: string | ||
| funcName: string | ||
| attach: any, | ||
| [propName: string]: any | ||
| } | ||
| export interface LogRespond { | ||
| log: LogInfo, | ||
| logsLength: number | ||
| } | ||
| let logs: Array<LogInfo> = [] // 日志信息 | ||
| const tagRandoms: number = Math.floor(Math.random() * 10e13) // 用于标识某访问的唯一标识符组成部分的随机数 | ||
| let tagTime: Date | number = new Date() | ||
| tagTime = tagTime.getTime() // 用于标识某访问的唯一标识符组成部分的时间戳 | ||
| export default { | ||
| // 保存日志到历史记录 -- 信息内容,信息类型,[ 行数,所在组件名,所在函数名,附加信息 ] | ||
| saveLog (msg: string, type: string, line: string = '', compName: string = '', funcName: string = '', attach: any = ''): LogRespond { | ||
| if (msg && type) { | ||
| let now: Date | number | string = new Date() | ||
| now = now.getTime() | ||
| now = dateUtil.getDateTime(now) | ||
| let log = { | ||
| msg, | ||
| type, | ||
| clientTime: now, | ||
| compName, | ||
| funcName, | ||
| line, | ||
| attach | ||
| } | ||
| logs = [...logs, log] | ||
| return { | ||
| log, | ||
| logsLength: logs.length | ||
| } | ||
| } else { | ||
| return { | ||
| log: null, | ||
| logsLength: logs.length | ||
| } | ||
| } | ||
| }, | ||
| // 发送日志到日志系统 -- | ||
| sendLog (): void { | ||
| if (logs.length) { | ||
| const tag: string = `${tagTime}-${tagRandoms}` // 组成该次访问的唯一标识符,用于日志筛选匹配对应使用 | ||
| // 使用tracking方法发送日志 | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog') | ||
| } | ||
| // 使用图片发送日志 | ||
| // let url = `https://someurl?type=UMS_FELOG&content=LOGSTART>>${encodeURIComponent(JSON.stringify(content))}<<LOGEND` | ||
| // let oImage = new Image() | ||
| // oImage.src = url | ||
| // oImage = null | ||
| } | ||
| } | ||
| } |
| export interface CallbackData { | ||
| leftCount?: number; | ||
| count?: number; | ||
| [propName: string]: any; | ||
| } | ||
| declare type Callback = (data: CallbackData) => any; | ||
| declare const _default: { | ||
| countDown({ total, step, tick, end }: { | ||
| total: number; | ||
| step: number; | ||
| tick: Callback; | ||
| end: Callback; | ||
| }): void; | ||
| countUp({ start, total, step, tick, end }: { | ||
| start: number; | ||
| total: number; | ||
| step: number; | ||
| tick: Callback; | ||
| end: Callback; | ||
| }): void; | ||
| }; | ||
| export default _default; |
| export default { | ||
| countDown({ total = 60, step = 1000, tick = null, end = null }) { | ||
| total > 0 ? total : total = 60; | ||
| step > 0 ? step : step = 1000; | ||
| let tickCallback = tick || function () { | ||
| }; | ||
| let endCallback = end || function () { | ||
| }; | ||
| let tc = setInterval(function () { | ||
| if (total > 0) { | ||
| tickCallback({ leftCount: total }); | ||
| total--; | ||
| } | ||
| else { | ||
| endCallback({ leftCount: total }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| }, | ||
| countUp({ start = 0, total = 60, step = 1000, tick = null, end = null }) { | ||
| if (start > total) { | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)'); | ||
| return; | ||
| } | ||
| let now = start; | ||
| step > 0 ? step : step = 1000; | ||
| let tickCallback = tick || function () { | ||
| }; | ||
| let endCallback = end || function () { | ||
| }; | ||
| let tc = setInterval(function () { | ||
| if (now < total) { | ||
| tickCallback({ count: now }); | ||
| now++; | ||
| } | ||
| else { | ||
| endCallback({ count: now }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| } | ||
| }; |
| import timeCtrl from './TimeCtrl.ts' | ||
| // expect.extend({ | ||
| // arrayToHaveLength(array, length) { | ||
| // return { | ||
| // pass: array.length === length, | ||
| // message: () => '' | ||
| // } | ||
| // } | ||
| // }) | ||
| jest.useFakeTimers() | ||
| describe('countDown({total, step, tick, end})', () => { | ||
| test('default params correct', () => { | ||
| timeCtrl.countDown({}) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| }) | ||
| test('with specific total correct', () => { | ||
| const mockTickCallback = jest.fn(data => data) | ||
| const mockEndCallback = jest.fn(data => data) | ||
| timeCtrl.countDown({ | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| jest.runAllTimers() | ||
| expect(mockTickCallback.mock.calls.length).toBe(10) | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ leftCount: 10 }) | ||
| expect(mockTickCallback.mock.results[9].value).toEqual({ leftCount: 1 }) | ||
| expect(mockEndCallback.mock.calls.length).toBe(1) | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 0 | ||
| }) | ||
| jest.clearAllTimers() | ||
| }) | ||
| test('with specific step correct', () => { | ||
| const mockTickCallback = jest.fn(data => data) | ||
| const mockEndCallback = jest.fn(data => data) | ||
| timeCtrl.countDown({ | ||
| total: 20, | ||
| step: 2000, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| jest.runAllTimers() | ||
| expect(mockTickCallback.mock.calls.length).toBe(20) | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ leftCount: 20 }) | ||
| expect(mockTickCallback.mock.results[19].value).toEqual({ leftCount: 1 }) | ||
| expect(mockEndCallback.mock.calls.length).toBe(1) | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| leftCount: 0 | ||
| }) | ||
| jest.clearAllTimers() | ||
| }) | ||
| }) | ||
| describe('countUp({start, total, step, tick, end})', () => { | ||
| test('default params correct', () => { | ||
| timeCtrl.countUp({}) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| }) | ||
| test('with specific start, total correct', () => { | ||
| const mockTickCallback = jest.fn(data => data) | ||
| const mockEndCallback = jest.fn(data => data) | ||
| timeCtrl.countUp({ | ||
| start: 5, | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| jest.runAllTimers() | ||
| expect(mockTickCallback.mock.calls.length).toBe(5) | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ count: 5 }) | ||
| expect(mockTickCallback.mock.results[4].value).toEqual({ count: 9 }) | ||
| expect(mockEndCallback.mock.calls.length).toBe(1) | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| count: 10 | ||
| }) | ||
| jest.clearAllTimers() | ||
| }) | ||
| test('with specific step correct', () => { | ||
| const mockTickCallback = jest.fn(data => data) | ||
| const mockEndCallback = jest.fn(data => data) | ||
| timeCtrl.countUp({ | ||
| start: 12, | ||
| total: 20, | ||
| step: 2000, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| jest.runAllTimers() | ||
| expect(mockTickCallback.mock.calls.length).toBe(8) | ||
| expect(mockTickCallback.mock.results[0].value).toEqual({ count: 12 }) | ||
| expect(mockTickCallback.mock.results[7].value).toEqual({ count: 19 }) | ||
| expect(mockEndCallback.mock.calls.length).toBe(1) | ||
| expect(mockEndCallback.mock.results[0].value).toEqual({ | ||
| count: 20 | ||
| }) | ||
| jest.clearAllTimers() | ||
| }) | ||
| test('with invalid params correct', () => { | ||
| const mockTickCallback = jest.fn(data => data) | ||
| const mockEndCallback = jest.fn(data => data) | ||
| timeCtrl.countUp({ | ||
| start: 12, | ||
| total: 10, | ||
| tick: mockTickCallback, | ||
| end: mockEndCallback | ||
| }) | ||
| expect(setInterval).toHaveBeenCalled() | ||
| jest.runAllTimers() | ||
| expect(mockTickCallback.mock.calls.length).toBe(0) | ||
| jest.clearAllTimers() | ||
| }) | ||
| }) |
| // this controller is about to provide functions for time controll | ||
| // 定义shape | ||
| export interface CallbackData { | ||
| leftCount?: number | ||
| count?: number | ||
| [propName: string]: any | ||
| } | ||
| // 定义type | ||
| type Callback = (data: CallbackData) => any | ||
| export default { | ||
| // auto counting down -- { [total], [step], [tick], [end] } | ||
| countDown ({ total = 60, step = 1000, tick = null, end = null }: { total: number, step: number, tick: Callback, end: Callback }): void { | ||
| total > 0 ? total : total = 60 | ||
| step > 0 ? step : step = 1000 | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.leftCount) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| let tc: any = setInterval(function (): void { | ||
| if (total > 0) { | ||
| // time still left | ||
| tickCallback({ leftCount: total }) | ||
| total-- | ||
| } else { | ||
| // counts end | ||
| endCallback({ leftCount: total }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| }, | ||
| // auto counting up -- { [start], [total], [step], [tick], [end] } | ||
| countUp ({ start = 0, total = 60, step = 1000, tick = null, end = null }: { start: number, total: number, step: number, tick: Callback, end: Callback }): void { | ||
| if (start > total) { | ||
| // invalid start , total setting | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)') | ||
| return | ||
| } | ||
| let now: number = start | ||
| step > 0 ? step : step = 1000 | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.count) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| let tc: any = setInterval(function (): void { | ||
| if (now < total) { | ||
| // count continue | ||
| tickCallback({ count: now }) | ||
| now++ | ||
| } else { | ||
| // counts end | ||
| endCallback({ count: now }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| } | ||
| } |
+2
-1
| { | ||
| "presets": [ | ||
| "env" | ||
| "@babel/preset-env", | ||
| "@babel/preset-typescript" | ||
| ] | ||
| } |
+12
-15
@@ -1,2 +0,2 @@ | ||
| 'use strict'; | ||
| "use strict"; | ||
@@ -6,20 +6,17 @@ Object.defineProperty(exports, "__esModule", { | ||
| }); | ||
| exports.debugCtrl = exports.logCtrl = exports.timeCtrl = undefined; | ||
| exports.debugCtrl = exports.logCtrl = exports.timeCtrl = void 0; | ||
| var _TimeCtrl = require('./TimeCtrl'); | ||
| var _TimeCtrl = _interopRequireDefault(require("./timeCtrl/TimeCtrl")); | ||
| var _TimeCtrl2 = _interopRequireDefault(_TimeCtrl); | ||
| var _LogCtrl = _interopRequireDefault(require("./logCtrl/LogCtrl")); | ||
| var _LogCtrl = require('./LogCtrl'); | ||
| var _DebugCtrl = _interopRequireDefault(require("./debugCtrl/DebugCtrl")); | ||
| var _LogCtrl2 = _interopRequireDefault(_LogCtrl); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
| var _DebugCtrl = require('./DebugCtrl'); | ||
| var _DebugCtrl2 = _interopRequireDefault(_DebugCtrl); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
| var timeCtrl = exports.timeCtrl = _TimeCtrl2.default; | ||
| var logCtrl = exports.logCtrl = _LogCtrl2.default; | ||
| var debugCtrl = exports.debugCtrl = _DebugCtrl2.default; | ||
| var timeCtrl = _TimeCtrl["default"]; | ||
| exports.timeCtrl = timeCtrl; | ||
| var logCtrl = _LogCtrl["default"]; | ||
| exports.logCtrl = logCtrl; | ||
| var debugCtrl = _DebugCtrl["default"]; | ||
| exports.debugCtrl = debugCtrl; |
+8
-5
| { | ||
| "name": "@youngbeen/angle-ctrl", | ||
| "version": "1.1.13", | ||
| "version": "1.1.14", | ||
| "description": "The controllers used in angle-FE team", | ||
@@ -12,9 +12,12 @@ "main": "dist/index.js", | ||
| "devDependencies": { | ||
| "babel-cli": "^6.26.0", | ||
| "babel-preset-env": "^1.7.0" | ||
| "@babel/cli": "^7.4.4", | ||
| "@babel/core": "^7.4.5", | ||
| "@babel/preset-env": "^7.4.5", | ||
| "@babel/preset-typescript": "^7.3.3", | ||
| "babel-jest": "^24.8.0", | ||
| "jest": "^24.8.0" | ||
| }, | ||
| "scripts": { | ||
| "compile": "tsc && babel -d ./dist src/", | ||
| "prepare": "npm run compile", | ||
| "test": "echo \"Error: no test specified\" && exit 1" | ||
| "test": "jest src/" | ||
| }, | ||
@@ -21,0 +24,0 @@ "keywords": [ |
+2
-0
| ## [@youngbeen/angle-ctrl](https://www.npmjs.com/package/@youngbeen/angle-ctrl) | ||
| [TOC] | ||
| ### timeCtrl | ||
@@ -4,0 +6,0 @@ |
+8
-8
@@ -5,4 +5,4 @@ export declare const timeCtrl: { | ||
| step: number; | ||
| tick: (data: import("./TimeCtrl").CallbackData) => any; | ||
| end: (data: import("./TimeCtrl").CallbackData) => any; | ||
| tick: (data: import("./timeCtrl/TimeCtrl").CallbackData) => any; | ||
| end: (data: import("./timeCtrl/TimeCtrl").CallbackData) => any; | ||
| }): void; | ||
@@ -13,14 +13,14 @@ countUp({ start, total, step, tick, end }: { | ||
| step: number; | ||
| tick: (data: import("./TimeCtrl").CallbackData) => any; | ||
| end: (data: import("./TimeCtrl").CallbackData) => any; | ||
| tick: (data: import("./timeCtrl/TimeCtrl").CallbackData) => any; | ||
| end: (data: import("./timeCtrl/TimeCtrl").CallbackData) => any; | ||
| }): void; | ||
| }; | ||
| export declare const logCtrl: { | ||
| saveLog(msg: string, type: string, line?: string, compName?: string, funcName?: string, attach?: any): void; | ||
| saveLog(msg: string, type: string, line?: string, compName?: string, funcName?: string, attach?: any): import("./logCtrl/LogCtrl").LogRespond; | ||
| sendLog(): void; | ||
| }; | ||
| export declare const debugCtrl: { | ||
| log(info?: string, params?: import("./DebugCtrl").LogParams): void; | ||
| warn(info?: string, params?: import("./DebugCtrl").LogParams): void; | ||
| error(info?: string, params?: import("./DebugCtrl").LogParams): void; | ||
| log(info?: string, params?: import("./debugCtrl/DebugCtrl").LogParams): void; | ||
| warn(info?: string, params?: import("./debugCtrl/DebugCtrl").LogParams): void; | ||
| error(info?: string, params?: import("./debugCtrl/DebugCtrl").LogParams): void; | ||
| debugOn(mode?: 0 | 2 | 1): void; | ||
@@ -27,0 +27,0 @@ debugOff(): void; |
+3
-3
@@ -1,6 +0,6 @@ | ||
| import TimeCtrl from './TimeCtrl'; | ||
| import LogCtrl from './LogCtrl'; | ||
| import DebugCtrl from './DebugCtrl'; | ||
| import TimeCtrl from './timeCtrl/TimeCtrl'; | ||
| import LogCtrl from './logCtrl/LogCtrl'; | ||
| import DebugCtrl from './debugCtrl/DebugCtrl'; | ||
| export const timeCtrl = TimeCtrl; | ||
| export const logCtrl = LogCtrl; | ||
| export const debugCtrl = DebugCtrl; |
+3
-3
| // entry js | ||
| import TimeCtrl from './TimeCtrl' | ||
| import LogCtrl from './LogCtrl' | ||
| import DebugCtrl from './DebugCtrl' | ||
| import TimeCtrl from './timeCtrl/TimeCtrl' | ||
| import LogCtrl from './logCtrl/LogCtrl' | ||
| import DebugCtrl from './debugCtrl/DebugCtrl' | ||
@@ -6,0 +6,0 @@ export const timeCtrl = TimeCtrl |
| "use strict"; |
-163
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _LogCtrl = require('./LogCtrl'); | ||
| var _LogCtrl2 = _interopRequireDefault(_LogCtrl); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
| var debug = 0; | ||
| var cheatCounts = 0; | ||
| var tcCheatDebug = null; | ||
| window.addEventListener('error', function (e) { | ||
| _LogCtrl2.default.saveLog(e.message, 'error', e.lineno.toString(), '', '', e.error.stack); | ||
| _LogCtrl2.default.sendLog(); | ||
| }, true); | ||
| exports.default = { | ||
| log: function log() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var isSave = false; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true; | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.log(msg); | ||
| if (isSave) { | ||
| _LogCtrl2.default.saveLog(info, 'info', line, compName, funcName, attach); | ||
| } | ||
| if (debug > 1) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| warn: function warn() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl2.default.saveLog(info, 'warn', line, compName, funcName, attach); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| error: function error() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl2.default.saveLog(info, 'error', line, compName, funcName, attach); | ||
| _LogCtrl2.default.sendLog(); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| debugOn: function debugOn() { | ||
| var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; | ||
| debug = mode; | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A' + (mode === 2 ? '严格模式' : '开启')); | ||
| }, | ||
| debugOff: function debugOff() { | ||
| debug = 0; | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A\u5173\u95ED'); | ||
| }, | ||
| cheatDebugClick: function cheatDebugClick(count) { | ||
| var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000; | ||
| var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; | ||
| cheatCounts++; | ||
| if (cheatCounts >= count) { | ||
| if (debug) { | ||
| debug = 0; | ||
| } else { | ||
| debug = mode; | ||
| } | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A' + (debug ? '开启' : '关闭')); | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| cheatCounts = 0; | ||
| } else { | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| tcCheatDebug = setTimeout(function () { | ||
| cheatCounts = 0; | ||
| clearTimeout(tcCheatDebug); | ||
| }, interval); | ||
| } | ||
| } | ||
| }; |
| "use strict"; |
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _LogCtrl = require('./LogCtrl'); | ||
| var _LogCtrl2 = _interopRequireDefault(_LogCtrl); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
| var debug = 0; | ||
| var cheatCounts = 0; | ||
| var tcCheatDebug = null; | ||
| window.addEventListener('error', function (e) { | ||
| var lineno = e.lineno && e.lineno.toString() || ''; | ||
| var stack = e.error && e.error.stack || ''; | ||
| _LogCtrl2.default.saveLog(e.message || '', 'error', lineno, '', '', stack); | ||
| _LogCtrl2.default.sendLog(); | ||
| }, true); | ||
| exports.default = { | ||
| log: function log() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var isSave = false; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true; | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.log(msg); | ||
| if (isSave) { | ||
| _LogCtrl2.default.saveLog(info, 'info', line, compName, funcName, attach); | ||
| } | ||
| if (debug > 1) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| warn: function warn() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl2.default.saveLog(info, 'warn', line, compName, funcName, attach); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| error: function error() { | ||
| var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
| var params = arguments[1]; | ||
| var line = ''; | ||
| var compName = ''; | ||
| var funcName = ''; | ||
| var attach = ''; | ||
| var msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += '[line:' + line + ']'; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += '[comp:' + compName + ']'; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += '[func:' + funcName + ']'; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| _LogCtrl2.default.saveLog(info, 'error', line, compName, funcName, attach); | ||
| _LogCtrl2.default.sendLog(); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| debugOn: function debugOn() { | ||
| var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; | ||
| debug = mode; | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A' + (mode === 2 ? '严格模式' : '开启')); | ||
| }, | ||
| debugOff: function debugOff() { | ||
| debug = 0; | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A\u5173\u95ED'); | ||
| }, | ||
| cheatDebugClick: function cheatDebugClick(count) { | ||
| var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000; | ||
| var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; | ||
| cheatCounts++; | ||
| if (cheatCounts >= count) { | ||
| if (debug) { | ||
| debug = 0; | ||
| } else { | ||
| debug = mode; | ||
| } | ||
| window.localStorage.debug = debug; | ||
| window.alert('debug\u6A21\u5F0F\u8C03\u6574\u4E3A' + (debug ? '开启' : '关闭')); | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| cheatCounts = 0; | ||
| } else { | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| tcCheatDebug = setTimeout(function () { | ||
| cheatCounts = 0; | ||
| clearTimeout(tcCheatDebug); | ||
| }, interval); | ||
| } | ||
| } | ||
| }; |
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _angleUtil = require('@youngbeen/angle-util'); | ||
| require('@youngbeen/ums-tracking'); | ||
| function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
| var logs = []; | ||
| var tagRandoms = Math.floor(Math.random() * 10e13); | ||
| var tagTime = new Date(); | ||
| tagTime = tagTime.getTime(); | ||
| exports.default = { | ||
| saveLog: function saveLog(msg, type) { | ||
| var line = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; | ||
| var compName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; | ||
| var funcName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; | ||
| var attach = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; | ||
| if (msg && type) { | ||
| var now = new Date(); | ||
| now = now.getTime(); | ||
| now = _angleUtil.dateUtil.getDateTime(now); | ||
| logs = [].concat(_toConsumableArray(logs), [{ | ||
| msg: msg, | ||
| type: type, | ||
| clientTime: now, | ||
| compName: compName, | ||
| funcName: funcName, | ||
| line: line, | ||
| attach: attach | ||
| }]); | ||
| } | ||
| }, | ||
| sendLog: function sendLog() { | ||
| if (logs.length) { | ||
| var tag = tagTime + '-' + tagRandoms; | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag: tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog'); | ||
| } | ||
| } | ||
| } | ||
| }; |
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.default = { | ||
| countDown: function countDown(_ref) { | ||
| var _ref$total = _ref.total, | ||
| total = _ref$total === undefined ? 60 : _ref$total, | ||
| _ref$step = _ref.step, | ||
| step = _ref$step === undefined ? 1000 : _ref$step, | ||
| _ref$tick = _ref.tick, | ||
| tick = _ref$tick === undefined ? null : _ref$tick, | ||
| _ref$end = _ref.end, | ||
| end = _ref$end === undefined ? null : _ref$end; | ||
| total > 0 ? total : total = 60; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (total > 0) { | ||
| tickCallback({ leftCount: total }); | ||
| total--; | ||
| } else { | ||
| endCallback({ leftCount: total }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| }, | ||
| countUp: function countUp(_ref2) { | ||
| var _ref2$start = _ref2.start, | ||
| start = _ref2$start === undefined ? 0 : _ref2$start, | ||
| _ref2$total = _ref2.total, | ||
| total = _ref2$total === undefined ? 60 : _ref2$total, | ||
| _ref2$step = _ref2.step, | ||
| step = _ref2$step === undefined ? 1000 : _ref2$step, | ||
| _ref2$tick = _ref2.tick, | ||
| tick = _ref2$tick === undefined ? null : _ref2$tick, | ||
| _ref2$end = _ref2.end, | ||
| end = _ref2$end === undefined ? null : _ref2$end; | ||
| if (start > total) { | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)'); | ||
| return; | ||
| } | ||
| var now = start; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (now < total) { | ||
| tickCallback({ count: now }); | ||
| now++; | ||
| } else { | ||
| endCallback({ count: now }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| } | ||
| }; |
-24
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.debugCtrl = exports.logCtrl = exports.timeCtrl = undefined; | ||
| var _TimeCtrl = require('./TimeCtrl'); | ||
| var _TimeCtrl2 = _interopRequireDefault(_TimeCtrl); | ||
| var _LogCtrl = require('./LogCtrl'); | ||
| var _LogCtrl2 = _interopRequireDefault(_LogCtrl); | ||
| var _DebugCtrl = require('./DebugCtrl'); | ||
| var _DebugCtrl2 = _interopRequireDefault(_DebugCtrl); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
| var timeCtrl = exports.timeCtrl = _TimeCtrl2.default; | ||
| var logCtrl = exports.logCtrl = _LogCtrl2.default; | ||
| var debugCtrl = exports.debugCtrl = _DebugCtrl2.default; |
-50
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _angleUtil = require('@youngbeen/angle-util'); | ||
| require('@youngbeen/ums-tracking'); | ||
| function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
| var logs = []; | ||
| var tagRandoms = Math.floor(Math.random() * 10e13); | ||
| var tagTime = new Date(); | ||
| tagTime = tagTime.getTime(); | ||
| exports.default = { | ||
| saveLog: function saveLog(msg, type) { | ||
| var line = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; | ||
| var compName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; | ||
| var funcName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; | ||
| var attach = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; | ||
| if (msg && type) { | ||
| var now = new Date(); | ||
| now = now.getTime(); | ||
| now = _angleUtil.dateUtil.getDateTime(now); | ||
| logs = [].concat(_toConsumableArray(logs), [{ | ||
| msg: msg, | ||
| type: type, | ||
| clientTime: now, | ||
| compName: compName, | ||
| funcName: funcName, | ||
| line: line, | ||
| attach: attach | ||
| }]); | ||
| } | ||
| }, | ||
| sendLog: function sendLog() { | ||
| if (logs.length) { | ||
| var tag = tagTime + '-' + tagRandoms; | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag: tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog'); | ||
| } | ||
| } | ||
| } | ||
| }; |
| export interface LogParams { | ||
| isSave?: boolean; | ||
| line?: string | number; | ||
| compName?: string; | ||
| funcName?: string; | ||
| attach?: any; | ||
| [propName: string]: any; | ||
| } | ||
| declare type DebugType = 0 | 1 | 2; | ||
| declare const _default: { | ||
| log(info?: string, params?: LogParams): void; | ||
| warn(info?: string, params?: LogParams): void; | ||
| error(info?: string, params?: LogParams): void; | ||
| debugOn(mode?: DebugType): void; | ||
| debugOff(): void; | ||
| cheatDebugClick(count: number, interval?: number, mode?: DebugType): void; | ||
| }; | ||
| export default _default; |
-142
| import logCtrl from './LogCtrl'; | ||
| let debug = 0; | ||
| let cheatCounts = 0; | ||
| let tcCheatDebug = null; | ||
| window.addEventListener('error', (e) => { | ||
| let lineno = e.lineno && e.lineno.toString() || ''; | ||
| let stack = e.error && e.error.stack || ''; | ||
| logCtrl.saveLog(e.message || '', 'error', lineno, '', '', stack); | ||
| logCtrl.sendLog(); | ||
| }, true); | ||
| export default { | ||
| log(info = '', params) { | ||
| let isSave = false; | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true; | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.log(msg); | ||
| if (isSave) { | ||
| logCtrl.saveLog(info, 'info', line, compName, funcName, attach); | ||
| } | ||
| if (debug > 1) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| warn(info = '', params) { | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| logCtrl.saveLog(info, 'warn', line, compName, funcName, attach); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| error(info = '', params) { | ||
| let line = ''; | ||
| let compName = ''; | ||
| let funcName = ''; | ||
| let attach = ''; | ||
| let msg = info; | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString(); | ||
| msg += `[line:${line}]`; | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName; | ||
| msg += `[comp:${compName}]`; | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName; | ||
| msg += `[func:${funcName}]`; | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach; | ||
| } | ||
| } | ||
| console.warn(msg); | ||
| logCtrl.saveLog(info, 'error', line, compName, funcName, attach); | ||
| logCtrl.sendLog(); | ||
| if (debug) { | ||
| window.alert(msg); | ||
| } | ||
| }, | ||
| debugOn(mode = 1) { | ||
| debug = mode; | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为${mode === 2 ? '严格模式' : '开启'}`); | ||
| }, | ||
| debugOff() { | ||
| debug = 0; | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为关闭`); | ||
| }, | ||
| cheatDebugClick(count, interval = 1000, mode = 1) { | ||
| cheatCounts++; | ||
| if (cheatCounts >= count) { | ||
| if (debug) { | ||
| debug = 0; | ||
| } | ||
| else { | ||
| debug = mode; | ||
| } | ||
| window.localStorage.debug = debug; | ||
| window.alert(`debug模式调整为${debug ? '开启' : '关闭'}`); | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| cheatCounts = 0; | ||
| } | ||
| else { | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug); | ||
| } | ||
| tcCheatDebug = setTimeout(() => { | ||
| cheatCounts = 0; | ||
| clearTimeout(tcCheatDebug); | ||
| }, interval); | ||
| } | ||
| } | ||
| }; |
-236
| // this controller is about to provide functions for debugging controll | ||
| import logCtrl from './LogCtrl' | ||
| let debug: DebugType = 0 // debug模式 | ||
| let cheatCounts: number = 0 // cheat debug点击的累计次数 | ||
| let tcCheatDebug: any = null // cheat debug time ctrl | ||
| // 定义shape | ||
| export interface LogParams { | ||
| isSave?: boolean // 是否记录到log中 | ||
| line?: string | number // 行数 | ||
| compName?: string // 所在组件名 | ||
| funcName?: string // 所在函数名 | ||
| attach?: any // 附加信息 | ||
| [propName: string]: any | ||
| } | ||
| // 定义type | ||
| type DebugType = 0 | 1 | 2 // 0 - 关闭debug,1 - 初级debug(仅alert警告和错误), 2 - 严格debug(alert所有信息) | ||
| // 侦听error | ||
| window.addEventListener('error', (e: any): void => { | ||
| let lineno: string = e.lineno && e.lineno.toString() || '' | ||
| let stack: any = e.error && e.error.stack || '' | ||
| logCtrl.saveLog(e.message || '', 'error', lineno, '', '', stack) | ||
| logCtrl.sendLog() | ||
| }, true) | ||
| export default { | ||
| // system log -- 信息,[ 是否记录到log中,所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: log方法默认不会记录到日志中 | ||
| log (info: string = '', params?: LogParams): void { | ||
| let isSave: boolean = false | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.isSave) { | ||
| isSave = true | ||
| } | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.log(msg) | ||
| if (isSave) { | ||
| logCtrl.saveLog(info, 'info', line, compName, funcName, attach) | ||
| } | ||
| if (debug > 1) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // system warn -- 信息,[ 所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: warn方法只自动记录日志,不主动发送到后台 | ||
| warn (info: string = '', params?: LogParams): void { | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.warn(msg) | ||
| logCtrl.saveLog(info, 'warn', line, compName, funcName, attach) | ||
| if (debug) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // system error -- 信息,[ 所在组件名,所在函数名,行数,附加信息 ] | ||
| // NOTE: error方法会自动记录,并自动发送到后台 | ||
| error (info: string = '', params?: LogParams): void { | ||
| let line: string | number = '' | ||
| let compName: string = '' | ||
| let funcName: string = '' | ||
| let attach: any = '' | ||
| let msg: string = info | ||
| if (params) { | ||
| if (params.line) { | ||
| line = params.line.toString() | ||
| msg += `[line:${line}]` | ||
| } | ||
| if (params.compName) { | ||
| compName = params.compName | ||
| msg += `[comp:${compName}]` | ||
| } | ||
| if (params.funcName) { | ||
| funcName = params.funcName | ||
| msg += `[func:${funcName}]` | ||
| } | ||
| if (params.attach) { | ||
| attach = params.attach | ||
| } | ||
| } | ||
| console.warn(msg) | ||
| logCtrl.saveLog(info, 'error', line, compName, funcName, attach) | ||
| // 发生错误,立即发送信息到日志系统 | ||
| logCtrl.sendLog() | ||
| if (debug) { | ||
| // 调试模式打开,打开alert方式 | ||
| window.alert(msg) | ||
| } | ||
| }, | ||
| // // freeze background scroll | ||
| // freezeBgScroll() { | ||
| // System.isFreezeBgScroll = true | ||
| // // to be robust, we should add no-scroll in html and body tag as well | ||
| // $('html').addClass('no-scroll') | ||
| // $('body').addClass('no-scroll') | ||
| // }, | ||
| // // resume background scroll | ||
| // resumeBgScroll() { | ||
| // System.isFreezeBgScroll = false | ||
| // $('html').removeClass('no-scroll') | ||
| // $('body').removeClass('no-scroll') | ||
| // }, | ||
| // open debug mode -- [mode = 1 | 2] | ||
| debugOn (mode: DebugType = 1): void { | ||
| debug = mode | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为${mode === 2 ? '严格模式' : '开启'}`) | ||
| }, | ||
| debugOff (): void { | ||
| debug = 0 | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为关闭`) | ||
| }, | ||
| // open debugging mode cheat -- trigger click counts, [interval], [mode] | ||
| cheatDebugClick (count: number, interval: number = 1000, mode: DebugType = 1): void { | ||
| cheatCounts++ | ||
| if (cheatCounts >= count) { | ||
| // 切换 cheat debug | ||
| if (debug) { | ||
| debug = 0 | ||
| } else { | ||
| debug = mode | ||
| } | ||
| window.localStorage.debug = debug | ||
| window.alert(`debug模式调整为${debug ? '开启': '关闭'}`) | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug) | ||
| } | ||
| cheatCounts = 0 | ||
| } else { | ||
| // if (System.cheatCounts >= 2) window.alert(111) | ||
| // 还未达到cheat debug条件 | ||
| if (tcCheatDebug) { | ||
| clearTimeout(tcCheatDebug) | ||
| } | ||
| tcCheatDebug = setTimeout(() => { | ||
| // 规定时间内没有重复操作,清除所有参数 | ||
| cheatCounts = 0 | ||
| clearTimeout(tcCheatDebug) | ||
| }, interval) | ||
| } | ||
| } | ||
| // // open debugging mode cheat by maze clicking -- click index | ||
| // cheatMazeDebug(index) { | ||
| // // 设定maze cheat需要判定的个数 | ||
| // console.log('进入maze check') | ||
| // const mazeCount = 3 | ||
| // System.cheatMazeMap.push(index) | ||
| // let flag = true | ||
| // for (let i = 0; i < System.cheatMazeMap.length; i++) { | ||
| // if (System.cheatMazeMap[i] !== (i + 1)) { | ||
| // flag = false | ||
| // break | ||
| // } | ||
| // } | ||
| // if (!flag) { | ||
| // // 存在非法的maze code | ||
| // console.log('非法 maze code') | ||
| // System.cheatMazeMap = [] | ||
| // } else { | ||
| // // 全部是合法的code | ||
| // if (System.cheatMazeMap.length === mazeCount) { | ||
| // // 输入的maze code已经达到标准 | ||
| // System.cheatMazeMap = [] | ||
| // System.debug = !System.debug | ||
| // localStorage.debug = System.debug | ||
| // window.alert('debug模式调整为' + System.debug) | ||
| // } else { | ||
| // // 输入的maze code还不到标准 | ||
| // // do nothing | ||
| // console.log('maze code 正确,继续加油') | ||
| // } | ||
| // } | ||
| // } | ||
| } |
| import '@youngbeen/ums-tracking'; | ||
| declare const _default: { | ||
| saveLog(msg: string, type: string, line?: string, compName?: string, funcName?: string, attach?: any): void; | ||
| sendLog(): void; | ||
| }; | ||
| export default _default; |
| import { dateUtil } from '@youngbeen/angle-util'; | ||
| import '@youngbeen/ums-tracking'; | ||
| let logs = []; | ||
| const tagRandoms = Math.floor(Math.random() * 10e13); | ||
| let tagTime = new Date(); | ||
| tagTime = tagTime.getTime(); | ||
| export default { | ||
| saveLog(msg, type, line = '', compName = '', funcName = '', attach = '') { | ||
| if (msg && type) { | ||
| let now = new Date(); | ||
| now = now.getTime(); | ||
| now = dateUtil.getDateTime(now); | ||
| logs = [...logs, { | ||
| msg, | ||
| type, | ||
| clientTime: now, | ||
| compName, | ||
| funcName, | ||
| line, | ||
| attach | ||
| }]; | ||
| } | ||
| }, | ||
| sendLog() { | ||
| if (logs.length) { | ||
| const tag = `${tagTime}-${tagRandoms}`; | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog'); | ||
| } | ||
| } | ||
| } | ||
| }; |
| // this controller is about to provide functions for log controll | ||
| import { dateUtil } from '@youngbeen/angle-util' | ||
| import '@youngbeen/ums-tracking' | ||
| // 定义type | ||
| // 定义shape | ||
| interface LogInfo { | ||
| msg: string | ||
| type: string | ||
| clientTime: string | number | Date | ||
| line: string | ||
| compName: string | ||
| funcName: string | ||
| attach: any, | ||
| [propName: string]: any | ||
| } | ||
| let logs: Array<LogInfo> = [] // 日志信息 | ||
| const tagRandoms: number = Math.floor(Math.random() * 10e13) // 用于标识某访问的唯一标识符组成部分的随机数 | ||
| let tagTime: Date | number = new Date() | ||
| tagTime = tagTime.getTime() // 用于标识某访问的唯一标识符组成部分的时间戳 | ||
| export default { | ||
| // 保存日志到历史记录 -- 信息内容,信息类型,[ 行数,所在组件名,所在函数名,附加信息 ] | ||
| saveLog (msg: string, type: string, line: string = '', compName: string = '', funcName: string = '', attach: any = ''): void { | ||
| if (msg && type) { | ||
| let now: Date | number | string = new Date() | ||
| now = now.getTime() | ||
| now = dateUtil.getDateTime(now) | ||
| logs = [...logs, { | ||
| msg, | ||
| type, | ||
| clientTime: now, | ||
| compName, | ||
| funcName, | ||
| line, | ||
| attach | ||
| }] | ||
| } | ||
| }, | ||
| // 发送日志到日志系统 -- | ||
| sendLog (): void { | ||
| if (logs.length) { | ||
| const tag: string = `${tagTime}-${tagRandoms}` // 组成该次访问的唯一标识符,用于日志筛选匹配对应使用 | ||
| // 使用tracking方法发送日志 | ||
| if (tracking) { | ||
| tracking('UMS_FELOG_ERRORLOG', { | ||
| tag, | ||
| historyLogs: logs | ||
| }, 'fe_errorlog') | ||
| } | ||
| // 使用图片发送日志 | ||
| // let url = `https://someurl?type=UMS_FELOG&content=LOGSTART>>${encodeURIComponent(JSON.stringify(content))}<<LOGEND` | ||
| // let oImage = new Image() | ||
| // oImage.src = url | ||
| // oImage = null | ||
| } | ||
| } | ||
| } |
| export interface CallbackData { | ||
| leftCount?: number; | ||
| count?: number; | ||
| [propName: string]: any; | ||
| } | ||
| declare type Callback = (data: CallbackData) => any; | ||
| declare const _default: { | ||
| countDown({ total, step, tick, end }: { | ||
| total: number; | ||
| step: number; | ||
| tick: Callback; | ||
| end: Callback; | ||
| }): void; | ||
| countUp({ start, total, step, tick, end }: { | ||
| start: number; | ||
| total: number; | ||
| step: number; | ||
| tick: Callback; | ||
| end: Callback; | ||
| }): void; | ||
| }; | ||
| export default _default; |
| export default { | ||
| countDown({ total = 60, step = 1000, tick = null, end = null }) { | ||
| total > 0 ? total : total = 60; | ||
| step > 0 ? step : step = 1000; | ||
| let tickCallback = tick || function () { | ||
| }; | ||
| let endCallback = end || function () { | ||
| }; | ||
| let tc = setInterval(function () { | ||
| if (total > 0) { | ||
| tickCallback({ leftCount: total }); | ||
| total--; | ||
| } | ||
| else { | ||
| endCallback({ leftCount: total }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| }, | ||
| countUp({ start = 0, total = 60, step = 1000, tick = null, end = null }) { | ||
| if (start > total) { | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)'); | ||
| return; | ||
| } | ||
| let now = start; | ||
| step > 0 ? step : step = 1000; | ||
| let tickCallback = tick || function () { | ||
| }; | ||
| let endCallback = end || function () { | ||
| }; | ||
| let tc = setInterval(function () { | ||
| if (now < total) { | ||
| tickCallback({ count: now }); | ||
| now++; | ||
| } | ||
| else { | ||
| endCallback({ count: now }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| } | ||
| }; |
| // this controller is about to provide functions for time controll | ||
| // 定义shape | ||
| export interface CallbackData { | ||
| leftCount?: number | ||
| count?: number | ||
| [propName: string]: any | ||
| } | ||
| // 定义type | ||
| type Callback = (data: CallbackData) => any | ||
| export default { | ||
| // auto counting down -- { [total], [step], [tick], [end] } | ||
| countDown ({ total = 60, step = 1000, tick = null, end = null }: { total: number, step: number, tick: Callback, end: Callback }): void { | ||
| total > 0 ? total : total = 60 | ||
| step > 0 ? step : step = 1000 | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.leftCount) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| let tc: any = setInterval(function (): void { | ||
| if (total > 0) { | ||
| // time still left | ||
| tickCallback({ leftCount: total }) | ||
| total-- | ||
| } else { | ||
| // counts end | ||
| endCallback({ leftCount: total }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| }, | ||
| // auto counting up -- { [start], [total], [step], [tick], [end] } | ||
| countUp ({ start = 0, total = 60, step = 1000, tick = null, end = null }: { start: number, total: number, step: number, tick: Callback, end: Callback }): void { | ||
| if (start > total) { | ||
| // invalid start , total setting | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)') | ||
| return | ||
| } | ||
| let now: number = start | ||
| step > 0 ? step : step = 1000 | ||
| let tickCallback: Callback = tick || function (): void { | ||
| // console.log('tick', result.count) | ||
| } | ||
| let endCallback: Callback = end || function (): void { | ||
| // console.log('end the counting') | ||
| } | ||
| let tc: any = setInterval(function (): void { | ||
| if (now < total) { | ||
| // count continue | ||
| tickCallback({ count: now }) | ||
| now++ | ||
| } else { | ||
| // counts end | ||
| endCallback({ count: now }) | ||
| clearInterval(tc) | ||
| } | ||
| }, step) | ||
| } | ||
| } |
-61
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.default = { | ||
| countDown: function countDown(_ref) { | ||
| var _ref$total = _ref.total, | ||
| total = _ref$total === undefined ? 60 : _ref$total, | ||
| _ref$step = _ref.step, | ||
| step = _ref$step === undefined ? 1000 : _ref$step, | ||
| _ref$tick = _ref.tick, | ||
| tick = _ref$tick === undefined ? null : _ref$tick, | ||
| _ref$end = _ref.end, | ||
| end = _ref$end === undefined ? null : _ref$end; | ||
| total > 0 ? total : total = 60; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (total > 0) { | ||
| tickCallback({ leftCount: total }); | ||
| total--; | ||
| } else { | ||
| endCallback({ leftCount: total }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| }, | ||
| countUp: function countUp(_ref2) { | ||
| var _ref2$start = _ref2.start, | ||
| start = _ref2$start === undefined ? 0 : _ref2$start, | ||
| _ref2$total = _ref2.total, | ||
| total = _ref2$total === undefined ? 60 : _ref2$total, | ||
| _ref2$step = _ref2.step, | ||
| step = _ref2$step === undefined ? 1000 : _ref2$step, | ||
| _ref2$tick = _ref2.tick, | ||
| tick = _ref2$tick === undefined ? null : _ref2$tick, | ||
| _ref2$end = _ref2.end, | ||
| end = _ref2$end === undefined ? null : _ref2$end; | ||
| if (start > total) { | ||
| console.warn('Error: "start" should not large than "total" (countUp()@TimeCtrl)'); | ||
| return; | ||
| } | ||
| var now = start; | ||
| step > 0 ? step : step = 1000; | ||
| var tickCallback = tick || function () {}; | ||
| var endCallback = end || function () {}; | ||
| var tc = setInterval(function () { | ||
| if (now < total) { | ||
| tickCallback({ count: now }); | ||
| now++; | ||
| } else { | ||
| endCallback({ count: now }); | ||
| clearInterval(tc); | ||
| } | ||
| }, step); | ||
| } | ||
| }; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
141484
206.08%44
51.72%1908
60.47%211
0.96%6
200%1
Infinity%