@afixt/test-utils 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/.claude/settings.local.json +4 -1
  2. package/CLAUDE.md +12 -0
  3. package/package.json +1 -1
  4. package/src/domUtils.js +2 -2
  5. package/src/getAccessibleName.js +8 -4
  6. package/src/getAriaAttributesByElement.js +2 -2
  7. package/src/getFocusableElements.js +14 -5
  8. package/src/stringUtils.js +1 -1
  9. package/test/domUtils.test.js +117 -0
  10. package/test/getAccessibleName.test.js +182 -0
  11. package/test/getAccessibleText.test.js +350 -79
  12. package/test/getCSSGeneratedContent.test.js +175 -1
  13. package/test/getFocusableElements.test.js +106 -35
  14. package/test/getImageText.test.js +61 -12
  15. package/test/hasParent.test.js +116 -0
  16. package/test/index.test.js +165 -0
  17. package/test/interactiveRoles.test.js +60 -0
  18. package/test/isAriaAttributesValid.test.js +36 -0
  19. package/test/isDataTable.test.js +492 -0
  20. package/test/isValidUrl.test.js +31 -19
  21. package/test/stringUtils.test.js +235 -1
  22. package/test/testContrast.test.js +176 -8
  23. package/test/testOrder.integration.test.js +369 -0
  24. package/test/testOrder.test.js +756 -21
  25. package/todo.md +149 -1
  26. package/coverage/base.css +0 -224
  27. package/coverage/block-navigation.js +0 -87
  28. package/coverage/coverage-final.json +0 -51
  29. package/coverage/favicon.png +0 -0
  30. package/coverage/index.html +0 -161
  31. package/coverage/prettify.css +0 -1
  32. package/coverage/prettify.js +0 -2
  33. package/coverage/sort-arrow-sprite.png +0 -0
  34. package/coverage/sorter.js +0 -196
  35. package/coverage/test-utils/docs/scripts/core.js.html +0 -2263
  36. package/coverage/test-utils/docs/scripts/core.min.js.html +0 -151
  37. package/coverage/test-utils/docs/scripts/index.html +0 -176
  38. package/coverage/test-utils/docs/scripts/resize.js.html +0 -355
  39. package/coverage/test-utils/docs/scripts/search.js.html +0 -880
  40. package/coverage/test-utils/docs/scripts/search.min.js.html +0 -100
  41. package/coverage/test-utils/docs/scripts/third-party/fuse.js.html +0 -109
  42. package/coverage/test-utils/docs/scripts/third-party/hljs-line-num-original.js.html +0 -1192
  43. package/coverage/test-utils/docs/scripts/third-party/hljs-line-num.js.html +0 -85
  44. package/coverage/test-utils/docs/scripts/third-party/hljs-original.js.html +0 -15598
  45. package/coverage/test-utils/docs/scripts/third-party/hljs.js.html +0 -85
  46. package/coverage/test-utils/docs/scripts/third-party/index.html +0 -236
  47. package/coverage/test-utils/docs/scripts/third-party/popper.js.html +0 -100
  48. package/coverage/test-utils/docs/scripts/third-party/tippy.js.html +0 -88
  49. package/coverage/test-utils/docs/scripts/third-party/tocbot.js.html +0 -2098
  50. package/coverage/test-utils/docs/scripts/third-party/tocbot.min.js.html +0 -85
  51. package/coverage/test-utils/index.html +0 -131
  52. package/coverage/test-utils/src/arrayUtils.js.html +0 -283
  53. package/coverage/test-utils/src/domUtils.js.html +0 -622
  54. package/coverage/test-utils/src/getAccessibleName.js.html +0 -1444
  55. package/coverage/test-utils/src/getAccessibleText.js.html +0 -271
  56. package/coverage/test-utils/src/getAriaAttributesByElement.js.html +0 -142
  57. package/coverage/test-utils/src/getCSSGeneratedContent.js.html +0 -265
  58. package/coverage/test-utils/src/getComputedRole.js.html +0 -592
  59. package/coverage/test-utils/src/getFocusableElements.js.html +0 -163
  60. package/coverage/test-utils/src/getGeneratedContent.js.html +0 -130
  61. package/coverage/test-utils/src/getImageText.js.html +0 -160
  62. package/coverage/test-utils/src/getStyleObject.js.html +0 -220
  63. package/coverage/test-utils/src/hasAccessibleName.js.html +0 -166
  64. package/coverage/test-utils/src/hasAttribute.js.html +0 -130
  65. package/coverage/test-utils/src/hasCSSGeneratedContent.js.html +0 -145
  66. package/coverage/test-utils/src/hasHiddenParent.js.html +0 -172
  67. package/coverage/test-utils/src/hasParent.js.html +0 -247
  68. package/coverage/test-utils/src/hasValidAriaAttributes.js.html +0 -175
  69. package/coverage/test-utils/src/hasValidAriaRole.js.html +0 -172
  70. package/coverage/test-utils/src/index.html +0 -611
  71. package/coverage/test-utils/src/index.js.html +0 -274
  72. package/coverage/test-utils/src/interactiveRoles.js.html +0 -145
  73. package/coverage/test-utils/src/isAriaAttributesValid.js.html +0 -304
  74. package/coverage/test-utils/src/isComplexTable.js.html +0 -412
  75. package/coverage/test-utils/src/isDataTable.js.html +0 -799
  76. package/coverage/test-utils/src/isFocusable.js.html +0 -187
  77. package/coverage/test-utils/src/isHidden.js.html +0 -136
  78. package/coverage/test-utils/src/isOffScreen.js.html +0 -133
  79. package/coverage/test-utils/src/isValidUrl.js.html +0 -124
  80. package/coverage/test-utils/src/isVisible.js.html +0 -271
  81. package/coverage/test-utils/src/listEventListeners.js.html +0 -370
  82. package/coverage/test-utils/src/queryCache.js.html +0 -1156
  83. package/coverage/test-utils/src/stringUtils.js.html +0 -535
  84. package/coverage/test-utils/src/testContrast.js.html +0 -784
  85. package/coverage/test-utils/src/testLang.js.html +0 -1810
  86. package/coverage/test-utils/src/testOrder.js.html +0 -355
  87. package/coverage/test-utils/vitest.config.browser.js.html +0 -133
  88. package/coverage/test-utils/vitest.config.js.html +0 -157
  89. package/repairs-needed.md +0 -84
