tangning пре 1 година
родитељ
комит
630f4a85c5

+ 6 - 0
coverage/clover.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<coverage generated="1715156388799" clover="3.2.0">
+  <project timestamp="1715156388800" name="All files">
+    <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0" elements="0" coveredelements="0" complexity="0" loc="0" ncloc="0" packages="0" files="0" classes="0"/>
+  </project>
+</coverage>

+ 1 - 0
coverage/coverage-final.json

@@ -0,0 +1 @@
+{}

+ 224 - 0
coverage/lcov-report/base.css

@@ -0,0 +1,224 @@
+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;
+}

+ 82 - 0
coverage/lcov-report/block-navigation.js

@@ -0,0 +1,82 @@
+/* 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) {
+    if (
+      document.getElementById('fileSearch') === document.activeElement &&
+      document.activeElement != null
+    ) {
+      // if we're currently focused on the search input, we don't want to navigate
+      return;
+    }
+
+    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);

BIN
coverage/lcov-report/favicon.png


+ 101 - 0
coverage/lcov-report/index.html

@@ -0,0 +1,101 @@
+
+<!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" />
+    <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
+    <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">Unknown% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">Unknown% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">Unknown% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">Unknown% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>0/0</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>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input oninput="onInput()" type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line medium'></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></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" rel="noopener noreferrer">istanbul</a>
+                at Wed May 08 2024 16:19:48 GMT+0800 (中国标准时间)
+            </div>
+        <script src="prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="sorter.js"></script>
+        <script src="block-navigation.js"></script>
+    </body>
+</html>
+    

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
coverage/lcov-report/prettify.css


+ 937 - 0
coverage/lcov-report/prettify.js

@@ -0,0 +1,937 @@
+/* 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']);

BIN
coverage/lcov-report/sort-arrow-sprite.png


+ 189 - 0
coverage/lcov-report/sorter.js

@@ -0,0 +1,189 @@
+/* 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];
+  }
+
+  function onFilterInput() {
+    const searchValue = document.getElementById('fileSearch').value;
+    const rows = document.getElementsByTagName('tbody')[0].children;
+    for (let i = 0; i < rows.length; i++) {
+      const row = rows[i];
+      if (row.textContent.toLowerCase().includes(searchValue.toLowerCase())) {
+        row.style.display = '';
+      } else {
+        row.style.display = 'none';
+      }
+    }
+  }
+
+  // loads the search box
+  function addSearchBox() {
+    var template = document.getElementById('filterTemplate');
+    var templateClone = template.content.cloneNode(true);
+    templateClone.getElementById('fileSearch').oninput = onFilterInput;
+    template.parentElement.appendChild(templateClone);
+  }
+
+  // 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();
+    addSearchBox();
+    addSortIndicators();
+    enableUI();
+  };
+})();
+
+window.addEventListener('load', addSorting);

+ 0 - 0
coverage/lcov.info


+ 1 - 12
src/components/Icon/src/IconPicker.vue

@@ -31,18 +31,7 @@
                   v-for="icon in getPaginationList"
                   :key="icon"
                   :class="currentSelect === icon ? 'border border-primary' : ''"
-                  class="
-                    p-2
-                    w-1/8
-                    cursor-pointer
-                    mr-1
-                    mt-1
-                    flex
-                    justify-center
-                    items-center
-                    border border-solid
-                    hover:border-primary
-                  "
+                  class="p-2 w-1/8 cursor-pointer mr-1 mt-1 flex justify-center items-center border border-solid hover:border-primary"
                   @click="handleClick(icon)"
                   :title="icon"
                 >

+ 1 - 1
src/design/public.less

@@ -46,6 +46,6 @@
     width: 100%;
     height: 2px;
     background-color: @primary-color;
-    opacity: 75%;
+    opacity: 0.75;
   }
 }

+ 9 - 9
src/design/transition/fade.less

@@ -5,7 +5,7 @@
 
 .fade-enter-from,
 .fade-leave-to {
-  opacity: 0%;
+  opacity: 0;
 }
 
 /* fade-slide */
@@ -15,12 +15,12 @@
 }
 
 .fade-slide-enter-from {
-  opacity: 0%;
+  opacity: 0;
   transform: translateX(-30px);
 }
 
 .fade-slide-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: translateX(30px);
 }
 
@@ -35,12 +35,12 @@
 }
 
 .fade-bottom-enter-from {
-  opacity: 0%;
+  opacity: 0;
   transform: translateY(-10%);
 }
 
 .fade-bottom-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: translateY(10%);
 }
 
@@ -51,12 +51,12 @@
 }
 
 .fade-scale-enter-from {
-  opacity: 0%;
+  opacity: 0;
   transform: scale(1.2);
 }
 
 .fade-scale-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: scale(0.8);
 }
 
@@ -71,11 +71,11 @@
 }
 
 .fade-top-enter-from {
-  opacity: 0%;
+  opacity: 0;
   transform: translateY(8%);
 }
 
 .fade-top-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: translateY(-8%);
 }

