@saasquatch/squatch-js 2.6.0-8 → 2.6.0

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 (61) hide show
  1. package/.github/workflows/size-limit.yml +14 -14
  2. package/.github/workflows/static.yml +89 -89
  3. package/CHANGELOG.md +388 -326
  4. package/LICENSE +20 -20
  5. package/README.md +259 -208
  6. package/babel.config.js +7 -7
  7. package/cucumber.js +45 -45
  8. package/demo/sandbox.ts +124 -124
  9. package/demo/toolbar.tsx +526 -526
  10. package/dist/api/WidgetApi.d.ts +1 -0
  11. package/dist/async.d.ts +2 -0
  12. package/dist/globals.d.ts +4 -0
  13. package/dist/squatch.esm.js +80 -49
  14. package/dist/squatch.esm.js.map +1 -1
  15. package/dist/squatch.js +80 -49
  16. package/dist/squatch.js.map +1 -1
  17. package/dist/squatch.min.js +1 -1
  18. package/dist/squatch.min.js.br +0 -0
  19. package/dist/squatch.min.js.map +1 -1
  20. package/dist/squatch.modern.js +1 -1
  21. package/dist/squatch.modern.js.map +1 -1
  22. package/dist/stats.html +1 -1
  23. package/dist/utils/decodeJwt.d.ts +1 -0
  24. package/dist/utils/validate.d.ts +0 -2
  25. package/dist/widgets/PopupWidget.d.ts +2 -2
  26. package/dist/widgets/declarative/DeclarativeWidget.d.ts +5 -0
  27. package/jest.config.ts +200 -200
  28. package/package.json +123 -123
  29. package/tsconfig.json +23 -23
  30. package/coverage/clover.xml +0 -865
  31. package/coverage/coverage-final.json +0 -20
  32. package/coverage/lcov-report/DeclarativeWidget.ts.html +0 -790
  33. package/coverage/lcov-report/WidgetApi.ts.html +0 -631
  34. package/coverage/lcov-report/Widgets.ts.html +0 -1105
  35. package/coverage/lcov-report/api/AnalyticsApi.ts.html +0 -304
  36. package/coverage/lcov-report/api/EventsApi.ts.html +0 -352
  37. package/coverage/lcov-report/api/WidgetApi.ts.html +0 -658
  38. package/coverage/lcov-report/api/graphql.ts.html +0 -130
  39. package/coverage/lcov-report/base.css +0 -224
  40. package/coverage/lcov-report/block-navigation.js +0 -87
  41. package/coverage/lcov-report/favicon.png +0 -0
  42. package/coverage/lcov-report/prettify.css +0 -1
  43. package/coverage/lcov-report/prettify.js +0 -2
  44. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  45. package/coverage/lcov-report/sorter.js +0 -196
  46. package/coverage/lcov-report/squatch.ts.html +0 -721
  47. package/coverage/lcov-report/utils/cookieUtils.ts.html +0 -415
  48. package/coverage/lcov-report/utils/decodeUserJwt.ts.html +0 -133
  49. package/coverage/lcov-report/utils/domready.ts.html +0 -160
  50. package/coverage/lcov-report/utils/io.ts.html +0 -400
  51. package/coverage/lcov-report/utils/utmUtils.ts.html +0 -277
  52. package/coverage/lcov-report/utils/validate.ts.html +0 -268
  53. package/coverage/lcov-report/validate.ts.html +0 -268
  54. package/coverage/lcov-report/widgets/EmbedWidget.ts.html +0 -481
  55. package/coverage/lcov-report/widgets/PopupWidget.ts.html +0 -685
  56. package/coverage/lcov-report/widgets/Widget.ts.html +0 -1159
  57. package/coverage/lcov-report/widgets/Widgets.ts.html +0 -1102
  58. package/coverage/lcov-report/widgets/declarative/DeclarativeWidget.ts.html +0 -790
  59. package/coverage/lcov-report/widgets/declarative/DeclarativeWidgets.ts.html +0 -388
  60. package/coverage/lcov.info +0 -1593
  61. package/stats.json +0 -1
