@internetarchive/collection-browser 3.4.1-alpha-webdev7761.2 → 3.4.1-alpha-webdev7761.4

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 (208) hide show
  1. package/dist/src/app-root.js +19 -28
  2. package/dist/src/app-root.js.map +1 -1
  3. package/dist/src/collection-browser.d.ts +14 -10
  4. package/dist/src/collection-browser.js +870 -886
  5. package/dist/src/collection-browser.js.map +1 -1
  6. package/dist/src/collection-facets/facet-row.js +3 -4
  7. package/dist/src/collection-facets/facet-row.js.map +1 -1
  8. package/dist/src/collection-facets/models.js.map +1 -1
  9. package/dist/src/collection-facets/more-facets-content.js +145 -156
  10. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  11. package/dist/src/collection-facets/more-facets-pagination.js +6 -10
  12. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  13. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +16 -21
  14. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -1
  15. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +7 -10
  16. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
  17. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +3 -2
  18. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
  19. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +9 -11
  20. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
  21. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +7 -7
  22. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
  23. package/dist/src/collection-facets/toggle-switch.js +4 -6
  24. package/dist/src/collection-facets/toggle-switch.js.map +1 -1
  25. package/dist/src/collection-facets.js +34 -50
  26. package/dist/src/collection-facets.js.map +1 -1
  27. package/dist/src/combo-box/caret-closed.js +5 -11
  28. package/dist/src/combo-box/caret-closed.js.map +1 -1
  29. package/dist/src/combo-box/caret-open.js +5 -11
  30. package/dist/src/combo-box/caret-open.js.map +1 -1
  31. package/dist/src/combo-box/clear.d.ts +2 -0
  32. package/dist/src/combo-box/clear.js +11 -0
  33. package/dist/src/combo-box/clear.js.map +1 -0
  34. package/dist/src/combo-box/ia-combo-box.d.ts +40 -9
  35. package/dist/src/combo-box/ia-combo-box.js +363 -272
  36. package/dist/src/combo-box/ia-combo-box.js.map +1 -1
  37. package/dist/src/combo-box/models.d.ts +14 -0
  38. package/dist/src/combo-box/models.js +32 -1
  39. package/dist/src/combo-box/models.js.map +1 -1
  40. package/dist/src/data-source/collection-browser-data-source.js +35 -47
  41. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  42. package/dist/src/empty-placeholder.js +19 -18
  43. package/dist/src/empty-placeholder.js.map +1 -1
  44. package/dist/src/expanded-date-picker.js +6 -10
  45. package/dist/src/expanded-date-picker.js.map +1 -1
  46. package/dist/src/language-code-handler/language-code-handler.js +2 -2
  47. package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
  48. package/dist/src/manage/manage-bar.js +86 -92
  49. package/dist/src/manage/manage-bar.js.map +1 -1
  50. package/dist/src/manage/remove-items-modal-content.js +2 -2
  51. package/dist/src/manage/remove-items-modal-content.js.map +1 -1
  52. package/dist/src/models.js +36 -40
  53. package/dist/src/models.js.map +1 -1
  54. package/dist/src/restoration-state-handler.js +9 -10
  55. package/dist/src/restoration-state-handler.js.map +1 -1
  56. package/dist/src/sort-filter-bar/alpha-bar.js +9 -14
  57. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  58. package/dist/src/sort-filter-bar/sort-filter-bar.js +14 -24
  59. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  60. package/dist/src/tiles/base-tile-component.js +1 -2
  61. package/dist/src/tiles/base-tile-component.js.map +1 -1
  62. package/dist/src/tiles/grid/account-tile.js +36 -38
  63. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  64. package/dist/src/tiles/grid/collection-tile.js +79 -82
  65. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  66. package/dist/src/tiles/grid/item-tile.js +154 -164
  67. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  68. package/dist/src/tiles/grid/search-tile.js +42 -43
  69. package/dist/src/tiles/grid/search-tile.js.map +1 -1
  70. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +119 -119
  71. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
  72. package/dist/src/tiles/grid/tile-stats.js +2 -3
  73. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  74. package/dist/src/tiles/hover/hover-pane-controller.js +42 -49
  75. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  76. package/dist/src/tiles/hover/tile-hover-pane.js +113 -114
  77. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
  78. package/dist/src/tiles/image-block.js +5 -8
  79. package/dist/src/tiles/image-block.js.map +1 -1
  80. package/dist/src/tiles/item-image.js +12 -19
  81. package/dist/src/tiles/item-image.js.map +1 -1
  82. package/dist/src/tiles/list/tile-list-compact.js +114 -122
  83. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  84. package/dist/src/tiles/list/tile-list.js +326 -347
  85. package/dist/src/tiles/list/tile-list.js.map +1 -1
  86. package/dist/src/tiles/overlay/icon-overlay.js +1 -2
  87. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
  88. package/dist/src/tiles/overlay/text-overlay.js +2 -4
  89. package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
  90. package/dist/src/tiles/text-snippet-block.js +2 -4
  91. package/dist/src/tiles/text-snippet-block.js.map +1 -1
  92. package/dist/src/tiles/tile-dispatcher.js +233 -241
  93. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  94. package/dist/src/tiles/tile-display-value-provider.js +5 -9
  95. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  96. package/dist/src/tiles/tile-mediatype-icon.js +12 -19
  97. package/dist/src/tiles/tile-mediatype-icon.js.map +1 -1
  98. package/dist/src/utils/collapse-repeated-quotes.js +1 -1
  99. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -1
  100. package/dist/src/utils/facet-utils.js +3 -5
  101. package/dist/src/utils/facet-utils.js.map +1 -1
  102. package/dist/src/utils/format-count.js +10 -10
  103. package/dist/src/utils/format-count.js.map +1 -1
  104. package/dist/src/utils/format-date.js.map +1 -1
  105. package/dist/src/utils/resolve-mediatype.js +2 -3
  106. package/dist/src/utils/resolve-mediatype.js.map +1 -1
  107. package/dist/test/collection-browser.test.js +131 -185
  108. package/dist/test/collection-browser.test.js.map +1 -1
  109. package/dist/test/collection-facets/facet-row.test.js +60 -75
  110. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  111. package/dist/test/collection-facets/facets-template.test.js +17 -23
  112. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  113. package/dist/test/collection-facets/more-facets-content.test.js +22 -32
  114. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  115. package/dist/test/collection-facets/more-facets-pagination.test.js +16 -22
  116. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
  117. package/dist/test/collection-facets/toggle-switch.test.js +22 -19
  118. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
  119. package/dist/test/collection-facets.test.js +80 -97
  120. package/dist/test/collection-facets.test.js.map +1 -1
  121. package/dist/test/empty-placeholder.test.js +11 -17
  122. package/dist/test/empty-placeholder.test.js.map +1 -1
  123. package/dist/test/expanded-date-picker.test.js +8 -14
  124. package/dist/test/expanded-date-picker.test.js.map +1 -1
  125. package/dist/test/icon-overlay.test.js +7 -6
  126. package/dist/test/icon-overlay.test.js.map +1 -1
  127. package/dist/test/image-block.test.js +16 -26
  128. package/dist/test/image-block.test.js.map +1 -1
  129. package/dist/test/item-image.test.js +23 -32
  130. package/dist/test/item-image.test.js.map +1 -1
  131. package/dist/test/manage/manage-bar.test.js +21 -33
  132. package/dist/test/manage/manage-bar.test.js.map +1 -1
  133. package/dist/test/manage/remove-items-modal-content.test.js +10 -15
  134. package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
  135. package/dist/test/mocks/mock-search-service.js +2 -3
  136. package/dist/test/mocks/mock-search-service.js.map +1 -1
  137. package/dist/test/restoration-state-handler.test.js +13 -21
  138. package/dist/test/restoration-state-handler.test.js.map +1 -1
  139. package/dist/test/review-block.test.js +16 -18
  140. package/dist/test/review-block.test.js.map +1 -1
  141. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +2 -3
  142. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
  143. package/dist/test/sort-filter-bar/alpha-bar.test.js +18 -24
  144. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
  145. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +178 -180
  146. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  147. package/dist/test/text-overlay.test.js +16 -15
  148. package/dist/test/text-overlay.test.js.map +1 -1
  149. package/dist/test/text-snippet-block.test.js +14 -19
  150. package/dist/test/text-snippet-block.test.js.map +1 -1
  151. package/dist/test/tile-stats.test.js +73 -34
  152. package/dist/test/tile-stats.test.js.map +1 -1
  153. package/dist/test/tiles/grid/account-tile.test.js +25 -25
  154. package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
  155. package/dist/test/tiles/grid/collection-tile.test.js +13 -19
  156. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
  157. package/dist/test/tiles/grid/item-tile.test.js +141 -168
  158. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  159. package/dist/test/tiles/grid/search-tile.test.js +9 -13
  160. package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
  161. package/dist/test/tiles/hover/hover-pane-controller.test.js +50 -62
  162. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  163. package/dist/test/tiles/hover/tile-hover-pane.test.js +12 -16
  164. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
  165. package/dist/test/tiles/list/tile-list-compact.test.js +104 -118
  166. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  167. package/dist/test/tiles/list/tile-list.test.js +202 -231
  168. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  169. package/dist/test/tiles/tile-dispatcher.test.js +97 -110
  170. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  171. package/dist/test/tiles/tile-mediatype-icon.test.js +12 -24
  172. package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -1
  173. package/dist/test/utils/format-date.test.js.map +1 -1
  174. package/index.html +1 -1
  175. package/package.json +5 -3
  176. package/src/collection-browser.ts +3060 -3030
  177. package/src/collection-facets/models.ts +10 -10
  178. package/src/collection-facets/more-facets-content.ts +639 -639
  179. package/src/collection-facets.ts +1 -1
  180. package/src/combo-box/caret-closed.ts +5 -11
  181. package/src/combo-box/caret-open.ts +5 -11
  182. package/src/combo-box/clear.ts +11 -0
  183. package/src/combo-box/ia-combo-box.ts +1288 -1180
  184. package/src/combo-box/models.ts +31 -1
  185. package/src/manage/manage-bar.ts +247 -247
  186. package/src/restoration-state-handler.ts +5 -1
  187. package/src/tiles/base-tile-component.ts +65 -65
  188. package/src/tiles/grid/account-tile.ts +113 -113
  189. package/src/tiles/grid/collection-tile.ts +163 -163
  190. package/src/tiles/grid/item-tile.ts +340 -340
  191. package/src/tiles/grid/search-tile.ts +90 -90
  192. package/src/tiles/grid/styles/tile-grid-shared-styles.ts +130 -130
  193. package/src/tiles/hover/hover-pane-controller.ts +613 -613
  194. package/src/tiles/hover/tile-hover-pane.ts +184 -184
  195. package/src/tiles/list/tile-list-compact.ts +239 -239
  196. package/src/tiles/list/tile-list.ts +700 -700
  197. package/src/tiles/tile-dispatcher.ts +517 -517
  198. package/src/utils/format-date.ts +62 -62
  199. package/test/collection-facets/facet-row.test.ts +375 -375
  200. package/test/collection-facets.test.ts +928 -928
  201. package/test/tiles/grid/item-tile.test.ts +520 -520
  202. package/test/tiles/hover/hover-pane-controller.test.ts +418 -418
  203. package/test/tiles/list/tile-list-compact.test.ts +282 -282
  204. package/test/tiles/list/tile-list.test.ts +552 -552
  205. package/test/tiles/tile-dispatcher.test.ts +283 -283
  206. package/test/utils/format-date.test.ts +89 -89
  207. package/tsconfig.json +8 -3
  208. package/vite.config.ts +29 -22
