apostrophe 2.220.9 → 2.221.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 (194) hide show
  1. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  2. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  3. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  4. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  5. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  6. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  7. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  8. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  9. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  10. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -0
  12. package/CHANGELOG.md +12 -0
  13. package/coverage/a3/defaults.js.html +253 -0
  14. package/coverage/a3/index.html +131 -0
  15. package/coverage/a3/index.js.html +2338 -0
  16. package/coverage/a3/lib/escape-host.js.html +109 -0
  17. package/coverage/a3/lib/index.html +176 -0
  18. package/coverage/a3/lib/mongodb-connect.js.html +250 -0
  19. package/coverage/a3/lib/moog-require.js.html +790 -0
  20. package/coverage/a3/lib/moog.js.html +1711 -0
  21. package/coverage/a3/lib/opentelemetry.js.html +517 -0
  22. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +116 -0
  23. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +931 -0
  24. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +116 -0
  25. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +115 -0
  26. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +116 -0
  27. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +1105 -0
  28. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +116 -0
  29. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +97 -0
  30. package/coverage/a3/modules/@apostrophecms/area/index.html +116 -0
  31. package/coverage/a3/modules/@apostrophecms/area/index.js.html +2104 -0
  32. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +469 -0
  33. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +131 -0
  34. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +286 -0
  35. package/coverage/a3/modules/@apostrophecms/asset/index.html +116 -0
  36. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +3982 -0
  37. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +346 -0
  38. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +116 -0
  39. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +131 -0
  40. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +289 -0
  41. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +148 -0
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +116 -0
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +131 -0
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +184 -0
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +238 -0
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +958 -0
  47. package/coverage/a3/modules/@apostrophecms/attachment/index.html +116 -0
  48. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +3676 -0
  49. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +116 -0
  50. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +205 -0
  51. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +116 -0
  52. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +328 -0
  53. package/coverage/a3/modules/@apostrophecms/busy/index.html +116 -0
  54. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +145 -0
  55. package/coverage/a3/modules/@apostrophecms/cache/index.html +116 -0
  56. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +424 -0
  57. package/coverage/a3/modules/@apostrophecms/db/index.html +116 -0
  58. package/coverage/a3/modules/@apostrophecms/db/index.js.html +640 -0
  59. package/coverage/a3/modules/@apostrophecms/doc/index.html +116 -0
  60. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +3937 -0
  61. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +116 -0
  62. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +622 -0
  63. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +116 -0
  64. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +8638 -0
  65. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +319 -0
  66. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +116 -0
  67. package/coverage/a3/modules/@apostrophecms/email/index.html +116 -0
  68. package/coverage/a3/modules/@apostrophecms/email/index.js.html +301 -0
  69. package/coverage/a3/modules/@apostrophecms/error/index.html +116 -0
  70. package/coverage/a3/modules/@apostrophecms/error/index.js.html +202 -0
  71. package/coverage/a3/modules/@apostrophecms/express/index.html +116 -0
  72. package/coverage/a3/modules/@apostrophecms/express/index.js.html +2116 -0
  73. package/coverage/a3/modules/@apostrophecms/file/index.html +116 -0
  74. package/coverage/a3/modules/@apostrophecms/file/index.js.html +367 -0
  75. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +116 -0
  76. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +127 -0
  77. package/coverage/a3/modules/@apostrophecms/global/index.html +116 -0
  78. package/coverage/a3/modules/@apostrophecms/global/index.js.html +535 -0
  79. package/coverage/a3/modules/@apostrophecms/home-page/index.html +116 -0
  80. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +94 -0
  81. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +116 -0
  82. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +271 -0
  83. package/coverage/a3/modules/@apostrophecms/http/index.html +116 -0
  84. package/coverage/a3/modules/@apostrophecms/http/index.js.html +976 -0
  85. package/coverage/a3/modules/@apostrophecms/i18n/index.html +116 -0
  86. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +2083 -0
  87. package/coverage/a3/modules/@apostrophecms/image/index.html +116 -0
  88. package/coverage/a3/modules/@apostrophecms/image/index.js.html +1486 -0
  89. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +116 -0
  90. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +127 -0
  91. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +116 -0
  92. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +145 -0
  93. package/coverage/a3/modules/@apostrophecms/job/index.html +116 -0
  94. package/coverage/a3/modules/@apostrophecms/job/index.js.html +1321 -0
  95. package/coverage/a3/modules/@apostrophecms/launder/index.html +116 -0
  96. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +124 -0
  97. package/coverage/a3/modules/@apostrophecms/lock/index.html +116 -0
  98. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +676 -0
  99. package/coverage/a3/modules/@apostrophecms/login/index.html +116 -0
  100. package/coverage/a3/modules/@apostrophecms/login/index.js.html +2617 -0
  101. package/coverage/a3/modules/@apostrophecms/migration/index.html +116 -0
  102. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +970 -0
  103. package/coverage/a3/modules/@apostrophecms/modal/index.html +116 -0
  104. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +193 -0
  105. package/coverage/a3/modules/@apostrophecms/module/index.html +116 -0
  106. package/coverage/a3/modules/@apostrophecms/module/index.js.html +2500 -0
  107. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +547 -0
  108. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +116 -0
  109. package/coverage/a3/modules/@apostrophecms/notification/index.html +116 -0
  110. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +1315 -0
  111. package/coverage/a3/modules/@apostrophecms/oembed/index.html +116 -0
  112. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +781 -0
  113. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +161 -0
  114. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +178 -0
  115. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +124 -0
  116. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +256 -0
  117. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +322 -0
  118. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +116 -0
  119. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +268 -0
  120. package/coverage/a3/modules/@apostrophecms/page/index.html +116 -0
  121. package/coverage/a3/modules/@apostrophecms/page/index.js.html +6955 -0
  122. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +116 -0
  123. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +568 -0
  124. package/coverage/a3/modules/@apostrophecms/page-type/index.html +116 -0
  125. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +1501 -0
  126. package/coverage/a3/modules/@apostrophecms/pager/index.html +116 -0
  127. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +232 -0
  128. package/coverage/a3/modules/@apostrophecms/permission/index.html +116 -0
  129. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +1057 -0
  130. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +116 -0
  131. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +160 -0
  132. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +116 -0
  133. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +1051 -0
  134. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +116 -0
  135. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +3103 -0
  136. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +116 -0
  137. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +157 -0
  138. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +116 -0
  139. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +1363 -0
  140. package/coverage/a3/modules/@apostrophecms/schema/index.html +116 -0
  141. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +4603 -0
  142. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +3502 -0
  143. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +131 -0
  144. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +703 -0
  145. package/coverage/a3/modules/@apostrophecms/search/index.html +116 -0
  146. package/coverage/a3/modules/@apostrophecms/search/index.js.html +1222 -0
  147. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +116 -0
  148. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +343 -0
  149. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +116 -0
  150. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +595 -0
  151. package/coverage/a3/modules/@apostrophecms/task/index.html +116 -0
  152. package/coverage/a3/modules/@apostrophecms/task/index.js.html +1147 -0
  153. package/coverage/a3/modules/@apostrophecms/template/index.html +116 -0
  154. package/coverage/a3/modules/@apostrophecms/template/index.js.html +2731 -0
  155. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +559 -0
  156. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +310 -0
  157. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +325 -0
  158. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +146 -0
  159. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +490 -0
  160. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +131 -0
  161. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +658 -0
  162. package/coverage/a3/modules/@apostrophecms/ui/index.html +116 -0
  163. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +181 -0
  164. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +116 -0
  165. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +286 -0
  166. package/coverage/a3/modules/@apostrophecms/url/index.html +116 -0
  167. package/coverage/a3/modules/@apostrophecms/url/index.js.html +733 -0
  168. package/coverage/a3/modules/@apostrophecms/user/index.html +116 -0
  169. package/coverage/a3/modules/@apostrophecms/user/index.js.html +1684 -0
  170. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +116 -0
  171. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +157 -0
  172. package/coverage/a3/modules/@apostrophecms/util/index.html +116 -0
  173. package/coverage/a3/modules/@apostrophecms/util/index.js.html +3424 -0
  174. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +116 -0
  175. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +319 -0
  176. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +116 -0
  177. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +178 -0
  178. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +116 -0
  179. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +1225 -0
  180. package/coverage/a3/test-lib/index.html +131 -0
  181. package/coverage/a3/test-lib/test.js.html +232 -0
  182. package/coverage/a3/test-lib/util.js.html +373 -0
  183. package/coverage/base.css +224 -0
  184. package/coverage/block-navigation.js +87 -0
  185. package/coverage/favicon.png +0 -0
  186. package/coverage/index.html +1256 -0
  187. package/coverage/prettify.css +1 -0
  188. package/coverage/prettify.js +2 -0
  189. package/coverage/sort-arrow-sprite.png +0 -0
  190. package/coverage/sorter.js +196 -0
  191. package/lib/modules/apostrophe-assets/index.js +3 -1
  192. package/lib/modules/apostrophe-pages/lib/api.js +8 -6
  193. package/package.json +1 -1
  194. package/test/package.json +0 -75