@@ -1,1102 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for widgets/Widgets.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">widgets</a> Widgets.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>100/100</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>36/36</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'>11/11</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>97/97</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 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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">4x</span>
406
- <span class="cline-any cline-yes">4x</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-yes">4x</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-yes">4x</span>
421
- <span class="cline-any cline-yes">4x</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-yes">4x</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-yes">4x</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-neutral">&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-yes">68x</span>
472
- <span class="cline-any cline-yes">67x</span>
473
- <span class="cline-any cline-yes">67x</span>
474
- <span class="cline-any cline-yes">67x</span>
475
- <span class="cline-any cline-yes">67x</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">2x</span>
496
- <span class="cline-any cline-yes">2x</span>
497
- <span class="cline-any cline-neutral">&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-yes">2x</span>
501
- <span class="cline-any cline-yes">2x</span>
502
- <span class="cline-any cline-yes">1x</span>
503
- <span class="cline-any cline-neutral">&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-neutral">&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-yes">1x</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">1x</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">1x</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-neutral">&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-yes">3x</span>
538
- <span class="cline-any cline-yes">3x</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-yes">3x</span>
541
- <span class="cline-any cline-yes">3x</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
551
- <span class="cline-any cline-yes">1x</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">6x</span>
567
- <span class="cline-any cline-yes">6x</span>
568
- <span class="cline-any cline-yes">2x</span>
569
- <span class="cline-any cline-yes">2x</span>
570
- <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">1x</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-yes">4x</span>
579
- <span class="cline-any cline-yes">1x</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">3x</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">3x</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">2x</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-yes">1x</span>
588
- <span class="cline-any cline-yes">1x</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-yes">2x</span>
592
- <span class="cline-any cline-yes">2x</span>
593
- <span class="cline-any cline-yes">1x</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-yes">1x</span>
596
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&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-yes">18x</span>
613
- <span class="cline-any cline-yes">18x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">17x</span>
617
- <span class="cline-any cline-yes">17x</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">17x</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-yes">17x</span>
629
- <span class="cline-any cline-yes">4x</span>
630
- <span class="cline-any cline-yes">4x</span>
631
- <span class="cline-any cline-yes">3x</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-yes">2x</span>
636
- <span class="cline-any cline-yes">2x</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-yes">1x</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">17x</span>
647
- <span class="cline-any cline-yes">5x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">5x</span>
650
- <span class="cline-any cline-yes">5x</span>
651
- <span class="cline-any cline-yes">4x</span>
652
- <span class="cline-any cline-yes">4x</span>
653
- <span class="cline-any cline-yes">3x</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">3x</span>
656
- <span class="cline-any cline-yes">2x</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-yes">1x</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&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-neutral">&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-yes">17x</span>
671
- <span class="cline-any cline-yes">2x</span>
672
- <span class="cline-any cline-yes">15x</span>
673
- <span class="cline-any cline-yes">5x</span>
674
- <span class="cline-any cline-yes">5x</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-yes">10x</span>
677
- <span class="cline-any cline-yes">10x</span>
678
- <span class="cline-any cline-yes">10x</span>
679
- <span class="cline-any cline-yes">10x</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-yes">17x</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">5x</span>
687
- <span class="cline-any cline-yes">5x</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-yes">5x</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-yes">2x</span>
694
- <span class="cline-any cline-yes">2x</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-yes">4x</span>
710
- <span class="cline-any cline-yes">4x</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-yes">4x</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">4x</span>
725
- <span class="cline-any cline-yes">1x</span>
726
- <span class="cline-any cline-yes">1x</span>
727
- <span class="cline-any cline-yes">3x</span>
728
- <span class="cline-any cline-yes">2x</span>
729
- <span class="cline-any cline-yes">2x</span>
730
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-yes">3x</span>
741
- <span class="cline-any cline-yes">3x</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { debug } from "debug";
745
- import WidgetApi from "../api/WidgetApi";
746
- import {
747
- ConfigOptions,
748
- EngagementMedium,
749
- WidgetConfig,
750
- WidgetContext,
751
- WidgetResult,
752
- WithRequired,
753
- } from "../types";
754
- import {
755
- validateConfig,
756
- validatePasswordlessConfig,
757
- validateWidgetConfig,
758
- } from "../utils/validate";
759
- import EmbedWidget from "./EmbedWidget";
760
- import PopupWidget from "./PopupWidget";
761
- import Widget, { Params } from "./Widget";
762
- &nbsp;
763
- const _log = debug("squatch-js:widgets");
764
- &nbsp;
765
- /**
766
- * `Widgets` is a factory for creating widgets. It's possible to build your own widgets using the
767
- * {@link WidgetApi} but most people will prefer to use these easy methods.
768
- * @class
769
- */
770
- export default class Widgets {
771
- /**
772
- * Instance of {@link WidgetApi}
773
- */
774
- api: WidgetApi;
775
- &nbsp;
776
- /**
777
- * Tenant alias of SaaSquatch tenant.
778
- */
779
- tenantAlias: string;
780
- &nbsp;
781
- /**
782
- * SaaSquatch domain for API requests.
783
- * @default "https://app.referralsaasquatch.com"
784
- */
785
- domain: string;
786
- &nbsp;
787
- /**
788
- * Hosted CDN for npm packages
789
- * @default "https://fast.ssqt.io/npm"
790
- */
791
- npmCdn: string;
792
- &nbsp;
793
- /**
794
- * Initialize a new {@link Widgets} instance.
795
- *
796
- * @param {ConfigOptions} config Config details
797
- *
798
- * @example &lt;caption&gt;Browser example&lt;/caption&gt;
799
- * var widgets = new squatch.Widgets({tenantAlias:'test_12b5bo1b25125'});
800
- *
801
- * @example &lt;caption&gt;Browserify/Webpack example&lt;/caption&gt;
802
- * var Widgets = require('@saasquatch/squatch-js').Widgets;
803
- * var widgets = new Widgets({tenantAlias:'test_12b5bo1b25125'});
804
- *
805
- * @example &lt;caption&gt;Babel+Browserify/Webpack example&lt;/caption&gt;
806
- * import {Widgets} from '@saasquatch/squatch-js';
807
- * let widgets = new Widgets({tenantAlias:'test_12b5bo1b25125'});
808
- */
809
- constructor(configin: ConfigOptions) {
810
- const config = validateConfig(configin);
811
- this.tenantAlias = config.tenantAlias;
812
- this.domain = config.domain;
813
- this.npmCdn = config.npmCdn;
814
- this.api = new WidgetApi(config);
815
- }
816
- &nbsp;
817
- /**
818
- * This function calls the {@link WidgetApi.upsertUser} method, and it renders
819
- * the widget if it is successful. Otherwise it shows the "error" widget.
820
- *
821
- * @param {Object} config Config details
822
- * @param {Object} config.user The user details
823
- * @param {string} config.user.id The user id
824
- * @param {string} config.user.accountId The user account id
825
- * @param {WidgetType} config.widgetType The content of the widget.
826
- * @param {EngagementMedium} config.engagementMedium How to display the widget.
827
- * @param {string} config.jwt the JSON Web Token (JWT) that is used to validate the data (can be disabled)
828
- * @param {HTMLElement | string | undefined} config.container Element to load the widget into
829
- * @param {string | undefined} config.trigger Trigger element for opening the popup widget
830
- *
831
- * @return {Promise&lt;WidgetResult&gt;} json object if true, with a Widget and user details.
832
- */
833
- async upsertUser(config: WithRequired&lt;WidgetConfig, "user"&gt;) {
834
- const raw = config as unknown;
835
- const clean = validateWidgetConfig(raw) as WithRequired&lt;
836
- WidgetConfig,
837
- "user"
838
- &gt;;
839
- try {
840
- const response = await this.api.upsertUser(clean);
841
- return {
842
- widget: this._renderWidget(response, clean, {
843
- type: "upsert",
844
- user: clean.user,
845
- engagementMedium: config.engagementMedium,
846
- container: config.container,
847
- trigger: config.trigger,
848
- }),
849
- user: response.user,
850
- };
851
- } catch (err) {
852
- _log(err);
853
- if (err.apiErrorCode) {
854
- this._renderErrorWidget(err, config.engagementMedium);
855
- }
856
- throw new Error(err);
857
- }
858
- }
859
- &nbsp;
860
- /**
861
- * This function calls the {@link WidgetApi.render} method, and it renders
862
- * the widget if it is successful. Otherwise it shows the "error" widget.
863
- *
864
- * @param {Object} config Config details
865
- * @param {Object} config.user The user details
866
- * @param {string} config.user.id The user id
867
- * @param {string} config.user.accountId The user account id
868
- * @param {WidgetType} config.widgetType The content of the widget.
869
- * @param {EngagementMedium} config.engagementMedium How to display the widget.
870
- * @param {string} config.jwt the JSON Web Token (JWT) that is used
871
- * to validate the data (can be disabled)
872
- *
873
- * @return {Promise&lt;WidgetResult&gt;} json object if true, with a Widget and user details.
874
- */
875
- async render(config: WidgetConfig): Promise&lt;WidgetResult | undefined&gt; {
876
- const raw = config as unknown;
877
- const clean = validatePasswordlessConfig(raw);
878
- &nbsp;
879
- try {
880
- const response = await this.api.render(clean);
881
- &nbsp;
882
- return {
883
- widget: this._renderWidget(response, clean, {
884
- type: "passwordless",
885
- engagementMedium: clean.engagementMedium,
886
- }),
887
- user: response.user,
888
- };
889
- } catch (err) {
890
- if (err.apiErrorCode) {
891
- this._renderErrorWidget(err, clean.engagementMedium);
892
- }
893
- throw new Error(err);
894
- }
895
- }
896
- &nbsp;
897
- /**
898
- * Autofills a referral code into an element when someone has been referred.
899
- * Uses {@link WidgetApi.squatchReferralCookie} behind the scenes.
900
- *
901
- * @param selector Element class/id selector, or a callback function
902
- * @returns
903
- */
904
- async autofill(selector: string | Function): Promise&lt;void&gt; {
905
- const input = selector as unknown;
906
- if (typeof input === "function") {
907
- try {
908
- const response = await this.api.squatchReferralCookie();
909
- input(response);
910
- } catch (e) {
911
- _log("Autofill error", e);
912
- throw new Error(e);
913
- }
914
- &nbsp;
915
- return;
916
- }
917
- if (typeof input !== "string")
918
- throw new Error("Autofill accepts a string or function");
919
- &nbsp;
920
- let elems = document.querySelectorAll(input);
921
- let elem;
922
- if (elems.length &gt; 0) {
923
- // Only use the first element found
924
- elem = elems[0];
925
- } else {
926
- _log("Element id/class or function missing");
927
- throw new Error("Element id/class or function missing");
928
- }
929
- &nbsp;
930
- try {
931
- const response = await this.api.squatchReferralCookie();
932
- elem.value = response.codes[0];
933
- } catch (e) {
934
- throw new Error(e);
935
- }
936
- }
937
- &nbsp;
938
- /**
939
- * @hidden
940
- * @param {Object} response The json object return from the WidgetApi
941
- * @param {Object} config Config details
942
- * @param {string} config.widgetType The widget type (REFERRER_WIDGET, CONVERSION_WIDGET)
943
- * @param {string} config.engagementMedium (POPUP, EMBED)
944
- * @returns {Widget} widget (PopupWidget or EmbedWidget)
945
- */
946
- private _renderWidget(
947
- response: any,
948
- config: WidgetConfig,
949
- context: WidgetContext
950
- ) {
951
- _log("Rendering Widget...");
952
- if (!response) throw new Error("Unable to get a response");
953
- &nbsp;
954
- let widget;
955
- let displayOnLoad = !!config.displayOnLoad;
956
- const opts = response.jsOptions || {};
957
- &nbsp;
958
- const params = {
959
- content: response.template,
960
- type: config.widgetType || opts.widget?.defaultWidgetType,
961
- api: this.api,
962
- domain: this.domain,
963
- npmCdn: this.npmCdn,
964
- context: context,
965
- };
966
- &nbsp;
967
- if (opts.widgetUrlMappings) {
968
- opts.widgetUrlMappings.forEach((rule) =&gt; {
969
- if (Widgets._matchesUrl(rule.url)) {
970
- if (
971
- rule.widgetType !== "CONVERSION_WIDGET" ||
972
- response.user?.referredBy?.code
973
- ) {
974
- displayOnLoad = rule.displayOnLoad;
975
- _log(`Display ${rule.widgetType} on ${rule.url}`);
976
- } else {
977
- _log(
978
- `Don't display ${rule.widgetType} when no referral on widget rule match ${rule.url}`
979
- );
980
- }
981
- }
982
- });
983
- }
984
- &nbsp;
985
- if (opts.fuelTankAutofillUrls) {
986
- _log("We found a fuel tank autofill!");
987
- &nbsp;
988
- opts.fuelTankAutofillUrls.forEach(({ url, formSelector }) =&gt; {
989
- if (Widgets._matchesUrl(url)) {
990
- _log("Fuel Tank URL matches");
991
- if (response.user?.referredBy?.code) {
992
- const formAutofill = document.querySelector(formSelector);
993
- &nbsp;
994
- if (formAutofill) {
995
- formAutofill.value =
996
- response.user.referredBy.referredReward?.fuelTankCode || "";
997
- } else {
998
- _log(
999
- new Error(
1000
- `Element with id/class ${formSelector} was not found.`
1001
- )
1002
- );
1003
- }
1004
- }
1005
- }
1006
- });
1007
- }
1008
- &nbsp;
1009
- if (config.engagementMedium === "EMBED") {
1010
- widget = this._renderEmbedWidget(params, params.context.container);
1011
- } else if (config.engagementMedium === "POPUP") {
1012
- widget = this._renderPopupWidget(params);
1013
- if (displayOnLoad) widget.open();
1014
- } else {
1015
- _log("display popup on load");
1016
- widget = new PopupWidget(params);
1017
- widget.load();
1018
- if (displayOnLoad) widget.open();
1019
- }
1020
- &nbsp;
1021
- return widget;
1022
- }
1023
- &nbsp;
1024
- private _renderPopupWidget(params: Params) {
1025
- const widget = new PopupWidget(params, params.context.trigger);
1026
- widget.load();
1027
- &nbsp;
1028
- return widget;
1029
- }
1030
- &nbsp;
1031
- private _renderEmbedWidget(params, container) {
1032
- const widget = new EmbedWidget(params, container);
1033
- widget.load();
1034
- &nbsp;
1035
- return widget;
1036
- }
1037
- &nbsp;
1038
- /**
1039
- * @hidden
1040
- * @param {Object} error The json object containing the error details
1041
- * @param {string} em The engagementMedium
1042
- * @returns {void}
1043
- */
1044
- private _renderErrorWidget(
1045
- props: { apiErrorCode: string; rsCode: string; message: string },
1046
- em: EngagementMedium = "POPUP"
1047
- ) {
1048
- const { apiErrorCode, rsCode, message } = props;
1049
- _log(new Error(`${apiErrorCode} (${rsCode}) ${message}`));
1050
- &nbsp;
1051
- const params: Params = {
1052
- content: "error",
1053
- rsCode,
1054
- api: this.api,
1055
- domain: this.domain,
1056
- npmCdn: this.npmCdn,
1057
- type: "ERROR_WIDGET",
1058
- context: { type: "error" },
1059
- };
1060
- &nbsp;
1061
- let widget: Widget;
1062
- &nbsp;
1063
- if (em === "EMBED") {
1064
- widget = new EmbedWidget(params);
1065
- widget.load();
1066
- } else if (em === "POPUP") {
1067
- widget = new PopupWidget(params);
1068
- widget.load();
1069
- }
1070
- }
1071
- &nbsp;
1072
- /**
1073
- * @hidden
1074
- * @param {string} rule A regular expression
1075
- * @returns {boolean} true if rule matches Url, false otherwise
1076
- */
1077
- private static _matchesUrl(rule) {
1078
- // If there were no matches, null is returned.
1079
- console.log({ href: window.location.href });
1080
- return window.location.href.match(new RegExp(rule)) ? true : false;
1081
- }
1082
- }
1083
- &nbsp;</pre></td></tr></table></pre>
1084
-
1085
- <div class='push'></div><!-- for sticky footer -->
1086
- </div><!-- /wrapper -->
1087
- <div class='footer quiet pad2 space-top1 center small'>
1088
- Code coverage generated by
1089
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1090
- at 2023-07-21T16:40:43.990Z
1091
- </div>
1092
- <script src="../prettify.js"></script>
1093
- <script>
1094
- window.onload = function () {
1095
- prettyPrint();
1096
- };
1097
- </script>
1098
- <script src="../sorter.js"></script>
1099
- <script src="../block-navigation.js"></script>
1100
- </body>
1101
- </html>
1102
-