@@ -1,282 +1,282 @@
1
- import { expect, fixture } from '@open-wc/testing';
2
- import { html } from 'lit';
3
- import type { TileListCompact } from '../../../src/tiles/list/tile-list-compact';
4
-
5
- import '../../../src/tiles/list/tile-list-compact';
6
- import type { TileModel } from '../../../src/models';
7
-
8
- describe('List Tile Compact', () => {
9
- it('should render initial component', async () => {
10
- const el = await fixture<TileListCompact>(
11
- html`<tile-list-compact></tile-list-compact>`,
12
- );
13
-
14
- const listContainer = el.shadowRoot?.querySelector('#list-line');
15
- const itemTitle = el.shadowRoot?.querySelector('#title');
16
- const imageBlock = el.shadowRoot?.querySelector('image-block');
17
- const itemIcon = el.shadowRoot?.querySelector('#icon');
18
- const itemViews = el.shadowRoot?.querySelector('#views');
19
-
20
- expect(listContainer).to.exist;
21
- expect(itemTitle).to.exist;
22
- expect(imageBlock).to.exist;
23
- expect(itemIcon).to.exist;
24
- expect(itemViews).to.exist;
25
- });
26
-
27
- it('should render with creator element with title', async () => {
28
- const el = await fixture<TileListCompact>(html`
29
- <tile-list-compact
30
- .model=${{ creators: ['someone'] }}
31
- ></tile-list-compact>
32
- `);
33
-
34
- const creator = el.shadowRoot?.querySelector('#creator');
35
-
36
- expect(creator).to.exist;
37
- });
38
-
39
- it('should render title link with model href if provided', async () => {
40
- const el = await fixture<TileListCompact>(html`
41
- <tile-list-compact
42
- .baseNavigationUrl=${''}
43
- .model=${{ identifier: 'id', title: 'foo', href: '/foo/bar' }}
44
- ></tile-list-compact>
45
- `);
46
-
47
- const title = el.shadowRoot?.querySelector('#title');
48
-
49
- expect(title).to.exist;
50
- expect(title?.getAttribute('href')).to.equal('/foo/bar');
51
- });
52
-
53
- it('should render weekly views when sorting by week', async () => {
54
- const el = await fixture<TileListCompact>(html`
55
- <tile-list-compact
56
- .model=${{ viewCount: 50, weeklyViewCount: 10 }}
57
- .sortParam=${{ field: 'week', direction: 'desc' }}
58
- >
59
- </tile-list-compact>
60
- `);
61
-
62
- const viewsColumn = el.shadowRoot?.getElementById('views');
63
- expect(viewsColumn).to.exist;
64
- expect(viewsColumn?.textContent?.trim()).to.equal('10');
65
- });
66
-
67
- it('should render 0 for views if missing model', async () => {
68
- const el = await fixture<TileListCompact>(html`
69
- <tile-list-compact .sortParam=${{ field: 'week', direction: 'desc' }}>
70
- </tile-list-compact>
71
- `);
72
-
73
- const viewsColumn = el.shadowRoot?.getElementById('views');
74
- expect(viewsColumn).to.exist;
75
- expect(viewsColumn?.textContent?.trim()).to.equal('0');
76
- });
77
-
78
- it('should render published date when sorting by it', async () => {
79
- const model: Partial<TileModel> = {
80
- dateAdded: new Date(2010, 0, 2),
81
- dateArchived: new Date(2011, 0, 2),
82
- datePublished: new Date(2012, 0, 2),
83
- dateReviewed: new Date(2013, 0, 2),
84
- };
85
-
86
- const el = await fixture<TileListCompact>(html`
87
- <tile-list-compact
88
- .model=${model}
89
- .sortParam=${{ field: 'date', direction: 'desc' }}
90
- >
91
- </tile-list-compact>
92
- `);
93
-
94
- const dateColumn = el.shadowRoot?.getElementById('date');
95
- expect(dateColumn).to.exist;
96
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2012');
97
- });
98
-
99
- it('should render added date when sorting by it', async () => {
100
- const model: Partial<TileModel> = {
101
- dateAdded: new Date(2010, 0, 2),
102
- dateArchived: new Date(2011, 0, 2),
103
- datePublished: new Date(2012, 0, 2),
104
- dateReviewed: new Date(2013, 0, 2),
105
- };
106
-
107
- const el = await fixture<TileListCompact>(html`
108
- <tile-list-compact
109
- .model=${model}
110
- .sortParam=${{ field: 'addeddate', direction: 'desc' }}
111
- >
112
- </tile-list-compact>
113
- `);
114
-
115
- const dateColumn = el.shadowRoot?.getElementById('date');
116
- expect(dateColumn).to.exist;
117
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2010');
118
- });
119
-
120
- it('should render archived date when sorting by it', async () => {
121
- const model: Partial<TileModel> = {
122
- dateAdded: new Date(2010, 0, 2),
123
- dateArchived: new Date(2011, 0, 2),
124
- datePublished: new Date(2012, 0, 2),
125
- dateReviewed: new Date(2013, 0, 2),
126
- };
127
-
128
- const el = await fixture<TileListCompact>(html`
129
- <tile-list-compact
130
- .model=${model}
131
- .sortParam=${{ field: 'publicdate', direction: 'desc' }}
132
- >
133
- </tile-list-compact>
134
- `);
135
-
136
- const dateColumn = el.shadowRoot?.getElementById('date');
137
- expect(dateColumn).to.exist;
138
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2011');
139
- });
140
-
141
- it('should render reviewed date when sorting by it', async () => {
142
- const model: Partial<TileModel> = {
143
- dateAdded: new Date(2010, 0, 2),
144
- dateArchived: new Date(2011, 0, 2),
145
- datePublished: new Date(2012, 0, 2),
146
- dateReviewed: new Date(2013, 0, 2),
147
- };
148
-
149
- const el = await fixture<TileListCompact>(html`
150
- <tile-list-compact
151
- .model=${model}
152
- .sortParam=${{ field: 'reviewdate', direction: 'desc' }}
153
- >
154
- </tile-list-compact>
155
- `);
156
-
157
- const dateColumn = el.shadowRoot?.getElementById('date');
158
- expect(dateColumn).to.exist;
159
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2013');
160
- });
161
-
162
- it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {
163
- const model: Partial<TileModel> = {
164
- datePublished: new Date('2012-01-01T00:00:00Z'),
165
- };
166
-
167
- const el = await fixture<TileListCompact>(html`
168
- <tile-list-compact
169
- .model=${model}
170
- .sortParam=${{ field: 'date', direction: 'desc' }}
171
- >
172
- </tile-list-compact>
173
- `);
174
-
175
- const dateColumn = el.shadowRoot?.getElementById('date');
176
- expect(dateColumn).to.exist;
177
- expect(dateColumn?.textContent?.trim()).to.equal('2012');
178
- });
179
-
180
- it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {
181
- const model: Partial<TileModel> = {
182
- dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),
183
- dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),
184
- datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),
185
- dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),
186
- };
187
-
188
- const el = await fixture<TileListCompact>(html`
189
- <tile-list-compact
190
- .model=${model}
191
- .sortParam=${{ field: 'addeddate', direction: 'desc' }}
192
- >
193
- </tile-list-compact>
194
- `);
195
-
196
- let dateColumn = el.shadowRoot?.getElementById('date');
197
- expect(dateColumn).to.exist;
198
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2010');
199
-
200
- el.sortParam = { field: 'publicdate', direction: 'desc' };
201
- await el.updateComplete;
202
- dateColumn = el.shadowRoot?.getElementById('date');
203
- expect(dateColumn).to.exist;
204
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2011');
205
-
206
- el.sortParam = { field: 'reviewdate', direction: 'desc' };
207
- await el.updateComplete;
208
- dateColumn = el.shadowRoot?.getElementById('date');
209
- expect(dateColumn).to.exist;
210
- expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2013');
211
- });
212
-
213
- it('should display dates in UTC time zone by default', async () => {
214
- const model: Partial<TileModel> = {
215
- datePublished: new Date('2012-02-15T00:00:00Z'),
216
- };
217
-
218
- const el = await fixture<TileListCompact>(html`
219
- <tile-list-compact
220
- .model=${model}
221
- .sortParam=${{ field: 'date', direction: 'desc' }}
222
- >
223
- </tile-list-compact>
224
- `);
225
-
226
- const dateColumn = el.shadowRoot?.getElementById('date');
227
- expect(dateColumn).to.exist;
228
- expect(dateColumn?.textContent?.trim()).to.equal('Feb 15, 2012');
229
- });
230
-
231
- it('should display dates in local time when useLocalTime option is true', async () => {
232
- // Expected behavior depends on the time zone offset where the testing occurs
233
- const offset = new Date().getTimezoneOffset();
234
- let datePublished, expected;
235
- if (offset > 0) {
236
- // Positive local time zone offsets have earlier local dates than UTC
237
- datePublished = new Date('2012-02-15T00:00:00Z');
238
- expected = 'Feb 14, 2012';
239
- } else if (offset < 0) {
240
- // Negative local time zone offsets have later local dates than UTC
241
- datePublished = new Date('2012-02-15T23:59:59Z');
242
- expected = 'Feb 16, 2012';
243
- } else {
244
- // Local time may just be UTC itself
245
- datePublished = new Date('2012-02-15T00:00:00Z');
246
- expected = 'Feb 15, 2012';
247
- }
248
-
249
- const model: Partial<TileModel> = {
250
- datePublished,
251
- };
252
-
253
- const el = await fixture<TileListCompact>(html`
254
- <tile-list-compact
255
- useLocalTime
256
- .model=${model}
257
- .sortParam=${{ field: 'date', direction: 'desc' }}
258
- >
259
- </tile-list-compact>
260
- `);
261
-
262
- const dateColumn = el.shadowRoot?.getElementById('date');
263
- expect(dateColumn).to.exist;
264
- expect(dateColumn?.textContent?.trim()).to.equal(expected);
265
- });
266
-
267
- it('should show the first creator matching the letter filter, if defined', async () => {
268
- const model: Partial<TileModel> = {
269
- creator: 'foo',
270
- creators: ['foo', 'bar', 'baz'],
271
- };
272
-
273
- const el = await fixture<TileListCompact>(html`
274
- <tile-list-compact .model=${model} .creatorFilter=${'B'}>
275
- </tile-list-compact>
276
- `);
277
-
278
- const creator = el.shadowRoot?.getElementById('creator');
279
- expect(creator).to.exist;
280
- expect(creator?.textContent?.trim()).to.equal('bar');
281
- });
282
- });
1
+ import { expect, fixture } from '@open-wc/testing';
2
+ import { html } from 'lit';
3
+ import type { TileListCompact } from '../../../src/tiles/list/tile-list-compact';
4
+
5
+ import '../../../src/tiles/list/tile-list-compact';
6
+ import type { TileModel } from '../../../src/models';
7
+
8
+ describe('List Tile Compact', () => {
9
+ it('should render initial component', async () => {
10
+ const el = await fixture<TileListCompact>(
11
+ html`<tile-list-compact></tile-list-compact>`,
12
+ );
13
+
14
+ const listContainer = el.shadowRoot?.querySelector('#list-line');
15
+ const itemTitle = el.shadowRoot?.querySelector('#title');
16
+ const imageBlock = el.shadowRoot?.querySelector('image-block');
17
+ const itemIcon = el.shadowRoot?.querySelector('#icon');
18
+ const itemViews = el.shadowRoot?.querySelector('#views');
19
+
20
+ expect(listContainer).to.exist;
21
+ expect(itemTitle).to.exist;
22
+ expect(imageBlock).to.exist;
23
+ expect(itemIcon).to.exist;
24
+ expect(itemViews).to.exist;
25
+ });
26
+
27
+ it('should render with creator element with title', async () => {
28
+ const el = await fixture<TileListCompact>(html`
29
+ <tile-list-compact
30
+ .model=${{ creators: ['someone'] }}
31
+ ></tile-list-compact>
32
+ `);
33
+
34
+ const creator = el.shadowRoot?.querySelector('#creator');
35
+
36
+ expect(creator).to.exist;
37
+ });
38
+
39
+ it('should render title link with model href if provided', async () => {
40
+ const el = await fixture<TileListCompact>(html`
41
+ <tile-list-compact
42
+ .baseNavigationUrl=${''}
43
+ .model=${{ identifier: 'id', title: 'foo', href: '/foo/bar' }}
44
+ ></tile-list-compact>
45
+ `);
46
+
47
+ const title = el.shadowRoot?.querySelector('#title');
48
+
49
+ expect(title).to.exist;
50
+ expect(title?.getAttribute('href')).to.equal('/foo/bar');
51
+ });
52
+
53
+ it('should render weekly views when sorting by week', async () => {
54
+ const el = await fixture<TileListCompact>(html`
55
+ <tile-list-compact
56
+ .model=${{ viewCount: 50, weeklyViewCount: 10 }}
57
+ .sortParam=${{ field: 'week', direction: 'desc' }}
58
+ >
59
+ </tile-list-compact>
60
+ `);
61
+
62
+ const viewsColumn = el.shadowRoot?.getElementById('views');
63
+ expect(viewsColumn).to.exist;
64
+ expect(viewsColumn?.textContent?.trim()).to.equal('10');
65
+ });
66
+
67
+ it('should render 0 for views if missing model', async () => {
68
+ const el = await fixture<TileListCompact>(html`
69
+ <tile-list-compact .sortParam=${{ field: 'week', direction: 'desc' }}>
70
+ </tile-list-compact>
71
+ `);
72
+
73
+ const viewsColumn = el.shadowRoot?.getElementById('views');
74
+ expect(viewsColumn).to.exist;
75
+ expect(viewsColumn?.textContent?.trim()).to.equal('0');
76
+ });
77
+
78
+ it('should render published date when sorting by it', async () => {
79
+ const model: Partial<TileModel> = {
80
+ dateAdded: new Date(2010, 0, 2),
81
+ dateArchived: new Date(2011, 0, 2),
82
+ datePublished: new Date(2012, 0, 2),
83
+ dateReviewed: new Date(2013, 0, 2),
84
+ };
85
+
86
+ const el = await fixture<TileListCompact>(html`
87
+ <tile-list-compact
88
+ .model=${model}
89
+ .sortParam=${{ field: 'date', direction: 'desc' }}
90
+ >
91
+ </tile-list-compact>
92
+ `);
93
+
94
+ const dateColumn = el.shadowRoot?.getElementById('date');
95
+ expect(dateColumn).to.exist;
96
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2012');
97
+ });
98
+
99
+ it('should render added date when sorting by it', async () => {
100
+ const model: Partial<TileModel> = {
101
+ dateAdded: new Date(2010, 0, 2),
102
+ dateArchived: new Date(2011, 0, 2),
103
+ datePublished: new Date(2012, 0, 2),
104
+ dateReviewed: new Date(2013, 0, 2),
105
+ };
106
+
107
+ const el = await fixture<TileListCompact>(html`
108
+ <tile-list-compact
109
+ .model=${model}
110
+ .sortParam=${{ field: 'addeddate', direction: 'desc' }}
111
+ >
112
+ </tile-list-compact>
113
+ `);
114
+
115
+ const dateColumn = el.shadowRoot?.getElementById('date');
116
+ expect(dateColumn).to.exist;
117
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2010');
118
+ });
119
+
120
+ it('should render archived date when sorting by it', async () => {
121
+ const model: Partial<TileModel> = {
122
+ dateAdded: new Date(2010, 0, 2),
123
+ dateArchived: new Date(2011, 0, 2),
124
+ datePublished: new Date(2012, 0, 2),
125
+ dateReviewed: new Date(2013, 0, 2),
126
+ };
127
+
128
+ const el = await fixture<TileListCompact>(html`
129
+ <tile-list-compact
130
+ .model=${model}
131
+ .sortParam=${{ field: 'publicdate', direction: 'desc' }}
132
+ >
133
+ </tile-list-compact>
134
+ `);
135
+
136
+ const dateColumn = el.shadowRoot?.getElementById('date');
137
+ expect(dateColumn).to.exist;
138
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2011');
139
+ });
140
+
141
+ it('should render reviewed date when sorting by it', async () => {
142
+ const model: Partial<TileModel> = {
143
+ dateAdded: new Date(2010, 0, 2),
144
+ dateArchived: new Date(2011, 0, 2),
145
+ datePublished: new Date(2012, 0, 2),
146
+ dateReviewed: new Date(2013, 0, 2),
147
+ };
148
+
149
+ const el = await fixture<TileListCompact>(html`
150
+ <tile-list-compact
151
+ .model=${model}
152
+ .sortParam=${{ field: 'reviewdate', direction: 'desc' }}
153
+ >
154
+ </tile-list-compact>
155
+ `);
156
+
157
+ const dateColumn = el.shadowRoot?.getElementById('date');
158
+ expect(dateColumn).to.exist;
159
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 02, 2013');
160
+ });
161
+
162
+ it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {
163
+ const model: Partial<TileModel> = {
164
+ datePublished: new Date('2012-01-01T00:00:00Z'),
165
+ };
166
+
167
+ const el = await fixture<TileListCompact>(html`
168
+ <tile-list-compact
169
+ .model=${model}
170
+ .sortParam=${{ field: 'date', direction: 'desc' }}
171
+ >
172
+ </tile-list-compact>
173
+ `);
174
+
175
+ const dateColumn = el.shadowRoot?.getElementById('date');
176
+ expect(dateColumn).to.exist;
177
+ expect(dateColumn?.textContent?.trim()).to.equal('2012');
178
+ });
179
+
180
+ it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {
181
+ const model: Partial<TileModel> = {
182
+ dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),
183
+ dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),
184
+ datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),
185
+ dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),
186
+ };
187
+
188
+ const el = await fixture<TileListCompact>(html`
189
+ <tile-list-compact
190
+ .model=${model}
191
+ .sortParam=${{ field: 'addeddate', direction: 'desc' }}
192
+ >
193
+ </tile-list-compact>
194
+ `);
195
+
196
+ let dateColumn = el.shadowRoot?.getElementById('date');
197
+ expect(dateColumn).to.exist;
198
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2010');
199
+
200
+ el.sortParam = { field: 'publicdate', direction: 'desc' };
201
+ await el.updateComplete;
202
+ dateColumn = el.shadowRoot?.getElementById('date');
203
+ expect(dateColumn).to.exist;
204
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2011');
205
+
206
+ el.sortParam = { field: 'reviewdate', direction: 'desc' };
207
+ await el.updateComplete;
208
+ dateColumn = el.shadowRoot?.getElementById('date');
209
+ expect(dateColumn).to.exist;
210
+ expect(dateColumn?.textContent?.trim()).to.equal('Jan 01, 2013');
211
+ });
212
+
213
+ it('should display dates in UTC time zone by default', async () => {
214
+ const model: Partial<TileModel> = {
215
+ datePublished: new Date('2012-02-15T00:00:00Z'),
216
+ };
217
+
218
+ const el = await fixture<TileListCompact>(html`
219
+ <tile-list-compact
220
+ .model=${model}
221
+ .sortParam=${{ field: 'date', direction: 'desc' }}
222
+ >
223
+ </tile-list-compact>
224
+ `);
225
+
226
+ const dateColumn = el.shadowRoot?.getElementById('date');
227
+ expect(dateColumn).to.exist;
228
+ expect(dateColumn?.textContent?.trim()).to.equal('Feb 15, 2012');
229
+ });
230
+
231
+ it('should display dates in local time when useLocalTime option is true', async () => {
232
+ // Expected behavior depends on the time zone offset where the testing occurs
233
+ const offset = new Date().getTimezoneOffset();
234
+ let datePublished, expected;
235
+ if (offset > 0) {
236
+ // Positive local time zone offsets have earlier local dates than UTC
237
+ datePublished = new Date('2012-02-15T00:00:00Z');
238
+ expected = 'Feb 14, 2012';
239
+ } else if (offset < 0) {
240
+ // Negative local time zone offsets have later local dates than UTC
241
+ datePublished = new Date('2012-02-15T23:59:59Z');
242
+ expected = 'Feb 16, 2012';
243
+ } else {
244
+ // Local time may just be UTC itself
245
+ datePublished = new Date('2012-02-15T00:00:00Z');
246
+ expected = 'Feb 15, 2012';
247
+ }
248
+
249
+ const model: Partial<TileModel> = {
250
+ datePublished,
251
+ };
252
+
253
+ const el = await fixture<TileListCompact>(html`
254
+ <tile-list-compact
255
+ useLocalTime
256
+ .model=${model}
257
+ .sortParam=${{ field: 'date', direction: 'desc' }}
258
+ >
259
+ </tile-list-compact>
260
+ `);
261
+
262
+ const dateColumn = el.shadowRoot?.getElementById('date');
263
+ expect(dateColumn).to.exist;
264
+ expect(dateColumn?.textContent?.trim()).to.equal(expected);
265
+ });
266
+
267
+ it('should show the first creator matching the letter filter, if defined', async () => {
268
+ const model: Partial<TileModel> = {
269
+ creator: 'foo',
270
+ creators: ['foo', 'bar', 'baz'],
271
+ };
272
+
273
+ const el = await fixture<TileListCompact>(html`
274
+ <tile-list-compact .model=${model} .creatorFilter=${'B'}>
275
+ </tile-list-compact>
276
+ `);
277
+
278
+ const creator = el.shadowRoot?.getElementById('creator');
279
+ expect(creator).to.exist;
280
+ expect(creator?.textContent?.trim()).to.equal('bar');
281
+ });
282
+ });