@openreplay/tracker 9.0.8 → 9.0.10

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 (79) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/cjs/app/index.js +1 -1
  3. package/cjs/index.js +1 -1
  4. package/cjs/modules/attributeSender.js +10 -8
  5. package/cjs/modules/timing.d.ts +1 -0
  6. package/cjs/modules/timing.js +7 -0
  7. package/coverage/clover.xml +3426 -0
  8. package/coverage/coverage-final.json +50 -0
  9. package/coverage/lcov-report/base.css +224 -0
  10. package/coverage/lcov-report/block-navigation.js +87 -0
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +206 -0
  13. package/coverage/lcov-report/main/app/guards.ts.html +229 -0
  14. package/coverage/lcov-report/main/app/index.html +221 -0
  15. package/coverage/lcov-report/main/app/index.ts.html +2182 -0
  16. package/coverage/lcov-report/main/app/logger.ts.html +277 -0
  17. package/coverage/lcov-report/main/app/messages.gen.ts.html +2827 -0
  18. package/coverage/lcov-report/main/app/nodes.ts.html +385 -0
  19. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +148 -0
  20. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +289 -0
  21. package/coverage/lcov-report/main/app/observer/index.html +161 -0
  22. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +142 -0
  23. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +538 -0
  24. package/coverage/lcov-report/main/app/sanitizer.ts.html +394 -0
  25. package/coverage/lcov-report/main/app/session.ts.html +601 -0
  26. package/coverage/lcov-report/main/app/ticker.ts.html +250 -0
  27. package/coverage/lcov-report/main/index.html +131 -0
  28. package/coverage/lcov-report/main/index.ts.html +1213 -0
  29. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +391 -0
  30. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +1027 -0
  31. package/coverage/lcov-report/main/modules/Network/index.html +191 -0
  32. package/coverage/lcov-report/main/modules/Network/index.ts.html +244 -0
  33. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +385 -0
  34. package/coverage/lcov-report/main/modules/Network/utils.ts.html +700 -0
  35. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +850 -0
  36. package/coverage/lcov-report/main/modules/attributeSender.ts.html +232 -0
  37. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +709 -0
  38. package/coverage/lcov-report/main/modules/connection.ts.html +160 -0
  39. package/coverage/lcov-report/main/modules/console.ts.html +541 -0
  40. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +559 -0
  41. package/coverage/lcov-report/main/modules/cssrules.ts.html +418 -0
  42. package/coverage/lcov-report/main/modules/exception.ts.html +385 -0
  43. package/coverage/lcov-report/main/modules/featureFlags.ts.html +412 -0
  44. package/coverage/lcov-report/main/modules/focus.ts.html +220 -0
  45. package/coverage/lcov-report/main/modules/fonts.ts.html +289 -0
  46. package/coverage/lcov-report/main/modules/img.ts.html +433 -0
  47. package/coverage/lcov-report/main/modules/index.html +401 -0
  48. package/coverage/lcov-report/main/modules/input.ts.html +826 -0
  49. package/coverage/lcov-report/main/modules/mouse.ts.html +826 -0
  50. package/coverage/lcov-report/main/modules/network.ts.html +1123 -0
  51. package/coverage/lcov-report/main/modules/performance.ts.html +367 -0
  52. package/coverage/lcov-report/main/modules/scroll.ts.html +364 -0
  53. package/coverage/lcov-report/main/modules/selection.ts.html +202 -0
  54. package/coverage/lcov-report/main/modules/tabs.ts.html +124 -0
  55. package/coverage/lcov-report/main/modules/timing.ts.html +841 -0
  56. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +232 -0
  57. package/coverage/lcov-report/main/modules/userTesting/index.html +161 -0
  58. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +1210 -0
  59. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +361 -0
  60. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +865 -0
  61. package/coverage/lcov-report/main/modules/viewport.ts.html +250 -0
  62. package/coverage/lcov-report/main/utils.ts.html +406 -0
  63. package/coverage/lcov-report/prettify.css +1 -0
  64. package/coverage/lcov-report/prettify.js +2 -0
  65. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  66. package/coverage/lcov-report/sorter.js +196 -0
  67. package/coverage/lcov-report/webworker/BatchWriter.ts.html +481 -0
  68. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +961 -0
  69. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +436 -0
  70. package/coverage/lcov-report/webworker/QueueSender.ts.html +505 -0
  71. package/coverage/lcov-report/webworker/index.html +176 -0
  72. package/coverage/lcov-report/webworker/index.ts.html +628 -0
  73. package/coverage/lcov.info +6631 -0
  74. package/lib/app/index.js +1 -1
  75. package/lib/index.js +1 -1
  76. package/lib/modules/attributeSender.js +10 -8
  77. package/lib/modules/timing.d.ts +1 -0
  78. package/lib/modules/timing.js +7 -0
  79. package/package.json +1 -1
