apostrophe 2.221.0 → 2.221.2

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 (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/modules/apostrophe-caches/index.js +23 -1
  3. package/lib/modules/apostrophe-soft-redirects/index.js +21 -14
  4. package/package.json +1 -1
  5. package/test/caches.js +29 -0
  6. package/test/soft-redirects.js +16 -3
  7. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  8. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  9. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  10. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  11. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  12. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  13. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  14. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  15. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  16. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  17. package/.nyc_output/processinfo/index.json +0 -1
  18. package/coverage/a3/defaults.js.html +0 -253
  19. package/coverage/a3/index.html +0 -131
  20. package/coverage/a3/index.js.html +0 -2338
  21. package/coverage/a3/lib/escape-host.js.html +0 -109
  22. package/coverage/a3/lib/index.html +0 -176
  23. package/coverage/a3/lib/mongodb-connect.js.html +0 -250
  24. package/coverage/a3/lib/moog-require.js.html +0 -790
  25. package/coverage/a3/lib/moog.js.html +0 -1711
  26. package/coverage/a3/lib/opentelemetry.js.html +0 -517
  27. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +0 -116
  28. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +0 -931
  29. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +0 -116
  30. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +0 -115
  31. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +0 -116
  32. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +0 -1105
  33. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +0 -116
  34. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +0 -97
  35. package/coverage/a3/modules/@apostrophecms/area/index.html +0 -116
  36. package/coverage/a3/modules/@apostrophecms/area/index.js.html +0 -2104
  37. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +0 -469
  38. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +0 -131
  39. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +0 -286
  40. package/coverage/a3/modules/@apostrophecms/asset/index.html +0 -116
  41. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +0 -3982
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +0 -346
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +0 -116
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +0 -131
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +0 -289
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +0 -148
  47. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +0 -116
  48. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +0 -131
  49. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +0 -184
  50. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +0 -238
  51. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +0 -958
  52. package/coverage/a3/modules/@apostrophecms/attachment/index.html +0 -116
  53. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +0 -3676
  54. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +0 -116
  55. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +0 -205
  56. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +0 -116
  57. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +0 -328
  58. package/coverage/a3/modules/@apostrophecms/busy/index.html +0 -116
  59. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +0 -145
  60. package/coverage/a3/modules/@apostrophecms/cache/index.html +0 -116
  61. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +0 -424
  62. package/coverage/a3/modules/@apostrophecms/db/index.html +0 -116
  63. package/coverage/a3/modules/@apostrophecms/db/index.js.html +0 -640
  64. package/coverage/a3/modules/@apostrophecms/doc/index.html +0 -116
  65. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +0 -3937
  66. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +0 -116
  67. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +0 -622
  68. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +0 -116
  69. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +0 -8638
  70. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +0 -319
  71. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +0 -116
  72. package/coverage/a3/modules/@apostrophecms/email/index.html +0 -116
  73. package/coverage/a3/modules/@apostrophecms/email/index.js.html +0 -301
  74. package/coverage/a3/modules/@apostrophecms/error/index.html +0 -116
  75. package/coverage/a3/modules/@apostrophecms/error/index.js.html +0 -202
  76. package/coverage/a3/modules/@apostrophecms/express/index.html +0 -116
  77. package/coverage/a3/modules/@apostrophecms/express/index.js.html +0 -2116
  78. package/coverage/a3/modules/@apostrophecms/file/index.html +0 -116
  79. package/coverage/a3/modules/@apostrophecms/file/index.js.html +0 -367
  80. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +0 -116
  81. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +0 -127
  82. package/coverage/a3/modules/@apostrophecms/global/index.html +0 -116
  83. package/coverage/a3/modules/@apostrophecms/global/index.js.html +0 -535
  84. package/coverage/a3/modules/@apostrophecms/home-page/index.html +0 -116
  85. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +0 -94
  86. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +0 -116
  87. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +0 -271
  88. package/coverage/a3/modules/@apostrophecms/http/index.html +0 -116
  89. package/coverage/a3/modules/@apostrophecms/http/index.js.html +0 -976
  90. package/coverage/a3/modules/@apostrophecms/i18n/index.html +0 -116
  91. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +0 -2083
  92. package/coverage/a3/modules/@apostrophecms/image/index.html +0 -116
  93. package/coverage/a3/modules/@apostrophecms/image/index.js.html +0 -1486
  94. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +0 -116
  95. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +0 -127
  96. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +0 -116
  97. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +0 -145
  98. package/coverage/a3/modules/@apostrophecms/job/index.html +0 -116
  99. package/coverage/a3/modules/@apostrophecms/job/index.js.html +0 -1321
  100. package/coverage/a3/modules/@apostrophecms/launder/index.html +0 -116
  101. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +0 -124
  102. package/coverage/a3/modules/@apostrophecms/lock/index.html +0 -116
  103. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +0 -676
  104. package/coverage/a3/modules/@apostrophecms/login/index.html +0 -116
  105. package/coverage/a3/modules/@apostrophecms/login/index.js.html +0 -2617
  106. package/coverage/a3/modules/@apostrophecms/migration/index.html +0 -116
  107. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +0 -970
  108. package/coverage/a3/modules/@apostrophecms/modal/index.html +0 -116
  109. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +0 -193
  110. package/coverage/a3/modules/@apostrophecms/module/index.html +0 -116
  111. package/coverage/a3/modules/@apostrophecms/module/index.js.html +0 -2500
  112. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +0 -547
  113. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +0 -116
  114. package/coverage/a3/modules/@apostrophecms/notification/index.html +0 -116
  115. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +0 -1315
  116. package/coverage/a3/modules/@apostrophecms/oembed/index.html +0 -116
  117. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +0 -781
  118. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +0 -161
  119. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +0 -178
  120. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +0 -124
  121. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +0 -256
  122. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +0 -322
  123. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +0 -116
  124. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +0 -268
  125. package/coverage/a3/modules/@apostrophecms/page/index.html +0 -116
  126. package/coverage/a3/modules/@apostrophecms/page/index.js.html +0 -6955
  127. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +0 -116
  128. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +0 -568
  129. package/coverage/a3/modules/@apostrophecms/page-type/index.html +0 -116
  130. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +0 -1501
  131. package/coverage/a3/modules/@apostrophecms/pager/index.html +0 -116
  132. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +0 -232
  133. package/coverage/a3/modules/@apostrophecms/permission/index.html +0 -116
  134. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +0 -1057
  135. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +0 -116
  136. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +0 -160
  137. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +0 -116
  138. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +0 -1051
  139. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +0 -116
  140. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +0 -3103
  141. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +0 -116
  142. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +0 -157
  143. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +0 -116
  144. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +0 -1363
  145. package/coverage/a3/modules/@apostrophecms/schema/index.html +0 -116
  146. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +0 -4603
  147. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +0 -3502
  148. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +0 -131
  149. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +0 -703
  150. package/coverage/a3/modules/@apostrophecms/search/index.html +0 -116
  151. package/coverage/a3/modules/@apostrophecms/search/index.js.html +0 -1222
  152. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +0 -116
  153. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +0 -343
  154. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +0 -116
  155. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +0 -595
  156. package/coverage/a3/modules/@apostrophecms/task/index.html +0 -116
  157. package/coverage/a3/modules/@apostrophecms/task/index.js.html +0 -1147
  158. package/coverage/a3/modules/@apostrophecms/template/index.html +0 -116
  159. package/coverage/a3/modules/@apostrophecms/template/index.js.html +0 -2731
  160. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +0 -559
  161. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +0 -310
  162. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +0 -325
  163. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +0 -146
  164. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +0 -490
  165. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +0 -131
  166. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +0 -658
  167. package/coverage/a3/modules/@apostrophecms/ui/index.html +0 -116
  168. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +0 -181
  169. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +0 -116
  170. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +0 -286
  171. package/coverage/a3/modules/@apostrophecms/url/index.html +0 -116
  172. package/coverage/a3/modules/@apostrophecms/url/index.js.html +0 -733
  173. package/coverage/a3/modules/@apostrophecms/user/index.html +0 -116
  174. package/coverage/a3/modules/@apostrophecms/user/index.js.html +0 -1684
  175. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +0 -116
  176. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +0 -157
  177. package/coverage/a3/modules/@apostrophecms/util/index.html +0 -116
  178. package/coverage/a3/modules/@apostrophecms/util/index.js.html +0 -3424
  179. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +0 -116
  180. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +0 -319
  181. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +0 -116
  182. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +0 -178
  183. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +0 -116
  184. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +0 -1225
  185. package/coverage/a3/test-lib/index.html +0 -131
  186. package/coverage/a3/test-lib/test.js.html +0 -232
  187. package/coverage/a3/test-lib/util.js.html +0 -373
  188. package/coverage/base.css +0 -224
  189. package/coverage/block-navigation.js +0 -87
  190. package/coverage/favicon.png +0 -0
  191. package/coverage/index.html +0 -1256
  192. package/coverage/prettify.css +0 -1
  193. package/coverage/prettify.js +0 -2
  194. package/coverage/sort-arrow-sprite.png +0 -0
  195. package/coverage/sorter.js +0 -196
@@ -1,1225 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for a3/modules/@apostrophecms/widget-type/index.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../../index.html">All files</a> / <a href="index.html">a3/modules/@apostrophecms/widget-type</a> index.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">79.16% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>57/72</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">72.22% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>26/36</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">82.6% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>19/23</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">78.87% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>56/71</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 medium'></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>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a></td><td class="line-coverage quiet"><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-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-neutral">&nbsp;</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-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</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-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-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-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-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">90x</span>
540
- <span class="cline-any cline-yes">90x</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">90x</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-yes">375x</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-yes">375x</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">375x</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-yes">375x</span>
556
- <span class="cline-any cline-no">&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-yes">375x</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-yes">375x</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-yes">375x</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-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">375x</span>
572
- <span class="cline-any cline-yes">375x</span>
573
- <span class="cline-any cline-yes">374x</span>
574
- <span class="cline-any cline-yes">374x</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-yes">375x</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">375x</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">375x</span>
585
- <span class="cline-any cline-neutral">&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-yes">375x</span>
589
- <span class="cline-any cline-yes">276x</span>
590
- <span class="cline-any cline-no">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</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-yes">10x</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-yes">10x</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-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&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-yes">10x</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">10x</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-yes">10x</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-yes">56x</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-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">112x</span>
652
- <span class="cline-any cline-no">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">112x</span>
655
- <span class="cline-any cline-yes">1x</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-yes">111x</span>
658
- <span class="cline-any cline-yes">111x</span>
659
- <span class="cline-any cline-yes">86x</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-yes">111x</span>
662
- <span class="cline-any cline-yes">111x</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-yes">111x</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-yes">86x</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-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
683
- <span class="cline-any cline-yes">37x</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-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-yes">37x</span>
690
- <span class="cline-any cline-yes">37x</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-neutral">&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-no">&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-no">&nbsp;</span>
703
- <span class="cline-any cline-no">&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-neutral">&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-neutral">&nbsp;</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-yes">76x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-no">&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-yes">76x</span>
724
- <span class="cline-any cline-yes">76x</span>
725
- <span class="cline-any cline-yes">76x</span>
726
- <span class="cline-any cline-yes">76x</span>
727
- <span class="cline-any cline-yes">76x</span>
728
- <span class="cline-any cline-yes">76x</span>
729
- <span class="cline-any cline-yes">76x</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-yes">318x</span>
738
- <span class="cline-any cline-yes">200x</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&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-yes">11x</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-yes">2x</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-no">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-no">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-no">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&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-yes">375x</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&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-yes">242x</span>
789
- <span class="cline-any cline-yes">242x</span>
790
- <span class="cline-any cline-yes">242x</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-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-yes">242x</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-yes">375x</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-no">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&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>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-no">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// The base class for all modules that implement a widget, such as
827
- // [@apostrophecms/rich-text-widget](../@apostrophecms/rich-text-widget/index.html) and
828
- // [@apostrophecms/video-widget](../@apostrophecms/video-widget/index.html).
829
- //
830
- // All widgets have a [schema](../../tutorials/getting-started/schema-guide.html).
831
- // Many project-specific modules that extend this module consist entirely of `fields` configuration and a `views/widget.html` file.
832
- //
833
- // For more information see the [custom widgets tutorial](../../tutorials/getting-started/custom-widget.html).
834
- //
835
- // ## Options
836
- //
837
- // ### `label`
838
- //
839
- // The label of the widget, as seen in menus for adding widgets.
840
- //
841
- // ### `neverLoadSelf`
842
- //
843
- // If true, this widget's `load` method will never recursively invoke
844
- // itself for the same widget type. This option defaults to `true`.
845
- // If you set it to `false`, be aware that you are responsible
846
- // for ensuring that the situation does not lead to an infinite loop.
847
- //
848
- // ### `neverLoad`
849
- //
850
- // If set to an array of widget type names, the load methods of the
851
- // specified widget types will never be recursively invoked by this module's
852
- // `load` method. By default this option is empty. See also `neverLoadSelf`,
853
- // which defaults to `true`, resolving most performance problems.
854
- //
855
- // ### `scene`
856
- //
857
- // If your widget wishes to use Apostrophe features like schemas
858
- // when interacting with *logged-out* users — for instance, to implement
859
- // forms conveniently — you can set the `scene` option to `user`. Any
860
- // page that contains the widget will then load the full javascript and stylesheet
861
- // assets normally reserved for logged-in users. Note that if a page
862
- // relies on AJAX calls to load more content later, the assets will not be
863
- // upgraded. So you may wish to set the `scene` option of the appropriate
864
- // subclass of `@apostrophecms/page-type` or `@apostrophecms/piece-page-type`, as well.
865
- //
866
- // ### `defer`
867
- //
868
- // If you set `defer: true` for a widget module, like @apostrophecms/image-widget, the relationship to
869
- // actually fetch the images is deferred until the last possible minute, right before the
870
- // template is rendered. This can eliminate some queries and speed up your site when there
871
- // are many separate relationships happening on a page that ultimately result in loading images.
872
- //
873
- // If you wish this technique to also be applied to images loaded by content on the global doc,
874
- // you can also set `deferWidgetLoading: true` for the `@apostrophecms/global` module. To avoid chicken
875
- // and egg problems, there is still a separate query for all the images from the global doc and all
876
- // the images from everything else, but you won't get more than one of each type.
877
- //
878
- // Setting `defer` to `true` may help performance for any frequently used widget type
879
- // that depends on relationships and has a `load` method that can efficiently handle multiple widgets.
880
- //
881
- // If you need access to the results of the relationship in server-side JavaScript code, outside of page
882
- // templates, do not use this feature. Since it defers the relationships to the last minute,
883
- // that information will not be available yet in any asynchronous node.js code.
884
- // It is the last thing to happen before the actual page template rendering.
885
- //
886
- // ## Fields
887
- //
888
- // You will need to configure the schema fields for your widget using
889
- // the `fields` section.
890
- //
891
- // The standard options for building [schemas](../../tutorials/getting-started/schema-guide.html)
892
- // are accepted. The widget will present a modal dialog box allowing the user to edit
893
- // these fields. They are then available inside `widget.html` as properties of
894
- // `data.widget`.
895
- //
896
- // ## Important templates
897
- //
898
- // You will need to supply a `views/widget.html` template for your module that
899
- // extends this module.
900
- //
901
- // In `views/widget.html`, you can access any schema field as a property
902
- // of `data.widget`. You can also access options passed to the widget as
903
- // `data.options`.
904
- //
905
- // ## More
906
- //
907
- // If your widget requires JavaScript on the browser side, you will want
908
- // to write a player function. TODO: document this 3.x style (lean).
909
- //
910
- // ## Command line tasks
911
- //
912
- // ```
913
- // node app your-widget-module-name-here:list
914
- // ```
915
- // Lists all of the places where this widget is used on the site. This is very useful if
916
- // you are debugging a change and need to test all of the different ways a widget has
917
- // been used, or are wondering if you can safely remove one.
918
- &nbsp;
919
- const { stripIndent } = require('common-tags');
920
- const _ = require('lodash');
921
- &nbsp;
922
- module.exports = {
923
- cascades: [ 'fields' ],
924
- options: {
925
- neverLoadSelf: true
926
- },
927
- init(self) {
928
- &nbsp;
929
- self.enableBrowserData();
930
- &nbsp;
931
- self.template = self.options.template || 'widget';
932
- &nbsp;
933
- self.name = self.__meta.name.replace(/-widget$/, '');
934
- &nbsp;
935
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!self.options.label) {
936
- <span class="cstat-no" title="statement not covered" > self.options.label = _.startCase(self.name);</span>
937
- }
938
- &nbsp;
939
- self.label = self.options.label;
940
- &nbsp;
941
- self.composeSchema();
942
- &nbsp;
943
- self.apos.area.setWidgetManager(self.name, self);
944
- &nbsp;
945
- // To avoid infinite loops and/or bad performance, the load method of
946
- // this widget type will never invoke itself recursively unless
947
- // the `loadSelf` option of the module is explicitly set to `true`.
948
- // In addition the `neverLoad` option can be set to provide additional
949
- // widget types that are not to be loaded in a nested way beneath this one
950
- &nbsp;
951
- self.neverLoad = [ ...self.options.neverLoad || [] ];
952
- if (self.options.neverLoadSelf) {
953
- self.neverLoad.push(self.name);
954
- self.neverLoad = [ ...new Set(self.neverLoad) ];
955
- }
956
- },
957
- methods(self) {
958
- return {
959
- composeSchema() {
960
- self.schema = self.apos.schema.compose({
961
- addFields: self.apos.schema.fieldsToArray(`Module ${self.__meta.name}`, self.fields),
962
- arrangeFields: self.apos.schema.groupsToArray(self.fieldsGroups)
963
- }, self);
964
- const forbiddenFields = [
965
- '_id',
966
- 'type'
967
- ];
968
- _.each(self.schema, function (field) {
969
- <span class="missing-if-branch" title="if path not taken" >I</span>if (_.includes(forbiddenFields, field.name)) {
970
- <span class="cstat-no" title="statement not covered" > throw new Error('Widget type ' + self.name + ': the field name ' + field.name + ' is forbidden');</span>
971
- }
972
- });
973
- },
974
- &nbsp;
975
- // Returns markup for the widget. Invoked via `{% widget ... %}` in the
976
- // `@apostrophecms/area` module as it iterates over widgets in
977
- // an area. The default behavior is to render the template for the widget,
978
- // which is by default called `widget.html`, passing it `data.widget`
979
- // and `data.options`. The module is accessible as `data.manager`.
980
- //
981
- // async, as are all functions that invoke a nunjucks render in
982
- // Apostrophe 3.x.
983
- async output(req, widget, options, _with) {
984
- req.widgetsBundles = {
985
- ...req.widgetsBundles || {},
986
- ...self.getWidgetsBundles(`${widget.type}-widget`)
987
- };
988
- &nbsp;
989
- return self.render(req, self.template, {
990
- widget: widget,
991
- options: options,
992
- manager: self,
993
- contextOptions: _with
994
- });
995
- },
996
- &nbsp;
997
- getWidgetsBundles (widgetType) {
998
- const widget = self.apos.modules[widgetType];
999
- &nbsp;
1000
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!widget) {
1001
- <span class="cstat-no" title="statement not covered" > return {};</span>
1002
- }
1003
- &nbsp;
1004
- return Object.values(widget.__meta.webpack || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>
1005
- .reduce((acc, config) =&gt; {
1006
- return {
1007
- ...acc,
1008
- ...config &amp;&amp; config.bundles
1009
- };
1010
- }, {});
1011
- },
1012
- &nbsp;
1013
- // Load relationships and carry out any other necessary async
1014
- // actions for our type of widget, as long as it is
1015
- // not forbidden due to the `neverLoad` option or the
1016
- // `neverLoadSelf` option (which defaults to `true`).
1017
- //
1018
- // Also implements the `scene` convenience option
1019
- // for upgrading assets delivered to the browser
1020
- // to the full set of `user` assets (TODO: are we
1021
- // removing this in A3?)
1022
- //
1023
- // If you are looking to add custom loader behavior for
1024
- // your widget type, don't extend this method, extend
1025
- // the `load` method which just does the loading work.
1026
- // `loadIfSuitable` is responsible for invoking that method
1027
- // only after checking for recursion issues. Those guards
1028
- // should apply to your code too.
1029
- &nbsp;
1030
- async loadIfSuitable(req, widgets) {
1031
- <span class="missing-if-branch" title="if path not taken" >I</span>if (self.options.scene) {
1032
- <span class="cstat-no" title="statement not covered" > req.scene = self.options.scene;</span>
1033
- }
1034
- if (req.aposNeverLoad[self.name]) {
1035
- return;
1036
- }
1037
- const pushing = self.neverLoad.filter(type =&gt; !req.aposNeverLoad[type]);
1038
- for (const type of pushing) {
1039
- req.aposNeverLoad[type] = true;
1040
- }
1041
- await self.apos.util.recursionGuard(req, `widget:${self.name}`, async () =&gt; {
1042
- return self.load(req, widgets);
1043
- });
1044
- for (const type of pushing) {
1045
- // Faster than the delete keyword
1046
- req.aposNeverLoad[type] = false;
1047
- }
1048
- },
1049
- &nbsp;
1050
- // Perform relationships and any other necessary async
1051
- // actions for our type of widget.
1052
- //
1053
- // Override this to perform custom actions not
1054
- // specified by your schema, talk to APIs, etc. when a widget
1055
- // is present.
1056
- //
1057
- // Note that an array of widgets is handled in a single call
1058
- // as you can sometimes optimize for that case.
1059
- // Do not assume there is only one. If you can't optimize it,
1060
- // that's OK, just loop over them and handle every one.
1061
- &nbsp;
1062
- async load(req, widgets) {
1063
- await self.apos.schema.relate(req, self.schema, widgets, undefined);
1064
- // If this is a virtual widget (a widget being edited or previewed in the
1065
- // editor), any nested areas, etc. inside it haven't already been loaded as
1066
- // part of loading a doc. Do that now by creating a query and then feeding
1067
- // it our widgets as if they were docs.
1068
- &nbsp;
1069
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!(widgets.length &amp;&amp; widgets[0]._virtual)) {
1070
- return;
1071
- }
1072
- &nbsp;
1073
- // Get a doc query so that we can interpose the widgets as our docs and have the
1074
- // normal things happen after the docs have been "loaded," such as calling loaders
1075
- // of widgets in areas.
1076
- &nbsp;
1077
- // Shut off relationships because we already did them and the query would try to do them
1078
- // again based on `type`, which isn't really a doc type.
1079
- const query = <span class="cstat-no" title="statement not covered" >self.apos.doc.find(req).relationships(false);</span>
1080
- // Do everything we'd do if the query had fetched the widgets
1081
- // as docs
1082
- <span class="cstat-no" title="statement not covered" > await query.finalize();</span>
1083
- <span class="cstat-no" title="statement not covered" > await query.after(widgets);</span>
1084
- },
1085
- &nbsp;
1086
- // Sanitize the widget. Invoked when the user has edited a widget on the
1087
- // browser side. By default, the `input` object is sanitized via the
1088
- // `convert` method of `@apostrophecms/schema`, creating a new `output` object
1089
- // so that no information in `input` is blindly trusted.
1090
- //
1091
- // `options` will receive the widget-level options passed in
1092
- // this area, including any `defaultOptions` for the widget type.
1093
- //
1094
- // Returns a new, sanitized widget object.
1095
- &nbsp;
1096
- async sanitize(req, input, options) {
1097
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!input || typeof input !== 'object') {
1098
- // Do not crash
1099
- <span class="cstat-no" title="statement not covered" > input = {};</span>
1100
- }
1101
- // Make sure we get default values for contextual fields so
1102
- // `by` doesn't go missing for `@apostrophecms/image-widget`
1103
- const output = self.apos.schema.newInstance(self.schema);
1104
- const schema = self.allowedSchema(req);
1105
- output._id = self.apos.launder.id(input._id) || self.apos.util.generateId();
1106
- await self.apos.schema.convert(req, schema, input, output);
1107
- output.metaType = 'widget';
1108
- output.type = self.name;
1109
- return output;
1110
- },
1111
- &nbsp;
1112
- // Return a new schema containing only fields for which the
1113
- // current user has the permission specified by the `permission`
1114
- // property of the schema field, or there is no `permission` property for the field.
1115
- &nbsp;
1116
- allowedSchema(req) {
1117
- return _.filter(self.schema, function (field) {
1118
- return !field.permission || <span class="branch-1 cbranch-no" title="branch not covered" >self.apos.permission.can(req, field.permission.action, field.permission.type);</span>
1119
- });
1120
- },
1121
- &nbsp;
1122
- addSearchTexts(widget, texts) {
1123
- self.apos.schema.indexFields(self.schema, widget, texts);
1124
- },
1125
- &nbsp;
1126
- // Return true if this widget should be considered
1127
- // empty, for instance it is a rich text widget
1128
- // with no text or meaningful formatting so far.
1129
- // By default this method returns false, so the
1130
- // presence of any widget of this type means
1131
- // the area containing it is not considered empty.
1132
- &nbsp;
1133
- isEmpty(widget) {
1134
- return false;
1135
- },
1136
- &nbsp;
1137
- // override to add CSS classes to the outer wrapper div of the widget.
1138
- // TODO: Remove in the 4.x major version.
1139
- <span class="fstat-no" title="function not covered" > ge</span>tWidgetWrapperClasses(widget) {
1140
- <span class="cstat-no" title="statement not covered" > self.apos.util.warnDev(stripIndent`</span>
1141
- The getWidgetWrapperClasses method is deprecated and will be removed in the next
1142
- major version. The method in 3.x simply returns an empty array.`);
1143
- <span class="cstat-no" title="statement not covered" > return [];</span>
1144
- },
1145
- &nbsp;
1146
- // Override to add CSS classes to the div of the widget itself.
1147
- // TODO: Remove in the 4.x major version.
1148
- <span class="fstat-no" title="function not covered" > ge</span>tWidgetClasses(widget) {
1149
- <span class="cstat-no" title="statement not covered" > self.apos.util.warnDev(stripIndent`</span>
1150
- The getWidgetClasses method is deprecated and will be removed in the next major
1151
- version. The method in 3.x simply returns an empty array.`);
1152
- <span class="cstat-no" title="statement not covered" > return [];</span>
1153
- }
1154
- };
1155
- },
1156
- extendMethods(self) {
1157
- return {
1158
- // Set the options to be passed to the browser-side singleton corresponding
1159
- // to this module. By default they do not depend on `req`, but the availability
1160
- // of that parameter allows subclasses to make distinctions based on permissions,
1161
- // etc.
1162
- //
1163
- // If a `browser` option was configured for the module its properties take precedence
1164
- // over the default values passed on here for `name`, `label`, `action`
1165
- // (the base URL of the module), `schema` and `contextualOnly`.
1166
- &nbsp;
1167
- getBrowserData(_super, req) {
1168
- const result = _super(req);
1169
- const schema = self.allowedSchema(req);
1170
- _.defaults(result, {
1171
- name: self.name,
1172
- label: self.label,
1173
- action: self.action,
1174
- schema: schema,
1175
- contextual: self.options.contextual,
1176
- skipInitialModal: self.options.skipInitialModal,
1177
- className: self.options.className,
1178
- components: self.options.components
1179
- });
1180
- return result;
1181
- }
1182
- };
1183
- },
1184
- &nbsp;
1185
- tasks(self) {
1186
- return {
1187
- list: {
1188
- usage: 'Run this task to list all widgets of this type in the project.\nUseful for testing.',
1189
- <span class="fstat-no" title="function not covered" > as</span>ync task(argv) {
1190
- <span class="cstat-no" title="statement not covered" > return self.apos.migration.eachWidget({}, iterator);</span>
1191
- async function <span class="fstat-no" title="function not covered" >iterator(</span>doc, widget, dotPath) {
1192
- <span class="cstat-no" title="statement not covered" > if (widget.type === self.name) {</span>
1193
- // console.log is actually appropriate for once
1194
- // because the purpose of this task is to
1195
- // write something to stdout. Should
1196
- // not become an apos.util.log call. -Tom
1197
- // eslint-disable-next-line no-console
1198
- <span class="cstat-no" title="statement not covered" > console.log(doc.slug + ':' + dotPath);</span>
1199
- }
1200
- }
1201
- }
1202
- }
1203
- };
1204
- }
1205
- };
1206
- &nbsp;</pre></td></tr></table></pre>
1207
-
1208
- <div class='push'></div><!-- for sticky footer -->
1209
- </div><!-- /wrapper -->
1210
- <div class='footer quiet pad2 space-top1 center small'>
1211
- Code coverage generated by
1212
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1213
- at Wed Jun 08 2022 11:06:49 GMT+0200 (Central European Summer Time)
1214
- </div>
1215
- <script src="../../../../prettify.js"></script>
1216
- <script>
1217
- window.onload = function () {
1218
- prettyPrint();
1219
- };
1220
- </script>
1221
- <script src="../../../../sorter.js"></script>
1222
- <script src="../../../../block-navigation.js"></script>
1223
- </body>
1224
- </html>
1225
-