Replace CDN React/ReactDOM/Babel with local libs; remove Babel and inline scripts Build Tailwind locally, add safelist; switch to assets/tailwind.css Self-host Font Awesome and Inter (CSS + woff2); remove external font CDNs Implement strict CSP (no unsafe-inline/eval; scripts/styles/fonts from self) Extract inline handlers; move PWA scripts to external files Add local QR code generation (qrcode lib) and remove api.qrserver.com Improve SessionTypeSelector visual selection (highlighted background and ring) Keep PWA working with service worker and offline assets Refs: CSP hardening, offline-first, no external dependencies
881 lines
34 KiB
HTML
881 lines
34 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>Code coverage report for bitmapper.js</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><a href="index.html">All files</a> bitmapper.js</h1>
|
|
<div class='clearfix'>
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">94.37% </span>
|
|
<span class="quiet">Statements</span>
|
|
<span class='fraction'>134/142</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">72.41% </span>
|
|
<span class="quiet">Branches</span>
|
|
<span class='fraction'>21/29</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">89.47% </span>
|
|
<span class="quiet">Functions</span>
|
|
<span class='fraction'>17/19</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">94.16% </span>
|
|
<span class="quiet">Lines</span>
|
|
<span class='fraction'>129/137</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>
|
|
<a name='L78'></a><a href='#L78'>78</a>
|
|
<a name='L79'></a><a href='#L79'>79</a>
|
|
<a name='L80'></a><a href='#L80'>80</a>
|
|
<a name='L81'></a><a href='#L81'>81</a>
|
|
<a name='L82'></a><a href='#L82'>82</a>
|
|
<a name='L83'></a><a href='#L83'>83</a>
|
|
<a name='L84'></a><a href='#L84'>84</a>
|
|
<a name='L85'></a><a href='#L85'>85</a>
|
|
<a name='L86'></a><a href='#L86'>86</a>
|
|
<a name='L87'></a><a href='#L87'>87</a>
|
|
<a name='L88'></a><a href='#L88'>88</a>
|
|
<a name='L89'></a><a href='#L89'>89</a>
|
|
<a name='L90'></a><a href='#L90'>90</a>
|
|
<a name='L91'></a><a href='#L91'>91</a>
|
|
<a name='L92'></a><a href='#L92'>92</a>
|
|
<a name='L93'></a><a href='#L93'>93</a>
|
|
<a name='L94'></a><a href='#L94'>94</a>
|
|
<a name='L95'></a><a href='#L95'>95</a>
|
|
<a name='L96'></a><a href='#L96'>96</a>
|
|
<a name='L97'></a><a href='#L97'>97</a>
|
|
<a name='L98'></a><a href='#L98'>98</a>
|
|
<a name='L99'></a><a href='#L99'>99</a>
|
|
<a name='L100'></a><a href='#L100'>100</a>
|
|
<a name='L101'></a><a href='#L101'>101</a>
|
|
<a name='L102'></a><a href='#L102'>102</a>
|
|
<a name='L103'></a><a href='#L103'>103</a>
|
|
<a name='L104'></a><a href='#L104'>104</a>
|
|
<a name='L105'></a><a href='#L105'>105</a>
|
|
<a name='L106'></a><a href='#L106'>106</a>
|
|
<a name='L107'></a><a href='#L107'>107</a>
|
|
<a name='L108'></a><a href='#L108'>108</a>
|
|
<a name='L109'></a><a href='#L109'>109</a>
|
|
<a name='L110'></a><a href='#L110'>110</a>
|
|
<a name='L111'></a><a href='#L111'>111</a>
|
|
<a name='L112'></a><a href='#L112'>112</a>
|
|
<a name='L113'></a><a href='#L113'>113</a>
|
|
<a name='L114'></a><a href='#L114'>114</a>
|
|
<a name='L115'></a><a href='#L115'>115</a>
|
|
<a name='L116'></a><a href='#L116'>116</a>
|
|
<a name='L117'></a><a href='#L117'>117</a>
|
|
<a name='L118'></a><a href='#L118'>118</a>
|
|
<a name='L119'></a><a href='#L119'>119</a>
|
|
<a name='L120'></a><a href='#L120'>120</a>
|
|
<a name='L121'></a><a href='#L121'>121</a>
|
|
<a name='L122'></a><a href='#L122'>122</a>
|
|
<a name='L123'></a><a href='#L123'>123</a>
|
|
<a name='L124'></a><a href='#L124'>124</a>
|
|
<a name='L125'></a><a href='#L125'>125</a>
|
|
<a name='L126'></a><a href='#L126'>126</a>
|
|
<a name='L127'></a><a href='#L127'>127</a>
|
|
<a name='L128'></a><a href='#L128'>128</a>
|
|
<a name='L129'></a><a href='#L129'>129</a>
|
|
<a name='L130'></a><a href='#L130'>130</a>
|
|
<a name='L131'></a><a href='#L131'>131</a>
|
|
<a name='L132'></a><a href='#L132'>132</a>
|
|
<a name='L133'></a><a href='#L133'>133</a>
|
|
<a name='L134'></a><a href='#L134'>134</a>
|
|
<a name='L135'></a><a href='#L135'>135</a>
|
|
<a name='L136'></a><a href='#L136'>136</a>
|
|
<a name='L137'></a><a href='#L137'>137</a>
|
|
<a name='L138'></a><a href='#L138'>138</a>
|
|
<a name='L139'></a><a href='#L139'>139</a>
|
|
<a name='L140'></a><a href='#L140'>140</a>
|
|
<a name='L141'></a><a href='#L141'>141</a>
|
|
<a name='L142'></a><a href='#L142'>142</a>
|
|
<a name='L143'></a><a href='#L143'>143</a>
|
|
<a name='L144'></a><a href='#L144'>144</a>
|
|
<a name='L145'></a><a href='#L145'>145</a>
|
|
<a name='L146'></a><a href='#L146'>146</a>
|
|
<a name='L147'></a><a href='#L147'>147</a>
|
|
<a name='L148'></a><a href='#L148'>148</a>
|
|
<a name='L149'></a><a href='#L149'>149</a>
|
|
<a name='L150'></a><a href='#L150'>150</a>
|
|
<a name='L151'></a><a href='#L151'>151</a>
|
|
<a name='L152'></a><a href='#L152'>152</a>
|
|
<a name='L153'></a><a href='#L153'>153</a>
|
|
<a name='L154'></a><a href='#L154'>154</a>
|
|
<a name='L155'></a><a href='#L155'>155</a>
|
|
<a name='L156'></a><a href='#L156'>156</a>
|
|
<a name='L157'></a><a href='#L157'>157</a>
|
|
<a name='L158'></a><a href='#L158'>158</a>
|
|
<a name='L159'></a><a href='#L159'>159</a>
|
|
<a name='L160'></a><a href='#L160'>160</a>
|
|
<a name='L161'></a><a href='#L161'>161</a>
|
|
<a name='L162'></a><a href='#L162'>162</a>
|
|
<a name='L163'></a><a href='#L163'>163</a>
|
|
<a name='L164'></a><a href='#L164'>164</a>
|
|
<a name='L165'></a><a href='#L165'>165</a>
|
|
<a name='L166'></a><a href='#L166'>166</a>
|
|
<a name='L167'></a><a href='#L167'>167</a>
|
|
<a name='L168'></a><a href='#L168'>168</a>
|
|
<a name='L169'></a><a href='#L169'>169</a>
|
|
<a name='L170'></a><a href='#L170'>170</a>
|
|
<a name='L171'></a><a href='#L171'>171</a>
|
|
<a name='L172'></a><a href='#L172'>172</a>
|
|
<a name='L173'></a><a href='#L173'>173</a>
|
|
<a name='L174'></a><a href='#L174'>174</a>
|
|
<a name='L175'></a><a href='#L175'>175</a>
|
|
<a name='L176'></a><a href='#L176'>176</a>
|
|
<a name='L177'></a><a href='#L177'>177</a>
|
|
<a name='L178'></a><a href='#L178'>178</a>
|
|
<a name='L179'></a><a href='#L179'>179</a>
|
|
<a name='L180'></a><a href='#L180'>180</a>
|
|
<a name='L181'></a><a href='#L181'>181</a>
|
|
<a name='L182'></a><a href='#L182'>182</a>
|
|
<a name='L183'></a><a href='#L183'>183</a>
|
|
<a name='L184'></a><a href='#L184'>184</a>
|
|
<a name='L185'></a><a href='#L185'>185</a>
|
|
<a name='L186'></a><a href='#L186'>186</a>
|
|
<a name='L187'></a><a href='#L187'>187</a>
|
|
<a name='L188'></a><a href='#L188'>188</a>
|
|
<a name='L189'></a><a href='#L189'>189</a>
|
|
<a name='L190'></a><a href='#L190'>190</a>
|
|
<a name='L191'></a><a href='#L191'>191</a>
|
|
<a name='L192'></a><a href='#L192'>192</a>
|
|
<a name='L193'></a><a href='#L193'>193</a>
|
|
<a name='L194'></a><a href='#L194'>194</a>
|
|
<a name='L195'></a><a href='#L195'>195</a>
|
|
<a name='L196'></a><a href='#L196'>196</a>
|
|
<a name='L197'></a><a href='#L197'>197</a>
|
|
<a name='L198'></a><a href='#L198'>198</a>
|
|
<a name='L199'></a><a href='#L199'>199</a>
|
|
<a name='L200'></a><a href='#L200'>200</a>
|
|
<a name='L201'></a><a href='#L201'>201</a>
|
|
<a name='L202'></a><a href='#L202'>202</a>
|
|
<a name='L203'></a><a href='#L203'>203</a>
|
|
<a name='L204'></a><a href='#L204'>204</a>
|
|
<a name='L205'></a><a href='#L205'>205</a>
|
|
<a name='L206'></a><a href='#L206'>206</a>
|
|
<a name='L207'></a><a href='#L207'>207</a>
|
|
<a name='L208'></a><a href='#L208'>208</a>
|
|
<a name='L209'></a><a href='#L209'>209</a>
|
|
<a name='L210'></a><a href='#L210'>210</a>
|
|
<a name='L211'></a><a href='#L211'>211</a>
|
|
<a name='L212'></a><a href='#L212'>212</a>
|
|
<a name='L213'></a><a href='#L213'>213</a>
|
|
<a name='L214'></a><a href='#L214'>214</a>
|
|
<a name='L215'></a><a href='#L215'>215</a>
|
|
<a name='L216'></a><a href='#L216'>216</a>
|
|
<a name='L217'></a><a href='#L217'>217</a>
|
|
<a name='L218'></a><a href='#L218'>218</a>
|
|
<a name='L219'></a><a href='#L219'>219</a>
|
|
<a name='L220'></a><a href='#L220'>220</a>
|
|
<a name='L221'></a><a href='#L221'>221</a>
|
|
<a name='L222'></a><a href='#L222'>222</a>
|
|
<a name='L223'></a><a href='#L223'>223</a>
|
|
<a name='L224'></a><a href='#L224'>224</a>
|
|
<a name='L225'></a><a href='#L225'>225</a>
|
|
<a name='L226'></a><a href='#L226'>226</a>
|
|
<a name='L227'></a><a href='#L227'>227</a>
|
|
<a name='L228'></a><a href='#L228'>228</a>
|
|
<a name='L229'></a><a href='#L229'>229</a>
|
|
<a name='L230'></a><a href='#L230'>230</a>
|
|
<a name='L231'></a><a href='#L231'>231</a>
|
|
<a name='L232'></a><a href='#L232'>232</a>
|
|
<a name='L233'></a><a href='#L233'>233</a>
|
|
<a name='L234'></a><a href='#L234'>234</a>
|
|
<a name='L235'></a><a href='#L235'>235</a>
|
|
<a name='L236'></a><a href='#L236'>236</a>
|
|
<a name='L237'></a><a href='#L237'>237</a>
|
|
<a name='L238'></a><a href='#L238'>238</a>
|
|
<a name='L239'></a><a href='#L239'>239</a>
|
|
<a name='L240'></a><a href='#L240'>240</a>
|
|
<a name='L241'></a><a href='#L241'>241</a>
|
|
<a name='L242'></a><a href='#L242'>242</a>
|
|
<a name='L243'></a><a href='#L243'>243</a>
|
|
<a name='L244'></a><a href='#L244'>244</a>
|
|
<a name='L245'></a><a href='#L245'>245</a>
|
|
<a name='L246'></a><a href='#L246'>246</a>
|
|
<a name='L247'></a><a href='#L247'>247</a>
|
|
<a name='L248'></a><a href='#L248'>248</a>
|
|
<a name='L249'></a><a href='#L249'>249</a>
|
|
<a name='L250'></a><a href='#L250'>250</a>
|
|
<a name='L251'></a><a href='#L251'>251</a>
|
|
<a name='L252'></a><a href='#L252'>252</a>
|
|
<a name='L253'></a><a href='#L253'>253</a>
|
|
<a name='L254'></a><a href='#L254'>254</a>
|
|
<a name='L255'></a><a href='#L255'>255</a>
|
|
<a name='L256'></a><a href='#L256'>256</a>
|
|
<a name='L257'></a><a href='#L257'>257</a>
|
|
<a name='L258'></a><a href='#L258'>258</a>
|
|
<a name='L259'></a><a href='#L259'>259</a>
|
|
<a name='L260'></a><a href='#L260'>260</a>
|
|
<a name='L261'></a><a href='#L261'>261</a>
|
|
<a name='L262'></a><a href='#L262'>262</a>
|
|
<a name='L263'></a><a href='#L263'>263</a>
|
|
<a name='L264'></a><a href='#L264'>264</a>
|
|
<a name='L265'></a><a href='#L265'>265</a>
|
|
<a name='L266'></a><a href='#L266'>266</a>
|
|
<a name='L267'></a><a href='#L267'>267</a>
|
|
<a name='L268'></a><a href='#L268'>268</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-yes">1x</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-yes">313632x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">313632x</span>
|
|
<span class="cline-any cline-yes">313632x</span>
|
|
<span class="cline-any cline-yes">313632x</span>
|
|
<span class="cline-any cline-yes">313632x</span>
|
|
<span class="cline-any cline-yes">313632x</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">8192x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</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">1228160x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1228160x</span>
|
|
<span class="cline-any cline-yes">1228160x</span>
|
|
<span class="cline-any cline-yes">1228160x</span>
|
|
<span class="cline-any cline-yes">1228160x</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">272640x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">272640x</span>
|
|
<span class="cline-any cline-yes">272640x</span>
|
|
<span class="cline-any cline-yes">272640x</span>
|
|
<span class="cline-any cline-yes">272640x</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-yes">1193380x</span>
|
|
<span class="cline-any cline-yes">1193380x</span>
|
|
<span class="cline-any cline-yes">1193380x</span>
|
|
<span class="cline-any cline-yes">1193380x</span>
|
|
<span class="cline-any cline-yes">1193380x</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">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</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">24576x</span>
|
|
<span class="cline-any cline-yes">24576x</span>
|
|
<span class="cline-any cline-yes">24576x</span>
|
|
<span class="cline-any cline-yes">24576x</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">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</span>
|
|
<span class="cline-any cline-yes">8192x</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">209x</span>
|
|
<span class="cline-any cline-yes">209x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">334250x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">334250x</span>
|
|
<span class="cline-any cline-yes">334250x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">334250x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">149504x</span>
|
|
<span class="cline-any cline-yes">149504x</span>
|
|
<span class="cline-any cline-yes">149504x</span>
|
|
<span class="cline-any cline-yes">149504x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">49612x</span>
|
|
<span class="cline-any cline-yes">49612x</span>
|
|
<span class="cline-any cline-yes">49612x</span>
|
|
<span class="cline-any cline-yes">49612x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-yes">2968x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</span>
|
|
<span class="cline-any cline-yes">132166x</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">209x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-yes">334250x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">8106x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">209x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-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">210x</span>
|
|
<span class="cline-any cline-yes">210x</span>
|
|
<span class="cline-any cline-yes">210x</span>
|
|
<span class="cline-any cline-yes">210x</span>
|
|
<span class="cline-any cline-yes">7288x</span>
|
|
<span class="cline-any cline-yes">1822624x</span>
|
|
<span class="cline-any cline-yes">1822624x</span>
|
|
<span class="cline-any cline-yes">1822624x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">210x</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">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">8106x</span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-yes">1234340x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">8106x</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">335x</span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">209x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">269x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">66x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">335x</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">335x</span>
|
|
<span class="cline-any cline-yes">72x</span>
|
|
<span class="cline-any cline-yes">72x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">263x</span>
|
|
<span class="cline-any cline-yes">263x</span>
|
|
<span class="cline-any cline-yes">2732114x</span>
|
|
<span class="cline-any cline-yes">2732114x</span>
|
|
<span class="cline-any cline-yes">2732114x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">263x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-yes">739x</span>
|
|
<span class="cline-any cline-yes">210x</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">529x</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">335x</span>
|
|
<span class="cline-any cline-yes">126x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">209x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">335x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
|
|
|
|
let interlaceUtils = require("./interlace");
|
|
|
|
let pixelBppMapper = [
|
|
// 0 - dummy entry
|
|
<span class="fstat-no" title="function not covered" > fu</span>nction () {},
|
|
|
|
// 1 - L
|
|
// 0: 0, 1: 0, 2: 0, 3: 0xff
|
|
function (pxData, data, pxPos, rawPos) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rawPos === data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Ran out of data");</span>
|
|
}
|
|
|
|
let pixel = data[rawPos];
|
|
pxData[pxPos] = pixel;
|
|
pxData[pxPos + 1] = pixel;
|
|
pxData[pxPos + 2] = pixel;
|
|
pxData[pxPos + 3] = 0xff;
|
|
},
|
|
|
|
// 2 - LA
|
|
// 0: 0, 1: 0, 2: 0, 3: 1
|
|
function (pxData, data, pxPos, rawPos) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rawPos + 1 >= data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Ran out of data");</span>
|
|
}
|
|
|
|
let pixel = data[rawPos];
|
|
pxData[pxPos] = pixel;
|
|
pxData[pxPos + 1] = pixel;
|
|
pxData[pxPos + 2] = pixel;
|
|
pxData[pxPos + 3] = data[rawPos + 1];
|
|
},
|
|
|
|
// 3 - RGB
|
|
// 0: 0, 1: 1, 2: 2, 3: 0xff
|
|
function (pxData, data, pxPos, rawPos) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rawPos + 2 >= data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Ran out of data");</span>
|
|
}
|
|
|
|
pxData[pxPos] = data[rawPos];
|
|
pxData[pxPos + 1] = data[rawPos + 1];
|
|
pxData[pxPos + 2] = data[rawPos + 2];
|
|
pxData[pxPos + 3] = 0xff;
|
|
},
|
|
|
|
// 4 - RGBA
|
|
// 0: 0, 1: 1, 2: 2, 3: 3
|
|
function (pxData, data, pxPos, rawPos) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rawPos + 3 >= data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Ran out of data");</span>
|
|
}
|
|
|
|
pxData[pxPos] = data[rawPos];
|
|
pxData[pxPos + 1] = data[rawPos + 1];
|
|
pxData[pxPos + 2] = data[rawPos + 2];
|
|
pxData[pxPos + 3] = data[rawPos + 3];
|
|
},
|
|
];
|
|
|
|
let pixelBppCustomMapper = [
|
|
// 0 - dummy entry
|
|
<span class="fstat-no" title="function not covered" > fu</span>nction () {},
|
|
|
|
// 1 - L
|
|
// 0: 0, 1: 0, 2: 0, 3: 0xff
|
|
function (pxData, pixelData, pxPos, maxBit) {
|
|
let pixel = pixelData[0];
|
|
pxData[pxPos] = pixel;
|
|
pxData[pxPos + 1] = pixel;
|
|
pxData[pxPos + 2] = pixel;
|
|
pxData[pxPos + 3] = maxBit;
|
|
},
|
|
|
|
// 2 - LA
|
|
// 0: 0, 1: 0, 2: 0, 3: 1
|
|
function (pxData, pixelData, pxPos) {
|
|
let pixel = pixelData[0];
|
|
pxData[pxPos] = pixel;
|
|
pxData[pxPos + 1] = pixel;
|
|
pxData[pxPos + 2] = pixel;
|
|
pxData[pxPos + 3] = pixelData[1];
|
|
},
|
|
|
|
// 3 - RGB
|
|
// 0: 0, 1: 1, 2: 2, 3: 0xff
|
|
function (pxData, pixelData, pxPos, maxBit) {
|
|
pxData[pxPos] = pixelData[0];
|
|
pxData[pxPos + 1] = pixelData[1];
|
|
pxData[pxPos + 2] = pixelData[2];
|
|
pxData[pxPos + 3] = maxBit;
|
|
},
|
|
|
|
// 4 - RGBA
|
|
// 0: 0, 1: 1, 2: 2, 3: 3
|
|
function (pxData, pixelData, pxPos) {
|
|
pxData[pxPos] = pixelData[0];
|
|
pxData[pxPos + 1] = pixelData[1];
|
|
pxData[pxPos + 2] = pixelData[2];
|
|
pxData[pxPos + 3] = pixelData[3];
|
|
},
|
|
];
|
|
|
|
function bitRetriever(data, depth) {
|
|
let leftOver = [];
|
|
let i = 0;
|
|
|
|
function split() {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (i === data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Ran out of data");</span>
|
|
}
|
|
let byte = data[i];
|
|
i++;
|
|
let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;
|
|
switch (depth) {
|
|
<span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("unrecognised depth");</span>
|
|
case 16:
|
|
byte2 = data[i];
|
|
i++;
|
|
leftOver.push((byte << 8) + byte2);
|
|
break;
|
|
case 4:
|
|
byte2 = byte & 0x0f;
|
|
byte1 = byte >> 4;
|
|
leftOver.push(byte1, byte2);
|
|
break;
|
|
case 2:
|
|
byte4 = byte & 3;
|
|
byte3 = (byte >> 2) & 3;
|
|
byte2 = (byte >> 4) & 3;
|
|
byte1 = (byte >> 6) & 3;
|
|
leftOver.push(byte1, byte2, byte3, byte4);
|
|
break;
|
|
case 1:
|
|
byte8 = byte & 1;
|
|
byte7 = (byte >> 1) & 1;
|
|
byte6 = (byte >> 2) & 1;
|
|
byte5 = (byte >> 3) & 1;
|
|
byte4 = (byte >> 4) & 1;
|
|
byte3 = (byte >> 5) & 1;
|
|
byte2 = (byte >> 6) & 1;
|
|
byte1 = (byte >> 7) & 1;
|
|
leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return {
|
|
get: function (count) {
|
|
while (leftOver.length < count) {
|
|
split();
|
|
}
|
|
let returner = leftOver.slice(0, count);
|
|
leftOver = leftOver.slice(count);
|
|
return returner;
|
|
},
|
|
resetAfterLine: function () {
|
|
leftOver.length = 0;
|
|
},
|
|
end: function () {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (i !== data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("extra data found");</span>
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
function mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {
|
|
// eslint-disable-line max-params
|
|
let imageWidth = image.width;
|
|
let imageHeight = image.height;
|
|
let imagePass = image.index;
|
|
for (let y = 0; y < imageHeight; y++) {
|
|
for (let x = 0; x < imageWidth; x++) {
|
|
let pxPos = getPxPos(x, y, imagePass);
|
|
pixelBppMapper[bpp](pxData, data, pxPos, rawPos);
|
|
rawPos += bpp; //eslint-disable-line no-param-reassign
|
|
}
|
|
}
|
|
return rawPos;
|
|
}
|
|
|
|
function mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {
|
|
// eslint-disable-line max-params
|
|
let imageWidth = image.width;
|
|
let imageHeight = image.height;
|
|
let imagePass = image.index;
|
|
for (let y = 0; y < imageHeight; y++) {
|
|
for (let x = 0; x < imageWidth; x++) {
|
|
let pixelData = bits.get(bpp);
|
|
let pxPos = getPxPos(x, y, imagePass);
|
|
pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);
|
|
}
|
|
bits.resetAfterLine();
|
|
}
|
|
}
|
|
|
|
exports.dataToBitMap = function (data, bitmapInfo) {
|
|
let width = bitmapInfo.width;
|
|
let height = bitmapInfo.height;
|
|
let depth = bitmapInfo.depth;
|
|
let bpp = bitmapInfo.bpp;
|
|
let interlace = bitmapInfo.interlace;
|
|
let bits;
|
|
|
|
if (depth !== 8) {
|
|
bits = bitRetriever(data, depth);
|
|
}
|
|
let pxData;
|
|
if (depth <= 8) {
|
|
pxData = Buffer.alloc(width * height * 4);
|
|
} else {
|
|
pxData = new Uint16Array(width * height * 4);
|
|
}
|
|
let maxBit = Math.pow(2, depth) - 1;
|
|
let rawPos = 0;
|
|
let images;
|
|
let getPxPos;
|
|
|
|
if (interlace) {
|
|
images = interlaceUtils.getImagePasses(width, height);
|
|
getPxPos = interlaceUtils.getInterlaceIterator(width, height);
|
|
} else {
|
|
let nonInterlacedPxPos = 0;
|
|
getPxPos = function () {
|
|
let returner = nonInterlacedPxPos;
|
|
nonInterlacedPxPos += 4;
|
|
return returner;
|
|
};
|
|
images = [{ width: width, height: height }];
|
|
}
|
|
|
|
for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {
|
|
if (depth === 8) {
|
|
rawPos = mapImage8Bit(
|
|
images[imageIndex],
|
|
pxData,
|
|
getPxPos,
|
|
bpp,
|
|
data,
|
|
rawPos
|
|
);
|
|
} else {
|
|
mapImageCustomBit(
|
|
images[imageIndex],
|
|
pxData,
|
|
getPxPos,
|
|
bpp,
|
|
bits,
|
|
maxBit
|
|
);
|
|
}
|
|
}
|
|
if (depth === 8) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rawPos !== data.length) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("extra data found");</span>
|
|
}
|
|
} else {
|
|
bits.end();
|
|
}
|
|
|
|
return pxData;
|
|
};
|
|
</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 Fri Apr 10 2020 13:53:16 GMT+0200 (Central European Summer Time)
|
|
</div>
|
|
</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>
|
|
|