@@ -0,0 +1,1051 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for a3/modules/@apostrophecms/piece-page-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/piece-page-type</a> index.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">76.84% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>73/95</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">48.93% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>23/47</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">96.15% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>25/26</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">76.84% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>73/95</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">11x</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-yes">11x</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-yes">12x</span>
419
+ <span class="cline-any cline-yes">12x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-yes">12x</span>
422
+ <span class="cline-any cline-yes">12x</span>
423
+ <span class="cline-any cline-yes">12x</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-yes">12x</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-yes">12x</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-yes">12x</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">5x</span>
437
+ <span class="cline-any cline-yes">5x</span>
438
+ <span class="cline-any cline-yes">5x</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-yes">5x</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-yes">5x</span>
449
+ <span class="cline-any cline-yes">5x</span>
450
+ <span class="cline-any cline-yes">5x</span>
451
+ <span class="cline-any cline-yes">5x</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-yes">5x</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-yes">5x</span>
459
+ <span class="cline-any cline-yes">5x</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-yes">5x</span>
464
+ <span class="cline-any cline-yes">5x</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-yes">5x</span>
469
+ <span class="cline-any cline-yes">5x</span>
470
+ <span class="cline-any cline-no">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-yes">5x</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-yes">5x</span>
475
+ <span class="cline-any cline-yes">5x</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-yes">2x</span>
506
+ <span class="cline-any cline-yes">2x</span>
507
+ <span class="cline-any cline-yes">2x</span>
508
+ <span class="cline-any cline-yes">2x</span>
509
+ <span class="cline-any cline-yes">2x</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-no">&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-yes">2x</span>
515
+ <span class="cline-any cline-yes">2x</span>
516
+ <span class="cline-any cline-yes">2x</span>
517
+ <span class="cline-any cline-yes">2x</span>
518
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
522
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
528
+ <span class="cline-any cline-yes">2x</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-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&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">2x</span>
538
+ <span class="cline-any cline-yes">2x</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&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-yes">2x</span>
549
+ <span class="cline-any cline-yes">2x</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-no">&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-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-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</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">12x</span>
577
+ <span class="cline-any cline-yes">12x</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-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-yes">29x</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-yes">29x</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-yes">29x</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-yes">29x</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">11x</span>
619
+ <span class="cline-any cline-yes">11x</span>
620
+ <span class="cline-any cline-yes">11x</span>
621
+ <span class="cline-any cline-yes">11x</span>
622
+ <span class="cline-any cline-yes">11x</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-yes">11x</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-yes">11x</span>
627
+ <span class="cline-any cline-yes">29x</span>
628
+ <span class="cline-any cline-yes">29x</span>
629
+ <span class="cline-any cline-yes">29x</span>
630
+ <span class="cline-any cline-yes">29x</span>
631
+ <span class="cline-any cline-yes">29x</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-yes">11x</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-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-yes">12x</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&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-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-yes">5x</span>
681
+ <span class="cline-any cline-yes">5x</span>
682
+ <span class="cline-any cline-yes">5x</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-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-yes">12x</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-yes">2x</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-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-yes">2x</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></td><td class="text"><pre class="prettyprint lang-js">// `@apostrophecms/piece-page-type` implements "index pages" that display pieces of a
711
+ // particular type in a paginated, filterable way. It's great for implementing
712
+ // blogs, event listings, project listings, staff directories... almost any
713
+ // content type.
714
+ //
715
+ // You will `extend` this module in new modules corresponding to your modules
716
+ // that extend `@apostrophecms/piece-type`.
717
+ //
718
+ // To learn more and see complete examples, see:
719
+ //
720
+ // [Reusable content with pieces](../../tutorials/getting-started/reusable-content-with-pieces.html)
721
+ //
722
+ // ## Options
723
+ //
724
+ // ### `piecesFilters`
725
+ //
726
+ // If present, this is an array of objects with `name` properties.This works only if the corresponding
727
+ // query builders exist and have a `launder` method. An array of choices for each is populated
728
+ // in `req.data.piecesFilters`. The choices in the
729
+ // array are objects with `label` and `value` properties.
730
+ //
731
+ // If a filter configuration has a `counts` property set to `true`, then the array provided for
732
+ // that filter will also have a `count` property for each value. This has a performance
733
+ // impact.
734
+ &nbsp;
735
+ const _ = require('lodash');
736
+ &nbsp;
737
+ module.exports = {
738
+ extend: '@apostrophecms/page-type',
739
+ init(self) {
740
+ self.label = self.options.label;
741
+ self.perPage = self.options.perPage || 10;
742
+ &nbsp;
743
+ self.pieceModuleName = self.options.pieceModuleName || self.__meta.name.replace(/-page$/, '');
744
+ self.pieces = self.apos.modules[self.pieceModuleName];
745
+ self.piecesCssName = self.apos.util.cssName(self.pieces.name);
746
+ &nbsp;
747
+ self.piecesFilters = self.options.piecesFilters || [];
748
+ &nbsp;
749
+ self.enableAddUrlsToPieces();
750
+ },
751
+ methods(self) {
752
+ return {
753
+ &nbsp;
754
+ // Extend this method for your piece type to call additional
755
+ // query builders by default.
756
+ &nbsp;
757
+ indexQuery(req) {
758
+ const query = self.pieces.find(req, {}).applyBuildersSafely(req.query).perPage(self.perPage);
759
+ self.filterByIndexPage(query, req.data.page);
760
+ return query;
761
+ },
762
+ &nbsp;
763
+ // At the URL of the page, display an index view (list view) of
764
+ // the pieces, with support for pagination.
765
+ &nbsp;
766
+ async indexPage(req) {
767
+ &nbsp;
768
+ const query = self.indexQuery(req);
769
+ &nbsp;
770
+ await getFilters();
771
+ await totalPieces();
772
+ await findPieces();
773
+ await self.beforeIndex(req);
774
+ &nbsp;
775
+ async function getFilters() {
776
+ return self.populatePiecesFilters(query);
777
+ }
778
+ &nbsp;
779
+ async function totalPieces() {
780
+ const count = await query.toCount();
781
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (query.get('page') &gt; query.get('totalPages')) {
782
+ <span class="cstat-no" title="statement not covered" > req.notFound = true;</span>
783
+ <span class="cstat-no" title="statement not covered" > return;</span>
784
+ }
785
+ req.data.totalPieces = count;
786
+ req.data.totalPages = query.get('totalPages');
787
+ }
788
+ &nbsp;
789
+ async function findPieces() {
790
+ const docs = await query.toArray();
791
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (self.apos.util.isAjaxRequest(req)) {
792
+ <span class="cstat-no" title="statement not covered" > self.setTemplate(req, 'indexAjax');</span>
793
+ } else {
794
+ self.setTemplate(req, 'index');
795
+ }
796
+ req.data.currentPage = query.get('page');
797
+ req.data.pieces = docs;
798
+ }
799
+ },
800
+ &nbsp;
801
+ // Called before `indexPage`. By default, does nothing.
802
+ // A convenient way to extend the functionality.
803
+ &nbsp;
804
+ async beforeIndex(req) {
805
+ },
806
+ &nbsp;
807
+ // Invokes query builders on the given query to ensure it only fetches
808
+ // results appropriate to the given page. By default this method does nothing,
809
+ // as it is quite common to have one pieces-page per piece type, but if you have
810
+ // more than one you can override this method and `chooseParentPage` to map particular
811
+ // pieces to particular pieces-pages.
812
+ &nbsp;
813
+ filterByIndexPage(query, page) {
814
+ },
815
+ &nbsp;
816
+ // Invoked to display a piece by itself, a "show page." Renders
817
+ // the `show.html` template after setting `data.piece`.
818
+ &nbsp;
819
+ async showPage(req) {
820
+ &nbsp;
821
+ // We'll try to find the piece as an ordinary reader
822
+ &nbsp;
823
+ let doc;
824
+ let previous;
825
+ let next;
826
+ &nbsp;
827
+ await findAsReader();
828
+ await findAsEditor();
829
+ await findPrevious();
830
+ await findNext();
831
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!doc) {
832
+ <span class="cstat-no" title="statement not covered" > req.notFound = true;</span>
833
+ <span class="cstat-no" title="statement not covered" > return;</span>
834
+ }
835
+ &nbsp;
836
+ self.setTemplate(req, 'show');
837
+ req.data.piece = doc;
838
+ req.data.previous = previous;
839
+ req.data.next = next;
840
+ await self.beforeShow(req);
841
+ &nbsp;
842
+ async function findAsReader() {
843
+ const query = self.pieces.find(req, { slug: req.params.slug });
844
+ doc = await query.toObject();
845
+ }
846
+ &nbsp;
847
+ async function findAsEditor() {
848
+ // TODO: Is `contextual` still relevant?
849
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (doc || <span class="branch-1 cbranch-no" title="branch not covered" >!req.user </span>|| <span class="branch-2 cbranch-no" title="branch not covered" >!self.pieces.contextual)</span> {
850
+ return;
851
+ }
852
+ // Use findForEditing to allow subclasses to extend the set of filters that
853
+ // don't apply by default in an editing context. -Tom
854
+ const query = <span class="cstat-no" title="statement not covered" >self.pieces.findForEditing(req, { slug: req.params.slug });</span>
855
+ <span class="cstat-no" title="statement not covered" > doc = await query.toObject();</span>
856
+ }
857
+ &nbsp;
858
+ async function findPrevious() {
859
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!self.options.previous) {
860
+ return;
861
+ }
862
+ <span class="cstat-no" title="statement not covered" > if (!doc) {</span>
863
+ <span class="cstat-no" title="statement not covered" > return;</span>
864
+ }
865
+ const query = <span class="cstat-no" title="statement not covered" >self.indexQuery(req);</span>
866
+ <span class="cstat-no" title="statement not covered" > previous = await query.previous(doc).applyBuilders(typeof self.options.previous === 'object' ? self.options.previous : {}).toObject();</span>
867
+ }
868
+ &nbsp;
869
+ async function findNext() {
870
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!self.options.next) {
871
+ return;
872
+ }
873
+ <span class="cstat-no" title="statement not covered" > if (!doc) {</span>
874
+ <span class="cstat-no" title="statement not covered" > return;</span>
875
+ }
876
+ const query = <span class="cstat-no" title="statement not covered" >self.indexQuery(req);</span>
877
+ <span class="cstat-no" title="statement not covered" > next = await query.next(doc).applyBuilders(typeof self.options.next === 'object' ? self.options.next : {}).toObject();</span>
878
+ }
879
+ },
880
+ &nbsp;
881
+ // Invoked just before the piece is displayed on its "show page." By default,
882
+ // does nothing. A useful override point.
883
+ &nbsp;
884
+ async beforeShow(req) {
885
+ },
886
+ &nbsp;
887
+ // TODO dispatch routes should be a module format section
888
+ //
889
+ // Set the dispatch routes. By default, the bare URL of the page displays
890
+ // the index view via `indexPage`; if the URL has an additional component,
891
+ // e.g. `/blog/good-article`, it is assumed to be the slug of the
892
+ // article and `showPage` is invoked. You can override this method,
893
+ // for instance to also accept `/:year/:month/:day/:slug` as a way of
894
+ // invoking `self.showPage`. See [@apostrophecms/page-type](../@apostrophecms/page-type/index.html)
895
+ // for more about what you can do with dispatch routes.
896
+ &nbsp;
897
+ dispatchAll() {
898
+ self.dispatch('/', self.indexPage);
899
+ self.dispatch('/:slug', self.showPage);
900
+ },
901
+ &nbsp;
902
+ // This method is called for you. You should override it if you will have
903
+ // more than one pieces-page on the site for a given type of piece.
904
+ //
905
+ // In the presence of pieces-pages, queries for the corresponding pieces are
906
+ // automatically enhanced to invoke it when building the `_url` property of each piece.
907
+ //
908
+ // Given an array containing all of the index pages of this type that
909
+ // exist on the site and an individual piece, your override of this method
910
+ // should return the index page that is the best fit for use in the URL of
911
+ // the piece. By default this method returns the first page, but
912
+ // warns if there is more than one page, as the developer should
913
+ // override this method to map pieces to pages in the way that makes sense
914
+ // for their design.
915
+ &nbsp;
916
+ chooseParentPage(pages, piece) {
917
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (pages.length &gt; 1) {
918
+ <span class="cstat-no" title="statement not covered" > self.apos.util.warnDevOnce(`${self.__meta.name}/chooseParentPage`, `Your site has more than one ${self.name} page, but does not override the chooseParentPage method in ${self.__meta.name} to choose the right one for individual ${self.pieces.name}. You should also override filterByIndexPage. for ${self.pieces.name} will point to an arbitrarily chosen page.`);</span>
919
+ }
920
+ return pages[0];
921
+ },
922
+ &nbsp;
923
+ // Given req, an index page and a piece, build a complete URL to
924
+ // the piece. If you override `dispatch` to change how
925
+ // "show page" URLs are matched, you will also want to override
926
+ // this method to build them differently.
927
+ &nbsp;
928
+ buildUrl(req, page, piece) {
929
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!page) {
930
+ <span class="cstat-no" title="statement not covered" > return false;</span>
931
+ }
932
+ return self.apos.util.addSlashIfNeeded(page._url) + piece.slug;
933
+ },
934
+ &nbsp;
935
+ // Adds the `._url` property to all of the provided pieces,
936
+ // which are assumed to be of the appropriate type for this module.
937
+ // Aliased as the `addUrls` method of [@apostrophecms/piece-type](../@apostrophecms/piece-type/index.html).
938
+ &nbsp;
939
+ async addUrlsToPieces(req, results) {
940
+ const pieceName = self.pieces.name;
941
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!(req.aposParentPageCache &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >req.aposParentPageCache[pieceName])</span>) {
942
+ const pages = await self.findForAddUrlsToPieces(req).toArray();
943
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!req.aposParentPageCache) {
944
+ req.aposParentPageCache = {};
945
+ }
946
+ req.aposParentPageCache[pieceName] = pages;
947
+ }
948
+ results.forEach(function (piece) {
949
+ const parentPage = self.chooseParentPage(req.aposParentPageCache[pieceName], piece);
950
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (parentPage) {
951
+ piece._url = self.buildUrl(req, parentPage, piece);
952
+ piece._parentUrl = parentPage._url;
953
+ piece._parentSlug = parentPage.slug;
954
+ }
955
+ });
956
+ },
957
+ &nbsp;
958
+ // Returns a query suitable for finding pieces-page-type for the
959
+ // purposes of assigning URLs to pieces based on the best match.
960
+ //
961
+ // Should be as fast as possible while still returning enough
962
+ // information to do that.
963
+ //
964
+ // The default implementation returns a query with areas
965
+ // and relationships shut off for speed but all properties included.
966
+ &nbsp;
967
+ findForAddUrlsToPieces(req) {
968
+ return self.find(req).areas(false).relationships(false);
969
+ },
970
+ &nbsp;
971
+ // Associates this module with the relevant piece type module
972
+ // so that it knows to invoke our `addUrlsToPieces` method.
973
+ // Also marks the piece type as previewable.
974
+ &nbsp;
975
+ enableAddUrlsToPieces() {
976
+ self.pieces.addUrlsVia(self, true);
977
+ },
978
+ &nbsp;
979
+ // Default implementation: we are ready to add URLs to pieces when we have
980
+ // at least one reachable piece page. pieceTypeName is guaranteed to always
981
+ // be our corresponding piece module name right now, however it is provided
982
+ // in case a subclass chooses to invoke `addUrlsVia` for multiple
983
+ // piece types
984
+ <span class="fstat-no" title="function not covered" > as</span>ync readyToAddUrlsToPieces(req, pieceTypeName) {
985
+ <span class="cstat-no" title="statement not covered" > return !!(await self.find(req, {}).areas(false).relationships(false).toObject());</span>
986
+ },
987
+ &nbsp;
988
+ // Populate `req.data.piecesFilters` with arrays of choice objects,
989
+ // with label and value properties, for each filter configured in the
990
+ // `piecesFilters` array option. Each filter in that array must have a
991
+ // `name` property. Distinct values are fetched for the corresponding
992
+ // query builder (note that most schema fields automatically get a
993
+ // corresponding query builder method). Each filter's choices are
994
+ // reduced by the other filters; for instance, "tags" might only reveal
995
+ // choices not ruled out by the current "topic" filter setting.
996
+ //
997
+ // If a filter in the array has its `counts` property set to true,
998
+ // Apostrophe will supply a `count` property for each distinct value,
999
+ // whenever possible. This has a performance impact.
1000
+ &nbsp;
1001
+ async populatePiecesFilters(query) {
1002
+ const req = query.req;
1003
+ req.data.piecesFilters = req.data.piecesFilters || {};
1004
+ for (const filter of self.piecesFilters) {
1005
+ // The choices for each filter should reflect the effect of all filters
1006
+ // except this one (filtering by topic pares down the list of categories and
1007
+ // vice versa)
1008
+ const _query = <span class="cstat-no" title="statement not covered" >query.clone();</span>
1009
+ <span class="cstat-no" title="statement not covered" > _query[filter.name](undefined);</span>
1010
+ <span class="cstat-no" title="statement not covered" > req.data.piecesFilters[filter.name] = await _query.toChoices(filter.name, _.pick(filter, 'counts'));</span>
1011
+ }
1012
+ }
1013
+ };
1014
+ },
1015
+ extendMethods(self) {
1016
+ return {
1017
+ getBrowserData(_super, req) {
1018
+ const data = _super(req);
1019
+ // TODO: Is `contextual` still relevant?
1020
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (self.pieces.options.contextual &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >req.data.piece)</span> {
1021
+ <span class="cstat-no" title="statement not covered" > return {</span>
1022
+ ...data,
1023
+ contextPiece: _.pick(req.data.piece, '_id', 'title', 'slug', 'type')
1024
+ };
1025
+ } else {
1026
+ return data;
1027
+ }
1028
+ }
1029
+ };
1030
+ }
1031
+ };
1032
+ &nbsp;</pre></td></tr></table></pre>
1033
+
1034
+ <div class='push'></div><!-- for sticky footer -->
1035
+ </div><!-- /wrapper -->
1036
+ <div class='footer quiet pad2 space-top1 center small'>
1037
+ Code coverage generated by
1038
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1039
+ at Wed Jun 08 2022 11:06:49 GMT+0200 (Central European Summer Time)
1040
+ </div>
1041
+ <script src="../../../../prettify.js"></script>
1042
+ <script>
1043
+ window.onload = function () {
1044
+ prettyPrint();
1045
+ };
1046
+ </script>
1047
+ <script src="../../../../sorter.js"></script>
1048
+ <script src="../../../../block-navigation.js"></script>
1049
+ </body>
1050
+ </html>
1051
+