@@ -0,0 +1,1210 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for main/modules/userTesting/index.ts</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">main/modules/userTesting</a> index.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/184</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/32</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/27</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/177</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 oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></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>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-no">&nbsp;</span>
476
+ <span class="cline-any cline-no">&nbsp;</span>
477
+ <span class="cline-any cline-no">&nbsp;</span>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
+ <span class="cline-any cline-no">&nbsp;</span>
483
+ <span class="cline-any cline-no">&nbsp;</span>
484
+ <span class="cline-any cline-no">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
492
+ <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-no">&nbsp;</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-no">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-no">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-neutral">&nbsp;</span>
696
+ <span class="cline-any cline-neutral">&nbsp;</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
708
+ <span class="cline-any cline-no">&nbsp;</span>
709
+ <span class="cline-any cline-no">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-no">&nbsp;</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-no">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import App from '../../app/index.js'
817
+ <span class="cstat-no" title="statement not covered" >import * as styles from './styles.js'</span>
818
+ <span class="cstat-no" title="statement not covered" >import Recorder, { Quality } from './recorder.js'</span>
819
+ <span class="cstat-no" title="statement not covered" >import attachDND from './dnd.js'</span>
820
+ &nbsp;
821
+ function <span class="fstat-no" title="function not covered" >createElement(</span>
822
+ tag: string,
823
+ className: string,
824
+ styles: any,
825
+ textContent?: string,
826
+ id?: string,
827
+ ) {
828
+ const element = <span class="cstat-no" title="statement not covered" >document.createElement(tag)</span>
829
+ <span class="cstat-no" title="statement not covered" > element.className = className</span>
830
+ <span class="cstat-no" title="statement not covered" > Object.assign(element.style, styles)</span>
831
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (textContent) {</span>
832
+ <span class="cstat-no" title="statement not covered" > element.textContent = textContent</span>
833
+ }
834
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {</span>
835
+ <span class="cstat-no" title="statement not covered" > element.id = id</span>
836
+ }
837
+ <span class="cstat-no" title="statement not covered" > return element</span>
838
+ }
839
+ &nbsp;
840
+ <span class="cstat-no" title="statement not covered" >export default class U</span>serTestManager {
841
+ private readonly userRecorder: Recorder
842
+ private readonly <span class="cstat-no" title="statement not covered" >bg = createElement('div', 'bg', styles.bgStyle, undefined, '__or_ut_bg')</span>
843
+ private readonly <span class="cstat-no" title="statement not covered" >container = createElement(</span>
844
+ 'div',
845
+ 'container',
846
+ styles.containerStyle,
847
+ undefined,
848
+ '__or_ut_ct',
849
+ )
850
+ private <span class="cstat-no" title="statement not covered" >widgetGuidelinesVisible = true</span>
851
+ private <span class="cstat-no" title="statement not covered" >widgetTasksVisible = false</span>
852
+ private <span class="cstat-no" title="statement not covered" >widgetVisible = true</span>
853
+ private <span class="cstat-no" title="statement not covered" >descriptionSection: HTMLElement | null = null</span>
854
+ private <span class="cstat-no" title="statement not covered" >taskSection: HTMLElement | null = null</span>
855
+ private <span class="cstat-no" title="statement not covered" >endSection: HTMLElement | null = null</span>
856
+ private <span class="cstat-no" title="statement not covered" >stopButton: HTMLElement | null = null</span>
857
+ private <span class="cstat-no" title="statement not covered" >initialX = 0</span>
858
+ private <span class="cstat-no" title="statement not covered" >initialY = 0</span>
859
+ private <span class="cstat-no" title="statement not covered" >currentX = 0</span>
860
+ private <span class="cstat-no" title="statement not covered" >currentY = 0</span>
861
+ &nbsp;
862
+ <span class="fstat-no" title="function not covered" > constructor(a</span>pp: App) {
863
+ <span class="cstat-no" title="statement not covered" > this.userRecorder = new Recorder(app)</span>
864
+ }
865
+ &nbsp;
866
+ <span class="cstat-no" title="statement not covered" > hideTaskSection = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >false</span></span>
867
+ <span class="cstat-no" title="statement not covered" > showTaskSection = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >true</span></span>
868
+ <span class="cstat-no" title="statement not covered" > collapseWidget = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >false</span></span>
869
+ &nbsp;
870
+ <span class="fstat-no" title="function not covered" > createGreeting(</span>title: string, micRequired: boolean, cameraRequired: boolean) {
871
+ const titleElement = <span class="cstat-no" title="statement not covered" >createElement('div', 'title', styles.titleStyle, title)</span>
872
+ const descriptionElement = <span class="cstat-no" title="statement not covered" >createElement(</span>
873
+ 'div',
874
+ 'description',
875
+ styles.descriptionStyle,
876
+ 'Welcome, this session will be recorded. You have complete control, and can stop the session at any time.',
877
+ )
878
+ const noticeElement = <span class="cstat-no" title="statement not covered" >createElement(</span>
879
+ 'div',
880
+ 'notice',
881
+ styles.noticeStyle,
882
+ 'Please note that your audio, video, and screen will be recorded for research purposes during this test.',
883
+ )
884
+ const buttonElement = <span class="cstat-no" title="statement not covered" >createElement(</span>
885
+ 'div',
886
+ 'button',
887
+ styles.buttonStyle,
888
+ 'Read guidelines to begin',
889
+ )
890
+ &nbsp;
891
+ <span class="cstat-no" title="statement not covered" > buttonElement.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
892
+ <span class="cstat-no" title="statement not covered" > this.container.innerHTML = ''</span>
893
+ <span class="cstat-no" title="statement not covered" > void this.userRecorder.startRecording(30, Quality.Standard)</span>
894
+ <span class="cstat-no" title="statement not covered" > this.showWidget(</span>
895
+ [
896
+ 'Please be honest and open with your feedback. We want to hear your thoughts, both positive and negative, about your experience using Product Name.',
897
+ 'Feel free to think out loud during the test. Sharing your thought process as you complete tasks will help us understand your perspective better.',
898
+ ],
899
+ [
900
+ {
901
+ title: 'Task 1',
902
+ description: 'This is a test description here',
903
+ },
904
+ {
905
+ title: 'Task 2',
906
+ description:
907
+ 'This is a test description here there and not only there, more stuff to come',
908
+ },
909
+ ],
910
+ )
911
+ }
912
+ &nbsp;
913
+ <span class="cstat-no" title="statement not covered" > this.container.append(titleElement, descriptionElement, noticeElement, buttonElement)</span>
914
+ <span class="cstat-no" title="statement not covered" > this.bg.appendChild(this.container)</span>
915
+ <span class="cstat-no" title="statement not covered" > document.body.appendChild(this.bg)</span>
916
+ }
917
+ &nbsp;
918
+ <span class="fstat-no" title="function not covered" > showWidget(</span>
919
+ description: string[],
920
+ tasks: {
921
+ title: string
922
+ description: string
923
+ }[],
924
+ ) {
925
+ <span class="cstat-no" title="statement not covered" > this.container.innerHTML = ''</span>
926
+ <span class="cstat-no" title="statement not covered" > Object.assign(this.bg.style, {</span>
927
+ position: 'absolute',
928
+ right: '8px',
929
+ left: 'unset',
930
+ width: 'fit-content',
931
+ top: '8px',
932
+ height: 'fit-content',
933
+ background: 'unset',
934
+ display: 'unset',
935
+ alignItems: 'unset',
936
+ justifyContent: 'unset',
937
+ })
938
+ // Create title section
939
+ const titleSection = <span class="cstat-no" title="statement not covered" >this.createTitleSection()</span>
940
+ <span class="cstat-no" title="statement not covered" > Object.assign(this.container.style, styles.containerWidgetStyle)</span>
941
+ const descriptionSection = <span class="cstat-no" title="statement not covered" >this.createDescriptionSection(description)</span>
942
+ const tasksSection = <span class="cstat-no" title="statement not covered" >this.createTasksSection(tasks)</span>
943
+ const stopButton = <span class="cstat-no" title="statement not covered" >createElement('div', 'stop_bn_or', styles.stopWidgetStyle, 'Abort Session')</span>
944
+ &nbsp;
945
+ <span class="cstat-no" title="statement not covered" > this.container.append(titleSection, descriptionSection, tasksSection, stopButton)</span>
946
+ <span class="cstat-no" title="statement not covered" > this.taskSection = tasksSection</span>
947
+ <span class="cstat-no" title="statement not covered" > this.descriptionSection = descriptionSection</span>
948
+ <span class="cstat-no" title="statement not covered" > this.stopButton = stopButton</span>
949
+ <span class="cstat-no" title="statement not covered" > stopButton.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
950
+ <span class="cstat-no" title="statement not covered" > this.userRecorder.discard()</span>
951
+ <span class="cstat-no" title="statement not covered" > document.body.removeChild(this.bg)</span>
952
+ }
953
+ <span class="cstat-no" title="statement not covered" > this.hideTaskSection()</span>
954
+ }
955
+ &nbsp;
956
+ <span class="fstat-no" title="function not covered" > createTitleSection(</span>) {
957
+ const title = <span class="cstat-no" title="statement not covered" >createElement('div', 'title', styles.titleWidgetStyle)</span>
958
+ const leftIcon = <span class="cstat-no" title="statement not covered" >createElement('div', 'left_icon', {}, '(icn)')</span>
959
+ const titleText = <span class="cstat-no" title="statement not covered" >createElement('div', 'title_text', {}, 'Test name goes here')</span>
960
+ const rightIcon = <span class="cstat-no" title="statement not covered" >createElement(</span>
961
+ 'div',
962
+ 'right_icon',
963
+ { marginLeft: 'auto', cursor: 'pointer' },
964
+ '(icn)',
965
+ )
966
+ &nbsp;
967
+ <span class="cstat-no" title="statement not covered" > title.append(leftIcon, titleText, rightIcon)</span>
968
+ &nbsp;
969
+ const toggleWidget = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(i</span>sVisible: boolean) =&gt; {</span>
970
+ <span class="cstat-no" title="statement not covered" > this.widgetVisible = isVisible</span>
971
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
972
+ this.container.style,
973
+ this.widgetVisible
974
+ ? styles.containerWidgetStyle
975
+ : { border: 'none', background: 'none', padding: 0 },
976
+ )
977
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.taskSection) {</span>
978
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
979
+ this.taskSection.style,
980
+ this.widgetVisible ? styles.descriptionWidgetStyle : { display: 'none' },
981
+ )
982
+ }
983
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.descriptionSection) {</span>
984
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
985
+ this.descriptionSection.style,
986
+ this.widgetVisible ? styles.descriptionWidgetStyle : { display: 'none' },
987
+ )
988
+ }
989
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.endSection) {</span>
990
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
991
+ this.endSection.style,
992
+ this.widgetVisible ? styles.descriptionWidgetStyle : { display: 'none' },
993
+ )
994
+ }
995
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.stopButton) {</span>
996
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
997
+ this.stopButton.style,
998
+ this.widgetVisible ? styles.stopWidgetStyle : { display: 'none' },
999
+ )
1000
+ }
1001
+ <span class="cstat-no" title="statement not covered" > return isVisible</span>
1002
+ }
1003
+ &nbsp;
1004
+ <span class="cstat-no" title="statement not covered" > rightIcon.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >toggleWidget(!this.widgetVisible)</span></span>
1005
+ <span class="cstat-no" title="statement not covered" > attachDND(this.bg, leftIcon)</span>
1006
+ &nbsp;
1007
+ <span class="cstat-no" title="statement not covered" > this.collapseWidget = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >toggleWidget(false)</span></span>
1008
+ <span class="cstat-no" title="statement not covered" > return title</span>
1009
+ }
1010
+ &nbsp;
1011
+ <span class="fstat-no" title="function not covered" > createDescriptionSection(</span>description: string[]) {
1012
+ const section = <span class="cstat-no" title="statement not covered" >createElement('div', 'description_section_or', styles.descriptionWidgetStyle)</span>
1013
+ const titleContainer = <span class="cstat-no" title="statement not covered" >createElement('div', 'description_s_title_or', styles.sectionTitleStyle)</span>
1014
+ const title = <span class="cstat-no" title="statement not covered" >createElement('div', 'title', {}, 'Introduction &amp; Guidelines')</span>
1015
+ const icon = <span class="cstat-no" title="statement not covered" >createElement('div', 'icon', styles.symbolIcon, '-')</span>
1016
+ const content = <span class="cstat-no" title="statement not covered" >createElement('div', 'content', styles.contentStyle)</span>
1017
+ const ul = <span class="cstat-no" title="statement not covered" >document.createElement('ul')</span>
1018
+ <span class="cstat-no" title="statement not covered" > ul.innerHTML = description.map(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >`&lt;li&gt;${item}&lt;/li&gt;`)</span>.join('')</span>
1019
+ const button = <span class="cstat-no" title="statement not covered" >createElement('div', 'button_begin_or', styles.buttonWidgetStyle, 'Begin Test')</span>
1020
+ &nbsp;
1021
+ <span class="cstat-no" title="statement not covered" > titleContainer.append(title, icon)</span>
1022
+ <span class="cstat-no" title="statement not covered" > content.append(ul, button)</span>
1023
+ <span class="cstat-no" title="statement not covered" > section.append(titleContainer, content)</span>
1024
+ &nbsp;
1025
+ const toggleDescriptionVisibility = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1026
+ <span class="cstat-no" title="statement not covered" > this.widgetGuidelinesVisible = !this.widgetGuidelinesVisible</span>
1027
+ <span class="cstat-no" title="statement not covered" > icon.textContent = this.widgetGuidelinesVisible ? '-' : '+'</span>
1028
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
1029
+ content.style,
1030
+ this.widgetGuidelinesVisible ? styles.contentStyle : { display: 'none' },
1031
+ )
1032
+ }
1033
+ &nbsp;
1034
+ <span class="cstat-no" title="statement not covered" > titleContainer.onclick = toggleDescriptionVisibility</span>
1035
+ <span class="cstat-no" title="statement not covered" > button.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1036
+ <span class="cstat-no" title="statement not covered" > toggleDescriptionVisibility()</span>
1037
+ <span class="cstat-no" title="statement not covered" > this.showTaskSection()</span>
1038
+ }
1039
+ &nbsp;
1040
+ <span class="cstat-no" title="statement not covered" > return section</span>
1041
+ }
1042
+ &nbsp;
1043
+ <span class="fstat-no" title="function not covered" > createTasksSection(</span>
1044
+ tasks: {
1045
+ title: string
1046
+ description: string
1047
+ }[],
1048
+ ) {
1049
+ let currentTaskIndex = <span class="cstat-no" title="statement not covered" >0</span>
1050
+ const section = <span class="cstat-no" title="statement not covered" >createElement('div', 'task_section_or', styles.descriptionWidgetStyle)</span>
1051
+ const titleContainer = <span class="cstat-no" title="statement not covered" >createElement('div', 'description_t_title_or', styles.sectionTitleStyle)</span>
1052
+ const title = <span class="cstat-no" title="statement not covered" >createElement('div', 'title', {}, 'Tasks')</span>
1053
+ const icon = <span class="cstat-no" title="statement not covered" >createElement('div', 'icon', styles.symbolIcon, '-')</span>
1054
+ const content = <span class="cstat-no" title="statement not covered" >createElement('div', 'content', styles.contentStyle)</span>
1055
+ const pagination = <span class="cstat-no" title="statement not covered" >createElement('div', 'pagination', styles.paginationStyle)</span>
1056
+ const leftArrow = <span class="cstat-no" title="statement not covered" >createElement('span', 'leftArrow', {}, '&lt;')</span>
1057
+ const rightArrow = <span class="cstat-no" title="statement not covered" >createElement('span', 'rightArrow', {}, '&gt;')</span>
1058
+ const taskCard = <span class="cstat-no" title="statement not covered" >createElement('div', 'taskCard', styles.taskDescriptionCard)</span>
1059
+ const taskText = <span class="cstat-no" title="statement not covered" >createElement('div', 'taskText', styles.taskTextStyle)</span>
1060
+ const taskDescription = <span class="cstat-no" title="statement not covered" >createElement('div', 'taskDescription', styles.taskDescriptionStyle)</span>
1061
+ const taskButtons = <span class="cstat-no" title="statement not covered" >createElement('div', 'taskButtons', styles.taskButtonsRow)</span>
1062
+ const closePanelButton = <span class="cstat-no" title="statement not covered" >createElement(</span>
1063
+ 'div',
1064
+ 'closePanelButton',
1065
+ styles.taskButtonStyle,
1066
+ 'Collapse panel',
1067
+ )
1068
+ const nextButton = <span class="cstat-no" title="statement not covered" >createElement(</span>
1069
+ 'div',
1070
+ 'nextButton',
1071
+ styles.taskButtonBorderedStyle,
1072
+ 'Done, next',
1073
+ )
1074
+ &nbsp;
1075
+ <span class="cstat-no" title="statement not covered" > titleContainer.append(title, icon)</span>
1076
+ <span class="cstat-no" title="statement not covered" > taskCard.append(taskText, taskDescription)</span>
1077
+ <span class="cstat-no" title="statement not covered" > taskButtons.append(closePanelButton, nextButton)</span>
1078
+ <span class="cstat-no" title="statement not covered" > content.append(pagination, taskCard, taskButtons)</span>
1079
+ <span class="cstat-no" title="statement not covered" > section.append(titleContainer, content)</span>
1080
+ &nbsp;
1081
+ const updateTaskContent = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1082
+ const task = <span class="cstat-no" title="statement not covered" >tasks[currentTaskIndex]</span>
1083
+ <span class="cstat-no" title="statement not covered" > taskText.textContent = task.title</span>
1084
+ <span class="cstat-no" title="statement not covered" > taskDescription.textContent = task.description</span>
1085
+ }
1086
+ &nbsp;
1087
+ <span class="cstat-no" title="statement not covered" > pagination.appendChild(leftArrow)</span>
1088
+ <span class="cstat-no" title="statement not covered" > tasks.forEach(<span class="fstat-no" title="function not covered" >(_</span>, index) =&gt; {</span>
1089
+ const pageNumber = <span class="cstat-no" title="statement not covered" >createElement('span', `or_task_${index}`, {}, (index + 1).toString())</span>
1090
+ <span class="cstat-no" title="statement not covered" > pageNumber.id = `or_task_${index}`</span>
1091
+ <span class="cstat-no" title="statement not covered" > pagination.append(pageNumber)</span>
1092
+ })
1093
+ <span class="cstat-no" title="statement not covered" > pagination.appendChild(rightArrow)</span>
1094
+ &nbsp;
1095
+ const toggleTasksVisibility = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1096
+ <span class="cstat-no" title="statement not covered" > this.widgetTasksVisible = !this.widgetTasksVisible</span>
1097
+ <span class="cstat-no" title="statement not covered" > icon.textContent = this.widgetTasksVisible ? '-' : '+'</span>
1098
+ <span class="cstat-no" title="statement not covered" > Object.assign(</span>
1099
+ content.style,
1100
+ this.widgetTasksVisible ? styles.contentStyle : { display: 'none' },
1101
+ )
1102
+ }
1103
+ <span class="cstat-no" title="statement not covered" > this.hideTaskSection = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1104
+ <span class="cstat-no" title="statement not covered" > icon.textContent = '+'</span>
1105
+ <span class="cstat-no" title="statement not covered" > Object.assign(content.style, {</span>
1106
+ display: 'none',
1107
+ })
1108
+ <span class="cstat-no" title="statement not covered" > this.widgetTasksVisible = false</span>
1109
+ <span class="cstat-no" title="statement not covered" > return false</span>
1110
+ }
1111
+ <span class="cstat-no" title="statement not covered" > this.showTaskSection = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1112
+ <span class="cstat-no" title="statement not covered" > icon.textContent = '-'</span>
1113
+ <span class="cstat-no" title="statement not covered" > Object.assign(content.style, styles.contentStyle)</span>
1114
+ <span class="cstat-no" title="statement not covered" > this.widgetTasksVisible = true</span>
1115
+ <span class="cstat-no" title="statement not covered" > return true</span>
1116
+ }
1117
+ &nbsp;
1118
+ <span class="cstat-no" title="statement not covered" > titleContainer.onclick = toggleTasksVisibility</span>
1119
+ <span class="cstat-no" title="statement not covered" > closePanelButton.onclick = this.collapseWidget</span>
1120
+ &nbsp;
1121
+ <span class="cstat-no" title="statement not covered" > nextButton.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1122
+ <span class="cstat-no" title="statement not covered" > if (currentTaskIndex &lt; tasks.length - 1) {</span>
1123
+ <span class="cstat-no" title="statement not covered" > currentTaskIndex++</span>
1124
+ <span class="cstat-no" title="statement not covered" > updateTaskContent()</span>
1125
+ const activeTaskEl = <span class="cstat-no" title="statement not covered" >document.getElementById(`or_task_${currentTaskIndex}`)</span>
1126
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (activeTaskEl) {</span>
1127
+ <span class="cstat-no" title="statement not covered" > Object.assign(activeTaskEl.style, styles.taskNumberActive)</span>
1128
+ }
1129
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; currentTaskIndex; i++) {</span>
1130
+ const taskEl = <span class="cstat-no" title="statement not covered" >document.getElementById(`or_task_${i}`)</span>
1131
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (taskEl) {</span>
1132
+ <span class="cstat-no" title="statement not covered" > Object.assign(taskEl.style, styles.taskNumberDone)</span>
1133
+ }
1134
+ }
1135
+ } else {
1136
+ <span class="cstat-no" title="statement not covered" > this.showEndSection()</span>
1137
+ }
1138
+ }
1139
+ &nbsp;
1140
+ <span class="cstat-no" title="statement not covered" > updateTaskContent()</span>
1141
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1142
+ const firstTaskEl = <span class="cstat-no" title="statement not covered" >document.getElementById('or_task_0')</span>
1143
+ <span class="cstat-no" title="statement not covered" > console.log(firstTaskEl, styles.taskNumberActive)</span>
1144
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (firstTaskEl) {</span>
1145
+ <span class="cstat-no" title="statement not covered" > Object.assign(firstTaskEl.style, styles.taskNumberActive)</span>
1146
+ }
1147
+ }, 1)
1148
+ <span class="cstat-no" title="statement not covered" > return section</span>
1149
+ }
1150
+ &nbsp;
1151
+ <span class="fstat-no" title="function not covered" > showEndSection(</span>) {
1152
+ <span class="cstat-no" title="statement not covered" > void this.userRecorder.saveToFile()</span>
1153
+ const section = <span class="cstat-no" title="statement not covered" >createElement('div', 'end_section_or', styles.endSectionStyle)</span>
1154
+ const title = <span class="cstat-no" title="statement not covered" >createElement(</span>
1155
+ 'div',
1156
+ 'end_title_or',
1157
+ {
1158
+ fontSize: '1.25rem',
1159
+ fontWeight: '500',
1160
+ },
1161
+ 'Thank you! 👍',
1162
+ )
1163
+ const description = <span class="cstat-no" title="statement not covered" >createElement(</span>
1164
+ 'div',
1165
+ 'end_description_or',
1166
+ {},
1167
+ 'Thank you for participating in our user test. Your feedback has been captured and will be used to enhance our website. \n' +
1168
+ '\n' +
1169
+ 'We appreciate your time and valuable input.',
1170
+ )
1171
+ const button = <span class="cstat-no" title="statement not covered" >createElement('div', 'end_button_or', styles.buttonWidgetStyle, 'End Session')</span>
1172
+ &nbsp;
1173
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.taskSection) {</span>
1174
+ <span class="cstat-no" title="statement not covered" > this.container.removeChild(this.taskSection)</span>
1175
+ }
1176
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.descriptionSection) {</span>
1177
+ <span class="cstat-no" title="statement not covered" > this.container.removeChild(this.descriptionSection)</span>
1178
+ }
1179
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.stopButton) {</span>
1180
+ <span class="cstat-no" title="statement not covered" > this.container.removeChild(this.stopButton)</span>
1181
+ }
1182
+ &nbsp;
1183
+ <span class="cstat-no" title="statement not covered" > button.onclick = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1184
+ <span class="cstat-no" title="statement not covered" > document.body.removeChild(this.bg)</span>
1185
+ }
1186
+ <span class="cstat-no" title="statement not covered" > section.append(title, description, button)</span>
1187
+ <span class="cstat-no" title="statement not covered" > this.endSection = section</span>
1188
+ <span class="cstat-no" title="statement not covered" > this.container.append(section)</span>
1189
+ }
1190
+ }
1191
+ &nbsp;</pre></td></tr></table></pre>
1192
+
1193
+ <div class='push'></div><!-- for sticky footer -->
1194
+ </div><!-- /wrapper -->
1195
+ <div class='footer quiet pad2 space-top1 center small'>
1196
+ Code coverage generated by
1197
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1198
+ at 2023-10-17T13:37:58.420Z
1199
+ </div>
1200
+ <script src="../../../prettify.js"></script>
1201
+ <script>
1202
+ window.onload = function () {
1203
+ prettyPrint();
1204
+ };
1205
+ </script>
1206
+ <script src="../../../sorter.js"></script>
1207
+ <script src="../../../block-navigation.js"></script>
1208
+ </body>
1209
+ </html>
1210
+