@internetarchive/collection-browser 0.2.14 → 0.2.15
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.
- package/package.json +1 -1
- package/src/collection-browser.ts +2 -1
- package/src/models.ts +9 -4
- package/src/sort-filter-bar/sort-filter-bar.ts +98 -12
- package/test/collection-browser.test.ts +43 -0
- package/test/sort-filter-bar/sort-filter-bar.test.ts +187 -0
- package/dist/index.d.ts +0 -9
- package/dist/index.js.map +0 -1
- package/dist/src/app-root.d.ts +0 -32
- package/dist/src/app-root.js +0 -285
- package/dist/src/app-root.js.map +0 -1
- package/dist/src/assets/img/icons/chevron.d.ts +0 -2
- package/dist/src/assets/img/icons/chevron.js +0 -4
- package/dist/src/assets/img/icons/chevron.js.map +0 -1
- package/dist/src/assets/img/icons/empty-query.d.ts +0 -2
- package/dist/src/assets/img/icons/empty-query.js +0 -5
- package/dist/src/assets/img/icons/empty-query.js.map +0 -1
- package/dist/src/assets/img/icons/eye-closed.d.ts +0 -2
- package/dist/src/assets/img/icons/eye-closed.js +0 -5
- package/dist/src/assets/img/icons/eye-closed.js.map +0 -1
- package/dist/src/assets/img/icons/eye.d.ts +0 -2
- package/dist/src/assets/img/icons/eye.js +0 -5
- package/dist/src/assets/img/icons/eye.js.map +0 -1
- package/dist/src/assets/img/icons/favorite-filled.d.ts +0 -1
- package/dist/src/assets/img/icons/favorite-filled.js +0 -11
- package/dist/src/assets/img/icons/favorite-filled.js.map +0 -1
- package/dist/src/assets/img/icons/login-required.d.ts +0 -1
- package/dist/src/assets/img/icons/login-required.js +0 -30
- package/dist/src/assets/img/icons/login-required.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/account.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/account.js +0 -14
- package/dist/src/assets/img/icons/mediatype/account.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +0 -14
- package/dist/src/assets/img/icons/mediatype/audio.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +0 -12
- package/dist/src/assets/img/icons/mediatype/collection.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/data.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/data.js +0 -15
- package/dist/src/assets/img/icons/mediatype/data.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/etree.js +0 -14
- package/dist/src/assets/img/icons/mediatype/etree.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/film.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/film.js +0 -14
- package/dist/src/assets/img/icons/mediatype/film.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/images.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/images.js +0 -13
- package/dist/src/assets/img/icons/mediatype/images.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/radio.js +0 -15
- package/dist/src/assets/img/icons/mediatype/radio.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/software.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/software.js +0 -13
- package/dist/src/assets/img/icons/mediatype/software.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +0 -13
- package/dist/src/assets/img/icons/mediatype/texts.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +0 -14
- package/dist/src/assets/img/icons/mediatype/tv.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/video.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/video.js +0 -14
- package/dist/src/assets/img/icons/mediatype/video.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/web.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/web.js +0 -13
- package/dist/src/assets/img/icons/mediatype/web.js.map +0 -1
- package/dist/src/assets/img/icons/null-result.d.ts +0 -2
- package/dist/src/assets/img/icons/null-result.js +0 -5
- package/dist/src/assets/img/icons/null-result.js.map +0 -1
- package/dist/src/assets/img/icons/restricted.d.ts +0 -1
- package/dist/src/assets/img/icons/restricted.js +0 -29
- package/dist/src/assets/img/icons/restricted.js.map +0 -1
- package/dist/src/assets/img/icons/reviews.d.ts +0 -1
- package/dist/src/assets/img/icons/reviews.js +0 -11
- package/dist/src/assets/img/icons/reviews.js.map +0 -1
- package/dist/src/assets/img/icons/upload.d.ts +0 -1
- package/dist/src/assets/img/icons/upload.js +0 -12
- package/dist/src/assets/img/icons/upload.js.map +0 -1
- package/dist/src/assets/img/icons/views.d.ts +0 -1
- package/dist/src/assets/img/icons/views.js +0 -11
- package/dist/src/assets/img/icons/views.js.map +0 -1
- package/dist/src/circular-activity-indicator.d.ts +0 -5
- package/dist/src/circular-activity-indicator.js +0 -66
- package/dist/src/circular-activity-indicator.js.map +0 -1
- package/dist/src/collection-browser.d.ts +0 -214
- package/dist/src/collection-browser.js +0 -1241
- package/dist/src/collection-browser.js.map +0 -1
- package/dist/src/collection-facets.d.ts +0 -63
- package/dist/src/collection-facets.js +0 -560
- package/dist/src/collection-facets.js.map +0 -1
- package/dist/src/empty-placeholder.d.ts +0 -11
- package/dist/src/empty-placeholder.js +0 -83
- package/dist/src/empty-placeholder.js.map +0 -1
- package/dist/src/language-code-handler/language-code-handler.d.ts +0 -37
- package/dist/src/language-code-handler/language-code-handler.js +0 -27
- package/dist/src/language-code-handler/language-code-handler.js.map +0 -1
- package/dist/src/language-code-handler/language-code-mapping.d.ts +0 -1
- package/dist/src/language-code-handler/language-code-mapping.js +0 -563
- package/dist/src/language-code-handler/language-code-mapping.js.map +0 -1
- package/dist/src/mediatype/mediatype-config.d.ts +0 -3
- package/dist/src/mediatype/mediatype-config.js +0 -86
- package/dist/src/mediatype/mediatype-config.js.map +0 -1
- package/dist/src/models.d.ts +0 -84
- package/dist/src/models.js +0 -58
- package/dist/src/models.js.map +0 -1
- package/dist/src/restoration-state-handler.d.ts +0 -38
- package/dist/src/restoration-state-handler.js +0 -204
- package/dist/src/restoration-state-handler.js.map +0 -1
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +0 -9
- package/dist/src/sort-filter-bar/alpha-bar.js +0 -98
- package/dist/src/sort-filter-bar/alpha-bar.js.map +0 -1
- package/dist/src/sort-filter-bar/img/compact.d.ts +0 -1
- package/dist/src/sort-filter-bar/img/compact.js +0 -5
- package/dist/src/sort-filter-bar/img/compact.js.map +0 -1
- package/dist/src/sort-filter-bar/img/list.d.ts +0 -1
- package/dist/src/sort-filter-bar/img/list.js +0 -5
- package/dist/src/sort-filter-bar/img/list.js.map +0 -1
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +0 -1
- package/dist/src/sort-filter-bar/img/sort-triangle.js +0 -5
- package/dist/src/sort-filter-bar/img/sort-triangle.js.map +0 -1
- package/dist/src/sort-filter-bar/img/tile.d.ts +0 -1
- package/dist/src/sort-filter-bar/img/tile.js +0 -5
- package/dist/src/sort-filter-bar/img/tile.js.map +0 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +0 -85
- package/dist/src/sort-filter-bar/sort-filter-bar.js +0 -698
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +0 -1
- package/dist/src/styles/item-image-styles.d.ts +0 -8
- package/dist/src/styles/item-image-styles.js +0 -102
- package/dist/src/styles/item-image-styles.js.map +0 -1
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +0 -5
- package/dist/src/tiles/collection-browser-loading-tile.js +0 -32
- package/dist/src/tiles/collection-browser-loading-tile.js.map +0 -1
- package/dist/src/tiles/grid/account-tile.d.ts +0 -8
- package/dist/src/tiles/grid/account-tile.js +0 -126
- package/dist/src/tiles/grid/account-tile.js.map +0 -1
- package/dist/src/tiles/grid/collection-tile.d.ts +0 -7
- package/dist/src/tiles/grid/collection-tile.js +0 -159
- package/dist/src/tiles/grid/collection-tile.js.map +0 -1
- package/dist/src/tiles/grid/item-tile.d.ts +0 -21
- package/dist/src/tiles/grid/item-tile.js +0 -183
- package/dist/src/tiles/grid/item-tile.js.map +0 -1
- package/dist/src/tiles/grid/tile-stats.d.ts +0 -10
- package/dist/src/tiles/grid/tile-stats.js +0 -134
- package/dist/src/tiles/grid/tile-stats.js.map +0 -1
- package/dist/src/tiles/image-block.d.ts +0 -17
- package/dist/src/tiles/image-block.js +0 -136
- package/dist/src/tiles/image-block.js.map +0 -1
- package/dist/src/tiles/item-image.d.ts +0 -31
- package/dist/src/tiles/item-image.js +0 -118
- package/dist/src/tiles/item-image.js.map +0 -1
- package/dist/src/tiles/list/account-label.d.ts +0 -1
- package/dist/src/tiles/list/account-label.js +0 -7
- package/dist/src/tiles/list/account-label.js.map +0 -1
- package/dist/src/tiles/list/date-label.d.ts +0 -1
- package/dist/src/tiles/list/date-label.js +0 -13
- package/dist/src/tiles/list/date-label.js.map +0 -1
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +0 -12
- package/dist/src/tiles/list/tile-list-compact-header.js +0 -84
- package/dist/src/tiles/list/tile-list-compact-header.js.map +0 -1
- package/dist/src/tiles/list/tile-list-compact.d.ts +0 -20
- package/dist/src/tiles/list/tile-list-compact.js +0 -180
- package/dist/src/tiles/list/tile-list-compact.js.map +0 -1
- package/dist/src/tiles/list/tile-list.d.ts +0 -48
- package/dist/src/tiles/list/tile-list.js +0 -455
- package/dist/src/tiles/list/tile-list.js.map +0 -1
- package/dist/src/tiles/mediatype-icon.d.ts +0 -9
- package/dist/src/tiles/mediatype-icon.js +0 -82
- package/dist/src/tiles/mediatype-icon.js.map +0 -1
- package/dist/src/tiles/overlay/icon-overlay.d.ts +0 -7
- package/dist/src/tiles/overlay/icon-overlay.js +0 -43
- package/dist/src/tiles/overlay/icon-overlay.js.map +0 -1
- package/dist/src/tiles/overlay/text-overlay.d.ts +0 -8
- package/dist/src/tiles/overlay/text-overlay.js +0 -57
- package/dist/src/tiles/overlay/text-overlay.js.map +0 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +0 -36
- package/dist/src/tiles/tile-dispatcher.js +0 -215
- package/dist/src/tiles/tile-dispatcher.js.map +0 -1
- package/dist/src/utils/format-count.d.ts +0 -7
- package/dist/src/utils/format-count.js +0 -76
- package/dist/src/utils/format-count.js.map +0 -1
- package/dist/src/utils/format-date.d.ts +0 -2
- package/dist/src/utils/format-date.js +0 -24
- package/dist/src/utils/format-date.js.map +0 -1
- package/dist/test/collection-browser.test.d.ts +0 -1
- package/dist/test/collection-browser.test.js +0 -47
- package/dist/test/collection-browser.test.js.map +0 -1
- package/dist/test/empty-placeholder.test.d.ts +0 -1
- package/dist/test/empty-placeholder.test.js +0 -34
- package/dist/test/empty-placeholder.test.js.map +0 -1
- package/dist/test/icon-overlay.test.d.ts +0 -1
- package/dist/test/icon-overlay.test.js +0 -31
- package/dist/test/icon-overlay.test.js.map +0 -1
- package/dist/test/item-image.test.d.ts +0 -1
- package/dist/test/item-image.test.js +0 -73
- package/dist/test/item-image.test.js.map +0 -1
- package/dist/test/mediatype-config.test.d.ts +0 -1
- package/dist/test/mediatype-config.test.js +0 -17
- package/dist/test/mediatype-config.test.js.map +0 -1
- package/dist/test/mocks/mock-collection-name-cache.d.ts +0 -7
- package/dist/test/mocks/mock-collection-name-cache.js +0 -14
- package/dist/test/mocks/mock-collection-name-cache.js.map +0 -1
- package/dist/test/mocks/mock-search-responses.d.ts +0 -3
- package/dist/test/mocks/mock-search-responses.js +0 -32
- package/dist/test/mocks/mock-search-responses.js.map +0 -1
- package/dist/test/mocks/mock-search-service.d.ts +0 -8
- package/dist/test/mocks/mock-search-service.js +0 -16
- package/dist/test/mocks/mock-search-service.js.map +0 -1
- package/dist/test/text-overlay.test.d.ts +0 -1
- package/dist/test/text-overlay.test.js +0 -48
- package/dist/test/text-overlay.test.js.map +0 -1
- package/dist/test/tile-stats.test.d.ts +0 -1
- package/dist/test/tile-stats.test.js +0 -42
- package/dist/test/tile-stats.test.js.map +0 -1
- package/dist/test/tiles/grid/item-tile.test.d.ts +0 -1
- package/dist/test/tiles/grid/item-tile.test.js +0 -96
- package/dist/test/tiles/grid/item-tile.test.js.map +0 -1
- package/dist/test/utils/format-count.test.d.ts +0 -1
- package/dist/test/utils/format-count.test.js +0 -24
- package/dist/test/utils/format-count.test.js.map +0 -1
- package/dist/test/utils/format-date.test.d.ts +0 -1
- package/dist/test/utils/format-date.test.js +0 -18
- package/dist/test/utils/format-date.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -497,7 +497,8 @@ export class CollectionBrowser
|
|
|
497
497
|
if (
|
|
498
498
|
changed.has('displayMode') ||
|
|
499
499
|
changed.has('baseNavigationUrl') ||
|
|
500
|
-
changed.has('baseImageUrl')
|
|
500
|
+
changed.has('baseImageUrl') ||
|
|
501
|
+
changed.has('loggedIn')
|
|
501
502
|
) {
|
|
502
503
|
this.infiniteScroller?.reload();
|
|
503
504
|
}
|
package/src/models.ts
CHANGED
|
@@ -47,7 +47,8 @@ export type CollectionBrowserContext = 'collection' | 'search';
|
|
|
47
47
|
*/
|
|
48
48
|
export enum SortField {
|
|
49
49
|
'relevance' = 'relevance',
|
|
50
|
-
'
|
|
50
|
+
'alltimeview' = 'alltimeview',
|
|
51
|
+
'weeklyview' = 'weeklyview',
|
|
51
52
|
'title' = 'title',
|
|
52
53
|
'datearchived' = 'datearchived',
|
|
53
54
|
'date' = 'date',
|
|
@@ -60,6 +61,7 @@ export enum SortField {
|
|
|
60
61
|
* The metadata fields we sort by that map to the SortFields above
|
|
61
62
|
*/
|
|
62
63
|
export type MetadataSortField =
|
|
64
|
+
| 'downloads'
|
|
63
65
|
| 'week'
|
|
64
66
|
| 'titleSorter'
|
|
65
67
|
| 'date'
|
|
@@ -72,7 +74,8 @@ export const SortFieldDisplayName: {
|
|
|
72
74
|
[key in SortField]: string;
|
|
73
75
|
} = {
|
|
74
76
|
relevance: 'Relevance',
|
|
75
|
-
|
|
77
|
+
alltimeview: 'All-time Views',
|
|
78
|
+
weeklyview: 'Weekly Views',
|
|
76
79
|
title: 'Title',
|
|
77
80
|
datearchived: 'Date Archived',
|
|
78
81
|
date: 'Date Published',
|
|
@@ -88,7 +91,8 @@ export const SortFieldToMetadataField: {
|
|
|
88
91
|
[key in SortField]: MetadataSortField | null;
|
|
89
92
|
} = {
|
|
90
93
|
relevance: null,
|
|
91
|
-
|
|
94
|
+
alltimeview: 'downloads',
|
|
95
|
+
weeklyview: 'week',
|
|
92
96
|
title: 'titleSorter',
|
|
93
97
|
datearchived: 'publicdate',
|
|
94
98
|
date: 'date',
|
|
@@ -103,13 +107,14 @@ export const SortFieldToMetadataField: {
|
|
|
103
107
|
export const MetadataFieldToSortField: {
|
|
104
108
|
[key in MetadataSortField]: SortField;
|
|
105
109
|
} = {
|
|
110
|
+
week: SortField.weeklyview,
|
|
111
|
+
downloads: SortField.alltimeview,
|
|
106
112
|
titleSorter: SortField.title,
|
|
107
113
|
date: SortField.date,
|
|
108
114
|
publicdate: SortField.datearchived,
|
|
109
115
|
reviewdate: SortField.datereviewed,
|
|
110
116
|
addeddate: SortField.dateadded,
|
|
111
117
|
creatorSorter: SortField.creator,
|
|
112
|
-
week: SortField.views,
|
|
113
118
|
};
|
|
114
119
|
|
|
115
120
|
export type FacetOption =
|
|
@@ -48,6 +48,8 @@ export class SortFilterBar
|
|
|
48
48
|
|
|
49
49
|
@state() dateSortSelectorVisible = false;
|
|
50
50
|
|
|
51
|
+
@state() viewSortSelectorVisible = false;
|
|
52
|
+
|
|
51
53
|
@state() desktopSelectorBarWidth = 0;
|
|
52
54
|
|
|
53
55
|
@state() selectorBarContainerWidth = 0;
|
|
@@ -76,6 +78,9 @@ export class SortFilterBar
|
|
|
76
78
|
<div id="display-style-selector">${this.displayOptionTemplate}</div>
|
|
77
79
|
</div>
|
|
78
80
|
|
|
81
|
+
${this.viewSortSelectorVisible && !this.mobileSelectorVisible
|
|
82
|
+
? this.viewSortSelector
|
|
83
|
+
: nothing}
|
|
79
84
|
${this.dateSortSelectorVisible && !this.mobileSelectorVisible
|
|
80
85
|
? this.dateSortSelector
|
|
81
86
|
: nothing}
|
|
@@ -103,7 +108,10 @@ export class SortFilterBar
|
|
|
103
108
|
this.alphaSelectorVisible = 'creator';
|
|
104
109
|
}
|
|
105
110
|
|
|
106
|
-
if (
|
|
111
|
+
if (
|
|
112
|
+
changed.has('dateSortSelectorVisible') ||
|
|
113
|
+
changed.has('viewSortSelectorVisible')
|
|
114
|
+
) {
|
|
107
115
|
this.setupEscapeListeners();
|
|
108
116
|
}
|
|
109
117
|
|
|
@@ -117,21 +125,22 @@ export class SortFilterBar
|
|
|
117
125
|
}
|
|
118
126
|
|
|
119
127
|
private setupEscapeListeners() {
|
|
120
|
-
if (this.dateSortSelectorVisible) {
|
|
128
|
+
if (this.dateSortSelectorVisible || this.viewSortSelectorVisible) {
|
|
121
129
|
document.addEventListener(
|
|
122
130
|
'keydown',
|
|
123
|
-
this.
|
|
131
|
+
this.boundSortBarSelectorEscapeListener
|
|
124
132
|
);
|
|
125
133
|
} else {
|
|
126
134
|
document.removeEventListener(
|
|
127
135
|
'keydown',
|
|
128
|
-
this.
|
|
136
|
+
this.boundSortBarSelectorEscapeListener
|
|
129
137
|
);
|
|
130
138
|
}
|
|
131
139
|
}
|
|
132
140
|
|
|
133
|
-
private
|
|
141
|
+
private boundSortBarSelectorEscapeListener = (e: KeyboardEvent) => {
|
|
134
142
|
if (e.key === 'Escape') {
|
|
143
|
+
this.viewSortSelectorVisible = false;
|
|
135
144
|
this.dateSortSelectorVisible = false;
|
|
136
145
|
}
|
|
137
146
|
};
|
|
@@ -235,13 +244,30 @@ export class SortFilterBar
|
|
|
235
244
|
? this.getSortDisplayOption(SortField.relevance)
|
|
236
245
|
: nothing}
|
|
237
246
|
</li>
|
|
238
|
-
<li
|
|
247
|
+
<li>
|
|
248
|
+
${this.getSortDisplayOption(SortField.weeklyview, {
|
|
249
|
+
clickEvent: () => {
|
|
250
|
+
if (!this.viewOptionSelected)
|
|
251
|
+
this.setSelectedSort(SortField.weeklyview);
|
|
252
|
+
this.viewSortSelectorVisible = !this.viewSortSelectorVisible;
|
|
253
|
+
this.dateSortSelectorVisible = false;
|
|
254
|
+
this.alphaSelectorVisible = null;
|
|
255
|
+
this.selectedTitleFilter = null;
|
|
256
|
+
this.selectedCreatorFilter = null;
|
|
257
|
+
this.emitTitleLetterChangedEvent();
|
|
258
|
+
this.emitCreatorLetterChangedEvent();
|
|
259
|
+
},
|
|
260
|
+
displayName: html`${this.viewSortField}`,
|
|
261
|
+
isSelected: () => this.viewOptionSelected,
|
|
262
|
+
})}
|
|
263
|
+
</li>
|
|
239
264
|
<li>
|
|
240
265
|
${this.getSortDisplayOption(SortField.title, {
|
|
241
266
|
clickEvent: () => {
|
|
242
267
|
this.alphaSelectorVisible = 'title';
|
|
243
268
|
this.selectedCreatorFilter = null;
|
|
244
269
|
this.dateSortSelectorVisible = false;
|
|
270
|
+
this.viewSortSelectorVisible = false;
|
|
245
271
|
this.setSelectedSort(SortField.title);
|
|
246
272
|
this.emitCreatorLetterChangedEvent();
|
|
247
273
|
},
|
|
@@ -253,6 +279,7 @@ export class SortFilterBar
|
|
|
253
279
|
if (!this.dateOptionSelected)
|
|
254
280
|
this.setSelectedSort(SortField.date);
|
|
255
281
|
this.dateSortSelectorVisible = !this.dateSortSelectorVisible;
|
|
282
|
+
this.viewSortSelectorVisible = false;
|
|
256
283
|
this.alphaSelectorVisible = null;
|
|
257
284
|
this.selectedTitleFilter = null;
|
|
258
285
|
this.selectedCreatorFilter = null;
|
|
@@ -366,7 +393,7 @@ export class SortFilterBar
|
|
|
366
393
|
</li>
|
|
367
394
|
<li>
|
|
368
395
|
<button
|
|
369
|
-
id="
|
|
396
|
+
id="list-detail-button"
|
|
370
397
|
@click=${() => {
|
|
371
398
|
this.displayMode = 'list-detail';
|
|
372
399
|
}}
|
|
@@ -378,7 +405,7 @@ export class SortFilterBar
|
|
|
378
405
|
</li>
|
|
379
406
|
<li>
|
|
380
407
|
<button
|
|
381
|
-
id="list-button"
|
|
408
|
+
id="list-compact-button"
|
|
382
409
|
@click=${() => {
|
|
383
410
|
this.displayMode = 'list-compact';
|
|
384
411
|
}}
|
|
@@ -414,6 +441,26 @@ export class SortFilterBar
|
|
|
414
441
|
`;
|
|
415
442
|
}
|
|
416
443
|
|
|
444
|
+
private get viewSortSelector() {
|
|
445
|
+
return html`
|
|
446
|
+
<div
|
|
447
|
+
id="view-sort-selector-backdrop"
|
|
448
|
+
@keyup=${() => {
|
|
449
|
+
this.viewSortSelectorVisible = false;
|
|
450
|
+
}}
|
|
451
|
+
@click=${() => {
|
|
452
|
+
this.viewSortSelectorVisible = false;
|
|
453
|
+
}}
|
|
454
|
+
></div>
|
|
455
|
+
<div id="view-sort-selector">
|
|
456
|
+
<ul>
|
|
457
|
+
<li>${this.getDateSortButton(SortField.alltimeview)}</li>
|
|
458
|
+
<li>${this.getDateSortButton(SortField.weeklyview)}</li>
|
|
459
|
+
</ul>
|
|
460
|
+
</div>
|
|
461
|
+
`;
|
|
462
|
+
}
|
|
463
|
+
|
|
417
464
|
private getDateSortButton(sortField: SortField) {
|
|
418
465
|
return html`
|
|
419
466
|
<button
|
|
@@ -429,6 +476,7 @@ export class SortFilterBar
|
|
|
429
476
|
|
|
430
477
|
private selectDateSort(sortField: SortField) {
|
|
431
478
|
this.dateSortSelectorVisible = false;
|
|
479
|
+
this.viewSortSelectorVisible = false;
|
|
432
480
|
this.setSelectedSort(sortField);
|
|
433
481
|
}
|
|
434
482
|
|
|
@@ -462,6 +510,24 @@ export class SortFilterBar
|
|
|
462
510
|
return dateSortFields.includes(this.selectedSort);
|
|
463
511
|
}
|
|
464
512
|
|
|
513
|
+
/**
|
|
514
|
+
* There are two view sort options.
|
|
515
|
+
*
|
|
516
|
+
* This checks to see if the current sort is one of them.
|
|
517
|
+
*
|
|
518
|
+
* @readonly
|
|
519
|
+
* @private
|
|
520
|
+
* @type {boolean}
|
|
521
|
+
* @memberof SortFilterBar
|
|
522
|
+
*/
|
|
523
|
+
private get viewOptionSelected(): boolean {
|
|
524
|
+
const viewSortFields: SortField[] = [
|
|
525
|
+
SortField.alltimeview,
|
|
526
|
+
SortField.weeklyview,
|
|
527
|
+
];
|
|
528
|
+
return viewSortFields.includes(this.selectedSort);
|
|
529
|
+
}
|
|
530
|
+
|
|
465
531
|
/**
|
|
466
532
|
* The display name of the current date field
|
|
467
533
|
*
|
|
@@ -478,6 +544,22 @@ export class SortFilterBar
|
|
|
478
544
|
return name;
|
|
479
545
|
}
|
|
480
546
|
|
|
547
|
+
/**
|
|
548
|
+
* The display name of the current view field
|
|
549
|
+
*
|
|
550
|
+
* @readonly
|
|
551
|
+
* @private
|
|
552
|
+
* @type {string}
|
|
553
|
+
* @memberof SortFilterBar
|
|
554
|
+
*/
|
|
555
|
+
private get viewSortField(): string {
|
|
556
|
+
const defaultSort = SortFieldDisplayName[SortField.weeklyview];
|
|
557
|
+
const name = this.viewOptionSelected
|
|
558
|
+
? SortFieldDisplayName[this.selectedSort] ?? defaultSort
|
|
559
|
+
: defaultSort;
|
|
560
|
+
return name;
|
|
561
|
+
}
|
|
562
|
+
|
|
481
563
|
private get titleSelectorBar() {
|
|
482
564
|
return html` <alpha-bar
|
|
483
565
|
.selectedLetter=${this.selectedTitleFilter}
|
|
@@ -607,7 +689,8 @@ export class SortFilterBar
|
|
|
607
689
|
cursor: default;
|
|
608
690
|
}
|
|
609
691
|
|
|
610
|
-
#date-sort-selector
|
|
692
|
+
#date-sort-selector,
|
|
693
|
+
#view-sort-selector {
|
|
611
694
|
position: absolute;
|
|
612
695
|
left: 150px;
|
|
613
696
|
top: 45px;
|
|
@@ -619,7 +702,8 @@ export class SortFilterBar
|
|
|
619
702
|
border: 1px solid #404142;
|
|
620
703
|
}
|
|
621
704
|
|
|
622
|
-
#date-sort-selector button
|
|
705
|
+
#date-sort-selector button,
|
|
706
|
+
#view-sort-selector button {
|
|
623
707
|
background: none;
|
|
624
708
|
border-radius: 15px;
|
|
625
709
|
color: #404142;
|
|
@@ -632,7 +716,8 @@ export class SortFilterBar
|
|
|
632
716
|
padding: 0.5rem 1.2rem;
|
|
633
717
|
}
|
|
634
718
|
|
|
635
|
-
#date-sort-selector button.selected
|
|
719
|
+
#date-sort-selector button.selected,
|
|
720
|
+
#view-sort-selector button.selected {
|
|
636
721
|
background-color: #404142;
|
|
637
722
|
color: white;
|
|
638
723
|
}
|
|
@@ -679,7 +764,8 @@ export class SortFilterBar
|
|
|
679
764
|
display: none;
|
|
680
765
|
}
|
|
681
766
|
|
|
682
|
-
#date-sort-selector-backdrop
|
|
767
|
+
#date-sort-selector-backdrop,
|
|
768
|
+
#view-sort-selector-backdrop {
|
|
683
769
|
position: fixed;
|
|
684
770
|
top: 0;
|
|
685
771
|
left: 0;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/* eslint-disable import/no-duplicates */
|
|
2
2
|
import { expect, fixture } from '@open-wc/testing';
|
|
3
3
|
import { html } from 'lit';
|
|
4
|
+
import sinon from 'sinon';
|
|
5
|
+
import type { InfiniteScroller } from '@internetarchive/infinite-scroller';
|
|
4
6
|
import type { CollectionBrowser } from '../src/collection-browser';
|
|
5
7
|
import '../src/collection-browser';
|
|
6
8
|
import { MockSearchService } from './mocks/mock-search-service';
|
|
@@ -59,4 +61,45 @@ describe('Collection Browser', () => {
|
|
|
59
61
|
'boop',
|
|
60
62
|
]);
|
|
61
63
|
});
|
|
64
|
+
it('refreshes when certain properties change', async () => {
|
|
65
|
+
const searchService = new MockSearchService();
|
|
66
|
+
const collectionNameCache = new MockCollectionNameCache();
|
|
67
|
+
const el = await fixture<CollectionBrowser>(
|
|
68
|
+
html`<collection-browser
|
|
69
|
+
.searchService=${searchService}
|
|
70
|
+
.collectionNameCache=${collectionNameCache}
|
|
71
|
+
></collection-browser>`
|
|
72
|
+
);
|
|
73
|
+
const infiniteScrollerRefreshSpy = sinon.spy();
|
|
74
|
+
|
|
75
|
+
const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');
|
|
76
|
+
(infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;
|
|
77
|
+
expect(infiniteScrollerRefreshSpy.called).to.be.false;
|
|
78
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
|
|
79
|
+
|
|
80
|
+
// testing: `loggedIn`
|
|
81
|
+
el.loggedIn = true;
|
|
82
|
+
await el.updateComplete;
|
|
83
|
+
expect(infiniteScrollerRefreshSpy.called).to.be.true;
|
|
84
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);
|
|
85
|
+
|
|
86
|
+
el.loggedIn = false;
|
|
87
|
+
await el.updateComplete;
|
|
88
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);
|
|
89
|
+
|
|
90
|
+
// testing: `displayMode`
|
|
91
|
+
el.displayMode = 'list-compact';
|
|
92
|
+
await el.updateComplete;
|
|
93
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);
|
|
94
|
+
|
|
95
|
+
// testing: `baseNavigationUrl`
|
|
96
|
+
el.baseNavigationUrl = 'https://funtestsite.com';
|
|
97
|
+
await el.updateComplete;
|
|
98
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);
|
|
99
|
+
|
|
100
|
+
// testing: `baseImageUrl`
|
|
101
|
+
el.baseImageUrl = 'https://funtestsiteforimages.com';
|
|
102
|
+
await el.updateComplete;
|
|
103
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);
|
|
104
|
+
});
|
|
62
105
|
});
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/* eslint-disable import/no-duplicates */
|
|
2
|
+
import { expect, fixture } from '@open-wc/testing';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import type { SortFilterBar } from '../../src/sort-filter-bar/sort-filter-bar';
|
|
5
|
+
import type { SortField } from '../../src/models';
|
|
6
|
+
|
|
7
|
+
import '../../src/sort-filter-bar/sort-filter-bar';
|
|
8
|
+
|
|
9
|
+
describe('Sort direction buttons', () => {
|
|
10
|
+
it('should render sort direction button', async () => {
|
|
11
|
+
const el = await fixture<SortFilterBar>(html`
|
|
12
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
13
|
+
`);
|
|
14
|
+
|
|
15
|
+
el.sortDirection = 'asc'; // selected sort
|
|
16
|
+
await el.updateComplete;
|
|
17
|
+
|
|
18
|
+
const sortDirectionButtonList = el.shadowRoot?.querySelector(
|
|
19
|
+
'#sort-direction-selector'
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const sortByAscButton = sortDirectionButtonList?.querySelector(
|
|
23
|
+
'#sort-ascending-btn'
|
|
24
|
+
);
|
|
25
|
+
expect(sortByAscButton).to.exist;
|
|
26
|
+
// ascending order button is selected
|
|
27
|
+
expect(sortByAscButton?.getAttribute('class')).to.equal(
|
|
28
|
+
'sort-button selected'
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const sortByDescButton = sortDirectionButtonList?.querySelector(
|
|
32
|
+
'#sort-descending-btn'
|
|
33
|
+
);
|
|
34
|
+
expect(sortByDescButton).to.exist;
|
|
35
|
+
// descending order button is not selected
|
|
36
|
+
expect(sortByDescButton?.getAttribute('class')).to.not.equal(
|
|
37
|
+
'sort-button selected'
|
|
38
|
+
);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe('Sort selector default buttons', async () => {
|
|
43
|
+
const el = await fixture<SortFilterBar>(html`
|
|
44
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
45
|
+
`);
|
|
46
|
+
const sortSelectorContainer = el.shadowRoot?.querySelector(
|
|
47
|
+
'#desktop-sort-selector'
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
it('should render sort-by label', async () => {
|
|
51
|
+
expect(sortSelectorContainer?.children.item(0)?.textContent).to.equal(
|
|
52
|
+
'Sort By'
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('should render default relevance-sort selector', async () => {
|
|
57
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
58
|
+
.item(1)
|
|
59
|
+
?.querySelector('a');
|
|
60
|
+
expect(defaultSortSelector?.textContent).to.contain('Relevance');
|
|
61
|
+
expect(defaultSortSelector?.getAttribute('class')).to.equal('selected');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should render default view-sort selector', async () => {
|
|
65
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
66
|
+
.item(2)
|
|
67
|
+
?.querySelector('a');
|
|
68
|
+
expect(defaultSortSelector?.textContent).to.contain('Weekly Views');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should render active view-sort selectors', async () => {
|
|
72
|
+
el.selectedSort = 'alltimeview' as SortField;
|
|
73
|
+
await el.updateComplete;
|
|
74
|
+
|
|
75
|
+
const defaultSortSelector =
|
|
76
|
+
sortSelectorContainer?.querySelector('a.selected');
|
|
77
|
+
expect(defaultSortSelector?.textContent).to.contain('All-time Views');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('should render default title-sort selector', async () => {
|
|
81
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
82
|
+
.item(3)
|
|
83
|
+
?.querySelector('a');
|
|
84
|
+
expect(defaultSortSelector?.textContent).to.contain('Title');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('should render default date-sort selector', async () => {
|
|
88
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
89
|
+
.item(4)
|
|
90
|
+
?.querySelector('a');
|
|
91
|
+
expect(defaultSortSelector?.textContent).to.contain('Date Published');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('should render active date-sort selectors', async () => {
|
|
95
|
+
el.selectedSort = 'datereviewed' as SortField;
|
|
96
|
+
await el.updateComplete;
|
|
97
|
+
|
|
98
|
+
const defaultSortSelector =
|
|
99
|
+
sortSelectorContainer?.querySelector('a.selected');
|
|
100
|
+
expect(defaultSortSelector?.textContent).to.contain('Date Reviewed');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('should render default creator-sort selector', async () => {
|
|
104
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
105
|
+
.item(5)
|
|
106
|
+
?.querySelector('a');
|
|
107
|
+
expect(defaultSortSelector?.textContent).to.contain('Creator');
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('click event on view-sort selector', async () => {
|
|
111
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
112
|
+
.item(2)
|
|
113
|
+
?.querySelector('a');
|
|
114
|
+
|
|
115
|
+
await defaultSortSelector?.click();
|
|
116
|
+
expect(el.selectedSort).to.equal('weeklyview');
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('click event on title selector', async () => {
|
|
120
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
121
|
+
.item(3)
|
|
122
|
+
?.querySelector('a');
|
|
123
|
+
|
|
124
|
+
await defaultSortSelector?.click();
|
|
125
|
+
expect(el.selectedSort).to.equal('title');
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('click event on date-sort selector', async () => {
|
|
129
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
130
|
+
.item(4)
|
|
131
|
+
?.querySelector('a');
|
|
132
|
+
|
|
133
|
+
await defaultSortSelector?.click();
|
|
134
|
+
expect(el.selectedSort).to.equal('date');
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('click event on creator selector', async () => {
|
|
138
|
+
const defaultSortSelector = sortSelectorContainer?.children
|
|
139
|
+
.item(5)
|
|
140
|
+
?.querySelector('a');
|
|
141
|
+
|
|
142
|
+
await defaultSortSelector?.click();
|
|
143
|
+
expect(el.selectedSort).to.equal('creator');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe('Display mode/style buttons', () => {
|
|
148
|
+
it('should render all display mode buttons', async () => {
|
|
149
|
+
const el = await fixture<SortFilterBar>(html`
|
|
150
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
151
|
+
`);
|
|
152
|
+
|
|
153
|
+
const displayModeButtonList = el.shadowRoot
|
|
154
|
+
?.querySelector('#display-style-selector')
|
|
155
|
+
?.querySelector('ul');
|
|
156
|
+
|
|
157
|
+
const gridButton = displayModeButtonList?.children
|
|
158
|
+
.item(0)
|
|
159
|
+
?.querySelector('#grid-button');
|
|
160
|
+
expect(gridButton).to.exist;
|
|
161
|
+
|
|
162
|
+
const detailListButton = displayModeButtonList?.children
|
|
163
|
+
.item(1)
|
|
164
|
+
?.querySelector('#list-detail-button');
|
|
165
|
+
expect(detailListButton).to.exist;
|
|
166
|
+
|
|
167
|
+
const compactListButton = displayModeButtonList?.children
|
|
168
|
+
.item(2)
|
|
169
|
+
?.querySelector('#list-compact-button');
|
|
170
|
+
expect(compactListButton).to.exist;
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it('should active current display mode', async () => {
|
|
174
|
+
const el = await fixture<SortFilterBar>(html`
|
|
175
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
176
|
+
`);
|
|
177
|
+
|
|
178
|
+
el.displayMode = 'grid';
|
|
179
|
+
await el.updateComplete;
|
|
180
|
+
|
|
181
|
+
const displayModeTitle = el.shadowRoot
|
|
182
|
+
?.querySelector('#display-style-selector')
|
|
183
|
+
?.querySelector('button.active')
|
|
184
|
+
?.getAttribute('title');
|
|
185
|
+
expect(displayModeTitle).to.equal('Tile view');
|
|
186
|
+
});
|
|
187
|
+
});
|
package/dist/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { CollectionBrowser } from './src/collection-browser';
|
|
2
|
-
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';
|
|
3
|
-
export { CollectionDisplayMode } from './src/models';
|
|
4
|
-
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';
|
|
5
|
-
export { CollectionTile } from './src/tiles/grid/collection-tile';
|
|
6
|
-
export { AccountTile } from './src/tiles/grid/account-tile';
|
|
7
|
-
export { ItemTile } from './src/tiles/grid/item-tile';
|
|
8
|
-
export { TileList } from './src/tiles/list/tile-list';
|
|
9
|
-
export { TileListCompact } from './src/tiles/list/tile-list-compact';
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAyB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC","sourcesContent":["export { CollectionBrowser } from './src/collection-browser';\nexport { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';\nexport { CollectionDisplayMode } from './src/models';\nexport { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';\nexport { CollectionTile } from './src/tiles/grid/collection-tile';\nexport { AccountTile } from './src/tiles/grid/account-tile';\nexport { ItemTile } from './src/tiles/grid/item-tile';\nexport { TileList } from './src/tiles/list/tile-list';\nexport { TileListCompact } from './src/tiles/list/tile-list-compact';\n"]}
|
package/dist/src/app-root.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
-
import '../src/collection-browser';
|
|
3
|
-
export declare class AppRoot extends LitElement {
|
|
4
|
-
private searchService;
|
|
5
|
-
private resizeObserver;
|
|
6
|
-
private localCache;
|
|
7
|
-
private collectionNameCache;
|
|
8
|
-
private currentPage?;
|
|
9
|
-
private searchQuery?;
|
|
10
|
-
private cellWidth;
|
|
11
|
-
private cellHeight;
|
|
12
|
-
private rowGap;
|
|
13
|
-
private colGap;
|
|
14
|
-
private loggedIn;
|
|
15
|
-
private baseQueryField;
|
|
16
|
-
private pageNumberInput;
|
|
17
|
-
private collectionBrowser;
|
|
18
|
-
private searchPressed;
|
|
19
|
-
private changePagePressed;
|
|
20
|
-
protected updated(changed: PropertyValues): void;
|
|
21
|
-
private queryUpdated;
|
|
22
|
-
render(): import("lit-html").TemplateResult<1>;
|
|
23
|
-
private baseQueryChanged;
|
|
24
|
-
private loginChanged;
|
|
25
|
-
private outlineChanged;
|
|
26
|
-
private rowGapChanged;
|
|
27
|
-
private colGapChanged;
|
|
28
|
-
private widthChanged;
|
|
29
|
-
private heightChanged;
|
|
30
|
-
private visiblePageChanged;
|
|
31
|
-
static styles: import("lit").CSSResult;
|
|
32
|
-
}
|