+ 2 - 2
src/design/transition/scale.less

@@ -4,7 +4,7 @@
   &-enter-from,
   &-leave,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: scale(0);
   }
 }
@@ -15,7 +15,7 @@
   &-enter-from,
   &-leave,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: scale(0) rotate(-45deg);
   }
 }

+ 4 - 4
src/design/transition/scroll.less

@@ -3,7 +3,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
   }
 
   &-enter-from {
@@ -20,7 +20,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
   }
 
   &-enter-from {
@@ -37,7 +37,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
   }
 
   &-enter-from {
@@ -54,7 +54,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
   }
 
   &-enter-from {

+ 4 - 4
src/design/transition/slide.less

@@ -3,7 +3,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: translateY(-15px);
   }
 }
@@ -13,7 +13,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: translateY(15px);
   }
 }
@@ -23,7 +23,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: translateX(-15px);
   }
 }
@@ -33,7 +33,7 @@
 
   &-enter-from,
   &-leave-to {
-    opacity: 0%;
+    opacity: 0;
     transform: translateX(15px);
   }
 }

+ 3 - 3
src/design/transition/zoom.less

@@ -6,7 +6,7 @@
 
 .zoom-out-enter-from,
 .zoom-out-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: scale(0);
 }
 
@@ -17,11 +17,11 @@
 }
 
 .zoom-fade-enter-from {
-  opacity: 0%;
+  opacity: 0;
   transform: scale(0.92);
 }
 
 .zoom-fade-leave-to {
-  opacity: 0%;
+  opacity: 0;
   transform: scale(1.06);
 }

Разлика између датотеке није приказан због своје велике величине
+ 584 - 584
src/locales/lang/json/ja.json


Разлика између датотеке није приказан због своје велике величине
+ 601 - 589
src/locales/lang/json/zh-CN.json


+ 51 - 5
src/views/devices/AddModal.vue

@@ -48,7 +48,14 @@
           colProps: {
             span: 24,
           },
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.own.required'),
+            },
+          ],
           componentProps: {
+            placeholder: t('routes.devices.own.placeholder'),
             options: [0, 2, 1].map((ele) => {
               return { value: ele, key: ele, label: renderOwnTypeLabel(ele) };
             }),
@@ -59,11 +66,17 @@
           field: 'cameraType',
           component: 'Select',
           label: t('routes.devices.cameraType'),
-          required: true,
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.cameraType.required'),
+            },
+          ],
           colProps: {
             span: 24,
           },
           componentProps: {
+            placeholder: t('routes.devices.cameraType.placeholder'),
             options: [4, 9, 10, 11, 6].map((ele) => {
               return { value: ele, key: ele, label: rendercameraTypeLabel(ele) };
             }),
@@ -74,34 +87,67 @@
           field: 'childName',
           component: 'Input',
           label: t('routes.devices.childName'),
-          required: true,
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.childName.required'),
+            },
+          ],
           colProps: {
             span: 24,
           },
+          componentProps: {
+            placeholder: t('routes.devices.childName.placeholder'),
+          },
         },
         {
           field: 'wifiName',
           component: 'Input',
           label: t('routes.devices.wifiName'),
-          required: true,
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.wifiName.required'),
+            },
+          ],
           colProps: {
             span: 24,
           },
+          componentProps: {
+            placeholder: t('routes.devices.wifiName.placeholder'),
+          },
         },
         {
           field: 'address',
           component: 'Input',
-          required: true,
+          // required: true,
           label: t('routes.devices.address'),
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.address.required'),
+            },
+          ],
           colProps: {
             span: 24,
           },
+          componentProps: {
+            placeholder: t('routes.devices.address.placeholder'),
+          },
         },
         {
           field: 'snCode',
           component: 'Input',
           label: t('routes.devices.snCode'),
-          required: true,
+          rules: [
+            {
+              required: true,
+              message: t('routes.devices.snCode.required'),
+            },
+          ],
+          componentProps: {
+            placeholder: t('routes.devices.snCode.placeholder'),
+          },
           // ifShow: ({ model }) => {
           //   console.log('record', model.cameraType);
 

+ 1 - 17
src/views/sys/lock/LockPage.vue

@@ -5,23 +5,7 @@
   >
     <div
       :class="`${prefixCls}__unlock`"
-      class="
-        absolute
-        top-0
-        left-1/2
-        flex
-        pt-5
-        h-16
-        items-center
-        justify-center
-        sm:text-md
-        xl:text-xl
-        text-white
-        flex-col
-        cursor-pointer
-        transform
-        translate-x-1/2
-      "
+      class="absolute top-0 left-1/2 flex pt-5 h-16 items-center justify-center sm:text-md xl:text-xl text-white flex-col cursor-pointer transform translate-x-1/2"
       @click="handleShowForm(false)"
       v-show="showDate"
     >