@@ -1,1156 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for test-utils/src/queryCache.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">test-utils/src</a> queryCache.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">95.88% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>303/316</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">92.1% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>70/76</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>16/16</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">95.88% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>303/316</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- 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.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
424
- <span class="cline-any cline-yes">1x</span>
425
- <span class="cline-any cline-yes">1x</span>
426
- <span class="cline-any cline-yes">1x</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-yes">1x</span>
429
- <span class="cline-any cline-yes">1x</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">33x</span>
434
- <span class="cline-any cline-yes">3x</span>
435
- <span class="cline-any cline-yes">3x</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-yes">30x</span>
438
- <span class="cline-any cline-yes">30x</span>
439
- <span class="cline-any cline-yes">30x</span>
440
- <span class="cline-any cline-yes">30x</span>
441
- <span class="cline-any cline-yes">30x</span>
442
- <span class="cline-any cline-yes">30x</span>
443
- <span class="cline-any cline-yes">33x</span>
444
- <span class="cline-any cline-yes">33x</span>
445
- <span class="cline-any cline-yes">33x</span>
446
- <span class="cline-any cline-yes">33x</span>
447
- <span class="cline-any cline-yes">33x</span>
448
- <span class="cline-any cline-yes">33x</span>
449
- <span class="cline-any cline-yes">33x</span>
450
- <span class="cline-any cline-yes">33x</span>
451
- <span class="cline-any cline-yes">33x</span>
452
- <span class="cline-any cline-yes">33x</span>
453
- <span class="cline-any cline-yes">33x</span>
454
- <span class="cline-any cline-yes">33x</span>
455
- <span class="cline-any cline-yes">33x</span>
456
- <span class="cline-any cline-yes">33x</span>
457
- <span class="cline-any cline-yes">33x</span>
458
- <span class="cline-any cline-yes">33x</span>
459
- <span class="cline-any cline-yes">33x</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-yes">1x</span>
463
- <span class="cline-any cline-yes">1x</span>
464
- <span class="cline-any cline-yes">1x</span>
465
- <span class="cline-any cline-yes">1x</span>
466
- <span class="cline-any cline-yes">1x</span>
467
- <span class="cline-any cline-yes">38x</span>
468
- <span class="cline-any cline-yes">3x</span>
469
- <span class="cline-any cline-yes">3x</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-yes">35x</span>
472
- <span class="cline-any cline-yes">35x</span>
473
- <span class="cline-any cline-yes">35x</span>
474
- <span class="cline-any cline-yes">38x</span>
475
- <span class="cline-any cline-yes">6x</span>
476
- <span class="cline-any cline-yes">6x</span>
477
- <span class="cline-any cline-yes">6x</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">29x</span>
480
- <span class="cline-any cline-yes">29x</span>
481
- <span class="cline-any cline-yes">29x</span>
482
- <span class="cline-any cline-yes">29x</span>
483
- <span class="cline-any cline-yes">38x</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">1x</span>
489
- <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">17x</span>
492
- <span class="cline-any cline-yes">3x</span>
493
- <span class="cline-any cline-yes">3x</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">14x</span>
496
- <span class="cline-any cline-yes">14x</span>
497
- <span class="cline-any cline-yes">14x</span>
498
- <span class="cline-any cline-yes">17x</span>
499
- <span class="cline-any cline-yes">2x</span>
500
- <span class="cline-any cline-yes">2x</span>
501
- <span class="cline-any cline-yes">2x</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">12x</span>
504
- <span class="cline-any cline-yes">12x</span>
505
- <span class="cline-any cline-yes">12x</span>
506
- <span class="cline-any cline-yes">12x</span>
507
- <span class="cline-any cline-yes">17x</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-yes">1x</span>
510
- <span class="cline-any cline-yes">1x</span>
511
- <span class="cline-any cline-yes">1x</span>
512
- <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">17x</span>
516
- <span class="cline-any cline-yes">3x</span>
517
- <span class="cline-any cline-yes">3x</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-yes">14x</span>
520
- <span class="cline-any cline-yes">14x</span>
521
- <span class="cline-any cline-yes">17x</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-yes">13x</span>
527
- <span class="cline-any cline-yes">13x</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">13x</span>
530
- <span class="cline-any cline-yes">17x</span>
531
- <span class="cline-any cline-yes">8x</span>
532
- <span class="cline-any cline-yes">8x</span>
533
- <span class="cline-any cline-yes">17x</span>
534
- <span class="cline-any cline-yes">5x</span>
535
- <span class="cline-any cline-yes">5x</span>
536
- <span class="cline-any cline-yes">5x</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-no">&nbsp;</span>
542
- <span class="cline-any cline-no">&nbsp;</span>
543
- <span class="cline-any cline-yes">5x</span>
544
- <span class="cline-any cline-no">&nbsp;</span>
545
- <span class="cline-any cline-no">&nbsp;</span>
546
- <span class="cline-any cline-no">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-yes">13x</span>
549
- <span class="cline-any cline-yes">13x</span>
550
- <span class="cline-any cline-yes">17x</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-yes">1x</span>
554
- <span class="cline-any cline-yes">1x</span>
555
- <span class="cline-any cline-yes">1x</span>
556
- <span class="cline-any cline-yes">1x</span>
557
- <span class="cline-any cline-yes">1x</span>
558
- <span class="cline-any cline-yes">3x</span>
559
- <span class="cline-any cline-yes">3x</span>
560
- <span class="cline-any cline-yes">3x</span>
561
- <span class="cline-any cline-yes">3x</span>
562
- <span class="cline-any cline-yes">15x</span>
563
- <span class="cline-any cline-yes">7x</span>
564
- <span class="cline-any cline-yes">7x</span>
565
- <span class="cline-any cline-yes">7x</span>
566
- <span class="cline-any cline-yes">7x</span>
567
- <span class="cline-any cline-yes">15x</span>
568
- <span class="cline-any cline-yes">3x</span>
569
- <span class="cline-any cline-yes">3x</span>
570
- <span class="cline-any cline-yes">3x</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-yes">1x</span>
573
- <span class="cline-any cline-yes">1x</span>
574
- <span class="cline-any cline-yes">1x</span>
575
- <span class="cline-any cline-yes">1x</span>
576
- <span class="cline-any cline-yes">1x</span>
577
- <span class="cline-any cline-yes">1x</span>
578
- <span class="cline-any cline-yes">3x</span>
579
- <span class="cline-any cline-yes">3x</span>
580
- <span class="cline-any cline-yes">3x</span>
581
- <span class="cline-any cline-yes">3x</span>
582
- <span class="cline-any cline-yes">4x</span>
583
- <span class="cline-any cline-yes">3x</span>
584
- <span class="cline-any cline-yes">3x</span>
585
- <span class="cline-any cline-yes">3x</span>
586
- <span class="cline-any cline-yes">3x</span>
587
- <span class="cline-any cline-yes">4x</span>
588
- <span class="cline-any cline-yes">3x</span>
589
- <span class="cline-any cline-yes">3x</span>
590
- <span class="cline-any cline-yes">3x</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-yes">1x</span>
593
- <span class="cline-any cline-yes">1x</span>
594
- <span class="cline-any cline-yes">1x</span>
595
- <span class="cline-any cline-yes">1x</span>
596
- <span class="cline-any cline-yes">1x</span>
597
- <span class="cline-any cline-yes">2x</span>
598
- <span class="cline-any cline-yes">2x</span>
599
- <span class="cline-any cline-yes">2x</span>
600
- <span class="cline-any cline-yes">2x</span>
601
- <span class="cline-any cline-yes">2x</span>
602
- <span class="cline-any cline-yes">2x</span>
603
- <span class="cline-any cline-yes">2x</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">1x</span>
606
- <span class="cline-any cline-yes">1x</span>
607
- <span class="cline-any cline-yes">1x</span>
608
- <span class="cline-any cline-yes">1x</span>
609
- <span class="cline-any cline-yes">1x</span>
610
- <span class="cline-any cline-yes">1x</span>
611
- <span class="cline-any cline-yes">1x</span>
612
- <span class="cline-any cline-yes">1x</span>
613
- <span class="cline-any cline-yes">1x</span>
614
- <span class="cline-any cline-yes">1x</span>
615
- <span class="cline-any cline-yes">1x</span>
616
- <span class="cline-any cline-yes">1x</span>
617
- <span class="cline-any cline-yes">1x</span>
618
- <span class="cline-any cline-yes">1x</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">1x</span>
621
- <span class="cline-any cline-yes">1x</span>
622
- <span class="cline-any cline-yes">1x</span>
623
- <span class="cline-any cline-yes">1x</span>
624
- <span class="cline-any cline-yes">1x</span>
625
- <span class="cline-any cline-yes">49x</span>
626
- <span class="cline-any cline-yes">40x</span>
627
- <span class="cline-any cline-yes">40x</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-yes">9x</span>
630
- <span class="cline-any cline-yes">49x</span>
631
- <span class="cline-any cline-no">&nbsp;</span>
632
- <span class="cline-any cline-no">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-yes">9x</span>
635
- <span class="cline-any cline-yes">49x</span>
636
- <span class="cline-any cline-yes">1x</span>
637
- <span class="cline-any cline-yes">1x</span>
638
- <span class="cline-any cline-yes">1x</span>
639
- <span class="cline-any cline-yes">1x</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">8x</span>
642
- <span class="cline-any cline-yes">8x</span>
643
- <span class="cline-any cline-yes">8x</span>
644
- <span class="cline-any cline-yes">8x</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">8x</span>
647
- <span class="cline-any cline-yes">49x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">1x</span>
650
- <span class="cline-any cline-yes">1x</span>
651
- <span class="cline-any cline-yes">1x</span>
652
- <span class="cline-any cline-yes">1x</span>
653
- <span class="cline-any cline-yes">1x</span>
654
- <span class="cline-any cline-yes">41x</span>
655
- <span class="cline-any cline-yes">41x</span>
656
- <span class="cline-any cline-yes">3x</span>
657
- <span class="cline-any cline-yes">3x</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-yes">41x</span>
660
- <span class="cline-any cline-yes">41x</span>
661
- <span class="cline-any cline-yes">41x</span>
662
- <span class="cline-any cline-yes">41x</span>
663
- <span class="cline-any cline-yes">41x</span>
664
- <span class="cline-any cline-yes">41x</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-yes">1x</span>
667
- <span class="cline-any cline-yes">1x</span>
668
- <span class="cline-any cline-yes">1x</span>
669
- <span class="cline-any cline-yes">1x</span>
670
- <span class="cline-any cline-yes">1x</span>
671
- <span class="cline-any cline-yes">14x</span>
672
- <span class="cline-any cline-yes">12x</span>
673
- <span class="cline-any cline-yes">12x</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-yes">2x</span>
676
- <span class="cline-any cline-yes">14x</span>
677
- <span class="cline-any cline-no">&nbsp;</span>
678
- <span class="cline-any cline-no">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-yes">2x</span>
681
- <span class="cline-any cline-yes">14x</span>
682
- <span class="cline-any cline-yes">1x</span>
683
- <span class="cline-any cline-yes">1x</span>
684
- <span class="cline-any cline-yes">1x</span>
685
- <span class="cline-any cline-yes">1x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-yes">1x</span>
688
- <span class="cline-any cline-yes">1x</span>
689
- <span class="cline-any cline-yes">1x</span>
690
- <span class="cline-any cline-yes">1x</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-yes">1x</span>
693
- <span class="cline-any cline-yes">14x</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-yes">1x</span>
696
- <span class="cline-any cline-yes">1x</span>
697
- <span class="cline-any cline-yes">1x</span>
698
- <span class="cline-any cline-yes">1x</span>
699
- <span class="cline-any cline-yes">1x</span>
700
- <span class="cline-any cline-yes">13x</span>
701
- <span class="cline-any cline-yes">13x</span>
702
- <span class="cline-any cline-yes">1x</span>
703
- <span class="cline-any cline-yes">1x</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-yes">13x</span>
706
- <span class="cline-any cline-yes">13x</span>
707
- <span class="cline-any cline-yes">13x</span>
708
- <span class="cline-any cline-yes">13x</span>
709
- <span class="cline-any cline-yes">13x</span>
710
- <span class="cline-any cline-yes">13x</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-yes">1x</span>
713
- <span class="cline-any cline-yes">1x</span>
714
- <span class="cline-any cline-yes">1x</span>
715
- <span class="cline-any cline-yes">1x</span>
716
- <span class="cline-any cline-yes">1x</span>
717
- <span class="cline-any cline-yes">3x</span>
718
- <span class="cline-any cline-yes">3x</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">3x</span>
721
- <span class="cline-any cline-yes">9x</span>
722
- <span class="cline-any cline-yes">9x</span>
723
- <span class="cline-any cline-yes">9x</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-yes">9x</span>
726
- <span class="cline-any cline-yes">3x</span>
727
- <span class="cline-any cline-yes">3x</span>
728
- <span class="cline-any cline-yes">3x</span>
729
- <span class="cline-any cline-yes">9x</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-yes">3x</span>
732
- <span class="cline-any cline-yes">3x</span>
733
- <span class="cline-any cline-yes">3x</span>
734
- <span class="cline-any cline-yes">3x</span>
735
- <span class="cline-any cline-yes">3x</span>
736
- <span class="cline-any cline-yes">3x</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-yes">1x</span>
739
- <span class="cline-any cline-yes">1x</span>
740
- <span class="cline-any cline-yes">1x</span>
741
- <span class="cline-any cline-yes">1x</span>
742
- <span class="cline-any cline-yes">1x</span>
743
- <span class="cline-any cline-yes">1x</span>
744
- <span class="cline-any cline-yes">1x</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">1x</span>
747
- <span class="cline-any cline-yes">2x</span>
748
- <span class="cline-any cline-yes">2x</span>
749
- <span class="cline-any cline-yes">2x</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-yes">2x</span>
752
- <span class="cline-any cline-yes">1x</span>
753
- <span class="cline-any cline-yes">1x</span>
754
- <span class="cline-any cline-yes">1x</span>
755
- <span class="cline-any cline-yes">2x</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-yes">1x</span>
758
- <span class="cline-any cline-yes">1x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-yes">1x</span>
761
- <span class="cline-any cline-yes">1x</span>
762
- <span class="cline-any cline-yes">1x</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-yes">1x</span>
765
- <span class="cline-any cline-yes">1x</span>
766
- <span class="cline-any cline-yes">1x</span>
767
- <span class="cline-any cline-yes">1x</span>
768
- <span class="cline-any cline-yes">1x</span>
769
- <span class="cline-any cline-yes">8x</span>
770
- <span class="cline-any cline-yes">8x</span>
771
- <span class="cline-any cline-yes">8x</span>
772
- <span class="cline-any cline-yes">8x</span>
773
- <span class="cline-any cline-yes">8x</span>
774
- <span class="cline-any cline-yes">8x</span>
775
- <span class="cline-any cline-yes">8x</span>
776
- <span class="cline-any cline-yes">8x</span>
777
- <span class="cline-any cline-yes">8x</span>
778
- <span class="cline-any cline-yes">1x</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">/**
781
- * @module QueryCache
782
- * @description Advanced DOM query caching utility with TTL, size limits, and performance optimizations
783
- */
784
- &nbsp;
785
- // Sentinel value to distinguish between cache miss and cached null
786
- const CACHE_MISS = Symbol('CACHE_MISS');
787
- &nbsp;
788
- class QueryCache {
789
- constructor(targetElement, options = {}) {
790
- if (!targetElement || !(targetElement instanceof Element || targetElement === document)) {
791
- throw new Error('QueryCache requires a valid DOM element or document');
792
- }
793
- &nbsp;
794
- this.targetElement = targetElement;
795
- this.cache = new Map();
796
- this.computedStyleCache = new Map();
797
-
798
- // Configuration options
799
- this.options = {
800
- maxCacheSize: options.maxCacheSize || 1000,
801
- maxComputedStyleSize: options.maxComputedStyleSize || 500,
802
- ttl: options.ttl || 60000, // Default 60 seconds
803
- evictionStrategy: options.evictionStrategy || 'lru' // 'lru' or 'fifo'
804
- };
805
-
806
- // Cache metadata for LRU/FIFO eviction
807
- this.cacheMetadata = new Map();
808
- this.computedStyleMetadata = new Map();
809
-
810
- // Statistics
811
- this.stats = {
812
- hits: 0,
813
- misses: 0,
814
- evictions: 0
815
- };
816
- }
817
- &nbsp;
818
- /**
819
- * Get a single element by selector with caching
820
- * @param {string} selector - CSS selector
821
- * @returns {Element|null} - Cached or fresh query result
822
- */
823
- querySelector(selector) {
824
- if (typeof selector !== 'string' || !selector.trim()) {
825
- throw new Error('querySelector requires a non-empty string selector');
826
- }
827
- &nbsp;
828
- const cacheKey = `single:${selector}`;
829
- const cached = this._getCachedValue(cacheKey);
830
-
831
- if (cached !== CACHE_MISS) {
832
- this.stats.hits++;
833
- return cached;
834
- }
835
- &nbsp;
836
- this.stats.misses++;
837
- const element = this.targetElement.querySelector(selector);
838
- this._setCachedValue(cacheKey, element);
839
- return element;
840
- }
841
- &nbsp;
842
- /**
843
- * Get elements by selector with caching
844
- * @param {string} selector - CSS selector
845
- * @returns {NodeList} - Cached or fresh query results
846
- */
847
- querySelectorAll(selector) {
848
- if (typeof selector !== 'string' || !selector.trim()) {
849
- throw new Error('querySelectorAll requires a non-empty string selector');
850
- }
851
- &nbsp;
852
- const cacheKey = `all:${selector}`;
853
- const cached = this._getCachedValue(cacheKey);
854
-
855
- if (cached !== CACHE_MISS) {
856
- this.stats.hits++;
857
- return cached;
858
- }
859
- &nbsp;
860
- this.stats.misses++;
861
- const elements = this.targetElement.querySelectorAll(selector);
862
- this._setCachedValue(cacheKey, elements);
863
- return elements;
864
- }
865
- &nbsp;
866
- /**
867
- * Get computed style for an element with caching
868
- * @param {Element} element - DOM element
869
- * @returns {CSSStyleDeclaration} - Cached or fresh computed style
870
- */
871
- getComputedStyle(element) {
872
- if (!element || !(element instanceof Element)) {
873
- throw new Error('getComputedStyle requires a valid DOM element');
874
- }
875
- &nbsp;
876
- const cached = this._getCachedComputedStyle(element);
877
-
878
- if (cached !== CACHE_MISS) {
879
- this.stats.hits++;
880
- return cached;
881
- }
882
- &nbsp;
883
- this.stats.misses++;
884
- let computedStyle;
885
- &nbsp;
886
- // Handle test environment gracefully
887
- if (typeof global !== 'undefined' &amp;&amp; (global.jest || global.vitest)) {
888
- // In test environment, create a mock computed style with basic properties
889
- computedStyle = this._createMockComputedStyle(element);
890
- } else if (typeof window !== 'undefined' &amp;&amp; window.getComputedStyle) {
891
- try {
892
- computedStyle = window.getComputedStyle(element);
893
- } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
894
- <span class="cstat-no" title="statement not covered" > // Log the error and provide a fallback for environments where getComputedStyle fails</span>
895
- <span class="cstat-no" title="statement not covered" > if (typeof console !== 'undefined' &amp;&amp; console.error) {</span>
896
- <span class="cstat-no" title="statement not covered" > console.error('getComputedStyle failed:', error);</span>
897
- <span class="cstat-no" title="statement not covered" > }</span>
898
- <span class="cstat-no" title="statement not covered" > computedStyle = this._createMockComputedStyle(element);</span>
899
- <span class="cstat-no" title="statement not covered" > }</span>
900
- }<span class="branch-0 cbranch-no" title="branch not covered" > else {</span>
901
- <span class="cstat-no" title="statement not covered" > // Fallback for other environments</span>
902
- <span class="cstat-no" title="statement not covered" > computedStyle = this._createMockComputedStyle(element);</span>
903
- <span class="cstat-no" title="statement not covered" > }</span>
904
- &nbsp;
905
- this._setCachedComputedStyle(element, computedStyle);
906
- return computedStyle;
907
- }
908
- &nbsp;
909
- /**
910
- * Invalidate specific cache entries by selector pattern
911
- * @param {string|RegExp} pattern - Selector pattern to match
912
- * @returns {number} - Number of entries invalidated
913
- */
914
- invalidate(pattern) {
915
- let count = 0;
916
- const regex = pattern instanceof RegExp ? pattern : new RegExp(pattern);
917
-
918
- for (const [key] of this.cache) {
919
- if (regex.test(key)) {
920
- this.cache.delete(key);
921
- this.cacheMetadata.delete(key);
922
- count++;
923
- }
924
- }
925
-
926
- return count;
927
- }
928
- &nbsp;
929
- /**
930
- * Invalidate computed style cache for specific elements
931
- * @param {Element|Element[]} elements - Element(s) to invalidate
932
- * @returns {number} - Number of entries invalidated
933
- */
934
- invalidateComputedStyles(elements) {
935
- const elemArray = Array.isArray(elements) ? elements : [elements];
936
- let count = 0;
937
-
938
- for (const element of elemArray) {
939
- if (this.computedStyleCache.has(element)) {
940
- this.computedStyleCache.delete(element);
941
- this.computedStyleMetadata.delete(element);
942
- count++;
943
- }
944
- }
945
-
946
- return count;
947
- }
948
- &nbsp;
949
- /**
950
- * Get cache statistics
951
- * @returns {Object} - Cache statistics
952
- */
953
- getStats() {
954
- return {
955
- ...this.stats,
956
- cacheSize: this.cache.size,
957
- computedStyleCacheSize: this.computedStyleCache.size,
958
- hitRate: this.stats.hits / (this.stats.hits + this.stats.misses) || 0
959
- };
960
- }
961
- &nbsp;
962
- /**
963
- * Clear all caches
964
- */
965
- clear() {
966
- this.cache.clear();
967
- this.computedStyleCache.clear();
968
- this.cacheMetadata.clear();
969
- this.computedStyleMetadata.clear();
970
- this.stats = {
971
- hits: 0,
972
- misses: 0,
973
- evictions: 0
974
- };
975
- }
976
- &nbsp;
977
- /**
978
- * Private method to get cached value with TTL check
979
- * @private
980
- */
981
- _getCachedValue(key) {
982
- if (!this.cache.has(key)) {
983
- return CACHE_MISS;
984
- }
985
- &nbsp;
986
- const metadata = this.cacheMetadata.get(key);
987
- if (!metadata) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
988
- <span class="cstat-no" title="statement not covered" > return CACHE_MISS;</span>
989
- <span class="cstat-no" title="statement not covered" > }</span>
990
- &nbsp;
991
- // Check TTL
992
- if (Date.now() - metadata.timestamp &gt; this.options.ttl) {
993
- this.cache.delete(key);
994
- this.cacheMetadata.delete(key);
995
- return CACHE_MISS;
996
- }
997
- &nbsp;
998
- // Update access time for LRU
999
- if (this.options.evictionStrategy === 'lru') {
1000
- metadata.lastAccessed = Date.now();
1001
- }
1002
- &nbsp;
1003
- return this.cache.get(key);
1004
- }
1005
- &nbsp;
1006
- /**
1007
- * Private method to set cached value with eviction
1008
- * @private
1009
- */
1010
- _setCachedValue(key, value) {
1011
- // Check cache size limit
1012
- if (this.cache.size &gt;= this.options.maxCacheSize) {
1013
- this._evictFromCache();
1014
- }
1015
- &nbsp;
1016
- this.cache.set(key, value);
1017
- this.cacheMetadata.set(key, {
1018
- timestamp: Date.now(),
1019
- lastAccessed: Date.now()
1020
- });
1021
- }
1022
- &nbsp;
1023
- /**
1024
- * Private method to get cached computed style with TTL check
1025
- * @private
1026
- */
1027
- _getCachedComputedStyle(element) {
1028
- if (!this.computedStyleCache.has(element)) {
1029
- return CACHE_MISS;
1030
- }
1031
- &nbsp;
1032
- const metadata = this.computedStyleMetadata.get(element);
1033
- if (!metadata) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1034
- <span class="cstat-no" title="statement not covered" > return CACHE_MISS;</span>
1035
- <span class="cstat-no" title="statement not covered" > }</span>
1036
- &nbsp;
1037
- // Check TTL
1038
- if (Date.now() - metadata.timestamp &gt; this.options.ttl) {
1039
- this.computedStyleCache.delete(element);
1040
- this.computedStyleMetadata.delete(element);
1041
- return CACHE_MISS;
1042
- }
1043
- &nbsp;
1044
- // Update access time for LRU
1045
- if (this.options.evictionStrategy === 'lru') {
1046
- metadata.lastAccessed = Date.now();
1047
- }
1048
- &nbsp;
1049
- return this.computedStyleCache.get(element);
1050
- }
1051
- &nbsp;
1052
- /**
1053
- * Private method to set cached computed style with eviction
1054
- * @private
1055
- */
1056
- _setCachedComputedStyle(element, computedStyle) {
1057
- // Check cache size limit
1058
- if (this.computedStyleCache.size &gt;= this.options.maxComputedStyleSize) {
1059
- this._evictFromComputedStyleCache();
1060
- }
1061
- &nbsp;
1062
- this.computedStyleCache.set(element, computedStyle);
1063
- this.computedStyleMetadata.set(element, {
1064
- timestamp: Date.now(),
1065
- lastAccessed: Date.now()
1066
- });
1067
- }
1068
- &nbsp;
1069
- /**
1070
- * Private method to evict entries from main cache
1071
- * @private
1072
- */
1073
- _evictFromCache() {
1074
- let oldestKey = null;
1075
- let oldestTime = Infinity;
1076
- &nbsp;
1077
- for (const [key, metadata] of this.cacheMetadata) {
1078
- const timeToCompare = this.options.evictionStrategy === 'lru'
1079
- ? metadata.lastAccessed
1080
- : metadata.timestamp;
1081
- &nbsp;
1082
- if (timeToCompare &lt; oldestTime) {
1083
- oldestTime = timeToCompare;
1084
- oldestKey = key;
1085
- }
1086
- }
1087
- &nbsp;
1088
- if (oldestKey !== null) {
1089
- this.cache.delete(oldestKey);
1090
- this.cacheMetadata.delete(oldestKey);
1091
- this.stats.evictions++;
1092
- }
1093
- }
1094
- &nbsp;
1095
- /**
1096
- * Private method to evict entries from computed style cache
1097
- * @private
1098
- */
1099
- _evictFromComputedStyleCache() {
1100
- let oldestElement = null;
1101
- let oldestTime = Infinity;
1102
- &nbsp;
1103
- for (const [element, metadata] of this.computedStyleMetadata) {
1104
- const timeToCompare = this.options.evictionStrategy === 'lru'
1105
- <span class="branch-0 cbranch-no" title="branch not covered" > ? metadata.lastAccessed </span>
1106
- : metadata.timestamp;
1107
- &nbsp;
1108
- if (timeToCompare &lt; oldestTime) {
1109
- oldestTime = timeToCompare;
1110
- oldestElement = element;
1111
- }
1112
- }
1113
- &nbsp;
1114
- if (oldestElement !== null) {
1115
- this.computedStyleCache.delete(oldestElement);
1116
- this.computedStyleMetadata.delete(oldestElement);
1117
- this.stats.evictions++;
1118
- }
1119
- }
1120
- &nbsp;
1121
- /**
1122
- * Private method to create mock computed style
1123
- * @private
1124
- */
1125
- _createMockComputedStyle(element) {
1126
- return {
1127
- backgroundColor: element.style?.backgroundColor || 'rgba(0, 0, 0, 0)',
1128
- color: element.style?.color || 'rgb(0, 0, 0)',
1129
- display: element.style?.display || 'block',
1130
- visibility: element.style?.visibility || 'visible',
1131
- opacity: element.style?.opacity || '1',
1132
- getPropertyValue: (prop) =&gt; element.style?.[prop] <span class="branch-0 cbranch-no" title="branch not covered" >|| '',</span>
1133
- };
1134
- }
1135
- }
1136
- &nbsp;
1137
- export default QueryCache;</pre></td></tr></table></pre>
1138
-
1139
- <div class='push'></div><!-- for sticky footer -->
1140
- </div><!-- /wrapper -->
1141
- <div class='footer quiet pad2 space-top1 center small'>
1142
- Code coverage generated by
1143
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1144
- at 2025-06-23T19:41:12.391Z
1145
- </div>
1146
- <script src="../../prettify.js"></script>
1147
- <script>
1148
- window.onload = function () {
1149
- prettyPrint();
1150
- };
1151
- </script>
1152
- <script src="../../sorter.js"></script>
1153
- <script src="../../block-navigation.js"></script>
1154
- </body>
1155
- </html>
1156
-